Browse Source

Update md.asm

Code cleanup
pull/163/head
b1ackmai1er 5 years ago
parent
commit
f40a1c963d
  1. 170
      Source/HBIOS/md.asm

170
Source/HBIOS/md.asm

@ -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,39 +354,6 @@ MD_IOSETUPF:
;
RET
;
MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR
;
;
; READ RAM / ROM
;
MD_RDSEC:
CALL MD_IOSETUP ; SETUP FOR MEMORY COPY
#IF (MDTRACE >= 2)
LD (MD_SRC),HL
LD (MD_DST),DE
LD (MD_LEN),BC
#ENDIF
PUSH BC
LD C,A ; SOURCE BANK
LD B,BID_BIOS ; DESTINATION BANK IS RAM BANK 1 (HBIOS)
#IF (MDTRACE >= 2)
LD (MD_SRCBNK),BC
CALL MD_PRT
#ENDIF
LD A,C ; GET SOURCE BANK
LD (HB_SRCBNK),A ; SET IT
LD A,B ; GET DESTINATION BANK
LD (HB_DSTBNK),A ; SET IT
POP BC
#IF (INTMODE == 1)
DI
#ENDIF
CALL HB_BNKCPY ; DO THE INTERBANK COPY
#IF (INTMODE == 1)
EI
#ENDIF
XOR A
RET
;
; WRITE FLASH
;
@ -385,26 +362,22 @@ MD_WRSECF: ; CALLED FROM MD_RW
;
PUSH HL ; IS THE SECTOR
LD HL,(MD_LBA4K) ; WE WANT TO
XOR A ; WRITE ALREADY
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
@ -428,19 +401,49 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER
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
;
MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR
#ENDIF
;
; READ RAM / ROM
;
MD_RDSEC:
CALL MD_IOSETUP ; SETUP FOR MEMORY COPY
#IF (MDTRACE >= 2)
LD (MD_SRC),HL
LD (MD_DST),DE
LD (MD_LEN),BC
#ENDIF
PUSH BC
LD C,A ; SOURCE BANK
LD B,BID_BIOS ; DESTINATION BANK IS RAM BANK 1 (HBIOS)
#IF (MDTRACE >= 2)
LD (MD_SRCBNK),BC
CALL MD_PRT
#ENDIF
LD A,C ; GET SOURCE BANK
LD (HB_SRCBNK),A ; SET IT
LD A,B ; GET DESTINATION BANK
LD (HB_DSTBNK),A ; SET IT
POP BC
#IF (INTMODE == 1)
DI
#ENDIF
CALL HB_BNKCPY ; DO THE INTERBANK COPY
#IF (INTMODE == 1)
EI
#ENDIF
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

Loading…
Cancel
Save