Browse Source

Update md.asm

Further optimization of loops utilizing alternate register AF'
pull/169/head
b1ackmai1er 5 years ago
parent
commit
5b8bfd26cd
  1. 42
      Source/HBIOS/md.asm

42
Source/HBIOS/md.asm

@ -812,13 +812,20 @@ MD_FNCALL:
#IF (MD_FDBG==1) #IF (MD_FDBG==1)
CALL PRTHEXWORD CALL PRTHEXWORD
#ENDIF #ENDIF
;
EX AF,AF'
PUSH AF
LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK
; ;
HB_DI HB_DI
LD (FF_SAVSTK),SP ; SAVE CURRENT STACK
LD (MD_SAVSTK),SP ; SAVE CURRENT STACK
LD SP,HBX_BUF_END ; SETUP A NEW HIMEM STACK AT END OF HX_BUF LD SP,HBX_BUF_END ; SETUP A NEW HIMEM STACK AT END OF HX_BUF
CALL HBX_BUF ; EXECUTE RELOCATED CODE CALL HBX_BUF ; EXECUTE RELOCATED CODE
LD SP,(FF_SAVSTK) ; RESTORE STACK
LD SP,(MD_SAVSTK) ; RESTORE STACK
HB_EI HB_EI
;
POP AF
EX AF,AF'
; ;
#IF (MD_FDBG==1) #IF (MD_FDBG==1)
CALL PC_SPACE CALL PC_SPACE
@ -835,7 +842,7 @@ MD_FNCALL:
POP HL POP HL
RET ; RETURN TO MD_READF, MD_WRITEF RET ; RETURN TO MD_READF, MD_WRITEF
; ;
FF_SAVSTK .DW 0
MD_SAVSTK .DW 0
; ;
;====================================================================== ;======================================================================
; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS ; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS
@ -843,7 +850,6 @@ FF_SAVSTK .DW 0
; ON ENTRY DE:HL CONTAINS 32 BIT MEMORY ADDRESS. ; ON ENTRY DE:HL CONTAINS 32 BIT MEMORY ADDRESS.
; ON EXIT B CONTAINS BANK SELECT BYTE ; ON EXIT B CONTAINS BANK SELECT BYTE
; C CONTAINS HIGH BYTE OF SECTOR ADDRESS ; C CONTAINS HIGH BYTE OF SECTOR ADDRESS
; A CONTAINS CURRENT BANK HB_CURBNK
; ;
; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL ; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL
; 3322222222221111 1111110000000000 ; 3322222222221111 1111110000000000
@ -875,8 +881,6 @@ MD_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
; ;
@ -896,7 +900,7 @@ MD_CALCA:
; ;
MD_FIDENT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY MD_FIDENT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
; ;
PUSH AF ; SAVE CURRENT BANK
LD D,A ; SAVE CURRENT BANK
; ;
LD A,B ; SELECT BANK LD A,B ; SELECT BANK
CALL HBX_BNKSEL ; TO PROGRAM CALL HBX_BNKSEL ; TO PROGRAM
@ -909,10 +913,10 @@ MD_FIDENT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
; ; LD ($5555),A ; ; LD ($5555),A
LD BC,($0000) ; READ ID LD BC,($0000) ; READ ID
; ;
LD A,$F0 ; ; EXIT
LD A,$F0 ; LD A,$F0 ; EXIT
LD (HL),A ; LD ($5555),A ; COMMAND LD (HL),A ; LD ($5555),A ; COMMAND
; ;
POP AF ; RETURN TO ORIGINAL BANK
LD A,D ; RETURN TO ORIGINAL BANK
JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
; ;
; RET ; RET
@ -1040,7 +1044,7 @@ MD_R_SZ .EQU $-MD_FREAD_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
; DE = 0000 BYTE COUNT ; DE = 0000 BYTE COUNT
; IX POINTS TO DATA TO BE VERIFIED ; IX POINTS TO DATA TO BE VERIFIED
; A CONTAINS CURRENT BANK ; A CONTAINS CURRENT BANK
; ON EXIT NO STATUS RETURNED
; ON EXIT C RETURNS STATUS 0=SUCCESS NZ=FAIL
;====================================================================== ;======================================================================
; ;
MD_FVERI_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY MD_FVERI_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
@ -1048,20 +1052,18 @@ MD_FVERI_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
LD H,C ; SECTOR LD H,C ; SECTOR
LD L,D ; ADDRESS LD L,D ; ADDRESS
; ;
PUSH AF ; SAVE CURRENT BANK
EX AF,AF' ; PUT SOURCE BANK IN AF' (RAM)
; ;
MD_FVE1: MD_FVE1:
LD A,B ; SELECT BANK LD A,B ; SELECT BANK
CALL HBX_BNKSEL ; TO READ
LD C,(HL) ; READ BYTE
CALL HBX_BNKSEL ; TO READ ; SWITCH TO FLASH BANK
LD A,(HL) ; READ BYTE
; ;
POP AF
PUSH AF ; SELECT BANK
EX AF,AF' ; SELECT BANK ; SWITCH TO RAM BANK
CALL HBX_BNKSEL ; TO VERIFY AGAINST CALL HBX_BNKSEL ; TO VERIFY AGAINST
EX AF,AF'
; ;
LD A,C
SUB (IX+0) ; COMPARE BYTE SUB (IX+0) ; COMPARE BYTE
LD C,A ; SET NON ZERO STATUS
JR NZ,MD_FVE2 ; EXIT IF MISMATCH JR NZ,MD_FVE2 ; EXIT IF MISMATCH
; ;
INC HL ; NEXT SOURCE LOCATION INC HL ; NEXT SOURCE LOCATION
@ -1070,11 +1072,11 @@ MD_FVE1:
INC DE ; CONTINUE READING UNTIL INC DE ; CONTINUE READING UNTIL
BIT 4,D ; WE HAVE DONE ONE SECTOR BIT 4,D ; WE HAVE DONE ONE SECTOR
JR Z,MD_FVE1 JR Z,MD_FVE1
;
LD C,E ; SET SUCCESS STATUS = 0
; ;
MD_FVE2: MD_FVE2:
POP AF
LD C,A ; SET STATUS
EX AF,AF'
;
RET RET
; ;
MD_V_SZ .EQU $-MD_FVERI_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED MD_V_SZ .EQU $-MD_FVERI_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED

Loading…
Cancel
Save