From e230d98e8cb58e7912422867835baa59b2018c71 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 6 May 2014 09:43:14 -0700 Subject: [PATCH] assembling... --- PLASMA/src/plvm02.s | 365 +++++++++++++++++++------------------------- 1 file changed, 157 insertions(+), 208 deletions(-) diff --git a/PLASMA/src/plvm02.s b/PLASMA/src/plvm02.s index a3e2c823..82b95981 100644 --- a/PLASMA/src/plvm02.s +++ b/PLASMA/src/plvm02.s @@ -17,63 +17,18 @@ MACHID = $BF98 KEYBD = $C000 CLRKBD = $C010 SPKR = $C030 -ROMIN = $C081 -LCBNK2 = $C083 -LCBNK1 = $C08B +LCRDEN = $C080 +LCWTEN = $C081 +ROMEN = $C082 +LCRWEN = $C083 +LCBNK2 = $00 +LCBNK1 = $08 ALTZPOFF= $C008 ALTZPON = $C009 ALTRDOFF= $C002 ALTRDON = $C003 ALTWROFF= $C004 ALTWRON = $C005 -;* -;* AUXMEM ACCESS MACROS -;* -.IF IS65C02 -.MACRO AUXZP_ACCESS_ON - STA ALTZPON ; TURN ON ALT ZP AND LC -.ENDMACRO -.MACRO AUXZP_ACCESS_OFF - STA ALTZPOFF ; TURN OFF ALT ZP AND LC -.ENDMACRO -.MACRO AUXMEM_RDON - STA ALTRAMRDON -.ENDMACRO -.MACRO STA ALTRAMRDOFF - STA ALTRAMRDOFF -.ENDMACRO -.MACRO AUXMEM_WRON - STA ALTRAMWRON -.ENDMACRO -.MACRO AUXMEM_WROFF - STA ALTRAMWROFF -.ENDMACRO -.ELSE -.MACRO AUXZP_ACCESS_ON - SEI ; TURN INTERRUPTS OFF - STA ALTZPON ; TURN ON ALT ZP AND LC -.ENDMACRO -.MACRO AUXZP_ACCESS_OFF - STA ALTZPOFF ; TURN OFF ALT ZP AND LC - CLI ; TURN INTERRUPTS BACK ON -.ENDMACRO -.MACRO AUXMEM_RDON - SEI - STA ALTRAMRDON -.ENDMACRO -.MACRO STA ALTRAMRDOFF - STA ALTRAMRDOFF - CLI -.ENDMACRO -.MACRO AUXMEM_WRON - SEI - STA ALTRAMWRON -.ENDMACRO -.MACRO AUXMEM_WROFF - STA ALTRAMWROFF - CLI -.ENDMACRO -.ENDIF ;********************************************************** ;* ;* VM ZERO PAGE LOCATIONS @@ -98,57 +53,51 @@ TMPX = TMP+2 NPARMS = TMPL FRMSZ = TMPH DVSIGN = TMPX +;********************************************************** ;* -;* COMMAND LOADER CODE +;* INTERPRETER INSTRUCTION POINTER INCREMENT MACRO ;* - CLD - CLV - BVC + - JMP PLASMA - +;********************************************************** + !MACRO INC_IP { + INY + BNE * + 4 + INC IPH + } ;*********************************************** ;* ;* INTERPRETER INITIALIZATION ;* ;*********************************************** -;* -;* INIT AND ENTER INTO PLASMA BYTECODE INTERPRETER -;* X Y A = ADDRESS OF INITAL ENTRYPOINT -;* -PLASMA STA PCL - STY PCH - STX TMP +* = $2000 CLD - LDY #$20 - LDA PAGE3,Y + BIT LCRWEN+LCBNK2 + BIT LCRWEN+LCBNK2 + LDY #$10 +- LDA PAGE3,Y STA $03D0,Y DEY BPL - LDX #ESTKSZ/2 - INY ; LDY #$00 - LDA TMP - BEQ FETCHOP - LDA MACHID - AND #$30 - CMP #$30 - BEQ FETCHOPX - +PAGE3 = * !PSEUDOPC $03D0 { - ;* ;* PAGE 3 VECTORS INTO INTERPRETER ;* -PAGE3 BIT $C080 ; $03D0 - INTERP ENTRY + BIT LCRDEN+LCBNK2 ; $03D0 - INTERP ENTRY JMP INTERP +CALL3 BIT ROMEN +CALLADR JSR $0000 + BIT LCRDEN+LCBNK2 + RTS } - +PLASMA = * !PSEUDOPC $D000 { ;* ;* OPCODE TABLE ;* -OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,DIVMOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E +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 NOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E + !WORD LNOT,LOR,LAND,LA,LLA,CB,CW,SWAP ; 20 22 24 26 28 2A 2C 2E !WORD DROP,DUP,PUSH,PULL,BRLT,BRGT,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,CALL,ICAL,ENTER,LEAVE,RET,NEXTOP ; 50 52 54 56 58 5A 5C 5E @@ -176,36 +125,38 @@ INTERP PLA ;* ;* INTERP BYTECODE IN MAIN MEM ;* +NEXTOPH INC IPH + BNE FETCHOP +DROP INX +NEXTOP INY + BEQ NEXTOPH FETCHOP LDA (IP),Y STA *+5 JMP (OPTBL) -NEXTOP INY - BNE FETCHOP - INC IPH - BNE FETCHOP ;* ;* INTERP BYTECODE IN AUX MEM ;* -FETCHOPX SEI - STA ALTRAMRDON - LDA (IP),Y - STA *+5 - JMP (OPTBLX) +NEXTOPHX INC IPH + BNE FETCHOPX +DROPX INX NEXTOPX CLI INY - BNE FETCHOPX - INC IPH - BNE FETCHOPX + BEQ NEXTOPHX +FETCHOPX SEI + STA ALTRDON + LDA (IP),Y + STA *+5 + JMP (OPXTBL) ;* ;* ALIGN TO NEXT PAGE ;* - !FILL 255 + !ALIGN 255, 0 ;* ;* 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 NOTX,LORX,LANDX,LAX,LLAX,CBX,CWX,SWAPX ; 20 22 24 26 28 2A 2C 2E + !WORD LNOTX,LORX,LANDX,LAX,LLAX,CBX,CWX,SWAPX ; 20 22 24 26 28 2A 2C 2E !WORD DROPX,DUPX,PUSHX,PULLX,BRLTX,BRGTX,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 @@ -533,7 +484,7 @@ XORX LDA ESTKL+1,X EOR ESTKH,X STA ESTKH+1,X INX - NEXTOPX + JMP NEXTOPX ;* ;* SHIFT TOS-1 LEFT BY TOS ;* @@ -554,7 +505,7 @@ SHL2 ASL ESTKL+1,X BNE SHL2 SHL3 INX LDY IPY - NEXTOP + JMP NEXTOP ; SHLX STY IPY LDA ESTKL,X @@ -573,7 +524,7 @@ SHLX2 ASL ESTKL+1,X BNE SHLX2 SHLX3 INX LDY IPY - NEXTOPX + JMP NEXTOPX ;* ;* SHIFT TOS-1 RIGHT BY TOS ;* @@ -631,20 +582,20 @@ SHRX4 INX ;* ;* LOGICAL NOT ;* -NOT LDA ESTKL,X +LNOT LDA ESTKL,X ORA ESTKH,X - BEQ NOT1 + BEQ LNOT1 LDA #$FF -NOT1 EOR #$FF +LNOT1 EOR #$FF STA ESTKL,X STA ESTKH,X JMP NEXTOP ; -NOTX LDA ESTKL,X +LNOTX LDA ESTKL,X ORA ESTKH,X - BEQ NOTX1 + BEQ LNOTX1 LDA #$FF -NOTX1 EOR #$FF +LNOTX1 EOR #$FF STA ESTKL,X STA ESTKH,X JMP NEXTOPX @@ -675,7 +626,7 @@ LANDX1 STA ESTKL+1,X INX JMP NEXTOPX ;* -;* LOGICAL OR & DROP TOS +;* LOGICAL OR ;* LOR LDA ESTKL,X ORA ESTKH,X @@ -685,7 +636,7 @@ LOR LDA ESTKL,X LDA #$FF LOR1 STA ESTKL+1,X STA ESTKH+1,X -DROP INX + INX JMP NEXTOP ; LORX LDA ESTKL,X @@ -696,7 +647,7 @@ LORX LDA ESTKL,X LDA #$FF LORX1 STA ESTKL+1,X STA ESTKH+1,X -DROPX INX + INX JMP NEXTOPX ;* ;* SWAP TOS WITH TOS-1 @@ -782,7 +733,7 @@ ZERO DEX STA ESTKH,X JMP NEXTOP CB DEX - INC_IP + +INC_IP LDA (IP),Y STA ESTKL,X LDA #$00 @@ -795,7 +746,7 @@ ZEROX DEX STA ESTKH,X JMP NEXTOPX CBX DEX - INC_IP + +INC_IP LDA (IP),Y STA ESTKL,X LDA #$00 @@ -804,22 +755,22 @@ CBX DEX ;* ;* LOAD ADDRESS & LOAD CONSTANT WORD (SAME THING, WITH OR WITHOUT FIXUP) ;* -LA +LA = * CW DEX - INC_IP + +INC_IP LDA (IP),Y STA ESTKL,X - INC_IP + +INC_IP LDA (IP),Y STA ESTKH,X JMP NEXTOP ; -LAX +LAX = * CWX DEX - INC_IP + +INC_IP LDA (IP),Y STA ESTKL,X - INC_IP + +INC_IP LDA (IP),Y STA ESTKH,X JMP NEXTOPX @@ -851,7 +802,7 @@ LW LDA ESTKL,X LDY IPY JMP NEXTOP ; -LBX STA ALTRAMRDOFF +LBX STA ALTRDOFF LDA ESTKL,X STA TMPL LDA ESTKH,X @@ -863,7 +814,7 @@ LBX STA ALTRAMRDOFF STY ESTKH,X LDY IPY JMP NEXTOPX -LWX STA ALTRAMRDOFF +LWX STA ALTRDOFF LDA ESTKL,X STA TMPL LDA ESTKH,X @@ -880,7 +831,7 @@ LWX STA ALTRAMRDOFF ;* ;* LOAD ADDRESS OF LOCAL FRAME OFFSET ;* -LLA INC_IP +LLA +INC_IP LDA (IP),Y DEX CLC @@ -891,7 +842,7 @@ LLA INC_IP STA ESTKH,X JMP NEXTOP ; -LLAX INC_IP +LLAX +INC_IP LDA (IP),Y DEX CLC @@ -904,7 +855,7 @@ LLAX INC_IP ;* ;* LOAD VALUE FROM LOCAL FRAME OFFSET ;* -LLB INC_IP +LLB +INC_IP LDA (IP),Y STY IPY TAY @@ -915,7 +866,7 @@ LLB INC_IP STA ESTKH,X LDY IPY JMP NEXTOP -LLW INC_IP +LLW +INC_IP LDA (IP),Y STY IPY TAY @@ -928,24 +879,24 @@ LLW INC_IP LDY IPY JMP NEXTOP ; -LLBX INC_IP +LLBX +INC_IP LDA (IP),Y STY IPY TAY DEX - STA ALTRAMRDOFF + STA ALTRDOFF LDA (IFP),Y STA ESTKL,X LDA #$00 STA ESTKH,X LDY IPY JMP NEXTOP -LLWX INC_IP +LLWX +INC_IP LDA (IP),Y STY IPY TAY DEX - STA ALTRAMRDOFF + STA ALTRDOFF LDA (IFP),Y STA ESTKL,X INY @@ -956,10 +907,10 @@ LLWX INC_IP ;* ;* LOAD VALUE FROM ABSOLUTE ADDRESS ;* -LAB INC_IP +LAB +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY @@ -970,10 +921,10 @@ LAB INC_IP STY ESTKH,X LDY IPY JMP NEXTOP -LAW INC_IP +LAW +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY @@ -987,14 +938,14 @@ LAW INC_IP LDY IPY JMP NEXTOP ; -LABX INC_IP +LABX +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF LDY #$00 LDA (TMP),Y DEX @@ -1002,14 +953,14 @@ LABX INC_IP STY ESTKH,X LDY IPY JMP NEXTOPX -LAWX INC_IP +LAWX +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF LDY #$00 LDA (TMP),Y DEX @@ -1056,7 +1007,7 @@ SBX LDA ESTKL+1,X STA TMPH LDA ESTKL,X STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF LDY #$00 STA (TMP),Y INX @@ -1068,7 +1019,7 @@ SWX LDA ESTKL+1,X LDA ESTKH+1,X STA TMPH STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF LDY #$00 LDA ESTKL,X STA (TMP),Y @@ -1082,7 +1033,7 @@ SWX LDA ESTKL+1,X ;* ;* STORE VALUE TO LOCAL FRAME OFFSET ;* -SLB INC_IP +SLB +INC_IP LDA (IP),Y STY IPY TAY @@ -1091,46 +1042,46 @@ SLB INC_IP INX LDY IPY JMP NEXTOP -SLW INC_IP +SLW +INC_IP LDA (IP),Y STY IPY TAY LDA ESTKL,X - STA (FRMP),Y + STA (IFP),Y INY LDA ESTKH,X - STA (FRMP),Y + STA (IFP),Y INX LDY IPY JMP NEXTOP ; -SLBX INC_IP +SLBX +INC_IP LDA (IP),Y STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF TAY LDA ESTKL,X STA (IFP),Y INX LDY IPY JMP NEXTOPX -SLWX INC_IP +SLWX +INC_IP LDA (IP),Y STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF TAY LDA ESTKL,X - STA (FRMP),Y + STA (IFP),Y INY LDA ESTKH,X - STA (FRMP),Y + STA (IFP),Y INX LDY IPY JMP NEXTOPX ;* ;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK ;* -DLB INC_IP +DLB +INC_IP LDA (IP),Y STY IPY TAY @@ -1138,7 +1089,7 @@ DLB INC_IP STA (IFP),Y LDY IPY JMP NEXTOP -DLW INC_IP +DLW +INC_IP LDA (IP),Y STY IPY TAY @@ -1150,19 +1101,19 @@ DLW INC_IP LDY IPY JMP NEXTOP ; -DLBX INC_IP +DLBX +INC_IP LDA (IP),Y STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF TAY LDA ESTKL,X STA (IFP),Y LDY IPY JMP NEXTOPX -DLWX INC_IP +DLWX +INC_IP LDA (IP),Y STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF TAY LDA ESTKL,X STA (IFP),Y @@ -1174,10 +1125,10 @@ DLWX INC_IP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS ;* -SAB INC_IP +SAB +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH LDA ESTKL,X @@ -1187,10 +1138,10 @@ SAB INC_IP INX LDY IPY JMP NEXTOP -SAW INC_IP +SAW +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY @@ -1204,28 +1155,28 @@ SAW INC_IP LDY IPY JMP NEXTOP ; -SABX INC_IP +SABX +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH LDA ESTKL,X STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF LDY #$00 STA (TMP),Y INX LDY IPY JMP NEXTOPX -SAWX INC_IP +SAWX +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF LDY #$00 LDA ESTKL,X STA (TMP),Y @@ -1238,10 +1189,10 @@ SAWX INC_IP ;* ;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK ;* -DAB INC_IP +DAB +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY @@ -1250,10 +1201,10 @@ DAB INC_IP STA (TMP),Y LDY IPY JMP NEXTOP -DAW INC_IP +DAW +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY @@ -1266,27 +1217,27 @@ DAW INC_IP LDY IPY JMP NEXTOP ; -DABX INC_IP +DABX +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF LDY #$00 LDA ESTKL,X STA (TMP),Y LDY IPY JMP NEXTOPX -DAWX INC_IP +DAWX +INC_IP LDA (IP),Y STA TMPL - INC_IP + +INC_IP LDA (IP),Y STA TMPH STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF LDY #$00 LDA ESTKL,X STA (TMP),Y @@ -1492,8 +1443,8 @@ BRTRU INX LDA ESTKH-1,X ORA ESTKL-1,X BNE BRNCH -NOBRNCH INC_IP - INC_IP +NOBRNCH +INC_IP + +INC_IP JMP NEXTOP BRFLS INX LDA ESTKH-1,X @@ -1503,12 +1454,12 @@ BRNCH STY IPY LDA IPH STA TMPH LDA IPL - INC_IP + +INC_IP CLC ADC (IP),Y STA TMPL LDA TMPH - INC_IP + +INC_IP ADC (IP),Y STA IPH LDA TMPL @@ -1559,8 +1510,8 @@ BRTRUX INX LDA ESTKH-1,X ORA ESTKL-1,X BNE BRNCHX -NOBRNCHX INC_IP - INC_IP +NOBRNCHX +INC_IP + +INC_IP JMP NEXTOPX BRFLSX INX LDA ESTKH-1,X @@ -1570,12 +1521,12 @@ BRNCHX STY IPY LDA IPH STA TMPH LDA IPL - INC_IP + +INC_IP CLC ADC (IP),Y STA TMPL LDA TMPH - INC_IP + +INC_IP ADC (IP),Y STA IPH LDA TMPL @@ -1624,19 +1575,19 @@ IBRNCHX LDA IPL ;* ;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE) ;* -CALL INC_IP +CALL +INC_IP LDA (IP),Y - STA TMPL - INC_IP + STA CALLADR+1 + +INC_IP LDA (IP),Y - STA TMPH + STA CALLADR+2 LDA IPH PHA LDA IPL PHA TYA PHA - JSR TMPJMP + JSR CALL3 PLA TAY PLA @@ -1645,21 +1596,23 @@ CALL INC_IP STA IPH JMP NEXTOP ; -CALLX INC_IP +CALLX +INC_IP LDA (IP),Y - STA TMPL - INC_IP + PHA + +INC_IP LDA (IP),Y - STA TMPH + STA ALTRDOFF + STA CALLADR+2 + PLA + STA CALLADR+1 LDA IPH PHA LDA IPL PHA TYA PHA - STA ALTRAMRDOFF CLI - JSR TMPJMP + JSR CALL3 PLA TAY PLA @@ -1683,14 +1636,12 @@ ICAL LDA ESTKL,X PHA LDY #$00 LDA (TMP),Y - PHA + STA CALLADR+1 INY LDA (TMP),Y - STA TMPH - PLA - STA TMPL + STA CALLADR+2 CLI - JSR TMPJMP + JSR CALL3 PLA TAY PLA @@ -1710,17 +1661,15 @@ ICALX LDA ESTKL,X PHA TYA PHA - STA ALTRAMRDOFF + STA ALTRDOFF LDY #$00 LDA (TMP),Y - PHA + STA CALLADR+1 INY LDA (TMP),Y - STA TMPH - PLA - STA TMPL + STA CALLADR+2 CLI - JSR TMPJMP + JSR CALL3 PLA TAY PLA @@ -1731,10 +1680,10 @@ ICALX LDA ESTKL,X ;* ;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT ;* -ENTER INC_IP +ENTER +INC_IP LDA (IP),Y STA FRMSZ - INC_IP + +INC_IP LDA (IP),Y STA NPARMS STY IPY @@ -1770,14 +1719,14 @@ ENTER4 LDA ESTKH,X ENTER5 LDY IPY JMP NEXTOP ; -ENTERX INC_IP +ENTERX +INC_IP LDA (IP),Y STA FRMSZ - INC_IP + +INC_IP LDA (IP),Y STA NPARMS STY IPY - STA ALTRAMRDOFF + STA ALTRDOFF LDA IFPL PHA SEC @@ -1822,7 +1771,7 @@ LEAVE LDY #$01 STA IFPH RET RTS ; -LEAVEX STA ALTRAMRDOFF +LEAVEX STA ALTRDOFF LDY #$01 LDA (IFP),Y DEY @@ -1833,7 +1782,7 @@ LEAVEX STA ALTRAMRDOFF STA IFPH CLI RTS -RETX STA ALTRAMRDOFF +RETX STA ALTRDOFF CLI RTS } \ No newline at end of file