~rabbits/orca-toy

c260765ae3a423f7dd151143200fe30908324f77 — Devine Lu Linvega 8 months ago 4cbeb48
Starting manifest
3 files changed, 637 insertions(+), 252 deletions(-)

A src/assets.tal
A src/manifest.tal
M src/orca.tal
A src/assets.tal => src/assets.tal +251 -0
@@ 0,0 1,251 @@
@notes
	( lc )
	00 00 00 00 00 00 00 00
	00 00
	0a 0c 01 03 05 06 08 0a
	0c 0d 0f 11 12 14 16 18
	19 1b 1d 1e 20 22 24 25
	27 29
	( uc )
	00 00 00 00 00 00 00 00
	00 00
	09 0b 00 02 04 05 07 09
	0b 0c 0e 10 11 13 15 17
	18 1a 1c 1d 1f 21 23 24
	26 28

@values ( char to b36 )
	00 00 00 00 00 00 00 00
	00 00 00 00 00 00 00 00
	00 01 02 03 04 05 06 07
	08 09 00 00 00 00 00 00
	00 0a 0b 0c 0d 0e 0f 10
	11 12 13 14 15 16 17 18
	19 1a 1b 1c 1d 1e 1f 20
	21 22 23 00 00 00 00 00
	00 0a 0b 0c 0d 0e 0f 10
	11 12 13 14 15 16 17 18
	19 1a 1b 1c 1d 1e 1f 20
	21 22 23 00 00 00 00 00

@b36clc ( b36 to char-lc )
	30 31 32 33 34 35 36 37
	38 39 61 62 63 64 65 66
	67 68 69 6a 6b 6c 6d 6e
	6f 70 71 72 73 74 75 76
	77 78 79 7a

@cell-styles
	03 ( 0 normal )
	03 ( 1 locked )
	01 ( 2 port-unlocked )
	04 ( 3 operator )
	02 ( 4 port-locked )
	08 ( 5 port-output )
	09 ( 6 selected )
	0c ( 7 io )

@cursor-icn
	80c0 e0f0 f8e0 1000 0000 0000 0000 0000
@unknown-icn
	aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
@meter-icn
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 00ff 0000
	0000 0000 0000 0000 0000 00ff 00ff 0000
	0000 0000 0000 0000 00ff 00ff 00ff 0000
	0000 0000 0000 00ff 00ff 00ff 00ff 0000
	0000 0000 00ff 00ff 00ff 00ff 00ff 0000
	0000 00ff 00ff 00ff 00ff 00ff 00ff 0000
	00ff 00ff 00ff 00ff 00ff 00ff 00ff 0000
	007c fefe feee c682 c6ee fefe fefe 7c00

@font ( orca.816 )
	0000 0000 0000 0000 0000 0000 0000 0000
	0010 1010 1010 1010 1010 1010 0010 0000
	0028 2800 0000 0000 0000 0000 0000 0000
	0024 247e 2424 2424 2424 247e 2424 0000
	0010 3854 5050 5038 1414 1454 3810 0000
	0022 5222 0404 0808 1010 2024 4a44 0000
	0010 2828 2828 1030 504a 4a44 443a 0000
	0000 1020 0000 0000 0000 0000 0000 0000
	0008 1010 1010 1010 1010 1010 1008 0000
	0010 0808 0808 0808 0808 0808 0810 0000
	0000 0010 5454 5438 5454 5410 0000 0000
	0000 0000 0010 107c 1010 0000 0000 0000
	0000 0000 0000 0000 0000 0000 1010 0000
	0000 0000 0000 007c 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0010 0000
	0002 0202 0404 0808 1010 2020 4040 0000
	0018 2442 4242 4242 4242 4242 2418 0000
	0030 5010 1010 1010 1010 1010 1010 0000
	0018 2442 4202 0408 1020 2040 407e 0000
	0018 2442 4202 0418 0402 4242 2418 0000
	0006 0a0a 1212 2222 427e 0202 0202 0000
	007e 4040 4038 0402 0202 4242 2418 0000
	0018 2442 4240 4058 6442 4242 2418 0000
	003e 4242 0204 0404 0808 0810 1010 0000
	0018 2442 4242 2418 2442 4242 2418 0000
	0018 2442 4242 261a 0202 0202 0202 0000
	0000 0000 0000 1000 0010 0000 0000 0000
	0000 0000 0000 1000 0010 1010 2000 0000
	0000 0204 0810 2040 2010 0804 0200 0000
	0000 0000 0000 7c00 007c 0000 0000 0000
	0000 4020 1008 0402 0408 1020 4000 0000
	0018 2442 4202 0204 0408 1010 0010 0000
	0018 2442 4a56 5252 5252 524c 201c 0000
	0018 2442 4242 427e 4242 4242 4242 0000
	0078 4442 4242 4478 4442 4242 4478 0000
	0018 2442 4240 4040 4040 4242 2418 0000
	0078 4442 4242 4242 4242 4242 4478 0000
	007e 4040 4040 4078 4040 4040 407e 0000
	007e 4040 4040 4078 4040 4040 4040 0000
	0018 2442 4040 404e 4242 4242 2418 0000
	0042 4242 4242 427e 4242 4242 4242 0000
	007c 1010 1010 1010 1010 1010 107c 0000
	001e 0202 0202 0202 0202 0242 2418 0000
	0042 4244 4448 4870 4848 4444 4242 0000
	0040 4040 4040 4040 4040 4040 407e 0000
	0074 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a 0000
	0062 5252 5252 5252 4a4a 4a4a 4a46 0000
	0018 2442 4242 4242 4242 4242 2418 0000
	0078 4442 4242 4478 4040 4040 4040 0000
	0018 2442 4242 4242 4242 425a 241a 0000
	0078 4442 4242 4478 4442 4242 4242 0000
	0018 2442 4240 2018 0402 4242 2418 0000
	007c 1010 1010 1010 1010 1010 1010 0000
	0042 4242 4242 4242 4242 4242 241a 0000
	0042 4242 4242 4242 2424 2424 2418 0000
	004a 4a4a 4a4a 4a4a 4a4a 4a4a 4a76 0000
	0042 4242 2424 2418 2424 2442 4242 0000
	0042 4242 4242 261a 0202 4242 2418 0000
	007e 0204 0408 0810 1020 2040 407e 0000
	0018 1010 1010 1010 1010 1010 1018 0000
	aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
	0018 0808 0808 0808 0808 0808 0818 0000
	0010 2844 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 007e 0000
	0010 1008 0000 0000 0000 0000 0000 0000
	0000 0000 0000 003c 4202 3e42 463a 0000
	0000 0040 4040 4078 4442 4242 4478 0000
	0000 0000 0000 003c 4240 4040 423c 0000
	0000 0002 0202 021e 2242 4242 261a 0000
	0000 0000 0000 003c 4242 7c40 423c 0000
	0000 0c12 1010 1038 1010 1010 1020 0000
	0000 0000 0000 003e 4242 3c40 3c42 3c00
	0000 0040 4040 4058 6442 4242 4242 0000
	0000 0000 0010 0010 3010 1010 1038 0000
	0000 0000 0008 0008 0808 0808 0848 3000
	0000 0040 4040 4042 4244 7844 4242 0000
	0000 0010 1010 1010 1010 1010 100c 0000
	0000 0000 0000 0074 4a4a 4a4a 4a4a 0000
	0000 0000 0000 0058 6442 4242 4242 0000
	0000 0000 0000 0018 2442 4242 2418 0000
	0000 0000 0000 007c 4242 427c 4040 4000
	0000 0000 0000 003e 4242 463a 0202 0200
	0000 0000 0000 005c 6240 4040 4040 0000
	0000 0000 0000 003c 4240 3c02 423c 0000
	0000 0010 1010 1038 1010 1010 120c 0000
	0000 0000 0000 0042 4242 4242 463a 0000
	0000 0000 0000 0042 4224 2424 2418 0000
	0000 0000 0000 004a 4a4a 4a4a 4a74 0000
	0000 0000 0000 0042 4224 1824 4242 0000
	0000 0000 0000 0042 4246 3a02 0242 3c00
	0000 0000 0000 007e 0204 1820 407e 0000
	0008 1010 1010 1010 2010 1010 1008 0000
	0010 1010 1010 1010 1010 1010 1010 1000
	0010 0808 0808 0808 0408 0808 0810 0000
	007e 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 183c 3c18 0000 0000 0000
	aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
&selector
	0000 0010 1010 1010 ee10 1010 1010 0000
	0000 006c 1010 1010 1010 1010 106c 0000
&beat
	0010 1028 2844 4482 8244 4428 2810 1000
&make
	00fe 8282 8282 8282 8282 8282 848a f400
&load
	00fe d6aa d6aa d6aa d6aa d6aa d4aa f400
&save
	0010 1092 9254 5428 d628 5454 9292 1000
&help
	0000 0000 0000 0000	8244 3800 0000 0000
	0000 0000 0000 3844 9228 1000 0000 0000

@sin-pcm
	8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad
	b0b3 b6b9 bbbe c1c3 c6c9 cbce d0d2 d5d7
	d9db dee0 e2e4 e6e7 e9eb ecee f0f1 f2f4
	f5f6 f7f8 f9fa fbfb fcfd fdfe fefe fefe
	fffe fefe fefe fdfd fcfb fbfa f9f8 f7f6
	f5f4 f2f1 f0ee eceb e9e7 e6e4 e2e0 dedb
	d9d7 d5d2 d0ce cbc9 c6c3 c1be bbb9 b6b3
	b0ad aaa7 a4a1 9e9b 9895 928f 8c89 8683
	807d 7a77 7471 6e6b 6865 625f 5c59 5653
	504d 4a47 4542 3f3d 3a37 3532 302e 2b29
	2725 2220 1e1c 1a19 1715 1412 100f 0e0c
	0b0a 0908 0706 0505 0403 0302 0202 0202
	0102 0202 0202 0303 0405 0506 0708 090a
	0b0c 0e0f 1012 1415 1719 1a1c 1e20 2225
	2729 2b2e 3032 3537 3a3d 3f42 4547 4a4d
	5053 5659 5c5f 6265 686b 6e71 7477 7a7d

@tri-pcm
	8082 8486 888a 8c8e 9092 9496 989a 9c9e
	a0a2 a4a6 a8aa acae b0b2 b4b6 b8ba bcbe
	c0c2 c4c6 c8ca ccce d0d2 d4d6 d8da dcde
	e0e2 e4e6 e8ea ecee f0f2 f4f6 f8fa fcfe
	fffd fbf9 f7f5 f3f1 efed ebe9 e7e5 e3e1
	dfdd dbd9 d7d5 d3d1 cfcd cbc9 c7c5 c3c1
	bfbd bbb9 b7b5 b3b1 afad aba9 a7a5 a3a1
	9f9d 9b99 9795 9391 8f8d 8b89 8785 8381
	7f7d 7b79 7775 7371 6f6d 6b69 6765 6361
	5f5d 5b59 5755 5351 4f4d 4b49 4745 4341
	3f3d 3b39 3735 3331 2f2d 2b29 2725 2321
	1f1d 1b19 1715 1311 0f0d 0b09 0705 0301
	0103 0507 090b 0d0f 1113 1517 191b 1d1f
	2123 2527 292b 2d2f 3133 3537 393b 3d3f
	4143 4547 494b 4d4f 5153 5557 595b 5d5f
	6163 6567 696b 6d6f 7173 7577 797b 7d7f

@saw-pcm
	8282 8183 8384 8685 8888 8889 8a8b 8c8c
	8e8e 8f90 9092 9193 9494 9596 9699 9899
	9b9a 9c9c 9c9d 9ea0 a1a0 a2a2 a3a5 a4a6
	a7a7 a9a8 a9aa aaac adad aeae b0b0 b1b3
	b2b4 b5b5 b6b7 b9b8 b9bb babc bdbc bdbe
	bfc1 bfc1 c3c1 c4c5 c5c6 c6c7 c9c7 cbca
	cbcc cdcd cfcf d2d0 d2d2 d2d5 d4d5 d6d7
	d8d8 d9dc d9df dadf dce1 dde5 dce6 dceb
	cb1f 1b1e 1c21 1c21 1f23 2025 2127 2329
	2529 2829 2a2b 2b2e 2d2f 302f 3231 3234
	3334 3536 3836 3939 3a3b 3b3d 3e3d 3f40
	4042 4242 4444 4646 4748 474a 4a4b 4d4c
	4e4e 4f50 5052 5252 5554 5557 5759 5959
	5b5b 5c5d 5d5f 5e60 6160 6264 6365 6566
	6867 6969 6a6c 6c6d 6d6e 706f 7071 7174
	7475 7576 7777 797a 7a7c 7b7c 7e7d 7f7f

@sqr-pcm
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000

@data
	&cells $4000
	&locks $4000
	&types $4000

A src/manifest.tal => src/manifest.tal +385 -0
@@ 0,0 1,385 @@
@manifest

	&name "Orca $1
	&date "2022-07-02 $1
	&menu
		04 "File $1
			01 'n :file-new "New $1
			01 'r :file-rename "Rename $1
			01 'o :file-open "Open $1
			01 's :file-save "Save $1
		03 "Edit $1
			01 'c :edit-copy "Copy $1
			01 'C :edit-copy-string "CopyText $1
			01 'v :edit-paste "Paste $1
			( 01 'x :edit-cut "Cut $1 )
		09 "Move $1
			10 00 :move-up "Up $1
			20 00 :move-down "Down $1
			40 00 :move-left "Left $1
			80 00 :move-right "Right $1
			14 00 :move-dech "Decr.H $1
			24 00 :move-inch "Incr.H $1
			44 00 :move-decw "Decr.W $1
			84 00 :move-incw "Incr.W $1
			00 1b :move-reset "Reset $1
		06 "Options $1
			00 0d :option-insert "Insert $1
			00 08 :option-erase "Erase $1
			00 '. :option-incr "ValIncr $1
			00 ', :option-decr "ValDecr $1
			04 '< :option-roll "RollLeft $1
			04 '> :option-rolr "RollRight $1
		$1

@menu-init ( -- )

	#ff ;draw-menu/sel STA
	#ff ;draw-sub/sel STA

	( clear cursor )
	.cursor/x LDZ2 .Screen/x DEO2
	.cursor/y LDZ2 .Screen/y DEO2
	#40 .Screen/sprite DEO

	#0401 ;draw-menu/theme STA2
	#0804 ;draw-sub/theme STA2

	;draw-menu JSR2

JMP2r

@trap-menu ( -> )

	;on-mouse-menu .Mouse/vector DEO2
	;on-control-menu .Controller/vector DEO2
	,menu-init JSR

BRK

@on-mouse-menu ( -> )

	( clear last cursor )
	.cursor/x LDZ2 .Screen/x DEO2
	.cursor/y LDZ2 .Screen/y DEO2
	#40 .Screen/sprite DEO
	( record mouse positions )
	.Mouse/x DEI2 DUP2 .cursor/x STZ2 .Screen/x DEO2
	.Mouse/y DEI2 DUP2 .cursor/y STZ2 .Screen/y DEO2
	( draw new cursor )
	;hand-icn .Screen/addr DEO2
	#42 .Mouse/state DEI #00 NEQ ADD .Screen/sprite DEO
	( when touch cat )
	.Mouse/state DEI #00 EQU ,&no-touch-cat JCN
	.Mouse/y DEI2 #0014 GTH2 ,&no-touch-cat JCN
		.Mouse/x DEI2 ;menu-picking JSR2 ;menu-select JSR2
		( release ) #00 .Mouse/state DEO
		BRK
		&no-touch-cat
	( when sub active )
	;draw-menu/sel LDA #ff EQU ,&no-sub JCN
		( when sel changed )
		.Mouse/y DEI2 #0004 SUB2 #04 SFT2 NIP #01 SUB
		DUP ;draw-sub/sel LDA EQU ,&no-change JCN
			DUP ;draw-sub/sel STA
			;draw-menu/sel LDA #ff ;draw-sub JSR2
			&no-change
		POP
		( when touch sub )
		.Mouse/state DEI #00 EQU ,&no-touch-sub JCN
			;draw-sub/sel LDA ;menu-select-sub JSR2
			( release ) #00 .Mouse/state DEO
			&no-touch-sub
		BRK
		&no-sub
	( don't leave if menu is active )
	;draw-menu/sel LDA #ff EQU
	.Mouse/y DEI2 #0013 GTH2
		AND ;on-menu-leave JCN2

BRK

@on-menu-leave ( -> )

	;menu-close JSR2

BRK

@menu-picking ( x* -- cat )

	#0010 SUB2 #0028 DIV2 NIP

JMP2r

@menu-close ( -- )

	;untrap JSR2
	;draw-menu/sel LDA
	DUP #ff EQU ,&no-clear JCN
		DUP #00 ;draw-sub JSR2
		#ff ;draw-menu/sel STA
		;draw-menu JSR2
		;redraw-all JSR2
	&no-clear
	POP

JMP2r

@menu-select ( cat -- )

	( exists )
	DUP ;get-cat JSR2 ORA ,&exists JCN
		POP JMP2r
		&exists
	( clear )
	;draw-menu/sel LDA
	( unchanged ) EQUk ,menu-deselect JCN
	( unselected ) DUP #ff EQU ,&no-clear JCN
		DUP #00 ;draw-sub JSR2
		&no-clear
	POP
	( draw )
	;redraw-all JSR2
	#ff ;draw-sub/sel STA
	DUP ;draw-menu/sel STA
	#ff ;draw-sub JSR2
	;draw-menu JSR2

JMP2r

@menu-deselect ( cat cat -- )

	POP2 ;menu-close JSR2

JMP2r

@menu-select-sub ( sub -- )

	;get-sub JSR2
	;menu-close JSR2
	DUP2 #0000 EQU2 ,&skip JCN
		DUP2 JSR2
		&skip
	POP2

JMP2r

@on-control-menu ( -> )

	( TODO )

BRK

@get-cat ( cat -- cat* )

	STH
	#00 ,&id STR
	;manifest/menu
	&cat
		[ LIT &id 00 ] STHkr EQU ,&end JCN
		;skip-sub JSR2
		,&id LDR INC ,&id STR
		LDAk ,&cat JCN
	POP2
	#0000
	&end
	POPr

JMP2r

@get-sub ( sub -- sub* )

	STH
	;draw-menu/sel LDA ;get-cat JSR2
	LDAk STH INC2 ;skip-str JSR2
	STHr #00
	&subcat
		DUP STHkr EQU ,&end JCN
		SWP2 #0004 ADD2 ;skip-str JSR2 SWP2
		INC GTHk ,&subcat JCN
	POP2 POP2
	( TODO: merge tails )
	POPr
	#0000
	JMP2r
	&end
	POP2
	INC2 INC2 LDA2
	POPr

JMP2r

@get-anchor ( cat -- x* )

	LIT2r 0000
	,&target STR
	#00 ,&id STR
	;manifest/menu
	&cat
		[ LIT &id 00 ] [ LIT &target $1 ] EQU ,&end JCN
		INC2k ;slen JSR2 INC2 STH2 ADD2r
		;skip-sub JSR2
		,&id LDR INC ,&id STR
		LDAk ,&cat JCN
	POP2
	&end
	STH2r
	INC2 INC2 #30 SFT2

JMP2r

@find-modkey ( mod key -- fn* )

	,&mk STR2
	;manifest/menu
	&cat
		LDAk STH INC2 ,skip-str JSR
		STHr #00
		&subcat
			OVR2 LDA2 [ LIT2 &mk $2 ] NEQ2 ,&continue JCN
				POP2 INC2 INC2 LDA2 JMP2r
				&continue
			SWP2 #0004 ADD2 ,skip-str JSR SWP2
			INC GTHk ,&subcat JCN
		POP2
		LDAk ,&cat JCN
	POP2
	#0000

JMP2r

@skip-sub ( sub* -- sub* )

	LDAk STH INC2 ;skip-str JSR2
	STHr #00
	&subcat
		SWP2 #0004 ADD2 ,skip-str JSR SWP2
		INC GTHk ,&subcat JCN
	POP2

JMP2r

@skip-str ( str* -- str* )

	&skip INC2 LDAk ,&skip JCN INC2

JMP2r

@draw-menu ( -- )

	#0010 .Screen/x DEO2
	#0004 .Screen/y DEO2
	#15 .Screen/auto DEO
	#00 ,&id STR
	;manifest/menu
	&cat
		[ LIT2 &theme $2 ] [ LIT &sel $1 ] [ LIT &id $1 ] EQU [ JMP SWP POP ] ;draw-chr/color STA
		INC2k ;draw-str JSR2 POP2 #00 .Screen/sprite DEO
		;skip-sub JSR2
		,&id LDR INC ,&id STR
		LDAk ,&cat JCN
	POP2
	#00 .Screen/auto DEO

JMP2r

@draw-sub ( cat mask -- )

	,&mask STR POP
	;draw-menu/sel LDA ;get-cat JSR2
	DUP2 #0000 EQU2 ,&skip JCN
	;draw-menu/sel LDA ;get-anchor JSR2 ,&anchor STR2
	#15 .Screen/auto DEO
	LDAk STH INC2 ;skip-str JSR2
	STHr #00
	&subcat
		STHk [ LIT2 &theme $2 ] STHr [ LIT &sel $1 ] EQU [ JMP SWP POP ] [ LIT &mask $1 ] AND ;draw-chr/color STA
		[ LIT2 &anchor $2 ] .Screen/x DEO2
		#00 OVR INC #40 SFT2 #0004 ADD2 .Screen/y DEO2
		SWP2 ;draw-label JSR2 SWP2
		INC GTHk ,&subcat JCN
	POP2 POP2
	#00 .Screen/auto DEO
	&skip
	POP2

JMP2r

@draw-label ( label* -- next-label* )

	LDA2k SWP2
	#0004 ADD2 STH2k ;draw-str JSR2
	( fill )
	#0c STH2r ;slen JSR2 NIP SUB #00
	&loop
		#20 ;draw-chr JSR2
		INC GTHk ,&loop JCN
	POP2
	.Screen/x DEI2 #0008 SUB2 .Screen/x DEO2
	SWP2 ;draw-key JSR2 ;draw-mod JSR2

JMP2r

@draw-mod (  mod -- )

	( mod )
	STH
	#0800
	&loop
		STHkr OVR SFT #01 AND #00 EQU ,&no-button JCN
			#00 OVR #40 SFT2 ;buttons-icns ADD2 ;draw-chr/raw JSR2
			.Screen/x DEI2 #0010 SUB2 .Screen/x DEO2
			&no-button
		INC GTHk ,&loop JCN
	POP2
	POPr

JMP2r

@draw-key ( mod key -- )

	( key )
	DUP #00 EQU ,&skip-key JCN
	DUP #08 NEQ ,&no-del JCN ;&del ,&inv JMP &no-del
	DUP #09 NEQ ,&no-tab JCN ;&tab ,&inv JMP &no-tab
	DUP #0d NEQ ,&no-ent JCN ;&ent ,&inv JMP &no-ent
	DUP #20 NEQ ,&no-spc JCN ;&spc ,&inv JMP &no-spc
	DUP #1b NEQ ,&no-esc JCN ;&esc ,&inv JMP &no-esc
	DUP ;draw-chr JSR2
	.Screen/x DEI2 #0010 SUB2 .Screen/x DEO2
	&skip-key
	POP

JMP2r
	&inv .Screen/x DEI2 #0010 SUB2 .Screen/x DEO2 ROT POP ;draw-str JSR2 POP2 JMP2r
	&del "del $1 &tab "tab $1 &ent "ent $1 &spc "spc $1 &esc "esc $1

@draw-str ( str* -- str* )

	&while
		LDAk ,draw-chr JSR
		INC2 LDAk ,&while JCN
	INC2

JMP2r

@draw-chr ( char -- )

	#20 SUB #00 SWP #40 SFT2 ;font ADD2 &raw .Screen/addr DEO2
	[ LIT &color 01 ] .Screen/sprite DEO

JMP2r

@buttons-icns

	0000 0000 387c fefe fe7c 3800 0000 0000
	0000 0000 3844 8282 8244 3800 0000 0000
	0000 0000 1038 7cfe 7c38 1000 0000 0000
	0000 0000 1028 4482 4428 1000 0000 0000

	0000 0000 1038 7cfe 1010 1000 0000 0000
	0000 0000 1010 10fe 7c38 1000 0000 0000
	0000 0000 1030 70fe 7030 1000 0000 0000
	0000 0000 1018 1cfe 1c18 1000 0000 0000



M src/orca.tal => src/orca.tal +1 -252
@@ 1707,255 1707,4 @@ JMP2r

@untitled-txt "untitled.orca $1

@notes
	( lc )
	00 00 00 00 00 00 00 00
	00 00
	0a 0c 01 03 05 06 08 0a
	0c 0d 0f 11 12 14 16 18
	19 1b 1d 1e 20 22 24 25
	27 29
	( uc )
	00 00 00 00 00 00 00 00
	00 00
	09 0b 00 02 04 05 07 09
	0b 0c 0e 10 11 13 15 17
	18 1a 1c 1d 1f 21 23 24
	26 28

@values ( char to b36 )
	00 00 00 00 00 00 00 00
	00 00 00 00 00 00 00 00
	00 01 02 03 04 05 06 07
	08 09 00 00 00 00 00 00
	00 0a 0b 0c 0d 0e 0f 10
	11 12 13 14 15 16 17 18
	19 1a 1b 1c 1d 1e 1f 20
	21 22 23 00 00 00 00 00
	00 0a 0b 0c 0d 0e 0f 10
	11 12 13 14 15 16 17 18
	19 1a 1b 1c 1d 1e 1f 20
	21 22 23 00 00 00 00 00

@b36clc ( b36 to char-lc )
	30 31 32 33 34 35 36 37
	38 39 61 62 63 64 65 66
	67 68 69 6a 6b 6c 6d 6e
	6f 70 71 72 73 74 75 76
	77 78 79 7a

@cell-styles
	03 ( 0 normal )
	03 ( 1 locked )
	01 ( 2 port-unlocked )
	04 ( 3 operator )
	02 ( 4 port-locked )
	08 ( 5 port-output )
	09 ( 6 selected )
	0c ( 7 io )

@cursor-icn
	80c0 e0f0 f8e0 1000 0000 0000 0000 0000
@unknown-icn
	aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
@meter-icn
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 00ff 0000
	0000 0000 0000 0000 0000 00ff 00ff 0000
	0000 0000 0000 0000 00ff 00ff 00ff 0000
	0000 0000 0000 00ff 00ff 00ff 00ff 0000
	0000 0000 00ff 00ff 00ff 00ff 00ff 0000
	0000 00ff 00ff 00ff 00ff 00ff 00ff 0000
	00ff 00ff 00ff 00ff 00ff 00ff 00ff 0000
	007c fefe feee c682 c6ee fefe fefe 7c00

@font ( orca.816 )
	0000 0000 0000 0000 0000 0000 0000 0000
	0010 1010 1010 1010 1010 1010 0010 0000
	0028 2800 0000 0000 0000 0000 0000 0000
	0024 247e 2424 2424 2424 247e 2424 0000
	0010 3854 5050 5038 1414 1454 3810 0000
	0022 5222 0404 0808 1010 2024 4a44 0000
	0010 2828 2828 1030 504a 4a44 443a 0000
	0000 1020 0000 0000 0000 0000 0000 0000
	0008 1010 1010 1010 1010 1010 1008 0000
	0010 0808 0808 0808 0808 0808 0810 0000
	0000 0010 5454 5438 5454 5410 0000 0000
	0000 0000 0010 107c 1010 0000 0000 0000
	0000 0000 0000 0000 0000 0000 1010 0000
	0000 0000 0000 007c 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0010 0000
	0002 0202 0404 0808 1010 2020 4040 0000
	0018 2442 4242 4242 4242 4242 2418 0000
	0030 5010 1010 1010 1010 1010 1010 0000
	0018 2442 4202 0408 1020 2040 407e 0000
	0018 2442 4202 0418 0402 4242 2418 0000
	0006 0a0a 1212 2222 427e 0202 0202 0000
	007e 4040 4038 0402 0202 4242 2418 0000
	0018 2442 4240 4058 6442 4242 2418 0000
	003e 4242 0204 0404 0808 0810 1010 0000
	0018 2442 4242 2418 2442 4242 2418 0000
	0018 2442 4242 261a 0202 0202 0202 0000
	0000 0000 0000 1000 0010 0000 0000 0000
	0000 0000 0000 1000 0010 1010 2000 0000
	0000 0204 0810 2040 2010 0804 0200 0000
	0000 0000 0000 7c00 007c 0000 0000 0000
	0000 4020 1008 0402 0408 1020 4000 0000
	0018 2442 4202 0204 0408 1010 0010 0000
	0018 2442 4a56 5252 5252 524c 201c 0000
	0018 2442 4242 427e 4242 4242 4242 0000
	0078 4442 4242 4478 4442 4242 4478 0000
	0018 2442 4240 4040 4040 4242 2418 0000
	0078 4442 4242 4242 4242 4242 4478 0000
	007e 4040 4040 4078 4040 4040 407e 0000
	007e 4040 4040 4078 4040 4040 4040 0000
	0018 2442 4040 404e 4242 4242 2418 0000
	0042 4242 4242 427e 4242 4242 4242 0000
	007c 1010 1010 1010 1010 1010 107c 0000
	001e 0202 0202 0202 0202 0242 2418 0000
	0042 4244 4448 4870 4848 4444 4242 0000
	0040 4040 4040 4040 4040 4040 407e 0000
	0074 4a4a 4a4a 4a4a 4a4a 4a4a 4a4a 0000
	0062 5252 5252 5252 4a4a 4a4a 4a46 0000
	0018 2442 4242 4242 4242 4242 2418 0000
	0078 4442 4242 4478 4040 4040 4040 0000
	0018 2442 4242 4242 4242 425a 241a 0000
	0078 4442 4242 4478 4442 4242 4242 0000
	0018 2442 4240 2018 0402 4242 2418 0000
	007c 1010 1010 1010 1010 1010 1010 0000
	0042 4242 4242 4242 4242 4242 241a 0000
	0042 4242 4242 4242 2424 2424 2418 0000
	004a 4a4a 4a4a 4a4a 4a4a 4a4a 4a76 0000
	0042 4242 2424 2418 2424 2442 4242 0000
	0042 4242 4242 261a 0202 4242 2418 0000
	007e 0204 0408 0810 1020 2040 407e 0000
	0018 1010 1010 1010 1010 1010 1018 0000
	aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
	0018 0808 0808 0808 0808 0808 0818 0000
	0010 2844 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 007e 0000
	0010 1008 0000 0000 0000 0000 0000 0000
	0000 0000 0000 003c 4202 3e42 463a 0000
	0000 0040 4040 4078 4442 4242 4478 0000
	0000 0000 0000 003c 4240 4040 423c 0000
	0000 0002 0202 021e 2242 4242 261a 0000
	0000 0000 0000 003c 4242 7c40 423c 0000
	0000 0c12 1010 1038 1010 1010 1020 0000
	0000 0000 0000 003e 4242 3c40 3c42 3c00
	0000 0040 4040 4058 6442 4242 4242 0000
	0000 0000 0010 0010 3010 1010 1038 0000
	0000 0000 0008 0008 0808 0808 0848 3000
	0000 0040 4040 4042 4244 7844 4242 0000
	0000 0010 1010 1010 1010 1010 100c 0000
	0000 0000 0000 0074 4a4a 4a4a 4a4a 0000
	0000 0000 0000 0058 6442 4242 4242 0000
	0000 0000 0000 0018 2442 4242 2418 0000
	0000 0000 0000 007c 4242 427c 4040 4000
	0000 0000 0000 003e 4242 463a 0202 0200
	0000 0000 0000 005c 6240 4040 4040 0000
	0000 0000 0000 003c 4240 3c02 423c 0000
	0000 0010 1010 1038 1010 1010 120c 0000
	0000 0000 0000 0042 4242 4242 463a 0000
	0000 0000 0000 0042 4224 2424 2418 0000
	0000 0000 0000 004a 4a4a 4a4a 4a74 0000
	0000 0000 0000 0042 4224 1824 4242 0000
	0000 0000 0000 0042 4246 3a02 0242 3c00
	0000 0000 0000 007e 0204 1820 407e 0000
	0008 1010 1010 1010 2010 1010 1008 0000
	0010 1010 1010 1010 1010 1010 1010 1000
	0010 0808 0808 0808 0408 0808 0810 0000
	007e 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 183c 3c18 0000 0000 0000
	aa55 aa55 aa55 aa55 aa55 aa55 aa55 aa55
&selector
	0000 0010 1010 1010 ee10 1010 1010 0000
	0000 006c 1010 1010 1010 1010 106c 0000
&beat
	0010 1028 2844 4482 8244 4428 2810 1000
&make
	00fe 8282 8282 8282 8282 8282 848a f400
&load
	00fe d6aa d6aa d6aa d6aa d6aa d4aa f400
&save
	0010 1092 9254 5428 d628 5454 9292 1000
&help
	0000 0000 0000 0000	8244 3800 0000 0000
	0000 0000 0000 3844 9228 1000 0000 0000

@sin-pcm
	8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad
	b0b3 b6b9 bbbe c1c3 c6c9 cbce d0d2 d5d7
	d9db dee0 e2e4 e6e7 e9eb ecee f0f1 f2f4
	f5f6 f7f8 f9fa fbfb fcfd fdfe fefe fefe
	fffe fefe fefe fdfd fcfb fbfa f9f8 f7f6
	f5f4 f2f1 f0ee eceb e9e7 e6e4 e2e0 dedb
	d9d7 d5d2 d0ce cbc9 c6c3 c1be bbb9 b6b3
	b0ad aaa7 a4a1 9e9b 9895 928f 8c89 8683
	807d 7a77 7471 6e6b 6865 625f 5c59 5653
	504d 4a47 4542 3f3d 3a37 3532 302e 2b29
	2725 2220 1e1c 1a19 1715 1412 100f 0e0c
	0b0a 0908 0706 0505 0403 0302 0202 0202
	0102 0202 0202 0303 0405 0506 0708 090a
	0b0c 0e0f 1012 1415 1719 1a1c 1e20 2225
	2729 2b2e 3032 3537 3a3d 3f42 4547 4a4d
	5053 5659 5c5f 6265 686b 6e71 7477 7a7d

@tri-pcm
	8082 8486 888a 8c8e 9092 9496 989a 9c9e
	a0a2 a4a6 a8aa acae b0b2 b4b6 b8ba bcbe
	c0c2 c4c6 c8ca ccce d0d2 d4d6 d8da dcde
	e0e2 e4e6 e8ea ecee f0f2 f4f6 f8fa fcfe
	fffd fbf9 f7f5 f3f1 efed ebe9 e7e5 e3e1
	dfdd dbd9 d7d5 d3d1 cfcd cbc9 c7c5 c3c1
	bfbd bbb9 b7b5 b3b1 afad aba9 a7a5 a3a1
	9f9d 9b99 9795 9391 8f8d 8b89 8785 8381
	7f7d 7b79 7775 7371 6f6d 6b69 6765 6361
	5f5d 5b59 5755 5351 4f4d 4b49 4745 4341
	3f3d 3b39 3735 3331 2f2d 2b29 2725 2321
	1f1d 1b19 1715 1311 0f0d 0b09 0705 0301
	0103 0507 090b 0d0f 1113 1517 191b 1d1f
	2123 2527 292b 2d2f 3133 3537 393b 3d3f
	4143 4547 494b 4d4f 5153 5557 595b 5d5f
	6163 6567 696b 6d6f 7173 7577 797b 7d7f

@saw-pcm
	8282 8183 8384 8685 8888 8889 8a8b 8c8c
	8e8e 8f90 9092 9193 9494 9596 9699 9899
	9b9a 9c9c 9c9d 9ea0 a1a0 a2a2 a3a5 a4a6
	a7a7 a9a8 a9aa aaac adad aeae b0b0 b1b3
	b2b4 b5b5 b6b7 b9b8 b9bb babc bdbc bdbe
	bfc1 bfc1 c3c1 c4c5 c5c6 c6c7 c9c7 cbca
	cbcc cdcd cfcf d2d0 d2d2 d2d5 d4d5 d6d7
	d8d8 d9dc d9df dadf dce1 dde5 dce6 dceb
	cb1f 1b1e 1c21 1c21 1f23 2025 2127 2329
	2529 2829 2a2b 2b2e 2d2f 302f 3231 3234
	3334 3536 3836 3939 3a3b 3b3d 3e3d 3f40
	4042 4242 4444 4646 4748 474a 4a4b 4d4c
	4e4e 4f50 5052 5252 5554 5557 5759 5959
	5b5b 5c5d 5d5f 5e60 6160 6264 6365 6566
	6867 6969 6a6c 6c6d 6d6e 706f 7071 7174
	7475 7576 7777 797a 7a7c 7b7c 7e7d 7f7f

@sqr-pcm
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	ffff ffff ffff ffff ffff ffff ffff ffff
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000
	0000 0000 0000 0000 0000 0000 0000 0000

@data
	&cells $4000
	&locks $4000
	&types $4000

~src/assets.tal