... | ... |
@@ -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/devctrl.usm bin/boot.rom |
|
23 |
+./bin/assembler examples/devmouse.usm bin/boot.rom |
|
24 | 24 |
./bin/emulator bin/boot.rom |
... | ... |
@@ -99,8 +99,8 @@ paintchr(Uint8 *dst, Uint16 x, Uint16 y, Uint8 *sprite) |
99 | 99 |
Uint16 v, h; |
100 | 100 |
for(v = 0; v < 8; v++) |
101 | 101 |
for(h = 0; h < 8; h++) { |
102 |
- Uint8 ch1 = ((sprite[v] >> h) & 0x1); |
|
103 |
- Uint8 ch2 = (((sprite[v + 8] >> h) & 0x1) << 1); |
|
102 |
+ Uint8 ch1 = ((sprite[v] >> (7 - h)) & 0x1); |
|
103 |
+ Uint8 ch2 = (((sprite[v + 8] >> (7 - h)) & 0x1) << 1); |
|
104 | 104 |
paintpixel(dst, x + h, y + v, ch1 + ch2); |
105 | 105 |
} |
106 | 106 |
} |
... | ... |
@@ -266,8 +266,14 @@ domouse(SDL_Event *event) |
266 | 266 |
devmouse->mem[4] = event->button.button == SDL_BUTTON_LEFT; |
267 | 267 |
devmouse->mem[5] = 0x00; |
268 | 268 |
switch(event->type) { |
269 |
- case SDL_MOUSEBUTTONUP: devmouse->mem[5] = 0x10; break; |
|
270 |
- case SDL_MOUSEBUTTONDOWN: devmouse->mem[5] = 0x01; break; |
|
269 |
+ case SDL_MOUSEBUTTONUP: |
|
270 |
+ devmouse->mem[4] = 0; |
|
271 |
+ devmouse->mem[5] = 0x10; |
|
272 |
+ break; |
|
273 |
+ case SDL_MOUSEBUTTONDOWN: |
|
274 |
+ devmouse->mem[4] = event->button.button == SDL_BUTTON_LEFT; |
|
275 |
+ devmouse->mem[5] = 0x01; |
|
276 |
+ break; |
|
271 | 277 |
} |
272 | 278 |
} |
273 | 279 |
|
274 | 280 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,132 @@ |
1 |
+( mouse ) |
|
2 |
+ |
|
3 |
+:dev/r fff8 ( std read port ) |
|
4 |
+:dev/w fff9 ( std write port ) |
|
5 |
+ |
|
6 |
+;mousex 2 ;mousey 2 |
|
7 |
+;lastx 2 ;lasty 2 |
|
8 |
+;catx 2 ;caty 2 |
|
9 |
+;state 1 ;timer 1 |
|
10 |
+ |
|
11 |
+|0100 @RESET |
|
12 |
+ |
|
13 |
+ #05 =dev/r ( set dev/read mouse ) |
|
14 |
+ #02 =dev/w ( set dev/write to sprite ) |
|
15 |
+ ( position cat ) |
|
16 |
+ #0050 =catx #0058 =caty |
|
17 |
+ ( draw polycat ) |
|
18 |
+ ,draw-polycat JSR |
|
19 |
+ |
|
20 |
+BRK |
|
21 |
+ |
|
22 |
+|c000 @FRAME |
|
23 |
+ |
|
24 |
+ ( clear last cursor ) |
|
25 |
+ #10 ,clear_icn ~lastx ~lasty ,draw-sprite JSR |
|
26 |
+ ( record mouse positions ) |
|
27 |
+ #00 IOR2 =mousex #02 IOR2 =mousey |
|
28 |
+ ( record mouse state ) |
|
29 |
+ #04 IOR #11 ADD =state |
|
30 |
+ |
|
31 |
+ #04 IOR #01 NEQ ,no-click ROT JMP? POP2 |
|
32 |
+ #50 =timer |
|
33 |
+ @no-click |
|
34 |
+ |
|
35 |
+ ( draw mouse ) |
|
36 |
+ ~state ,cursor_icn ~mousex ~mousey ,draw-sprite JSR |
|
37 |
+ ( animate ) |
|
38 |
+ ,animate-polycat JSR |
|
39 |
+ ( update last pos ) |
|
40 |
+ ~mousex =lastx ~mousey =lasty |
|
41 |
+ ~timer #01 ADD =timer |
|
42 |
+ |
|
43 |
+BRK |
|
44 |
+ |
|
45 |
+@draw-polycat |
|
46 |
+ |
|
47 |
+ ( ears ) |
|
48 |
+ ,polycat ~catx ~caty ,draw-sprite-chr JSR |
|
49 |
+ ,polycat #0010 ADD2 ~catx #0008 ADD2 ~caty ,draw-sprite-chr JSR |
|
50 |
+ ( eye ) |
|
51 |
+ ,polycat #0020 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
52 |
+ ,polycat #0030 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
53 |
+ ( body ) |
|
54 |
+ ,polycat #00a0 ADD2 ~catx ~caty #0010 ADD2 ,draw-sprite-chr JSR |
|
55 |
+ ,polycat #00b0 ADD2 ~catx #0008 ADD2 ~caty #0010 ADD2 ,draw-sprite-chr JSR |
|
56 |
+ |
|
57 |
+RTS |
|
58 |
+ |
|
59 |
+@animate-polycat |
|
60 |
+ |
|
61 |
+ ( tail ) |
|
62 |
+ ~timer #50 NEQ ,animate-polycat-tail-next0 ROT JMP? POP2 |
|
63 |
+ ,polycat #00c0 ADD2 ~catx #0008 ADD2 ~caty #0010 ADD2 ,draw-sprite-chr JSR |
|
64 |
+ @animate-polycat-tail-next0 |
|
65 |
+ ~timer #58 NEQ ,animate-polycat-tail-next1 ROT JMP? POP2 |
|
66 |
+ ,polycat #00d0 ADD2 ~catx #0008 ADD2 ~caty #0010 ADD2 ,draw-sprite-chr JSR |
|
67 |
+ @animate-polycat-tail-next1 |
|
68 |
+ ~timer #60 NEQ ,animate-polycat-tail-next2 ROT JMP? POP2 |
|
69 |
+ ,polycat #00b0 ADD2 ~catx #0008 ADD2 ~caty #0010 ADD2 ,draw-sprite-chr JSR |
|
70 |
+ @animate-polycat-tail-next2 |
|
71 |
+ ( look-at ) |
|
72 |
+ ~mousex ~catx #0008 ADD2 GTH2 ,animate-polycat-right ROT JMP? POP2 |
|
73 |
+ @animate-polycat-left |
|
74 |
+ ~mousey ~caty #0008 ADD2 GTH2 ,animate-polycat-left-down ROT JMP? POP2 |
|
75 |
+ @animate-polycat-left-up |
|
76 |
+ ,polycat #0040 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
77 |
+ ,polycat #0050 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
78 |
+ RTS |
|
79 |
+ @animate-polycat-left-down |
|
80 |
+ ,polycat #0020 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
81 |
+ ,polycat #0030 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
82 |
+ RTS |
|
83 |
+ @animate-polycat-right |
|
84 |
+ ~mousey ~caty #0008 ADD2 GTH2 ,animate-polycat-right-down ROT JMP? POP2 |
|
85 |
+ @animate-polycat-right-up |
|
86 |
+ ,polycat #0060 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
87 |
+ ,polycat #0070 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
88 |
+ RTS |
|
89 |
+ @animate-polycat-right-down |
|
90 |
+ ,polycat #0080 ADD2 ~catx ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
91 |
+ ,polycat #0090 ADD2 ~catx #0008 ADD2 ~caty #0008 ADD2 ,draw-sprite-chr JSR |
|
92 |
+ RTS |
|
93 |
+ |
|
94 |
+RTS |
|
95 |
+ |
|
96 |
+@draw-sprite |
|
97 |
+ IOW2 ( y byte ) |
|
98 |
+ IOW2 ( x byte ) |
|
99 |
+ IOW2 ( sprite address ) |
|
100 |
+ IOW ( layer-color ) |
|
101 |
+ RTS |
|
102 |
+ |
|
103 |
+@draw-sprite-chr |
|
104 |
+ IOW2 ( y byte ) |
|
105 |
+ IOW2 ( x byte ) |
|
106 |
+ IOW2 ( sprite address ) |
|
107 |
+ #08 IOW ( layer-color ) |
|
108 |
+ RTS |
|
109 |
+ |
|
110 |
+@clear_icn [ 0000 0000 0000 0000 ] |
|
111 |
+@cursor_icn [ 80c0 e0f0 f8e0 1000 ] |
|
112 |
+ |
|
113 |
+@polycat [ |
|
114 |
+ 0081c 3e3e 7f7f ffff 081c 3e3e 7f7f fffc |
|
115 |
+ 081c 3c3e 7e7e ffff 081c 3c3e 7e7e ff1f |
|
116 |
+ ffff ffff ff7f 3f0f f0e7 cfef f77c 3f0f |
|
117 |
+ ffff ffff fffe fcf0 0783 c1c3 871e fcf0 |
|
118 |
+ ffff ffff ff7f 3f0f f7ef cfe7 f07c 3f0f |
|
119 |
+ ffff ffff fffe fcf0 87c3 c183 071e fcf0 |
|
120 |
+ ffff ffff ff7f 3f0f f0e1 c1e0 f07c 3f0f |
|
121 |
+ ffff ffff fffe fcf0 f7fb f9f3 071e fcf0 |
|
122 |
+ ffff ffff ff7f 3f0f f0e0 c1e1 f07c 3f0f |
|
123 |
+ ffff ffff fffe fcf0 07f3 f9fb f71e fcf0 |
|
124 |
+ 0307 0707 0302 0200 0307 0707 0300 0000 |
|
125 |
+ c0f0 f0e0 e080 8000 c0f2 f9f9 fef8 b000 |
|
126 |
+ c0f0 f0e0 e080 8000 c0f2 faf9 fef8 b000 |
|
127 |
+ c0f0 f0e0 e080 8000 c0f1 faf9 fef8 b000 |
|
128 |
+] |
|
129 |
+ |
|
130 |
+|d000 @ERROR BRK |
|
131 |
+|FFF0 [ 0f85 0fd5 0fb5 ] ( palette ) |
|
132 |
+|FFFA .RESET .FRAME .ERROR |
3 | 136 |
deleted file mode 100644 |
... | ... |
@@ -1,41 +0,0 @@ |
1 |
-( mouse ) |
|
2 |
- |
|
3 |
-:dev/r fff8 ( std read port ) |
|
4 |
-:dev/w fff9 ( std write port ) |
|
5 |
- |
|
6 |
-|0100 @RESET |
|
7 |
- |
|
8 |
- #05 =dev/r ( set dev/read mouse#02 ) |
|
9 |
- #01 =dev/w ( set dev/write screen#01 ) |
|
10 |
- |
|
11 |
-BRK |
|
12 |
- |
|
13 |
-|c000 @FRAME |
|
14 |
- |
|
15 |
- ( get mouse button, or break ) |
|
16 |
- #04 IOR |
|
17 |
- #01 NEQ |
|
18 |
- BRK? |
|
19 |
- |
|
20 |
- ( paint a white pixel ) |
|
21 |
- #01 #01 |
|
22 |
- ,getmouse JSR |
|
23 |
- ,putpixel JSR |
|
24 |
- |
|
25 |
-BRK |
|
26 |
- |
|
27 |
-@getmouse |
|
28 |
- #00 IOR2 ( get mouse x ) |
|
29 |
- #02 IOR2 ( get mouse y ) |
|
30 |
- RTS |
|
31 |
- |
|
32 |
-@putpixel |
|
33 |
- IOW2 ( y short ) |
|
34 |
- IOW2 ( x short ) |
|
35 |
- IOW ( color byte ) |
|
36 |
- IOW ( redraw byte ) |
|
37 |
- RTS |
|
38 |
- |
|
39 |
-|d000 @ERROR BRK |
|
40 |
-|FFF0 [ f2ac 35bb 2b53 ] ( palette ) |
|
41 |
-|FFFA .RESET .FRAME .ERROR |
42 | 0 |
deleted file mode 100644 |
... | ... |
@@ -1,59 +0,0 @@ |
1 |
-( sprite ) |
|
2 |
- |
|
3 |
-:dev/r fff8 ( std read port ) |
|
4 |
-:dev/w fff9 ( std write port ) |
|
5 |
- |
|
6 |
-;mousex 2 ;mousey 2 ;lastx 2 ;lasty 2 ;color 1 |
|
7 |
- |
|
8 |
-|0100 @RESET |
|
9 |
- |
|
10 |
- #05 =dev/r ( set dev/read mouse ) |
|
11 |
- #02 =dev/w ( set dev/write to sprite ) |
|
12 |
- |
|
13 |
- #00 ,rounds_chr #0004 #0004 ,drawsprite JSR |
|
14 |
- |
|
15 |
-BRK |
|
16 |
- |
|
17 |
-|c000 @FRAME |
|
18 |
- |
|
19 |
- #02 =dev/w ( set dev/write to sprite ) |
|
20 |
- |
|
21 |
- ( clear last cursor ) |
|
22 |
- #10 ,clear_icn ~lastx ~lasty ,drawsprite JSR |
|
23 |
- |
|
24 |
- ( record mouse values ) |
|
25 |
- #00 IOR2 =mousex #02 IOR2 =mousey |
|
26 |
- #04 IOR #11 ADD =color |
|
27 |
- |
|
28 |
- ~color ,cursor_icn ~mousex ~mousey ,drawsprite JSR |
|
29 |
- |
|
30 |
- ( check paint ) |
|
31 |
- #04 IOR #00 EQU ,skip ROT JMP? POP2 |
|
32 |
- #05 ,brush_large ~mousex #0004 SUB2 ~mousey #0004 SUB2 ,drawsprite JSR |
|
33 |
- @skip |
|
34 |
- |
|
35 |
- ~mousex =lastx ~mousey =lasty |
|
36 |
- |
|
37 |
-BRK |
|
38 |
- |
|
39 |
-@drawsprite |
|
40 |
- IOW2 ( y byte ) |
|
41 |
- IOW2 ( x byte ) |
|
42 |
- IOW2 ( sprite address ) |
|
43 |
- IOW ( layer-color ) |
|
44 |
- RTS |
|
45 |
- |
|
46 |
-|0200 @SPRITESHEET |
|
47 |
- |
|
48 |
-@rounds_chr [ 3844 92aa 9244 3800 0038 7c7c 7c38 0000 ] |
|
49 |
-@cursor_icn [ 80c0 e0f0 f8e0 1000 ] |
|
50 |
-@clear_icn [ 0000 0000 0000 0000 ] |
|
51 |
-@brush_large [ 387c fefe fe7c 3800 ] |
|
52 |
-@brush_small [ 0038 7c7c 7c38 0000 ] |
|
53 |
- |
|
54 |
-BRK |
|
55 |
- |
|
56 |
-|d000 @ERROR BRK |
|
57 |
- |
|
58 |
-|FFF0 [ f2ac 35bb 2b53 ] ( palette ) |
|
59 |
-|FFFA .RESET .FRAME .ERROR |