| ... | ... |
@@ -20,5 +20,5 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr |
| 20 | 20 |
# cc uxn.c emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -o bin/emulator |
| 21 | 21 |
|
| 22 | 22 |
# run |
| 23 |
-./bin/assembler projects/software/left.usm bin/boot.rom |
|
| 23 |
+./bin/assembler projects/examples/dev.controller.usm bin/boot.rom |
|
| 24 | 24 |
./bin/emulator bin/boot.rom |
| ... | ... |
@@ -1,62 +1,57 @@ |
| 1 | 1 |
( Controller ) |
| 2 | 2 |
|
| 3 |
+%INCR2 { #0001 ADD2 }
|
|
| 4 |
+%DECR2 { #0001 SUB2 }
|
|
| 5 |
+%HALF2 { #0002 DIV2 }
|
|
| 6 |
+ |
|
| 3 | 7 |
;slime { color 1 }
|
| 4 | 8 |
|
| 5 | 9 |
|0100 @RESET |
| 6 | 10 |
|
| 7 | 11 |
( set origin ) |
| 8 |
- ~Screen.width #0002 DIV2 =Sprite.x |
|
| 9 |
- ~Screen.height #0002 DIV2 =Sprite.y |
|
| 12 |
+ ~Screen.width HALF2 =Sprite.x |
|
| 13 |
+ ~Screen.height HALF2 =Sprite.y |
|
| 10 | 14 |
,default_icn =Sprite.addr |
| 11 | 15 |
#11 =Sprite.color |
| 12 | 16 |
#0a =slime |
| 13 | 17 |
|
| 14 | 18 |
BRK |
| 15 | 19 |
|
| 16 |
-|c000 @FRAME |
|
| 20 |
+@FRAME |
|
| 17 | 21 |
|
| 22 |
+ ~Controller.buttons #f0 AND #00 EQU BRK? |
|
| 23 |
+ |
|
| 18 | 24 |
#0a =slime |
| 25 |
+ |
|
| 19 | 26 |
( hold ctrl key to change slime color ) |
| 20 |
- ,no-ctrl ~Controller.buttons #0f AND #01 NEQ JMP2? POP2 |
|
| 21 |
- #05 =slime |
|
| 22 |
- @no-ctrl |
|
| 23 |
- ( hold alt key to change slime color ) |
|
| 24 |
- ,no-alt ~Controller.buttons #0f AND #02 NEQ JMP2? POP2 |
|
| 25 |
- #0f =slime |
|
| 26 |
- @no-alt |
|
| 27 |
- ( detect movement ) |
|
| 28 |
- ,no-up ~Controller.buttons #f0 AND #10 NEQ JMP2? POP2 |
|
| 29 |
- ( clear ) #10 =Sprite.color |
|
| 30 |
- ( move ) ~Sprite.y #0001 SUB2 =Sprite.y ,up_icn =Sprite.addr |
|
| 31 |
- ( draw ) ,redraw JSR2 BRK |
|
| 32 |
- @no-up |
|
| 33 |
- ,no-down ~Controller.buttons #f0 AND #20 NEQ JMP2? POP2 |
|
| 34 |
- ( clear ) #10 =Sprite.color |
|
| 35 |
- ( move ) ~Sprite.y #0001 ADD2 =Sprite.y ,down_icn =Sprite.addr |
|
| 36 |
- ( draw ) ,redraw JSR2 BRK |
|
| 37 |
- @no-down |
|
| 38 |
- ,no-left ~Controller.buttons #f0 AND #40 NEQ JMP2? POP2 |
|
| 39 |
- ( clear ) #10 =Sprite.color |
|
| 40 |
- ( move ) ~Sprite.x #0001 SUB2 =Sprite.x ,left_icn =Sprite.addr |
|
| 41 |
- ( draw ) ,redraw JSR2 BRK |
|
| 42 |
- @no-left |
|
| 43 |
- ,no-right ~Controller.buttons #f0 AND #80 NEQ JMP2? POP2 |
|
| 44 |
- ( clear ) #10 =Sprite.color |
|
| 45 |
- ( move ) ~Sprite.x #0001 ADD2 =Sprite.x ,right_icn =Sprite.addr |
|
| 46 |
- ( draw ) ,redraw JSR2 BRK |
|
| 47 |
- @no-right |
|
| 48 | 27 |
|
| 49 |
-BRK |
|
| 28 |
+ ~Controller.buttons #0f AND |
|
| 29 |
+ DUP #01 NEQ ,$no-ctrl ROT JMP2? POP2 #05 =slime $no-ctrl |
|
| 30 |
+ DUP #02 NEQ ,$no-alt ROT JMP2? POP2 #0f =slime $no-alt |
|
| 31 |
+ POP |
|
| 32 |
+ |
|
| 33 |
+ ( clear ) #10 =Sprite.color |
|
| 34 |
+ |
|
| 35 |
+ ( detect movement ) |
|
| 36 |
+ ~Controller.buttons #f0 AND |
|
| 37 |
+ DUP #04 ROR #01 AND #01 NEQ ,$no-up ROT JMP2? POP2 |
|
| 38 |
+ ( move ) ~Sprite.y DECR2 =Sprite.y ,up_icn =Sprite.addr $no-up |
|
| 39 |
+ DUP #05 ROR #01 AND #01 NEQ ,$no-down ROT JMP2? POP2 |
|
| 40 |
+ ( move ) ~Sprite.y INCR2 =Sprite.y ,down_icn =Sprite.addr $no-down |
|
| 41 |
+ DUP #06 ROR #01 AND #01 NEQ ,$no-left ROT JMP2? POP2 |
|
| 42 |
+ ( move ) ~Sprite.x DECR2 =Sprite.x ,left_icn =Sprite.addr $no-left |
|
| 43 |
+ DUP #07 ROR #01 AND #01 NEQ ,$no-right ROT JMP2? POP2 |
|
| 44 |
+ ( move ) ~Sprite.x INCR2 =Sprite.x ,right_icn =Sprite.addr $no-right |
|
| 45 |
+ POP |
|
| 50 | 46 |
|
| 51 |
-@redraw |
|
| 52 |
- |
|
| 53 | 47 |
( draw face ) |
| 54 | 48 |
#11 =Sprite.color |
| 49 |
+ |
|
| 55 | 50 |
( draw slime ) |
| 56 | 51 |
,slime_icn =Sprite.addr |
| 57 | 52 |
~slime =Sprite.color |
| 58 | 53 |
|
| 59 |
-RTN |
|
| 54 |
+BRK |
|
| 60 | 55 |
|
| 61 | 56 |
@default_icn [ 3c7e ffdb ffe7 7e3c ] |
| 62 | 57 |
@up_icn [ 2466 e7db ffff 7e3c ] |
| ... | ... |
@@ -67,6 +62,7 @@ RTN |
| 67 | 62 |
|
| 68 | 63 |
|d000 @ERROR BRK |
| 69 | 64 |
|
| 65 |
+|FF00 ;Console { pad 8 char 1 byte 1 short 2 }
|
|
| 70 | 66 |
|FF10 ;Screen { width 2 height 2 pad 4 y 2 x 2 color 1 }
|
| 71 | 67 |
|FF20 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
|
| 72 | 68 |
|FF30 ;Controller { buttons 1 }
|