This commit is contained in:
Martin Haye 2014-06-27 09:25:12 -07:00
commit 16ea77aa69
5 changed files with 155 additions and 173 deletions

View File

@ -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<Map, MapEditor.DrawMode> implements EventH
}
}
private static final int dashLength=3;
private void highlightScripts(int x, int y, List<Script> scripts) {
if (scripts == null || scripts.isEmpty()) {
return;
}
GraphicsContext gc = drawCanvas.getGraphicsContext2D();
int idx = 0;
int xx = (int) (x * tileWidth);
int yy = (int) (y * tileHeight);
gc.setLineWidth(2.5);
gc.setStroke(currentMap.getScriptColor(scripts.get(0)));
gc.rect(xx, yy, tileWidth, tileHeight);
// gc.beginPath();
// gc.moveTo(xx,yy);
// for (int i = 0; i < tileWidth; i += 2, xx += 2) {
// idx = (idx + 1) % scripts.size();
// gc.setStroke(currentMap.getScriptColor(scripts.get(idx)));
// gc.lineTo(xx, yy);
// }
// for (int i = 0; i < tileHeight; i += 2, yy += 2) {
// idx = (idx + 1) % scripts.size();
// gc.setStroke(currentMap.getScriptColor(scripts.get(idx)));
// gc.lineTo(xx, yy);
// }
// for (int i = 0; i < tileWidth; i += 2, xx -= 2) {
// idx = (idx + 1) % scripts.size();
// gc.setStroke(currentMap.getScriptColor(scripts.get(idx)));
// gc.lineTo(xx, yy);
// }
// for (int i = 0; i < tileHeight; i += 2, yy -= 2) {
// idx = (idx + 1) % scripts.size();
// gc.setStroke(currentMap.getScriptColor(scripts.get(idx)));
// gc.lineTo(xx, yy);
// }
// gc.closePath();
double xx = x * tileWidth;
double yy = y * tileHeight;
gc.setLineWidth(4);
for (int i = 0; i < tileWidth-2; i += dashLength) {
idx = (idx + 1) % scripts.size();
gc.beginPath();
gc.moveTo(xx,yy);
gc.setStroke(currentMap.getScriptColor(scripts.get(idx)));
xx += dashLength;
gc.lineTo(xx, yy);
gc.setEffect(new DropShadow(2, Color.BLACK));
gc.stroke();
}
for (int i = 0; i < tileHeight-2; i += dashLength) {
idx = (idx + 1) % scripts.size();
gc.beginPath();
gc.moveTo(xx,yy);
gc.setStroke(currentMap.getScriptColor(scripts.get(idx)));
yy += dashLength;
gc.lineTo(xx, yy);
gc.setEffect(new DropShadow(2, Color.BLACK));
gc.stroke();
}
for (int i = 0; i < tileWidth-2; i += dashLength) {
idx = (idx + 1) % scripts.size();
gc.beginPath();
gc.moveTo(xx,yy);
gc.setStroke(currentMap.getScriptColor(scripts.get(idx)));
xx -= dashLength;
gc.lineTo(xx, yy);
gc.setEffect(new DropShadow(2, Color.BLACK));
gc.stroke();
}
for (int i = 0; i < tileHeight-2; i += dashLength) {
idx = (idx + 1) % scripts.size();
gc.beginPath();
gc.moveTo(xx,yy);
gc.setStroke(currentMap.getScriptColor(scripts.get(idx)));
yy -= dashLength;
gc.lineTo(xx, yy);
gc.setEffect(new DropShadow(2, Color.BLACK));
gc.stroke();
}
}
public void setupDragDrop(TransferHelper<Script> scriptHelper) {

View File

@ -40,9 +40,9 @@ public class TileMap extends ArrayList<ArrayList<Tile>> implements Serializable
loadFromMap(m);
}
public static final double SATURATION = 0.5;
public static final double SATURATION = 0.75;
public static final double VALUE = 1.0;
public static double HUE = 0;
public static double HUE = 180;
private final java.util.Map<Integer, List<Script>> locationScripts = new HashMap<>();
private final java.util.Map<Script, Color> scriptColors = new HashMap<>();
@ -70,7 +70,7 @@ public class TileMap extends ArrayList<ArrayList<Tile>> implements Serializable
private void registerLocationScript(int x, int y, Script s) {
if (!scriptColors.containsKey(s)) {
scriptColors.put(s, Color.hsb(HUE, SATURATION, VALUE));
HUE = (HUE + 20) % 360;
HUE = (HUE + 35) % 360;
}
int loc = getMortonNumber(x, y);
List<Script> list = locationScripts.get(loc);

View File

@ -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)

View File

@ -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
@ -253,7 +247,7 @@ CMDEXEC = *
;
; INSTALL PAGE 0 FETCHOP ROUTINE
;
LDY #$0E
LDY #$0F
- LDA PAGE0,Y
STA DROP,Y
DEY
@ -316,24 +310,26 @@ 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
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
}
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
;*
@ -1206,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
;*
@ -1373,17 +1335,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 +1354,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 +1370,7 @@ CALLX +INC_IP
PHA
STA ALTRDOFF
CLI
CALXADR JSR $FFFF
JSR JMPTMP
SEI
STA ALTRDON
PLA
@ -1421,16 +1381,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 +1396,7 @@ ICAL LDA ESTKL,X
PHA
TYA
PHA
ICALADR JSR $FFFF
JSR JMPTMP
PLA
TAY
PLA
@ -1447,14 +1405,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 +1420,7 @@ ICALX LDA ESTKL,X
PHA
STA ALTRDOFF
CLI
ICLXADR JSR $FFFF
JSR JMPTMP
SEI
STA ALTRDON
PLA
@ -1475,10 +1431,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

View File

@ -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