|
|
@ -304,13 +304,16 @@ MD_RDSECF: ; CALLED FROM MD_RW |
|
|
POP HL ; BLOCK WE HAVE |
|
|
POP HL ; BLOCK WE HAVE |
|
|
JR Z,MD_SECM ; IN THE BUFFER |
|
|
JR Z,MD_SECM ; IN THE BUFFER |
|
|
; |
|
|
; |
|
|
;MD_SECR: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; DESIRED SECTOR |
|
|
; DESIRED SECTOR |
|
|
; IS NOT IN BUFFER |
|
|
; IS NOT IN BUFFER |
|
|
LD (MD_LBA4K),BC ; WE WILL READ IN |
|
|
LD (MD_LBA4K),BC ; WE WILL READ IN |
|
|
; A NEW 4K SECTOR. |
|
|
; A NEW 4K SECTOR. |
|
|
; SAVE THE 4K LBA |
|
|
; SAVE THE 4K LBA |
|
|
; FOR FUTURE CHECKS |
|
|
; FOR FUTURE CHECKS |
|
|
|
|
|
|
|
|
|
|
|
CALL MD_CALBAS ; SETUP BANK AND SECTOR |
|
|
; |
|
|
; |
|
|
; DE:HL CONTAIN SOURCE ADDRESS |
|
|
; DE:HL CONTAIN SOURCE ADDRESS |
|
|
; WHICH WAS SETUP BY MD_IOSETUPF |
|
|
; WHICH WAS SETUP BY MD_IOSETUPF |
|
|
@ -349,7 +352,7 @@ MD_IOSETUPF: |
|
|
LD A,L ; SAVE LBA 4K |
|
|
LD A,L ; SAVE LBA 4K |
|
|
AND %11111000 ; BLOCK WE ARE |
|
|
AND %11111000 ; BLOCK WE ARE |
|
|
LD C,A ; GOING TO |
|
|
LD C,A ; GOING TO |
|
|
LD A,H ; ACCESS |
|
|
|
|
|
|
|
|
LD B,H ; ACCESS |
|
|
; |
|
|
; |
|
|
LD D,0 ; CONVERT LBA |
|
|
LD D,0 ; CONVERT LBA |
|
|
LD E,H ; TO ADDRESS |
|
|
LD E,H ; TO ADDRESS |
|
|
@ -357,10 +360,58 @@ MD_IOSETUPF: |
|
|
LD L,D ; DE:HL = HLX512 |
|
|
LD L,D ; DE:HL = HLX512 |
|
|
SLA H |
|
|
SLA H |
|
|
RL E |
|
|
RL E |
|
|
RL D |
|
|
|
|
|
|
|
|
RL D |
|
|
|
|
|
|
|
|
|
|
|
; CALL MD_CALCA |
|
|
; |
|
|
; |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
|
|
|
;====================================================================== |
|
|
|
|
|
; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS |
|
|
|
|
|
; |
|
|
|
|
|
; ON ENTRY DE:HL CONTAINS 32 BIT MEMORY ADDRESS. |
|
|
|
|
|
; ON EXIT B CONTAINS BANK SELECT BYTE |
|
|
|
|
|
; C CONTAINS HIGH BYTE OF SECTOR ADDRESS |
|
|
|
|
|
; |
|
|
|
|
|
; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL |
|
|
|
|
|
; 3322222222221111 1111110000000000 |
|
|
|
|
|
; 1098765432109876 5432109876543210 |
|
|
|
|
|
; XXXXXXXXXXXXSSSS SSSSXXXXXXXXXXXX < S = SECTOR |
|
|
|
|
|
; XXXXXXXXXXXXBBBB BXXXXXXXXXXXXXXX < B = BANK |
|
|
|
|
|
;====================================================================== |
|
|
|
|
|
; |
|
|
|
|
|
MD_CALBAS: |
|
|
|
|
|
; |
|
|
|
|
|
#IF (MD_FDBG==1) |
|
|
|
|
|
CALL PC_SPACE ; DISPLAY SECTOR |
|
|
|
|
|
CALL PRTHEX32 ; SECTOR ADDRESS |
|
|
|
|
|
CALL PC_SPACE ; IN DE:HL |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
PUSH HL |
|
|
|
|
|
PUSH BC |
|
|
|
|
|
LD A,E ; BOTTOM PORTION OF SECTOR |
|
|
|
|
|
AND $0F ; ADDRESS THAT GETS WRITTEN |
|
|
|
|
|
RLC H ; WITH ERASE COMMAND BYTE |
|
|
|
|
|
RLA ; A15 GETS DROPPED OFF AND |
|
|
|
|
|
LD B,A ; ADDED TO BANK SELECT |
|
|
|
|
|
; |
|
|
|
|
|
LD A,H ; TOP SECTION OF SECTOR |
|
|
|
|
|
RRA ; ADDRESS THAT GETS WRITTEN |
|
|
|
|
|
AND $70 ; TO BANK SELECT PORT |
|
|
|
|
|
LD C,A |
|
|
|
|
|
|
|
|
|
|
|
POP HL |
|
|
|
|
|
; |
|
|
|
|
|
LD (MD_FBAS),BC ; SAVE BANK AND SECTOR FOR USE IN FLASH ROUTINES |
|
|
|
|
|
; |
|
|
|
|
|
#IF (MD_FDBG==1) |
|
|
|
|
|
CALL PRTHEXWORD ; DISPLAY BANK AND |
|
|
|
|
|
CALL PC_SPACE ; SECTOR RESULT |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
POP BC |
|
|
|
|
|
RET |
|
|
; |
|
|
; |
|
|
; WRITE FLASH |
|
|
; WRITE FLASH |
|
|
; |
|
|
; |
|
|
@ -375,6 +426,8 @@ MD_WRSECF: ; CALLED FROM MD_RW |
|
|
JR Z,MD_SECM1 ; IN THE BUFFER |
|
|
JR Z,MD_SECM1 ; IN THE BUFFER |
|
|
; |
|
|
; |
|
|
LD (MD_LBA4K),BC ; SAVE 4K LBA |
|
|
LD (MD_LBA4K),BC ; SAVE 4K LBA |
|
|
|
|
|
; |
|
|
|
|
|
CALL MD_CALBAS ; SETUP BANK AND SECTOR |
|
|
; |
|
|
; |
|
|
LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS |
|
|
LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS |
|
|
LD BC,MD_FREAD_R ; PUT ROUTINE TO CALL |
|
|
LD BC,MD_FREAD_R ; PUT ROUTINE TO CALL |
|
|
@ -436,6 +489,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR |
|
|
MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR |
|
|
|
|
|
MD_FBAS .DW $FFFF ; BANK AND SECTOR |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
; READ RAM / ROM |
|
|
; READ RAM / ROM |
|
|
@ -634,6 +688,8 @@ MDSTR_LEN .TEXT "LEN=$" |
|
|
; |
|
|
; |
|
|
; INSPIRED BY WILL SOWERBUTTS FLASH4 UTILITY - https://github.com/willsowerbutts/flash4/ |
|
|
; INSPIRED BY WILL SOWERBUTTS FLASH4 UTILITY - https://github.com/willsowerbutts/flash4/ |
|
|
; |
|
|
; |
|
|
|
|
|
; REFERENCE ww1.microchip.com/downloads/en/DeviceDoc/SST39SF040.txt |
|
|
|
|
|
; |
|
|
;================================================================================================== |
|
|
;================================================================================================== |
|
|
; |
|
|
; |
|
|
#IF (MDFFENABLE) |
|
|
#IF (MDFFENABLE) |
|
|
@ -670,6 +726,7 @@ MD_PROBE: |
|
|
LD A,'=' ; NUMBER |
|
|
LD A,'=' ; NUMBER |
|
|
CALL COUT |
|
|
CALL COUT |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
|
|
|
CALL MD_CALBAS ; SETUP BANK AND SECTOR |
|
|
LD BC,MD_FIDENT_R ; PUT ROUTINE TO CALL |
|
|
LD BC,MD_FIDENT_R ; PUT ROUTINE TO CALL |
|
|
CALL MD_FNCALL ; EXECUTE: IDENTIFY FLASH CHIP |
|
|
CALL MD_FNCALL ; EXECUTE: IDENTIFY FLASH CHIP |
|
|
|
|
|
|
|
|
@ -794,11 +851,14 @@ FF_NXT2: |
|
|
MD_FNCALL: |
|
|
MD_FNCALL: |
|
|
PUSH HL ; USING HBX_BUF FOR CODE AREA |
|
|
PUSH HL ; USING HBX_BUF FOR CODE AREA |
|
|
PUSH DE |
|
|
PUSH DE |
|
|
PUSH BC |
|
|
|
|
|
CALL MD_CALCA ; GET BANK AND SECTOR DATA IN BC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PUSH BC ; GET ROUTINE TO CALL |
|
|
|
|
|
POP HL |
|
|
|
|
|
|
|
|
|
|
|
; CALL MD_CALCA ; GET BANK AND SECTOR DATA IN BC |
|
|
; |
|
|
; |
|
|
POP HL ; GET ROUTINE TO CALL |
|
|
|
|
|
PUSH BC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; PUSH BC |
|
|
; |
|
|
; |
|
|
LD DE,HBX_BUF ; EXECUTE / START ADDRESS |
|
|
LD DE,HBX_BUF ; EXECUTE / START ADDRESS |
|
|
LD BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES |
|
|
LD BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES |
|
|
@ -807,7 +867,8 @@ MD_FNCALL: |
|
|
LD D,B ; PRESET DE TO ZERO TO REDUCE |
|
|
LD D,B ; PRESET DE TO ZERO TO REDUCE |
|
|
LD E,B ; CODE SIZE IN RELOCATABLE CODE |
|
|
LD E,B ; CODE SIZE IN RELOCATABLE CODE |
|
|
; |
|
|
; |
|
|
POP BC ; PUT BANK AND SECTOR DATA IN BC |
|
|
|
|
|
|
|
|
; POP BC ; PUT BANK AND SECTOR DATA IN BC |
|
|
|
|
|
LD BC,(MD_FBAS) ; PUT BANK AND SECTOR DATA IN BC |
|
|
; |
|
|
; |
|
|
#IF (MD_FDBG==1) |
|
|
#IF (MD_FDBG==1) |
|
|
CALL PRTHEXWORD |
|
|
CALL PRTHEXWORD |
|
|
@ -842,47 +903,7 @@ MD_FNCALL: |
|
|
POP HL |
|
|
POP HL |
|
|
RET ; RETURN TO MD_READF, MD_WRITEF |
|
|
RET ; RETURN TO MD_READF, MD_WRITEF |
|
|
; |
|
|
; |
|
|
MD_SAVSTK .DW 0 |
|
|
|
|
|
; |
|
|
|
|
|
;====================================================================== |
|
|
|
|
|
; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS |
|
|
|
|
|
; |
|
|
|
|
|
; ON ENTRY DE:HL CONTAINS 32 BIT MEMORY ADDRESS. |
|
|
|
|
|
; ON EXIT B CONTAINS BANK SELECT BYTE |
|
|
|
|
|
; C CONTAINS HIGH BYTE OF SECTOR ADDRESS |
|
|
|
|
|
; |
|
|
|
|
|
; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL |
|
|
|
|
|
; 3322222222221111 1111110000000000 |
|
|
|
|
|
; 1098765432109876 5432109876543210 |
|
|
|
|
|
; XXXXXXXXXXXXSSSS SSSSXXXXXXXXXXXX < S = SECTOR |
|
|
|
|
|
; XXXXXXXXXXXXBBBB BXXXXXXXXXXXXXXX < B = BANK |
|
|
|
|
|
;====================================================================== |
|
|
|
|
|
; |
|
|
|
|
|
MD_CALCA: |
|
|
|
|
|
; |
|
|
|
|
|
#IF (MD_FDBG==1) |
|
|
|
|
|
CALL PC_SPACE ; DISPLAY SECTOR |
|
|
|
|
|
CALL PRTHEX32 ; SECTOR ADDRESS |
|
|
|
|
|
CALL PC_SPACE ; IN DE:HL |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
LD A,E ; BOTTOM PORTION OF SECTOR |
|
|
|
|
|
AND $0F ; ADDRESS THAT GETS WRITTEN |
|
|
|
|
|
RLC H ; WITH ERASE COMMAND BYTE |
|
|
|
|
|
RLA ; A15 GETS DROPPED OFF AND |
|
|
|
|
|
LD B,A ; ADDED TO BANK SELECT |
|
|
|
|
|
; |
|
|
|
|
|
LD A,H ; TOP SECTION OF SECTOR |
|
|
|
|
|
RRA ; ADDRESS THAT GETS WRITTEN |
|
|
|
|
|
AND $70 ; TO BANK SELECT PORT |
|
|
|
|
|
LD C,A |
|
|
|
|
|
; |
|
|
|
|
|
#IF (MD_FDBG==1) |
|
|
|
|
|
CALL PRTHEXWORD ; DISPLAY BANK AND |
|
|
|
|
|
CALL PC_SPACE ; SECTOR RESULT |
|
|
|
|
|
#ENDIF |
|
|
|
|
|
; |
|
|
|
|
|
RET |
|
|
|
|
|
|
|
|
MD_SAVSTK .DW 0 |
|
|
; |
|
|
; |
|
|
;====================================================================== |
|
|
;====================================================================== |
|
|
; FLASH IDENTIFY |
|
|
; FLASH IDENTIFY |
|
|
|