diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index c5f127a..db8e78d 100755 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -52,48 +52,12 @@ OPIDX = FETCHOP+6 OPPAGE = OPIDX+1 STRBUF = $0280 INTERP = $03D0 -;* -;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO -;* -!MACRO FIX_IP { - TYA - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ LDY #$00 - } -!MACRO FIXJMP_IP .TARGET { - BMI + - JMP .TARGET -+ TYA - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ LDY #$00 - JMP .TARGET - } -!MACRO INCJMP_IP .TARGET { - INY - JMP .TARGET -+ TYA - CLC - ADC IPL - STA IPL - BCC + - INC IPH -+ LDY #$00 - JMP .TARGET - } ;****************************** ;* * ;* INTERPRETER INITIALIZATION * ;* * ;****************************** -* = $2000 +* = $2000 LDX #$FE TXS LDX #$00 @@ -753,17 +717,22 @@ CB LDA #$00 ;* ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) ;* -LA DEX - INY ;+INC_IP +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF +LA INY ;+INC_IP + BMI - + DEX LDA (IP),Y STA ESTKL,X INY - BMI + -- LDA (IP),Y + LDA (IP),Y STA ESTKH,X JMP NEXTOP -+ +FIX_IP - BPL - CW DEX INY ;+INC_IP LDA (IP),Y @@ -791,7 +760,7 @@ CS DEX TAY JMP NEXTOP ; -CSX DEX +CSX DEX INY ;+INC_IP TYA ; NORMALIZE IP CLC @@ -913,9 +882,16 @@ LWX LDA ESTKL,X ;* ;* LOAD ADDRESS OF LOCAL FRAME OFFSET ;* +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF LLA INY ;+INC_IP - BMI + -- LDA (IP),Y + BMI - + LDA (IP),Y DEX CLC ADC IFPL @@ -924,8 +900,6 @@ LLA INY ;+INC_IP ADC IFPH STA ESTKH,X JMP NEXTOP -+ +FIX_IP - BPL - ;* ;* LOAD VALUE FROM LOCAL FRAME OFFSET ;* @@ -1077,7 +1051,8 @@ SLB INY ;+INC_IP LDA ESTKL,X STA (IFP),Y LDY IPY - +FIXJMP_IP DROP + BMI FIXDROP + JMP DROP SLW INY ;+INC_IP LDA (IP),Y STY IPY @@ -1088,7 +1063,16 @@ SLW INY ;+INC_IP LDA ESTKH,X STA (IFP),Y LDY IPY - +FIXJMP_IP DROP + BMI FIXDROP + JMP DROP +FIXDROP TYA + LDY #$00 + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ JMP DROP ;* ;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK ;* @@ -1114,18 +1098,23 @@ DLW INY ;+INC_IP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS ;* +- TYA ; RENORMALIZE IP + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ LDY #$FF SAB INY ;+INC_IP + BMI - LDA (IP),Y STA ESTKH-2,X INY ;+INC_IP - BMI + -- LDA (IP),Y + LDA (IP),Y STA ESTKH-1,X LDA ESTKL,X STA (ESTKH-2,X) JMP DROP -+ +FIX_IP - BPL - SAW INY ;+INC_IP LDA (IP),Y STA TMPL @@ -1140,7 +1129,8 @@ SAW INY ;+INC_IP LDA ESTKH,X STA (TMP),Y LDY IPY - +FIXJMP_IP DROP + BMI FIXDROP + JMP DROP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK ;* @@ -1240,7 +1230,17 @@ BRTRU INX ORA ESTKL-1,X BNE BRNCH NOBRNCH INY ;+INC_IP - +INCJMP_IP NEXTOP + INY + BMI FIXNEXT + JMP NEXTOP +FIXNEXT TYA + LDY #$00 + CLC + ADC IPL + STA IPL + BCC + + INC IPH ++ JMP NEXTOP BRFLS INX LDA ESTKH-1,X ORA ESTKL-1,X diff --git a/src/vmsrc/plvm802.s b/src/vmsrc/plvm802.s index ee0798f..f6c04f8 100644 --- a/src/vmsrc/plvm802.s +++ b/src/vmsrc/plvm802.s @@ -72,37 +72,6 @@ INTERP = $03D0 TOS = $01 ; TOS NOS = $03 ; TOS-1 ;* -;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO -;* -!MACRO FIX_IP { - TYA - CLC - ADC IP - STA IP - LDY #$00 - } -!MACRO FIXJMP_IP .TARGET { - BMI + - JMP .TARGET -+ TYA - CLC - ADC IP - STA IP - LDY #$00 - JMP .TARGET - } -!MACRO INCJMP_IP .TARGET { - INY - BMI + - JMP .TARGET -+ TYA - CLC - ADC IP - STA IP - LDY #$00 - JMP .TARGET - } -;* ;* ACCUM/MEM SIZE MACROS ;* !MACRO ACCMEM8 { @@ -797,7 +766,10 @@ CB INY ;+INC_IP LA INY ;+INC_IP LDA (IP),Y PHA - +INCJMP_IP NEXTOP + INY + BMI + + JMP NEXTOP ++ JMP FIXNEXT CW INY ;+INC_IP LDA (IP),Y PHA @@ -931,16 +903,19 @@ LWX TYX ;* ;* LOAD ADDRESS OF LOCAL FRAME OFFSET ;* +- TYA + CLC + ADC IP + STA IP + LDY #$FF LLA INY ;+INC_IP - BMI + -- LDA (IP),Y + BMI - + LDA (IP),Y AND #$00FF CLC ADC IFP PHA JMP NEXTOP -+ +FIX_IP - BPL - ;* ;* LOAD VALUE FROM LOCAL FRAME OFFSET ;* @@ -1083,9 +1058,14 @@ SW TYX ;* STORE VALUE TO LOCAL FRAME OFFSET ;* !IF SELFMODIFY { +- TYA + CLC + ADC IP + STA IP + LDY #$FF SLB INY ;+INC_IP - BMI + -- LDA (IP),Y + BMI - + LDA (IP),Y AND #$00FF CLC ADC IFP @@ -1094,8 +1074,6 @@ SLB INY ;+INC_IP TAX SLBSTX STX $FFFF JMP NEXTOP -+ +FIX_IP - BPL - } ELSE { SLB INY ;+INC_IP TYX @@ -1106,7 +1084,9 @@ SLB INY ;+INC_IP STA (IFP),Y +ACCMEM16 ; 16 BIT A/M TXY - +FIXJMP_IP NEXTOP + BMI + + JMP NEXTOP ++ JMP FIXNEXT } SLW INY ;+INC_IP LDA (IP),Y @@ -1115,7 +1095,9 @@ SLW INY ;+INC_IP PLA STA (IFP),Y TXY - +FIXJMP_IP NEXTOP + BMI + + JMP NEXTOP ++ JMP FIXNEXT ;* ;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK ;* @@ -1160,7 +1142,10 @@ SAB INY ;+INC_IP PLA TAX SABSTX STX $FFFF - +INCJMP_IP NEXTOP + INY + BMI + + JMP NEXTOP ++ JMP FIXNEXT } ELSE { SAB INY ;+INC_IP LDA (IP),Y @@ -1169,14 +1154,20 @@ SAB INY ;+INC_IP +ACCMEM8 ; 8 BIT A/M STA (TMP) +ACCMEM16 ; 16 BIT A/M - +INCJMP_IP NEXTOP + INY + BMI + + JMP NEXTOP ++ JMP FIXNEXT } SAW INY ;+INC_IP LDA (IP),Y STA TMP PLA STA (TMP) - +INCJMP_IP NEXTOP + INY + BMI + + JMP NEXTOP ++ JMP FIXNEXT ;* ;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK ;* @@ -1269,7 +1260,15 @@ ISLT PLA BRTRU PLA BNE BRNCH NOBRNCH INY ;+INC_IP - +INCJMP_IP NEXTOP + INY + BMI FIXNEXT + JMP NEXTOP +FIXNEXT TYA + CLC + ADC IP + STA IP + LDY #$00 + JMP NEXTOP BRFLS PLA BNE NOBRNCH BRNCH TYA ; FLATTEN IP