mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-03-20 03:31:27 +00:00
VM cleanup and PLASMA16 bugfixes
This commit is contained in:
parent
944905e965
commit
858023fd87
@ -40,6 +40,7 @@ ALTRDON = $C003
|
||||
ALTWROFF= $C004
|
||||
ALTWRON = $C005
|
||||
!SOURCE "vmsrc/plvmzp.inc"
|
||||
PSR = TMPH+1
|
||||
DROP = $EF
|
||||
NEXTOP = $F0
|
||||
FETCHOP = NEXTOP+3
|
||||
@ -233,11 +234,15 @@ IINTRP PLA
|
||||
+ LDA #>OPTBL
|
||||
STA OPPAGE
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
JMP FETCHOP
|
||||
IINTRPX PLA
|
||||
IINTRPX PHP
|
||||
PLA
|
||||
STA PSR
|
||||
SEI
|
||||
PLA
|
||||
STA TMPL
|
||||
PLA
|
||||
STA TMPH
|
||||
@ -258,10 +263,9 @@ IINTRPX PLA
|
||||
STA IFPH
|
||||
LDA #>OPXTBL
|
||||
STA OPPAGE
|
||||
;SEI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
STA ALTRDON
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
JMP FETCHOP
|
||||
@ -425,8 +429,6 @@ ADD LDA ESTKL,X
|
||||
LDA ESTKH,X
|
||||
ADC ESTKH+1,X
|
||||
STA ESTKH+1,X
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* SUB TOS FROM TOS-1
|
||||
@ -438,8 +440,6 @@ SUB LDA ESTKL+1,X
|
||||
LDA ESTKH+1,X
|
||||
SBC ESTKH,X
|
||||
STA ESTKH+1,X
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* SHIFT TOS LEFT BY 1, ADD TO TOS-1
|
||||
@ -453,8 +453,6 @@ IDXW LDA ESTKL,X
|
||||
LDA ESTKH,X
|
||||
ADC ESTKH+1,X
|
||||
STA ESTKH+1,X
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* MUL TOS-1 BY TOS
|
||||
@ -485,8 +483,6 @@ MULLP LSR TMPH ; MULTPLRH
|
||||
BNE MULLP
|
||||
STA ESTKH+1,X ; PRODH
|
||||
LDY IPY
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* INTERNAL DIVIDE ALGORITHM
|
||||
@ -605,8 +601,6 @@ BAND LDA ESTKL+1,X
|
||||
LDA ESTKH+1,X
|
||||
AND ESTKH,X
|
||||
STA ESTKH+1,X
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* INCLUSIVE OR TOS TO TOS-1
|
||||
@ -617,8 +611,6 @@ IOR LDA ESTKL+1,X
|
||||
LDA ESTKH+1,X
|
||||
ORA ESTKH,X
|
||||
STA ESTKH+1,X
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* EXLUSIVE OR TOS TO TOS-1
|
||||
@ -629,8 +621,6 @@ XOR LDA ESTKL+1,X
|
||||
LDA ESTKH+1,X
|
||||
EOR ESTKH,X
|
||||
STA ESTKH+1,X
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* SHIFT TOS-1 LEFT BY TOS
|
||||
@ -651,8 +641,6 @@ SHL2 ASL ESTKL+1,X
|
||||
DEY
|
||||
BNE SHL2
|
||||
SHL3 LDY IPY
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* SHIFT TOS-1 RIGHT BY TOS
|
||||
@ -680,8 +668,6 @@ SHR3 CMP #$80
|
||||
BNE SHR3
|
||||
STA ESTKH+1,X
|
||||
SHR4 LDY IPY
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
@ -706,8 +692,6 @@ LAND LDA ESTKL+1,X
|
||||
LDA #$FF
|
||||
LAND1 STA ESTKL+1,X
|
||||
STA ESTKH+1,X
|
||||
;LAND2 INX
|
||||
; JMP NEXTOP
|
||||
LAND2 JMP DROP
|
||||
;*
|
||||
;* LOGICAL OR
|
||||
@ -720,8 +704,6 @@ LOR LDA ESTKL,X
|
||||
LDA #$FF
|
||||
STA ESTKL+1,X
|
||||
STA ESTKH+1,X
|
||||
;LOR1 INX
|
||||
; JMP NEXTOP
|
||||
LOR1 JMP DROP
|
||||
;*
|
||||
;* DUPLICATE TOS
|
||||
@ -753,7 +735,7 @@ ZERO DEX
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
CFFB LDA #$FF
|
||||
!BYTE $2C ; BIT $00A9 - effectively skips LDA #$00, no harm in reading this address
|
||||
!BYTE $2C ; BIT $00A9 - effectively skips LDA #$00, no harm in reading this address
|
||||
CB LDA #$00
|
||||
DEX
|
||||
STA ESTKH,X
|
||||
@ -870,9 +852,9 @@ LB LDA ESTKL,X
|
||||
STA LBLDA+1
|
||||
LDA ESTKH,X
|
||||
STA LBLDA+2
|
||||
LBLDA LDA $FFFF
|
||||
LBLDA LDA $FFFF
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
LDA #$00
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
} ELSE {
|
||||
@ -910,7 +892,7 @@ LBX LDA ESTKL,X
|
||||
STA ALTRDOFF
|
||||
LBXLDA LDA $FFFF
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
LDA #$00
|
||||
STA ESTKH,X
|
||||
STA ALTRDON
|
||||
JMP NEXTOP
|
||||
@ -1024,7 +1006,7 @@ LAB +INC_IP
|
||||
LABLDA LDA $FFFF
|
||||
DEX
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
LDA #$00
|
||||
STA ESTKH,X
|
||||
JMP NEXTOP
|
||||
} ELSE {
|
||||
@ -1071,7 +1053,7 @@ LABX +INC_IP
|
||||
LABXLDA LDA $FFFF
|
||||
DEX
|
||||
STA ESTKL,X
|
||||
LDA #$00
|
||||
LDA #$00
|
||||
STA ESTKH,X
|
||||
STA ALTRDON
|
||||
JMP NEXTOP
|
||||
@ -1122,8 +1104,6 @@ SB LDA ESTKL,X
|
||||
LDA ESTKL+1,X
|
||||
SBSTA STA $FFFF
|
||||
INX
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
} ELSE {
|
||||
SB LDA ESTKL,X
|
||||
@ -1136,8 +1116,6 @@ SB LDA ESTKL,X
|
||||
STA (TMP),Y
|
||||
LDY IPY
|
||||
INX
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
}
|
||||
SW LDA ESTKL,X
|
||||
@ -1153,8 +1131,6 @@ SW LDA ESTKL,X
|
||||
STA (TMP),Y
|
||||
LDY IPY
|
||||
INX
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* STORE VALUE TO LOCAL FRAME OFFSET
|
||||
@ -1179,8 +1155,6 @@ SLW +INC_IP
|
||||
LDA ESTKH,X
|
||||
STA (IFP),Y
|
||||
LDY IPY
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* STORE VALUE TO LOCAL FRAME OFFSET WITHOUT POPPING STACK
|
||||
@ -1231,8 +1205,6 @@ SAB +INC_IP
|
||||
LDY #$00
|
||||
STA (TMP),Y
|
||||
LDY IPY
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
}
|
||||
SAW +INC_IP
|
||||
@ -1249,8 +1221,6 @@ SAW +INC_IP
|
||||
LDA ESTKH,X
|
||||
STA (TMP),Y
|
||||
LDY IPY
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* STORE VALUE TO ABSOLUTE ADDRESS WITHOUT POPPING STACK
|
||||
@ -1306,8 +1276,6 @@ ISEQ LDA ESTKL,X
|
||||
ISTRU LDA #$FF
|
||||
STA ESTKL+1,X
|
||||
STA ESTKH+1,X
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;
|
||||
ISNE LDA ESTKL,X
|
||||
@ -1319,8 +1287,6 @@ ISNE LDA ESTKL,X
|
||||
ISFLS LDA #$00
|
||||
STA ESTKL+1,X
|
||||
STA ESTKH+1,X
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;
|
||||
ISGE LDA ESTKL+1,X
|
||||
@ -1425,8 +1391,6 @@ IBRNCH LDA IPL
|
||||
LDA IPH
|
||||
ADC ESTKH,X
|
||||
STA IPH
|
||||
; INX
|
||||
; JMP NEXTOP
|
||||
JMP DROP
|
||||
;*
|
||||
;* CALL INTO ABSOLUTE ADDRESS (NATIVE CODE)
|
||||
@ -1437,25 +1401,25 @@ CALL +INC_IP
|
||||
+INC_IP
|
||||
LDA (IP),Y
|
||||
STA TMPH
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
ADC #$00
|
||||
PHA
|
||||
JSR JMPTMP
|
||||
PLA
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STA OPPAGE
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
LDY #$00
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;
|
||||
CALLX +INC_IP
|
||||
@ -1464,29 +1428,34 @@ CALLX +INC_IP
|
||||
+INC_IP
|
||||
LDA (IP),Y
|
||||
STA TMPH
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
ADC #$00
|
||||
PHA
|
||||
STA ALTRDOFF
|
||||
;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
LDA PSR
|
||||
PHA
|
||||
PLP
|
||||
JSR JMPTMP
|
||||
;SEI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
PHP
|
||||
PLA
|
||||
STA PSR
|
||||
SEI
|
||||
STA ALTRDON
|
||||
PLA
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STA OPPAGE
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
LDY #$00
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* INDIRECT CALL TO ADDRESS (NATIVE CODE)
|
||||
@ -1496,25 +1465,25 @@ ICAL LDA ESTKL,X
|
||||
LDA ESTKH,X
|
||||
STA TMPH
|
||||
INX
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
ADC #$00
|
||||
PHA
|
||||
JSR JMPTMP
|
||||
PLA
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STA OPPAGE
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
LDY #$00
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;
|
||||
ICALX LDA ESTKL,X
|
||||
@ -1522,17 +1491,21 @@ ICALX LDA ESTKL,X
|
||||
LDA ESTKH,X
|
||||
STA TMPH
|
||||
INX
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
TYA
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
ADC #$00
|
||||
PHA
|
||||
STA ALTRDOFF
|
||||
;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
LDA PSR
|
||||
PHA
|
||||
PLP
|
||||
JSR JMPTMP
|
||||
;SEI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
PHP
|
||||
PLA
|
||||
STA PSR
|
||||
STA ALTRDON
|
||||
PLA
|
||||
STA IPH
|
||||
@ -1541,10 +1514,10 @@ ICALX LDA ESTKL,X
|
||||
LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE
|
||||
STA OPPAGE
|
||||
!IF SELFMODIFY {
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
BIT LCRWEN+LCBNK2
|
||||
}
|
||||
LDY #$00
|
||||
LDY #$00
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* JUMP INDIRECT TRHOUGH TMP
|
||||
@ -1567,7 +1540,7 @@ ENTER INY
|
||||
STA IFPH
|
||||
INY
|
||||
LDA (IP),Y
|
||||
BEQ +
|
||||
BEQ +
|
||||
ASL
|
||||
TAY
|
||||
- LDA ESTKH,X
|
||||
@ -1577,14 +1550,16 @@ ENTER INY
|
||||
INX
|
||||
DEY
|
||||
STA (IFP),Y
|
||||
BNE -
|
||||
BNE -
|
||||
+ LDY #$02
|
||||
JMP NEXTOP
|
||||
;*
|
||||
;* LEAVE FUNCTION
|
||||
;*
|
||||
LEAVEX STA ALTRDOFF
|
||||
;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
LDA PSR
|
||||
PHA
|
||||
PLP
|
||||
LEAVE PLA ; DEALLOCATE POOL + FRAME
|
||||
CLC
|
||||
ADC IFPL
|
||||
@ -1599,7 +1574,9 @@ LEAVE PLA ; DEALLOCATE POOL + FRAME
|
||||
RTS
|
||||
;
|
||||
RETX STA ALTRDOFF
|
||||
;CLI UNTIL I KNOW WHAT TO DO WITH THE UNENHANCED IIE
|
||||
LDA PSR
|
||||
PHA
|
||||
PLP
|
||||
RET LDA IFPL ; DEALLOCATE POOL
|
||||
STA PPL
|
||||
LDA IFPH
|
||||
|
@ -51,6 +51,7 @@ ALTWROFF= $C004
|
||||
ALTWRON = $C005
|
||||
!SOURCE "vmsrc/plvmzp.inc"
|
||||
HWSP = TMPH+1
|
||||
PSR = HWSP+1
|
||||
DROP = $EF
|
||||
NEXTOP = DROP+1
|
||||
FETCHOP = NEXTOP+3
|
||||
@ -212,7 +213,10 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08
|
||||
;* ENTER INTO BYTECODE INTERPRETER - IMMEDIATELY SWITCH TO NATIVE
|
||||
;*
|
||||
!AS
|
||||
DINTRP SEI
|
||||
DINTRP PHP
|
||||
PLA
|
||||
STA PSR
|
||||
SEI
|
||||
CLC ; SWITCH TO NATIVE MODE
|
||||
XCE
|
||||
REP #$20 ; 16 BIT A/M
|
||||
@ -236,19 +240,20 @@ DINTRP SEI
|
||||
JMP FETCHOP
|
||||
}
|
||||
!AS
|
||||
IINTRP SEI
|
||||
IINTRP PHP
|
||||
PLA
|
||||
STA PSR
|
||||
SEI
|
||||
CLC ; SWITCH TO NATIVE MODE
|
||||
XCE
|
||||
REP #$20 ; 16 BIT A/M
|
||||
!AL
|
||||
PLA
|
||||
STA TMP
|
||||
LDY #$01
|
||||
LDA (TMP),Y
|
||||
LDA (TOS,S),Y
|
||||
DEY
|
||||
STA IP
|
||||
LDA IFP
|
||||
PHA ; SAVE ON STACK FOR LEAVE/RET
|
||||
STA TOS,S ; SAVE ON STACK FOR LEAVE/RET
|
||||
LDA PP ; SET FP TO PP
|
||||
STA IFP
|
||||
STX ESP
|
||||
@ -262,19 +267,20 @@ IINTRP SEI
|
||||
JMP FETCHOP
|
||||
}
|
||||
!AS
|
||||
IINTRPX SEI
|
||||
IINTRPX PHP
|
||||
PLA
|
||||
STA PSR
|
||||
SEI
|
||||
CLC ; SWITCH TO NATIVE MODE
|
||||
XCE
|
||||
REP #$20 ; 16 BIT A/M
|
||||
!AL
|
||||
PLA
|
||||
STA TMP
|
||||
LDY #$01
|
||||
LDA (TMP),Y
|
||||
STA IP
|
||||
LDA (TOS,S),Y
|
||||
DEY
|
||||
STA IP
|
||||
LDA IFP
|
||||
PHA ; SAVE ON STACK FOR LEAVE/RET
|
||||
STA TOS,S ; SAVE ON STACK FOR LEAVE/RET
|
||||
LDA PP ; SET FP TO PP
|
||||
STA IFP
|
||||
STX ESP
|
||||
@ -285,9 +291,9 @@ IINTRPX SEI
|
||||
!IF DEBUG {
|
||||
SETDBG LDY LCRWEN+LCBNK2
|
||||
LDY LCRWEN+LCBNK2
|
||||
LDY #$00
|
||||
STX DBG_OP+2
|
||||
LDX #>DBGTBL
|
||||
LDY #$00
|
||||
}
|
||||
STX OPPAGE
|
||||
JMP FETCHOP
|
||||
@ -324,6 +330,9 @@ CMDENTRY = *
|
||||
!IF DEBUG {
|
||||
LDA #20 ; SET TEXT WINDOW ABOVE DEBUG OUTPUT
|
||||
STA $23
|
||||
; LDA $BF98 ; FORCE 64K
|
||||
; AND #$CF
|
||||
; STA $BF98
|
||||
}
|
||||
;
|
||||
; INSTALL PAGE 0 FETCHOP ROUTINE
|
||||
@ -449,13 +458,16 @@ LCDEFCMD = *-28 ; DEFCMD IN LC MEMORY
|
||||
!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,CS ; 20 22 24 26 28 2A 2C 2E
|
||||
!WORD LNOT,LOR,LAND,LA,LLA,CB,CW,CSX ; 20 22 24 26 28 2A 2C 2E
|
||||
!WORD DROP,DUP,PUSHEP,PULLEP,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,ENTER,LEAVEX,RETX,CFFB ; 50 52 54 56 58 5A 5C 5E
|
||||
!WORD LBX,LWX,LLBX,LLWX,LABX,LAWX,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
|
||||
!IF DEBUG {
|
||||
;*
|
||||
;* DEBUG PRINT ROUTINES
|
||||
;*
|
||||
!AS
|
||||
PRHEX PHA
|
||||
LSR
|
||||
@ -496,7 +508,6 @@ PRWORD PHA
|
||||
JSR PRHEX
|
||||
PLA
|
||||
JMP PRHEX
|
||||
|
||||
;*****************
|
||||
;* *
|
||||
;* DEBUG TABLE *
|
||||
@ -553,6 +564,21 @@ STEP STX TMPL
|
||||
SEP #$20 ; 8 BIT A/M
|
||||
!AS
|
||||
JSR PRWORD
|
||||
LDA #$80+'['
|
||||
JSR PRCHR
|
||||
STX TMPH
|
||||
TSX
|
||||
TXA
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC HWSP
|
||||
LSR
|
||||
CLC
|
||||
ADC #$80+'0'
|
||||
LDX TMPH
|
||||
JSR PRCHR
|
||||
LDA #$80+']'
|
||||
JSR PRCHR
|
||||
LDA #':'
|
||||
JSR PRCHR
|
||||
STX TMPH
|
||||
@ -583,31 +609,42 @@ STEP STX TMPL
|
||||
JSR PRCHR
|
||||
JSR PRCHR
|
||||
JSR PRCHR
|
||||
+++ ;LDX $C010
|
||||
LDA #' '
|
||||
+++ LDA #' '
|
||||
- JSR PRCHR
|
||||
CPX #40
|
||||
BNE -
|
||||
; LDX TMPL
|
||||
; CPX #$48 ; FORCE PAUSE AT 'IS_GE'
|
||||
; CPX #$56 ; FORCE PAUSE AT 'ICAL'
|
||||
; BEQ DBGKEY
|
||||
- LDX $C000
|
||||
CPX #$9B
|
||||
BNE ++
|
||||
BNE +
|
||||
DBGKEY STX $C010
|
||||
- LDX $C000
|
||||
BPL -
|
||||
CPX #$9B
|
||||
BEQ ++
|
||||
BEQ +
|
||||
STX $C010
|
||||
CPX #$80+'Q'
|
||||
BNE ++
|
||||
BNE +
|
||||
SEC ; SWITCH TO EMU MODE
|
||||
XCE
|
||||
BIT $C054 ; SET TEXT MODE
|
||||
BIT $C051
|
||||
BIT $C05F
|
||||
LDA #20 ; SET TEXT WINDOW ABOVE DEBUG OUTPUT
|
||||
STA $23
|
||||
STZ $20
|
||||
STZ $22
|
||||
STZ $24
|
||||
STZ $25
|
||||
STZ $28
|
||||
LDA #$04
|
||||
STA $29
|
||||
BRK
|
||||
++ REP #$20 ; 16 BIT A/M
|
||||
+ REP #$20 ; 16 BIT A/M
|
||||
!AL
|
||||
+ LDX TMPL
|
||||
LDX TMPL
|
||||
DBG_OP JMP (OPTBL,X)
|
||||
}
|
||||
;*********************************************************************
|
||||
@ -644,8 +681,7 @@ IDXW PLA
|
||||
;*
|
||||
;* MUL TOS-1 BY TOS
|
||||
;*
|
||||
MUL ;STY IPY
|
||||
;LDY #$10
|
||||
MUL LDX #$10
|
||||
LDA NOS,S
|
||||
EOR #$FFFF
|
||||
STA TMP
|
||||
@ -654,10 +690,9 @@ MULLP ASL TMP ;LSR TMP ; MULTPLR
|
||||
BCS +
|
||||
ADC TOS,S ; MULTPLD
|
||||
+ ASL ;ASL TOS,S ; MULTPLD
|
||||
;DEY
|
||||
DEX
|
||||
BNE MULLP
|
||||
STA NOS,S ; PROD
|
||||
;LDY IPY
|
||||
JMP DROP
|
||||
;*
|
||||
;* INTERNAL DIVIDE ALGORITHM
|
||||
@ -769,26 +804,26 @@ XOR PLA
|
||||
;*
|
||||
SHL PLA
|
||||
TAX
|
||||
BEQ SHL2
|
||||
BEQ SHLEX
|
||||
LDA TOS,S
|
||||
SHL1 ASL
|
||||
- ASL
|
||||
DEX
|
||||
BNE SHL1
|
||||
BNE -
|
||||
STA TOS,S
|
||||
SHL2 JMP NEXTOP
|
||||
SHLEX JMP NEXTOP
|
||||
;*
|
||||
;* SHIFT TOS-1 RIGHT BY TOS
|
||||
;*
|
||||
SHR PLA
|
||||
TAX
|
||||
BEQ SHR2
|
||||
BEQ SHREX
|
||||
LDA TOS,S
|
||||
SHR1 CMP #$8000
|
||||
- CMP #$8000
|
||||
ROR
|
||||
DEX
|
||||
BNE SHR1
|
||||
BNE -
|
||||
STA TOS,S
|
||||
SHR2 JMP NEXTOP
|
||||
SHREX JMP NEXTOP
|
||||
;*
|
||||
;* LOGICAL NOT
|
||||
;*
|
||||
@ -844,6 +879,7 @@ PUSHEP LDX LCRWEN+LCBNK2 ; RWEN LC MEM
|
||||
BCC +
|
||||
LDX #$80+'>'
|
||||
STX $7D0+30
|
||||
- BRA -
|
||||
LDX #$32
|
||||
+
|
||||
}
|
||||
@ -862,6 +898,7 @@ PULLEP LDX LCRWEN+LCBNK2 ; RWEN LC MEM
|
||||
BPL +
|
||||
LDX #$80+'<'
|
||||
STX $7D0+30
|
||||
- BRA -
|
||||
LDX #$00
|
||||
+
|
||||
}
|
||||
@ -873,8 +910,7 @@ PULLEP LDX LCRWEN+LCBNK2 ; RWEN LC MEM
|
||||
;*
|
||||
;* CONSTANT
|
||||
;*
|
||||
ZERO LDA #$0000
|
||||
PHA
|
||||
ZERO PEA $0000
|
||||
JMP NEXTOP
|
||||
CFFB +INC_IP
|
||||
LDA (IP),Y
|
||||
@ -903,9 +939,8 @@ CS +INC_IP
|
||||
CLC
|
||||
ADC IP
|
||||
STA IP
|
||||
LDY #$00
|
||||
PHA
|
||||
LDA (IP),Y
|
||||
LDA (IP)
|
||||
TAY
|
||||
JMP NEXTOP
|
||||
;
|
||||
@ -914,63 +949,55 @@ CSX +INC_IP
|
||||
CLC
|
||||
ADC IP
|
||||
STA IP
|
||||
LDY #$00
|
||||
LDA PP ; SCAN POOL FOR STRING ALREADY THERE
|
||||
STA TMP
|
||||
_CMPPSX CMP IFP ; CHECK FOR END OF POOL
|
||||
BCC _CMPSX ; CHECK FOR MATCHING STRING
|
||||
_CMPPSX STA TMP
|
||||
CMP IFP ; CHECK FOR END OF POOL
|
||||
BCS _CPYSX ; AT OR BEYOND END OF POOL, COPY STRING OVER
|
||||
_CMPSX SEP #$20 ; 8 BIT A/M
|
||||
!AS
|
||||
STX ALTRDOFF
|
||||
LDA (TMP),Y ; COMPARE STRINGS FROM AUX MEM TO STRINGS IN MAIN MEM
|
||||
STX ALTRDOFF ; CHECK FOR MATCHING STRING
|
||||
LDA (TMP) ; COMPARE STRINGS FROM AUX MEM TO STRINGS IN MAIN MEM
|
||||
STX ALTRDON
|
||||
CMP (IP),Y ; COMPARE STRING LENGTHS
|
||||
CMP (IP) ; COMPARE STRING LENGTHS
|
||||
BNE _CNXTSX1
|
||||
TAY
|
||||
_CMPCSX STX ALTRDOFF
|
||||
- STX ALTRDOFF
|
||||
LDA (TMP),Y ; COMPARE STRING CHARS FROM END
|
||||
STX ALTRDON
|
||||
CMP (IP),Y
|
||||
BNE _CNXTSX
|
||||
DEY
|
||||
BNE _CMPCSX
|
||||
BNE -
|
||||
LDA TMPH ; MATCH - SAVE EXISTING ADDR ON ESTK AND MOVE ON
|
||||
PHA
|
||||
LDA TMPL
|
||||
PHA
|
||||
BRA _CEXSX
|
||||
_CNXTSX LDY #$00
|
||||
STX ALTRDOFF
|
||||
LDA (TMP),Y
|
||||
_CNXTSX STX ALTRDOFF
|
||||
LDA (TMP)
|
||||
STX ALTRDON
|
||||
_CNXTSX1 REP #$20 ; 16 BIT A/M
|
||||
_CNXTSX1 REP #$20 ; 16 BIT A/M
|
||||
!AL
|
||||
AND #$00FF
|
||||
SEC
|
||||
SEC ; SKIP OVER STRING+LEN BYTE
|
||||
ADC TMP
|
||||
STA TMP
|
||||
BNE _CMPPSX
|
||||
!AS
|
||||
_CPYSX LDA (IP),Y ; COPY STRING FROM AUX TO MAIN MEM POOL
|
||||
BRA _CMPPSX
|
||||
_CPYSX LDA (IP) ; COPY STRING FROM AUX TO MAIN MEM POOL
|
||||
TAY ; MAKE ROOM IN POOL AND SAVE ADDR ON ESTK
|
||||
EOR #$FF
|
||||
AND #$00FF
|
||||
EOR #$FFFF
|
||||
CLC
|
||||
ADC PPL
|
||||
STA PPL
|
||||
TAX
|
||||
LDA #$FF
|
||||
ADC PPH
|
||||
STA PPH
|
||||
ADC PP
|
||||
STA PP
|
||||
PHA ; SAVE ADDRESS ON ESTK
|
||||
PHX
|
||||
_CPYSX1 LDA (IP),Y ; ALTRD IS ON, NO NEED TO CHANGE IT HERE
|
||||
SEP #$20 ; 8 BIT A/M
|
||||
!AS
|
||||
- LDA (IP),Y ; ALTRD IS ON, NO NEED TO CHANGE IT HERE
|
||||
STA (PP),Y ; ALTWR IS OFF, NO NEED TO CHANGE IT HERE
|
||||
DEY
|
||||
CPY #$FF
|
||||
BNE _CPYSX1
|
||||
INY
|
||||
_CEXSX LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING
|
||||
BNE -
|
||||
_CEXSX LDA (IP) ; SKIP TO NEXT OP ADDR AFTER STRING
|
||||
TAY
|
||||
REP #$20 ; 16 BIT A/M
|
||||
!AL
|
||||
@ -1330,10 +1357,13 @@ CALL +INC_IP
|
||||
LDA (IP),Y
|
||||
+INC_IP
|
||||
STA TMP
|
||||
EMUSTK SEC ; SWITCH TO EMULATED MODE
|
||||
EMUSTK TYA ; FLATTEN IP
|
||||
CLC
|
||||
ADC IP
|
||||
STA IP
|
||||
SEC ; SWITCH TO EMULATED MODE
|
||||
XCE
|
||||
!AS
|
||||
STY IPY
|
||||
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
|
||||
EOR #$FF
|
||||
SEC
|
||||
@ -1371,25 +1401,36 @@ EMUSTK SEC ; SWITCH TO EMULATED MODE
|
||||
LDX $C010
|
||||
+ TAX
|
||||
}
|
||||
LDA IPY
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
PHX ; SAVE BASELINE ESP
|
||||
TYX
|
||||
;CLI
|
||||
LDA PSR
|
||||
PHA
|
||||
PLP
|
||||
JSR JMPTMP
|
||||
;SEI
|
||||
PHP
|
||||
PLA
|
||||
STA PSR
|
||||
SEI
|
||||
PLY ; MOVE RETURN VALUES TO HW EVAL STACK
|
||||
STY ESP ; RESTORE BASELINE ESP
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
PLA
|
||||
STA IPH
|
||||
STX TMPL
|
||||
!IF DEBUG {
|
||||
TXA
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC ESP
|
||||
CLC
|
||||
ADC #$80+'0'
|
||||
STA $7D0+32
|
||||
}
|
||||
TSX ; RESTORE BASELINE HWSP
|
||||
STX HWSP
|
||||
TYX
|
||||
@ -1420,10 +1461,13 @@ CALLX +INC_IP
|
||||
LDA (IP),Y
|
||||
+INC_IP
|
||||
STA TMP
|
||||
EMUSTKX SEC ; SWITCH TO EMULATED MODE
|
||||
EMUSTKX TYA ; FLATTEN IP
|
||||
CLC
|
||||
ADC IP
|
||||
STA IP
|
||||
SEC ; SWITCH TO EMULATED MODE
|
||||
XCE
|
||||
!AS
|
||||
STY IPY
|
||||
TSC ; MOVE HW EVAL STACK TO ZP EVAL STACK
|
||||
EOR #$FF
|
||||
SEC
|
||||
@ -1455,33 +1499,44 @@ EMUSTKX SEC ; SWITCH TO EMULATED MODE
|
||||
CPX HWSP
|
||||
BEQ +
|
||||
LDX #$80+'X'
|
||||
STX $480+30
|
||||
- LDX $C000
|
||||
STX $7D0+30
|
||||
- LDX $C000
|
||||
BPL -
|
||||
LDX $C010
|
||||
+ TAX
|
||||
}
|
||||
LDA IPY
|
||||
CLC
|
||||
ADC IPL
|
||||
PHA
|
||||
LDA IPH
|
||||
ADC #$00
|
||||
PHA
|
||||
LDA IPL
|
||||
PHA
|
||||
PHX ; SAVE BASELINE ESP
|
||||
TYX
|
||||
STX ALTRDOFF
|
||||
;CLI
|
||||
LDA PSR
|
||||
PHA
|
||||
PLP
|
||||
JSR JMPTMP
|
||||
;SEI
|
||||
PHP
|
||||
PLA
|
||||
STA PSR
|
||||
SEI
|
||||
STX ALTRDON
|
||||
PLY ; MOVE RETURN VALUES TO HW EVAL STACK
|
||||
STY ESP ; RESTORE BASELINE ESP
|
||||
PLA
|
||||
STA IPH
|
||||
PLA
|
||||
STA IPL
|
||||
PLA
|
||||
STA IPH
|
||||
STX TMPL
|
||||
!IF DEBUG {
|
||||
TXA
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC ESP
|
||||
CLC
|
||||
ADC #$80+'0'
|
||||
STA $7D0+32
|
||||
}
|
||||
TSX ; RESTORE BASELINE HWSP
|
||||
STX HWSP
|
||||
TYX
|
||||
@ -1528,6 +1583,13 @@ ENTER INY
|
||||
SEP #$20 ; 8 BIT A/M
|
||||
!AS
|
||||
LDA (IP),Y
|
||||
!IF DEBUG {
|
||||
PHA
|
||||
CLC
|
||||
ADC #$80+'0'
|
||||
STA $7D0+31
|
||||
PLA
|
||||
}
|
||||
PHA ; SAVE ON STACK FOR LEAVE
|
||||
DEC HWSP ; UPDATE HWSP TO SKIP FRAME SIZE
|
||||
REP #$20 ; 16 BIT A/M
|
||||
@ -1570,6 +1632,13 @@ LEAVE SEP #$20 ; 8 BIT A/M
|
||||
SEC
|
||||
ADC HWSP ; STACK DEPTH = (HWSP - SP)/2
|
||||
LSR
|
||||
!IF DEBUG {
|
||||
PHA
|
||||
CLC
|
||||
ADC #$80+'0'
|
||||
STA $7D0+31
|
||||
PLA
|
||||
}
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC ESP ; ESP - STACK DEPTH
|
||||
@ -1607,7 +1676,9 @@ LEAVE SEP #$20 ; 8 BIT A/M
|
||||
STA IFP
|
||||
SEC ; SWITCH TO EMULATED MODE
|
||||
XCE
|
||||
;CLI
|
||||
LDA PSR
|
||||
PHA
|
||||
PLP
|
||||
RTS
|
||||
;
|
||||
RETX STX ALTRDOFF
|
||||
@ -1618,6 +1689,13 @@ RET SEP #$20 ; 8 BIT A/M
|
||||
SEC
|
||||
ADC HWSP ; STACK DEPTH = (HWSP - SP)/2
|
||||
LSR
|
||||
!IF DEBUG {
|
||||
PHA
|
||||
CLC
|
||||
ADC #$80+'0'
|
||||
STA $7D0+31
|
||||
PLA
|
||||
}
|
||||
EOR #$FF
|
||||
SEC
|
||||
ADC ESP ; ESP - STACK DEPTH
|
||||
@ -1653,7 +1731,9 @@ RET SEP #$20 ; 8 BIT A/M
|
||||
SEC ; SWITCH TO EMULATED MODE
|
||||
XCE
|
||||
!AS
|
||||
;CLI
|
||||
LDA PSR
|
||||
PHA
|
||||
PLP
|
||||
RTS
|
||||
|
||||
VMEND = *
|
||||
|
Loading…
x
Reference in New Issue
Block a user