|
|
|
|
@ -1,22 +1,23 @@
|
|
|
|
|
( polycat ) |
|
|
|
|
|
|
|
|
|
%RTN { JMP2r } |
|
|
|
|
%2// { #01 SFT2 } |
|
|
|
|
%4// { #02 SFT2 } |
|
|
|
|
%!~ { NEQk NIP } |
|
|
|
|
%!~ { NEQk NIP } |
|
|
|
|
%AUTO-XADDR { #05 .Screen/auto DEO } |
|
|
|
|
|
|
|
|
|
( devices ) |
|
|
|
|
|
|
|
|
|
|00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 ] |
|
|
|
|
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 ] |
|
|
|
|
|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &wheel $1 ] |
|
|
|
|
|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 |
|
|
|
|
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 |
|
|
|
|
|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &pad $3 &scrollx $2 &scrolly $2 |
|
|
|
|
|
|
|
|
|
( variables ) |
|
|
|
|
|
|
|
|
|
|0000 |
|
|
|
|
|
|
|
|
|
@cat [ &x $2 &y $2 &timer $1 ] |
|
|
|
|
@pointer [ &x $2 &y $2 ] |
|
|
|
|
@cat |
|
|
|
|
&x $2 &y $2 &timer $1 |
|
|
|
|
@pointer |
|
|
|
|
&x $2 &y $2 |
|
|
|
|
|
|
|
|
|
( program ) |
|
|
|
|
|
|
|
|
|
@ -26,124 +27,121 @@
|
|
|
|
|
#0a3f .System/r DEO2 |
|
|
|
|
#05df .System/g DEO2 |
|
|
|
|
#0caf .System/b DEO2 |
|
|
|
|
|
|
|
|
|
( find center ) |
|
|
|
|
.Screen/width DEI2 2// #0008 SUB2 .cat/x STZ2 |
|
|
|
|
.Screen/height DEI2 4// DUP2k ADD2 ADD2 #0018 SUB2 .cat/y STZ2 |
|
|
|
|
|
|
|
|
|
( DOS resolution ) |
|
|
|
|
#0140 .Screen/width DEO2 |
|
|
|
|
#00c8 .Screen/height DEO2 |
|
|
|
|
( vectors ) |
|
|
|
|
;on-mouse .Mouse/vector DEO2 |
|
|
|
|
;on-frame .Screen/vector DEO2 |
|
|
|
|
|
|
|
|
|
;draw-polycat JSR2 |
|
|
|
|
;draw-ground JSR2 |
|
|
|
|
|
|
|
|
|
BRK |
|
|
|
|
|
|
|
|
|
@on-mouse ( -> ) |
|
|
|
|
|
|
|
|
|
;draw-cursor JSR2 |
|
|
|
|
|
|
|
|
|
.Mouse/x DEI2 .cat/x LDZ2 GTH2 #50 SFT |
|
|
|
|
.Mouse/y DEI2 .cat/y LDZ2 GTH2 #60 SFT |
|
|
|
|
ADD #00 SWP ;draw-eye JSR2 |
|
|
|
|
( find center ) |
|
|
|
|
.Screen/width DEI2 2// .cat/x STZ2 |
|
|
|
|
.Screen/height DEI2 2// .cat/y STZ2 |
|
|
|
|
( set screen mode ) |
|
|
|
|
AUTO-XADDR |
|
|
|
|
( init ) |
|
|
|
|
#ff ;draw-eye/last STA |
|
|
|
|
#ff ;draw-tail/last STA |
|
|
|
|
,draw-polycat JSR |
|
|
|
|
,draw-ground JSR |
|
|
|
|
|
|
|
|
|
BRK |
|
|
|
|
|
|
|
|
|
@on-frame ( -> ) |
|
|
|
|
@draw-ground ( -- ) |
|
|
|
|
|
|
|
|
|
.cat/timer LDZ INC [ DUP ] .cat/timer STZ |
|
|
|
|
DUP ,&skip0 JCN #0000 ;draw-tail JSR2 &skip0 |
|
|
|
|
[ #10 ] !~ ,&skip1 JCN #0001 ;draw-tail JSR2 &skip1 |
|
|
|
|
[ #20 ] !~ ,&skip2 JCN #0002 ;draw-tail JSR2 &skip2 |
|
|
|
|
[ #30 ] !~ ,&skip3 JCN #0003 ;draw-tail JSR2 &skip3 |
|
|
|
|
[ #40 ] !~ ,&skip4 JCN #0002 ;draw-tail JSR2 &skip4 |
|
|
|
|
[ #50 ] !~ ,&skip5 JCN #0001 ;draw-tail JSR2 &skip5 |
|
|
|
|
POP |
|
|
|
|
.cat/y LDZ2 #0018 ADD2 .Screen/y DEO2 |
|
|
|
|
.cat/x LDZ2 #0010 SUB2 .Screen/x DEO2 |
|
|
|
|
;ground .Screen/addr DEO2 |
|
|
|
|
#1000 |
|
|
|
|
&loop |
|
|
|
|
#01 .Screen/sprite DEO |
|
|
|
|
INC GTHk ,&loop JCN |
|
|
|
|
POP2 |
|
|
|
|
|
|
|
|
|
BRK |
|
|
|
|
JMP2r |
|
|
|
|
|
|
|
|
|
@draw-polycat ( -- ) |
|
|
|
|
|
|
|
|
|
( ears ) |
|
|
|
|
.cat/y LDZ2 .Screen/y DEO2 |
|
|
|
|
.cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2 |
|
|
|
|
.cat/x LDZ2 #0008 SUB2 .Screen/x DEO2 |
|
|
|
|
;ears .Screen/addr DEO2 |
|
|
|
|
#81 .Screen/sprite DEOk DEO |
|
|
|
|
( body ) |
|
|
|
|
.cat/y LDZ2 #0010 ADD2 .Screen/y DEO2 |
|
|
|
|
.cat/x LDZ2 #0008 SUB2 .Screen/x DEO2 |
|
|
|
|
;body .Screen/addr DEO2 |
|
|
|
|
#81 .Screen/sprite DEO |
|
|
|
|
STH2r .Screen/x DEO2 |
|
|
|
|
;ears #0010 ADD2 .Screen/addr DEO2 |
|
|
|
|
#81 .Screen/sprite DEO |
|
|
|
|
|
|
|
|
|
#0000 ,draw-eye JSR |
|
|
|
|
#0000 ,draw-tail JSR |
|
|
|
|
( eye/tail ) |
|
|
|
|
#00 ,draw-eye JSR |
|
|
|
|
#00 ,draw-tail JSR |
|
|
|
|
|
|
|
|
|
RTN |
|
|
|
|
JMP2r |
|
|
|
|
|
|
|
|
|
@draw-eye ( quad* -- ) |
|
|
|
|
@on-mouse ( -> ) |
|
|
|
|
|
|
|
|
|
.cat/y LDZ2 #0008 ADD2 .Screen/y DEO2 |
|
|
|
|
.cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2 |
|
|
|
|
DUP2 ;eye ADD2 .Screen/addr DEO2 |
|
|
|
|
( draw ) #81 .Screen/sprite DEO |
|
|
|
|
STH2r .Screen/x DEO2 |
|
|
|
|
;eye #0010 ADD2 ADD2 .Screen/addr DEO2 |
|
|
|
|
( draw ) #81 .Screen/sprite DEO |
|
|
|
|
|
|
|
|
|
RTN |
|
|
|
|
.Mouse/x DEI2 .cat/x LDZ2 GTH2 #50 SFT |
|
|
|
|
.Mouse/y DEI2 .cat/y LDZ2 GTH2 #60 SFT |
|
|
|
|
ADD ,draw-eye JSR |
|
|
|
|
.cat/timer LDZ INC [ DUP ] .cat/timer STZ |
|
|
|
|
#04 SFT ,draw-tail JSR |
|
|
|
|
,draw-cursor JSR |
|
|
|
|
|
|
|
|
|
@draw-tail ( frame* -- ) |
|
|
|
|
BRK |
|
|
|
|
|
|
|
|
|
@draw-eye ( quad -- ) |
|
|
|
|
|
|
|
|
|
DUP ,&last LDR NEQ ,&changed JCN |
|
|
|
|
POP JMP2r &changed |
|
|
|
|
( only redraw on change ) |
|
|
|
|
DUP |
|
|
|
|
#00 SWP ;eye ADD2 .Screen/addr DEO2 |
|
|
|
|
.cat/y LDZ2 #0008 ADD2 .Screen/y DEO2 |
|
|
|
|
.cat/x LDZ2 #0008 SUB2 .Screen/x DEO2 |
|
|
|
|
#81 .Screen/sprite DEOk DEO |
|
|
|
|
,&last STR |
|
|
|
|
|
|
|
|
|
JMP2r |
|
|
|
|
&last $1 |
|
|
|
|
|
|
|
|
|
@draw-tail ( frame -- ) |
|
|
|
|
|
|
|
|
|
DUP ,&last LDR NEQ ,&changed JCN |
|
|
|
|
POP JMP2r &changed |
|
|
|
|
( only redraw on change ) |
|
|
|
|
DUP |
|
|
|
|
;frames ROT #00 SWP ADD2 LDA |
|
|
|
|
#00 SWP #40 SFT2 ;body/tail ADD2 |
|
|
|
|
.Screen/addr DEO2 |
|
|
|
|
.cat/x LDZ2 .Screen/x DEO2 |
|
|
|
|
.cat/y LDZ2 #0010 ADD2 .Screen/y DEO2 |
|
|
|
|
.cat/x LDZ2 STH2k #0008 SUB2 .Screen/x DEO2 |
|
|
|
|
;body .Screen/addr DEO2 |
|
|
|
|
( draw ) #81 .Screen/sprite DEO |
|
|
|
|
STH2r .Screen/x DEO2 |
|
|
|
|
#40 SFT2 ;body #0010 ADD2 ADD2 .Screen/addr DEO2 |
|
|
|
|
( draw ) #81 .Screen/sprite DEO |
|
|
|
|
#81 .Screen/sprite DEO |
|
|
|
|
,&last STR |
|
|
|
|
|
|
|
|
|
RTN |
|
|
|
|
JMP2r |
|
|
|
|
&last $1 |
|
|
|
|
|
|
|
|
|
@draw-cursor ( -- ) |
|
|
|
|
|
|
|
|
|
( clear last cursor ) |
|
|
|
|
;cursor .Screen/addr DEO2 |
|
|
|
|
( last cursor ) |
|
|
|
|
;cursor STH2k .Screen/addr DEO2 |
|
|
|
|
.pointer/x LDZ2 .Screen/x DEO2 |
|
|
|
|
.pointer/y LDZ2 .Screen/y DEO2 |
|
|
|
|
#40 .Screen/sprite DEO |
|
|
|
|
|
|
|
|
|
( record pointer positions ) |
|
|
|
|
( new cursor ) |
|
|
|
|
STH2r .Screen/addr DEO2 |
|
|
|
|
.Mouse/x DEI2 DUP2 .pointer/x STZ2 .Screen/x DEO2 |
|
|
|
|
.Mouse/y DEI2 DUP2 .pointer/y STZ2 .Screen/y DEO2 |
|
|
|
|
#41 .Mouse/state DEI #00 NEQ ADD .Screen/sprite DEO |
|
|
|
|
|
|
|
|
|
( colorize on state ) |
|
|
|
|
#41 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/sprite DEO |
|
|
|
|
|
|
|
|
|
RTN |
|
|
|
|
|
|
|
|
|
@draw-ground ( -- ) |
|
|
|
|
|
|
|
|
|
.cat/y LDZ2 #0018 ADD2 .Screen/y DEO2 |
|
|
|
|
.cat/x LDZ2 #0010 SUB2 .Screen/x DEO2 |
|
|
|
|
;ground .Screen/addr DEO2 |
|
|
|
|
|
|
|
|
|
#10 #00 |
|
|
|
|
&loop |
|
|
|
|
( draw ) #01 .Screen/sprite DEO |
|
|
|
|
( sety ) .Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2 |
|
|
|
|
( setx ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 |
|
|
|
|
( incr ) INC |
|
|
|
|
GTHk ,&loop JCN |
|
|
|
|
POP2 |
|
|
|
|
|
|
|
|
|
RTN |
|
|
|
|
JMP2r |
|
|
|
|
|
|
|
|
|
@cursor |
|
|
|
|
80c0 e0f0 f8e0 1000 |
|
|
|
|
|
|
|
|
|
@frames |
|
|
|
|
00 01 02 03 02 01 00 00 |
|
|
|
|
00 00 00 00 00 00 00 00 |
|
|
|
|
@ears |
|
|
|
|
081c 3e3e 7f7f ffff 081c 3e3e 7f7f fffc |
|
|
|
|
081c 3c3e 7e7e ffff 081c 3c3e 7e7e ff1f |
|
|
|
|
|
|
|
|
|
@eye |
|
|
|
|
ffff ffff ff7f 3f0f f7ef cfe7 f07c 3f0f |
|
|
|
|
ffff ffff fffe fcf0 87c3 c183 071e fcf0 |
|
|
|
|
@ -153,16 +151,15 @@ RTN
|
|
|
|
|
ffff ffff fffe fcf0 0783 c1c3 871e fcf0 |
|
|
|
|
ffff ffff ff7f 3f0f f0e0 c1e1 f07c 3f0f |
|
|
|
|
ffff ffff fffe fcf0 07f3 f9fb f71e fcf0 |
|
|
|
|
|
|
|
|
|
@body |
|
|
|
|
0707 0707 0302 0200 0107 0707 0300 0000 |
|
|
|
|
&tail |
|
|
|
|
e0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000 |
|
|
|
|
e0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000 |
|
|
|
|
e0f0 f0e0 e080 8000 c0f2 faf9 fef8 b000 |
|
|
|
|
e0f0 f0e0 e080 8000 c0f1 faf9 fef8 b000 |
|
|
|
|
0707 0707 0f08 1000 0307 0707 0f00 0000 |
|
|
|
|
e0e0 e0e0 e080 8000 f2f9 f9fe b884 8400 |
|
|
|
|
|
|
|
|
|
@ground |
|
|
|
|
bf00 5c02 0202 020c ef10 6f90 8080 8074 |
|
|
|
|
ff00 fe01 0100 0116 fd00 3c40 4040 4028 |
|
|
|
|
|