mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Update md.asm
Calculate bank and sector only when needed
This commit is contained in:
@@ -304,13 +304,16 @@ MD_RDSECF: ; CALLED FROM MD_RW
|
||||
POP HL ; BLOCK WE HAVE
|
||||
JR Z,MD_SECM ; IN THE BUFFER
|
||||
;
|
||||
;MD_SECR:
|
||||
|
||||
|
||||
; DESIRED SECTOR
|
||||
; IS NOT IN BUFFER
|
||||
LD (MD_LBA4K),BC ; WE WILL READ IN
|
||||
; A NEW 4K SECTOR.
|
||||
; SAVE THE 4K LBA
|
||||
; FOR FUTURE CHECKS
|
||||
|
||||
CALL MD_CALBAS ; SETUP BANK AND SECTOR
|
||||
;
|
||||
; DE:HL CONTAIN SOURCE ADDRESS
|
||||
; WHICH WAS SETUP BY MD_IOSETUPF
|
||||
@@ -349,7 +352,7 @@ MD_IOSETUPF:
|
||||
LD A,L ; SAVE LBA 4K
|
||||
AND %11111000 ; BLOCK WE ARE
|
||||
LD C,A ; GOING TO
|
||||
LD A,H ; ACCESS
|
||||
LD B,H ; ACCESS
|
||||
;
|
||||
LD D,0 ; CONVERT LBA
|
||||
LD E,H ; TO ADDRESS
|
||||
@@ -357,10 +360,58 @@ MD_IOSETUPF:
|
||||
LD L,D ; DE:HL = HLX512
|
||||
SLA H
|
||||
RL E
|
||||
RL D
|
||||
RL D
|
||||
|
||||
; CALL MD_CALCA
|
||||
;
|
||||
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
|
||||
;
|
||||
@@ -375,6 +426,8 @@ MD_WRSECF: ; CALLED FROM MD_RW
|
||||
JR Z,MD_SECM1 ; IN THE BUFFER
|
||||
;
|
||||
LD (MD_LBA4K),BC ; SAVE 4K LBA
|
||||
;
|
||||
CALL MD_CALBAS ; SETUP BANK AND SECTOR
|
||||
;
|
||||
LD IX,MD_F4KBUF ; SET DESTINATION ADDRESS
|
||||
LD BC,MD_FREAD_R ; PUT ROUTINE TO CALL
|
||||
@@ -436,6 +489,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER
|
||||
RET
|
||||
;
|
||||
MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR
|
||||
MD_FBAS .DW $FFFF ; BANK AND SECTOR
|
||||
#ENDIF
|
||||
;
|
||||
; READ RAM / ROM
|
||||
@@ -634,6 +688,8 @@ MDSTR_LEN .TEXT "LEN=$"
|
||||
;
|
||||
; INSPIRED BY WILL SOWERBUTTS FLASH4 UTILITY - https://github.com/willsowerbutts/flash4/
|
||||
;
|
||||
; REFERENCE ww1.microchip.com/downloads/en/DeviceDoc/SST39SF040.txt
|
||||
;
|
||||
;==================================================================================================
|
||||
;
|
||||
#IF (MDFFENABLE)
|
||||
@@ -670,6 +726,7 @@ MD_PROBE:
|
||||
LD A,'=' ; NUMBER
|
||||
CALL COUT
|
||||
#ENDIF
|
||||
CALL MD_CALBAS ; SETUP BANK AND SECTOR
|
||||
LD BC,MD_FIDENT_R ; PUT ROUTINE TO CALL
|
||||
CALL MD_FNCALL ; EXECUTE: IDENTIFY FLASH CHIP
|
||||
|
||||
@@ -794,11 +851,14 @@ FF_NXT2:
|
||||
MD_FNCALL:
|
||||
PUSH HL ; USING HBX_BUF FOR CODE AREA
|
||||
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 BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES
|
||||
@@ -807,7 +867,8 @@ MD_FNCALL:
|
||||
LD D,B ; PRESET DE TO ZERO TO REDUCE
|
||||
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)
|
||||
CALL PRTHEXWORD
|
||||
@@ -842,47 +903,7 @@ MD_FNCALL:
|
||||
POP HL
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user