|
|
@ -23,7 +23,7 @@ MD_ATTRIB .EQU 7 ; OFFSET OF ATTRIBUTE (BYTE) |
|
|
; |
|
|
; |
|
|
MD_AROM .EQU %00010100 ; ROM ATTRIBUTE |
|
|
MD_AROM .EQU %00010100 ; ROM ATTRIBUTE |
|
|
MD_ARAM .EQU %00010101 ; RAM ATTRIBUTE |
|
|
MD_ARAM .EQU %00010101 ; RAM ATTRIBUTE |
|
|
MD_AFSH .EQU %00010111 ; FLASH ATTRIBUTE |
|
|
|
|
|
|
|
|
MD_AFSH .EQU %00010110 ; FLASH ATTRIBUTE |
|
|
; |
|
|
; |
|
|
MD_FDBG .EQU 0 ; FLASH DEBUG CODE |
|
|
MD_FDBG .EQU 0 ; FLASH DEBUG CODE |
|
|
MD_FVBS .EQU 1 ; FLASH VERBOSE OUTPUT |
|
|
MD_FVBS .EQU 1 ; FLASH VERBOSE OUTPUT |
|
|
@ -109,9 +109,9 @@ MD_INIT: |
|
|
; SETUP THE DIO TABLE ENTRIES |
|
|
; SETUP THE DIO TABLE ENTRIES |
|
|
; |
|
|
; |
|
|
#IF (MDROM & MDFFENABLE) |
|
|
#IF (MDROM & MDFFENABLE) |
|
|
LD A,(MD_FFSEN) ; IF FLASH |
|
|
|
|
|
OR A ; FILESYSTEM |
|
|
|
|
|
JR NZ,MD_INIT1 ; CAPABLE, |
|
|
|
|
|
|
|
|
LD A,(MD_FFSEN) ; IF FLASH |
|
|
|
|
|
OR A ; FILESYSTEM |
|
|
|
|
|
JR NZ,MD_INIT1 ; CAPABLE, |
|
|
LD A,MD_AFSH ; UPDATE ROM DIO |
|
|
LD A,MD_AFSH ; UPDATE ROM DIO |
|
|
LD (MD_CFGTBL + MD_CFGSIZ + MD_ATTRIB),A |
|
|
LD (MD_CFGTBL + MD_CFGSIZ + MD_ATTRIB),A |
|
|
MD_INIT1: |
|
|
MD_INIT1: |
|
|
@ -177,7 +177,7 @@ MD_RESET: |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
MD_CAP: ; ASSUMES THAT UNIT 0 IS RAM, UNIT 1 IS ROM |
|
|
MD_CAP: ; ASSUMES THAT UNIT 0 IS RAM, UNIT 1 IS ROM |
|
|
LD A,(IY+MD_DEV) ; GET DEVICE NUMBER |
|
|
LD A,(IY+MD_DEV) ; GET DEVICE NUMBER |
|
|
OR A ; SET FLAGS |
|
|
OR A ; SET FLAGS |
|
|
@ -259,7 +259,7 @@ MD_READ: |
|
|
; |
|
|
; |
|
|
#IF (MDFFENABLE) |
|
|
#IF (MDFFENABLE) |
|
|
LD A,(IY+MD_ATTRIB) ; GET ADR OF SECTOR READ FUNC |
|
|
LD A,(IY+MD_ATTRIB) ; GET ADR OF SECTOR READ FUNC |
|
|
LD BC,MD_RDSECF ; |
|
|
|
|
|
|
|
|
LD BC,MD_RDSECF ; |
|
|
CP MD_AFSH ; RAM / ROM = MD_RDSEC |
|
|
CP MD_AFSH ; RAM / ROM = MD_RDSEC |
|
|
JR Z,MD_RD1 ; FLASH = MD_RDSECF |
|
|
JR Z,MD_RD1 ; FLASH = MD_RDSECF |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
@ -275,7 +275,7 @@ MD_WRITE: |
|
|
; |
|
|
; |
|
|
#IF (MDFFENABLE) |
|
|
#IF (MDFFENABLE) |
|
|
LD A,(IY+MD_ATTRIB) ; GET ADR OF SECTOR WRITE FUNC |
|
|
LD A,(IY+MD_ATTRIB) ; GET ADR OF SECTOR WRITE FUNC |
|
|
LD BC,MD_WRSECF ; |
|
|
|
|
|
|
|
|
LD BC,MD_WRSECF ; |
|
|
CP MD_AFSH ; RAM / ROM = MD_WRSEC |
|
|
CP MD_AFSH ; RAM / ROM = MD_WRSEC |
|
|
JR Z,MD_WR1 ; FLASH = MD_WRSECF |
|
|
JR Z,MD_WR1 ; FLASH = MD_WRSECF |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
@ -371,7 +371,7 @@ MD_SECM: |
|
|
LD D,A ; FROM THE START |
|
|
LD D,A ; FROM THE START |
|
|
LD E,0 |
|
|
LD E,0 |
|
|
; |
|
|
; |
|
|
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE |
|
|
|
|
|
|
|
|
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE |
|
|
ADD HL,DE ; WANT TO COPY |
|
|
ADD HL,DE ; WANT TO COPY |
|
|
LD DE,(MD_DSKBUF) |
|
|
LD DE,(MD_DSKBUF) |
|
|
; |
|
|
; |
|
|
@ -385,7 +385,7 @@ MD_SECM: |
|
|
JP DMALDIR ; 4K SECTOR TO THE DISK BUFFER |
|
|
JP DMALDIR ; 4K SECTOR TO THE DISK BUFFER |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
MD_NODMA: |
|
|
MD_NODMA: |
|
|
#IF (!(DMAENABLE & (DMAMODE!=DMAMODE_NONE))) |
|
|
|
|
|
|
|
|
#IF (!(DMAENABLE & (DMAMODE!=DMAMODE_NONE))) |
|
|
LD BC,512 ; COPY ONE 512B SECTOR FROM THE |
|
|
LD BC,512 ; COPY ONE 512B SECTOR FROM THE |
|
|
LDIR ; 4K SECTOR TO THE DISK BUFFER |
|
|
LDIR ; 4K SECTOR TO THE DISK BUFFER |
|
|
XOR A |
|
|
XOR A |
|
|
@ -407,7 +407,7 @@ MD_NODMA: |
|
|
; |
|
|
; |
|
|
MD_IOSETUPF: |
|
|
MD_IOSETUPF: |
|
|
LD L,(IY+MD_LBA+0) ; HL := LOW WORD OF LBA |
|
|
LD L,(IY+MD_LBA+0) ; HL := LOW WORD OF LBA |
|
|
LD H,(IY+MD_LBA+1) |
|
|
|
|
|
|
|
|
LD H,(IY+MD_LBA+1) |
|
|
INC H ; SKIP FIRST 128MB (256 SECTORS) |
|
|
INC H ; SKIP FIRST 128MB (256 SECTORS) |
|
|
; |
|
|
; |
|
|
LD A,L ; SAVE LBA 4K |
|
|
LD A,L ; SAVE LBA 4K |
|
|
@ -421,7 +421,7 @@ 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 |
|
|
; |
|
|
; |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
@ -443,7 +443,7 @@ MD_CALBAS: |
|
|
; |
|
|
; |
|
|
#IF (MD_FDBG==1) |
|
|
#IF (MD_FDBG==1) |
|
|
CALL PC_SPACE ; DISPLAY SECTOR |
|
|
CALL PC_SPACE ; DISPLAY SECTOR |
|
|
CALL PRTHEX32 ; SECTOR ADDRESS |
|
|
|
|
|
|
|
|
CALL PRTHEX32 ; SECTOR ADDRESS |
|
|
CALL PC_SPACE ; IN DE:HL |
|
|
CALL PC_SPACE ; IN DE:HL |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
@ -478,7 +478,7 @@ MD_WRSECF: ; CALLED FROM MD_RW |
|
|
PUSH HL ; IS THE SECTOR |
|
|
PUSH HL ; IS THE SECTOR |
|
|
LD HL,(MD_LBA4K) ; WE WANT TO |
|
|
LD HL,(MD_LBA4K) ; WE WANT TO |
|
|
XOR A ; WRITE ALREADY |
|
|
XOR A ; WRITE ALREADY |
|
|
SBC HL,BC ; IN THE 4K |
|
|
|
|
|
|
|
|
SBC HL,BC ; IN THE 4K |
|
|
POP HL ; BLOCK WE HAVE |
|
|
POP HL ; BLOCK WE HAVE |
|
|
JR Z,MD_SECM1 ; IN THE BUFFER |
|
|
JR Z,MD_SECM1 ; IN THE BUFFER |
|
|
; |
|
|
; |
|
|
@ -504,7 +504,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER |
|
|
LD D,A ; FROM THE START |
|
|
LD D,A ; FROM THE START |
|
|
LD E,0 |
|
|
LD E,0 |
|
|
; |
|
|
; |
|
|
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE |
|
|
|
|
|
|
|
|
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE |
|
|
ADD HL,DE ; WANT TO COPY |
|
|
ADD HL,DE ; WANT TO COPY |
|
|
EX DE,HL |
|
|
EX DE,HL |
|
|
; |
|
|
; |
|
|
@ -562,7 +562,7 @@ MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR |
|
|
MD_FBAS .DW $FFFF ; BANK AND SECTOR |
|
|
MD_FBAS .DW $FFFF ; BANK AND SECTOR |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
; |
|
|
; |
|
|
; READ RAM / ROM |
|
|
|
|
|
|
|
|
; READ RAM / ROM |
|
|
; |
|
|
; |
|
|
MD_RDSEC: |
|
|
MD_RDSEC: |
|
|
CALL MD_IOSETUP ; SETUP FOR MEMORY COPY |
|
|
CALL MD_IOSETUP ; SETUP FOR MEMORY COPY |
|
|
@ -744,7 +744,7 @@ MDSTR_LEN .TEXT "LEN=$" |
|
|
; FLASH DRIVERS |
|
|
; FLASH DRIVERS |
|
|
;================================================================================================== |
|
|
;================================================================================================== |
|
|
; |
|
|
; |
|
|
; UPPER RAM BANK IS ALWAYS AVAILABLE REGARDLESS OF MEMORY BANK SELECTION. |
|
|
|
|
|
|
|
|
; UPPER RAM BANK IS ALWAYS AVAILABLE REGARDLESS OF MEMORY BANK SELECTION. |
|
|
; HBX_BNKSEL AND HB_CURBNK ARE ALWAYS AVAILABLE IN UPPER MEMORY. |
|
|
; HBX_BNKSEL AND HB_CURBNK ARE ALWAYS AVAILABLE IN UPPER MEMORY. |
|
|
; |
|
|
; |
|
|
; THE STACK IS IN UPPER MEMORY DURING BIOS INITIALIZATION BUT IS IN LOWER |
|
|
; THE STACK IS IN UPPER MEMORY DURING BIOS INITIALIZATION BUT IS IN LOWER |
|
|
@ -754,7 +754,7 @@ MDSTR_LEN .TEXT "LEN=$" |
|
|
; AND THE FLASH CHIP IS SWITCHED INTO THE LOWER BANK. |
|
|
; AND THE FLASH CHIP IS SWITCHED INTO THE LOWER BANK. |
|
|
; |
|
|
; |
|
|
; EACH FLASH ROUTINE MUST FIT INTO TO THE HBX_BUF, INCLUDING IT'S LOCAL STACK WHICH |
|
|
; EACH FLASH ROUTINE MUST FIT INTO TO THE HBX_BUF, INCLUDING IT'S LOCAL STACK WHICH |
|
|
; IS REQUIRED FOR CALLING THE BANK SWITCH ROUTINES. |
|
|
|
|
|
|
|
|
; IS REQUIRED FOR CALLING THE BANK SWITCH ROUTINES. |
|
|
; |
|
|
; |
|
|
; INSPIRED BY WILL SOWERBUTTS FLASH4 UTILITY - https://github.com/willsowerbutts/flash4/ |
|
|
; INSPIRED BY WILL SOWERBUTTS FLASH4 UTILITY - https://github.com/willsowerbutts/flash4/ |
|
|
; |
|
|
; |
|
|
@ -775,7 +775,7 @@ MD_FINIT: |
|
|
CALL MD_CALCU ; DISPLAY |
|
|
CALL MD_CALCU ; DISPLAY |
|
|
; |
|
|
; |
|
|
#IF (MD_FVBS==1) |
|
|
#IF (MD_FVBS==1) |
|
|
CALL NEWLINE ; OF UNITS |
|
|
|
|
|
|
|
|
CALL NEWLINE ; OF UNITS |
|
|
PRTS("MD: FLASH=$") |
|
|
PRTS("MD: FLASH=$") |
|
|
CALL PRTDECB ; CONFIGURED FOR. |
|
|
CALL PRTDECB ; CONFIGURED FOR. |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
@ -786,14 +786,14 @@ MD_PROBE: |
|
|
LD E,C ; |
|
|
LD E,C ; |
|
|
LD H,D ; WE INCREASE E BY $08 |
|
|
LD H,D ; WE INCREASE E BY $08 |
|
|
LD L,D ; ON EACH CYCLE THROUGH |
|
|
LD L,D ; ON EACH CYCLE THROUGH |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
PUSH BC |
|
|
PUSH BC |
|
|
#IF (MD_FVBS==1) |
|
|
#IF (MD_FVBS==1) |
|
|
CALL PC_SPACE |
|
|
CALL PC_SPACE |
|
|
CALL MD_CALCU |
|
|
CALL MD_CALCU |
|
|
INC A |
|
|
INC A |
|
|
SUB B ; PRINT |
|
|
SUB B ; PRINT |
|
|
CALL PRTDECB ; DEVICE |
|
|
|
|
|
|
|
|
CALL PRTDECB ; DEVICE |
|
|
LD A,'=' ; NUMBER |
|
|
LD A,'=' ; NUMBER |
|
|
CALL COUT |
|
|
CALL COUT |
|
|
#ENDIF |
|
|
#ENDIF |
|
|
@ -872,7 +872,7 @@ MD_NXT1: |
|
|
CP C |
|
|
CP C |
|
|
JR NZ,MD_NXT0 ; FIRST BYTE DOES NOT MATCH |
|
|
JR NZ,MD_NXT0 ; FIRST BYTE DOES NOT MATCH |
|
|
; |
|
|
; |
|
|
INC HL |
|
|
|
|
|
|
|
|
INC HL |
|
|
LD A,(HL) |
|
|
LD A,(HL) |
|
|
CP B |
|
|
CP B |
|
|
DEC HL |
|
|
DEC HL |
|
|
@ -903,18 +903,18 @@ MD_NXT2: |
|
|
;====================================================================== |
|
|
;====================================================================== |
|
|
; COMMON FUNCTION CALL FOR: |
|
|
; COMMON FUNCTION CALL FOR: |
|
|
; |
|
|
; |
|
|
; MD_FIDEN_R - IDENTIFY FLASH CHIP |
|
|
|
|
|
|
|
|
; MD_FIDEN_R - IDENTIFY FLASH CHIP |
|
|
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED |
|
|
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED |
|
|
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED |
|
|
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED |
|
|
; ON EXIT BC CONTAINS THE CHIP ID BYTES. |
|
|
; ON EXIT BC CONTAINS THE CHIP ID BYTES. |
|
|
; A NO STATUS IS RETURNED |
|
|
|
|
|
|
|
|
; A NO STATUS IS RETURNED |
|
|
; |
|
|
; |
|
|
; MD_FERAS_R - ERASE FLASH SECTOR |
|
|
|
|
|
|
|
|
; MD_FERAS_R - ERASE FLASH SECTOR |
|
|
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED |
|
|
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED |
|
|
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED |
|
|
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED |
|
|
; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL |
|
|
; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL |
|
|
; |
|
|
; |
|
|
; MD_FREAD_R - READ FLASH SECTOR |
|
|
|
|
|
|
|
|
; MD_FREAD_R - READ FLASH SECTOR |
|
|
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED |
|
|
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED |
|
|
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED |
|
|
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED |
|
|
; IX POINTS TO WHERE TO SAVE DATA |
|
|
; IX POINTS TO WHERE TO SAVE DATA |
|
|
@ -926,7 +926,7 @@ MD_NXT2: |
|
|
; IX POINTS TO DATA TO COMPARE. |
|
|
; IX POINTS TO DATA TO COMPARE. |
|
|
; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL |
|
|
; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL |
|
|
; |
|
|
; |
|
|
; MD_FWRIT_R - WRITE FLASH SECTOR |
|
|
|
|
|
|
|
|
; MD_FWRIT_R - WRITE FLASH SECTOR |
|
|
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED |
|
|
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED |
|
|
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED |
|
|
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED |
|
|
; IX POINTS TO DATA TO BE WRITTEN |
|
|
; IX POINTS TO DATA TO BE WRITTEN |
|
|
@ -979,7 +979,7 @@ MD_FNCALL: ; USING HBX_BUF FOR CODE AREA |
|
|
LD A,C ; RETURN WITH STATUS IN A |
|
|
LD A,C ; RETURN WITH STATUS IN A |
|
|
RET ; RETURN TO MD_READF, MD_WRITEF |
|
|
RET ; RETURN TO MD_READF, MD_WRITEF |
|
|
; |
|
|
; |
|
|
MD_SAVSTK .DW 0 |
|
|
|
|
|
|
|
|
MD_SAVSTK .DW 0 |
|
|
; |
|
|
; |
|
|
#INCLUDE "flashlib.inc" |
|
|
#INCLUDE "flashlib.inc" |
|
|
; |
|
|
; |
|
|
|