~rabbits/orca-toy

483312e5e86b745d700bc04cee02b07dff20ca48 — neauoire 1 year, 8 months ago 08e20cd
Resuming work, minor cleanup
8 files changed, 148 insertions(+), 133 deletions(-)

M .clang-format
M .gitignore
M README.md
M build.sh
R default.c => etc/default.c
R spectrum.c => etc/spectrum.c
R orca.usm => orca.tal
A untitled.orca
M .clang-format => .clang-format +5 -3
@@ 1,9 1,11 @@
AlignAfterOpenBracket: DontAlign
AlignEscapedNewlines: DontAlign
AllowShortBlocksOnASingleLine: Empty
AlignOperands: DontAlign
AllowShortBlocksOnASingleLine: Always
AllowShortCaseLabelsOnASingleLine: true
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AllowShortEnumsOnASingleLine: true
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: TopLevel
BinPackArguments: false
BinPackParameters: false

M .gitignore => .gitignore +1 -3
@@ 1,3 1,1 @@
orca
cli
untitled.orca
\ No newline at end of file
bin/
\ No newline at end of file

M README.md => README.md +9 -3
@@ 1,12 1,18 @@
# Orca

Orca is an [esoteric programming language](https://wiki.xxiivv.com/orca) designed to quickly create procedural sequencers, in which every letter of the alphabet is an operation, where lowercase letters operate on bang, uppercase letters operate each frame.
[Orca](https://wiki.xxiivv.com/orca) is an esoteric programming language, written in [Uxntal](https://wiki.xxiivv.com/site/uxntal.html).

This is a minimalist implementation of the basic operators created for educational purposes. To try a complete environment with client and server, see [Orca](https://git.sr.ht/~rabbits/orca).
In Orca, every letter of the alphabet is an operation, where lowercase letters operate on bang, uppercase letters operate each frame. This repository also contain a ANSI C version.

## Build

You must have [SDL2](https://wiki.libsdl.org/) and [portmidi](http://portmedia.sourceforge.net/portmidi/).
You must have the [Uxn](https://git.sr.ht/~rabbits/uxn/) assembler and emulator.

```
uxnasm orca.tal orca.rom && uxnemu orca.rom
```

To build the C version(old), you must have [SDL2](https://wiki.libsdl.org/).

```
cc orca.c -std=c89 -O2 -DNDEBUG -g0 -s -Wall -L/usr/local/lib -lSDL2 -o orca

M build.sh => build.sh +16 -14
@@ 1,22 1,24 @@
#!/bin/bash

clang-format -i orca.c
echo "Cleaning.."
rm -rf bin
mkdir bin

## Cleanup
rm -f ./orca
echo "Assembling.."
uxnasm orca.tal bin/orca.rom 

# client
cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined -L/usr/local/lib -lSDL2 -lportmidi orca.c -o orca
# cc -std=c89 -O2 -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -lportmidi orca.c -o orca

# Size
echo "Size: $(du -sk ./orca)"
echo "Installing.."
if [ -d "$HOME/roms" ] && [ -e ./bin/orca.rom ]
then
	cp ./bin/orca.rom $HOME/roms
    echo "Installed in $HOME/roms" 
fi

# Install
if [ -d "$HOME/bin" ] && [ -e ./orca ]
if [ "${1}" = '--push' ]; 
then
	cp ./orca $HOME/bin
    echo "Installed: $HOME/bin" 
	echo "Pushing.."
	~/Applications/butler push bin/orca.rom hundredrabbits/orca:uxn
fi

./orca demo.orca
echo "Running.."
uxnemu bin/orca.rom

R default.c => etc/default.c +0 -0
R spectrum.c => etc/spectrum.c +0 -0
R orca.usm => orca.tal +101 -110
@@ 11,61 11,66 @@
		- Copy/paste(chorded)
)

%+  { ADD } %-   { SUB }  %*  { MUL } %/   { DIV }
%<  { LTH } %>   { GTH }  %=  { EQU } %!   { NEQ }
%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }

%RTN { JMP2r }
%++ { #01 ADD } %-- { #01 SUB }
%8++ { #0008 ADD2 }
%8** { #30 SFT2 } %8// { #03 SFT2 }
%MOD { DUP2 DIV MUL SUB }
%MOD { DUP2 / * - }
%MOD8 { #07 AND }
%MOD2 { #01 AND }
%INCR { SWP #01 + SWP }

%DATA-CELLS { #2000 }
%DATA-LOCKS { #3000 }
%DATA-TYPES { #4000 }

%LDA-CHAR { #24 MOD #00 SWP ;b36clc ADD2 LDA } ( b36 -- char )
%LDA-VALUE { #20 SUB #00 SWP ;values ADD2 LDA } ( char -- b36 )
%LDA-CHAR { #24 MOD #00 SWP ;b36clc ++ LDA } ( b36 -- char )
%LDA-VALUE { #20 SUB #00 SWP ;values ++ LDA } ( char -- b36 )

%LDA-INDEX { #00 SWP #00 .grid/width LDZ MUL2 ROT #00 SWP ADD2 } ( x y -- index )
%LDA-CELL { LDA-INDEX DATA-CELLS ADD2 LDA } ( x y -- char )
%SET-CELL { ROT ROT LDA-INDEX DATA-CELLS ADD2 STA } ( x y char -- )
%LDA-TYPE { LDA-INDEX DATA-TYPES ADD2 LDA } ( x y -- type )
%SET-TYPE { ROT ROT LDA-INDEX DATA-TYPES ADD2 STA } ( x y type -- )
%LDA-LOCK { LDA-INDEX DATA-TYPES ADD2 LDA } ( x y -- type )
%SET-LOCK { ROT ROT LDA-INDEX DATA-TYPES ADD2 STA } ( x y type -- )
%LDA-INDEX { #00 SWP #00 .grid/width LDZ ** ROT #00 SWP ++ } ( x y -- index )
%LDA-CELL { LDA-INDEX DATA-CELLS ++ LDA } ( x y -- char )
%SET-CELL { ROT ROT LDA-INDEX DATA-CELLS ++ STA } ( x y char -- )
%LDA-TYPE { LDA-INDEX DATA-TYPES ++ LDA } ( x y -- type )
%SET-TYPE { ROT ROT LDA-INDEX DATA-TYPES ++ STA } ( x y type -- )
%LDA-LOCK { LDA-INDEX DATA-TYPES ++ LDA } ( x y -- type )
%SET-LOCK { ROT ROT LDA-INDEX DATA-TYPES ++ STA } ( x y type -- )
%LDA-PORT { } ( x y lock -- char )
%SET-PORT { } ( x y char -- )

%LDA-CELL-VALUE { LDA-CELL LDA-VALUE } ( x y -- b36 )

( devices )

|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|10 @Console [ &vector $2 &pad $6 &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 ]
|00 @System     [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|10 @Console    [ &vector $2 &pad $6 &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 ]
|80 @Controller [ &vector $2 &button $1 &key $1 ]
|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ]
|90 @Mouse      [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ]

( variables )

@timer [ &byte $1 &frame $1 &speed $1 ]
@grid [ &width $1 &height $1 ]
@timer     [ &byte $1 &frame $1 &speed $1 ]
@grid      [ &width $1 &height $1 ]
@selection [ &x1 $1 &y1 $1 &x2 $1 &y2 $1 ]
@cursor [ &x $2 &y $2 ]
@cursor    [ &x $2 &y $2 ]

|0100

	( theme ) #08f3 .System/r DEO2 #08fc .System/g DEO2 #08f9 .System/b DEO2
	( vectors ) ;on-button .Controller/vector DEO2
	( vectors ) ;on-mouse .Mouse/vector DEO2
	( vectors ) ;on-frame .Screen/vector DEO2
	( theme ) 
	#08f3 .System/r DEO2 
	#08fc .System/g DEO2 
	#08f9 .System/b DEO2

	( vectors ) 
	;on-button .Controller/vector DEO2
	;on-mouse .Mouse/vector DEO2
	;on-frame .Screen/vector DEO2

	( find size )
	.Screen/width DEI2 8// SWP POP .grid/width STZ
	.Screen/height DEI2 8// SWP POP #02 SUB .grid/height STZ
	.Screen/width DEI2 #03 SFT2 SWP POP .grid/width STZ
	.Screen/height DEI2 #03 SFT2 SWP POP #02 SUB .grid/height STZ

	( fill grid with dots )

	;start JSR2
	;redraw JSR2



@@ 73,11 78,11 @@ BRK

@on-frame

	.timer LDZ ++ DUP .timer STZ
	.timer LDZ #01 ADD DUP .timer STZ

	( skip ) #08 EQU ,&tick JCN BRK &tick

	.timer/frame LDZ ++ .timer/frame STZ
	.timer/frame LDZ #01 ADD .timer/frame STZ

	;run JSR2



@@ 96,20 101,20 @@ BRK
	.Controller/button DEI #f0 AND
		DUP #04 SFT #01 AND #01 NEQ ,&no-up JCN
			.selection/y1 LDZ #00 EQU ,&no-up JCN
			.selection/y1 LDZ -- .selection/y1 STZ
			.selection/y2 LDZ -- .selection/y2 STZ &no-up
			.selection/y1 LDZ #01 SUB .selection/y1 STZ
			.selection/y2 LDZ #01 SUB .selection/y2 STZ &no-up
		DUP #05 SFT #01 AND #01 NEQ ,&no-down JCN
			.selection/y1 LDZ .grid/height LDZ -- EQU ,&no-down JCN
			.selection/y1 LDZ ++ .selection/y1 STZ
			.selection/y2 LDZ ++ .selection/y2 STZ &no-down
			.selection/y1 LDZ .grid/height LDZ #01 SUB EQU ,&no-down JCN
			.selection/y1 LDZ #01 ADD .selection/y1 STZ
			.selection/y2 LDZ #01 ADD .selection/y2 STZ &no-down
		DUP #06 SFT #01 AND #01 NEQ ,&no-left JCN
			.selection/x1 LDZ #00 EQU ,&no-left JCN
			.selection/x1 LDZ -- .selection/x1 STZ
			.selection/x2 LDZ -- .selection/x2 STZ &no-left
			.selection/x1 LDZ #01 SUB .selection/x1 STZ
			.selection/x2 LDZ #01 SUB .selection/x2 STZ &no-left
		DUP #07 SFT #01 AND #01 NEQ ,&no-right JCN
			.selection/x1 LDZ .grid/width LDZ -- EQU ,&no-right JCN
			.selection/x1 LDZ ++ .selection/x1 STZ
			.selection/x2 LDZ ++ .selection/x2 STZ &no-right
			.selection/x1 LDZ .grid/width LDZ #01 SUB EQU ,&no-right JCN
			.selection/x1 LDZ #01 ADD .selection/x1 STZ
			.selection/x2 LDZ #01 ADD .selection/x2 STZ &no-right
	POP

	.Controller/key DEI #08 NEQ ,&no-backspace JCN


@@ 123,8 128,8 @@ BRK
@on-mouse
	
	.Mouse/state DEI #00 EQU ,&no-touch JCN
		.Mouse/x DEI2 8// SWP POP .selection/x1 STZ
		.Mouse/y DEI2 8// SWP POP .selection/y1 STZ
		.Mouse/x DEI2 #03 SFT2 SWP POP .selection/x1 STZ
		.Mouse/y DEI2 #03 SFT2 SWP POP .selection/y1 STZ
		;redraw JSR2
	&no-touch



@@ 154,10 159,10 @@ BRK
		&hor
			( get x,y ) SWP2 OVR STH SWP2 OVR STHr
			#2e SET-CELL
			( incr ) SWP ++ SWP
			INCR
			DUP2 LTH ,&hor JCN
		POP2
		( incr ) SWP ++ SWP
		INCR
		DUP2 LTH ,&ver JCN
	POP2



@@ 198,11 203,11 @@ RTN
		( check if x,y is grid )
		POP
		DUP2 MOD8 #00 EQU SWP MOD8 #00 EQU #0101 NEQ2 ,&no-marker8 JCN POP2 ;marker8_icn RTN &no-marker8
		DUP2 MOD2 #00 EQU SWP MOD2 #00 EQU #0101 NEQ2 ,&no-marker4 JCN POP2 ;marker4_icn RTN &no-marker4
		DUP2 #01 AND #00 EQU SWP #01 AND #00 EQU #0101 NEQ2 ,&no-marker4 JCN POP2 ;marker4_icn RTN &no-marker4
		POP2 ;font RTN
	&no-bar
	STH POP2 STHr
	#20 SUB #00 SWP 8** ;font ADD2
	#20 SUB #00 SWP #30 SFT2 ;font ++

RTN



@@ 211,9 216,9 @@ RTN
@op-a ( x y char -- )

	POP
	( get left ) DUP2 SWP -- SWP LDA-CELL-VALUE STH
	( get right ) DUP2 SWP ++ SWP LDA-CELL-VALUE STH
	( incr y ) ++
	( get left ) DUP2 SWP #01 SUB SWP LDA-CELL-VALUE STH
	( get right ) DUP2 INCR LDA-CELL-VALUE STH
	( incr y ) #01 ADD
	( get result ) ADDr STHr
	LDA-CHAR
	SET-CELL


@@ 223,9 228,9 @@ RTN
@op-b ( x y char -- )
	
	POP
	( get left ) DUP2 SWP -- SWP LDA-CELL-VALUE STH
	( get right ) DUP2 SWP ++ SWP LDA-CELL-VALUE STH
	( incr y ) ++
	( get left ) DUP2 SWP #01 SUB SWP LDA-CELL-VALUE STH
	( get right ) DUP2 INCR LDA-CELL-VALUE STH
	( incr y ) #01 ADD
	( get result ) SUBr STHr
	LDA-CHAR
	SET-CELL


@@ 237,7 242,7 @@ RTN
@op-c ( x y char -- )
	
	POP
	++
	#01 ADD
	#30 .timer/frame LDZ MOD8 ADD SET-CELL

RTN


@@ 310,12 315,12 @@ RTN
		#2a SET-CELL POP STHr RTN
	&not-edge
	( collide )
	DUP2 -- LDA-CELL #2e EQU ,&not-collide JCN
	DUP2 #01 SUB LDA-CELL #2e EQU ,&not-collide JCN
		#2a SET-CELL POP STHr RTN
	&not-collide
	( move )
	DUP2 STHr
	SWP -- SWP SET-CELL	
	SWP #01 SUB SWP SET-CELL	
	#2e SET-CELL
	
RTN


@@ 348,7 353,7 @@ RTN
	
	STH
	( clear ) DUP2 #2e SET-CELL
	( move ) ++ DUP2 #01 SET-LOCK
	( move ) #01 ADD DUP2 #01 SET-LOCK
	STHr SET-CELL
	
RTN


@@ 379,12 384,12 @@ RTN
		#2a SET-CELL POP STHr RTN
	&not-edge
	( collide )
	DUP2 SWP -- SWP LDA-CELL #2e EQU ,&not-collide JCN
	DUP2 SWP #01 SUB SWP LDA-CELL #2e EQU ,&not-collide JCN
		#2a SET-CELL POP STHr RTN
	&not-collide
	( move )
	DUP2
	SWP -- SWP STHr SET-CELL	
	SWP #01 SUB SWP STHr SET-CELL	
	#2e SET-CELL
	
RTN


@@ 453,10 458,10 @@ RTN
		&hor
			( get x,y ) SWP2 OVR STH SWP2 OVR STHr
			( unlock ) #00 SET-LOCK
			( incr ) SWP ++ SWP
			INCR
			DUP2 LTH ,&hor JCN
		POP2
		( incr ) SWP ++ SWP
		INCR
		DUP2 LTH ,&ver JCN
	POP2



@@ 472,10 477,10 @@ RTN
		&hor
			( get x,y ) SWP2 OVR STH SWP2 OVR STHr
			DUP2 LDA-CELL ;run-char JSR2
			( incr ) SWP ++ SWP
			INCR
			DUP2 LTH ,&hor JCN
		POP2
		( incr ) SWP ++ SWP
		INCR
		DUP2 LTH ,&ver JCN
	POP2
	;redraw JSR2


@@ 484,24 489,24 @@ RTN

@draw-interface ( -- )
	
	.Screen/height DEI2 #0008 SUB2 .Screen/y DEO2
	.Screen/height DEI2 #0008 -- .Screen/y DEO2

	( Positionx )
	#0000 .Screen/x DEO2
	.selection/x1 LDZ
		DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
		DUP #04 SFT LDA-CHAR #20 SUB #00 SWP #30 SFT2 ;font ++ .Screen/addr DEO2
	#22 .Screen/color DEO
	#0008 .Screen/x DEO2
		#0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
		#0f AND LDA-CHAR #20 SUB #00 SWP #30 SFT2 ;font ++ .Screen/addr DEO2
	#22 .Screen/color DEO

	( Positiony )
	#0010 .Screen/x DEO2
	.selection/y1 LDZ
		DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
		DUP #04 SFT LDA-CHAR #20 SUB #00 SWP #30 SFT2 ;font ++ .Screen/addr DEO2
	#22 .Screen/color DEO
	#0018 .Screen/x DEO2
		#0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
		#0f AND LDA-CHAR #20 SUB #00 SWP #30 SFT2 ;font ++ .Screen/addr DEO2
	#22 .Screen/color DEO

	#0020 .Screen/x DEO2


@@ 511,10 516,10 @@ RTN
	( Frame )
	#0030 .Screen/x DEO2
	.timer/frame LDZ
		DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
		DUP #04 SFT LDA-CHAR #20 SUB #00 SWP #30 SFT2 ;font ++ .Screen/addr DEO2
	#22 .Screen/color DEO
	#0038 .Screen/x DEO2
		#0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
		#0f AND LDA-CHAR #20 SUB #00 SWP #30 SFT2 ;font ++ .Screen/addr DEO2
	#22 .Screen/color DEO

	#0040 .Screen/x DEO2


@@ 524,20 529,20 @@ RTN
	( Speed )
	#0050 .Screen/x DEO2
	.timer/speed LDZ
		DUP #04 SFT LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
		DUP #04 SFT LDA-CHAR #20 SUB #00 SWP #30 SFT2 ;font ++ .Screen/addr DEO2
	#22 .Screen/color DEO
	#0058 .Screen/x DEO2
		#0f AND LDA-CHAR #20 SUB #00 SWP 8** ;font ADD2 .Screen/addr DEO2
		#0f AND LDA-CHAR #20 SUB #00 SWP #30 SFT2 ;font ++ .Screen/addr DEO2
	#22 .Screen/color DEO

	( TODO: Signal VU )

	( File )
	.Screen/width DEI2 #0028 SUB2 .Screen/x DEO2
	.Screen/x DEI2 8++ .Screen/x DEO2 ;eye_icns .Screen/addr DEO2 #21 .Screen/color DEO
	.Screen/x DEI2 8++ .Screen/x DEO2 ;filestate_icn .Screen/addr DEO2 #21 .Screen/color DEO
	.Screen/x DEI2 8++ .Screen/x DEO2 ;load_icn .Screen/addr DEO2 #21 .Screen/color DEO
	.Screen/x DEI2 8++ .Screen/x DEO2 ;save_icn .Screen/addr DEO2 #21 .Screen/color DEO
	.Screen/width DEI2 #0028 -- .Screen/x DEO2
	.Screen/x DEI2 #0008 ++ .Screen/x DEO2 ;eye_icns .Screen/addr DEO2 #21 .Screen/color DEO
	.Screen/x DEI2 #0008 ++ .Screen/x DEO2 ;filestate_icn .Screen/addr DEO2 #21 .Screen/color DEO
	.Screen/x DEI2 #0008 ++ .Screen/x DEO2 ;load_icn .Screen/addr DEO2 #21 .Screen/color DEO
	.Screen/x DEI2 #0008 ++ .Screen/x DEO2 ;save_icn .Screen/addr DEO2 #21 .Screen/color DEO

RTN



@@ 545,17 550,17 @@ RTN
	
	#00 .grid/height LDZ
	&ver
		( pos-y ) OVR #00 SWP 8** .Screen/y DEO2
		( pos-y ) OVR #00 SWP #30 SFT2 .Screen/y DEO2
		#00 .grid/width LDZ
		&hor
			( pos-x ) OVR #00 SWP 8** .Screen/x DEO2
			( pos-x ) OVR #00 SWP #30 SFT2 .Screen/x DEO2
			( get x,y ) SWP2 OVR STH SWP2 OVR STHr
			( sprite ) DUP2 ;get-cell-sprite JSR2 .Screen/addr DEO2
			( draw ) ;is-selected JSR2 #0d MUL #21 ADD .Screen/color DEO
			( incr ) SWP ++ SWP
			INCR
			DUP2 LTH ,&hor JCN
		POP2
		( incr ) SWP ++ SWP
		INCR
		DUP2 LTH ,&ver JCN
	POP2



@@ 563,55 568,42 @@ RTN

RTN

( char to b36 )

@values [
	
@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

]

( b36 to char-lc )

@b36clc [
@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
]

@cursor_icn     [ 80c0 e0f0 f8e0 1000 ]
@blank_icn      [ 0000 0000 0000 0000 ]
@position_icn   [ 0066 4200 0042 6600 ]
@beat_icn       [ 0000 1038 7c38 1000 ]
@marker8_icn    [ 0000 2400 0024 0000 ]
@marker4_icn    [ 0000 0000 0000 1000 ]
@filestate_icn  [ 1054 28c6 2854 1000 ]
@load_icn       [ feaa d6aa d4aa f400 ]
@save_icn       [ fe82 8282 848a f400 ]

@eye_icns
	[ 0038 4492 2810 0000 ] ( open )
	[ 0000 0082 4438 0000 ] ( closed )
@cursor_icn     80c0 e0f0 f8e0 1000
@blank_icn      0000 0000 0000 0000
@position_icn   0066 4200 0042 6600
@beat_icn       0000 1038 7c38 1000
@marker8_icn    0000 2400 0024 0000
@marker4_icn    0000 0000 0000 1000
@filestate_icn  1054 28c6 2854 1000
@load_icn       feaa d6aa d4aa f400
@save_icn       fe82 8282 848a f400

@eye_icns
	0038 4492 2810 0000 ( open )
	0000 0082 4438 0000 ( closed )

@font ( specter8-frag font )
[
	0000 0000 0000 0000 0008 0808 0800 0800
	0014 1400 0000 0000 0024 7e24 247e 2400
	0008 1e28 1c0a 3c08 0000 2204 0810 2200


@@ 660,6 652,5 @@ RTN
	0000 7e02 3c40 7e00 000c 0810 1008 0c00
	0008 0808 0808 0800 0030 1008 0810 3000
	0000 0032 4c00 0000 3c42 99a1 a199 423c
]

@data [ ]
\ No newline at end of file
@data 
\ No newline at end of file

A untitled.orca => untitled.orca +16 -0
@@ 0,0 1,16 @@
....D....4d6....................
.....H.....H....................
....xE....xE....................
..........E.......E.....E.E.....
....J..J..J..J..J..J..J..J......
.....FE.FEEFE.FE.FE.FE.FE.FE....
...........*....................
s.X..J..J..J..J..J..J..J..J.....
p.X..J..J..J..J..J..J..J...:15..
m.X..J..J..J..J..J..J...:35.....
j.X..J..J..J..J..J...:35........
g.X..J..J..J..J...:b4...........
d.X..J..J..J...:95..............
a.X..J..J..*:05.................
7.X..J...:15....................
......:05.......................