|
|
|
@ -37,9 +37,6 @@ MD_FIDEN_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY |
|
|
|
; |
|
|
|
MD_I_SZ .EQU $-MD_FIDEN_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
.ECHO "MD_FIDEN_R occupies " |
|
|
|
.ECHO MD_I_SZ |
|
|
|
.ECHO " bytes.\n" |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; ERASE FLASH SECTOR. |
|
|
|
@ -102,9 +99,6 @@ MD_WT6: POP AF ; RETURN TO ORIGINAL BANK |
|
|
|
JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY |
|
|
|
; |
|
|
|
MD_S_SZ .EQU $-MD_FERAS_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
.ECHO "MD_FERAS_R occupies " |
|
|
|
.ECHO MD_S_SZ |
|
|
|
.ECHO " bytes.\n" |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; FLASH READ SECTOR. |
|
|
|
@ -151,9 +145,6 @@ MD_FRD1:LD A,B ; CHANGE TO SOURCE BANK |
|
|
|
RET |
|
|
|
; |
|
|
|
MD_R_SZ .EQU $-MD_FREAD_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
.ECHO "MD_FREAD_R occupies " |
|
|
|
.ECHO MD_R_SZ |
|
|
|
.ECHO " bytes.\n" |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; FLASH VERIFY SECTOR. |
|
|
|
@ -203,9 +194,6 @@ MD_FVE2:POP AF |
|
|
|
RET |
|
|
|
; |
|
|
|
MD_V_SZ .EQU $-MD_FVERI_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
.ECHO "MD_FVERI_R occupies " |
|
|
|
.ECHO MD_V_SZ |
|
|
|
.ECHO " bytes.\n" |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; FLASH WRITE SECTOR. |
|
|
|
@ -268,6 +256,118 @@ MD_FWR2:LD A,(HL) ; FROM THE SAME FLASH ADDRESS. |
|
|
|
JP HBX_BNKSEL ; RETURN TO ORIGINAL BANK WHICH IS OUR RAM BIOS COPY |
|
|
|
; |
|
|
|
MD_W_SZ .EQU $-MD_FWRIT_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
.ECHO "MD_FWRIT_R occupies " |
|
|
|
.ECHO MD_W_SZ |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; ERASE FLASH CHIP. |
|
|
|
; |
|
|
|
; SELECT THE APPROPRIATE BANK / ADDRESS |
|
|
|
; ISSUE ERASE COMMAND |
|
|
|
; POLL TOGGLE BIT FOR COMPLETION STATUS. |
|
|
|
; SELECT ORIGINAL BANK |
|
|
|
; |
|
|
|
; ON ENTRY BC CONTAINS BANK AND SECTOR DATA |
|
|
|
; A CONTAINS CURRENT BANK |
|
|
|
; ON EXIT A RETURNS STATUS 0=SUCCESS FF=FAIL |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
.DB MD_E_SZ ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
MD_FERAC_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
; |
|
|
|
PUSH AF ; SAVE CURRENT BANK |
|
|
|
LD A,B ; SELECT BANK |
|
|
|
CALL HBX_BNKSEL ; TO PROGRAM |
|
|
|
; |
|
|
|
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 (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 |
|
|
|
; |
|
|
|
FF_WT2: LD A,(HL) ; DO TWO SUCCESSIVE READS FROM THE SAME FLASH ADDRESS. |
|
|
|
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 Z,FF_WT1 ; Z TRUE IF BIT 6=0 I.E. "NO TOGGLE" WAS DETECTED. |
|
|
|
; |
|
|
|
LD A,C ; OPERATION IS NOT COMPLETE. CHECK TIMEOUT BIT (BIT 5). |
|
|
|
BIT 5,C ; IF NO TIMEOUT YET THEN LOOP BACK AND KEEP CHECKING TOGGLE STATUS |
|
|
|
JR Z,FF_WT2 ; IF BIT 5=0 THEN RETRY; NZ TRUE IF BIT 5=1 |
|
|
|
; |
|
|
|
LD A,(HL) ; WE GOT A TIMEOUT. RECHECK TOGGLE BIT IN CASE WE DID COMPLETE |
|
|
|
XOR (HL) ; THE OPERATION. DO TWO SUCCESSIVE READS. ARE THEY THE SAME? |
|
|
|
BIT 6,A ; IF THEY ARE THEN OPERATION WAS COMPLETED |
|
|
|
JR Z,FF_WT1 ; OTHERWISE ERASE OPERATION FAILED OR TIMED OUT. |
|
|
|
; |
|
|
|
LD (HL),$F0 ; WRITE DEVICE RESET |
|
|
|
LD C,$FF ; SET FAIL STATUS |
|
|
|
JR FF_WT3 |
|
|
|
; |
|
|
|
FF_WT1: LD C,0 ; SET SUCCESS STATUS |
|
|
|
FF_WT3: POP AF |
|
|
|
; LD A,B ; RETURN TO ORIGINAL BANK |
|
|
|
JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY |
|
|
|
; |
|
|
|
MD_E_SZ .EQU $-MD_FERAC_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
|
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
; RELOCATABLE CODE SPACE REQUIREMENTS CHECK |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
MD_CSIZE .EQU 0 |
|
|
|
; |
|
|
|
#IF (MD_W_SZ>MD_CSIZE) |
|
|
|
MD_CSIZE .SET MD_W_SZ |
|
|
|
#ENDIF |
|
|
|
#IF (MD_S_SZ>MD_CSIZE) |
|
|
|
MD_CSIZE .SET MD_S_SZ |
|
|
|
#ENDIF |
|
|
|
#IF (MD_I_SZ>MD_CSIZE) |
|
|
|
MD_CSIZE .SET MD_I_SZ |
|
|
|
#ENDIF |
|
|
|
#IF (MD_R_SZ>MD_CSIZE) |
|
|
|
MD_CSIZE .SET MD_R_SZ |
|
|
|
#ENDIF |
|
|
|
#IF (MD_V_SZ>MD_CSIZE) |
|
|
|
MD_CSIZE .SET MD_V_SZ |
|
|
|
#ENDIF |
|
|
|
#IF (MD_E_SZ>MD_CSIZE) |
|
|
|
MD_CSIZE .SET MD_E_SZ |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (MD_CSIZE>64) |
|
|
|
.ECHO "Warning: Flash code exceeds available space by " |
|
|
|
.ECHO MD_CSIZE-64 |
|
|
|
.ECHO " bytes.\n" |
|
|
|
.ECHO "MD_FIDEN_R " |
|
|
|
.ECHO MD_I_SZ |
|
|
|
.ECHO "\n" |
|
|
|
; |
|
|
|
.ECHO "MD_FREAD_R " |
|
|
|
.ECHO MD_R_SZ |
|
|
|
.ECHO "\n" |
|
|
|
; |
|
|
|
.ECHO "MD_FVERI_R " |
|
|
|
.ECHO MD_V_SZ |
|
|
|
.ECHO "\n" |
|
|
|
; |
|
|
|
.ECHO "MD_FERAS_R " |
|
|
|
.ECHO MD_S_SZ |
|
|
|
.ECHO "\n" |
|
|
|
; |
|
|
|
.ECHO "MD_FWRIT_R " |
|
|
|
.ECHO MD_W_SZ |
|
|
|
.ECHO "\n" |
|
|
|
; |
|
|
|
.ECHO "MD_FERAC_R " |
|
|
|
.ECHO MD_E_SZ |
|
|
|
.ECHO "\n" |
|
|
|
#ENDIF |