From 21f926a76334879d3640232cc3fc6f2e12d1f3cd Mon Sep 17 00:00:00 2001 From: Dave Schmenk Date: Tue, 30 Jun 2020 15:16:21 -0700 Subject: [PATCH] Clean-up around call/return --- src/vmsrc/apple/plvm802.s | 266 ++++++++------------------------------ 1 file changed, 51 insertions(+), 215 deletions(-) diff --git a/src/vmsrc/apple/plvm802.s b/src/vmsrc/apple/plvm802.s index 4b4f9e7..d119562 100644 --- a/src/vmsrc/apple/plvm802.s +++ b/src/vmsrc/apple/plvm802.s @@ -92,44 +92,6 @@ NOS = $03 ; TOS-1 REP #$10 ; 16 BIT X/Y !AL } -;* -;* HW STACK <-> ZP STACK COPIES -;* - !MACRO STACKTOZP { - +ACCMEM8 ; 8 BIT A/M - TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK - SEC - SBC HWSP ; STACK DEPTH = (HWSP - SP)/2 - LSR ; CARRY BETTER BE CLEAR AFTER THIS - ADC ESP ; ESP - STACK DEPTH - TAX - CPX ESP - BEQ + - TAY -- PLA - STA ESTKL,Y - PLA - STA ESTKH,Y - INY - CPY ESP - BNE - -+ - } - !MACRO ZPTOSTACK { - TSX ; RESTORE BASELINE HWSP - STX HWSP - CPY TMPL - BEQ + - TYX -- DEX - LDA ESTKH,X - PHA - LDA ESTKL,X - PHA - CPX TMPL - BNE - -+ - } ;****************************** ;* * ;* INTERPRETER INITIALIZATION * @@ -1632,26 +1594,19 @@ ICAL PLA CALL INY ;+INC_IP LDA (IP),Y INY -EMUSTK STA TMP ; CALL THROUGH JMPTMP LATER +EMUSTK STA TMP TYA ; FLATTEN IP SEC ADC IP STA IP - +ACCMEM8 ; 8 BIT A/M + SEC ; SWITCH TO EMULATION MODE + XCE + !AS TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK - EOR #$FF - SEC - ADC HWSP ; STACK DEPTH = (HWSP - SP)/2 - LSR -!IF DEBUG { - PHA - CLC - ADC #$80+'0' - STA $7D0+31 - PLA -} - EOR #$FF SEC + SBC HWSP ; STACK DEPTH = (HWSP - SP)/2 + CMP #$80 + ROR ADC ESP ; ESP - STACK DEPTH TAX TAY @@ -1664,24 +1619,11 @@ EMUSTK STA TMP ; CALL THROUGH JMPTMP LATER INY CPY ESP BNE - -+ -!IF DEBUG { - TXA - TSX - CPX HWSP - BEQ + - LDX #$80+'C' - STX $7D0+30 -- LDX $C000 - BPL - - LDX $C010 -+ TAX -} - PEI (IP) ; SAVE INSTRUCTION POINTER ++ PEI (IP) ; SAVE INSTRUCTION POINTER PHY ; SAVE BASELINE ESP LDA PSR PHA - PLP ; CALL IN EMULATION MODE + PLP JSR JMPTMP PHP PLA @@ -1689,44 +1631,26 @@ EMUSTK STA TMP ; CALL THROUGH JMPTMP LATER SEI CLC ; SWITCH BACK TO NATIVE MODE XCE + +ACCMEM16 ; 16 BIT A/M PLY ; MOVE RETURN VALUES TO HW EVAL STACK STY ESP ; RESTORE BASELINE ESP PLA - STA IPL - PLA - STA IPH -!IF DEBUG { - TXA - EOR #$FF - SEC - ADC ESP - CLC - ADC #$80+'0' - STA $7D0+32 -} + STA IP STX TMPL TSX ; RESTORE BASELINE HWSP STX HWSP CPY TMPL BEQ + - DEY - LDA ESTKH,Y - PHA - LDA ESTKL,Y - PHA + LDX ESTKH,Y + PHX + LDX ESTKL,Y + PHX CPY TMPL BNE - + LDX #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE -!IF DEBUG { - LDY LCRWEN+LCBNK2 - LDY LCRWEN+LCBNK2 - STX DBG_OP+2 - LDY LCRDEN+LCBNK2 - LDX #>DBGTBL -} STX OPPAGE LDY #$00 - +ACCMEM16 ; 16 BIT A/M JMP FETCHOP ;* ;* INDIRECT CALL TO ADDRESS (NATIVE CODE) @@ -1739,26 +1663,19 @@ ICALX PLA CALLX INY ;+INC_IP LDA (IP),Y INY -EMUSTKX STA TMP ; CALL THROUGH JMPTMP LATER +EMUSTKX STA TMP TYA ; FLATTEN IP SEC ADC IP STA IP - +ACCMEM8 ; 8 BIT A/M + SEC ; SWITCH TO EMULATION MODE + XCE + !AS TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK - EOR #$FF - SEC - ADC HWSP ; STACK DEPTH = (HWSP - SP)/2 - LSR -!IF DEBUG { - PHA - CLC - ADC #$80+'0' - STA $7D0+31 - PLA -} - EOR #$FF SEC + SBC HWSP ; STACK DEPTH = (HWSP - SP)/2 + CMP #$80 + ROR ADC ESP ; ESP - STACK DEPTH TAX TAY @@ -1771,25 +1688,12 @@ EMUSTKX STA TMP ; CALL THROUGH JMPTMP LATER INY CPY ESP BNE - -+ -!IF DEBUG { - TXA - TSX - CPX HWSP - BEQ + - LDX #$80+'X' - STX $7D0+30 -- LDX $C000 - BPL - - LDX $C010 -+ TAX -} - PEI (IP) ; SAVE INSTRUCTION POINTER ++ PEI (IP) ; SAVE INSTRUCTION POINTER PHY ; SAVE BASELINE ESP - STX ALTRDOFF + STA ALTRDOFF LDA PSR PHA - PLP ; CALL IN EMULATION MODE + PLP JSR JMPTMP PHP PLA @@ -1798,50 +1702,28 @@ EMUSTKX STA TMP ; CALL THROUGH JMPTMP LATER STX ALTRDON CLC ; SWITCH BACK TO NATIVE MODE XCE + +ACCMEM16 ; 16 BIT A/M PLY ; MOVE RETURN VALUES TO HW EVAL STACK STY ESP ; RESTORE BASELINE ESP PLA - STA IPL - PLA - STA IPH -!IF DEBUG { - TXA - EOR #$FF - SEC - ADC ESP - CLC - ADC #$80+'0' - STA $7D0+32 -} + STA IP STX TMPL TSX ; RESTORE BASELINE HWSP STX HWSP CPY TMPL BEQ + - DEY - LDA ESTKH,Y - PHA - LDA ESTKL,Y - PHA + LDX ESTKH,Y + PHX + LDX ESTKL,Y + PHX CPY TMPL BNE - + LDX #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE -!IF DEBUG { - LDY LCRWEN+LCBNK2 - LDY LCRWEN+LCBNK2 - STX DBG_OP+2 - LDY LCRDEN+LCBNK2 - LDX #>DBGTBL -} STX OPPAGE LDY #$00 - +ACCMEM16 ; 16 BIT A/M JMP FETCHOP ;* -;* JUMP INDIRECT THROUGH TMP -;* -;JMPTMP JMP (TMP) -;* ;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT ;* ENTER PEI (IFP) ; SAVE ON STACK FOR LEAVE @@ -1850,15 +1732,6 @@ ENTER PEI (IFP) ; SAVE ON STACK FOR LEAVE INY LDA (IP),Y AND #$00FF -!IF DEBUG { - +ACCMEM8 ; 8 BIT A/M - PHA - CLC - ADC #$80+'0' - STA $7D0+31 - PLA - +ACCMEM16 ; 16 BIT A/M -} EOR #$FFFF ; ALLOCATE FRAME SEC ADC PP @@ -1896,19 +1769,10 @@ LEAVEX INY ;+INC_IP STA ALTRDOFF + STA TMPL TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK - EOR #$FF - SEC - ADC HWSP ; STACK DEPTH = (HWSP - SP)/2 - LSR -!IF DEBUG { - PHA - CLC - ADC #$80+'0' - STA $7D0+31 - PLA -} - EOR #$FF SEC + SBC HWSP ; STACK DEPTH = (HWSP - SP)/2 + CMP #$80 + ROR ADC ESP ; ESP - STACK DEPTH TAX CPX ESP @@ -1921,18 +1785,6 @@ LEAVEX INY ;+INC_IP INY CPY ESP BNE - -!IF DEBUG { - PHX - TSX - CPX HWSP - BEQ + - LDX #$80+'L' - STX $7D0+30 -- LDX $C000 - BPL - - LDX $C010 -+ PLX -} ++ +ACCMEM16 ; 16 BIT A/M LDY TMPL ; DEALLOCATE POOL + FRAME TYA @@ -1941,26 +1793,23 @@ LEAVEX INY ;+INC_IP STA PP PLA ; RESTORE PREVIOUS FRAME STA IFP - LDY PSR - PHY - PLP ; RETURN IN EMULATION MODE - RTS -RETX STX ALTRDOFF -RET +ACCMEM8 ; 8 BIT A/M - TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK - EOR #$FF - SEC - ADC HWSP ; STACK DEPTH = (HWSP - SP)/2 - LSR -!IF DEBUG { + SEC ; SWITCH TO EMULATION MODE + XCE + !AS + LDA PSR PHA - CLC - ADC #$80+'0' - STA $7D0+31 - PLA -} - EOR #$FF + PLP + RTS ; RETURN IN EMULATION MODE + !AL +RETX STX ALTRDOFF +RET SEC ; SWITCH TO EMULATION MODE + XCE + !AS + TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK SEC + SBC HWSP ; STACK DEPTH = (HWSP - SP)/2 + CMP #$80 + ROR ADC ESP ; ESP - STACK DEPTH TAX CPX ESP @@ -1973,26 +1822,13 @@ RET +ACCMEM8 ; 8 BIT A/M INY CPY ESP BNE - -!IF DEBUG { - PHX - TSX - CPX HWSP - BEQ + - LDX #$80+'X' - STX $7D0+30 -- LDX $C000 - BPL - - LDX $C010 -+ PLX -} ++ LDA PSR PHA - PLP ; RETURN IN EMULATION MODE - RTS + PLP + RTS ; RETURN IN EMULATION MODE ;* ;* RETURN TO NATIVE CODE ;* - !AL NATV TYA ; FLATTEN IP SEC ADC IP