Browse Source

Update flashfs.asm

optimization
pull/158/head
b1ackmai1er 5 years ago
parent
commit
28af890329
  1. 99
      Source/HBIOS/flashfs.asm

99
Source/HBIOS/flashfs.asm

@ -178,9 +178,9 @@ FF_IINIT:
PUSH IY ; PUT BANK AND SECTOR
POP BC ; DATA IN BC
;
LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK
;
HB_DI
CALL JPHL ; EXECUTE FF_IDENT
HB_EI
;
LD HL,(FF_STACK) ; RESTORE ORIGINAL
LD SP,HL ; STACK POSITION
@ -202,7 +202,6 @@ FF_IINIT:
;======================================================================
;
FF_IDENT: ; THIS CODE GETS RELOCATED TO THE STACK
HB_DI
;
PUSH AF ; SAVE CURRENT BANK
LD A,B ; SELECT BANK
@ -221,7 +220,6 @@ FF_IDENT: ; THIS CODE GETS RELOCATED TO THE STACK
;
POP AF ; RETURN TO ORIGINAL BANK
CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
HB_EI
;
RET
;
@ -260,9 +258,9 @@ FF_EINIT:
PUSH IY ; PUT BANK AND SECTOR
POP BC ; DATA IN BC
;
LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK
;
HB_DI
CALL JPHL ; EXECUTE FF_ERASE
HB_EI
;
LD HL,(FF_STACK) ; RESTORE ORIGINAL
LD SP,HL ; STACK POSITION
@ -285,25 +283,23 @@ FF_EINIT:
;======================================================================
;
FF_ERASE: ; THIS CODE GETS RELOCATED TO THE STACK
HB_DI
;
PUSH AF ; SAVE CURRENT BANK
LD A,B ; SELECT BANK
CALL HBX_BNKSEL ; TO PROGRAM
;
LD HL,$5555
LD A,$AA ; LD A,$AA ; COMMAND
LD (HL),A ; LD ($5555),A ; SETUP
LD HL,$5555 ; LD A,$AA ; COMMAND
LD (HL),$AA ; LD ($5555),A ; SETUP
LD A,L ; LD A,$55
LD ($2AAA),A ; LD ($2AAA),A
LD A,$80 ; LD A,$80
LD (HL),A ; LD ($5555),A
LD A,$AA ; LD A,$AA
LD (HL),A ; LD ($5555),A
LD A,L ; LD A,$55
LD ($2AAA),A ; LD ($2AAA),A
LD A,$10 ; LD A,$10
LD (HL),A ; LD ($5555),A
LD (HL),$80 ; LD A,$80
LD (HL),$AA ; LD ($5555),A
LD A,L ; LD A,$AA
LD ($2AAA),A ; LD ($5555),A
LD (HL),$10 ; LD A,$55
; LD ($2AAA),A
; LD A,$10
; LD ($5555),A
;
LD A,(HL) ; DO TWO SUCCESSIVE READS FROM THE SAME FLASH ADDRESS.
FF_WT2: LD C,(HL) ; IF TOGGLE BIT (BIT 6)
@ -328,8 +324,6 @@ FF_WT1: LD C,0 ; SET SUCCESS STATUS
FF_WT3: POP AF
; LD A,B ; RETURN TO ORIGINAL BANK
CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
HB_EI
;
RET
;
FF_E_SZ .EQU $-FF_ERASE ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
@ -340,6 +334,7 @@ FF_E_SZ .EQU $-FF_ERASE ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
; ON ENTRY DE:HL CONTAINS 32 BIT MEMORY ADDRESS.
; ON EXIT I,B CONTAINS BANK SELECT BYTE
; Y,C CONTAINS HIGH BYTE OF SECTOR ADDRESS
; A CONTAINS CURRENT BANK HB_CURBNK
;
; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL
; 3322222222221111 1111110000000000
@ -374,6 +369,8 @@ FF_CALCA:
CALL PRTHEXWORD ; DISPLAY BANK AND
CALL PC_SPACE ; SECTOR RESULT
#ENDIF
;
LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK
;
RET
;
@ -416,9 +413,9 @@ FF_SINIT:
CALL PRTHEXWORD
#ENDIF
;
LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK
;
HB_DI
CALL JPHL ; CALL FF_SERASE
HB_EI
;
LD HL,(FF_STACK) ; RESTORE ORIGINAL
LD SP,HL ; STACK POSITION
@ -431,7 +428,7 @@ FF_SINIT:
CALL PC_SPACE
#ENDIF
;
LD A,C ; STATUS
LD A,C ; RETURN WITH STATUS IN A
RET
;
;======================================================================
@ -448,22 +445,21 @@ FF_SINIT:
;======================================================================
;
FF_SERASE: ; THIS CODE GETS RELOCATED TO THE STACK
HB_DI
;
PUSH AF ; SAVE CURRENT BANK
LD A,B ; SELECT BANK
CALL HBX_BNKSEL ; TO PROGRAM
;
LD A,$AA ; COMMAND
LD ($5555),A ; SETUP
LD A,$55
LD ($2AAA),A
LD A,$80
LD ($5555),A
LD A,$AA
LD ($5555),A
LD A,$55
LD ($2AAA),A
;
LD HL,$5555 ; LD A,$AA ; COMMAND
LD A,L ; LD ($5555),A ; SETUP
LD (HL),$AA ; LD A,$55
LD ($2AAA),A ; LD ($2AAA),A
LD (HL),$80 ; LD A,$80
LD (HL),$AA ; LD ($5555),A
LD ($2AAA),A ; LD A,$AA
; LD ($5555),A
; LD A,$55
; LD ($2AAA),A
LD H,C ; SECTOR
LD L,$00 ; ADDRESS
@ -471,13 +467,13 @@ FF_SERASE: ; THIS CODE GETS RELOCATED TO THE STACK
LD A,$30 ; SECTOR ERASE
LD (HL),A ; COMMAND
;
LD DE,$0000 ; DEBUG COUNT
; 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 ;
; INC DE ;
JR Z,FF_WT5 ; BIT 6 = 0 IF SAME ON SUCCESSIVE READS = COMPLETE
; BIT 6 = 1 IF DIFF ON SUCCESSIVE READS = INCOMPLETE
;
@ -497,7 +493,6 @@ FF_WT4: LD C,(HL) ; FROM THE SAME FLASH ADDRESS.
FF_WT5: LD C,0 ; SET SUCCESS STATUS
FF_WT6: POP AF ; RETURN TO ORIGINAL BANK
CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
HB_EI
;
RET
;
@ -542,9 +537,9 @@ FF_WINIT:
PUSH IY ; PUT BANK AND SECTOR
POP BC ; DATA IN BC
;
LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK
;
HB_DI
CALL JPHL ; CALL FF_SWRITE
HB_EI
;
LD HL,(FF_STACK) ; RESTORE ORIGINAL
LD SP,HL ; STACK POSITION
@ -556,7 +551,7 @@ FF_WINIT:
CALL PC_SPACE
#ENDIF
;
XOR A ; STATUS
XOR A ; SET SUCCESS STATUS
RET
;
;======================================================================
@ -575,19 +570,18 @@ FF_WINIT:
;======================================================================
;
FF_SWRITE: ; THIS CODE GETS RELOCATED TO THE STACK
HB_DI
;
LD DE,$0000 ; INITIALIZE BYTE COUNT
;
LD H,C ; SECTOR
LD L,$00 ; ADDRESS
;
PUSH AF ; SAVE CURRENT BANK
LD A,B ; SELECT BANK
CALL HBX_BNKSEL ; TO PROGRAM
;
LD H,C ; SECTOR
LD L,$00 ; ADDRESS
LD D,L ; INITIALIZE
LD E,L ; BYTE COUNT
;
FF_WR1:
LD B,(IX+0) ; READ IN BYTE
LD C,(IX+0) ; READ IN BYTE
;
LD A,$AA ; COMMAND
LD ($5555),A ; SETUP
@ -597,7 +591,7 @@ FF_WR1:
LD A,$A0 ; WRITE
LD ($5555),A ; COMMAND
;
LD (HL),B ; WRITE OUT BYTE
LD (HL),C ; WRITE OUT BYTE
;
; ; DO TWO SUCCESSIVE READS
LD A,(HL) ; FROM THE SAME FLASH ADDRESS.
@ -605,17 +599,16 @@ FF_WT7: LD C,(HL) ; IF TOGGLE BIT (BIT 6)
XOR C ; IS THE SAME ON BOTH READS
BIT 6,A ; THEN ERASE IS COMPLETE SO EXIT.
JR NZ,FF_WT7 ; Z TRUE IF BIT 6=0 I.E. "NO TOGGLE" WAS DETECTED.
;
INC HL ; NEXT DESTINATION LOCATION
INC IX ; NEXT SOURCE LOCATION
;
INC DE ; CONTINUE WRITING UNTIL
BIT 4,D ; WE HAVE DONE ONE SECTOR
JR Z,FF_WR1
;
POP AF ; RETURN TO ORIGINAL BANK
CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
HB_EI
;
RET
;

Loading…
Cancel
Save