1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-08-09 16:25:01 +00:00

Check for existing string in pool before copying CS string from aux mem

This commit is contained in:
David Schmenk
2017-03-26 20:06:25 -07:00
parent 3e8aaa8325
commit 18b082460f

View File

@@ -15,10 +15,10 @@ PROMPT = $33
;* PRODOS ;* PRODOS
;* ;*
PRODOS = $BF00 PRODOS = $BF00
DEVCNT = $BF31 ; GLOBAL PAGE DEVICE COUNT DEVCNT = $BF31 ; GLOBAL PAGE DEVICE COUNT
DEVLST = $BF32 ; GLOBAL PAGE DEVICE LIST DEVLST = $BF32 ; GLOBAL PAGE DEVICE LIST
MACHID = $BF98 ; GLOBAL PAGE MACHINE ID BYTE MACHID = $BF98 ; GLOBAL PAGE MACHINE ID BYTE
RAMSLOT = $BF26 ; SLOT 3, DRIVE 2 IS /RAM'S DRIVER VECTOR RAMSLOT = $BF26 ; SLOT 3, DRIVE 2 IS /RAM'S DRIVER VECTOR
NODEV = $BF10 NODEV = $BF10
;* ;*
;* HARDWARE ADDRESSES ;* HARDWARE ADDRESSES
@@ -786,7 +786,47 @@ CSX DEX
TAY TAY
ADC IPH ADC IPH
STA IPH STA IPH
LDA (IP),Y LDA PPH ; SCAN POOL FOR STRING ALREADY THERE
STA TMPH
LDA PPL
STA TMPL
_CMPPSX LDA TMPH ; CHECK FOR END OF POOL
CMP IFPH
BCC _CMPSX ; CHECK FOR MATCHING STRING
BNE _CPYSX ; BEYOND END OF POOL, COPY STRING OVER
LDA TMPL
CMP IFPL
BCS _CPYSX ; AT OR BEYOND END OF POOL, COPY STRING OVER
_CMPSX STA ALTRDOFF
LDA (TMP),Y ; COMPARE STRINGS FROM AUX MEM TO STRINGS IN MAIN MEM
STA ALTRDON
CMP (IP),Y ; COMPARE STRING LENGTHS
BNE _CNXTSX1
TAY
_CMPCSX STA ALTRDOFF
LDA (TMP),Y ; COMPARE STRING CHARS FROM END
STA ALTRDON
CMP (IP),Y
BNE _CNXTSX
DEY
BNE _CMPCSX
LDA TMPL ; MATCH - SAVE EXISTING ADDR ON ESTK AND MOVE ON
STA ESTKL,X
LDA TMPH
STA ESTKH,X
BNE _CEXSX
_CNXTSX LDY #$00
STA ALTRDOFF
LDA (TMP),Y
STA ALTRDON
_CNXTSX1 SEC
ADC TMPL
STA TMPL
LDA #$00
ADC TMPH
STA TMPH
BNE _CMPPSX
_CPYSX LDA (IP),Y ; COPY STRING FROM AUX TO MAIN MEM POOL
TAY ; MAKE ROOM IN POOL AND SAVE ADDR ON ESTK TAY ; MAKE ROOM IN POOL AND SAVE ADDR ON ESTK
EOR #$FF EOR #$FF
CLC CLC
@@ -797,13 +837,13 @@ CSX DEX
ADC PPH ADC PPH
STA PPH STA PPH
STA ESTKH,X ; COPY STRING FROM AUX MEM BYTECODE TO MAIN MEM POOL STA ESTKH,X ; COPY STRING FROM AUX MEM BYTECODE TO MAIN MEM POOL
- LDA (IP),Y ; ALTRD IS ON, NO NEED TO CHANGE IT HERE _CPYSX1 LDA (IP),Y ; ALTRD IS ON, NO NEED TO CHANGE IT HERE
STA (PP),Y ; ALTWR IS OFF, NO NEED TO CHANGE IT HERE STA (PP),Y ; ALTWR IS OFF, NO NEED TO CHANGE IT HERE
DEY DEY
CPY #$FF CPY #$FF
BNE - BNE _CPYSX1
INY INY
LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING _CEXSX LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING
TAY TAY
JMP NEXTOP JMP NEXTOP
;* ;*