assembling...

This commit is contained in:
David Schmenk 2014-05-06 09:43:14 -07:00
parent 680cdc557a
commit e230d98e8c

View File

@ -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
}