diff --git a/src/vmsrc/plvm01.s b/src/vmsrc/plvm01.s index 20f00c2..a412f5b 100644 --- a/src/vmsrc/plvm01.s +++ b/src/vmsrc/plvm01.s @@ -50,13 +50,13 @@ IINTERP PLA ;* MUL TOS-1 BY TOS ;* MUL STY IPY - LDY #$00 - STY TMPL ; PRODL - STY TMPH ; PRODH LDY #$10 -MUL1 LSR ESTKH,X ; MULTPLRH + LDA #$00 + STA TMPL ; PRODL + STA TMPH ; PRODH +MULLP LSR ESTKH,X ; MULTPLRH ROR ESTKL,X ; MULTPLRL - BCC MUL2 + BCC + LDA ESTKL+1,X ; MULTPLNDL CLC ADC TMPL ; PRODL @@ -64,18 +64,43 @@ MUL1 LSR ESTKH,X ; MULTPLRH LDA ESTKH+1,X ; MULTPLNDH ADC TMPH ; PRODH STA TMPH -MUL2 ASL ESTKL+1,X ; MULTPLNDL ++ ASL ESTKL+1,X ; MULTPLNDL ROL ESTKH+1,X ; MULTPLNDH DEY - BNE MUL1 + BNE MULLP INX +; LDA TMPH ; PRODH + STA ESTKH,X LDA TMPL ; PRODL STA ESTKL,X - LDA TMPH ; PRODH - STA ESTKH,X LDY IPY JMP NEXTOP ;* +;* INCREMENT TOS +;* +INCR INC ESTKL,X + BNE INCR1 + INC ESTKH,X +INCR1 JMP NEXTOP +;* +;* DECREMENT TOS +;* +DECR LDA ESTKL,X + BNE DECR1 + DEC ESTKH,X +DECR1 DEC ESTKL,X + JMP NEXTOP +;* +;* BITWISE COMPLIMENT TOS +;* +COMP LDA #$FF + EOR ESTKL,X + STA ESTKL,X + LDA #$FF + EOR ESTKH,X + STA ESTKH,X + JMP NEXTOP +;* ;* OPCODE TABLE ;* !ALIGN 255,0 @@ -88,73 +113,6 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD LB,LW,LLB,LLW,LAB,LAW,DLB,DLW ; 60 62 64 66 68 6A 6C 6E !WORD SB,SW,SLB,SLW,SAB,SAW,DAB,DAW ; 70 72 74 76 78 7A 7C 7E ;* -;* INTERNAL DIVIDE ALGORITHM -;* -_NEG LDA #$00 - SEC - SBC ESTKL,X - STA ESTKL,X - LDA #$00 - SBC ESTKH,X - STA ESTKH,X - RTS -_DIV STY IPY - LDA ESTKH,X - AND #$80 - STA DVSIGN - BPL _DIV1 - JSR _NEG - INC DVSIGN -_DIV1 LDA ESTKH+1,X - BPL _DIV2 - INX - JSR _NEG - DEX - INC DVSIGN - BNE _DIV3 -_DIV2 ORA ESTKL+1,X ; DVDNDL - BNE _DIV3 - STA TMPL - STA TMPH - RTS -_DIV3 LDY #$11 ; #BITS+1 - LDA #$00 - STA TMPL ; REMNDRL - STA TMPH ; REMNDRH -_DIV4 ASL ESTKL+1,X ; DVDNDL - ROL ESTKH+1,X ; DVDNDH - DEY - BCC _DIV4 - STY ESTKL-1,X -_DIV5 ROL TMPL ; REMNDRL - ROL TMPH ; REMNDRH - LDA TMPL ; REMNDRL - SEC - SBC ESTKL,X ; DVSRL - TAY - LDA TMPH ; REMNDRH - SBC ESTKH,X ; DVSRH - BCC _DIV6 - STA TMPH ; REMNDRH - STY TMPL ; REMNDRL -_DIV6 ROL ESTKL+1,X ; DVDNDL - ROL ESTKH+1,X ; DVDNDH - DEC ESTKL-1,X - BNE _DIV5 - LDY IPY - RTS -;* -;* NEGATE TOS -;* -NEG LDA #$00 - SEC - SBC ESTKL,X - STA ESTKL,X - LDA #$00 - SBC ESTKH,X - STA ESTKH,X - JMP NEXTOP -;* ;* DIV TOS-1 BY TOS ;* DIV JSR _DIV @@ -175,6 +133,73 @@ MOD JSR _DIV BMI NEG JMP NEXTOP ;* +;* NEGATE TOS +;* +NEG LDA #$00 + SEC + SBC ESTKL,X + STA ESTKL,X + LDA #$00 + SBC ESTKH,X + STA ESTKH,X + JMP NEXTOP +;* +;* INTERNAL DIVIDE ALGORITHM +;* +_NEG LDA #$00 + SEC + SBC ESTKL,X + STA ESTKL,X + LDA #$00 + SBC ESTKH,X + STA ESTKH,X + RTS +_DIV STY IPY + LDA ESTKH,X + AND #$80 + STA DVSIGN + BPL + + JSR _NEG + INC DVSIGN ++ LDA ESTKH+1,X + BPL + + INX + JSR _NEG + DEX + INC DVSIGN + BNE _DIV1 ++ ORA ESTKL+1,X ; DVDNDL + BNE _DIV1 + STA TMPL + STA TMPH + RTS +_DIV1 LDY #$11 ; #BITS+1 + LDA #$00 + STA TMPL ; REMNDRL + STA TMPH ; REMNDRH +- ASL ESTKL+1,X ; DVDNDL + 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 + LDA TMPH ; REMNDRH + SBC ESTKH,X ; DVSRH + BCC + + STA TMPH ; REMNDRH + STY TMPL ; REMNDRL ++ ROL ESTKL+1,X ; DVDNDL + ROL ESTKH+1,X ; DVDNDH + DEC ESTKL-1,X + BNE _DIVLP + LDY IPY + RTS +;* ;* ADD TOS TO TOS-1 ;* ADD LDA ESTKL,X @@ -214,31 +239,6 @@ IDXW LDA ESTKL,X INX JMP NEXTOP ;* -;* INCREMENT TOS -;* -INCR INC ESTKL,X - BNE INCR1 - INC ESTKH,X -INCR1 JMP NEXTOP -;* -;* DECREMENT TOS -;* -DECR LDA ESTKL,X - BNE DECR1 - DEC ESTKH,X -DECR1 DEC ESTKL,X - JMP NEXTOP -;* -;* BITWISE COMPLIMENT TOS -;* -COMP LDA #$FF - EOR ESTKL,X - STA ESTKL,X - LDA #$FF - EOR ESTKH,X - STA ESTKH,X - JMP NEXTOP -;* ;* BITWISE AND TOS TO TOS-1 ;* BAND LDA ESTKL+1,X diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index 8afff28..79fbc5f 100644 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -397,13 +397,13 @@ IDXW LDA ESTKL,X ;* MUL TOS-1 BY TOS ;* MUL STY IPY - LDY #$00 - STY TMPL ; PRODL - STY TMPH ; PRODH LDY #$10 -MUL1 LSR ESTKH,X ; MULTPLRH + LDA #$00 + STA TMPL ; PRODL + STA TMPH ; PRODH +MULLP LSR ESTKH,X ; MULTPLRH ROR ESTKL,X ; MULTPLRL - BCC MUL2 + BCC + LDA ESTKL+1,X ; MULTPLNDL CLC ADC TMPL ; PRODL @@ -411,15 +411,15 @@ MUL1 LSR ESTKH,X ; MULTPLRH LDA ESTKH+1,X ; MULTPLNDH ADC TMPH ; PRODH STA TMPH -MUL2 ASL ESTKL+1,X ; MULTPLNDL ++ ASL ESTKL+1,X ; MULTPLNDL ROL ESTKH+1,X ; MULTPLNDH DEY - BNE MUL1 + BNE MULLP INX +; LDA TMPH ; PRODH + STA ESTKH,X LDA TMPL ; PRODL STA ESTKL,X - LDA TMPH ; PRODH - STA ESTKH,X LDY IPY JMP NEXTOP ;* @@ -437,31 +437,31 @@ _DIV STY IPY LDA ESTKH,X AND #$80 STA DVSIGN - BPL _DIV1 + BPL + JSR _NEG INC DVSIGN -_DIV1 LDA ESTKH+1,X - BPL _DIV2 ++ LDA ESTKH+1,X + BPL + INX JSR _NEG DEX INC DVSIGN - BNE _DIV3 -_DIV2 ORA ESTKL+1,X ; DVDNDL - BNE _DIV3 + BNE _DIV1 ++ ORA ESTKL+1,X ; DVDNDL + BNE _DIV1 STA TMPL STA TMPH RTS -_DIV3 LDY #$11 ; #BITS+1 +_DIV1 LDY #$11 ; #BITS+1 LDA #$00 STA TMPL ; REMNDRL STA TMPH ; REMNDRH -_DIV4 ASL ESTKL+1,X ; DVDNDL +- ASL ESTKL+1,X ; DVDNDL ROL ESTKH+1,X ; DVDNDH DEY - BCC _DIV4 + BCC - STY ESTKL-1,X -_DIV5 ROL TMPL ; REMNDRL +_DIVLP ROL TMPL ; REMNDRL ROL TMPH ; REMNDRH LDA TMPL ; REMNDRL SEC @@ -469,13 +469,13 @@ _DIV5 ROL TMPL ; REMNDRL TAY LDA TMPH ; REMNDRH SBC ESTKH,X ; DVSRH - BCC _DIV6 + BCC + STA TMPH ; REMNDRH STY TMPL ; REMNDRL -_DIV6 ROL ESTKL+1,X ; DVDNDL ++ ROL ESTKL+1,X ; DVDNDL ROL ESTKH+1,X ; DVDNDH DEC ESTKL-1,X - BNE _DIV5 + BNE _DIVLP LDY IPY RTS ;* diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index d7e5716..6eadafe 100644 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -149,31 +149,31 @@ _DIV STY IPY LDA ESTKH,X AND #$80 STA DVSIGN - BPL _DIV1 + BPL + JSR _NEG INC DVSIGN -_DIV1 LDA ESTKH+1,X - BPL _DIV2 ++ LDA ESTKH+1,X + BPL + INX JSR _NEG DEX INC DVSIGN - BNE _DIV3 -_DIV2 ORA ESTKL+1,X ; DVDNDL - BNE _DIV3 + BNE _DIV1 ++ ORA ESTKL+1,X ; DVDNDL + BNE _DIV1 STA TMPL STA TMPH RTS -_DIV3 LDY #$11 ; #BITS+1 +_DIV1 LDY #$11 ; #BITS+1 LDA #$00 STA TMPL ; REMNDRL STA TMPH ; REMNDRH -_DIV4 ASL ESTKL+1,X ; DVDNDL +- ASL ESTKL+1,X ; DVDNDL ROL ESTKH+1,X ; DVDNDH DEY - BCC _DIV4 + BCC - STY ESTKL-1,X -_DIV5 ROL TMPL ; REMNDRL +_DIVLP ROL TMPL ; REMNDRL ROL TMPH ; REMNDRH LDA TMPL ; REMNDRL SEC @@ -181,13 +181,13 @@ _DIV5 ROL TMPL ; REMNDRL TAY LDA TMPH ; REMNDRH SBC ESTKH,X ; DVSRH - BCC _DIV6 + BCC + STA TMPH ; REMNDRH STY TMPL ; REMNDRL -_DIV6 ROL ESTKL+1,X ; DVDNDL ++ ROL ESTKL+1,X ; DVDNDL ROL ESTKH+1,X ; DVDNDH DEC ESTKL-1,X - BNE _DIV5 + BNE _DIVLP LDY IPY RTS ;* @@ -206,13 +206,13 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E ;* MUL TOS-1 BY TOS ;* MUL STY IPY - LDY #$00 - STY TMPL ; PRODL - STY TMPH ; PRODH LDY #$10 -MUL1 LSR ESTKH,X ; MULTPLRH + LDA #$00 + STA TMPL ; PRODL + STA TMPH ; PRODH +MULLP LSR ESTKH,X ; MULTPLRH ROR ESTKL,X ; MULTPLRL - BCC MUL2 + BCC + LDA ESTKL+1,X ; MULTPLNDL CLC ADC TMPL ; PRODL @@ -220,15 +220,15 @@ MUL1 LSR ESTKH,X ; MULTPLRH LDA ESTKH+1,X ; MULTPLNDH ADC TMPH ; PRODH STA TMPH -MUL2 ASL ESTKL+1,X ; MULTPLNDL ++ ASL ESTKL+1,X ; MULTPLNDL ROL ESTKH+1,X ; MULTPLNDH DEY - BNE MUL1 + BNE MULLP INX +; LDA TMPH ; PRODH + STA ESTKH,X LDA TMPL ; PRODL STA ESTKL,X - LDA TMPH ; PRODH - STA ESTKH,X LDY IPY JMP NEXTOP ;*