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

Loading…
Cancel
Save