2021-04-30 19:08:24 +00:00
|
|
|
( polycat )
|
|
|
|
|
|
|
|
%RTN { JMP2r }
|
2021-05-01 15:58:42 +00:00
|
|
|
%+ { ADD2 } %- { SUB2 }
|
|
|
|
%* { MUL2 } %/ { DIV2 }
|
|
|
|
%> { GTH2 }
|
2021-04-30 19:08:24 +00:00
|
|
|
|
|
|
|
( 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 &color $1 ]
|
|
|
|
|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ]
|
|
|
|
|
|
|
|
( variables )
|
|
|
|
|
|
|
|
|0000
|
|
|
|
|
|
|
|
@cat [ &x $2 &y $2 &timer $1 ]
|
|
|
|
@pointer [ &x $2 &y $2 ]
|
|
|
|
|
|
|
|
( program )
|
|
|
|
|
|
|
|
|0100 ( -> )
|
|
|
|
|
|
|
|
( theme )
|
|
|
|
#0a3f .System/r DEO2
|
|
|
|
#05df .System/g DEO2
|
|
|
|
#0caf .System/b DEO2
|
|
|
|
|
|
|
|
( find center )
|
2021-05-01 15:58:42 +00:00
|
|
|
.Screen/width DEI2 #0002 / #0008 - .cat/x POK2
|
|
|
|
.Screen/height DEI2 #0004 / #0003 * #0018 - .cat/y POK2
|
2021-04-30 19:08:24 +00:00
|
|
|
|
|
|
|
( vectors )
|
|
|
|
;on-mouse .Mouse/vector DEO2
|
|
|
|
;on-frame .Screen/vector DEO2
|
|
|
|
|
|
|
|
;draw-polycat JSR2
|
|
|
|
;draw-ground JSR2
|
|
|
|
|
|
|
|
BRK
|
|
|
|
|
|
|
|
@on-mouse ( -> )
|
|
|
|
|
|
|
|
;draw-cursor JSR2
|
|
|
|
|
2021-05-01 15:58:42 +00:00
|
|
|
.Mouse/x DEI2 .cat/x PEK2 > #20 MUL
|
|
|
|
.Mouse/y DEI2 .cat/y PEK2 > #40 MUL
|
2021-05-01 16:13:14 +00:00
|
|
|
ADD #00 SWP ;draw-eye JSR2
|
2021-04-30 19:08:24 +00:00
|
|
|
|
|
|
|
BRK
|
|
|
|
|
|
|
|
@on-frame ( -> )
|
|
|
|
|
|
|
|
.cat/timer PEK #01 ADD [ DUP ] .cat/timer POK
|
2021-05-01 16:13:14 +00:00
|
|
|
DUP #00 NEQ ,&skip0 JNZ #0000 ;draw-tail JSR2 &skip0
|
|
|
|
DUP #10 NEQ ,&skip1 JNZ #0001 ;draw-tail JSR2 &skip1
|
|
|
|
DUP #20 NEQ ,&skip2 JNZ #0002 ;draw-tail JSR2 &skip2
|
|
|
|
DUP #30 NEQ ,&skip3 JNZ #0003 ;draw-tail JSR2 &skip3
|
|
|
|
DUP #40 NEQ ,&skip4 JNZ #0002 ;draw-tail JSR2 &skip4
|
|
|
|
DUP #50 NEQ ,&skip5 JNZ #0001 ;draw-tail JSR2 &skip5
|
2021-04-30 19:08:24 +00:00
|
|
|
POP
|
|
|
|
|
|
|
|
BRK
|
|
|
|
|
|
|
|
@draw-polycat ( -- )
|
|
|
|
|
|
|
|
( ears )
|
|
|
|
.cat/y PEK2 .Screen/y DEO2
|
2021-05-01 16:13:14 +00:00
|
|
|
.cat/x PEK2 DUP2 STH2 #0008 - .Screen/x DEO2
|
2021-04-30 19:08:24 +00:00
|
|
|
;ears .Screen/addr DEO2
|
|
|
|
#41 .Screen/color DEO
|
2021-05-01 16:13:14 +00:00
|
|
|
STH2r .Screen/x DEO2
|
2021-05-01 15:58:42 +00:00
|
|
|
;ears #0010 + .Screen/addr DEO2
|
2021-04-30 19:08:24 +00:00
|
|
|
#41 .Screen/color DEO
|
|
|
|
|
2021-05-01 16:13:14 +00:00
|
|
|
#0000 ,draw-eye JSR
|
|
|
|
#0000 ,draw-tail JSR
|
2021-04-30 19:08:24 +00:00
|
|
|
|
|
|
|
RTN
|
|
|
|
|
|
|
|
@draw-eye ( quad* -- )
|
|
|
|
|
2021-05-01 15:58:42 +00:00
|
|
|
.cat/y PEK2 #0008 + .Screen/y DEO2
|
2021-05-01 16:13:14 +00:00
|
|
|
.cat/x PEK2 DUP2 STH2 #0008 - .Screen/x DEO2
|
2021-05-01 15:58:42 +00:00
|
|
|
DUP2 ;eye + .Screen/addr DEO2
|
2021-05-01 16:13:14 +00:00
|
|
|
( draw ) #41 .Screen/color DEO
|
|
|
|
STH2r .Screen/x DEO2
|
2021-05-01 15:58:42 +00:00
|
|
|
;eye #0010 + + .Screen/addr DEO2
|
2021-05-01 16:13:14 +00:00
|
|
|
( draw ) #41 .Screen/color DEO
|
2021-04-30 19:08:24 +00:00
|
|
|
|
|
|
|
RTN
|
|
|
|
|
|
|
|
@draw-tail ( frame* -- )
|
|
|
|
|
2021-05-01 15:58:42 +00:00
|
|
|
.cat/y PEK2 #0010 + .Screen/y DEO2
|
2021-05-01 16:13:14 +00:00
|
|
|
.cat/x PEK2 DUP2 STH2 #0008 - .Screen/x DEO2
|
2021-04-30 19:08:24 +00:00
|
|
|
;body .Screen/addr DEO2
|
2021-05-01 16:13:14 +00:00
|
|
|
( draw ) #41 .Screen/color DEO
|
|
|
|
STH2r .Screen/x DEO2
|
2021-05-01 15:58:42 +00:00
|
|
|
#0010 * ;body #0010 + + .Screen/addr DEO2
|
2021-05-01 16:13:14 +00:00
|
|
|
( draw ) #41 .Screen/color DEO
|
2021-04-30 19:08:24 +00:00
|
|
|
|
|
|
|
RTN
|
|
|
|
|
|
|
|
@draw-cursor ( -- )
|
|
|
|
|
|
|
|
( clear last cursor )
|
|
|
|
#fff8 .Screen/addr DEO2
|
|
|
|
.pointer/x PEK2 .Screen/x DEO2
|
|
|
|
.pointer/y PEK2 .Screen/y DEO2
|
|
|
|
#30 .Screen/color DEO
|
2021-05-01 16:13:14 +00:00
|
|
|
|
2021-04-30 19:08:24 +00:00
|
|
|
( record pointer positions )
|
|
|
|
.Mouse/x DEI2 .pointer/x POK2
|
|
|
|
.Mouse/y DEI2 .pointer/y POK2
|
2021-05-01 16:13:14 +00:00
|
|
|
|
2021-04-30 19:08:24 +00:00
|
|
|
( draw new cursor )
|
|
|
|
;cursor .Screen/addr DEO2
|
|
|
|
.pointer/x PEK2 .Screen/x DEO2
|
|
|
|
.pointer/y PEK2 .Screen/y DEO2
|
2021-05-01 16:13:14 +00:00
|
|
|
|
2021-04-30 19:08:24 +00:00
|
|
|
( colorize on state )
|
|
|
|
#31 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/color DEO
|
|
|
|
|
|
|
|
RTN
|
|
|
|
|
|
|
|
@draw-ground ( -- )
|
|
|
|
|
2021-05-01 15:58:42 +00:00
|
|
|
.cat/y PEK2 #0018 + .Screen/y DEO2
|
|
|
|
.cat/x PEK2 #0010 - .Screen/x DEO2
|
2021-04-30 19:08:24 +00:00
|
|
|
;ground .Screen/addr DEO2
|
|
|
|
|
|
|
|
#00 #10
|
|
|
|
&loop
|
2021-05-01 16:13:14 +00:00
|
|
|
( draw ) #21 .Screen/color DEO
|
|
|
|
( sety ) .Screen/addr DEI2 #0008 + .Screen/addr DEO2
|
|
|
|
( setx ) .Screen/x DEI2 #0008 + .Screen/x DEO2
|
|
|
|
( incr ) SWP #01 ADD SWP
|
2021-04-30 19:08:24 +00:00
|
|
|
DUP2 LTH ,&loop JNZ
|
|
|
|
POP2
|
|
|
|
|
|
|
|
RTN
|
|
|
|
|
|
|
|
@cursor [
|
|
|
|
80c0 e0f0 f8e0 1000 ]
|
|
|
|
|
|
|
|
@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
|
|
|
|
ffff ffff ff7f 3f0f f0e1 c1e0 f07c 3f0f
|
|
|
|
ffff ffff fffe fcf0 f7fb f9f3 071e fcf0
|
|
|
|
ffff ffff ff7f 3f0f f0e7 cfef f77c 3f0f
|
|
|
|
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
|
|
|
|
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 [
|
2021-05-01 16:13:14 +00:00
|
|
|
bf00 5c02 0202 020c ef10 6f90 8080 8074
|
|
|
|
ff00 fe01 0100 0116 fd00 3c40 4040 4028 ]
|