diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 73642165..6ade72bb 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -813,13 +813,10 @@ MD_FNCALL: CALL PRTHEXWORD #ENDIF ; - LD HL,MD_FNRET ; ADDRESS RELOCATABLE CODE TO RETURN TO HB_DI LD (FF_SAVSTK),SP ; SAVE CURRENT STACK - LD SP,HBX_BUF_END-2 ; SETUP A NEW HIMEM STACK AT END OF HX_BUF - EX (SP),HL ; BEHIND CODE WITH RETURN ADDRESS PREPOPULATED - JP HBX_BUF ; EXECUTE RELOCATED CODE -MD_FNRET: + 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 HB_EI ; @@ -881,7 +878,7 @@ MD_CALCA: ; LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK ; - RET ; RETURN TO MD_FNRET + RET ; ;====================================================================== ; FLASH IDENTIFY @@ -916,9 +913,9 @@ MD_FIDENT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY LD (HL),A ; LD ($5555),A ; COMMAND ; POP AF ; RETURN TO ORIGINAL BANK - CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY + JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY ; - RET ; RETURN TO MD_FNRET +; RET ; MD_I_SZ .EQU $-MD_FIDENT_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ; @@ -979,9 +976,9 @@ MD_WT4: LD A,(HL) ; DO TWO SUCCESSIVE READS MD_WT5: LD C,L ; SET SUCCESS STATUS ; MD_WT6: POP AF ; RETURN TO ORIGINAL BANK - CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY + JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY ; - RET ; RETURN TO MD_FNRET +; RET ; MD_S_SZ .EQU $-MD_FERAS_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ; @@ -999,6 +996,7 @@ MD_S_SZ .EQU $-MD_FERAS_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ; IX POINTS TO DATA TO BE WRITTEN ; A CONTAINS CURRENT BANK ; ON EXIT NO STATUS RETURNED +; AF' TRASHED ;====================================================================== ; MD_FREAD_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY @@ -1006,17 +1004,17 @@ MD_FREAD_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 DESTINATION BANK IN AF' + LD A,B ; PUT SOURCE BANK IN AF ; MD_FRD1: - LD A,B ; SELECT BANK - CALL HBX_BNKSEL ; TO READ - LD C,(HL) ; READ BYTE -; - POP AF - PUSH AF ; SELECT BANK + CALL HBX_BNKSEL ; READ ; SWITCH TO SOURCE BANK + LD C,(HL) ; BYTE +; + EX AF,AF' ; SELECT BANK ; SWITCH DESTINATION BANK CALL HBX_BNKSEL ; TO WRITE LD (IX+0),C ; WRITE BYTE + EX AF,AF' ; ; PUT SOURCE BANK IN AF ; INC HL ; NEXT SOURCE LOCATION INC IX ; NEXT DESTINATION LOCATION @@ -1024,11 +1022,8 @@ MD_FRD1: INC DE ; CONTINUE READING UNTIL BIT 4,D ; WE HAVE DONE ONE SECTOR JR Z,MD_FRD1 - - POP AF ; RETURN TO ORIGINAL BANK - CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY ; - RET ; RETURN TO MD_FNRET + RET ; MD_R_SZ .EQU $-MD_FREAD_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ; @@ -1062,7 +1057,7 @@ MD_FVE1: ; POP AF PUSH AF ; SELECT BANK - CALL HBX_BNKSEL ; TO WRITE + CALL HBX_BNKSEL ; TO VERIFY AGAINST ; LD A,C SUB (IX+0) ; COMPARE BYTE @@ -1079,10 +1074,8 @@ MD_FVE1: LD C,E ; SET SUCCESS STATUS = 0 ; MD_FVE2: - POP AF ; RETURN TO ORIGINAL BANK - CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY -; - RET ; RETURN TO MD_FNRET + POP AF + RET ; MD_V_SZ .EQU $-MD_FVERI_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ; @@ -1144,9 +1137,9 @@ MD_FW7: LD A,(HL) ; FROM THE SAME FLASH ADDRESS. JR Z,MD_FWRI1 ; POP AF ; RETURN TO ORIGINAL BANK - CALL HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY + JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY ; - RET +; RET ; MD_W_SZ .EQU $-MD_FWRIT_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ;