Rewriting polycat

This commit is contained in:
neauoire 2021-04-30 12:08:24 -07:00
parent e8c70d954a
commit baa2f2450f
4 changed files with 193 additions and 20 deletions

View File

@ -34,7 +34,7 @@ else
fi
echo "Assembling.."
./bin/assembler projects/demos/piano.usm bin/boot.rom
./bin/assembler projects/demos/polycat.usm bin/boot.rom
echo "Running.."
if [ "${2}" = '--cli' ];

View File

@ -16,9 +16,6 @@
|10 @Console [ &pad $8 &char $1 &byte $1 &short $2 &string $2 ]
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ]
|30 @Audio0 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|40 @Audio1 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|50 @Audio2 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|60 @Audio3 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|70 @Midi [ &vector $2 &channel $1 &note $1 &velocity $1 ]
|80 @Controller [ &vector $2 &button $1 &key $1 ]
|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ]
@ -28,13 +25,12 @@
|0000
@last-note $1
@octave $1
@addr $1
@color $1
@last-note $1
@octave $1
@color $1
@pointer [ &x $2 &y $2 ]
@knob [ &x $2 &y $2 &value $1 ]
@center [ &x $2 &y $2 ]
@knob [ &x $2 &y $2 &value $1 ]
@adsr-view [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
@wave-view [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
@octave-view [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
@ -88,16 +84,6 @@
WAVEFORM .Audio0/addr DEO2
#0100 .Audio0/length DEO2
#011a .Audio1/adsr DEO2
#88 .Audio1/volume DEO
WAVEFORM #0100 ADD2 .Audio1/addr DEO2
#0100 .Audio1/length DEO2
#1118 .Audio2/adsr DEO2
#88 .Audio2/volume DEO
WAVEFORM #0200 ADD2 .Audio2/addr DEO2
#0100 .Audio2/length DEO2
( inital drawing )
;draw-octave JSR2
;draw-adsr JSR2

187
projects/demos/polycat.usm Normal file
View File

@ -0,0 +1,187 @@
( polycat )
%RTN { JMP2r }
%8+ { #0008 ADD2 }
%2/ { #0002 DIV2 }
%MOD { DUP2 DIV MUL SUB }
%INC { #01 ADD }
%TOS { #00 SWP }
( devices )
|00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 ]
|10 @Console [ &pad $8 &char $1 &byte $1 &short $2 &string $2 ]
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ]
|30 @Audio0 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|40 @Audio1 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|50 @Audio2 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|60 @Audio3 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|70 @Midi [ &vector $2 &channel $1 &note $1 &velocity $1 ]
|80 @Controller [ &vector $2 &button $1 &key $1 ]
|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ]
|a0 @File [ &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ]
|b0 @DateTime [ &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $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 )
.Screen/width DEI2 2/ #0008 SUB2 .cat/x POK2
.Screen/height DEI2 #0004 DIV2 #0003 MUL2 #0018 SUB2 .cat/y POK2
( place polycat )
( 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 PEK2 GTH2 #20 MUL
.Mouse/y DEI2 .cat/y PEK2 GTH2 #40 MUL
ADD #00 SWP ;draw-eye JSR2
BRK
@on-frame ( -> )
.cat/timer PEK #01 ADD [ DUP ] .cat/timer POK
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
POP
BRK
@draw-polycat ( -- )
( ears )
.cat/y PEK2 .Screen/y DEO2
.cat/x PEK2 #0008 SUB2 .Screen/x DEO2
;ears .Screen/addr DEO2
#41 .Screen/color DEO
.cat/x PEK2 .Screen/x DEO2
;ears #0010 ADD2 .Screen/addr DEO2
#41 .Screen/color DEO
#0000 ;draw-eye JSR2
#0000 ;draw-tail JSR2
RTN
@draw-eye ( quad* -- )
.cat/y PEK2 #0008 ADD2 .Screen/y DEO2
.cat/x PEK2 #0008 SUB2 .Screen/x DEO2
DUP2 ;eye ADD2 .Screen/addr DEO2
#41 .Screen/color DEO
.cat/x PEK2 .Screen/x DEO2
;eye #0010 ADD2 ADD2 .Screen/addr DEO2
#41 .Screen/color DEO
RTN
@draw-tail ( frame* -- )
.cat/y PEK2 #0010 ADD2 .Screen/y DEO2
.cat/x PEK2 #0008 SUB2 .Screen/x DEO2
;body .Screen/addr DEO2
#41 .Screen/color DEO
.cat/x PEK2 .Screen/x DEO2
#0010 MUL2 ;body #0010 ADD2 ADD2 .Screen/addr DEO2
#41 .Screen/color DEO
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
( record pointer positions )
.Mouse/x DEI2 .pointer/x POK2
.Mouse/y DEI2 .pointer/y POK2
( draw new cursor )
;cursor .Screen/addr DEO2
.pointer/x PEK2 .Screen/x DEO2
.pointer/y PEK2 .Screen/y DEO2
( colorize on state )
#31 [ .Mouse/state DEI #00 NEQ ] ADD .Screen/color DEO
RTN
@draw-ground ( -- )
.cat/y PEK2 #0018 ADD2 .Screen/y DEO2
.cat/x PEK2 #0010 SUB2 .Screen/x DEO2
;ground .Screen/addr DEO2
#00 #10
&loop
#21 .Screen/color DEO
.Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2
.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
SWP #01 ADD SWP
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 [
bf15 0210 0200 0200 ff55 aa54 a900 2000
fb55 aa45 2200 0400 ba40 a040 8880 0080 ]

View File

@ -48,4 +48,4 @@ int evaluxn(Uxn *u, Uint16 vec);
void mempoke16(Uint8 *m, Uint16 a, Uint16 b);
Uint16 mempeek16(Uint8 *m, Uint16 a);
Device *portuxn(Uxn *u, Uint8 id, char *name, void (*talkfn)(Device *, Uint8, Uint8));
Device *portuxn(Uxn *u, Uint8 id, char *name, void (*talkfn)(Device *, Uint8, Uint8));