From 5b8bfd26cd8d111af41437ab9d9ea6ff72110487 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 26 Dec 2020 01:38:21 +0800 Subject: [PATCH] Update md.asm Further optimization of loops utilizing alternate register AF' --- Source/HBIOS/md.asm | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 6ade72bb..dc130510 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -812,13 +812,20 @@ MD_FNCALL: #IF (MD_FDBG==1) CALL PRTHEXWORD #ENDIF +; + EX AF,AF' + PUSH AF + LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK ; 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 CALL HBX_BUF ; EXECUTE RELOCATED CODE - LD SP,(FF_SAVSTK) ; RESTORE STACK + LD SP,(MD_SAVSTK) ; RESTORE STACK HB_EI +; + POP AF + EX AF,AF' ; #IF (MD_FDBG==1) CALL PC_SPACE @@ -835,7 +842,7 @@ MD_FNCALL: POP HL RET ; RETURN TO MD_READF, MD_WRITEF ; -FF_SAVSTK .DW 0 +MD_SAVSTK .DW 0 ; ;====================================================================== ; 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 EXIT B CONTAINS BANK SELECT BYTE ; C CONTAINS HIGH BYTE OF SECTOR ADDRESS -; A CONTAINS CURRENT BANK HB_CURBNK ; ; DDDDDDDDEEEEEEEE HHHHHHHHLLLLLLLL ; 3322222222221111 1111110000000000 @@ -875,8 +881,6 @@ MD_CALCA: CALL PRTHEXWORD ; DISPLAY BANK AND CALL PC_SPACE ; SECTOR RESULT #ENDIF -; - LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK ; RET ; @@ -896,7 +900,7 @@ MD_CALCA: ; 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 CALL HBX_BNKSEL ; TO PROGRAM @@ -909,10 +913,10 @@ MD_FIDENT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY ; ; LD ($5555),A LD BC,($0000) ; READ ID ; - LD A,$F0 ; ; EXIT + LD A,$F0 ; LD A,$F0 ; EXIT 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 ; ; RET @@ -1040,7 +1044,7 @@ MD_R_SZ .EQU $-MD_FREAD_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ; DE = 0000 BYTE COUNT ; IX POINTS TO DATA TO BE VERIFIED ; 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 @@ -1048,20 +1052,18 @@ MD_FVERI_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY LD H,C ; SECTOR LD L,D ; ADDRESS ; - PUSH AF ; SAVE CURRENT BANK + EX AF,AF' ; PUT SOURCE BANK IN AF' (RAM) ; MD_FVE1: 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 + EX AF,AF' ; - LD A,C SUB (IX+0) ; COMPARE BYTE - LD C,A ; SET NON ZERO STATUS JR NZ,MD_FVE2 ; EXIT IF MISMATCH ; INC HL ; NEXT SOURCE LOCATION @@ -1070,11 +1072,11 @@ MD_FVE1: INC DE ; CONTINUE READING UNTIL BIT 4,D ; WE HAVE DONE ONE SECTOR JR Z,MD_FVE1 -; - LD C,E ; SET SUCCESS STATUS = 0 ; MD_FVE2: - POP AF + LD C,A ; SET STATUS + EX AF,AF' +; RET ; MD_V_SZ .EQU $-MD_FVERI_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED