mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Update md.asm
Code cleanup
This commit is contained in:
@@ -53,7 +53,9 @@ MD_CFGTBL:
|
||||
;
|
||||
;
|
||||
MD_INIT:
|
||||
#IF (MDFFENABLE)
|
||||
CALL MD_FINIT ; PROBE FLASH CAPABILITY
|
||||
#ENDIF
|
||||
|
||||
CALL NEWLINE ; FORMATTING
|
||||
PRTS("MD: UNITS=2 $")
|
||||
@@ -67,12 +69,14 @@ MD_INIT:
|
||||
;
|
||||
; SETUP THE DIO TABLE ENTRIES
|
||||
;
|
||||
#IF (MDFFENABLE)
|
||||
LD A,(MD_FFSEN) ; IF FLASH
|
||||
OR A ; FILESYSTEM
|
||||
JR NZ,MD_IN1 ; CAPABLE,
|
||||
LD A,MD_AFSH ; UPDATE ROM DIO
|
||||
LD (MD_CFGTBL + MD_CFGSIZ + MD_ATTRIB),A
|
||||
MD_IN1:
|
||||
#ENDIF
|
||||
LD BC,MD_FNTBL
|
||||
LD DE,MD_CFGTBL
|
||||
PUSH BC
|
||||
@@ -211,10 +215,12 @@ MD_READ:
|
||||
;
|
||||
; HL POINTS TO HB_WRKBUF
|
||||
;
|
||||
#IF (MDFFENABLE)
|
||||
LD A,(IY+MD_ATTRIB) ; GET ADR OF SECTOR READ FUNC
|
||||
LD BC,MD_RDSECF ;
|
||||
CP MD_AFSH ; RAM / ROM = MD_RDSEC
|
||||
JR Z,MD_RD1 ; FLASH = MD_RDSECF
|
||||
#ENDIF
|
||||
LD BC,MD_RDSEC
|
||||
MD_RD1:
|
||||
LD (MD_RWFNADR),BC ; SAVE IT AS PENDING IO FUNC
|
||||
@@ -225,12 +231,15 @@ MD_RD1:
|
||||
MD_WRITE:
|
||||
CALL HB_DSKWRITE ; HOOK HBIOS DISK WRITE SUPERVISOR
|
||||
;
|
||||
#IF (MDFFENABLE)
|
||||
LD A,(IY+MD_ATTRIB) ; GET ADR OF SECTOR WRITE FUNC
|
||||
LD BC,MD_WRSECF ;
|
||||
CP MD_AFSH ; RAM / ROM = MD_WRSEC
|
||||
JR Z,MD_WR1 ; FLASH = MD_WRSECF
|
||||
#ENDIF
|
||||
LD BC,MD_WRSEC
|
||||
MD_WR1:
|
||||
|
||||
LD (MD_RWFNADR),BC ; SAVE IT AS PENDING IO FUNC
|
||||
LD A,(IY+MD_ATTRIB) ; IF THE DEVICES ATTRIBUTE
|
||||
CP MD_AROM ; IS NOT ROM THEN WE CAN
|
||||
@@ -276,6 +285,7 @@ MD_RW3:
|
||||
;
|
||||
; READ FLASH
|
||||
;
|
||||
#IF (MDFFENABLE)
|
||||
MD_RDSECF: ; CALLED FROM MD_RW
|
||||
;
|
||||
CALL MD_IOSETUPF ; SETUP SOURCE ADDRESS
|
||||
@@ -344,8 +354,64 @@ MD_IOSETUPF:
|
||||
;
|
||||
RET
|
||||
;
|
||||
MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR
|
||||
;
|
||||
; WRITE FLASH
|
||||
;
|
||||
MD_WRSECF: ; CALLED FROM MD_RW
|
||||
CALL MD_IOSETUPF ; SETUP DESTINATION ADDRESS
|
||||
;
|
||||
PUSH HL ; IS THE SECTOR
|
||||
LD HL,(MD_LBA4K) ; WE WANT TO
|
||||
XOR A ; WRITE ALREADY
|
||||
SBC HL,BC ; IN THE 4K
|
||||
POP HL ; BLOCK WE HAVE
|
||||
JR Z,MD_SECM1 ; IN THE BUFFER
|
||||
;
|
||||
LD (MD_LBA4K),BC ; SAVE 4K LBA
|
||||
;
|
||||
PUSH IX
|
||||
LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS
|
||||
CALL MD_FREAD ; READ 4K SECTOR
|
||||
POP IX
|
||||
;
|
||||
MD_SECM1: ; DESIRED SECTOR IS IN BUFFER
|
||||
PUSH IX
|
||||
CALL MD_FERAS ; ERASE 4K SECTOR
|
||||
POP IX
|
||||
;
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
;
|
||||
; COPY 512B SECTOR INTO 4K SECTOR
|
||||
;
|
||||
LD A,(IY+MD_LBA+0) ; GET SECTOR WITHIN 4K BLOCK
|
||||
AND %00000111 ; AND CALCULATE OFFSET OFFSET
|
||||
ADD A,A
|
||||
LD D,A ; FROM THE START
|
||||
LD E,0
|
||||
;
|
||||
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE
|
||||
ADD HL,DE ; WANT TO COPY
|
||||
EX DE,HL
|
||||
;
|
||||
LD HL,(MD_DSKBUF)
|
||||
LD BC,512 ; COPY ONE 512B SECTOR FROM THE
|
||||
LDIR ; THE DISK BUFFER TO 4K SECTOR
|
||||
;
|
||||
POP DE
|
||||
POP HL
|
||||
;
|
||||
PUSH IX
|
||||
LD IX,MD_F4KBUF ; WRITE THE SECTOR
|
||||
CALL MD_FWRIT
|
||||
POP IX
|
||||
|
||||
XOR A
|
||||
|
||||
RET
|
||||
;
|
||||
MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR
|
||||
#ENDIF
|
||||
;
|
||||
; READ RAM / ROM
|
||||
;
|
||||
@@ -378,69 +444,6 @@ MD_RDSEC:
|
||||
XOR A
|
||||
RET
|
||||
;
|
||||
; WRITE FLASH
|
||||
;
|
||||
MD_WRSECF: ; CALLED FROM MD_RW
|
||||
CALL MD_IOSETUPF ; SETUP DESTINATION ADDRESS
|
||||
;
|
||||
PUSH HL ; IS THE SECTOR
|
||||
LD HL,(MD_LBA4K) ; WE WANT TO
|
||||
XOR A ; WRITE ALREADY
|
||||
SBC HL,BC ; IN THE 4K
|
||||
POP HL ; BLOCK WE HAVE
|
||||
JR Z,MD_SECM1 ; IN THE BUFFER
|
||||
;
|
||||
LD (MD_LBA4K),BC ; SAVE 4K LBA
|
||||
;
|
||||
CALL PC_COLON
|
||||
PUSH IX
|
||||
LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS
|
||||
CALL MD_FREAD ; READ 4K SECTOR
|
||||
POP IX
|
||||
CALL PC_COLON
|
||||
;
|
||||
MD_SECM1: ; DESIRED SECTOR IS IN BUFFER
|
||||
CALL PC_ASTERISK
|
||||
PUSH IX
|
||||
CALL MD_FERAS ; ERASE 4K SECTOR
|
||||
POP IX
|
||||
CALL PC_ASTERISK
|
||||
;
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
;
|
||||
; COPY 512B SECTOR INTO 4K SECTOR
|
||||
;
|
||||
LD A,(IY+MD_LBA+0) ; GET SECTOR WITHIN 4K BLOCK
|
||||
AND %00000111 ; AND CALCULATE OFFSET OFFSET
|
||||
ADD A,A
|
||||
LD D,A ; FROM THE START
|
||||
LD E,0
|
||||
;
|
||||
LD HL,MD_F4KBUF ; POINT TO THE SECTOR WE
|
||||
ADD HL,DE ; WANT TO COPY
|
||||
EX DE,HL
|
||||
;
|
||||
LD HL,(MD_DSKBUF)
|
||||
LD BC,512 ; COPY ONE 512B SECTOR FROM THE
|
||||
LDIR ; THE DISK BUFFER TO 4K SECTOR
|
||||
;
|
||||
POP DE
|
||||
POP HL
|
||||
;
|
||||
CALL PC_COLON
|
||||
PUSH IX
|
||||
LD IX,MD_F4KBUF ; WRITE THE SECTOR
|
||||
CALL MD_FWRIT
|
||||
POP IX
|
||||
CALL PC_COLON
|
||||
;
|
||||
PRTS("wf$");
|
||||
|
||||
XOR A
|
||||
|
||||
RET
|
||||
;
|
||||
; WRITE RAM
|
||||
;
|
||||
MD_WRSEC:
|
||||
@@ -545,12 +548,12 @@ MD_PRT:
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
|
||||
;
|
||||
CALL NEWLINE
|
||||
|
||||
;
|
||||
LD DE,MDSTR_PREFIX
|
||||
CALL WRITESTR
|
||||
|
||||
;
|
||||
CALL PC_SPACE
|
||||
LD DE,MDSTR_SRC
|
||||
CALL WRITESTR
|
||||
@@ -559,7 +562,7 @@ MD_PRT:
|
||||
CALL PC_COLON
|
||||
LD BC,(MD_SRC)
|
||||
CALL PRTHEXWORD
|
||||
|
||||
;
|
||||
CALL PC_SPACE
|
||||
LD DE,MDSTR_DST
|
||||
CALL WRITESTR
|
||||
@@ -568,19 +571,24 @@ MD_PRT:
|
||||
CALL PC_COLON
|
||||
LD BC,(MD_DST)
|
||||
CALL PRTHEXWORD
|
||||
|
||||
;
|
||||
CALL PC_SPACE
|
||||
LD DE,MDSTR_LEN
|
||||
CALL WRITESTR
|
||||
LD BC,(MD_LEN)
|
||||
CALL PRTHEXWORD
|
||||
|
||||
;
|
||||
POP HL
|
||||
POP DE
|
||||
POP BC
|
||||
POP AF
|
||||
|
||||
;
|
||||
RET
|
||||
;
|
||||
MDSTR_PREFIX .TEXT "MD:$"
|
||||
MDSTR_SRC .TEXT "SRC=$"
|
||||
MDSTR_DST .TEXT "DEST=$"
|
||||
MDSTR_LEN .TEXT "LEN=$"
|
||||
#ENDIF
|
||||
;
|
||||
;==================================================================================================
|
||||
@@ -600,6 +608,7 @@ MD_PRT:
|
||||
;
|
||||
;==================================================================================================
|
||||
;
|
||||
#IF (MDFFENABLE)
|
||||
FF_TGT .EQU 0BFB7H ; TARGET CHIP FOR R/W FILESYSTEM
|
||||
;
|
||||
;======================================================================
|
||||
@@ -610,11 +619,11 @@ FF_TGT .EQU 0BFB7H ; TARGET CHIP FOR R/W FILESYSTEM
|
||||
;======================================================================
|
||||
;
|
||||
MD_FINIT:
|
||||
LD A,+(ROMSIZE/512) ; DISLAY NUMBER
|
||||
#IF (MD_FVBS==1)
|
||||
CALL NEWLINE ; DISLAY NUMBER
|
||||
PRTS("MD: FLASH=$") ; OF UNITS
|
||||
LD A,+(ROMSIZE/512) ; CONFIGURED FOR.
|
||||
CALL PRTDECB
|
||||
CALL NEWLINE ; OF UNITS
|
||||
PRTS("MD: FLASH=$")
|
||||
CALL PRTDECB ; CONFIGURED FOR.
|
||||
#ENDIF
|
||||
LD B,A ; NUMBER OF DEVICES TO PROBE
|
||||
LD C,$00 ; START ADDRESS IS 0000:0000 IN DE:HL
|
||||
@@ -648,7 +657,7 @@ FF_PROBE:
|
||||
; POP DE ; MEANS WE CAN'T
|
||||
POP HL ; ENABLE FLASH WRITING
|
||||
#IF (MD_FVBS==1)
|
||||
CALL FF_LAND ; LOOKUP AND DISPLAY
|
||||
CALL MD_LAND ; LOOKUP AND DISPLAY
|
||||
#ENDIF
|
||||
POP BC
|
||||
;
|
||||
@@ -675,7 +684,7 @@ MD_PR1:
|
||||
; ON EXIT A CONTAINS STATUS 0=SUCCESS, NZ=NOT IDENTIFIED
|
||||
;======================================================================
|
||||
;
|
||||
FF_LAND:
|
||||
MD_LAND:
|
||||
;
|
||||
#IF (MD_FDBG==1)
|
||||
PRTS(" ID:$")
|
||||
@@ -728,14 +737,13 @@ FF_FNCALL: ; USING HBX_BUF FOR CODE AREA
|
||||
;
|
||||
POP HL ; GET ROUTINE TO CALL
|
||||
;
|
||||
LD DE,HBX_BUF ; PUT EXECUTE / START ADDRESS IN DE
|
||||
LD BC,HBX_BUFSIZ ; CODE SIZE REQUIRED
|
||||
LD DE,HBX_BUF ; EXECUTE / START ADDRESS
|
||||
LD BC,HBX_BUFSIZ ; MAX. CODE SIZE POSSIBLE
|
||||
LDIR ; COPY OUR RELOCATABLE CODE TO THE BUFFER
|
||||
;
|
||||
LD D,B ; PRESET DE TO ZERO TO REDUCE
|
||||
LD E,B ; CODE SIZE IN RELOCATABLE CODE
|
||||
;
|
||||
; PUSH DE ; SAVE THE EXECUTE ADDRESS
|
||||
; COPY OUR RELOCATABLE
|
||||
LDIR ; CODE TO THE BUFFER
|
||||
; POP HL ; CALL OUR RELOCATABLE CODE
|
||||
|
||||
PUSH IY ; PUT BANK AND SECTOR
|
||||
POP BC ; DATA IN BC
|
||||
;
|
||||
@@ -743,7 +751,6 @@ FF_FNCALL: ; USING HBX_BUF FOR CODE AREA
|
||||
CALL PRTHEXWORD
|
||||
#ENDIF
|
||||
;
|
||||
LD DE,0
|
||||
HB_DI
|
||||
CALL HBX_BUF ; EXECUTE RELOCATED CODE
|
||||
HB_EI
|
||||
@@ -974,14 +981,12 @@ MD_FERAS_S
|
||||
;
|
||||
LD A,$30 ; SECTOR ERASE
|
||||
LD (HL),A ; COMMAND
|
||||
;
|
||||
; LD DE,$0000 ; DEBUG COUNT
|
||||
;
|
||||
LD A,(HL) ; DO TWO SUCCESSIVE READS
|
||||
FF_WT4: LD C,(HL) ; FROM THE SAME FLASH ADDRESS.
|
||||
XOR C ; IF THE SAME ON BOTH READS
|
||||
BIT 6,A ; THEN ERASE IS COMPLETE SO EXIT.
|
||||
; INC DE ;
|
||||
;
|
||||
JR Z,FF_WT5 ; BIT 6 = 0 IF SAME ON SUCCESSIVE READS = COMPLETE
|
||||
; BIT 6 = 1 IF DIFF ON SUCCESSIVE READS = INCOMPLETE
|
||||
;
|
||||
@@ -1049,6 +1054,7 @@ MD_FREAD:
|
||||
; DESTINATION BANK IS ALWAYS CURRENT BANK
|
||||
;
|
||||
; ON ENTRY BC CONTAINS BANK AND SECTOR DATA
|
||||
; DE = 0000
|
||||
; IX POINTS TO DATA TO BE WRITTEN
|
||||
; A CONTAINS CURRENT BANK
|
||||
; ON EXIT NO STATUS RETURNED
|
||||
@@ -1231,7 +1237,6 @@ FF_CHIP(0C2A4H,"MX29F040$ ")
|
||||
FF_T_CNT .EQU 17
|
||||
FF_T_SZ .EQU ($-FF_TABLE) / FF_T_CNT
|
||||
MD_UNKNOWN .DB "UNKNOWN$"
|
||||
FF_STACK: .DW 0
|
||||
;
|
||||
;======================================================================
|
||||
;
|
||||
@@ -1240,26 +1245,15 @@ FF_STACK: .DW 0
|
||||
;======================================================================
|
||||
;
|
||||
MD_F4KBUF .FILL 4096,$FF
|
||||
MD_RWFNADR .DW 0
|
||||
MD_DSKBUF .DW 0
|
||||
MD_SRCBNK .DB 0
|
||||
MD_DSTBNK .DB 0
|
||||
MD_SRC .DW 0
|
||||
MD_DST .DW 0
|
||||
MD_LEN .DW 0
|
||||
MD_FFSEN .DB 00h ; FLASH FILES SYSTEM ENABLE
|
||||
;
|
||||
MDSTR_PREFIX .TEXT "MD:$"
|
||||
MDSTR_SRC .TEXT "SRC=$"
|
||||
MDSTR_DST .TEXT "DEST=$"
|
||||
MDSTR_LEN .TEXT "LEN=$"
|
||||
;
|
||||
;======================================================================
|
||||
;
|
||||
; RELOCATABLE CODE SPACE REQUIREMENTS CHECK
|
||||
;
|
||||
;======================================================================
|
||||
;
|
||||
#IF (MD_FDBG==1)
|
||||
.ECHO "MD_FIDENT_R "
|
||||
.ECHO MD_I_SZ
|
||||
.ECHO "\n"
|
||||
@@ -1275,6 +1269,7 @@ MDSTR_LEN .TEXT "LEN=$"
|
||||
.ECHO "MD_FWRIT_R "
|
||||
.ECHO MD_W_SZ
|
||||
.ECHO "\n"
|
||||
#ENDIF
|
||||
;
|
||||
MD_CSIZE .EQU 0
|
||||
;
|
||||
@@ -1291,6 +1286,17 @@ MD_CSIZE .SET MD_I_SZ
|
||||
MD_CSIZE .SET MD_R_SZ
|
||||
#ENDIF
|
||||
;
|
||||
.ECHO "FF requires "
|
||||
.ECHO MD_CSIZE
|
||||
.ECHO " bytes high memory space.\n"
|
||||
#IF (MD_CSIZE>HBX_BUFSIZ)
|
||||
.ECHO "Warning: Flash code exceeds available space by "
|
||||
.ECHO MD_CSIZE-HBX_BUFSIZ
|
||||
.ECHO " bytes.\n"
|
||||
#ENDIF
|
||||
#ENDIF
|
||||
;
|
||||
MD_RWFNADR .DW 0
|
||||
MD_DSKBUF .DW 0
|
||||
MD_SRCBNK .DB 0
|
||||
MD_DSTBNK .DB 0
|
||||
MD_SRC .DW 0
|
||||
MD_DST .DW 0
|
||||
MD_LEN .DW 0
|
||||
|
||||
Reference in New Issue
Block a user