|
|
|
@ -27,6 +27,7 @@ MD_AFSH .EQU %00111000 ; FLASH ATTRIBUTE |
|
|
|
; |
|
|
|
MD_FDBG .EQU 0 ; FLASH DEBUG CODE |
|
|
|
MD_FVBS .EQU 1 ; FLASH VERBOSE OUTPUT |
|
|
|
MD_FVAR .EQU 1 ; FLASH VERIFY AFTER WRITE |
|
|
|
; |
|
|
|
; DEVICE CONFIG TABLE (RAM DEVICE FIRST TO MAKE IT ALWAYS FIRST DRIVE) |
|
|
|
; |
|
|
|
@ -54,7 +55,7 @@ MD_CFGTBL: |
|
|
|
; |
|
|
|
MD_INIT: |
|
|
|
#IF (MDFFENABLE) |
|
|
|
CALL MD_FINIT ; PROBE FLASH CAPABILITY |
|
|
|
CALL MD_FINIT ; PROBE FLASH CAPABILITY |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
@ -411,7 +412,26 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER |
|
|
|
LD BC,MD_FWRIT_R ; PUT ROUTINE TO CALL |
|
|
|
CALL FF_FNCALL ; EXECUTE: WRITE 4K SECTOR |
|
|
|
; |
|
|
|
XOR A |
|
|
|
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 |
|
|
|
CALL FF_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 |
|
|
|
CALL FF_FNCALL ; EXECUTE: WRITE 4K SECTOR ; ONCE |
|
|
|
; |
|
|
|
LD IX,MD_F4KBUF ; SET SOURCE ADDRESS ; VERIFY |
|
|
|
LD BC,MD_FVERI_R ; PUT ROUTINE TO CALL ; AGAIN |
|
|
|
CALL FF_FNCALL ; EXECUTE: VERIFY 4K SECTOR |
|
|
|
; |
|
|
|
OR A ; SET FINAL STATUS AFTER RETRY |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -754,7 +774,12 @@ FF_NXT2: |
|
|
|
; 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 |
|
|
|
|
|
|
|
; |
|
|
|
; 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 |
|
|
|
; |
|
|
|
; MD_FWRIT_R - WRITE FLASH SECTOR |
|
|
|
; ON ENTRY DE:HL POINTS TO A 32 BIT MEMORY ADDRESS. |
|
|
|
; IX POINTS TO DATA TO BE WRITTEN |
|
|
|
@ -1024,6 +1049,65 @@ MD_FRD1: |
|
|
|
; |
|
|
|
MD_FRST .DW 0 ; SAVE STACK |
|
|
|
MD_R_SZ .EQU $-MD_FREAD_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
;====================================================================== |
|
|
|
; FLASH VERIFY SECTOR. |
|
|
|
; |
|
|
|
; SELECT THE APPROPRIATE BANK / ADDRESS |
|
|
|
; VERIFY SECTOR OF 4096 BYTES, BYTE AT A TIME |
|
|
|
; SELECT SOURCE BANK, READ DATA, |
|
|
|
; SELECT DESTINATION BANK, COMPARE DATA |
|
|
|
; DESTINATION BANK IS ALWAYS CURRENT BANK |
|
|
|
; |
|
|
|
; ON ENTRY BC CONTAINS BANK AND SECTOR DATA |
|
|
|
; DE = 0000 BYTE COUNT |
|
|
|
; IX POINTS TO DATA TO BE VERIFIED |
|
|
|
; A CONTAINS CURRENT BANK |
|
|
|
; ON EXIT NO STATUS RETURNED |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
MD_FVERI_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
; |
|
|
|
LD H,C ; SECTOR ; LOCAL STACK |
|
|
|
LD L,D ; ADDRESS ; LOCAL STACK |
|
|
|
LD (HBX_BUF+MD_FVST-MD_FVERI_R),SP ; SAVE STACK ; LOCAL STACK |
|
|
|
LD SP,HBX_BUF + (MD_FVE_S-MD_FVERI_R) ; SETUP TEMP STACK ; LOCAL STACK |
|
|
|
MD_FVE_S: |
|
|
|
; |
|
|
|
PUSH AF ; SAVE CURRENT BANK |
|
|
|
; |
|
|
|
MD_FVE1: |
|
|
|
LD A,B ; SELECT BANK |
|
|
|
CALL HBX_BNKSEL ; TO READ |
|
|
|
LD C,(HL) ; READ BYTE |
|
|
|
; |
|
|
|
POP AF |
|
|
|
PUSH AF ; SELECT BANK |
|
|
|
CALL HBX_BNKSEL ; TO WRITE |
|
|
|
; |
|
|
|
LD A,C |
|
|
|
SUB (IX+0) ; COMPARE BYTE |
|
|
|
LD C,A ; SET NON ZERO STATUS |
|
|
|
JR NZ,MD_FVE2 ; EXIT IF MISMATCH |
|
|
|
; |
|
|
|
INC HL ; NEXT SOURCE LOCATION |
|
|
|
INC IX ; NEXT DESTINATION LOCATION |
|
|
|
; |
|
|
|
INC DE ; CONTINUE READING UNTIL |
|
|
|
BIT 4,D ; WE HAVE DONE ONE SECTOR |
|
|
|
JR Z,MD_FVE1 |
|
|
|
; |
|
|
|
LD C,E ; SET SUCCESS STATUS = 0 |
|
|
|
; |
|
|
|
MD_FVE2: |
|
|
|
POP AF ; RETURN TO ORIGINAL BANK |
|
|
|
CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY |
|
|
|
; |
|
|
|
LD SP,(HBX_BUF+MD_FVST-MD_FVERI_R) ; RESTORE STACK |
|
|
|
; |
|
|
|
RET |
|
|
|
; |
|
|
|
MD_FVST .DW 0 ; SAVE STACK |
|
|
|
MD_V_SZ .EQU $-MD_FVERI_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; FLASH WRITE SECTOR. |
|
|
|
@ -1156,6 +1240,10 @@ MD_FFSEN .DB 00h ; FLASH FILES SYSTEM ENABLE |
|
|
|
.ECHO "MD_FREAD_R " |
|
|
|
.ECHO MD_R_SZ |
|
|
|
.ECHO "\n" |
|
|
|
; |
|
|
|
.ECHO "MD_VERI_R " |
|
|
|
.ECHO MD_V_SZ |
|
|
|
.ECHO "\n" |
|
|
|
; |
|
|
|
.ECHO "MD_FERAS_R " |
|
|
|
.ECHO MD_S_SZ |
|
|
|
@ -1180,6 +1268,9 @@ MD_CSIZE .SET MD_I_SZ |
|
|
|
#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_CSIZE>HBX_BUFSIZ) |
|
|
|
.ECHO "Warning: Flash code exceeds available space by " |
|
|
|
|