From fdac1a5f2a02f5c542d5362d494db897dbe78ff7 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 15 Jun 2014 23:07:54 -0700 Subject: [PATCH 1/2] Bring VM up to current --- PLASMA/src/cmd.pla | 25 +- PLASMA/src/plvm02.s | 665 +++++++++----------------------------------- 2 files changed, 139 insertions(+), 551 deletions(-) diff --git a/PLASMA/src/cmd.pla b/PLASMA/src/cmd.pla index 680713e2..6f88fbbf 100644 --- a/PLASMA/src/cmd.pla +++ b/PLASMA/src/cmd.pla @@ -184,6 +184,7 @@ end ; ; SET MEMORY TO VALUE ; MEMSET(ADDR, SIZE, VALUE) +; With optimizations from Peter Ferrie ; asm memset LDY #$00 @@ -193,25 +194,20 @@ asm memset STA DSTH INC ESTKL+1,X INC ESTKH+1,X -SETMLP DEC ESTKL+1,X +SETMLPL CLC + LDA ESTKL,X +SETMLPH DEC ESTKL+1,X BNE + DEC ESTKH+1,X BEQ SETMEX -+ LDA ESTKL,X - STA (DST),Y ++ STA (DST),Y INY - BNE + + BNE + INC DSTH -+ DEC ESTKL+1,X - BNE + - DEC ESTKH+1,X - BEQ SETMEX -+ LDA ESTKH,X - STA (DST),Y - INY - BNE SETMLP - INC DSTH - BNE SETMLP ++ BCS SETMLPL + SEC + LDA ESTKH,X + BCS SETMLPH SETMEX INX INX RTS @@ -279,6 +275,7 @@ REVCPY ;CLC REVCPYLP LDA (SRC),Y STA (DST),Y DEY + CPY #$FF BNE + DEC DSTH DEC SRCH diff --git a/PLASMA/src/plvm02.s b/PLASMA/src/plvm02.s index d2e415f5..5561a398 100644 --- a/PLASMA/src/plvm02.s +++ b/PLASMA/src/plvm02.s @@ -39,6 +39,9 @@ ALTRDON = $C003 ALTWROFF= $C004 ALTWRON = $C005 !SOURCE "plvm02zp.inc" +NEXTOP = $F0 +OPIDX = NEXTOP+8 +OPPAGE = OPIDX+1 STRBUF = $0280 ;* ;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO @@ -92,7 +95,7 @@ RAMDONE CLI ;* ;* INSTALL PAGE 3 VECTORS ;* - LDY #$20 + LDY #$1F - LDA PAGE3,Y STA $03D0,Y DEY @@ -156,7 +159,7 @@ RAMDONE CLI BIT LCRWEN+LCBNK2 ; COPY TO LC FOR BYE BIT LCRWEN+LCBNK2 - LDA STRBUF,Y - STA $D103,Y ; YEAH, I HARDCODED THE ADDRESS + STA LCDEFCMD,Y DEY BPL - JMP CMDEXEC @@ -183,20 +186,12 @@ TMRRTS RTS ;************************************************ VMCORE = * !PSEUDOPC $D000 { -;* -;* OPXCODE TABLE -;* -OPXTBL !WORD ZEROX,ADDX,SUBX,MULX,DIVX,MODX,INCRX,DECRX ; 00 02 04 06 08 0A 0C 0E - !WORD NEGX,COMPX,BANDX,IORX,XORX,SHLX,SHRX,IDXWX ; 10 12 14 16 18 1A 1C 1E - !WORD LNOTX,LORX,LANDX,LAX,LLAX,CBX,CWX,SWAPX ; 20 22 24 26 28 2A 2C 2E - !WORD DROPX,DUPX,PUSHX,PULLX,BRGTX,BRLTX,BREQX,BRNEX ; 30 32 34 36 38 3A 3C 3E - !WORD ISEQX,ISNEX,ISGTX,ISLTX,ISGEX,ISLEX,BRFLSX,BRTRUX; 40 42 44 46 48 4A 4C 4E - !WORD BRNCHX,IBRNCHX,CALLX,ICALX,ENTERX,LEAVEX,RETX,NEXTOPX; 50 52 54 56 58 5A 5C 5E - !WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLBX,DLWX ; 60 62 64 66 68 6A 6C 6E - !WORD SBX,SWX,SLBX,SLWX,SABX,SAWX,DABX,DAWX ; 70 72 74 76 78 7A 7C 7E -;* -;* OPCODE TABLE -;* +;**************** +;* * +;* OPCODE TABLE * +;* * +;**************** + !ALIGN 255,0 OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E @@ -206,12 +201,60 @@ 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 ;* -;* 'BYE' PROCESSING - COPIED TO $1000 ON PRODOS BYE COMMAND +;* ENTER INTO BYTECODE INTERPRETER ;* +DINTERP BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD + BIT LCRWEN+LCBNK2 + PLA + STA IPL + PLA + STA IPH + LDY #$01 + LDA #>OPTBL + STA OPPAGE + JMP FETCHOP +IINTRP BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD + BIT LCRWEN+LCBNK2 + PLA + STA TMPL + PLA + STA TMPH + LDY #$02 + LDA (TMP),Y + STA IPH + DEY + LDA (TMP),Y + STA IPL + DEY + LDA #>OPTBL + STA OPPAGE + JMP FETCHOP +IINTRPX BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD + BIT LCRWEN+LCBNK2 + PLA + STA TMPL + PLA + STA TMPH + LDY #$02 + LDA (TMP),Y + STA IPH + DEY + LDA (TMP),Y + STA IPL + DEY + LDA #>OPXTBL + STA OPPAGE + SEI + STA ALTRDON + JMP FETCHOP +;************************************************************ +;* * +;* 'BYE' PROCESSING - COPIED TO $1000 ON PRODOS BYE COMMAND * +;* * +;************************************************************ + !ALIGN 255,0 !PSEUDOPC $1000 { -BYE JMP CPYCMD -DEFCMD !FILL 63 ; AT $D103 IN LC MEMORY -CPYCMD LDY DEFCMD +BYE LDY DEFCMD - LDA DEFCMD,Y ; SET DEFAULT COMMAND WHEN CALLED FROM 'BYE' STA STRBUF,Y DEY @@ -232,6 +275,14 @@ CMDEXEC = * BIT $C058 JSR $FC58 ; HOME ; +; INSTALL PAGE 0 FETCHOP ROUTINE +; + LDY #$0D +- LDA PAGE0,Y + STA NEXTOP,Y + DEY + BPL - +; ; READ CMD INTO MEMORY ; JSR PRODOS ; CLOSE EVERYTHING @@ -280,88 +331,37 @@ CLOSEPARMS !BYTE 1 DISABLE80 !BYTE 21, 13, '1', 26, 13 FAILMSG !BYTE 39 !TEXT "MISSING CMD. PRESS ANY KEY TO RESET..." -ENDBYE = * -} +PAGE0 = * + !PSEUDOPC $00F0 { ;* -;* ENTER INTO BYTECODE INTERPRETER -;* -DINTERP BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 - PLA - STA IPL - PLA - STA IPH - LDY #$01 - BNE FETCHOP -IINTRP BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 - PLA - STA TMPL - PLA - STA TMPH - LDY #$02 - LDA (TMP),Y - STA IPH - DEY - LDA (TMP),Y - STA IPL - DEY - BEQ FETCHOP -IINTRPX BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 - PLA - STA TMPL - PLA - STA TMPH - LDY #$02 - LDA (TMP),Y - STA IPH - DEY - LDA (TMP),Y - STA IPL - DEY - SEI - STA ALTRDON - BEQ FETCHOPX -;* -;* INTERP BYTECODE IN AUX MEM -;* -NEXTOPHX INC IPH - BNE FETCHOPX -DROPX INX -NEXTOPX INY - BEQ NEXTOPHX -; INC TICTOC -; BEQ TIMERX -FETCHOPX LDA (IP),Y - STA *+4 - JMP (OPXTBL) ; USE AUX OPCODES -;TIMERX STA ALTRDOFF -; CLI -; JSR JMPTMR -; SEI -; STA ALTRDON -; JMP FETCHOPX -;* -;* INTERP BYTECODE IN MAIN MEM +;* INTERP BYTECODE ;* + INY + BEQ NEXTOPH +FETCHOP LDA (IP),Y + STA OPIDX + JMP (OPTBL) NEXTOPH INC IPH BNE FETCHOP -DROP INX -NEXTOP INY - BEQ NEXTOPH -; INC TICTOC -; BEQ TIMER -FETCHOP LDA (IP),Y - ORA #$80 ; USE MAIN OPCODES - STA *+4 - JMP (OPTBL) -;TIMER JSR JMPTMR -; JMP FETCHOP -;* -;* INDIRECT JUMP TO (TMRVEC) -;* -JMPTMR JMP (TMRVEC) +} +DEFCMD !FILL 63 +ENDBYE = * +} +LCDEFCMD = *-63 ; DEFCMD IN LC MEMORY +;***************** +;* * +;* OPXCODE TABLE * +;* * +;***************** + !ALIGN 255,0 +OPXTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E + !WORD NEG,COMP,BAND,IOR,XOR,SHL,SHR,IDXW ; 10 12 14 16 18 1A 1C 1E + !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E + !WORD DROP,DUP,PUSH,PULL,BRGT,BRLT,BREQ,BRNE ; 30 32 34 36 38 3A 3C 3E + !WORD ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU; 40 42 44 46 48 4A 4C 4E + !WORD BRNCH,IBRNCH,CALLX,ICALX,ENTERX,LEAVEX,RETX,NEXTOP; 50 52 54 56 58 5A 5C 5E + !WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,DLBX,DLWX ; 60 62 64 66 68 6A 6C 6E + !WORD SBX,SWX,SLBX,SLWX,SABX,SAWX,DABX,DAWX ; 70 72 74 76 78 7A 7C 7E ;* ;* ADD TOS TO TOS-1 ;* @@ -372,18 +372,8 @@ ADD LDA ESTKL,X LDA ESTKH,X ADC ESTKH+1,X STA ESTKH+1,X - INX +DROP INX JMP NEXTOP -; -ADDX LDA ESTKL,X - CLC - ADC ESTKL+1,X - STA ESTKL+1,X - LDA ESTKH,X - ADC ESTKH+1,X - STA ESTKH+1,X - INX - JMP NEXTOPX ;* ;* SUB TOS FROM TOS-1 ;* @@ -396,16 +386,6 @@ SUB LDA ESTKL+1,X STA ESTKH+1,X INX JMP NEXTOP -; -SUBX LDA ESTKL+1,X - SEC - SBC ESTKL,X - STA ESTKL+1,X - LDA ESTKH+1,X - SBC ESTKH,X - STA ESTKH+1,X - INX - JMP NEXTOPX ;* ;* SHIFT TOS-1 LEFT BY 1, ADD TO TOS-1 ;* @@ -420,22 +400,10 @@ IDXW LDA ESTKL,X STA ESTKH+1,X INX JMP NEXTOP -; -IDXWX LDA ESTKL,X - ASL - ROL ESTKH,X - CLC - ADC ESTKL+1,X - STA ESTKL+1,X - LDA ESTKH,X - ADC ESTKH+1,X - STA ESTKH+1,X - INX - JMP NEXTOPX ;* -;* INTERNAL MULTIPLY ALGORITHM +;* MUL TOS-1 BY TOS ;* -_MUL STY IPY +MUL STY IPY LDY #$00 STY TMPL ; PRODL STY TMPH ; PRODH @@ -460,15 +428,7 @@ MUL2 ASL ESTKL+1,X ; MULTPLNDL LDA TMPH ; PRODH STA ESTKH,X LDY IPY - RTS -;* -;* MUL TOS-1 BY TOS -;* -MUL JSR _MUL JMP NEXTOP -; -MULX JSR _MUL - JMP NEXTOPX ;* ;* INTERNAL DIVIDE ALGORITHM ;* @@ -536,15 +496,6 @@ NEG LDA #$00 SBC ESTKH,X STA ESTKH,X JMP NEXTOP -; -NEGX LDA #$00 - SEC - SBC ESTKL,X - STA ESTKL,X - LDA #$00 - SBC ESTKH,X - STA ESTKH,X - JMP NEXTOPX ;* ;* DIV TOS-1 BY TOS ;* @@ -553,12 +504,6 @@ DIV JSR _DIV LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 BCS NEG JMP NEXTOP -; -DIVX JSR _DIV - INX - LSR DVSIGN ; SIGN(RESULT) = (SIGN(DIVIDEND) + SIGN(DIVISOR)) & 1 - BCS NEGX - JMP NEXTOPX ;* ;* MOD TOS-1 BY TOS ;* @@ -571,16 +516,6 @@ MOD JSR _DIV LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND BMI NEG JMP NEXTOP -; -MODX JSR _DIV - INX - LDA TMPL ; REMNDRL - STA ESTKL,X - LDA TMPH ; REMNDRH - STA ESTKH,X - LDA DVSIGN ; REMAINDER IS SIGN OF DIVIDEND - BMI NEGX - JMP NEXTOPX ;* ;* INCREMENT TOS ;* @@ -588,11 +523,6 @@ INCR INC ESTKL,X BNE INCR1 INC ESTKH,X INCR1 JMP NEXTOP -; -INCRX INC ESTKL,X - BNE INCRX1 - INC ESTKH,X -INCRX1 JMP NEXTOPX ;* ;* DECREMENT TOS ;* @@ -601,12 +531,6 @@ DECR LDA ESTKL,X DEC ESTKH,X DECR1 DEC ESTKL,X JMP NEXTOP -; -DECRX LDA ESTKL,X - BNE DECRX1 - DEC ESTKH,X -DECRX1 DEC ESTKL,X - JMP NEXTOPX ;* ;* BITWISE COMPLIMENT TOS ;* @@ -617,14 +541,6 @@ COMP LDA #$FF EOR ESTKH,X STA ESTKH,X JMP NEXTOP -; -COMPX LDA #$FF - EOR ESTKL,X - STA ESTKL,X - LDA #$FF - EOR ESTKH,X - STA ESTKH,X - JMP NEXTOPX ;* ;* BITWISE AND TOS TO TOS-1 ;* @@ -636,15 +552,6 @@ BAND LDA ESTKL+1,X STA ESTKH+1,X INX JMP NEXTOP -; -BANDX LDA ESTKL+1,X - AND ESTKL,X - STA ESTKL+1,X - LDA ESTKH+1,X - AND ESTKH,X - STA ESTKH+1,X - INX - JMP NEXTOPX ;* ;* INCLUSIVE OR TOS TO TOS-1 ;* @@ -656,15 +563,6 @@ IOR LDA ESTKL+1,X STA ESTKH+1,X INX JMP NEXTOP -; -IORX LDA ESTKL+1,X - ORA ESTKL,X - STA ESTKL+1,X - LDA ESTKH+1,X - ORA ESTKH,X - STA ESTKH+1,X - INX - JMP NEXTOPX ;* ;* EXLUSIVE OR TOS TO TOS-1 ;* @@ -676,15 +574,6 @@ XOR LDA ESTKL+1,X STA ESTKH+1,X INX JMP NEXTOP -; -XORX LDA ESTKL+1,X - EOR ESTKL,X - STA ESTKL+1,X - LDA ESTKH+1,X - EOR ESTKH,X - STA ESTKH+1,X - INX - JMP NEXTOPX ;* ;* SHIFT TOS-1 LEFT BY TOS ;* @@ -706,25 +595,6 @@ SHL2 ASL ESTKL+1,X SHL3 INX LDY IPY JMP NEXTOP -; -SHLX STY IPY - LDA ESTKL,X - CMP #$08 - BCC SHLX1 - LDY ESTKL+1,X - STY ESTKH+1,X - LDY #$00 - STY ESTKL+1,X - SBC #$08 -SHLX1 TAY - BEQ SHLX3 -SHLX2 ASL ESTKL+1,X - ROL ESTKH+1,X - DEY - BNE SHLX2 -SHLX3 INX - LDY IPY - JMP NEXTOPX ;* ;* SHIFT TOS-1 RIGHT BY TOS ;* @@ -753,32 +623,6 @@ SHR3 CMP #$80 SHR4 INX LDY IPY JMP NEXTOP -; -SHRX STY IPY - LDA ESTKL,X - CMP #$08 - BCC SHRX2 - LDY ESTKH+1,X - STY ESTKL+1,X - CPY #$80 - LDY #$00 - BCC SHRX1 - DEY -SHRX1 STY ESTKH+1,X - SEC - SBC #$08 -SHRX2 TAY - BEQ SHRX4 - LDA ESTKH+1,X -SHRX3 CMP #$80 - ROR - ROR ESTKL+1,X - DEY - BNE SHRX3 - STA ESTKH+1,X -SHRX4 INX - LDY IPY - JMP NEXTOPX ;* ;* LOGICAL NOT ;* @@ -790,15 +634,6 @@ LNOT1 EOR #$FF STA ESTKL,X STA ESTKH,X JMP NEXTOP -; -LNOTX LDA ESTKL,X - ORA ESTKH,X - BEQ LNOTX1 - LDA #$FF -LNOTX1 EOR #$FF - STA ESTKL,X - STA ESTKH,X - JMP NEXTOPX ;* ;* LOGICAL AND ;* @@ -813,18 +648,6 @@ LAND1 STA ESTKL+1,X STA ESTKH+1,X INX JMP NEXTOP -; -LANDX LDA ESTKL,X - ORA ESTKH,X - BEQ LANDX1 - LDA ESTKL+1,X - ORA ESTKH+1,X - BEQ LANDX1 - LDA #$FF -LANDX1 STA ESTKL+1,X - STA ESTKH+1,X - INX - JMP NEXTOPX ;* ;* LOGICAL OR ;* @@ -838,17 +661,6 @@ LOR1 STA ESTKL+1,X STA ESTKH+1,X INX JMP NEXTOP -; -LORX LDA ESTKL,X - ORA ESTKH,X - ORA ESTKL+1,X - ORA ESTKH+1,X - BEQ LORX1 - LDA #$FF -LORX1 STA ESTKL+1,X - STA ESTKH+1,X - INX - JMP NEXTOPX ;* ;* SWAP TOS WITH TOS-1 ;* @@ -863,18 +675,6 @@ SWAP STY IPY STY ESTKH,X LDY IPY JMP NEXTOP -; -SWAPX STY IPY - LDA ESTKL,X - LDY ESTKL+1,X - STA ESTKL+1,X - STY ESTKL,X - LDA ESTKH,X - LDY ESTKH+1,X - STA ESTKH+1,X - STY ESTKH,X - LDY IPY - JMP NEXTOPX ;* ;* DUPLICATE TOS ;* @@ -884,14 +684,6 @@ DUP DEX LDA ESTKH+1,X STA ESTKH,X JMP NEXTOP -; -DUPX DEX - LDA ESTKL+1,X - STA ESTKL,X - LDA ESTKH+1,X - STA ESTKH,X - JMP NEXTOPX - ;* ;* PUSH FROM EVAL STACK TO CALL STACK ;* @@ -901,13 +693,6 @@ PUSH LDA ESTKL,X PHA INX JMP NEXTOP -; -PUSHX LDA ESTKL,X - PHA - LDA ESTKH,X - PHA - INX - JMP NEXTOPX ;* ;* PULL FROM CALL STACK TO EVAL STACK ;* @@ -917,13 +702,6 @@ PULL DEX PLA STA ESTKL,X JMP NEXTOP -; -PULLX DEX - PLA - STA ESTKH,X - PLA - STA ESTKL,X - JMP NEXTOPX ;* ;* CONSTANT ;* @@ -939,19 +717,6 @@ CB DEX LDA #$00 STA ESTKH,X JMP NEXTOP -; -ZEROX DEX - LDA #$00 - STA ESTKL,X - STA ESTKH,X - JMP NEXTOPX -CBX DEX - +INC_IP - LDA (IP),Y - STA ESTKL,X - LDA #$00 - STA ESTKH,X - JMP NEXTOPX ;* ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) ;* @@ -964,16 +729,6 @@ CW DEX LDA (IP),Y STA ESTKH,X JMP NEXTOP -; -LAX = * -CWX DEX - +INC_IP - LDA (IP),Y - STA ESTKL,X - +INC_IP - LDA (IP),Y - STA ESTKH,X - JMP NEXTOPX ;* ;* LOAD VALUE FROM ADDRESS TAG ;* @@ -1014,7 +769,7 @@ LBX LDA ESTKL,X STY ESTKH,X LDY IPY STA ALTRDON - JMP NEXTOPX + JMP NEXTOP LWX LDA ESTKL,X STA TMPL LDA ESTKH,X @@ -1029,7 +784,7 @@ LWX LDA ESTKL,X STA ESTKH,X LDY IPY STA ALTRDON - JMP NEXTOPX + JMP NEXTOP ;* ;* LOAD ADDRESS OF LOCAL FRAME OFFSET ;* @@ -1043,17 +798,6 @@ LLA +INC_IP ADC IFPH STA ESTKH,X JMP NEXTOP -; -LLAX +INC_IP - LDA (IP),Y - DEX - CLC - ADC IFPL - STA ESTKL,X - LDA #$00 - ADC IFPH - STA ESTKH,X - JMP NEXTOPX ;* ;* LOAD VALUE FROM LOCAL FRAME OFFSET ;* @@ -1093,7 +837,7 @@ LLBX +INC_IP STA ESTKH,X STA ALTRDON LDY IPY - JMP NEXTOPX + JMP NEXTOP LLWX +INC_IP LDA (IP),Y STY IPY @@ -1107,7 +851,7 @@ LLWX +INC_IP STA ESTKH,X STA ALTRDON LDY IPY - JMP NEXTOPX + JMP NEXTOP ;* ;* LOAD VALUE FROM ABSOLUTE ADDRESS ;* @@ -1157,7 +901,7 @@ LABX +INC_IP STY ESTKH,X STA ALTRDON LDY IPY - JMP NEXTOPX + JMP NEXTOP LAWX +INC_IP LDA (IP),Y STA TMPL @@ -1175,7 +919,7 @@ LAWX +INC_IP STA ESTKH,X STA ALTRDON LDY IPY - JMP NEXTOPX + JMP NEXTOP ;* ;* STORE VALUE TO ADDRESS ;* @@ -1220,7 +964,7 @@ SBX LDA ESTKL+1,X INX INX LDY IPY - JMP NEXTOPX + JMP NEXTOP SWX LDA ESTKL+1,X STA TMPL LDA ESTKH+1,X @@ -1237,7 +981,7 @@ SWX LDA ESTKL+1,X INX INX LDY IPY - JMP NEXTOPX + JMP NEXTOP ;* ;* STORE VALUE TO LOCAL FRAME OFFSET ;* @@ -1273,7 +1017,7 @@ SLBX +INC_IP STA ALTRDON INX LDY IPY - JMP NEXTOPX + JMP NEXTOP SLWX +INC_IP LDA (IP),Y STY IPY @@ -1287,7 +1031,7 @@ SLWX +INC_IP STA ALTRDON INX LDY IPY - JMP NEXTOPX + JMP NEXTOP ;* ;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK ;* @@ -1320,7 +1064,7 @@ DLBX +INC_IP STA (IFP),Y STA ALTRDON LDY IPY - JMP NEXTOPX + JMP NEXTOP DLWX +INC_IP LDA (IP),Y STY IPY @@ -1333,7 +1077,7 @@ DLWX +INC_IP STA (IFP),Y STA ALTRDON LDY IPY - JMP NEXTOPX + JMP NEXTOP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS ;* @@ -1381,7 +1125,7 @@ SABX +INC_IP STA ALTRDON INX LDY IPY - JMP NEXTOPX + JMP NEXTOP SAWX +INC_IP LDA (IP),Y STA TMPL @@ -1399,7 +1143,7 @@ SAWX +INC_IP STA ALTRDON INX LDY IPY - JMP NEXTOPX + JMP NEXTOP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK ;* @@ -1444,7 +1188,7 @@ DABX +INC_IP STA (TMP),Y STA ALTRDON LDY IPY - JMP NEXTOPX + JMP NEXTOP DAWX +INC_IP LDA (IP),Y STA TMPL @@ -1461,7 +1205,7 @@ DAWX +INC_IP STA (TMP),Y STA ALTRDON LDY IPY - JMP NEXTOPX + JMP NEXTOP ;* ;* COMPARES ;* @@ -1480,21 +1224,6 @@ ISEQ1 STY ESTKL+1,X LDY IPY JMP NEXTOP ; -ISEQX STY IPY - LDY #$00 - LDA ESTKL,X - CMP ESTKL+1,X - BNE ISEQX1 - LDA ESTKH,X - CMP ESTKH+1,X - BNE ISEQX1 - DEY -ISEQX1 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOPX -; ISNE STY IPY LDY #$FF LDA ESTKL,X @@ -1510,21 +1239,6 @@ ISNE1 STY ESTKL+1,X LDY IPY JMP NEXTOP ; -ISNEX STY IPY - LDY #$FF - LDA ESTKL,X - CMP ESTKL+1,X - BNE ISNEX1 - LDA ESTKH,X - CMP ESTKH+1,X - BNE ISNEX1 - INY -ISNEX1 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOPX -; ISGE STY IPY LDY #$00 LDA ESTKL+1,X @@ -1541,22 +1255,6 @@ ISGE2 STY ESTKL+1,X LDY IPY JMP NEXTOP ; -ISGEX STY IPY - LDY #$00 - LDA ESTKL+1,X - CMP ESTKL,X - LDA ESTKH+1,X - SBC ESTKH,X - BVC ISGEX1 - EOR #$80 -ISGEX1 BMI ISGEX2 - DEY -ISGEX2 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOPX -; ISGT STY IPY LDY #$00 LDA ESTKL,X @@ -1573,22 +1271,6 @@ ISGT2 STY ESTKL+1,X LDY IPY JMP NEXTOP ; -ISGTX STY IPY - LDY #$00 - LDA ESTKL,X - CMP ESTKL+1,X - LDA ESTKH,X - SBC ESTKH+1,X - BVC ISGTX1 - EOR #$80 -ISGTX1 BPL ISGTX2 - DEY -ISGTX2 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOPX -; ISLE STY IPY LDY #$00 LDA ESTKL,X @@ -1605,22 +1287,6 @@ ISLE2 STY ESTKL+1,X LDY IPY JMP NEXTOP ; -ISLEX STY IPY - LDY #$00 - LDA ESTKL,X - CMP ESTKL+1,X - LDA ESTKH,X - SBC ESTKH+1,X - BVC ISLEX1 - EOR #$80 -ISLEX1 BMI ISLEX2 - DEY -ISLEX2 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOPX -; ISLT STY IPY LDY #$00 LDA ESTKL+1,X @@ -1636,22 +1302,6 @@ ISLT2 STY ESTKL+1,X INX LDY IPY JMP NEXTOP -; -ISLTX STY IPY - LDY #$00 - LDA ESTKL+1,X - CMP ESTKL,X - LDA ESTKH+1,X - SBC ESTKH,X - BVC ISLTX1 - EOR #$80 -ISLTX1 BPL ISLTX2 - DEY -ISLTX2 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOPX ;* ;* BRANCHES ;* @@ -1721,73 +1371,6 @@ IBRNCH LDA IPL STA IPH INX JMP NEXTOP -; -BRTRUX INX - LDA ESTKH-1,X - ORA ESTKL-1,X - BNE BRNCHX -NOBRNCHX +INC_IP - +INC_IP - JMP NEXTOPX -BRFLSX INX - LDA ESTKH-1,X - ORA ESTKL-1,X - BNE NOBRNCHX -BRNCHX LDA IPH - STA TMPH - LDA IPL - +INC_IP - CLC - ADC (IP),Y - STA TMPL - LDA TMPH - +INC_IP - ADC (IP),Y - STA IPH - LDA TMPL - STA IPL - DEY - DEY - JMP NEXTOPX -BREQX INX - LDA ESTKL-1,X - CMP ESTKL,X - BNE NOBRNCHX - LDA ESTKL-1,X - CMP ESTKL,X - BEQ BRNCHX - BNE NOBRNCHX -BRNEX INX - LDA ESTKL-1,X - CMP ESTKL,X - BNE BRNCHX - LDA ESTKL-1,X - CMP ESTKL,X - BEQ NOBRNCHX - BNE BRNCHX -BRGTX INX - LDA ESTKL-1,X - CMP ESTKL,X - LDA ESTKH-1,X - SBC ESTKH,X - BMI BRNCHX - BPL NOBRNCHX -BRLTX INX - LDA ESTKL,X - CMP ESTKL-1,X - LDA ESTKH,X - SBC ESTKH-1,X - BMI BRNCHX - BPL NOBRNCHX -IBRNCHX LDA IPL - CLC - ADC ESTKL,X - STA IPL - LDA IPH - ADC ESTKH,X - STA IPH - INX - JMP NEXTOPX ;* ;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) ;* @@ -1810,6 +1393,8 @@ CALLADR JSR $FFFF STA IPL PLA STA IPH + LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE + STA OPPAGE BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD BIT LCRWEN+LCBNK2 JMP NEXTOP @@ -1837,9 +1422,11 @@ CALXADR JSR $FFFF STA IPL PLA STA IPH + LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE + STA OPPAGE BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD BIT LCRWEN+LCBNK2 - JMP NEXTOPX + JMP NEXTOP ;* ;* INDIRECT CALL TO ADDRESS (NATIVE CODE) ;* @@ -1861,6 +1448,8 @@ ICALADR JSR $FFFF STA IPL PLA STA IPH + LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE + STA OPPAGE BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD BIT LCRWEN+LCBNK2 JMP NEXTOP @@ -1887,9 +1476,11 @@ ICLXADR JSR $FFFF STA IPL PLA STA IPH + LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE + STA OPPAGE BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD BIT LCRWEN+LCBNK2 - JMP NEXTOPX + JMP NEXTOP ;* ;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT ;* @@ -1971,7 +1562,7 @@ ENTERX4 LDA ESTKH,X BNE ENTERX4 ENTERX5 STA ALTRDON LDY IPY - JMP NEXTOPX + JMP NEXTOP ;* ;* LEAVE FUNCTION ;* From 1a3da885973c913b277ef2a63fa26ce45779eec3 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 15 Jun 2014 23:24:16 -0700 Subject: [PATCH 2/2] Set page 3 vectors and page 0 interp loop in 'BYE' processing --- PLASMA/src/plvm02.s | 49 ++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/PLASMA/src/plvm02.s b/PLASMA/src/plvm02.s index 5561a398..8a4c9413 100644 --- a/PLASMA/src/plvm02.s +++ b/PLASMA/src/plvm02.s @@ -43,6 +43,7 @@ NEXTOP = $F0 OPIDX = NEXTOP+8 OPPAGE = OPIDX+1 STRBUF = $0280 +INTERP = $03D0 ;* ;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO ;* @@ -93,14 +94,6 @@ RAMEXIT LDA NODEV DEC DEVCNT RAMDONE CLI ;* -;* INSTALL PAGE 3 VECTORS -;* - LDY #$1F -- LDA PAGE3,Y - STA $03D0,Y - DEY - BPL - -;* ;* MOVE VM INTO LANGUAGE CARD ;* BIT LCRWEN+LCBNK2 @@ -165,20 +158,6 @@ RAMDONE CLI JMP CMDEXEC GETPFXPARMS !BYTE 1 !WORD STRBUF ; PATH STRING GOES HERE -PAGE3 = * - !PSEUDOPC $03D0 { -;* -;* PAGE 3 VECTORS INTO INTERPRETER -;* -INTERP BIT LCRDEN+LCBNK2 ; $03D0 - DIRECT INTERP ENTRY - JMP DINTERP - BIT LCRDEN+LCBNK2 ; $03D6 - INDIRECT INTERP ENTRY - JMP IINTRP - BIT LCRDEN+LCBNK2 ; $03DC - INDIRECT INTERPX ENTRY - JMP IINTRPX -TMRVEC !WORD TMRRTS -TMRRTS RTS -} ;************************************************ ;* * ;* LANGUAGE CARD RESIDENT PLASMA VM STARTS HERE * @@ -283,6 +262,14 @@ CMDEXEC = * DEY BPL - ; +; INSTALL PAGE 3 VECTORS +; + LDY #$11 +- LDA PAGE3,Y + STA INTERP,Y + DEY + BPL - +; ; READ CMD INTO MEMORY ; JSR PRODOS ; CLOSE EVERYTHING @@ -334,7 +321,7 @@ FAILMSG !BYTE 39 PAGE0 = * !PSEUDOPC $00F0 { ;* -;* INTERP BYTECODE +;* INTERP BYTECODE INNER LOOP ;* INY BEQ NEXTOPH @@ -344,10 +331,22 @@ FETCHOP LDA (IP),Y NEXTOPH INC IPH BNE FETCHOP } -DEFCMD !FILL 63 +PAGE3 = * + !PSEUDOPC $03D0 { +;* +;* PAGE 3 VECTORS INTO INTERPRETER +;* + BIT LCRDEN+LCBNK2 ; $03D0 - DIRECT INTERP ENTRY + JMP DINTERP + BIT LCRDEN+LCBNK2 ; $03D6 - INDIRECT INTERP ENTRY + JMP IINTRP + BIT LCRDEN+LCBNK2 ; $03DC - INDIRECT INTERPX ENTRY + JMP IINTRPX +} +DEFCMD !FILL 33 ENDBYE = * } -LCDEFCMD = *-63 ; DEFCMD IN LC MEMORY +LCDEFCMD = *-33 ; DEFCMD IN LC MEMORY ;***************** ;* * ;* OPXCODE TABLE *