diff --git a/Source/HBIOS/flashfs.asm b/Source/HBIOS/flashfs.asm index b69b557e..9c93111c 100644 --- a/Source/HBIOS/flashfs.asm +++ b/Source/HBIOS/flashfs.asm @@ -178,9 +178,9 @@ FF_IINIT: PUSH IY ; PUT BANK AND SECTOR POP BC ; DATA IN BC ; - LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK -; + HB_DI CALL JPHL ; EXECUTE FF_IDENT + HB_EI ; LD HL,(FF_STACK) ; RESTORE ORIGINAL LD SP,HL ; STACK POSITION @@ -202,7 +202,6 @@ FF_IINIT: ;====================================================================== ; FF_IDENT: ; THIS CODE GETS RELOCATED TO THE STACK - HB_DI ; PUSH AF ; SAVE CURRENT BANK LD A,B ; SELECT BANK @@ -221,7 +220,6 @@ FF_IDENT: ; THIS CODE GETS RELOCATED TO THE STACK ; POP AF ; RETURN TO ORIGINAL BANK CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY - HB_EI ; RET ; @@ -260,9 +258,9 @@ FF_EINIT: PUSH IY ; PUT BANK AND SECTOR POP BC ; DATA IN BC ; - LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK -; + HB_DI CALL JPHL ; EXECUTE FF_ERASE + HB_EI ; LD HL,(FF_STACK) ; RESTORE ORIGINAL LD SP,HL ; STACK POSITION @@ -285,25 +283,23 @@ FF_EINIT: ;====================================================================== ; FF_ERASE: ; THIS CODE GETS RELOCATED TO THE STACK - HB_DI ; PUSH AF ; SAVE CURRENT BANK LD A,B ; SELECT BANK CALL HBX_BNKSEL ; TO PROGRAM ; - LD HL,$5555 - LD A,$AA ; LD A,$AA ; COMMAND - LD (HL),A ; LD ($5555),A ; SETUP + LD HL,$5555 ; LD A,$AA ; COMMAND + LD (HL),$AA ; LD ($5555),A ; SETUP LD A,L ; LD A,$55 LD ($2AAA),A ; LD ($2AAA),A - LD A,$80 ; LD A,$80 - LD (HL),A ; LD ($5555),A - LD A,$AA ; LD A,$AA - LD (HL),A ; LD ($5555),A - LD A,L ; LD A,$55 - LD ($2AAA),A ; LD ($2AAA),A - LD A,$10 ; LD A,$10 - LD (HL),A ; LD ($5555),A + LD (HL),$80 ; LD A,$80 + LD (HL),$AA ; LD ($5555),A + LD A,L ; LD A,$AA + LD ($2AAA),A ; LD ($5555),A + LD (HL),$10 ; LD A,$55 + ; LD ($2AAA),A + ; LD A,$10 + ; LD ($5555),A ; LD A,(HL) ; DO TWO SUCCESSIVE READS FROM THE SAME FLASH ADDRESS. FF_WT2: LD C,(HL) ; IF TOGGLE BIT (BIT 6) @@ -328,8 +324,6 @@ FF_WT1: LD C,0 ; SET SUCCESS STATUS FF_WT3: POP AF ; LD A,B ; RETURN TO ORIGINAL BANK CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY - HB_EI -; RET ; FF_E_SZ .EQU $-FF_ERASE ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED @@ -340,6 +334,7 @@ FF_E_SZ .EQU $-FF_ERASE ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ; ON ENTRY DE:HL CONTAINS 32 BIT MEMORY ADDRESS. ; ON EXIT I,B CONTAINS BANK SELECT BYTE ; Y,C CONTAINS HIGH BYTE OF SECTOR ADDRESS +; A CONTAINS CURRENT BANK HB_CURBNK ; ; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL ; 3322222222221111 1111110000000000 @@ -374,6 +369,8 @@ FF_CALCA: CALL PRTHEXWORD ; DISPLAY BANK AND CALL PC_SPACE ; SECTOR RESULT #ENDIF +; + LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK ; RET ; @@ -416,9 +413,9 @@ FF_SINIT: CALL PRTHEXWORD #ENDIF ; - LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK -; + HB_DI CALL JPHL ; CALL FF_SERASE + HB_EI ; LD HL,(FF_STACK) ; RESTORE ORIGINAL LD SP,HL ; STACK POSITION @@ -431,7 +428,7 @@ FF_SINIT: CALL PC_SPACE #ENDIF ; - LD A,C ; STATUS + LD A,C ; RETURN WITH STATUS IN A RET ; ;====================================================================== @@ -448,22 +445,21 @@ FF_SINIT: ;====================================================================== ; FF_SERASE: ; THIS CODE GETS RELOCATED TO THE STACK - HB_DI ; PUSH AF ; SAVE CURRENT BANK LD A,B ; SELECT BANK CALL HBX_BNKSEL ; TO PROGRAM -; - LD A,$AA ; COMMAND - LD ($5555),A ; SETUP - LD A,$55 - LD ($2AAA),A - LD A,$80 - LD ($5555),A - LD A,$AA - LD ($5555),A - LD A,$55 - LD ($2AAA),A + ; + LD HL,$5555 ; LD A,$AA ; COMMAND + LD A,L ; LD ($5555),A ; SETUP + LD (HL),$AA ; LD A,$55 + LD ($2AAA),A ; LD ($2AAA),A + LD (HL),$80 ; LD A,$80 + LD (HL),$AA ; LD ($5555),A + LD ($2AAA),A ; LD A,$AA + ; LD ($5555),A + ; LD A,$55 + ; LD ($2AAA),A LD H,C ; SECTOR LD L,$00 ; ADDRESS @@ -471,13 +467,13 @@ FF_SERASE: ; THIS CODE GETS RELOCATED TO THE STACK LD A,$30 ; SECTOR ERASE LD (HL),A ; COMMAND ; - LD DE,$0000 ; DEBUG COUNT +; LD DE,$0000 ; DEBUG COUNT ; LD A,(HL) ; DO TWO SUCCESSIVE READS FF_WT4: LD C,(HL) ; FROM THE SAME FLASH ADDRESS. XOR C ; IF THE SAME ON BOTH READS BIT 6,A ; THEN ERASE IS COMPLETE SO EXIT. - INC DE ; +; INC DE ; JR Z,FF_WT5 ; BIT 6 = 0 IF SAME ON SUCCESSIVE READS = COMPLETE ; BIT 6 = 1 IF DIFF ON SUCCESSIVE READS = INCOMPLETE ; @@ -497,7 +493,6 @@ FF_WT4: LD C,(HL) ; FROM THE SAME FLASH ADDRESS. FF_WT5: LD C,0 ; SET SUCCESS STATUS FF_WT6: POP AF ; RETURN TO ORIGINAL BANK CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY - HB_EI ; RET ; @@ -542,9 +537,9 @@ FF_WINIT: PUSH IY ; PUT BANK AND SECTOR POP BC ; DATA IN BC ; - LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK -; + HB_DI CALL JPHL ; CALL FF_SWRITE + HB_EI ; LD HL,(FF_STACK) ; RESTORE ORIGINAL LD SP,HL ; STACK POSITION @@ -556,7 +551,7 @@ FF_WINIT: CALL PC_SPACE #ENDIF ; - XOR A ; STATUS + XOR A ; SET SUCCESS STATUS RET ; ;====================================================================== @@ -575,19 +570,18 @@ FF_WINIT: ;====================================================================== ; FF_SWRITE: ; THIS CODE GETS RELOCATED TO THE STACK - HB_DI -; - LD DE,$0000 ; INITIALIZE BYTE COUNT -; - LD H,C ; SECTOR - LD L,$00 ; ADDRESS ; PUSH AF ; SAVE CURRENT BANK LD A,B ; SELECT BANK CALL HBX_BNKSEL ; TO PROGRAM +; + LD H,C ; SECTOR + LD L,$00 ; ADDRESS + LD D,L ; INITIALIZE + LD E,L ; BYTE COUNT ; FF_WR1: - LD B,(IX+0) ; READ IN BYTE + LD C,(IX+0) ; READ IN BYTE ; LD A,$AA ; COMMAND LD ($5555),A ; SETUP @@ -597,7 +591,7 @@ FF_WR1: LD A,$A0 ; WRITE LD ($5555),A ; COMMAND ; - LD (HL),B ; WRITE OUT BYTE + LD (HL),C ; WRITE OUT BYTE ; ; ; DO TWO SUCCESSIVE READS LD A,(HL) ; FROM THE SAME FLASH ADDRESS. @@ -605,17 +599,16 @@ FF_WT7: LD C,(HL) ; IF TOGGLE BIT (BIT 6) XOR C ; IS THE SAME ON BOTH READS BIT 6,A ; THEN ERASE IS COMPLETE SO EXIT. JR NZ,FF_WT7 ; Z TRUE IF BIT 6=0 I.E. "NO TOGGLE" WAS DETECTED. - +; INC HL ; NEXT DESTINATION LOCATION INC IX ; NEXT SOURCE LOCATION - +; INC DE ; CONTINUE WRITING UNTIL BIT 4,D ; WE HAVE DONE ONE SECTOR JR Z,FF_WR1 - +; POP AF ; RETURN TO ORIGINAL BANK CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY - HB_EI ; RET ;