From dc302afece42d9fa5784f938f888a106de128e3a Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 26 Dec 2020 10:32:06 +0800 Subject: [PATCH 1/9] Update md.asm Further optimization of loops utilizing alternate register AF' --- Source/HBIOS/md.asm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index dc130510..c1b80605 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -1101,13 +1101,10 @@ MD_FWRIT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY ; LD H,C ; SECTOR LD L,D ; ADDRESS -; - PUSH AF ; SAVE CURRENT BANK ; MD_FWRI1: - POP AF ; SELECT BANK - PUSH AF ; TO READ - CALL HBX_BNKSEL + CALL HBX_BNKSEL ; SELECT BANK TO READ + EX AF,AF' ; SAVE CURRENT BANK ; LD C,(IX+0) ; READ IN BYTE ; @@ -1133,13 +1130,14 @@ MD_FW7: LD A,(HL) ; FROM THE SAME FLASH ADDRESS. ; INC HL ; NEXT DESTINATION LOCATION INC IX ; NEXT SOURCE LOCATION +; + EX AF,AF' ; RESTORE CURRENT BANK ; INC DE ; CONTINUE WRITING UNTIL BIT 4,D ; WE HAVE DONE ONE SECTOR JR Z,MD_FWRI1 ; - POP AF ; RETURN TO ORIGINAL BANK - JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY + JP HBX_BNKSEL ; RETURN TO ORIGINAL BANK WHICH IS OUR RAM BIOS COPY ; ; RET ; From 8d445533e76aba95fa15cf5a8162de5535ee704b Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 26 Dec 2020 10:32:45 +0800 Subject: [PATCH 2/9] Update Build.ps1 minor --- Source/HBIOS/Build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index 327f9a6f..bd74126c 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -100,7 +100,7 @@ $env:PATH = $TasmPath + ';' + $CpmToolsPath + ';' + $env:PATH # Initialize working variables $OutDir = "../../Binary" # Output directory for final image file $RomFmt = "wbw_rom${RomSize}" # Location of files to imbed in ROM disk -$BlankROM = "Blank${RomSize}KB.dat" # An initial "empty" image for the ROM disk of propoer size +$BlankROM = "Blank${RomSize}KB.dat" # An initial "empty" image for the ROM disk of proper size $RomDiskFile = "RomDisk.tmp" # Temporary filename used to create ROM disk image $RomFile = "${OutDir}/${RomName}.rom" # Final name of ROM image $ComFile = "${OutDir}/${RomName}.com" # Final name of COM image (command line loadable HBIOS/CBIOS) From a6ebdca9580fa8c34d4769f36fe69493db83ae09 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 26 Dec 2020 16:58:22 +0800 Subject: [PATCH 3/9] Update md.asm --- Source/HBIOS/md.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index c1b80605..e7958d2a 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -938,7 +938,7 @@ MD_I_SZ .EQU $-MD_FIDENT_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ; MD_FERAS_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY ; - PUSH AF ; SAVE CURRENT BANK + EX AF,AF' ; SAVE CURRENT BANK LD A,B ; SELECT BANK CALL HBX_BNKSEL ; TO PROGRAM ; @@ -979,7 +979,7 @@ MD_WT4: LD A,(HL) ; DO TWO SUCCESSIVE READS JR MD_WT6 MD_WT5: LD C,L ; SET SUCCESS STATUS ; -MD_WT6: POP AF ; RETURN TO ORIGINAL BANK +MD_WT6: EX AF,AF' ; RETURN TO ORIGINAL BANK JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY ; ; RET From 83e102a043843cebae56aa483a47e2bbcb7bfa7b Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 27 Dec 2020 10:52:25 +0800 Subject: [PATCH 4/9] Update md.asm Calculate bank and sector only when needed --- Source/HBIOS/md.asm | 119 ++++++++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 49 deletions(-) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index e7958d2a..a53485ac 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -304,13 +304,16 @@ MD_RDSECF: ; CALLED FROM MD_RW POP HL ; BLOCK WE HAVE JR Z,MD_SECM ; IN THE BUFFER ; -;MD_SECR: + + ; DESIRED SECTOR ; IS NOT IN BUFFER LD (MD_LBA4K),BC ; WE WILL READ IN ; A NEW 4K SECTOR. ; SAVE THE 4K LBA ; FOR FUTURE CHECKS + + CALL MD_CALBAS ; SETUP BANK AND SECTOR ; ; DE:HL CONTAIN SOURCE ADDRESS ; WHICH WAS SETUP BY MD_IOSETUPF @@ -349,7 +352,7 @@ MD_IOSETUPF: LD A,L ; SAVE LBA 4K AND %11111000 ; BLOCK WE ARE LD C,A ; GOING TO - LD A,H ; ACCESS + LD B,H ; ACCESS ; LD D,0 ; CONVERT LBA LD E,H ; TO ADDRESS @@ -357,10 +360,58 @@ MD_IOSETUPF: LD L,D ; DE:HL = HLX512 SLA H RL E - RL D + RL D + +; CALL MD_CALCA ; RET ; +;====================================================================== +; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS +; +; ON ENTRY DE:HL CONTAINS 32 BIT MEMORY ADDRESS. +; ON EXIT B CONTAINS BANK SELECT BYTE +; C CONTAINS HIGH BYTE OF SECTOR ADDRESS +; +; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL +; 3322222222221111 1111110000000000 +; 1098765432109876 5432109876543210 +; XXXXXXXXXXXXSSSS SSSSXXXXXXXXXXXX < S = SECTOR +; XXXXXXXXXXXXBBBB BXXXXXXXXXXXXXXX < B = BANK +;====================================================================== +; +MD_CALBAS: +; +#IF (MD_FDBG==1) + CALL PC_SPACE ; DISPLAY SECTOR + CALL PRTHEX32 ; SECTOR ADDRESS + CALL PC_SPACE ; IN DE:HL +#ENDIF +; + PUSH HL + PUSH BC + LD A,E ; BOTTOM PORTION OF SECTOR + AND $0F ; ADDRESS THAT GETS WRITTEN + RLC H ; WITH ERASE COMMAND BYTE + RLA ; A15 GETS DROPPED OFF AND + LD B,A ; ADDED TO BANK SELECT +; + LD A,H ; TOP SECTION OF SECTOR + RRA ; ADDRESS THAT GETS WRITTEN + AND $70 ; TO BANK SELECT PORT + LD C,A + + POP HL +; + LD (MD_FBAS),BC ; SAVE BANK AND SECTOR FOR USE IN FLASH ROUTINES +; +#IF (MD_FDBG==1) + CALL PRTHEXWORD ; DISPLAY BANK AND + CALL PC_SPACE ; SECTOR RESULT +#ENDIF +; + POP BC + RET ; ; WRITE FLASH ; @@ -375,6 +426,8 @@ MD_WRSECF: ; CALLED FROM MD_RW JR Z,MD_SECM1 ; IN THE BUFFER ; LD (MD_LBA4K),BC ; SAVE 4K LBA +; + CALL MD_CALBAS ; SETUP BANK AND SECTOR ; LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS LD BC,MD_FREAD_R ; PUT ROUTINE TO CALL @@ -436,6 +489,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER RET ; MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR +MD_FBAS .DW $FFFF ; BANK AND SECTOR #ENDIF ; ; READ RAM / ROM @@ -634,6 +688,8 @@ MDSTR_LEN .TEXT "LEN=$" ; ; INSPIRED BY WILL SOWERBUTTS FLASH4 UTILITY - https://github.com/willsowerbutts/flash4/ ; +; REFERENCE ww1.microchip.com/downloads/en/DeviceDoc/SST39SF040.txt +; ;================================================================================================== ; #IF (MDFFENABLE) @@ -670,6 +726,7 @@ MD_PROBE: LD A,'=' ; NUMBER CALL COUT #ENDIF + CALL MD_CALBAS ; SETUP BANK AND SECTOR LD BC,MD_FIDENT_R ; PUT ROUTINE TO CALL CALL MD_FNCALL ; EXECUTE: IDENTIFY FLASH CHIP @@ -794,11 +851,14 @@ FF_NXT2: MD_FNCALL: PUSH HL ; USING HBX_BUF FOR CODE AREA PUSH DE - PUSH BC - CALL MD_CALCA ; GET BANK AND SECTOR DATA IN BC + + PUSH BC ; GET ROUTINE TO CALL + POP HL + +; CALL MD_CALCA ; GET BANK AND SECTOR DATA IN BC ; - POP HL ; GET ROUTINE TO CALL - PUSH BC + +; PUSH BC ; LD DE,HBX_BUF ; EXECUTE / START ADDRESS LD BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES @@ -807,7 +867,8 @@ MD_FNCALL: LD D,B ; PRESET DE TO ZERO TO REDUCE LD E,B ; CODE SIZE IN RELOCATABLE CODE ; - POP BC ; PUT BANK AND SECTOR DATA IN BC +; POP BC ; PUT BANK AND SECTOR DATA IN BC + LD BC,(MD_FBAS) ; PUT BANK AND SECTOR DATA IN BC ; #IF (MD_FDBG==1) CALL PRTHEXWORD @@ -842,47 +903,7 @@ MD_FNCALL: POP HL RET ; RETURN TO MD_READF, MD_WRITEF ; -MD_SAVSTK .DW 0 -; -;====================================================================== -; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS -; -; ON ENTRY DE:HL CONTAINS 32 BIT MEMORY ADDRESS. -; ON EXIT B CONTAINS BANK SELECT BYTE -; C CONTAINS HIGH BYTE OF SECTOR ADDRESS -; -; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL -; 3322222222221111 1111110000000000 -; 1098765432109876 5432109876543210 -; XXXXXXXXXXXXSSSS SSSSXXXXXXXXXXXX < S = SECTOR -; XXXXXXXXXXXXBBBB BXXXXXXXXXXXXXXX < B = BANK -;====================================================================== -; -MD_CALCA: -; -#IF (MD_FDBG==1) - CALL PC_SPACE ; DISPLAY SECTOR - CALL PRTHEX32 ; SECTOR ADDRESS - CALL PC_SPACE ; IN DE:HL -#ENDIF -; - LD A,E ; BOTTOM PORTION OF SECTOR - AND $0F ; ADDRESS THAT GETS WRITTEN - RLC H ; WITH ERASE COMMAND BYTE - RLA ; A15 GETS DROPPED OFF AND - LD B,A ; ADDED TO BANK SELECT -; - LD A,H ; TOP SECTION OF SECTOR - RRA ; ADDRESS THAT GETS WRITTEN - AND $70 ; TO BANK SELECT PORT - LD C,A -; -#IF (MD_FDBG==1) - CALL PRTHEXWORD ; DISPLAY BANK AND - CALL PC_SPACE ; SECTOR RESULT -#ENDIF -; - RET +MD_SAVSTK .DW 0 ; ;====================================================================== ; FLASH IDENTIFY From 7ee5a68880f18aea970448a7909f97a7f4280ddd Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 27 Dec 2020 11:06:49 +0800 Subject: [PATCH 5/9] Update md.asm cleanup --- Source/HBIOS/md.asm | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index a53485ac..53c122f4 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -361,8 +361,6 @@ MD_IOSETUPF: SLA H RL E RL D - -; CALL MD_CALCA ; RET ; @@ -817,32 +815,30 @@ FF_NXT2: ; COMMON FUNCTION CALL FOR: ; ; MD_FIDENT_R - IDENTIFY FLASH CHIP -; ON ENTRY DE:HL POINTS TO AN ADDRESS WITH THE ADDRESS RANGE OF THE -; CHIP TO BE IDENTIFIED. -; ON EXIT BC CONTAINS THE CHIP ID BYTES. -; A NO STATUS IS RETURNED +; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; ON EXIT BC CONTAINS THE CHIP ID BYTES. +; A NO STATUS IS RETURNED ; ; MD_FERAS_R - ERASE FLASH SECTOR -; ON ENTRY DE:HL POINTS TO A 32 BIT MEMORY ADDRESS. -; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL +; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL ; ; MD_FREAD_R - READ FLASH SECTOR -; ON ENTRY DE:HL POINTS TO A 32 BIT MEMORY ADDRESS. -; IX POINTS TO WHERE TO SAVE DATA -; ON EXIT A NO STATUS IS RETURNED +; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; IX POINTS TO WHERE TO SAVE DATA +; ON EXIT A NO STATUS IS RETURNED ; ; MD_VERI_R - VERIFY FLASH SECTOR -; ON ENTRY DE:HL POINTS TO A 32 BIT MEMORY ADDRESS. -; IX POINTS TO DATA TO COMPARE. -; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL +; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; IX POINTS TO DATA TO COMPARE. +; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL ; ; MD_FWRIT_R - WRITE FLASH SECTOR -; ON ENTRY DE:HL POINTS TO A 32 BIT MEMORY ADDRESS. -; IX POINTS TO DATA TO BE WRITTEN -; ON EXIT A NO STATUS IS RETURNED +; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; IX POINTS TO DATA TO BE WRITTEN +; ON EXIT A NO STATUS IS RETURNED ; ; GENERAL OPERATION: -; CALCULATE BANK AND ADDRESS DATA FROM ENTRY ADDRESS ; COPY FLASH CODE TO CODE BUFFER ; CALL RELOCATED FLASH CODE ; RETURN WITH ID CODE. @@ -854,11 +850,6 @@ MD_FNCALL: PUSH BC ; GET ROUTINE TO CALL POP HL - -; CALL MD_CALCA ; GET BANK AND SECTOR DATA IN BC -; - -; PUSH BC ; LD DE,HBX_BUF ; EXECUTE / START ADDRESS LD BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES @@ -867,7 +858,6 @@ MD_FNCALL: LD D,B ; PRESET DE TO ZERO TO REDUCE LD E,B ; CODE SIZE IN RELOCATABLE CODE ; -; POP BC ; PUT BANK AND SECTOR DATA IN BC LD BC,(MD_FBAS) ; PUT BANK AND SECTOR DATA IN BC ; #IF (MD_FDBG==1) From 822f433005b5832fdf47d3de781dea8c9bd5fff9 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 27 Dec 2020 11:27:51 +0800 Subject: [PATCH 6/9] Update md.asm stack use cleanup --- Source/HBIOS/md.asm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 53c122f4..3d49e84d 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -387,7 +387,6 @@ MD_CALBAS: #ENDIF ; PUSH HL - PUSH BC LD A,E ; BOTTOM PORTION OF SECTOR AND $0F ; ADDRESS THAT GETS WRITTEN RLC H ; WITH ERASE COMMAND BYTE @@ -408,7 +407,6 @@ MD_CALBAS: CALL PC_SPACE ; SECTOR RESULT #ENDIF ; - POP BC RET ; ; WRITE FLASH @@ -436,9 +434,6 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER CALL MD_FNCALL ; EXECUTE: ERASE 4K SECTOR OR A RET NZ ; RETURN IF ERROR -; - PUSH HL - PUSH DE ; ; COPY 512B SECTOR INTO 4K SECTOR ; @@ -455,9 +450,6 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER LD HL,(MD_DSKBUF) LD BC,512 ; COPY ONE 512B SECTOR FROM THE LDIR ; THE DISK BUFFER TO 4K SECTOR -; - POP DE - POP HL ; LD IX,MD_F4KBUF ; SET SOURCE ADDRESS LD BC,MD_FWRIT_R ; PUT ROUTINE TO CALL From 32c10712659fee8d5ff49c8146ef9bc5181184bb Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 27 Dec 2020 11:39:47 +0800 Subject: [PATCH 7/9] Update md.asm Sstack use optimization --- Source/HBIOS/md.asm | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 3d49e84d..14aed67d 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -319,7 +319,7 @@ MD_RDSECF: ; CALLED FROM MD_RW ; WHICH WAS SETUP BY MD_IOSETUPF ; LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS - LD BC,MD_FREAD_R ; PUT ROUTINE TO CALL + LD HL,MD_FREAD_R ; PUT ROUTINE TO CALL CALL MD_FNCALL ; EXECUTE: READ 4K SECTOR ; MD_SECM: @@ -426,11 +426,11 @@ MD_WRSECF: ; CALLED FROM MD_RW CALL MD_CALBAS ; SETUP BANK AND SECTOR ; LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS - LD BC,MD_FREAD_R ; PUT ROUTINE TO CALL + LD HL,MD_FREAD_R ; PUT ROUTINE TO CALL CALL MD_FNCALL ; EXECUTE: READ 4K SECTOR ; MD_SECM1: ; DESIRED SECTOR IS IN BUFFER - LD BC,MD_FERAS_R ; PUT ROUTINE TO CALL + LD HL,MD_FERAS_R ; PUT ROUTINE TO CALL CALL MD_FNCALL ; EXECUTE: ERASE 4K SECTOR OR A RET NZ ; RETURN IF ERROR @@ -452,25 +452,25 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER LDIR ; THE DISK BUFFER TO 4K SECTOR ; LD IX,MD_F4KBUF ; SET SOURCE ADDRESS - LD BC,MD_FWRIT_R ; PUT ROUTINE TO CALL + LD HL,MD_FWRIT_R ; PUT ROUTINE TO CALL CALL MD_FNCALL ; EXECUTE: WRITE 4K SECTOR ; XOR A ; PRESUME SUCCESS STATUS ; #IF (MD_FVAR==1) LD IX,MD_F4KBUF ; SET SOURCE ADDRESS - LD BC,MD_FVERI_R ; PUT ROUTINE TO CALL + LD HL,MD_FVERI_R ; PUT ROUTINE TO CALL CALL MD_FNCALL ; EXECUTE: VERIFY 4K SECTOR ; OR A RET Z ; RETURN IF SUCCESSFUL ; LD IX,MD_F4KBUF ; SET SOURCE ADDRESS ; RETRY - LD BC,MD_FWRIT_R ; PUT ROUTINE TO CALL ; WRITE + LD HL,MD_FWRIT_R ; PUT ROUTINE TO CALL ; WRITE CALL MD_FNCALL ; EXECUTE: WRITE 4K SECTOR ; ONCE ; LD IX,MD_F4KBUF ; SET SOURCE ADDRESS ; VERIFY - LD BC,MD_FVERI_R ; PUT ROUTINE TO CALL ; AGAIN + LD HL,MD_FVERI_R ; PUT ROUTINE TO CALL ; AGAIN CALL MD_FNCALL ; EXECUTE: VERIFY 4K SECTOR ; OR A ; SET FINAL STATUS AFTER RETRY @@ -716,11 +716,11 @@ MD_PROBE: LD A,'=' ; NUMBER CALL COUT #ENDIF + PUSH HL CALL MD_CALBAS ; SETUP BANK AND SECTOR - LD BC,MD_FIDENT_R ; PUT ROUTINE TO CALL + LD HL,MD_FIDENT_R ; PUT ROUTINE TO CALL CALL MD_FNCALL ; EXECUTE: IDENTIFY FLASH CHIP - PUSH HL LD HL,MD_TGTDEV ; IF WE MATCH WITH XOR A ; A NON 39SF040 SBC HL,BC ; CHIP SET THE @@ -836,12 +836,7 @@ FF_NXT2: ; RETURN WITH ID CODE. ;====================================================================== ; -MD_FNCALL: - PUSH HL ; USING HBX_BUF FOR CODE AREA - PUSH DE - - PUSH BC ; GET ROUTINE TO CALL - POP HL +MD_FNCALL: ; USING HBX_BUF FOR CODE AREA ; LD DE,HBX_BUF ; EXECUTE / START ADDRESS LD BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES @@ -881,8 +876,6 @@ MD_FNCALL: #ENDIF ; LD A,C ; RETURN WITH STATUS IN A - POP DE - POP HL RET ; RETURN TO MD_READF, MD_WRITEF ; MD_SAVSTK .DW 0 From 0de99d2436d9d704838610ae0d6f07b7bf3336ad Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 27 Dec 2020 11:48:45 +0800 Subject: [PATCH 8/9] Update md.asm cleanup --- Source/HBIOS/md.asm | 52 +++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 14aed67d..61c6ae33 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -299,24 +299,16 @@ MD_RDSECF: ; CALLED FROM MD_RW ; PUSH HL ; IS THE SECTOR LD HL,(MD_LBA4K) ; WE WANT TO - XOR A ; WRITE ALREADY + XOR A ; READ ALREADY SBC HL,BC ; IN THE 4K POP HL ; BLOCK WE HAVE - JR Z,MD_SECM ; IN THE BUFFER + JR Z,MD_SECM ; IN THE BUFFER? ; - - - ; DESIRED SECTOR - ; IS NOT IN BUFFER - LD (MD_LBA4K),BC ; WE WILL READ IN - ; A NEW 4K SECTOR. - ; SAVE THE 4K LBA - ; FOR FUTURE CHECKS - - CALL MD_CALBAS ; SETUP BANK AND SECTOR + ; DESIRED SECTOR IS NOT IN BUFFER + LD (MD_LBA4K),BC ; WE WILL READ IN A NEW 4K SECTOR. + ; SAVE THE 4K LBA FOR FUTURE CHECKS ; - ; DE:HL CONTAIN SOURCE ADDRESS - ; WHICH WAS SETUP BY MD_IOSETUPF + CALL MD_CALBAS ; SETUP BANK AND SECTOR ; LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS LD HL,MD_FREAD_R ; PUT ROUTINE TO CALL @@ -381,32 +373,32 @@ MD_IOSETUPF: MD_CALBAS: ; #IF (MD_FDBG==1) - CALL PC_SPACE ; DISPLAY SECTOR - CALL PRTHEX32 ; SECTOR ADDRESS - CALL PC_SPACE ; IN DE:HL + CALL PC_SPACE ; DISPLAY SECTOR + CALL PRTHEX32 ; SECTOR ADDRESS + CALL PC_SPACE ; IN DE:HL #ENDIF ; PUSH HL - LD A,E ; BOTTOM PORTION OF SECTOR - AND $0F ; ADDRESS THAT GETS WRITTEN - RLC H ; WITH ERASE COMMAND BYTE - RLA ; A15 GETS DROPPED OFF AND - LD B,A ; ADDED TO BANK SELECT -; - LD A,H ; TOP SECTION OF SECTOR - RRA ; ADDRESS THAT GETS WRITTEN - AND $70 ; TO BANK SELECT PORT + LD A,E ; BOTTOM PORTION OF SECTOR + AND $0F ; ADDRESS THAT GETS WRITTEN + RLC H ; WITH ERASE COMMAND BYTE + RLA ; A15 GETS DROPPED OFF AND + LD B,A ; ADDED TO BANK SELECT +; + LD A,H ; TOP SECTION OF SECTOR + RRA ; ADDRESS THAT GETS WRITTEN + AND $70 ; TO BANK SELECT PORT LD C,A POP HL ; - LD (MD_FBAS),BC ; SAVE BANK AND SECTOR FOR USE IN FLASH ROUTINES + LD (MD_FBAS),BC ; SAVE BANK AND SECTOR FOR USE IN FLASH ROUTINES ; #IF (MD_FDBG==1) - CALL PRTHEXWORD ; DISPLAY BANK AND - CALL PC_SPACE ; SECTOR RESULT + CALL PRTHEXWORD ; DISPLAY BANK AND + CALL PC_SPACE ; SECTOR RESULT #ENDIF -; + RET ; ; WRITE FLASH From 4ecbb98b17b329948d2275ca38174a8af0e919c4 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 27 Dec 2020 11:56:44 +0800 Subject: [PATCH 9/9] Update md.asm minor --- Source/HBIOS/md.asm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 61c6ae33..47160004 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -800,25 +800,30 @@ FF_NXT2: ; ; MD_FIDENT_R - IDENTIFY FLASH CHIP ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED ; ON EXIT BC CONTAINS THE CHIP ID BYTES. ; A NO STATUS IS RETURNED ; ; MD_FERAS_R - ERASE FLASH SECTOR ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED ; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL ; ; MD_FREAD_R - READ FLASH SECTOR ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED ; IX POINTS TO WHERE TO SAVE DATA ; ON EXIT A NO STATUS IS RETURNED ; ; MD_VERI_R - VERIFY FLASH SECTOR ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED ; IX POINTS TO DATA TO COMPARE. ; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL ; ; MD_FWRIT_R - WRITE FLASH SECTOR ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED +; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED ; IX POINTS TO DATA TO BE WRITTEN ; ON EXIT A NO STATUS IS RETURNED ;