diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index d021fc2..668d4d7 100644 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -15,10 +15,10 @@ PROMPT = $33 ;* PRODOS ;* PRODOS = $BF00 -DEVCNT = $BF31 ; GLOBAL PAGE DEVICE COUNT +DEVCNT = $BF31 ; GLOBAL PAGE DEVICE COUNT DEVLST = $BF32 ; GLOBAL PAGE DEVICE LIST -MACHID = $BF98 ; GLOBAL PAGE MACHINE ID BYTE -RAMSLOT = $BF26 ; SLOT 3, DRIVE 2 IS /RAM'S DRIVER VECTOR +MACHID = $BF98 ; GLOBAL PAGE MACHINE ID BYTE +RAMSLOT = $BF26 ; SLOT 3, DRIVE 2 IS /RAM'S DRIVER VECTOR NODEV = $BF10 ;* ;* HARDWARE ADDRESSES @@ -786,7 +786,47 @@ CSX DEX TAY ADC 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 EOR #$FF CLC @@ -797,13 +837,13 @@ CSX DEX ADC PPH STA PPH 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 DEY CPY #$FF - BNE - + BNE _CPYSX1 INY - LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING +_CEXSX LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING TAY JMP NEXTOP ;*