diff --git a/src/vmsrc/plvm01.s b/src/vmsrc/plvm01.s index f1858e6..2b499e2 100644 --- a/src/vmsrc/plvm01.s +++ b/src/vmsrc/plvm01.s @@ -54,28 +54,30 @@ IINTERP PLA ;* MUL STY IPY LDY #$10 - LDA #$00 - STA TMPL ; PRODL - STA TMPH ; PRODH -MULLP LSR ESTKH,X ; MULTPLRH - ROR ESTKL,X ; MULTPLRL - BCC + - LDA ESTKL+1,X ; MULTPLNDL - CLC - ADC TMPL ; PRODL + LDA ESTKL+1,X + EOR #$FF STA TMPL - LDA ESTKH+1,X ; MULTPLNDH - ADC TMPH ; PRODH + LDA ESTKH+1,X + EOR #$FF STA TMPH -+ ASL ESTKL+1,X ; MULTPLNDL - ROL ESTKH+1,X ; MULTPLNDH + LDA #$00 + STA ESTKL+1,X ; PRODL +; STA ESTKH+1,X ; PRODH +MULLP LSR TMPH ; MULTPLRH + ROR TMPL ; MULTPLRL + BCS + + STA ESTKH+1,X ; PRODH + LDA ESTKL,X ; MULTPLNDL + ADC ESTKL+1,X ; PRODL + STA ESTKL+1,X + LDA ESTKH,X ; MULTPLNDH + ADC ESTKH+1,X ; PRODH ++ ASL ESTKL,X ; MULTPLNDL + ROL ESTKH,X ; MULTPLNDH DEY BNE MULLP + STA ESTKH+1,X ; PRODH INX -; LDA TMPH ; PRODH - STA ESTKH,X - LDA TMPL ; PRODL - STA ESTKL,X LDY IPY JMP NEXTOP ;* @@ -119,7 +121,6 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E ;* DIV TOS-1 BY TOS ;* DIV JSR _DIV - INX LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCS NEG JMP NEXTOP @@ -127,7 +128,6 @@ DIV JSR _DIV ;* MOD TOS-1 BY TOS ;* MOD JSR _DIV - INX LDA TMPL ; REMNDRL STA ESTKL,X LDA TMPH ; REMNDRH @@ -184,23 +184,24 @@ _DIV1 LDY #$11 ; #BITS+1 ROL ESTKH+1,X ; DVDNDH DEY BCC - - STY ESTKL-1,X _DIVLP ROL TMPL ; REMNDRL ROL TMPH ; REMNDRH LDA TMPL ; REMNDRL - SEC - SBC ESTKL,X ; DVSRL - TAY + CMP ESTKL,X ; DVSRL LDA TMPH ; REMNDRH SBC ESTKH,X ; DVSRH BCC + STA TMPH ; REMNDRH - STY TMPL ; REMNDRL -+ ROL ESTKL+1,X ; DVDNDL + LDA TMPL ; REMNDRL + SBC ESTKL,X ; DVSRL + STA TMPL ; REMNDRL + SEC ++ ROL ESTKL+1,X ; DVDNDL ROL ESTKH+1,X ; DVDNDH - DEC ESTKL-1,X + DEY BNE _DIVLP LDY IPY + INX RTS ;* ;* ADD TOS TO TOS-1 diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index b0e15bc..4db2f03 100644 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -300,7 +300,7 @@ CMDENTRY = * ; ; INSTALL PAGE 3 VECTORS ; - LDY #$17 + LDY #$12 - LDA PAGE3,Y STA INTERP,Y DEY @@ -381,13 +381,11 @@ PAGE3 = * JMP IINTRP BIT LCRDEN+LCBNK2 ; $03DC - INDIRECT INTERPX ENTRY JMP IINTRPX - BIT LCRDEN+LCBNK2 ; $03E2 - PROFILER ENTRY - JMP PROFILER } -DEFCMD !FILL 27 +DEFCMD !FILL 30 ENDBYE = * } -LCDEFCMD = *-27 ; DEFCMD IN LC MEMORY +LCDEFCMD = *-30 ; DEFCMD IN LC MEMORY ;***************** ;* * ;* OPXCODE TABLE * @@ -445,28 +443,30 @@ IDXW LDA ESTKL,X ;* MUL STY IPY LDY #$10 - LDA #$00 - STA TMPL ; PRODL - STA TMPH ; PRODH -MULLP LSR ESTKH,X ; MULTPLRH - ROR ESTKL,X ; MULTPLRL - BCC + - LDA ESTKL+1,X ; MULTPLNDL - CLC - ADC TMPL ; PRODL + LDA ESTKL+1,X + EOR #$FF STA TMPL - LDA ESTKH+1,X ; MULTPLNDH - ADC TMPH ; PRODH + LDA ESTKH+1,X + EOR #$FF STA TMPH -+ ASL ESTKL+1,X ; MULTPLNDL - ROL ESTKH+1,X ; MULTPLNDH + LDA #$00 + STA ESTKL+1,X ; PRODL +; STA ESTKH+1,X ; PRODH +MULLP LSR TMPH ; MULTPLRH + ROR TMPL ; MULTPLRL + BCS + + STA ESTKH+1,X ; PRODH + LDA ESTKL,X ; MULTPLNDL + ADC ESTKL+1,X ; PRODL + STA ESTKL+1,X + LDA ESTKH,X ; MULTPLNDH + ADC ESTKH+1,X ; PRODH ++ ASL ESTKL,X ; MULTPLNDL + ROL ESTKH,X ; MULTPLNDH DEY BNE MULLP + STA ESTKH+1,X ; PRODH INX -; LDA TMPH ; PRODH - STA ESTKH,X - LDA TMPL ; PRODL - STA ESTKL,X LDY IPY JMP NEXTOP ;* @@ -507,23 +507,24 @@ _DIV1 LDY #$11 ; #BITS+1 ROL ESTKH+1,X ; DVDNDH DEY BCC - - STY ESTKL-1,X _DIVLP ROL TMPL ; REMNDRL ROL TMPH ; REMNDRH LDA TMPL ; REMNDRL - SEC - SBC ESTKL,X ; DVSRL - TAY + CMP ESTKL,X ; DVSRL LDA TMPH ; REMNDRH SBC ESTKH,X ; DVSRH BCC + STA TMPH ; REMNDRH - STY TMPL ; REMNDRL -+ ROL ESTKL+1,X ; DVDNDL + LDA TMPL ; REMNDRL + SBC ESTKL,X ; DVSRL + STA TMPL ; REMNDRL + SEC ++ ROL ESTKL+1,X ; DVDNDL ROL ESTKH+1,X ; DVDNDH - DEC ESTKL-1,X + DEY BNE _DIVLP LDY IPY + INX RTS ;* ;* NEGATE TOS @@ -540,7 +541,6 @@ NEG LDA #$00 ;* DIV TOS-1 BY TOS ;* DIV JSR _DIV - INX LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCS NEG JMP NEXTOP @@ -548,7 +548,6 @@ DIV JSR _DIV ;* MOD TOS-1 BY TOS ;* MOD JSR _DIV - INX LDA TMPL ; REMNDRL STA ESTKL,X LDA TMPH ; REMNDRH @@ -1560,308 +1559,5 @@ LEAVEX STA ALTRDOFF RETX STA ALTRDOFF CLI RTS -;********************* -;* * -;* BYTECODE PROFILER * -;* * -;********************* -STATS = $DF00 -;* -;* PROFILER CONTROL -;* -;* A = 0 : DISABLE -;* A = 1 : ENABLE SYS+USER OPS -;* A = 2 : ENABLE USER OPS -;* A = 3 : WRITE STATS TO (DST), 260 BYTES -;* -PROFILER CMP #$00 - BNE + -; -; DISABLE PROFILER, RESTORE INTERP ENTRYPOINTS -; - LDA #IINTRP - STA $03DB - LDA #IINTRPX - STA $03E1 - RTS -; -; ENABLE PROFILER, SET PROFILING INTERP ENTRYPOINTS, CLEAR STATS -; -+ CMP #$01 - BNE + - LDA #PIINTRP - STA $03DB - LDA #PIINTRPX - STA $03E1 - BIT LCRWEN+LCBNK2 - BIT LCRWEN+LCBNK2 - LDA #$00 - STA TTLOPS - STA TTLOPS+1 - STA TTLOPS+2 - STA TTLOPS+3 - TAY -- STA STATS,Y - INY - BNE - - RTS -; -; COPY STATS TO MAIN MEMORY -; -+ CMP #$02 - BNE ++ - LDX #$00 - LDA TTLOPS - STA (DST,X) - INC DSTL - BNE + - INC DSTH -+ LDA TTLOPS+1 - STA (DST,X) - INC DSTL - BNE + - INC DSTH -+ LDA TTLOPS+2 - STA (DST,X) - INC DSTL - BNE + - INC DSTH -+ LDA TTLOPS+3 - STA (DST,X) - INC DSTL - BNE + - INC DSTH -+ LDY #$00 -- LDA STATS,Y - STA (DST,X) - INC DSTL - BNE + - INC DSTH -+ LDA STATS+64,Y - STA (DST,X) - INC DSTL - BNE + - INC DSTH -+ LDA STATS+128,Y - STA (DST,X) - INC DSTL - BNE + - INC DSTH -+ LDA STATS+192,Y - STA (DST,X) - INC DSTL - BNE + - INC DSTH -+ INY - CPY #64 - BNE - -++ RTS -;* -;* ENTER INTO BYTECODE INTERPRETER -;* -PIINTRP PLA - STA TMPL - PLA - STA TMPH - LDY #$02 - LDA (TMP),Y - STA IPH - DEY - LDA (TMP),Y - STA IPL - DEY - LDA #>PROTBL - STA OPPAGE - BIT LCRWEN+LCBNK2 - BIT LCRWEN+LCBNK2 - JMP FETCHOP -PIINTRPX PLA - STA TMPL - PLA - STA TMPH - LDY #$02 - LDA (TMP),Y - STA IPH - DEY - LDA (TMP),Y - STA IPL - DEY - LDA #>PROXTBL - STA OPPAGE - SEI - STA ALTRDON - BIT LCRWEN+LCBNK2 - BIT LCRWEN+LCBNK2 - JMP FETCHOP -;* -;* PROFILE OPS -;* -PROP ORA #$80 - STA PROPJMP+1 - AND #$7F - JSR UPDTSTATS -PROPJMP JMP (OPTBL) -PROPX STA PROPXJMP+1 - JSR UPDTSTATS -PROPXJMP JMP (OPXTBL) -UPDTSTATS STX ESP - LSR - TAX - INC STATS,X - BNE + - INC STATS+64,X - BNE + - INC STATS+128,X - BNE + - INC STATS+192,X -+ LDX ESP - INC TTLOPS - BNE + - INC TTLOPS+1 - BNE + - INC TTLOPS+2 - BNE + - INC TTLOPS+3 -+ RTS -PROCALL JSR UPDTSTATS - +INC_IP - LDA (IP),Y - STA TMPL - +INC_IP - LDA (IP),Y - STA TMPH - LDA IPH - PHA - LDA IPL - PHA - TYA - PHA - JSR JMPTMP - PLA - TAY - PLA - STA IPL - PLA - STA IPH - LDA #>PROTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE - STA OPPAGE - BIT LCRWEN+LCBNK2 - BIT LCRWEN+LCBNK2 - JMP NEXTOP -; -PROCALLX JSR UPDTSTATS - +INC_IP - LDA (IP),Y - STA TMPL - +INC_IP - LDA (IP),Y - STA TMPH - LDA IPH - PHA - LDA IPL - PHA - TYA - PHA - STA ALTRDOFF - CLI - JSR JMPTMP - SEI - STA ALTRDON - PLA - TAY - PLA - STA IPL - PLA - STA IPH - LDA #>PROXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE - STA OPPAGE - BIT LCRWEN+LCBNK2 - BIT LCRWEN+LCBNK2 - JMP NEXTOP -;* -;* INDIRECT CALL TO ADDRESS (NATIVE CODE) -;* -PROICAL JSR UPDTSTATS - LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - INX - LDA IPH - PHA - LDA IPL - PHA - TYA - PHA - JSR JMPTMP - PLA - TAY - PLA - STA IPL - PLA - STA IPH - LDA #>PROTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE - STA OPPAGE - BIT LCRWEN+LCBNK2 - BIT LCRWEN+LCBNK2 - JMP NEXTOP -; -PROICALX JSR UPDTSTATS - LDA ESTKL,X - STA TMPL - LDA ESTKH,X - STA TMPH - INX - LDA IPH - PHA - LDA IPL - PHA - TYA - PHA - STA ALTRDOFF - CLI - JSR JMPTMP - SEI - STA ALTRDON - PLA - TAY - PLA - STA IPL - PLA - STA IPH - LDA #>PROXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE - STA OPPAGE - BIT LCRWEN+LCBNK2 - BIT LCRWEN+LCBNK2 - JMP NEXTOP -TTLOPS !WORD 0, 0 -;* -;* PROFILING OP TABLE -;* - !ALIGN 255,0 -PROXTBL !WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX - !WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX - !WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX - !WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX - !WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX - !WORD PROPX,PROPX,PROCALLX,PROICALX,PROPX,PROPX,PROPX,PROPX - !WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX - !WORD PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX,PROPX -PROTBL !WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP - !WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP - !WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP - !WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP - !WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP - !WORD PROP,PROP,PROCALL,PROICAL,PROP,PROP,PROP,PROP - !WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP - !WORD PROP,PROP,PROP,PROP,PROP,PROP,PROP,PROP VMEND = * } \ No newline at end of file diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index 95e3eef..58b1a0e 100644 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -174,23 +174,24 @@ _DIV1 LDY #$11 ; #BITS+1 ROL ESTKH+1,X ; DVDNDH DEY BCC - - STY ESTKL-1,X _DIVLP ROL TMPL ; REMNDRL ROL TMPH ; REMNDRH LDA TMPL ; REMNDRL - SEC - SBC ESTKL,X ; DVSRL - TAY + CMP ESTKL,X ; DVSRL LDA TMPH ; REMNDRH SBC ESTKH,X ; DVSRH BCC + STA TMPH ; REMNDRH - STY TMPL ; REMNDRL -+ ROL ESTKL+1,X ; DVDNDL + LDA TMPL ; REMNDRL + SBC ESTKL,X ; DVSRL + STA TMPL ; REMNDRL + SEC ++ ROL ESTKL+1,X ; DVDNDL ROL ESTKH+1,X ; DVDNDH - DEC ESTKL-1,X + DEY BNE _DIVLP LDY IPY + INX RTS ;* ;* OPCODE TABLE @@ -209,28 +210,30 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E ;* MUL STY IPY LDY #$10 - LDA #$00 - STA TMPL ; PRODL - STA TMPH ; PRODH -MULLP LSR ESTKH,X ; MULTPLRH - ROR ESTKL,X ; MULTPLRL - BCC + - LDA ESTKL+1,X ; MULTPLNDL - CLC - ADC TMPL ; PRODL + LDA ESTKL+1,X + EOR #$FF STA TMPL - LDA ESTKH+1,X ; MULTPLNDH - ADC TMPH ; PRODH + LDA ESTKH+1,X + EOR #$FF STA TMPH -+ ASL ESTKL+1,X ; MULTPLNDL - ROL ESTKH+1,X ; MULTPLNDH + LDA #$00 + STA ESTKL+1,X ; PRODL +; STA ESTKH+1,X ; PRODH +MULLP LSR TMPH ; MULTPLRH + ROR TMPL ; MULTPLRL + BCS + + STA ESTKH+1,X ; PRODH + LDA ESTKL,X ; MULTPLNDL + ADC ESTKL+1,X ; PRODL + STA ESTKL+1,X + LDA ESTKH,X ; MULTPLNDH + ADC ESTKH+1,X ; PRODH ++ ASL ESTKL,X ; MULTPLNDL + ROL ESTKH,X ; MULTPLNDH DEY BNE MULLP + STA ESTKH+1,X ; PRODH INX -; LDA TMPH ; PRODH - STA ESTKH,X - LDA TMPL ; PRODL - STA ESTKL,X LDY IPY JMP NEXTOP ;* @@ -248,7 +251,6 @@ NEG LDA #$00 ;* DIV TOS-1 BY TOS ;* DIV JSR _DIV - INX LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCS NEG JMP NEXTOP @@ -256,7 +258,6 @@ DIV JSR _DIV ;* MOD TOS-1 BY TOS ;* MOD JSR _DIV - INX LDA TMPL ; REMNDRL STA ESTKL,X LDA TMPH ; REMNDRH