From 72af9602dbe1411012b4c29f2b97e9ecc974665d Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Fri, 20 Jun 2014 09:29:15 -0700 Subject: [PATCH 1/4] Remove need to write enable LC, fix STDLIB module address --- PLASMA/src/cmd.pla | 40 ++++++++--------- PLASMA/src/plvm02.s | 102 ++++++++++++++++++++------------------------ 2 files changed, 68 insertions(+), 74 deletions(-) diff --git a/PLASMA/src/cmd.pla b/PLASMA/src/cmd.pla index 4a6f1a5c..b7463c10 100644 --- a/PLASMA/src/cmd.pla +++ b/PLASMA/src/cmd.pla @@ -21,7 +21,7 @@ predef crout, cout, prstr, cin, rdstr predef markheap, allocheap, allocalignheap, releaseheap, availheap predef memset, memcpy predef uword_isgt, uword_isge, uword_islt, uword_isle -predef loadmod, execmod, lookupmod +predef loadmod, execmod, lookupstrmod ; ; System variable. ; @@ -77,7 +77,7 @@ word = @uisltstr, @uword_islt word = @uislestr, @uword_isle word = @loadstr, @loadmod word = @execstr, @execmod -word = @modadrstr, @lookupmod +word = @modadrstr, @lookupstrmod word = @machidstr, MACHID word = 0 word stdlibsym = @exports @@ -504,11 +504,11 @@ asm dcitos STA SRCH LDY #$00 - LDA (SRC),Y + CMP #$80 AND #$7F - CMP (SRC),Y INY STA (DST),Y - BCC - + BCS - TYA LDY #$00 STA (DST),Y @@ -602,12 +602,11 @@ asm modtosym INX LDY #$00 LDA #'#'+$80 - STA (DST),Y -- LDA (SRC),Y +- STA (DST),Y + CMP #$80 + LDA (SRC),Y INY - STA (DST),Y - AND #$80 - BMI - + BCS - RTS end ; @@ -645,8 +644,8 @@ asm lookuptbl CMP (SRC),Y BNE ++ INY - AND #$80 - BMI - + CMP #$80 + BCS - LDA (DST),Y PHA INY @@ -662,16 +661,14 @@ asm lookuptbl INC DSTL BNE ++ INC DSTH -++ AND #$80 - BMI -- +++ CMP #$80 + BCS -- LDA #$02 - CLC ADC DSTL STA DSTL - TYA - ADC DSTH - STA DSTH - BNE - + BCC - + INC DSTH + BCS - end ; ; ProDOS routines @@ -827,6 +824,11 @@ def lookupmod(mod) byte dci[17] return lookuptbl(modtosym(mod, @dci), symtbl) end +def lookupstrmod(str) + byte mod[17] + stodci(str, @mod) + return lookupmod(@mod) +end def addmod(mod, addr) byte dci[17] return addsym(modtosym(mod, @dci), addr) @@ -1246,7 +1248,7 @@ heap = *freemem ; Init symbol table. ; stodci(@stdlibstr, heap) -addmod(heap, @systemflags) +addmod(heap, @version) while *stdlibsym stodci((stdlibsym):0, heap) addsym(heap, (stdlibsym):2) diff --git a/PLASMA/src/plvm02.s b/PLASMA/src/plvm02.s index de9bf721..2044076b 100644 --- a/PLASMA/src/plvm02.s +++ b/PLASMA/src/plvm02.s @@ -179,9 +179,7 @@ OPTBL !WORD ZERO,ADD,SUB,MUL,DIV,MOD,INCR,DECR ; 00 02 04 06 08 0A 0C 0E ;* ;* ENTER INTO BYTECODE INTERPRETER ;* -DINTERP BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 - PLA +DINTERP PLA STA IPL PLA STA IPH @@ -189,9 +187,7 @@ DINTERP BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD LDA #>OPTBL STA OPPAGE JMP FETCHOP -IINTRP BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 - PLA +IINTRP PLA STA TMPL PLA STA TMPH @@ -205,9 +201,7 @@ IINTRP BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD LDA #>OPTBL STA OPPAGE JMP FETCHOP -IINTRPX BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 - PLA +IINTRPX PLA STA TMPL PLA STA TMPH @@ -316,10 +310,12 @@ DISABLE80 !BYTE 21, 13, '1', 26, 13 FAILMSG !BYTE 39 !TEXT "MISSING CMD. PRESS ANY KEY TO RESET..." PAGE0 = * +;****************************** +;* * +;* INTERP BYTECODE INNER LOOP * +;* * +;****************************** !PSEUDOPC $00EF { -;* -;* INTERP BYTECODE INNER LOOP -;* INX ; DROP @ $EF INY ; NEXTOP @ $F0 BEQ NEXTOPH @@ -330,10 +326,10 @@ NEXTOPH INC IPH BNE FETCHOP } PAGE3 = * - !PSEUDOPC $03D0 { ;* ;* PAGE 3 VECTORS INTO INTERPRETER ;* + !PSEUDOPC $03D0 { BIT LCRDEN+LCBNK2 ; $03D0 - DIRECT INTERP ENTRY JMP DINTERP BIT LCRDEN+LCBNK2 ; $03D6 - INDIRECT INTERP ENTRY @@ -401,13 +397,13 @@ IDXW LDA ESTKL,X ;* MUL TOS-1 BY TOS ;* MUL STY IPY - LDY #$00 - STY TMPL ; PRODL - STY TMPH ; PRODH LDY #$10 -MUL1 LSR ESTKH,X ; MULTPLRH + LDA #$00 + STA TMPL ; PRODL + STA TMPH ; PRODH +MULLP LSR ESTKH,X ; MULTPLRH ROR ESTKL,X ; MULTPLRL - BCC MUL2 + BCC + LDA ESTKL+1,X ; MULTPLNDL CLC ADC TMPL ; PRODL @@ -415,15 +411,15 @@ MUL1 LSR ESTKH,X ; MULTPLRH LDA ESTKH+1,X ; MULTPLNDH ADC TMPH ; PRODH STA TMPH -MUL2 ASL ESTKL+1,X ; MULTPLNDL ++ ASL ESTKL+1,X ; MULTPLNDL ROL ESTKH+1,X ; MULTPLNDH DEY - BNE MUL1 + BNE MULLP INX +; LDA TMPH ; PRODH + STA ESTKH,X LDA TMPL ; PRODL STA ESTKL,X - LDA TMPH ; PRODH - STA ESTKH,X LDY IPY JMP NEXTOP ;* @@ -441,31 +437,31 @@ _DIV STY IPY LDA ESTKH,X AND #$80 STA DVSIGN - BPL _DIV1 + BPL + JSR _NEG INC DVSIGN -_DIV1 LDA ESTKH+1,X - BPL _DIV2 ++ LDA ESTKH+1,X + BPL + INX JSR _NEG DEX INC DVSIGN - BNE _DIV3 -_DIV2 ORA ESTKL+1,X ; DVDNDL - BNE _DIV3 + BNE _DIV1 ++ ORA ESTKL+1,X ; DVDNDL + BNE _DIV1 STA TMPL STA TMPH RTS -_DIV3 LDY #$11 ; #BITS+1 +_DIV1 LDY #$11 ; #BITS+1 LDA #$00 STA TMPL ; REMNDRL STA TMPH ; REMNDRH -_DIV4 ASL ESTKL+1,X ; DVDNDL +- ASL ESTKL+1,X ; DVDNDL ROL ESTKH+1,X ; DVDNDH DEY - BCC _DIV4 + BCC - STY ESTKL-1,X -_DIV5 ROL TMPL ; REMNDRL +_DIVLP ROL TMPL ; REMNDRL ROL TMPH ; REMNDRH LDA TMPL ; REMNDRL SEC @@ -473,13 +469,13 @@ _DIV5 ROL TMPL ; REMNDRL TAY LDA TMPH ; REMNDRH SBC ESTKH,X ; DVSRH - BCC _DIV6 + BCC + STA TMPH ; REMNDRH STY TMPL ; REMNDRL -_DIV6 ROL ESTKL+1,X ; DVDNDL ++ ROL ESTKL+1,X ; DVDNDL ROL ESTKH+1,X ; DVDNDH DEC ESTKL-1,X - BNE _DIV5 + BNE _DIVLP LDY IPY RTS ;* @@ -1373,17 +1369,17 @@ IBRNCH LDA IPL ;* CALL +INC_IP LDA (IP),Y - STA CALLADR+1 + STA TMPL +INC_IP LDA (IP),Y - STA CALLADR+2 + STA TMPH LDA IPH PHA LDA IPL PHA TYA PHA -CALLADR JSR $FFFF + JSR JMPTMP PLA TAY PLA @@ -1392,16 +1388,14 @@ CALLADR JSR $FFFF STA IPH LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE STA OPPAGE - BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 JMP NEXTOP ; CALLX +INC_IP LDA (IP),Y - STA CALXADR+1 + STA TMPL +INC_IP LDA (IP),Y - STA CALXADR+2 + STA TMPH LDA IPH PHA LDA IPL @@ -1410,7 +1404,7 @@ CALLX +INC_IP PHA STA ALTRDOFF CLI -CALXADR JSR $FFFF + JSR JMPTMP SEI STA ALTRDON PLA @@ -1421,16 +1415,14 @@ CALXADR JSR $FFFF STA IPH LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE STA OPPAGE - BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 JMP NEXTOP ;* ;* INDIRECT CALL TO ADDRESS (NATIVE CODE) ;* ICAL LDA ESTKL,X - STA ICALADR+1 + STA TMPL LDA ESTKH,X - STA ICALADR+2 + STA TMPH INX LDA IPH PHA @@ -1438,7 +1430,7 @@ ICAL LDA ESTKL,X PHA TYA PHA -ICALADR JSR $FFFF + JSR JMPTMP PLA TAY PLA @@ -1447,14 +1439,12 @@ ICALADR JSR $FFFF STA IPH LDA #>OPTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE STA OPPAGE - BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 JMP NEXTOP ; ICALX LDA ESTKL,X - STA ICLXADR+1 + STA TMPL LDA ESTKH,X - STA ICLXADR+2 + STA TMPH INX LDA IPH PHA @@ -1464,7 +1454,7 @@ ICALX LDA ESTKL,X PHA STA ALTRDOFF CLI -ICLXADR JSR $FFFF + JSR JMPTMP SEI STA ALTRDON PLA @@ -1475,10 +1465,12 @@ ICLXADR JSR $FFFF STA IPH LDA #>OPXTBL ; MAKE SURE WE'RE INDEXING THE RIGHT TABLE STA OPPAGE - BIT LCRWEN+LCBNK2 ; WRITE ENABLE LANGUAGE CARD - BIT LCRWEN+LCBNK2 JMP NEXTOP ;* +;* JUMP INDIRECT TRHOUGH TMP +;* +JMPTMP JMP (TMP) +;* ;* ENTER FUNCTION WITH FRAME SIZE AND PARAM COUNT ;* ENTER +INC_IP From 73fee14a4372613187f4ccb2b82eb60729555d8a Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 21 Jun 2014 20:49:46 -0700 Subject: [PATCH 2/4] Inner interp loop optimization too good to pass up --- PLASMA/src/plvm02.s | 6 +++--- PLASMA/src/plvm02zp.inc | 17 +++++++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/PLASMA/src/plvm02.s b/PLASMA/src/plvm02.s index 2044076b..e30f2f48 100644 --- a/PLASMA/src/plvm02.s +++ b/PLASMA/src/plvm02.s @@ -247,7 +247,7 @@ CMDEXEC = * ; ; INSTALL PAGE 0 FETCHOP ROUTINE ; - LDY #$0E + LDY #$0F - LDA PAGE0,Y STA DROP,Y DEY @@ -319,9 +319,9 @@ PAGE0 = * INX ; DROP @ $EF INY ; NEXTOP @ $F0 BEQ NEXTOPH -FETCHOP LDA (IP),Y + LDA $FFFF,Y ; FETCHOP @ $F3, IP MAPS OVER $FFFF @ $F4 STA OPIDX - JMP (OPTBL) + JMP (OPTBL) ; OPIDX AND OPPAGE MAP OVER OPTBL NEXTOPH INC IPH BNE FETCHOP } diff --git a/PLASMA/src/plvm02zp.inc b/PLASMA/src/plvm02zp.inc index 9667f317..c7461fdd 100644 --- a/PLASMA/src/plvm02zp.inc +++ b/PLASMA/src/plvm02zp.inc @@ -17,11 +17,12 @@ VMZP = ESTK+ESTKSZ IFP = VMZP IFPL = IFP IFPH = IFP+1 -IP = IFP+2 -IPL = IP -IPH = IP+1 -IPY = IP+2 -TMP = IP+3 +;IP = IFP+2 ; MOVED TO OVERLAY NEXTOP +;IPL = IP +;IPH = IP+1 +;IPY = IP+2 +IPY = IFP+2 +TMP = IPY+1 TMPL = TMP TMPH = TMP+1 NPARMS = TMPL @@ -30,5 +31,9 @@ DVSIGN = TMP+2 ESP = TMP+2 DROP = $EF NEXTOP = $F0 -OPIDX = NEXTOP+8 +FETCHOP = NEXTOP+3 +IP = FETCHOP+1 +IPL = IP +IPH = IPL+1 +OPIDX = FETCHOP+6 OPPAGE = OPIDX+1 From c4d6742aec68d8f55b86bec1710da308ff5035ec Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Mon, 23 Jun 2014 18:55:52 -0700 Subject: [PATCH 3/4] Better test opcodes --- PLASMA/src/plvm02.s | 82 +++++++++++++-------------------------------- 1 file changed, 24 insertions(+), 58 deletions(-) diff --git a/PLASMA/src/plvm02.s b/PLASMA/src/plvm02.s index e30f2f48..14950de3 100644 --- a/PLASMA/src/plvm02.s +++ b/PLASMA/src/plvm02.s @@ -1202,99 +1202,65 @@ DAWX +INC_IP ;* ;* COMPARES ;* -ISEQ STY IPY - LDY #$00 - LDA ESTKL,X +ISEQ LDA ESTKL,X CMP ESTKL+1,X - BNE ISEQ1 + BNE ISFLS LDA ESTKH,X CMP ESTKH+1,X - BNE ISEQ1 - DEY -ISEQ1 STY ESTKL+1,X - STY ESTKH+1,X + BNE ISFLS +ISTRU LDA #$FF INX - LDY IPY + STA ESTKL,X + STA ESTKH,X JMP NEXTOP ; -ISNE STY IPY - LDY #$FF - LDA ESTKL,X +ISNE LDA ESTKL,X CMP ESTKL+1,X - BNE ISNE1 + BNE ISTRU LDA ESTKH,X CMP ESTKH+1,X - BNE ISNE1 - INY -ISNE1 STY ESTKL+1,X - STY ESTKH+1,X + BNE ISTRU +ISFLS LDA #$00 INX - LDY IPY + STA ESTKL,X + STA ESTKH,X JMP NEXTOP ; -ISGE STY IPY - LDY #$00 - LDA ESTKL+1,X +ISGE LDA ESTKL+1,X CMP ESTKL,X LDA ESTKH+1,X SBC ESTKH,X BVC ISGE1 EOR #$80 -ISGE1 BMI ISGE2 - DEY -ISGE2 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOP +ISGE1 BPL ISTRU + BMI ISFLS ; -ISGT STY IPY - LDY #$00 - LDA ESTKL,X +ISGT LDA ESTKL,X CMP ESTKL+1,X LDA ESTKH,X SBC ESTKH+1,X BVC ISGT1 EOR #$80 -ISGT1 BPL ISGT2 - DEY -ISGT2 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOP +ISGT1 BMI ISTRU + BPL ISFLS ; -ISLE STY IPY - LDY #$00 - LDA ESTKL,X +ISLE LDA ESTKL,X CMP ESTKL+1,X LDA ESTKH,X SBC ESTKH+1,X BVC ISLE1 EOR #$80 -ISLE1 BMI ISLE2 - DEY -ISLE2 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOP +ISLE1 BPL ISTRU + BMI ISFLS ; -ISLT STY IPY - LDY #$00 - LDA ESTKL+1,X +ISLT LDA ESTKL+1,X CMP ESTKL,X LDA ESTKH+1,X SBC ESTKH,X BVC ISLT1 EOR #$80 -ISLT1 BPL ISLT2 - DEY -ISLT2 STY ESTKL+1,X - STY ESTKH+1,X - INX - LDY IPY - JMP NEXTOP +ISLT1 BMI ISTRU + BPL ISFLS ;* ;* BRANCHES ;* From 6c1a1c18af25fad7334b8f4c925bdb6ab463709f Mon Sep 17 00:00:00 2001 From: Brendan Robert Date: Mon, 23 Jun 2014 22:53:52 -0500 Subject: [PATCH 4/4] Scripts assigned to the map are now visible. Still needs some UX to be fully useful but it's sufficient for basic stuff. --- .../org/badvision/outlaweditor/MapEditor.java | 75 ++++++++++++------- .../badvision/outlaweditor/data/TileMap.java | 6 +- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java index e03d3d91..414569d9 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java @@ -12,6 +12,7 @@ import javafx.scene.ImageCursor; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; +import javafx.scene.effect.DropShadow; import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; import javafx.scene.input.Clipboard; @@ -237,41 +238,57 @@ public class MapEditor extends Editor implements EventH } } + private static final int dashLength=3; + private void highlightScripts(int x, int y, List