From ee8fd77c261fe15402e6b760467e18b9ee9b585a Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sun, 26 Mar 2017 20:36:03 -0700 Subject: [PATCH] Check for existing string in pool before copying CS string from aux mem --- src/samplesrc/rogue.combat.pla | 30 +++++++--------------- src/toolsrc/sb.pla | 2 +- src/vmsrc/plvm02.s | 8 +++--- src/vmsrc/plvm03.s | 46 +++++++++++++++++++++++++++++----- 4 files changed, 54 insertions(+), 32 deletions(-) diff --git a/src/samplesrc/rogue.combat.pla b/src/samplesrc/rogue.combat.pla index fea5868..5af63cf 100644 --- a/src/samplesrc/rogue.combat.pla +++ b/src/samplesrc/rogue.combat.pla @@ -119,7 +119,6 @@ word ascii_entity = @ascii_thief, @ascii_ogre, @ascii_zombie, @ascii_rogue // // Monster types // - byte thief = "Thief", 5 byte ogre = "Ogre", 20 byte zombie = "Zombie", 40 @@ -127,17 +126,6 @@ byte rogue = "Rogue", 80 export word entity = @thief, @ogre, @zombie, @rogue export word entities = 0 -// -// Combat status strings -// - -byte skillstr = "Skill :" -byte healthstr = "Health :" -byte energystr = "Energy :" -byte powerstr = "Power :" -byte lifestr = "Life :" -byte fightstr = "F)ight or R)un?" - // // Combat Return 1 if running away, 0 if end of fight // @@ -157,24 +145,24 @@ export def fight(player, enemy) gotoxy(0, 0) puts(player+name) gotoxy(1, 2) - puts(@skillstr); puti(player->skill) + puts("Skill :"); puti(player->skill) gotoxy(1, 3) - puts(@healthstr); puti(player->health) + puts("Health :"); puti(player->health) gotoxy(1, 4) - puts(@energystr); puti(player->energy) + puts("Energy :"); puti(player->energy) gotoxy(20, 0) puts(entity[enemy->kind]) gotoxy(21, 2) - puts(@powerstr); puti(enemy->power) + puts("Power :"); puti(enemy->power) gotoxy(21, 3) - puts(@lifestr); puti(enemy->life) + puts("Life :"); puti(enemy->life) for e_atck = 0 to 9 gotoxy(0, 10 + e_atck) puts(@ascii_warrior + e_atck * 11) gotoxy(20, 10 + e_atck) puts(ascii_entity[enemy->kind] + e_atck * 11) next - gotoxy(12, 8); puts(@fightstr) + gotoxy(12, 8); puts("F)ight or R)un?") if toupper(getkb()) == 'R' return 1 else @@ -204,10 +192,10 @@ export def fight(player, enemy) entities = enemy=>next_other fin if enemy=>next_other - enemy=>next_other=>prev_other = enemy=>prev_other + enemy=>next_other=>prev_other = enemy=>prev_other fin if enemy=>prev_other - enemy=>prev_other=>next_other = enemy=>next_other + enemy=>prev_other=>next_other = enemy=>next_other fin fin if player->health > e_atck @@ -224,4 +212,4 @@ export def fight(player, enemy) return 0 end -done \ No newline at end of file +done diff --git a/src/toolsrc/sb.pla b/src/toolsrc/sb.pla index 360e10b..34a76e6 100644 --- a/src/toolsrc/sb.pla +++ b/src/toolsrc/sb.pla @@ -90,7 +90,7 @@ word = $0450,$04D0,$0550,$05D0,$0650,$06D0,$0750,$07D0 // Editor variables // byte nullstr = "" -byte version = "PLASMA ][ SANDBOX VERSION 00.95" +byte version = "PLASMA ][ SANDBOX VERSION 00.96" byte errorstr = "ERROR: $" byte okstr = "OK" byte outofmem = "OUT OF MEMORY!" diff --git a/src/vmsrc/plvm02.s b/src/vmsrc/plvm02.s index 668d4d7..d1b3243 100644 --- a/src/vmsrc/plvm02.s +++ b/src/vmsrc/plvm02.s @@ -786,11 +786,11 @@ CSX DEX TAY ADC IPH STA IPH - LDA PPH ; SCAN POOL FOR STRING ALREADY THERE - STA TMPH - LDA PPL + LDA PPL ; SCAN POOL FOR STRING ALREADY THERE STA TMPL -_CMPPSX LDA TMPH ; CHECK FOR END OF POOL + LDA PPH + STA TMPH +_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 diff --git a/src/vmsrc/plvm03.s b/src/vmsrc/plvm03.s index 8afbd71..5dfa735 100644 --- a/src/vmsrc/plvm03.s +++ b/src/vmsrc/plvm03.s @@ -46,7 +46,7 @@ DSTX = XPAGE+DSTH !WORD $0000 !WORD SEGSTART !WORD SEGEND-SEGSTART - + +SOS $40, SEGREQ ; ALLOCATE SEG 1 AND MAP IT BNE PRHEX LDA #$01 @@ -89,7 +89,7 @@ PRHEX PHA BCC + ADC #6 + STA $880 -FAIL RTS +FAIL RTS SEGREQ !BYTE 4 !WORD $2001 !WORD $9F01 @@ -545,7 +545,41 @@ CS DEX TAY ADC IPH STA IPH - LDA (IP),Y + LDA PPL ; SCAN POOL FOR STRING ALREADY THERE + STA TMPL + LDA PPH + STA TMPH +_CMPPS ;LDA TMPH ; CHECK FOR END OF POOL + CMP IFPH + BCC _CMPS ; CHECK FOR MATCHING STRING + BNE _CPYS ; BEYOND END OF POOL, COPY STRING OVER + LDA TMPL + CMP IFPL + BCS _CPYS ; AT OR BEYOND END OF POOL, COPY STRING OVER +_CMPS LDA (TMP),Y ; COMPARE STRINGS FROM AUX MEM TO STRINGS IN MAIN MEM + CMP (IP),Y ; COMPARE STRING LENGTHS + BNE _CNXTS1 + TAY +_CMPCS LDA (TMP),Y ; COMPARE STRING CHARS FROM END + CMP (IP),Y + BNE _CNXTS + DEY + BNE _CMPCS + LDA TMPL ; MATCH - SAVE EXISTING ADDR ON ESTK AND MOVE ON + STA ESTKL,X + LDA TMPH + STA ESTKH,X + BNE _CEXS +_CNXTS LDY #$00 + LDA (TMP),Y +_CNXTS1 SEC + ADC TMPL + STA TMPL + LDA #$00 + ADC TMPH + STA TMPH + BNE _CMPPS +_CPYS LDA (IP),Y ; COPY STRING FROM AUX TO MAIN MEM POOL TAY ; MAKE ROOM IN POOL AND SAVE ADDR ON ESTK EOR #$FF CLC @@ -556,13 +590,13 @@ CS 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 +_CPYS1 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 _CPYS1 INY - LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING +_CEXS LDA (IP),Y ; SKIP TO NEXT OP ADDR AFTER STRING TAY JMP NEXTOP ;*