uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 5334e5cfa054ded4c24a755231c687e96f2e85c6
parent 9dda5bdf1bf55088b5e2bb4d3e1fb58fc33bfc19
Author: neauoire <aliceffekt@gmail.com>
Date:   Thu,  8 Apr 2021 22:00:06 -0700

Progress on orca

Diffstat:
Mprojects/software/orca.usm | 318+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
Msrc/apu.h | 4----
2 files changed, 264 insertions(+), 58 deletions(-)

diff --git a/projects/software/orca.usm b/projects/software/orca.usm @@ -1,13 +1,12 @@ ( Orca TODO - - Display guides - - Clamp selection to grid - Synthax highlight + - B operating doesn't loop around - Locking ports - Detect capitalization - - Draw Interface - Comments + - Scale selection - Load/Save - Copy/Paste - Copy/paste(chorded) @@ -20,7 +19,7 @@ ( variables ) -;timer { byte 1 frame 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 } @@ -45,7 +44,7 @@ ( find size ) ~Screen.width 8/ SWP POP =grid.width - ~Screen.height 8/ SWP POP =grid.height + ~Screen.height 8/ SWP POP #02 SUB =grid.height ( fill grid with dots ) @@ -58,18 +57,19 @@ BRK ~timer #01 ADD DUP =timer - #10 EQU ^$tick JNZ BRK $tick + ( skip ) #08 EQU ^$tick JNZ BRK $tick + + ~timer.frame #01 ADD =timer.frame ,run JSR2 #00 =timer - ~timer.frame #01 ADD =timer.frame BRK @on-key - ~Keys.key #00 NEQ ^$continue JNZ BRK $continue + ( skip ) ~Keys.key #00 NEQ ^$continue JNZ BRK $continue ~selection.x1 ~selection.y1 ~Keys.key ,put-char JSR2 @@ -84,15 +84,19 @@ BRK ( arrows ) ~Controller.button #f0 AND DUP #04 SFT #01 AND #01 NEQ ^$no-up JNZ + ~selection.y1 #00 EQU ^$no-up JNZ ~selection.y1 #01 SUB =selection.y1 ~selection.y2 #01 SUB =selection.y2 $no-up DUP #05 SFT #01 AND #01 NEQ ^$no-down JNZ + ~selection.y1 ~grid.height #01 SUB EQU ^$no-down JNZ ~selection.y1 #01 ADD =selection.y1 ~selection.y2 #01 ADD =selection.y2 $no-down DUP #06 SFT #01 AND #01 NEQ ^$no-left JNZ + ~selection.x1 #00 EQU ^$no-left JNZ ~selection.x1 #01 SUB =selection.x1 ~selection.x2 #01 SUB =selection.x2 $no-left DUP #07 SFT #01 AND #01 NEQ ^$no-right JNZ + ~selection.x1 ~grid.width #01 SUB EQU ^$no-right JNZ ~selection.x1 #01 ADD =selection.x1 ~selection.x2 #01 ADD =selection.x2 $no-right POP @@ -147,6 +151,8 @@ BRK DUP2 LTH ^$ver JNZ POP2 + #9a =timer.speed + RTN @is-selected ( x y -- flag ) @@ -181,7 +187,7 @@ RTN @get-value-char ( value -- char ) - #00 SWP ,b36clc ADD2 PEK2 + #24 MOD #00 SWP ,b36clc ADD2 PEK2 RTN @@ -193,35 +199,29 @@ RTN @get-char-sprite ( x y -- addr ) - ,get-char JSR2 #20 SUB #00 SWP #0008 MUL2 ,font ADD2 - -RTN - -@get-char-sprite-grid ( x y -- addr ) - DUP2 ,get-char JSR2 ( if character is dot ) DUP #2e NEQ ^$no-bar JNZ ( check if x,y is grid ) POP - #08 MOD #00 EQU - SWP - #08 MOD #00 EQU - ( make it a + ) #0101 EQU2 #00 SWP #0058 MUL2 ,font ADD2 - RTN + DUP2 #08 MOD #00 EQU SWP #08 MOD #00 EQU #0101 NEQ2 ^$no-marker8 JNZ POP2 ,marker8_icn RTN $no-marker8 + DUP2 #02 MOD #00 EQU SWP #02 MOD #00 EQU #0101 NEQ2 ^$no-marker4 JNZ POP2 ,marker4_icn RTN $no-marker4 + POP2 ,font RTN $no-bar STH POP2 STHr #20 SUB #00 SWP #0008 MUL2 ,font ADD2 RTN +( operators ) + @op-a ( x y char -- ) POP ( get left ) DUP2 SWP #01 SUB SWP ,get-value JSR2 STH ( get right ) DUP2 SWP #01 ADD SWP ,get-value JSR2 STH ( incr y ) #01 ADD - ( get result ) ADDr STHr + ( get result ) ADDr STHr ,get-value-char JSR2 ,put-char JSR2 @@ -247,11 +247,190 @@ RTN RTN +@op-d ( x y char -- ) + + POP POP2 + +RTN + +@op-e ( x y char -- ) + + POP POP2 + +RTN + +@op-f ( x y char -- ) + + POP POP2 + +RTN + +@op-g ( x y char -- ) + + POP POP2 + +RTN + +@op-h ( x y char -- ) + + POP POP2 + +RTN + +@op-i ( x y char -- ) + + POP POP2 + +RTN + +@op-j ( x y char -- ) + + POP POP2 + +RTN + +@op-k ( x y char -- ) + + POP POP2 + +RTN + +@op-l ( x y char -- ) + + POP POP2 + +RTN + +@op-m ( x y char -- ) + + POP POP2 + +RTN + +@op-n ( x y char -- ) + + STH + ( limit ) + DUP #00 NEQ ^$not-edge JNZ + #2a ,put-char JSR2 + POP STHr + RTN + $not-edge + ( collide ) + DUP2 #01 SUB ,get-char JSR2 #2e EQU ^$not-collide JNZ + #2a ,put-char JSR2 + POP STHr + RTN + $not-collide + DUP2 STHr + SWP #01 SUB SWP ,put-char JSR2 + #2e ,put-char JSR2 + +RTN + +@op-o ( x y char -- ) + + POP POP2 + +RTN + +@op-p ( x y char -- ) + + POP POP2 + +RTN + +@op-q ( x y char -- ) + + POP POP2 + +RTN + +@op-r ( x y char -- ) + + POP POP2 + +RTN + +@op-s ( x y char -- ) + + STH DUP2 STHr + SWP #01 ADD SWP ,put-char JSR2 + #2e ,put-char JSR2 + ( TODO: Lock ) + +RTN + +@op-t ( x y char -- ) + + POP POP2 + +RTN + +@op-u ( x y char -- ) + + POP POP2 + +RTN + +@op-v ( x y char -- ) + + POP POP2 + +RTN + +@op-w ( x y char -- ) + + POP POP2 + +RTN + +@op-x ( x y char -- ) + + POP POP2 + +RTN + +@op-y ( x y char -- ) + + POP POP2 + +RTN + +@op-z ( x y char -- ) + + POP POP2 + +RTN + @run-char ( x y char -- ) ( A ) DUP #41 EQU ,op-a JNZ2 ( B ) DUP #42 EQU ,op-b JNZ2 ( C ) DUP #43 EQU ,op-c JNZ2 + ( D ) DUP #44 EQU ,op-d JNZ2 + ( E ) DUP #45 EQU ,op-e JNZ2 + ( F ) DUP #46 EQU ,op-f JNZ2 + ( G ) DUP #47 EQU ,op-g JNZ2 + ( H ) DUP #48 EQU ,op-h JNZ2 + ( I ) DUP #49 EQU ,op-i JNZ2 + ( J ) DUP #4a EQU ,op-j JNZ2 + ( K ) DUP #4b EQU ,op-k JNZ2 + ( L ) DUP #4c EQU ,op-l JNZ2 + ( M ) DUP #4d EQU ,op-m JNZ2 + ( N ) DUP #4e EQU ,op-n JNZ2 + ( O ) DUP #4f EQU ,op-o JNZ2 + ( P ) DUP #50 EQU ,op-p JNZ2 + ( Q ) DUP #51 EQU ,op-q JNZ2 + ( R ) DUP #52 EQU ,op-r JNZ2 + ( S ) DUP #53 EQU ,op-s JNZ2 + ( T ) DUP #54 EQU ,op-t JNZ2 + ( U ) DUP #55 EQU ,op-u JNZ2 + ( V ) DUP #56 EQU ,op-v JNZ2 + ( W ) DUP #57 EQU ,op-w JNZ2 + ( X ) DUP #58 EQU ,op-x JNZ2 + ( Y ) DUP #59 EQU ,op-y JNZ2 + ( Z ) DUP #5a EQU ,op-z JNZ2 POP POP2 RTN @@ -279,31 +458,58 @@ RTN ~Screen.height #0008 SUB2 =Sprite.y - ( TODO: Position ) - ( TODO: Frame ) - ( TODO: BPM ) - + ( Positionx ) + #0000 =Sprite.x + ~selection.x1 + DUP #04 SFT ,get-value-char JSR2 #20 SUB #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr + #02 =Sprite.color + #0008 =Sprite.x + #0f AND ,get-value-char JSR2 #20 SUB #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr + #02 =Sprite.color + + ( Positiony ) + #0010 =Sprite.x + ~selection.y1 + DUP #04 SFT ,get-value-char JSR2 #20 SUB #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr + #02 =Sprite.color + #0018 =Sprite.x + #0f AND ,get-value-char JSR2 #20 SUB #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr + #02 =Sprite.color + + #0020 =Sprite.x + ,position_icn =Sprite.addr + #03 =Sprite.color + + ( Frame ) + #0030 =Sprite.x + ~timer.frame + DUP #04 SFT ,get-value-char JSR2 #20 SUB #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr + #02 =Sprite.color + #0038 =Sprite.x + #0f AND ,get-value-char JSR2 #20 SUB #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr + #02 =Sprite.color + + #0040 =Sprite.x + ,beat_icn =Sprite.addr + #01 ~timer.frame #08 MOD #00 EQU #02 MUL ADD =Sprite.color + + ( Speed ) + #0050 =Sprite.x + ~timer.speed + DUP #04 SFT ,get-value-char JSR2 #20 SUB #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr + #02 =Sprite.color + #0058 =Sprite.x + #0f AND ,get-value-char JSR2 #20 SUB #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr + #02 =Sprite.color + + ( TODO: Signal VU ) + + ( File ) ~Screen.width #0028 SUB2 =Sprite.x - - ( TODO: Toggle Guides ) - ~Sprite.x 8+ =Sprite.x - ,eye_icns =Sprite.addr - #01 =Sprite.color - - ( TODO: New ) - ~Sprite.x 8+ =Sprite.x - ,filestate_icn =Sprite.addr - #01 =Sprite.color - - ( TODO: Load ) - ~Sprite.x 8+ =Sprite.x - ,load_icn =Sprite.addr - #01 =Sprite.color - - ( TODO: Save ) - ~Sprite.x 8+ =Sprite.x - ,save_icn =Sprite.addr - #01 =Sprite.color + ~Sprite.x 8+ =Sprite.x ,eye_icns =Sprite.addr #01 =Sprite.color + ~Sprite.x 8+ =Sprite.x ,filestate_icn =Sprite.addr #01 =Sprite.color + ~Sprite.x 8+ =Sprite.x ,load_icn =Sprite.addr #01 =Sprite.color + ~Sprite.x 8+ =Sprite.x ,save_icn =Sprite.addr #01 =Sprite.color RTN @@ -316,7 +522,7 @@ RTN $hor ( pos-x ) OVR #00 SWP #0008 MUL2 =Sprite.x ( get x,y ) SWP2 OVR STH SWP2 OVR STHr - ( sprite ) DUP2 ,get-char-sprite-grid JSR2 =Sprite.addr + ( sprite ) DUP2 ,get-char-sprite JSR2 =Sprite.addr ( draw ) ,is-selected JSR2 #0d MUL #01 ADD =Sprite.color ( incr ) SWP #01 ADD SWP DUP2 LTH ^$hor JNZ @@ -361,16 +567,20 @@ RTN 77 78 79 7a ] -@cursor_icn [ 80c0 e0f0 f8e0 1000 ] -@blank_icn [ 0000 0000 0000 0000 ] +@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 ) -@filestate_icn [ 1054 28c6 2854 1000 ] -@load_icn [ feaa d6aa d4aa f400 ] -@save_icn [ fe82 8282 848a f400 ] @font ( specter8-frag font ) [ @@ -379,7 +589,7 @@ RTN 0008 1e28 1c0a 3c08 0000 2204 0810 2200 0030 4832 4c44 3a00 0008 1000 0000 0000 0004 0808 0808 0400 0020 1010 1010 2000 - 0000 2214 0814 2200 0000 0808 3e08 0800 + 005a 2442 4224 5a00 0000 0808 3e08 0800 0000 0000 0000 0810 0000 0000 3e00 0000 0000 0000 0000 0800 0000 0204 0810 2000 003c 464a 5262 3c00 0018 0808 0808 1c00 @@ -424,4 +634,4 @@ RTN 0000 0032 4c00 0000 3c42 99a1 a199 423c ] -@data [ elephant ] -\ No newline at end of file +@data [ ] +\ No newline at end of file diff --git a/src/apu.h b/src/apu.h @@ -10,10 +10,6 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE. */ -typedef unsigned char Uint8; -typedef signed char Sint8; -typedef unsigned short Uint16; -typedef signed short Sint16; typedef unsigned int Uint32; typedef signed int Sint32;