|
|
|
@ -261,7 +261,13 @@ MD_RW: |
|
|
|
MD_RW1: |
|
|
|
PUSH BC ; SAVE COUNTERS |
|
|
|
LD HL,(MD_RWFNADR) ; GET PENDING IO FUNCTION ADDRESS |
|
|
|
#IF (MDFFENABLE) |
|
|
|
PUSH IX |
|
|
|
CALL JPHL ; ... AND CALL IT |
|
|
|
POP IX |
|
|
|
#ELSE |
|
|
|
CALL JPHL ; ... AND CALL IT |
|
|
|
#ENDIF |
|
|
|
JR NZ,MD_RW2 ; IF ERROR, SKIP INCREMENT |
|
|
|
; INCREMENT LBA |
|
|
|
LD A,MD_LBA ; LBA OFFSET IN CFG ENTRY |
|
|
|
@ -297,7 +303,7 @@ MD_RDSECF: ; CALLED FROM MD_RW |
|
|
|
POP HL ; BLOCK WE HAVE |
|
|
|
JR Z,MD_SECM ; IN THE BUFFER |
|
|
|
; |
|
|
|
MD_SECR: |
|
|
|
;MD_SECR: |
|
|
|
; DESIRED SECTOR |
|
|
|
; IS NOT IN BUFFER |
|
|
|
LD (MD_LBA4K),BC ; WE WILL READ IN |
|
|
|
@ -307,10 +313,10 @@ MD_SECR: |
|
|
|
; |
|
|
|
; DE:HL CONTAIN SOURCE ADDRESS |
|
|
|
; WHICH WAS SETUP BY MD_IOSETUPF |
|
|
|
PUSH IX |
|
|
|
; |
|
|
|
LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS |
|
|
|
CALL MD_FREAD ; READ 4K SECTOR |
|
|
|
POP IX |
|
|
|
LD BC,MD_FREAD_R ; PUT ROUTINE TO CALL |
|
|
|
CALL FF_FNCALL ; EXECUTE: READ 4K SECTOR |
|
|
|
; |
|
|
|
MD_SECM: |
|
|
|
LD A,(IY+MD_LBA+0) ; GET SECTOR WITHIN 4K BLOCK |
|
|
|
@ -332,7 +338,7 @@ MD_SECM: |
|
|
|
; |
|
|
|
; ON EXIT |
|
|
|
; BC = LBA 4K BLOCK WE ARE ACCESSING |
|
|
|
; DE:HL = MEMORY ADDRESS TO READ FROM IN FLASH |
|
|
|
; DE:HL = MEMORY ADDRESS TO ACCESS IN FLASH |
|
|
|
; |
|
|
|
MD_IOSETUPF: |
|
|
|
LD L,(IY+MD_LBA+0) ; HL := LOW WORD OF LBA |
|
|
|
@ -369,15 +375,13 @@ MD_WRSECF: ; CALLED FROM MD_RW |
|
|
|
; |
|
|
|
LD (MD_LBA4K),BC ; SAVE 4K LBA |
|
|
|
; |
|
|
|
PUSH IX |
|
|
|
LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS |
|
|
|
CALL MD_FREAD ; READ 4K SECTOR |
|
|
|
POP IX |
|
|
|
LD BC,MD_FREAD_R ; PUT ROUTINE TO CALL |
|
|
|
CALL FF_FNCALL ; EXECUTE: READ 4K SECTOR |
|
|
|
; |
|
|
|
MD_SECM1: ; DESIRED SECTOR IS IN BUFFER |
|
|
|
PUSH IX |
|
|
|
CALL MD_FERAS ; ERASE 4K SECTOR |
|
|
|
POP IX |
|
|
|
LD BC,MD_FERAS_R ; PUT ROUTINE TO CALL |
|
|
|
CALL FF_FNCALL ; EXECUTE: ERASE 4K SECTOR |
|
|
|
OR A |
|
|
|
RET NZ ; RETURN IF ERROR |
|
|
|
; |
|
|
|
@ -403,10 +407,9 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER |
|
|
|
POP DE |
|
|
|
POP HL |
|
|
|
; |
|
|
|
PUSH IX |
|
|
|
LD IX,MD_F4KBUF ; WRITE THE SECTOR |
|
|
|
CALL MD_FWRIT |
|
|
|
POP IX |
|
|
|
LD IX,MD_F4KBUF ; SET SOURCE ADDRESS |
|
|
|
LD BC,MD_FWRIT_R ; PUT ROUTINE TO CALL |
|
|
|
CALL FF_FNCALL ; EXECUTE: WRITE 4K SECTOR |
|
|
|
; |
|
|
|
XOR A |
|
|
|
; |
|
|
|
@ -648,18 +651,17 @@ FF_PROBE: |
|
|
|
LD A,'=' ; NUMBER |
|
|
|
CALL COUT |
|
|
|
#ENDIF |
|
|
|
CALL MD_FIDENT ; GET ID AT THIS ADDRESS |
|
|
|
LD BC,MD_FIDENT_R ; PUT ROUTINE TO CALL |
|
|
|
CALL FF_FNCALL ; EXECUTE: IDENTIFY FLASH CHIP |
|
|
|
|
|
|
|
PUSH HL |
|
|
|
; PUSH DE |
|
|
|
LD HL,MD_TGTDEV ; IF WE MATCH WITH |
|
|
|
XOR A ; A NON 39SF040 |
|
|
|
SBC HL,BC ; CHIP SET THE |
|
|
|
LD A,(MD_FFSEN) ; R/W FLAG TO R/O |
|
|
|
OR H |
|
|
|
OR L |
|
|
|
LD (MD_FFSEN),A ; A NON ZERO VALUE |
|
|
|
; POP DE ; MEANS WE CAN'T |
|
|
|
OR L ; A NON ZERO VALUE |
|
|
|
LD (MD_FFSEN),A ; MEANS WE CAN'T |
|
|
|
POP HL ; ENABLE FLASH WRITING |
|
|
|
#IF (MD_FVBS==1) |
|
|
|
CALL MD_LAND ; LOOKUP AND DISPLAY |
|
|
|
@ -693,8 +695,6 @@ MD_LAND: |
|
|
|
; |
|
|
|
#IF (MD_FDBG==1) |
|
|
|
PRTS(" ID:$") |
|
|
|
; LD H,C |
|
|
|
; LD L,B |
|
|
|
CALL PRTHEXWORD ; DISPLAY FLASH ID |
|
|
|
CALL PC_SPACE |
|
|
|
#ENDIF |
|
|
|
@ -732,15 +732,45 @@ FF_NXT2: |
|
|
|
CALL PRTSTR ; AFTER SEARCH DISPLAY THE RESULT |
|
|
|
#ENDIF |
|
|
|
RET |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
;COMMON FUNCTION CALL |
|
|
|
; 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 |
|
|
|
; |
|
|
|
; 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 |
|
|
|
; |
|
|
|
; 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 |
|
|
|
|
|
|
|
; 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 |
|
|
|
; |
|
|
|
; GENERAL OPERATION: |
|
|
|
; CALCULATE BANK AND ADDRESS DATA FROM ENTRY ADDRESS |
|
|
|
; COPY FLASH CODE TO CODE BUFFER |
|
|
|
; CALL RELOCATED FLASH CODE |
|
|
|
; RETURN WITH ID CODE. |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
FF_FNCALL: ; USING HBX_BUF FOR CODE AREA |
|
|
|
CALL FF_CALCA ; GET BANK AND SECTOR DATA IN IY |
|
|
|
FF_FNCALL: |
|
|
|
PUSH HL ; USING HBX_BUF FOR CODE AREA |
|
|
|
PUSH DE |
|
|
|
PUSH BC |
|
|
|
CALL FF_CALCA ; GET BANK AND SECTOR DATA IN BC |
|
|
|
; |
|
|
|
POP HL ; GET ROUTINE TO CALL |
|
|
|
PUSH BC |
|
|
|
; |
|
|
|
LD DE,HBX_BUF ; EXECUTE / START ADDRESS |
|
|
|
LD BC,HBX_BUFSIZ ; MAX. CODE SIZE POSSIBLE |
|
|
|
@ -749,8 +779,7 @@ FF_FNCALL: ; USING HBX_BUF FOR CODE AREA |
|
|
|
LD D,B ; PRESET DE TO ZERO TO REDUCE |
|
|
|
LD E,B ; CODE SIZE IN RELOCATABLE CODE |
|
|
|
; |
|
|
|
PUSH IY ; PUT BANK AND SECTOR |
|
|
|
POP BC ; DATA IN BC |
|
|
|
POP BC ; PUT BANK AND SECTOR DATA IN BC |
|
|
|
; |
|
|
|
#IF (MD_FDBG==1) |
|
|
|
CALL PRTHEXWORD |
|
|
|
@ -773,15 +802,14 @@ FF_FNCALL: ; USING HBX_BUF FOR CODE AREA |
|
|
|
LD A,C ; RETURN WITH STATUS IN A |
|
|
|
POP DE |
|
|
|
POP HL |
|
|
|
POP IY |
|
|
|
RET ; RETURN TO MD_READF, MD_WRITEF |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS |
|
|
|
; |
|
|
|
; 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 |
|
|
|
; ON EXIT B CONTAINS BANK SELECT BYTE |
|
|
|
; C CONTAINS HIGH BYTE OF SECTOR ADDRESS |
|
|
|
; A CONTAINS CURRENT BANK HB_CURBNK |
|
|
|
; |
|
|
|
; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL |
|
|
|
@ -809,9 +837,6 @@ FF_CALCA: |
|
|
|
RRA ; ADDRESS THAT GETS WRITTEN |
|
|
|
AND $70 ; TO BANK SELECT PORT |
|
|
|
LD C,A |
|
|
|
; |
|
|
|
PUSH BC |
|
|
|
POP IY |
|
|
|
; |
|
|
|
#IF (MD_FDBG==1) |
|
|
|
CALL PRTHEXWORD ; DISPLAY BANK AND |
|
|
|
@ -823,32 +848,6 @@ FF_CALCA: |
|
|
|
RET |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; IDENTIFY FLASH CHIP. |
|
|
|
; CALCULATE BANK AND ADDRESS DATA FROM ENTRY ADDRESS |
|
|
|
; CREATE A CODE BUFFER IN HIGH MEMORY AREA |
|
|
|
; COPY FLASH CODE TO CODE BUFFER |
|
|
|
; CALL RELOCATED FLASH IDENTITY CODE |
|
|
|
; RESTORE STACK |
|
|
|
; RETURN WITH ID CODE. |
|
|
|
; |
|
|
|
; 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. |
|
|
|
; NO STATUS IS RETURNED |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
MD_FIDENT: |
|
|
|
PUSH IY |
|
|
|
PUSH HL |
|
|
|
PUSH DE |
|
|
|
; |
|
|
|
PUSH HL ; SAVE ADDRESS INFO |
|
|
|
LD HL,MD_FIDENT_R ; PUT ROUTINE TO CALL |
|
|
|
EX (SP),HL ; ON THE STACK |
|
|
|
; |
|
|
|
JP FF_FNCALL ; EXECUTE |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; FLASH IDENTIFY |
|
|
|
; SELECT THE APPROPRIATE BANK / ADDRESS |
|
|
|
; ISSUE ID COMMAND |
|
|
|
@ -893,31 +892,6 @@ MD_FIDENT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
.FILL 8,0 ; STACK SPACE |
|
|
|
MD_FIST .DW 0 ; SAVE STACK |
|
|
|
MD_I_SZ .EQU $-MD_FIDENT_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
|
|
|
|
;====================================================================== |
|
|
|
; ERASE FLASH SECTOR |
|
|
|
; |
|
|
|
; ON ENTRY DE:HL CONTAINS 32 BIT MEMORY ADDRESS. |
|
|
|
; CALCULATE BANK AND ADDRESS DATA FROM ENTRY ADDRESS |
|
|
|
; CREATE A CODE BUFFER IN HIGH MEMORY AREA |
|
|
|
; COPY FLASH CODE TO CODE BUFFER |
|
|
|
; CALL RELOCATED FLASH ERASE CODE |
|
|
|
; RESTORE STACK |
|
|
|
; RETURN WITH STATUS CODE. |
|
|
|
; |
|
|
|
; ON ENTRY DE:HL POINTS TO AN ADDRESS IDENTIFYING THE CHIP |
|
|
|
; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
MD_FERAS: |
|
|
|
PUSH IY |
|
|
|
PUSH HL |
|
|
|
PUSH DE |
|
|
|
; |
|
|
|
PUSH HL ; SAVE ADDRESS INFO |
|
|
|
LD HL,MD_FERAS_R ; PUT ROUTINE TO CALL |
|
|
|
EX (SP),HL ; ON THE STACK |
|
|
|
JP FF_FNCALL ; EXECUTE |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; ERASE FLASH SECTOR. |
|
|
|
@ -995,37 +969,6 @@ FF_WT6: POP AF ; RETURN TO ORIGINAL BANK |
|
|
|
MD_S_SZ .EQU $-MD_FERAS_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; READ FLASH SECTOR OF 4096 BYTES |
|
|
|
; |
|
|
|
; SET ADDRESS TO START OF SECTOR |
|
|
|
; CALCULATE BANK AND ADDRESS DATA FROM SECTOR START ADDRESS |
|
|
|
; CREATE A CODE BUFFER IN HIGH MEMORY AREA |
|
|
|
; COPY FLASH CODE TO CODE BUFFER |
|
|
|
; CALL RELOCATED FLASH READ SECTOR CODE |
|
|
|
; RESTORE STACK |
|
|
|
; |
|
|
|
; ON ENTRY DE:HL POINTS TO A 32 BIT MEMORY ADDRESS. |
|
|
|
; IX POINTS TO WHERE TO SAVE DATA |
|
|
|
; ON EXIT NO STATUS IS RETURNED |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
MD_FREAD: |
|
|
|
PUSH IY |
|
|
|
PUSH HL |
|
|
|
PUSH DE |
|
|
|
; |
|
|
|
LD L,0 ; CHANGE ADDRESS |
|
|
|
LD A,H ; TO SECTOR BOUNDARY |
|
|
|
AND $F0 ; BY MASKING OFF |
|
|
|
LD H,A ; LOWER 12 BITS |
|
|
|
; |
|
|
|
PUSH HL ; SAVE ADDRESS INFO |
|
|
|
LD HL,MD_FREAD_R ; PUT ROUTINE TO CALL |
|
|
|
EX (SP),HL ; ON THE STACK |
|
|
|
JP FF_FNCALL ; EXECUTE |
|
|
|
; |
|
|
|
RET |
|
|
|
;====================================================================== |
|
|
|
; FLASH READ SECTOR. |
|
|
|
; |
|
|
|
; SELECT THE APPROPRIATE BANK / ADDRESS |
|
|
|
@ -1079,36 +1022,6 @@ MD_FRST .DW 0 ; SAVE STACK |
|
|
|
MD_R_SZ .EQU $-MD_FREAD_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; WRITE FLASH SECTOR OF 4096 BYTES |
|
|
|
; |
|
|
|
; SET ADDRESS TO START OF SECTOR |
|
|
|
; CALCULATE BANK AND ADDRESS DATA FROM SECTOR START ADDRESS |
|
|
|
; CREATE A CODE BUFFER IN HIGH MEMORY AREA |
|
|
|
; COPY FLASH CODE TO CODE BUFFER |
|
|
|
; CALL RELOCATED FLASH WRITE SECTOR CODE |
|
|
|
; RESTORE STACK |
|
|
|
; |
|
|
|
; ON ENTRY DE:HL POINTS TO A 32 BIT MEMORY ADDRESS. |
|
|
|
; IX POINTS TO DATA TO BE WRITTEN |
|
|
|
; ON EXIT NO STATUS IS RETURNED |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
MD_FWRIT: |
|
|
|
PUSH IY |
|
|
|
PUSH HL |
|
|
|
PUSH DE |
|
|
|
; |
|
|
|
LD L,0 ; CHANGE ADDRESS |
|
|
|
LD A,H ; TO SECTOR BOUNDARY |
|
|
|
AND $F0 ; BY MASKING OFF |
|
|
|
LD H,A ; LOWER 12 BITS |
|
|
|
; |
|
|
|
PUSH HL ; SAVE ADDRESS INFO |
|
|
|
LD HL,MD_FWRIT_R ; PUT ROUTINE TO CALL |
|
|
|
EX (SP),HL ; ON THE STACK |
|
|
|
JP FF_FNCALL ; EXECUTE |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; FLASH WRITE SECTOR. |
|
|
|
; |
|
|
|
; SELECT THE APPROPRIATE BANK / ADDRESS |
|
|
|
|