~rabbits/cccc

179db47a2c2f0a19d15aa5b39055d09e3cbf7b30 — Devine Lu Linvega 3 months ago 38aa10f + f2c3689
Merge branch 'main' of git.sr.ht:~rabbits/cccc
4 files changed, 435 insertions(+), 456 deletions(-)

M README.md
M build.sh
M etc/ss10x10.chr
M src/cccc.tal
M README.md => README.md +2 -0
@@ 12,6 12,8 @@ uxnasm src/cccc.tal bin/cccc.rom

If do not wish to assemble it yourself, you can download [cccc.rom](https://rabbits.srht.site/cccc/cccc.rom).

[![builds.sr.ht status](https://builds.sr.ht/~rabbits/cccc.svg)](https://builds.sr.ht/~rabbits/cccc?)

## Run

You must have a Varvara emulator.

M build.sh => build.sh +1 -2
@@ 8,7 8,6 @@ SRC="src/cccc.tal"
DST="bin/cccc.rom"

CPY="$HOME/roms"
ETC=""
ARG="4 3 / . ~ 200 300 % - $ . # . ! ."

echo ">> Cleaning"


@@ 18,7 17,7 @@ mkdir bin
if [[ "$*" == *"--lint"* ]]
then
    echo ">> Linting $SRC"
	$LIN $SRC $ETC
	$LIN $SRC
fi

echo ">> Assembling $SRC"

M etc/ss10x10.chr => etc/ss10x10.chr +0 -0
M src/cccc.tal => src/cccc.tal +432 -454
@@ 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