@@ 10,38 10,39 @@
|0000
- @mode
- &dec $1
- &dot $1
- @cursor
- &x $2 &y $2
- &d &dx $1 &dy $1
- @input
- &num $2 &den $2
+ @mode &dec $1 &dot $1 &mute $1
+ @cursor &x $2 &y $2 &d &dx $1 &dy $1
+ @input &num $2 &den $2
@length $2
|0100
+ ( meta )
+ ;meta #06 DEO2
+
( theme )
#50f2 .System/r DEO2
#b0f9 .System/g DEO2
#a0f8 .System/b DEO2
- ;load-theme JSR2
+ load-theme
- ( playdate size 0190 x 00f0 )
+ ( frame size e0xf0 )
+ ( playdate size 0190x00f0 )
#00e0 .Screen/width DEO2
#00f0 .Screen/height DEO2
( setup synth )
- #0003 .Audio0/adsr DEO2
+ #1006 .Audio0/adsr DEO2
;tone .Audio0/addr DEO2
#0100 .Audio0/length DEO2
- #ff .Audio0/volume DEO ( TODO: turn ON )
+ #ff .Audio0/volume DEO ( TODO: toggle ON/OFF )
+ ( defaults )
#0001 .input/den STZ2
+ #0101 .mode STZ2
( initial draw )
- ;redraw JSR2
+ redraw
( vectors )
;on-console .Console/vector DEO2
@@ 51,43 52,41 @@
BRK
+@meta
+ ( version ) 00
+ ( name ) "CCCC 0a
+ ( details ) "A 20 "Desktop 20 "Calculator 0a
+ ( author ) "By 20 "Devine 20 "Lu 20 "Linvega 0a
+ ( date ) "Jan 20 "19, 20 "2023 0000
+
+ ( TODO: Add appicon )
+
(
@|vectors )
@on-console ( -> )
- .Console/read DEI ;listen JSR2
+ .Console/read DEI listen
BRK
@on-button ( -> )
- .Controller/button DEI2 #01 LIT "v NEQ2 ,&no-paste JCN
- ;snarf-paste JSR2
+ .Controller/button DEI2 #01 LIT "v NEQ2 ?&no-paste
+ snarf-paste
&no-paste
+ ( buttons )
.Controller/button DEI
- DUP #10 NEQ ,&no-u JCN
- .cursor/dx LDZ .cursor/dy LDZ #01 SUB ;set-sel JSR2
- &no-u
- DUP #20 NEQ ,&no-d JCN
- .cursor/dx LDZ .cursor/dy LDZ INC ;set-sel JSR2
- &no-d
- DUP #40 NEQ ,&no-l JCN
- .cursor/dx LDZ #01 SUB .cursor/dy LDZ ;set-sel JSR2
- &no-l
- DUP #80 NEQ ,&no-r JCN
- .cursor/dx LDZ INC .cursor/dy LDZ ;set-sel JSR2
- &no-r
- DUP #01 NEQ ,&no-a JCN
- ;press-sel JSR2
- &no-a
- DUP #02 NEQ ,&no-b JCN
- ;erase JSR2
- &no-b
+ DUP #10 NEQ ?&no-u ( up ) .cursor/dx LDZ .cursor/dy LDZ #01 SUB set-sel &no-u
+ DUP #20 NEQ ?&no-d ( down ) .cursor/dx LDZ .cursor/dy LDZ INC set-sel &no-d
+ DUP #40 NEQ ?&no-l ( left ) .cursor/dx LDZ #01 SUB .cursor/dy LDZ set-sel &no-l
+ DUP #80 NEQ ?&no-r ( right ) .cursor/dx LDZ INC .cursor/dy LDZ set-sel &no-r
+ DUP #01 NEQ ?&no-a ( A ) press-sel &no-a
+ DUP #02 NEQ ?&no-b ( B ) erase &no-b
POP
-
- .Controller/key DEI ;listen JSR2
+ ( keys )
+ .Controller/key DEI listen
BRK
@@ 99,14 98,14 @@ BRK
( find buttons )
;buttons/end ;buttons
&loop
- #0008 ADD2 LDAk #00 EQU ,&continue JCN
+ #0008 ADD2 LDAk #00 EQU ?&continue
( decr time )
DUP2 LDAk #01 SUB ROT ROT STA
( release button )
- LDAk ,&continue JCN
- DUP2 #0008 SUB2 #00 ;press-button/release JSR2
+ LDAk ?&continue
+ DUP2 #0008 SUB2 #00 press-button/release
&continue
- INC2 GTH2k ,&loop JCN
+ INC2 GTH2k ?&loop
POP2 POP2
BRK
@@ 114,40 113,49 @@ BRK
@on-mouse ( -> )
( clear last cursor )
- #40 ;draw-cursor JSR2
+ #40 draw-cursor
( draw new cursor )
.Mouse/x DEI2 .cursor/x STZ2
.Mouse/y DEI2 .cursor/y STZ2
;cursor-icn .Screen/addr DEO2
- #43 .Mouse/state DEI #00 NEQ DUP ADD SUB ;draw-cursor JSR2
+ #43 .Mouse/state DEI #00 NEQ DUP ADD SUB draw-cursor
- .Mouse/state DEI ,&on-mouse-touch JCN
+ .Mouse/state DEI ?on-mouse-touch
BRK
- &on-mouse-touch ( -> )
+
+@on-mouse-touch ( -> )
.Mouse/x DEI2 #0010 SUB2 #03 SFT2 NIP #03 DIV
.Mouse/y DEI2 #0078 SUB2 #03 SFT2 NIP
- #00 .Mouse/state DEO
+ ( release ) #00 .Mouse/state DEO
- OVR #07 GTH ,&skip JCN
- DUP #fd GTH ,on-touch-bitpad JCN
- DUP #0b GTH ,&skip JCN
- OVR #02 LTH ,on-touch-fncpad JCN
- OVR #06 LTH ,on-touch-numpad JCN
- OVR #08 LTH ,on-touch-modpad JCN
+ OVR #07 GTH ?&skip
+ DUP #fd GTH ?on-touch-bitpad
+ DUP #f1 EQU ?on-touch-top
+ DUP #f2 EQU ?on-touch-top
+ DUP #0b GTH ?&skip
+ OVR #02 LTH ?on-touch-fncpad
+ OVR #06 LTH ?on-touch-numpad
+ OVR #08 LTH ?on-touch-modpad
&skip
POP2
BRK
+@on-touch-top ( x y -- )
+
+ POP2 toggle-mute
+
+BRK
+
@on-touch-bitpad ( x y -- )
POP2
- .Mouse/x DEI2 #0033 GTH2 ,&continue JCN
+ .Mouse/x DEI2 #0033 GTH2 ?&continue
BRK
&continue
@@ 160,7 168,7 @@ BRK
( mask )
SFT2 .input LDZ2 EOR2
.input STZ2
- ;update-input JSR2
+ update-input
BRK
@@ 195,14 203,14 @@ BRK
@listen ( c -- )
STHk
- #00 EQU ,&skip JCN
+ #00 EQU ?&skip
;keys/end ;keys
&loop
- LDAk STHkr NEQ ,&continue JCN
- INC2k LDA2 JSR2 ,&end JMP
+ LDAk STHkr NEQ ?&continue
+ INC2k LDA2 JSR2 !&end
&continue
- INC2 INC2 INC2 GTH2k ,&loop JCN
+ INC2 INC2 INC2 GTH2k ?&loop
&end
POP2 POP2
&skip
@@ 212,13 220,12 @@ JMP2r
@eval ( -- )
- ;buttons/push ;press-button JSR2
- .input LDZ2 #0001 ;push JSR2
+ ;buttons/push press-button
+ .input LDZ2 #0001 push
#0000 .input STZ2
- ;update-input JSR2
- ;draw-display ( .. )
+ update-input
-JMP2
+!draw-display
@append ( val -- )
@@ 226,77 233,78 @@ JMP2
.input LDZ2
#00 #0a10 .mode/dec LDZ [ JMP SWP POP ] MUL2 ADD2
.input STZ2
- ;draw-input ( .. )
-JMP2
+!draw-input
@erase ( -- )
( clamp )
- .input LDZ2 ORA ,&has-input JCN
- ;buttons/pop ;press-button JSR2
- .length LDZ2 ORA #01 JCN JMP2r
- ;pop JSR2 POP2 POP2
- ;draw-display JMP2
+ .input LDZ2 ORA ?&has-input
+ ;buttons/pop press-button
+ .length LDZ2 ORA #01 [ JCN JMP2r ]
+ pop POP2 .input/num STZ2
+ update-input
+ !draw-display
&has-input
.input LDZ2
#00 #0a10 .mode/dec LDZ [ JMP SWP POP ] DIV2
.input STZ2
- ;update-input ( .. )
-JMP2
+!update-input
@clear ( -- )
- ;buttons/clr ;press-button JSR2
+ ;buttons/clr press-button
#0000 .length STZ2
#0000 .input STZ2
- ;draw-display JSR2
- ;update-input ( .. )
+ draw-display
-JMP2
+!update-input
+
+@toggle-mute ( -- )
-@tog-mode ( -- )
+ .mode/mute LDZk #00 EQU SWP STZ
- ;buttons/mode ;press-button JSR2
+!draw-mute
+
+@toggle-mode ( -- )
+
+ ;buttons/mode press-button
.mode/dec LDZk INC #01 AND SWP STZ
.mode/dot LDZk .mode/dec LDZ #00 EQU ADD #01 AND SWP STZ
- ;draw-display JSR2
- ;draw-mode ( .. )
+ draw-display
+ update-input
-JMP2
+!draw-mode
@set-dec ( -- )
#01 .mode/dec STZ
- ;draw-display JSR2
- ;draw-mode ( .. )
+ draw-display
-JMP2
+!draw-mode
@set-hex ( -- )
#00 .mode/dec STZ
- ;draw-display JSR2
- ;draw-mode ( .. )
+ draw-display
-JMP2
+!draw-mode
@set-sel ( x y -- )
( erase last sel )
- #00 ;draw-sel JSR2
- #40 ;draw-cursor JSR2
+ #00 draw-sel
+ #40 draw-cursor
( store new sel )
#03 AND .cursor/dy STZ
#07 AND .cursor/dx STZ
- ( draw new sel )
- #81 ;draw-sel ( .. )
+ #81
-JMP2
+!draw-sel
@press-sel ( -- )
@@ 305,27 313,32 @@ JMP2
JMP2
-@gcd ( num* den* -- d* ) ORAk ,&ok JCN POP2 JMP2r &ok SWP2 OVR2 ( MOD2 ) [ DIV2k MUL2 SUB2 ] ,gcd JMP
+@gcd ( num* den* -- d* )
+
+ ORAk ?&ok POP2 JMP2r &ok SWP2 OVR2
+ ( MOD2 ) [ DIV2k MUL2 SUB2 ]
+
+!gcd
@push ( num* den* -- )
- OVR2 #0000 EQU2 ,&invalid JCN
- ORAk #00 EQU ,&invalid JCN
+ OVR2 #0000 EQU2 ?&invalid
+ ORAk #00 EQU ?&invalid
( reduce )
- OVR2 OVR2 ,gcd JSR STH2k DIV2 SWP2 STH2r DIV2
+ OVR2 OVR2 gcd STH2k DIV2 SWP2 STH2r DIV2
( store )
.length LDZ2 #20 SFT2 ;memory ADD2 STH2k STA2
STH2r INC2 INC2 STA2
- .length LDZ2k INC2 ROT STZ2
+ ( inc ) .length LDZ2k INC2 ROT STZ2
JMP2r
&invalid POP2 POP2 JMP2r
@pop ( -- num* den* )
- .length LDZ2 #01 SUB #20 SFT2 ;memory ADD2
+ ( dec ) .length LDZ2k #0001 SUB2 ROT STZ2
+ .length LDZ2 #20 SFT2 ;memory ADD2
LDA2k SWP2 INC2 INC2 LDA2
- .length LDZ2k #0001 SUB2 ROT STZ2
JMP2r
@@ 334,234 347,188 @@ JMP2r
@dup ( -- )
- ;buttons/dup ;press-button JSR2
- ;eval JSR2
- .length LDZ2 ORA #01 JCN JMP2r
+ ;buttons/dup press-button eval
+ .length LDZ2 #0001 LTH2 ?&skip
- ;pop JSR2 OVR2 OVR2 ;push JSR2 ;push JSR2
- ;draw-display ( .. )
+ pop OVR2 OVR2 push push
+ draw-display
+ &skip
-JMP2
+JMP2r
@swp ( -- )
- ;buttons/swp ;press-button JSR2
- ;eval JSR2
- .length LDZ2 #0002 LTH2 ,&skip JCN
+ ;buttons/swp press-button eval
+ .length LDZ2 #0002 LTH2 ?&skip
- ;pop JSR2 ;pop JSR2 ROT2 STH2 ROT2 STH2r ;push JSR2 ;push JSR2
- ;draw-display JSR2
+ pop pop ROT2 STH2 ROT2 STH2r push push
+ draw-display
&skip
JMP2r
@vid ( -- )
- ;buttons/vid ;press-button JSR2
- ;eval JSR2
- .length LDZ2 ORA #01 JCN JMP2r
- .length LDZ2 #20 SFT2 #0002 SUB2 ;memory ADD2 LDA2 #0001 EQU2 ,&skip JCN
+ ;buttons/vid press-button eval
+ .length LDZ2 #0001 LTH2 ?&skip
- ;pop JSR2 SWP2 #0001 ;push JSR2
- #0001 ;push JSR2
- ;draw-display JSR2
+ .length LDZ2 #20 SFT2 #0002 SUB2 ;memory ADD2 LDA2 #0001 EQU2 ?&skip
+ pop SWP2 #0001 push
+ #0001 push
+ draw-display
&skip
JMP2r
@inv ( -- )
- ;buttons/inv ;press-button JSR2
- ;eval JSR2
- .length LDZ2 ORA #01 JCN JMP2r
+ ;buttons/inv press-button eval
+ .length LDZ2 #0001 LTH2 ?&skip
- ;pop JSR2 SWP2 ;push JSR2
- ;draw-display ( .. )
+ pop SWP2 push
+ draw-display
+ &skip
-JMP2
+JMP2r
-@add ( -- )
+@do-add ( -- )
- ;buttons/add ;press-button JSR2
- ;eval JSR2
- .length LDZ2 #0002 LTH2 ,&skip JCN
+ ;buttons/add press-button eval
+ .length LDZ2 #0002 LTH2 ?&skip
- ;pop JSR2 ,&bd STR2 ,&bn STR2
- ;pop JSR2 ,&ad STR2 ,&an STR2
+ pop ,&bd STR2 ,&bn STR2
+ pop ,&ad STR2 ,&an STR2
[ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2
[ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2 ADD2
- ,&ad LDR2 ,&bd LDR2 MUL2 ;push JSR2
- ;draw-display JSR2
+ ,&ad LDR2 ,&bd LDR2 MUL2 push
+ draw-display
&skip
JMP2r
-@sub ( -- )
+@do-sub ( -- )
- ;buttons/sub ;press-button JSR2
- ;eval JSR2
- .length LDZ2 #0002 LTH2 ,&skip JCN
+ ;buttons/sub press-button eval
+ .length LDZ2 #0002 LTH2 ?&skip
- ;pop JSR2 ,&bd STR2 ,&bn STR2
- ;pop JSR2 ,&ad STR2 ,&an STR2
+ pop ,&bd STR2 ,&bn STR2
+ pop ,&ad STR2 ,&an STR2
[ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2
[ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2 SUB2
- ,&ad LDR2 ,&bd LDR2 MUL2 ;push JSR2
- ;draw-display JSR2
+ ,&ad LDR2 ,&bd LDR2 MUL2 push
+ draw-display
&skip
JMP2r
-@mul ( -- )
+@do-mul ( -- )
- ;buttons/mul ;press-button JSR2
- ;eval JSR2
- .length LDZ2 #0002 LTH2 ,&skip JCN
+ ;buttons/mul press-button eval
+ .length LDZ2 #0002 LTH2 ?&skip
- ;pop JSR2 ,&bd STR2 ,&bn STR2
- ;pop JSR2 ,&ad STR2 ,&an STR2
+ pop ,&bd STR2 ,&bn STR2
+ pop ,&ad STR2 ,&an STR2
[ LIT2 &an $2 ] [ LIT2 &bn $2 ] MUL2
[ LIT2 &ad $2 ] [ LIT2 &bd $2 ] MUL2
- ;push JSR2
- ;draw-display JSR2
+ push
+ draw-display
&skip
JMP2r
-@div ( -- )
+@do-div ( -- )
- ;buttons/div ;press-button JSR2
- ;eval JSR2
- .length LDZ2 #0002 LTH2 ,&skip JCN
+ ;buttons/div press-button eval
+ .length LDZ2 #0002 LTH2 ?&skip
- ;pop JSR2 ,&bd STR2 ,&bn STR2
- ;pop JSR2 ,&ad STR2 ,&an STR2
+ pop ,&bd STR2 ,&bn STR2
+ pop ,&ad STR2 ,&an STR2
[ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2
[ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2
- ;push JSR2
- ;draw-display JSR2
+ push
+ draw-display
&skip
JMP2r
-@and ( -- )
+@do-and ( -- )
- ;buttons/and ;press-button JSR2
- ;eval JSR2
- .length LDZ2 #0002 LTH2 ,&skip JCN
+ ;buttons/and press-button eval
+ .length LDZ2 #0002 LTH2 ?&skip
- ;pop JSR2 ,&bd STR2 ,&bn STR2
- ;pop JSR2 ,&ad STR2 ,&an STR2
+ pop ,&bd STR2 ,&bn STR2
+ pop ,&ad STR2 ,&an STR2
[ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2
[ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2 AND2
- ,&ad LDR2 ,&bd LDR2 MUL2 ;push JSR2
- ;draw-display JSR2
+ ,&ad LDR2 ,&bd LDR2 MUL2 push
+ draw-display
&skip
JMP2r
-@ora ( -- )
+@do-ora ( -- )
- ;buttons/ora ;press-button JSR2
- ;eval JSR2
- .length LDZ2 #0002 LTH2 ,&skip JCN
+ ;buttons/ora press-button eval
+ .length LDZ2 #0002 LTH2 ?&skip
- ;pop JSR2 ,&bd STR2 ,&bn STR2
- ;pop JSR2 ,&ad STR2 ,&an STR2
+ pop ,&bd STR2 ,&bn STR2
+ pop ,&ad STR2 ,&an STR2
[ LIT2 &an $2 ] [ LIT2 &bd $2 ] MUL2
[ LIT2 &ad $2 ] [ LIT2 &bn $2 ] MUL2 ORA2
- ,&ad LDR2 ,&bd LDR2 MUL2 ;push JSR2
- ;draw-display JSR2
+ ,&ad LDR2 ,&bd LDR2 MUL2 push
+ draw-display
&skip
JMP2r
-@sfl ( -- )
+@do-sfl ( -- )
- ;buttons/sfl ;press-button JSR2
- ;eval JSR2
- .length LDZ2 ORA #01 JCN JMP2r
+ ;buttons/sfl press-button eval
+ .length LDZ2 #0001 LTH2 ?&skip
- ;pop JSR2 SWP2 DUP2 ADD2 SWP2 ;push JSR2
- ;draw-display ( .. )
+ pop SWP2 DUP2 ADD2 SWP2 push
+ draw-display
+ &skip
-JMP2
+JMP2r
-@sfr ( -- )
+@do-sfr ( -- )
- ;buttons/sfr ;press-button JSR2
- ;eval JSR2
- .length LDZ2 ORA #01 JCN JMP2r
+ ;buttons/sfr press-button eval
+ .length LDZ2 #0001 LTH2 ?&skip
- ;pop JSR2 SWP2 #01 SFT2 SWP2 ;push JSR2
- ;draw-display ( .. )
+ pop SWP2 #01 SFT2 SWP2 push
+ draw-display
+ &skip
-JMP2
+JMP2r
-@put0 ( -- )
- ;buttons/0 ;press-button JSR2
- #0b ;play-note JSR2
- #00 ;append JMP2
-@put1 ( -- )
- ;buttons/1 ;press-button JSR2
- #0c ;play-note JSR2
- #01 ;append JMP2
-@put2 ( -- )
- ;buttons/2 ;press-button JSR2
- #0e ;play-note JSR2
- #02 ;append JMP2
-@put3 ( -- )
- ;buttons/3 ;press-button JSR2
- #10 ;play-note JSR2
- #03 ;append JMP2
-@put4 ( -- )
- ;buttons/4 ;press-button JSR2
- #11 ;play-note JSR2
- #04 ;append JMP2
-@put5 ( -- )
- ;buttons/5 ;press-button JSR2
- #13 ;play-note JSR2
- #05 ;append JMP2
-@put6 ( -- )
- ;buttons/6 ;press-button JSR2
- #15 ;play-note JSR2
- #06 ;append JMP2
-@put7 ( -- )
- ;buttons/7 ;press-button JSR2
- #17 ;play-note JSR2
- #07 ;append JMP2
-@put8 ( -- )
- ;buttons/8 ;press-button JSR2
- #18 ;play-note JSR2
- #08 ;append JMP2
-@put9 ( -- )
- ;buttons/9 ;press-button JSR2
- #1a ;play-note JSR2
- #09 ;append JMP2
-@puta ( -- )
- ;buttons/a ;press-button JSR2
- #09 ;play-note JSR2
- #0a ;append JMP2
-@putb ( -- )
- ;buttons/b ;press-button JSR2
- #07 ;play-note JSR2
- #0b ;append JMP2
-@putc ( -- )
- ;buttons/c ;press-button JSR2
- #21 ;play-note JSR2
- #0c ;append JMP2
-@putd ( -- )
- ;buttons/d ;press-button JSR2
- #1f ;play-note JSR2
- #0d ;append JMP2
-@pute ( -- )
- ;buttons/e ;press-button JSR2
- #1d ;play-note JSR2
- #0e ;append JMP2
-@putf ( -- )
- ;buttons/f ;press-button JSR2
- #1c ;play-note JSR2
- #0f ;append JMP2
+@put
+ &0 ( -- ) #000b ;buttons/0 !press-number
+ &1 ( -- ) #010c ;buttons/1 !press-number
+ &2 ( -- ) #020e ;buttons/2 !press-number
+ &3 ( -- ) #0310 ;buttons/3 !press-number
+ &4 ( -- ) #0411 ;buttons/4 !press-number
+ &5 ( -- ) #0513 ;buttons/5 !press-number
+ &6 ( -- ) #0615 ;buttons/6 !press-number
+ &7 ( -- ) #0717 ;buttons/7 !press-number
+ &8 ( -- ) #0818 ;buttons/8 !press-number
+ &9 ( -- ) #091a ;buttons/9 !press-number
+ &a ( -- ) #0a09 ;buttons/a !press-number
+ &b ( -- ) #0b07 ;buttons/b !press-number
+ &c ( -- ) #0c21 ;buttons/c !press-number
+ &d ( -- ) #0d1f ;buttons/d !press-number
+ &e ( -- ) #0e1d ;buttons/e !press-number
+ &f ( -- ) #0f1c ;buttons/f !press-number
+
+@press-number ( value note button* -- )
+
+ press-button play-note
+ ( ignore hex keys in dec mode )
+ DUP #09 GTH .mode/dec LDZ AND ?&skip
+
+!append
+ &skip POP JMP2r
@press-button ( button* -- )
@@ 579,7 546,10 @@ JMP2
@play-note ( pitch -- )
- #24 ADD .Audio0/pitch DEO
+ .mode/mute LDZ ?&skip
+ DUP #18 ADD .Audio0/pitch DEO
+ &skip
+ POP
JMP2r
@@ 588,20 558,23 @@ JMP2r
@redraw ( -- )
- #04 ;buttons/ctl ;draw-pad JSR2
- #08 ;buttons/mod ;draw-pad JSR2
- #04 ;buttons/wst ;draw-pad JSR2
- #10 ;buttons/num ;draw-pad JSR2
- ;draw-mode JSR2
- ;draw-display JSR2
- ;update-input JSR2
+ #04 ;buttons/ctl draw-pad
+ #08 ;buttons/mod draw-pad
+ #04 ;buttons/wst draw-pad
+ #10 ;buttons/num draw-pad
+ draw-mode
+ draw-display
+ update-input
( frame )
#0000 DUP2
#1a
.Screen/height DEI2 #03 SFT2 NIP #02 SUB
;outline-frame
- ;draw-frame JSR2
+ draw-frame
+
+ ( mute )
+ draw-mute
( decal )
#16 .Screen/auto DEO
@@ 629,7 602,7 @@ JMP2r
#1600
&loop
#01 .Screen/sprite DEO
- INC GTHk ,&loop JCN
+ INC GTHk ?&loop
POP2
@draw-input ( -- )
@@ 638,10 611,9 @@ JMP2r
#0018 .Screen/x DEO2
#0050 .Screen/y DEO2
#04 ;draw-num/color STA
- ;input ;draw-fraction JSR2
+ ;input draw-fraction
( draw binary )
-
#05 .Screen/auto DEO
#0038 .Screen/x DEO2
#006c .Screen/y DEO2
@@ 651,33 623,33 @@ JMP2r
#0f OVR SUB .input LDZ2 ROT SFT2
#0001 AND2 #30 SFT2 ;binary-icns ADD2 .Screen/addr DEO2
#01 .Screen/sprite DEO
- INCk #03 AND ,&no-space JCN
- .Screen/x DEI2k #0008 ADD2 ROT DEO2
+ INCk #03 AND ?&no-space
+ #00 .Screen/sprite DEO
&no-space
- INC GTHk ,&loop JCN
+ INC GTHk ?&loop
POP2
JMP2r
@draw-display ( -- )
- #0010 DUP2 #1609 ;display-frame ;draw-frame JSR2
+ #0010 DUP2 #1609 ;display-frame draw-frame
#0018 .Screen/x DEO2
#0018 .Screen/y DEO2
- #1606 ;fill-icn #01 ;draw-patt JSR2
+ #1606 ;fill-icn #01 draw-patt
#0018 .Screen/x DEO2
- #16 ;draw-dotted JSR2
+ #16 draw-dotted
#06 ;draw-num/color STA
( memory )
#0300
&loop
- #00 OVR INC .length LDZ2 GTH2 ,&end JCN
+ #00 OVR INC .length LDZ2 GTH2 ?&end
#0018 .Screen/x DEO2
#00 OVR #40 SFT2 #0038 SWP2 SUB2 .Screen/y DEO2
- #00 OVR INC .length LDZ2 SWP2 SUB2 #20 SFT2 ;memory ADD2 ;draw-fraction JSR2
- INC GTHk ,&loop JCN
+ #00 OVR INC .length LDZ2 SWP2 SUB2 #20 SFT2 ;memory ADD2 draw-fraction
+ INC GTHk ?&loop
&end
POP2
@@ 708,10 680,10 @@ JMP2r
STHkr #00
&wloop
[ LIT &color 0f ] .Screen/sprite DEO
- INC GTHk ,&wloop JCN
+ INC GTHk ?&wloop
POP2
.Screen/y DEI2k #0008 ADD2 ROT DEO2
- INC GTHk ,&hloop JCN
+ INC GTHk ?&hloop
POP2
POPr
,&x LDR2 .Screen/x DEO2
@@ 725,12 697,22 @@ JMP2r
#00
&loop
#00 OVR #0009 MUL2 STH2kr ADD2 #00 ;press-button/release JSR2
- INC GTHk ,&loop JCN
+ INC GTHk ?&loop
POP2
POP2r
JMP2r
+@draw-mute ( -- )
+
+ #00 .Screen/auto DEO
+ .Screen/width DEI2 #0020 SUB2 .Screen/x DEO2
+ #0003 .Screen/y DEO2
+ ;mute-chr #00 .mode/mute LDZ #40 SFT2 ADD2 .Screen/addr DEO2
+ #81 .Screen/sprite DEO
+
+JMP2r
+
@draw-button-clr ( icon* state -- )
#09 ,draw-button-small/color STR
@@ 769,7 751,7 @@ JMP2r
&loop
STH2kr #0030 ADD2 .Screen/addr DEO2
#81 .Screen/sprite DEO
- INC GTHk ,&loop JCN
+ INC GTHk ?&loop
POP2
STH2r #0060 ADD2 .Screen/addr DEO2
#81 .Screen/sprite DEO
@@ 810,46 792,42 @@ JMP2r
#01 .Screen/auto DEO
LDA2k SWP2 INC2 INC2 LDA2
- DUP2 #0001 EQU2 ,&whole JCN
- GTH2k ,&mixed JCN
+ DUP2 #0001 EQU2 ?&whole
+ GTH2k ?&mixed
&proper ( num* den* -- )
- .mode/dot LDZ ,&proper-dot JCN
+ .mode/dot LDZ ?&proper-dot
SWP2 ,draw-value JSR
- ;draw-slash JSR2
- ,draw-value ( .. )
+ draw-slash
-JMP
+!draw-value
&proper-dot ( num* den* -- )
- #00 ;draw-num JSR2
- ;draw-dot JSR2
+ #00 draw-num
+ draw-dot
SWP2 #03e8 #1000 .mode/dec LDZ [ JMP SWP2 POP2 ] MUL2 SWP2 DIV2
- ,draw-value ( .. )
-JMP
+!draw-value
&mixed ( num* den* -- )
- .mode/dot LDZ ,&mixed-dot JCN
+ .mode/dot LDZ ?&mixed-dot
DIV2k ,draw-value JSR
- ;draw-quote JSR2
+ draw-quote
STH2k ( MOD2 ) [ DIV2k MUL2 SUB2 ] STH2r
- ,&proper ( .. )
-JMP
+!&proper
&mixed-dot ( num* den* -- )
DIV2k ,draw-value JSR
- ;draw-dot JSR2
+ draw-dot
STH2k ( MOD2 ) [ DIV2k MUL2 SUB2 ] STH2r
SWP2 #03e8 #1000 .mode/dec LDZ [ JMP SWP2 POP2 ] MUL2 SWP2 DIV2
- ,draw-value ( .. )
-JMP
+!draw-value
&whole ( num* den* -- )
@@ 857,11 835,11 @@ JMP
@draw-value ( short* -- )
- ORAk ,&no-null JCN
- POP2 #00 ;draw-num JMP2
+ ORAk ?&no-null
+ POP2 #00 !draw-num
&no-null
- .mode/dec LDZ ,draw-dec JCN
+ .mode/dec LDZ ?draw-dec
@draw-hex ( short* -- )
@@ 873,8 851,8 @@ JMP
JMP2r
&parse
- OVR #04 SFT DUP [ LIT &z $1 ] EQU ,&skip JCN
- #ff ,&z STR DUP ;draw-num JSR2
+ OVR #04 SFT DUP [ LIT &z $1 ] EQU ?&skip
+ #ff ,&z STR DUP draw-num
&skip
POP #40 SFT2
JMP2r
@@ 888,8 866,8 @@ JMP2r
#000a ,&parse JSR
NIP
&emit
- DUP [ LIT &z $1 ] EQU ,&skip JCN
- #ff ,&z STR DUP ;draw-num JSR2
+ DUP [ LIT &z $1 ] EQU ?&skip
+ #ff ,&z STR DUP draw-num
&skip
POP
@@ 916,11 894,11 @@ JMP2r
@draw-dot ( -- )
- ;dot-icns ,draw-type JMP
+ ;dot-icns !draw-type
@draw-quote ( -- )
- ;quote-icns ,draw-type JMP
+ ;quote-icns !draw-type
@draw-slash ( -- )
@@ 942,7 920,7 @@ JMP2r
#00
&loop
#04 .Screen/sprite DEO
- INC GTHk ,&loop JCN
+ INC GTHk ?&loop
POP2
JMP2r
@@ 981,7 959,7 @@ JMP2r
#00
&repeat-loop
#81 .Screen/sprite DEO
- INC GTHk ,&repeat-loop JCN
+ INC GTHk ?&repeat-loop
POP2
JMP2r
@@ 1005,12 983,13 @@ JMP2r
JMP2r
-( print )
+(
+@|printing )
@print ( -- )
- .length LDZ2 ORA ,&no-empty JCN
- ;empty-txt ;print-str JSR2 #0a18 DEO
+ .length LDZ2 ORA ?&no-empty
+ ;empty-txt print-str #0a18 DEO
JMP2r
&no-empty
@@ 1019,37 998,35 @@ JMP2r
@print-fraction ( addr* -- )
LDA2k SWP2 INC2 INC2 LDA2
- DUP2 #0001 EQU2 ,&whole JCN
- GTH2k ,&mixed JCN
+ DUP2 #0001 EQU2 ?&whole
+ GTH2k ?&mixed
&proper ( num* den* -- )
SWP2 ,print-value JSR
LIT "/ #18 DEO
- ,print-value JSR #0a18 DEO
+ print-value #0a18 DEO
JMP2r
&mixed ( num* den* -- )
- DIV2k ,print-value JSR STH2k ( MOD2 ) [ DIV2k MUL2 SUB2 ] STH2r
- LIT "' #18 DEO ,&proper ( .. )
-
-JMP
+ DIV2k print-value STH2k ( MOD2 ) [ DIV2k MUL2 SUB2 ] STH2r
+ LIT "' #18 DEO !&proper ( .. )
&whole ( num* den* -- )
- POP2 ,print-value JSR #0a18 DEO
+ POP2 print-value #0a18 DEO
JMP2r
@print-value ( short* -- )
- ORAk ,&no-null JCN
+ ORAk ?&no-null
LIT "0 #18 DEO JMP2r
&no-null
- .mode/dec LDZ ,print-dec JCN
+ .mode/dec LDZ ?print-dec
@print-hex ( short* -- )
@@ 1061,8 1038,8 @@ JMP2r
JMP2r
&parse
- OVR #04 SFT DUP [ LIT &z $1 ] EQU ,&skip JCN
- #ff ,&z STR DUP ;hex-char JSR2 #18 DEO
+ OVR #04 SFT DUP [ LIT &z $1 ] EQU ?&skip
+ #ff ,&z STR DUP hex-char #18 DEO
&skip
POP #40 SFT2
JMP2r
@@ 1076,7 1053,7 @@ JMP2r
#000a ,&parse JSR
NIP
&emit
- DUP [ LIT &z $1 ] EQU ,&skip JCN
+ DUP [ LIT &z $1 ] EQU ?&skip
#ff ,&z STR DUP #30 ADD #18 DEO
&skip
POP
@@ 1088,9 1065,9 @@ JMP2r
@print-str ( str* -- )
- &while
+ &w
LDAk #18 DEO
- INC2 LDAk ,&while JCN
+ INC2 LDAk ?&w
POP2
JMP2r
@@ 1104,9 1081,9 @@ JMP2r
#0001 .File/length DEO2
&stream
;&buf .File/read DEO2
- .File/success DEI2 #0000 EQU2 ,&end JCN
- [ LIT &buf 20 ] ;listen JSR2
- ,&stream JMP
+ .File/success DEI2 #0000 EQU2 ?&end
+ [ LIT &buf 20 ] listen
+ !&stream
&end
JMP2r
@@ 1121,7 1098,7 @@ JMP2r
;&r .File/read DEO2
;&g .File/read DEO2
;&b .File/read DEO2
- .File/success DEI2 ORA #01 JCN JMP2r
+ .File/success DEI2 ORA #01 [ JCN JMP2r ]
LIT2 &r $2 .System/r DEO2
LIT2 &g $2 .System/g DEO2
LIT2 &b $2 .System/b DEO2
@@ 1129,155 1106,150 @@ JMP2r
JMP2r
&path ".theme $1
-(
-@|stdlib )
-
@empty-txt "Empty 20 "Stack $1
(
@|tables )
@fncpad
- :clear :swp :dup :erase :erase :erase
- :tog-mode :inv :vid :eval :eval :eval
+ =clear =swp =dup =erase =erase =erase
+ =toggle-mode =inv =vid =eval =eval =eval
@numpad
- :put7 :put8 :put9 :putf
- :put4 :put5 :put6 :pute
- :put1 :put2 :put3 :putd
- :put0 :puta :putb :putc
+ =put/7 =put/8 =put/9 =put/f
+ =put/4 =put/5 =put/6 =put/e
+ =put/1 =put/2 =put/3 =put/d
+ =put/0 =put/a =put/b =put/c
@modpad
- :div :mul :sub :add
- :and :ora :sfl :sfr
+ =do-div =do-mul =do-sub =do-add
+ =do-and =do-ora =do-sfl =do-sfr
@keys
- "~ :clear 09 :tog-mode "? :inv "@ :vid
- "+ :add "- :sub "* :mul "/ :div
- "& :and "| :ora "< :sfl "> :sfr
- 20 :eval 08 :erase "% :swp "" :dup
- "7 :put7 "8 :put8 "9 :put9 "f :putf
- "4 :put4 "5 :put5 "6 :put6 "e :pute
- "1 :put1 "2 :put2 "3 :put3 "d :putd
- "0 :put0 "a :puta "b :putb "c :putc
- 0d :eval
- "! :erase
- ". :print
- 1b :clear
- "# :set-hex
- "$ :set-dec
+ "~ =clear 09 =toggle-mode "? =inv "@ =vid
+ "+ =do-add "- =do-sub "* =do-mul "/ =do-div
+ "& =do-and "| =do-ora "< =do-sfl "> =do-sfr
+ 20 =eval 08 =erase "% =swp "" =dup
+ "7 =put/7 "8 =put/8 "9 =put/9 "f =put/f
+ "4 =put/4 "5 =put/5 "6 =put/6 "e =put/e
+ "1 =put/1 "2 =put/2 "3 =put/3 "d =put/d
+ "0 =put/0 "a =put/a "b =put/b "c =put/c
+ 0d =eval
+ "! =erase
+ ". =print
+ 1b =clear
+ "# =set-hex
+ "$ =set-dec
&end
@layout
- :buttons/clr :clear
- :buttons/mode :tog-mode
- :buttons/7 :put7
- :buttons/8 :put8
- :buttons/9 :put9
- :buttons/f :putf
- :buttons/div :div
- :buttons/and :and
- :buttons/swp :swp
- :buttons/inv :inv
- :buttons/4 :put4
- :buttons/5 :put5
- :buttons/6 :put6
- :buttons/e :pute
- :buttons/mul :mul
- :buttons/ora :ora
- :buttons/dup :dup
- :buttons/vid :vid
- :buttons/1 :put1
- :buttons/2 :put2
- :buttons/3 :put3
- :buttons/d :putd
- :buttons/sub :sub
- :buttons/sfl :sfl
- :buttons/pop :erase
- :buttons/push :eval
- :buttons/0 :put0
- :buttons/a :puta
- :buttons/b :putb
- :buttons/c :putb
- :buttons/add :add
- :buttons/sfr :sfr
+ =buttons/clr =clear
+ =buttons/mode =toggle-mode
+ =buttons/7 =put/7
+ =buttons/8 =put/8
+ =buttons/9 =put/9
+ =buttons/f =put/f
+ =buttons/div =do-div
+ =buttons/and =do-and
+ =buttons/swp =swp
+ =buttons/inv =inv
+ =buttons/4 =put/4
+ =buttons/5 =put/5
+ =buttons/6 =put/6
+ =buttons/e =put/e
+ =buttons/mul =do-mul
+ =buttons/ora =do-ora
+ =buttons/dup =dup
+ =buttons/vid =vid
+ =buttons/1 =put/1
+ =buttons/2 =put/2
+ =buttons/3 =put/3
+ =buttons/d =put/d
+ =buttons/sub =do-sub
+ =buttons/sfl =do-sfl
+ =buttons/pop =erase
+ =buttons/push =eval
+ =buttons/0 =put/0
+ =buttons/a =put/a
+ =buttons/b =put/b
+ =buttons/c =put/b
+ =buttons/add =do-add
+ =buttons/sfr =do-sfr
@buttons ( x* y* icon* size* state )
&ctl
- &clr 0010 0078 :ctl-icns/clr :draw-button-clr 00
- &swp 0010 0088 :wst-icns/swp :draw-button-small 00
- &dup 0010 0098 :wst-icns/dup :draw-button-small 00
- &pop 0010 00a8 :wst-icns/pop :draw-button-tall 00
+ &clr 0010 0078 =ctl-icns/clr =draw-button-clr 00
+ &swp 0010 0088 =wst-icns/swp =draw-button-small 00
+ &dup 0010 0098 =wst-icns/dup =draw-button-small 00
+ &pop 0010 00a8 =wst-icns/pop =draw-button-tall 00
&wst
- &mode 0028 0078 :ctl-icns/mode :draw-button-small 00
- &inv 0028 0088 :ctl-icns/inv :draw-button-small 00
- &vid 0028 0098 :ctl-icns/vid :draw-button-small 00
- &push 0028 00a8 :wst-icns/push :draw-button-tall 00
+ &mode 0028 0078 =ctl-icns/mode =draw-button-small 00
+ &inv 0028 0088 =ctl-icns/inv =draw-button-small 00
+ &vid 0028 0098 =ctl-icns/vid =draw-button-small 00
+ &push 0028 00a8 =wst-icns/push =draw-button-tall 00
&num
- &7 0040 0078 :num-icns/7 :draw-button 00
- &8 0058 0078 :num-icns/8 :draw-button 00
- &9 0070 0078 :num-icns/9 :draw-button 00
- &f 0088 0078 :num-icns/f :draw-button-hex 00
- &4 0040 0090 :num-icns/4 :draw-button 00
- &5 0058 0090 :num-icns/5 :draw-button 00
- &6 0070 0090 :num-icns/6 :draw-button 00
- &e 0088 0090 :num-icns/e :draw-button-hex 00
- &1 0040 00a8 :num-icns/1 :draw-button 00
- &2 0058 00a8 :num-icns/2 :draw-button 00
- &3 0070 00a8 :num-icns/3 :draw-button 00
- &d 0088 00a8 :num-icns/d :draw-button-hex 00
- &0 0040 00c0 :num-icns/0 :draw-button 00
- &a 0058 00c0 :num-icns/a :draw-button-hex 00
- &b 0070 00c0 :num-icns/b :draw-button-hex 00
- &c 0088 00c0 :num-icns/c :draw-button-hex 00
+ &7 0040 0078 =num-icns/7 =draw-button 00
+ &8 0058 0078 =num-icns/8 =draw-button 00
+ &9 0070 0078 =num-icns/9 =draw-button 00
+ &f 0088 0078 =num-icns/f =draw-button-hex 00
+ &4 0040 0090 =num-icns/4 =draw-button 00
+ &5 0058 0090 =num-icns/5 =draw-button 00
+ &6 0070 0090 =num-icns/6 =draw-button 00
+ &e 0088 0090 =num-icns/e =draw-button-hex 00
+ &1 0040 00a8 =num-icns/1 =draw-button 00
+ &2 0058 00a8 =num-icns/2 =draw-button 00
+ &3 0070 00a8 =num-icns/3 =draw-button 00
+ &d 0088 00a8 =num-icns/d =draw-button-hex 00
+ &0 0040 00c0 =num-icns/0 =draw-button 00
+ &a 0058 00c0 =num-icns/a =draw-button-hex 00
+ &b 0070 00c0 =num-icns/b =draw-button-hex 00
+ &c 0088 00c0 =num-icns/c =draw-button-hex 00
&mod
- &div 00a0 0078 :mod-icns/div :draw-button 00
- &mul 00a0 0090 :mod-icns/mul :draw-button 00
- &sub 00a0 00a8 :mod-icns/sub :draw-button 00
- &add 00a0 00c0 :mod-icns/add :draw-button 00
- &and 00b8 0078 :mod-icns/and :draw-button 00
- &ora 00b8 0090 :mod-icns/ora :draw-button 00
- &sfl 00b8 00a8 :mod-icns/sfl :draw-button 00
- &sfr 00b8 00c0 :mod-icns/sfr :draw-button 00
+ &div 00a0 0078 =mod-icns/div =draw-button 00
+ &mul 00a0 0090 =mod-icns/mul =draw-button 00
+ &sub 00a0 00a8 =mod-icns/sub =draw-button 00
+ &add 00a0 00c0 =mod-icns/add =draw-button 00
+ &and 00b8 0078 =mod-icns/and =draw-button 00
+ &ora 00b8 0090 =mod-icns/ora =draw-button 00
+ &sfl 00b8 00a8 =mod-icns/sfl =draw-button 00
+ &sfr 00b8 00c0 =mod-icns/sfr =draw-button 00
&end
(
@|assets )
@cursor-icn
- 80c0 e0f0 f8e0 1000
-@dpad-chr
- 0000 ff81 8142 2418 0000 007e 7e3c 1800
+80c0 e0f0 f8e0 1000
+
@fill-icn
- ffff ffff ffff ffff
+ffff ffff ffff ffff
+
@logo-icn
- 1824 40df 4024 1800
+1824 40df 4024 1800
+
@patt-icn
- 8800 2200 8800 2200
- aa55 aa55 aa55 aa55
-@decal-icn
- 001c 22c1 0000 0000
- 0000 0007 8870 0000
-
-@mode-icns
- ( hex/dec )
- 0018 7818 1818 7e00
- 003c 607c 6666 3c00
- 0018 7818 1818 7e00
- 003c 6666 6666 3c00
- &dot
- ( f )
- 007e 6060 7c60 6000
- ( d )
- 007c 6666 6666 7c00
+8800 2200 8800 2200
+aa55 aa55 aa55 aa55
+@decal-icn
+001c 22c1 0000 0000
+0000 0007 8870 0000
+
+@mode-icns ( hex/dec )
+0018 7818 1818 7e00
+003c 607c 6666 3c00
+0018 7818 1818 7e00
+003c 6666 6666 3c00
+&dot
+( f ) 007e 6060 7c60 6000
+( d ) 007c 6666 6666 7c00
@binary-icns
- 003c 6666 6666 3c00
- 0018 7818 1818 7e00
+003c 6666 6666 3c00
+0018 7818 1818 7e00
@button-icns
- &def
- 001f 2040 4040 4040 0000 1f3f 3f3f 3f3f
+&def
+001f 2040 4040 4040 0000 1f3f 3f3f 3f3f
00ff 0000 0000 0000 0000 ffff ffff ffff
00f8 0402 0202 0202 0000 f8fc fcfc fcfc
4040 4040 4040 4040 3f3f 3f3f 3f3f 3f3f
@@ 1286,9 1258,8 @@ JMP2r
4040 4040 4020 1f00 3f3f 3f3f 1f00 0000
0000 0000 0000 ff00 ffff ffff ff00 0000
0202 0202 0204 f800 fcfc fcfc f800 0000
-
- &alt
- 001f 2040 4040 4040 0000 001f 3f3f 3f3f
+&alt
+001f 2040 4040 4040 0000 001f 3f3f 3f3f
00ff 0000 0000 0000 0000 00ff ffff ffff
00f8 0402 0202 0202 0000 00f8 fcfc fcfc
4040 4040 4040 4040 3f3f 3f3f 3f3f 3f3f
@@ 1308,7 1279,6 @@ fafa fafa fafa fafa 0404 0404 0404 0404
ffff ffff ff00 ff00 0000 0000 00ff 0000
fafa fafa fa04 f800 0404 0404 04f8 0000
-
@outline-frame
0000 0000 0000 0001 0000 0000 0000 0000
0000 0000 0000 ff00 0000 0000 0000 0000
@@ 1319,6 1289,18 @@ fafa fafa fa04 f800 0404 0404 04f8 0000
00ff 0000 0000 0000 0000 0000 0000 0000
8000 0000 0000 0000 0000 0000 0000 0000
+@ctl-icns
+&clr 0000 183c 3c18 0000
+&mode 0000 007f fe00 0000
+&inv 006c 6666 6666 3600
+&vid 0033 6666 6666 cc00
+
+@wst-icns
+&push 0018 3c7e 1818 1800
+&pop 0018 1818 7e3c 1800
+&swp 007c 7e02 407e 3e00
+&dup 003c 6666 6666 6c00
+
@mod-icns
&and
0000 000f 1f18 180f 0000 00e0 e000 00f8
@@ 1345,18 1327,6 @@ fafa fafa fa04 f800 0404 0404 04f8 0000
0000 0001 0100 001f 0000 0080 8000 00f8
1f00 0001 0100 0000 f800 0080 8000 0000
-@ctl-icns
- &clr 0000 183c 3c18 0000
- &mode 0000 007f fe00 0000
- &inv 006c 6666 6666 3600
- &vid 0033 6666 6666 cc00
-
-@wst-icns
- &push 0018 3c7e 1818 1800
- &pop 0018 1818 7e3c 1800
- &swp 007c 7e02 407e 3e00
- &dup 003c 6666 6666 6c00
-
@num-icns
&0
0000 000f 1f18 1818 0000 00f0 f818 1818
@@ 1410,13 1380,21 @@ fafa fafa fa04 f800 0404 0404 04f8 0000
@slash-icns
0000 0006 060c 0c18
1830 3060 6000 0000
+
@dot-icns
0000 0000 0000 0000
0000 0018 1800 0000
+
@quote-icns
0000 0018 1818 0800
0000 0000 0000 0000
+@mute-chr
+0038 4483 4438 0000 0000 387c 3800 0000
+0038 4483 4438 0000 0000 0000 0000 0000
+@dpad-chr
+0000 ff81 8142 2418 0000 007e 7e3c 1800
+
@tone
8eae b5b9 c0ce dbdc cdb6 a295 8b80 7364
5953 5256 585a 5d62 686f 7579 7d7e 8183