Browse code

Implemented devctrl

neauoire authored on 27/02/2021 00:53:09
Showing 5 changed files
... ...
@@ -297,9 +297,10 @@ dotext(SDL_Event *event)
297 297
 }
298 298
 
299 299
 void
300
-doctrl(SDL_Event *event, int z)
300
+doctrl(Uxn *u, SDL_Event *event, int z)
301 301
 {
302 302
 	Uint8 flag = 0x00;
303
+	Uint16 addr = 0xff30; /* TODO: get dynamically */
303 304
 	if(z && event->key.keysym.sym == SDLK_h)
304 305
 		GUIDES = !GUIDES;
305 306
 	if(SDL_GetModState() & KMOD_LCTRL || SDL_GetModState() & KMOD_RCTRL)
... ...
@@ -320,7 +321,7 @@ doctrl(SDL_Event *event, int z)
320 321
 	case SDLK_LEFT: flag = 0x40; break;
321 322
 	case SDLK_RIGHT: flag = 0x80; break;
322 323
 	}
323
-	setflag(&devcontroller->mem[0], flag, z);
324
+	setflag(&u->ram.dat[addr], flag, z);
324 325
 }
325 326
 
326 327
 #pragma mark - Devices
... ...
@@ -439,8 +440,8 @@ start(Uxn *u)
439 440
 			case SDL_MOUSEBUTTONDOWN:
440 441
 			case SDL_MOUSEMOTION: domouse(u, &event); break;
441 442
 			case SDL_TEXTINPUT: dotext(&event); break;
442
-			case SDL_KEYDOWN: doctrl(&event, 1); break;
443
-			case SDL_KEYUP: doctrl(&event, 0); break;
443
+			case SDL_KEYDOWN: doctrl(u, &event, 1); break;
444
+			case SDL_KEYUP: doctrl(u, &event, 0); break;
444 445
 			case SDL_WINDOWEVENT:
445 446
 				if(event.window.event == SDL_WINDOWEVENT_EXPOSED)
446 447
 					redraw(pixels, u);
... ...
@@ -1,9 +1,10 @@
1 1
 ( blank )
2 2
 
3
-&Console { pad 8 stdio 1 }
4
-&Screen  { width 2 height 2 pad 4 y 2 x 2 color 1 }
5
-&Sprite  { pad 8 y 2 x 2 addr 2 color 1 }
6
-&Mouse   { x 2 y 2 state 1 chord 1 }
3
+&Console    { pad 8 stdio 1 }
4
+&Screen     { width 2 height 2 pad 4 y 2 x 2 color 1 }
5
+&Sprite     { pad 8 y 2 x 2 addr 2 color 1 }
6
+&Controller { buttons 1 }
7
+&Mouse      { x 2 y 2 state 1 chord 1 }
7 8
 
8 9
 |0100 @RESET BRK
9 10
 |c000 @FRAME BRK 
... ...
@@ -12,6 +13,7 @@
12 13
 |FF00 ;dev/console Console
13 14
 |FF10 ;dev/screen  Screen
14 15
 |FF20 ;dev/sprite  Sprite
16
+|FF30 ;dev/ctrl    Controller
15 17
 |FF50 ;dev/mouse   Mouse
16 18
 
17 19
 |FFF0 [ f2ac 35bb 2b53 ] ( palette )
18 20
similarity index 50%
19 21
rename from examples/devctrl.usm
20 22
rename to examples/dev.ctrl.usm
... ...
@@ -1,7 +1,8 @@
1 1
 ( controller )
2 2
 
3
-:dev/r fff8 ( const read port )
4
-:dev/w fff9 ( const write port )
3
+&Screen     { width 2 height 2 pad 4 y 2 x 2 color 1 }
4
+&Sprite     { pad 8 x 2 y 2 addr 2 color 1 }
5
+&Controller { buttons 1 }
5 6
 
6 7
 &Point2d { x 2 y 2 }
7 8
 
... ...
@@ -10,38 +11,36 @@
10 11
 
11 12
 |0100 @RESET 
12 13
 
13
-	#03 =dev/r ( set dev/read to controller ) 
14
-	#02 =dev/w ( set dev/write to sprite ) 
15
-	#0080 =pos.x #0040 =pos.y ( origin )
14
+	( set origin )
15
+	~dev/screen.width #0002 DIV2 =pos.x 
16
+	~dev/screen.height #0002 DIV2 =pos.y
16 17
 
17
-	#12 ,up_icn ~pos.x ~pos.y ,draw-sprite JSR
18
+	#12 ,up_icn ~pos.y ~pos.x ,draw-sprite JSR
18 19
 
19 20
 BRK
20 21
 
21 22
 |c000 @FRAME 
22 23
 
23
-	#03 =dev/r ( set dev/read to controller ) 
24
-
25 24
 	,default_icn =sprite
26 25
 
27
-	#00 IOR #10 NEQ ,next1 ROT JMP? POP2
26
+	~dev/ctrl.buttons #10 NEQ ,next1 ROT JMP? POP2
28 27
 		,up_icn =sprite
29 28
 		~pos.y #0001 SUB2 =pos.y
30 29
 	@next1
31
-	#00 IOR #20 NEQ ,next2 ROT JMP? POP2
30
+	~dev/ctrl.buttons #20 NEQ ,next2 ROT JMP? POP2
32 31
 		,down_icn =sprite
33 32
 		~pos.y #0001 ADD2 =pos.y
34 33
 	@next2
35
-	#00 IOR #40 NEQ ,next3 ROT JMP? POP2
34
+	~dev/ctrl.buttons #40 NEQ ,next3 ROT JMP? POP2
36 35
 		,left_icn =sprite
37 36
 		~pos.x #0001 SUB2 =pos.x
38 37
 	@next3
39
-	#00 IOR #80 NEQ ,end ROT JMP? POP2
38
+	~dev/ctrl.buttons #80 NEQ ,end ROT JMP? POP2
40 39
 		,right_icn =sprite
41 40
 		~pos.x #0001 ADD2 =pos.x
42 41
 	@end
43 42
 	( redraw )
44
-	#13 ~sprite ~pos.x ~pos.y ,draw-sprite JSR
43
+	#13 ~sprite ~pos.y ~pos.x ,draw-sprite JSR
45 44
 
46 45
 BRK
47 46
 
... ...
@@ -52,13 +51,17 @@ BRK
52 51
 @right_icn   [ 3c7e f7f8 f8f7 7e3c ]
53 52
 
54 53
 @draw-sprite
55
-	IOW2 ( y byte )
56
-	IOW2 ( x byte )
57
-	IOW2 ( sprite address )
58
-	IOW ( layer-color )
54
+	=dev/sprite.x
55
+	=dev/sprite.y
56
+	=dev/sprite.addr
57
+	=dev/sprite.color
59 58
 	RTS
60 59
 
61 60
 |d000 @ERROR BRK 
62 61
 
62
+|FF10 ;dev/screen Screen
63
+|FF20 ;dev/sprite Sprite
64
+|FF30 ;dev/ctrl   Controller
65
+
63 66
 |FFF0 [ 02ac 05bb 0b53 ] ( palette )
64 67
 |FFFA .RESET .FRAME .ERROR
... ...
@@ -1,7 +1,7 @@
1 1
 ( mouse )
2 2
 
3 3
 &Screen { width 2 height 2 pad 4 y 2 x 2 color 1 }
4
-&Sprite { pad 8 y 2 x 2 addr 2 color 1 }
4
+&Sprite { pad 8 x 2 y 2 addr 2 color 1 }
5 5
 &Mouse  { x 2 y 2 state 1 chord 1 }
6 6
 
7 7
 &Point2d { x 2 y 2 }
... ...
@@ -91,15 +91,15 @@ RTS
91 91
 RTS
92 92
 
93 93
 @draw-sprite
94
-	=dev/sprite.x
95 94
 	=dev/sprite.y
95
+	=dev/sprite.x
96 96
 	=dev/sprite.addr
97 97
 	=dev/sprite.color
98 98
 	RTS
99 99
 
100 100
 @draw-sprite-chr
101
-	=dev/sprite.x
102 101
 	=dev/sprite.y
102
+	=dev/sprite.x
103 103
 	=dev/sprite.addr
104 104
 	#20 =dev/sprite.color
105 105
 	RTS
106 106
deleted file mode 100644
... ...
@@ -1,20 +0,0 @@
1
-( blank )
2
-
3
-:dev/r fff8 ( std read port )
4
-:dev/w fff9 ( std write port )
5
-
6
-&Console { stdout 1 }
7
-
8
-|0100 @RESET 
9
-
10
-
11
-BRK
12
-
13
-|c000 @FRAME BRK 
14
-|d000 @ERROR BRK 
15
-
16
-|FF00 ;dev/console Console
17
-|FF08 ;device2 Device
18
-
19
-|FFF0 [ f2ac 35bb 2b53 ] ( palette )
20
-|FFFA .RESET .FRAME .ERROR