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