1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-03-22 16:32:32 +00:00

Fix stupid filesystem modes

This commit is contained in:
David Schmenk 2017-12-03 16:11:28 -08:00
parent 3f8a396808
commit 415e284066
4 changed files with 140 additions and 28 deletions

0
RPNCALC.PO Executable file → Normal file
View File

0
src/samplesrc/rod.pla Executable file → Normal file
View File

0
src/vmsrc/plvm01.s Executable file → Normal file
View File

168
src/vmsrc/plvm802.s Executable file → Normal file
View File

@ -6,7 +6,8 @@
;*
;**********************************************************
!CPU 65816
DEBUG = 0
SELFMODIFY = 0
DEBUG = 1
;*
;* THE DEFAULT CPU MODE FOR EXECUTING OPCODES IS:
;* 16 BIT A/M
@ -92,21 +93,6 @@ NOS = $03 ; TOS-1
REP #$20 ; 16 BIT A/M
!AL
}
;*
;* SIZE SWITCHING HACK
;*
!IF DEBUG {
!MACRO HACK816 {
}
} ELSE {
!MACRO HACK816 {
SEP #$20 ; 8 BIT A/M
!AS
BIT TMPH
REP #$20 ; 16 BIT A/M
!AL
}
}
;******************************
;* *
;* INTERPRETER INITIALIZATION *
@ -245,7 +231,6 @@ DINTRP PHP
CLC ; SWITCH TO NATIVE MODE
XCE
+ACCMEM16 ; 16 BIT A/M
+HACK816
PLA
INC
STA IP
@ -260,6 +245,10 @@ DINTRP PHP
BRA SETDBG
} ELSE {
STX OPPAGE
!IF SELFMODIFY {
LDX LCRWEN+LCBNK2
LDX LCRWEN+LCBNK2
}
LDY #$00
JMP FETCHOP
}
@ -271,7 +260,6 @@ IINTRP PHP
CLC ; SWITCH TO NATIVE MODE
XCE
+ACCMEM16 ; 16 BIT A/M
+HACK816
LDY #$01
LDA (TOS,S),Y
DEY
@ -288,6 +276,10 @@ IINTRP PHP
BRA SETDBG
} ELSE {
STX OPPAGE
!IF SELFMODIFY {
LDX LCRWEN+LCBNK2
LDX LCRWEN+LCBNK2
}
JMP FETCHOP
}
!AS
@ -298,7 +290,6 @@ IINTRPX PHP
CLC ; SWITCH TO NATIVE MODE
XCE
+ACCMEM16 ; 16 BIT A/M
+HACK816
LDY #$01
LDA (TOS,S),Y
DEY
@ -321,6 +312,10 @@ SETDBG LDY LCRWEN+LCBNK2
LDY #$00
}
STX OPPAGE
!IF SELFMODIFY {
LDX LCRWEN+LCBNK2
LDX LCRWEN+LCBNK2
}
JMP FETCHOP
;************************************************************
;* *
@ -843,6 +838,14 @@ _CEXSX LDA (IP) ; SKIP TO NEXT OP ADDR AFTER STRING
;*
;* LOAD VALUE FROM ADDRESS TAG
;*
!IF SELFMODIFY {
LB LDA TOS,S
STA LBLDX+1
LBLDX LDX $FFFF
TXA
STA TOS,S
JMP NEXTOP
} ELSE {
LB TYX
LDY #$00
TYA ; QUICKY CLEAR OUT MSB
@ -852,6 +855,7 @@ LB TYX
STA TOS,S
TXY
JMP NEXTOP
}
LW TYX
LDY #$00
LDA (TOS,S),Y
@ -859,6 +863,16 @@ LW TYX
TXY
JMP NEXTOP
;
!IF SELFMODIFY {
LBX LDA TOS,S
STA LBXLDX+1
STX ALTRDOFF
LBXLDX LDX $FFFF
STX ALTRDON
TXA
STA TOS,S
JMP NEXTOP
} ELSE {
LBX TYX
LDY #$00
TYA ; QUICKY CLEAR OUT MSB
@ -870,6 +884,7 @@ LBX TYX
STA TOS,S
TXY
JMP NEXTOP
}
LWX TYX
LDY #$00
STX ALTRDOFF
@ -933,6 +948,16 @@ LLWX +INC_IP
;*
;* LOAD VALUE FROM ABSOLUTE ADDRESS
;*
!IF SELFMODIFY {
LAB +INC_IP
LDA (IP),Y
+INC_IP
STA LABLDX+1
LABLDX LDX $FFFF
TXA
PHA
JMP NEXTOP
} ELSE {
LAB +INC_IP
LDA (IP),Y
+INC_IP
@ -943,6 +968,7 @@ LAB +INC_IP
+ACCMEM16 ; 16 BIT A/M
PHA
JMP NEXTOP
}
LAW +INC_IP
LDA (IP),Y
+INC_IP
@ -951,6 +977,18 @@ LAW +INC_IP
PHA
JMP NEXTOP
;
!IF SELFMODIFY {
LABX +INC_IP
LDA (IP),Y
+INC_IP
STA LABXLDX+1
STX ALTRDOFF
LABXLDX LDX $FFFF
STX ALTRDON
TXA
PHA
JMP NEXTOP
} ELSE {
LABX +INC_IP
LDA (IP),Y
+INC_IP
@ -963,6 +1001,7 @@ LABX +INC_IP
STX ALTRDON
PHA
JMP NEXTOP
}
LAWX +INC_IP
LDA (IP),Y
+INC_IP
@ -976,6 +1015,15 @@ LAWX +INC_IP
;*
;* STORE VALUE TO ADDRESS
;*
!IF SELFMODIFY {
SB LDA TOS,S
STA SBSTX+1
LDA NOS,S
TAX
SBSTX STX $FFFF
PLA
JMP DROP
} ELSE {
SB TYX
LDY #$00
+ACCMEM8 ; 8 BIT A/M
@ -985,6 +1033,7 @@ SB TYX
TXY
PLA
JMP DROP
}
SW TYX
LDY #$00
LDA NOS,S
@ -995,6 +1044,18 @@ SW TYX
;*
;* STORE VALUE TO LOCAL FRAME OFFSET
;*
!IF SELFMODIFY {
SLB +INC_IP
LDA (IP),Y
AND #$00FF
CLC
ADC IFP
STA SLBSTX+1
PLA
TAX
SLBSTX STX $FFFF
JMP NEXTOP
} ELSE {
SLB +INC_IP
TYX
LDA (IP),Y
@ -1005,6 +1066,7 @@ SLB +INC_IP
+ACCMEM16 ; 16 BIT A/M
TXY
JMP NEXTOP
}
SLW +INC_IP
LDA (IP),Y
TYX
@ -1016,6 +1078,18 @@ SLW +INC_IP
;*
;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK
;*
!IF SELFMODIFY {
DLB +INC_IP
LDA (IP),Y
AND #$00FF
CLC
ADC IFP
STA DLBSTX+1
LDA TOS,S
TAX
DLBSTX STX $FFFF
JMP NEXTOP
} ELSE {
DLB +INC_IP
TYX
+ACCMEM8 ; 8 BIT A/M
@ -1026,6 +1100,7 @@ DLB +INC_IP
+ACCMEM16 ; 16 BIT A/M
TXY
JMP NEXTOP
}
DLW +INC_IP
LDA (IP),Y
TYX
@ -1037,6 +1112,16 @@ DLW +INC_IP
;*
;* STORE VALUE TO ABSOLUTE ADDRESS
;*
!IF SELFMODIFY {
SAB +INC_IP
LDA (IP),Y
+INC_IP
STA SABSTX+1
PLA
TAX
SABSTX STX $FFFF
JMP NEXTOP
} ELSE {
SAB +INC_IP
LDA (IP),Y
+INC_IP
@ -1046,6 +1131,7 @@ SAB +INC_IP
STA (TMP)
+ACCMEM16 ; 16 BIT A/M
JMP NEXTOP
}
SAW +INC_IP
LDA (IP),Y
+INC_IP
@ -1056,6 +1142,16 @@ SAW +INC_IP
;*
;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK
;*
!IF SELFMODIFY {
DAB +INC_IP
LDA (IP),Y
+INC_IP
STA DABSTX+1
LDA TOS,S
TAX
DABSTX STX $FFFF
JMP NEXTOP
} ELSE {
DAB +INC_IP
LDA (IP),Y
+INC_IP
@ -1065,6 +1161,7 @@ DAB +INC_IP
STA (TMP)
+ACCMEM16 ; 16 BIT A/M
JMP NEXTOP
}
DAW +INC_IP
LDA (IP),Y
+INC_IP
@ -1090,7 +1187,8 @@ ISFLS LDA #$0000
JMP NEXTOP
;
ISGE PLA
CMP TOS,S
SEC
SBC TOS,S
BVS +
BMI ISTRU
BEQ ISTRU
@ -1100,7 +1198,8 @@ ISGE PLA
BPL ISTRU
;
ISGT PLA
CMP TOS,S
SEC
SBC TOS,S
BVS +
BMI ISTRU
BPL ISFLS
@ -1108,7 +1207,8 @@ ISGT PLA
BPL ISTRU
;
ISLE PLA
CMP TOS,S
SEC
SBC TOS,S
BVS +
BPL ISTRU
BMI ISFLS
@ -1116,7 +1216,8 @@ ISLE PLA
BMI ISTRU
;
ISLT PLA
CMP TOS,S
SEC
SBC TOS,S
BVS +
BMI ISFLS
BEQ ISFLS
@ -1150,14 +1251,16 @@ BRNE PLA
BNE BRNCH
BEQ NOBRNCH
BRGT PLA
CMP TOS,S
SEC
SBC TOS,S
BVS +
BMI BRNCH
BPL NOBRNCH
+ BMI NOBRNCH
BPL BRNCH
BRLT PLA
CMP TOS,S
SEC
SBC TOS,S
BVS +
BMI NOBRNCH
BEQ NOBRNCH
@ -1280,8 +1383,11 @@ EMUSTK STA TMP
LDX #>DBGTBL
}
STX OPPAGE
!IF SELFMODIFY {
LDX LCRWEN+LCBNK2
LDX LCRWEN+LCBNK2
}
LDY #$00
+HACK816
JMP NEXTOP
;*
;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE)
@ -1395,8 +1501,11 @@ EMUSTKX STA TMP
LDX #>DBGTBL
}
STX OPPAGE
!IF SELFMODIFY {
LDX LCRWEN+LCBNK2
LDX LCRWEN+LCBNK2
}
LDY #$00
+HACK816
JMP NEXTOP
;*
;* JUMP INDIRECT THROUGH TMP
@ -1710,7 +1819,7 @@ STEP STX TMPL
XBA
LDA $101,X
LDX TMPH
JSR PRWORD
JSR PRWORD
BRA +++
++ LDX TMPH
LDA #' '
@ -1724,6 +1833,9 @@ STEP STX TMPL
- JSR PRCHR
CPX #40
BNE -
TSX
CMP #$10
BCC DBGKEY
; LDX TMPL
; CPX #$56 ; FORCE PAUSE AT 'ICAL'
; BEQ DBGKEY