... | ... |
@@ -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 examples/dev.mouse.usm bin/boot.rom |
|
23 |
+./bin/assembler examples/dev.ctrl.usm bin/boot.rom |
|
24 | 24 |
./bin/emulator bin/boot.rom |
... | ... |
@@ -304,18 +304,16 @@ doctrl(Uxn *u, SDL_Event *event, int z) |
304 | 304 |
Uint16 addr = devctrl->addr; |
305 | 305 |
if(z && event->key.keysym.sym == SDLK_h && SDL_GetModState() & KMOD_LCTRL) |
306 | 306 |
GUIDES = !GUIDES; |
307 |
- if(SDL_GetModState() & KMOD_LCTRL || SDL_GetModState() & KMOD_RCTRL) |
|
308 |
- flag = 0x01; |
|
309 |
- if(SDL_GetModState() & KMOD_LALT || SDL_GetModState() & KMOD_RALT) |
|
310 |
- flag = 0x02; |
|
311 | 307 |
switch(event->key.keysym.sym) { |
308 |
+ case SDLK_LCTRL: flag = 0x01; break; |
|
309 |
+ case SDLK_LALT: flag = 0x02; break; |
|
312 | 310 |
case SDLK_BACKSPACE: |
313 | 311 |
flag = 0x04; |
314 |
- if(z) u->ram.dat[0xff40] = 0x08; |
|
312 |
+ if(z) u->ram.dat[devkey->addr] = 0x08; |
|
315 | 313 |
break; |
316 | 314 |
case SDLK_RETURN: |
317 | 315 |
flag = 0x08; |
318 |
- if(z) u->ram.dat[0xff40] = 0x0d; |
|
316 |
+ if(z) u->ram.dat[devkey->addr] = 0x0d; |
|
319 | 317 |
break; |
320 | 318 |
case SDLK_UP: flag = 0x10; break; |
321 | 319 |
case SDLK_DOWN: flag = 0x20; break; |
... | ... |
@@ -9,47 +9,39 @@ file_extensions: |
9 | 9 |
scope: source.usm |
10 | 10 |
|
11 | 11 |
contexts: |
12 |
- prototype: |
|
13 |
- - include: comments |
|
14 |
- |
|
15 | 12 |
main: |
16 |
- - include: keywords |
|
17 |
- - include: numbers |
|
18 |
- - include: strings |
|
19 |
- |
|
20 |
- numbers: |
|
21 |
- - match: '\|(\S+)\s?' |
|
22 |
- scope: punctuation.definition |
|
23 |
- pop: true |
|
24 |
- - match: '\_(\S+)\s?' |
|
25 |
- scope: punctuation.definition |
|
26 |
- pop: true |
|
27 |
- - match: '\+(\S+)\s?' |
|
28 |
- scope: keyword.control |
|
29 |
- pop: true |
|
30 |
- - match: '\-(\S+)\s?' |
|
31 |
- scope: keyword.control |
|
32 |
- pop: true |
|
33 |
- - match: '\~(\S+)\s?' |
|
34 |
- scope: keyword.control |
|
35 |
- pop: true |
|
36 |
- - match: '\=(\S+)\s?' |
|
37 |
- scope: keyword.control |
|
38 |
- pop: true |
|
39 |
- |
|
40 |
- strings: |
|
41 |
- - match: '\:(\S+)\s?' |
|
13 |
+ # pointer |
|
14 |
+ - match: '\@(\S+)\s?' |
|
42 | 15 |
scope: string.control |
43 | 16 |
pop: true |
17 |
+ # jump |
|
18 |
+ - match: '\|(\S+)\s?' |
|
19 |
+ scope: variable.control |
|
20 |
+ pop: true |
|
21 |
+ # variables |
|
44 | 22 |
- match: '\;(\S+)\s?' |
45 | 23 |
scope: string.control |
46 | 24 |
pop: true |
47 |
- - match: '\@(\S+)\s?' |
|
25 |
+ # constants |
|
26 |
+ - match: '\:(\S+)\s?' |
|
48 | 27 |
scope: string.control |
49 | 28 |
pop: true |
29 |
+ # structs |
|
50 | 30 |
- match: '\&(\S+)\s?' |
51 | 31 |
scope: string.control |
52 | 32 |
pop: true |
33 |
+ |
|
34 |
+ # Special |
|
35 |
+ |
|
36 |
+ - match: '\~(\S+)\s?' |
|
37 |
+ scope: entity.name.type |
|
38 |
+ pop: true |
|
39 |
+ - match: '\=(\S+)\s?' |
|
40 |
+ scope: entity.name.type |
|
41 |
+ pop: true |
|
42 |
+ |
|
43 |
+ # Pushing to stack |
|
44 |
+ |
|
53 | 45 |
- match: '\,(\S+)\s?' |
54 | 46 |
scope: keyword.control |
55 | 47 |
pop: true |
... | ... |
@@ -58,21 +50,31 @@ contexts: |
58 | 50 |
pop: true |
59 | 51 |
- match: '\.(\S+)\s?' |
60 | 52 |
scope: keyword.control |
53 |
+ - match: '\+(\S+)\s?' |
|
54 |
+ scope: string.control |
|
61 | 55 |
pop: true |
62 |
- - match: '\"(\S+)\s?' |
|
63 |
- scope: keyword.control |
|
64 |
- pop: true |
|
65 |
- - match: '\[' |
|
66 |
- scope: punctuation.definition.keyword.usm |
|
56 |
+ - match: '\-(\S+)\s?' |
|
57 |
+ scope: string.control |
|
58 |
+ |
|
59 |
+ # Blocks |
|
60 |
+ |
|
61 |
+ - match: '\{' |
|
62 |
+ scope: variable.control |
|
67 | 63 |
push: |
68 |
- - meta_scope: keyword.line.double-slash.usm |
|
69 |
- - match: '\]' |
|
64 |
+ - meta_scope: variable.control |
|
65 |
+ - match: '\}' |
|
70 | 66 |
pop: true |
71 | 67 |
|
72 |
- comments: |
|
73 | 68 |
- match: '\(' |
74 |
- scope: punctuation.definition.comment.usm |
|
69 |
+ scope: comment |
|
75 | 70 |
push: |
76 |
- - meta_scope: comment.line.double-slash.usm |
|
71 |
+ - meta_scope: comment.line |
|
77 | 72 |
- match: '\)' |
78 | 73 |
pop: true |
74 |
+ |
|
75 |
+ - match: '\[' |
|
76 |
+ scope: keyword |
|
77 |
+ push: |
|
78 |
+ - meta_scope: keyword.line |
|
79 |
+ - match: '\]' |
|
80 |
+ pop: true |
... | ... |
@@ -4,58 +4,70 @@ |
4 | 4 |
&Sprite { pad 8 x 2 y 2 addr 2 color 1 } |
5 | 5 |
&Controller { buttons 1 } |
6 | 6 |
|
7 |
-&Point2d { x 2 y 2 } |
|
8 |
- |
|
9 |
-;pos Point2d |
|
10 |
-;sprite 2 |
|
7 |
+;slime-color 1 |
|
11 | 8 |
|
12 | 9 |
|0100 @RESET |
13 | 10 |
|
14 | 11 |
( set origin ) |
15 |
- ~dev/screen.width #0002 DIV2 =pos.x |
|
16 |
- ~dev/screen.height #0002 DIV2 =pos.y |
|
17 |
- |
|
18 |
- #12 ,up_icn ~pos.y ~pos.x ,draw-sprite JSR |
|
12 |
+ ~dev/screen.width #0002 DIV2 =dev/sprite.x |
|
13 |
+ ~dev/screen.height #0002 DIV2 =dev/sprite.y |
|
14 |
+ ,default_icn =dev/sprite.addr |
|
15 |
+ #11 =dev/sprite.color |
|
16 |
+ #0a =slime-color |
|
19 | 17 |
|
20 | 18 |
BRK |
21 | 19 |
|
22 | 20 |
|c000 @FRAME |
21 |
+ |
|
22 |
+ #0a =slime-color |
|
23 |
+ ( hold ctrl key to change slime color ) |
|
24 |
+ ,no-ctrl ~dev/ctrl.buttons #0f AND #01 NEQ JMP? POP2 |
|
25 |
+ #05 =slime-color |
|
26 |
+ @no-ctrl |
|
27 |
+ ( hold alt key to change slime color ) |
|
28 |
+ ,no-alt ~dev/ctrl.buttons #0f AND #02 NEQ JMP? POP2 |
|
29 |
+ #0f =slime-color |
|
30 |
+ @no-alt |
|
31 |
+ ( detect movement ) |
|
32 |
+ ,no-up ~dev/ctrl.buttons #f0 AND #10 NEQ JMP? POP2 |
|
33 |
+ ( clear ) #10 =dev/sprite.color |
|
34 |
+ ( move ) ~dev/sprite.y #0001 SUB2 =dev/sprite.y ,up_icn =dev/sprite.addr |
|
35 |
+ ( draw ) ,redraw JSR BRK |
|
36 |
+ @no-up |
|
37 |
+ ,no-down ~dev/ctrl.buttons #f0 AND #20 NEQ JMP? POP2 |
|
38 |
+ ( clear ) #10 =dev/sprite.color |
|
39 |
+ ( move ) ~dev/sprite.y #0001 ADD2 =dev/sprite.y ,down_icn =dev/sprite.addr |
|
40 |
+ ( draw ) ,redraw JSR BRK |
|
41 |
+ @no-down |
|
42 |
+ ,no-left ~dev/ctrl.buttons #f0 AND #40 NEQ JMP? POP2 |
|
43 |
+ ( clear ) #10 =dev/sprite.color |
|
44 |
+ ( move ) ~dev/sprite.x #0001 SUB2 =dev/sprite.x ,left_icn =dev/sprite.addr |
|
45 |
+ ( draw ) ,redraw JSR BRK |
|
46 |
+ @no-left |
|
47 |
+ ,no-right ~dev/ctrl.buttons #f0 AND #80 NEQ JMP? POP2 |
|
48 |
+ ( clear ) #10 =dev/sprite.color |
|
49 |
+ ( move ) ~dev/sprite.x #0001 ADD2 =dev/sprite.x ,right_icn =dev/sprite.addr |
|
50 |
+ ( draw ) ,redraw JSR BRK |
|
51 |
+ @no-right |
|
23 | 52 |
|
24 |
- ,default_icn =sprite |
|
53 |
+BRK |
|
25 | 54 |
|
26 |
- ~dev/ctrl.buttons #10 NEQ ,next1 ROT JMP? POP2 |
|
27 |
- ,up_icn =sprite |
|
28 |
- ~pos.y #0001 SUB2 =pos.y |
|
29 |
- @next1 |
|
30 |
- ~dev/ctrl.buttons #20 NEQ ,next2 ROT JMP? POP2 |
|
31 |
- ,down_icn =sprite |
|
32 |
- ~pos.y #0001 ADD2 =pos.y |
|
33 |
- @next2 |
|
34 |
- ~dev/ctrl.buttons #40 NEQ ,next3 ROT JMP? POP2 |
|
35 |
- ,left_icn =sprite |
|
36 |
- ~pos.x #0001 SUB2 =pos.x |
|
37 |
- @next3 |
|
38 |
- ~dev/ctrl.buttons #80 NEQ ,end ROT JMP? POP2 |
|
39 |
- ,right_icn =sprite |
|
40 |
- ~pos.x #0001 ADD2 =pos.x |
|
41 |
- @end |
|
42 |
- ( redraw ) |
|
43 |
- #13 ~sprite ~pos.y ~pos.x ,draw-sprite JSR |
|
55 |
+@redraw |
|
56 |
+ |
|
57 |
+ ( draw face ) |
|
58 |
+ #11 =dev/sprite.color |
|
59 |
+ ( draw slime ) |
|
60 |
+ ,slime_icn =dev/sprite.addr |
|
61 |
+ ~slime-color =dev/sprite.color |
|
44 | 62 |
|
45 |
-BRK |
|
63 |
+RTS |
|
46 | 64 |
|
47 | 65 |
@default_icn [ 3c7e ffdb ffe7 7e3c ] |
48 | 66 |
@up_icn [ 2466 e7db ffff 7e3c ] |
49 | 67 |
@down_icn [ 3c7e ffff dbe7 6624 ] |
50 | 68 |
@left_icn [ 3c7e ef1f 1fef 7e3c ] |
51 | 69 |
@right_icn [ 3c7e f7f8 f8f7 7e3c ] |
52 |
- |
|
53 |
-@draw-sprite |
|
54 |
- =dev/sprite.x |
|
55 |
- =dev/sprite.y |
|
56 |
- =dev/sprite.addr |
|
57 |
- =dev/sprite.color |
|
58 |
- RTS |
|
70 |
+@slime_icn [ 0000 183c 3c18 0000 ] |
|
59 | 71 |
|
60 | 72 |
|d000 @ERROR BRK |
61 | 73 |
|
... | ... |
@@ -63,5 +75,5 @@ BRK |
63 | 75 |
|FF20 ;dev/sprite Sprite |
64 | 76 |
|FF30 ;dev/ctrl Controller |
65 | 77 |
|
66 |
-|FFF0 [ 02ac 05bb 0b53 ] ( palette ) |
|
78 |
+|FFF0 [ 0daf 02ff 035f ] ( palette ) |
|
67 | 79 |
|FFFA .RESET .FRAME .ERROR |