Browse code

Pass fn keys directly to the supervisor

neauoire authored on 07/01/2022 18:55:09
Showing 5 changed files
... ...
@@ -29,7 +29,7 @@
29 29
 |40 @Audio1     &vector $2 &position $2 &output $1 &pad    $3 &adsr   $2 &length  $2 &addr    $2 &volume $1 &pitch $1
30 30
 |50 @Audio2     &vector $2 &position $2 &output $1 &pad    $3 &adsr   $2 &length  $2 &addr    $2 &volume $1 &pitch $1
31 31
 |60 @Audio3     &vector $2 &position $2 &output $1 &pad    $3 &adsr   $2 &length  $2 &addr    $2 &volume $1 &pitch $1
32
-|80 @Controller &vector $2 &button   $1 &key    $1
32
+|80 @Controller &vector $2 &button   $1 &key    $1 &func   $1
33 33
 |90 @Mouse      &vector $2 &x        $2 &y      $2 &state  $1 &pad    $3 &scrollx $2 &scrolly $2
34 34
 |a0 @File       &vector $2 &success  $2 &stat   $2 &delete $1 &append $1 &name    $2 &length  $2 &read   $2 &write $2
35 35
 |b0 @DateTime   &year   $2 &month    $1 &day    $1 &hour   $1 &minute $1 &second  $1 &dotw    $1 &doty   $2 &isdst $1
... ...
@@ -29,6 +29,7 @@
29 29
 
30 30
 |00 @System     &vector $2 &wst      $1 &rst    $1 &eaddr  $2 &ecode  $1 &pad     $1 &r       $2 &g      $2 &b     $2 &debug  $1 &halt $1
31 31
 |20 @Screen     &vector $2 &width    $2 &height $2 &auto   $1 &pad $1 &x      $2 &y      $2 &addr $2 &pixel $1 &sprite $1
32
+|80 @Controller &vector $2 &button   $1 &key    $1 &func   $1
32 33
 
33 34
 ( variables )
34 35
 
... ...
@@ -53,6 +54,7 @@
53 54
 	( vectors )
54 55
 	;on-error .System/vector DEO2
55 56
 	;on-frame .Screen/vector DEO2
57
+	;on-button .Controller/vector DEO2
56 58
 
57 59
 BRK
58 60
 
... ...
@@ -63,6 +65,12 @@ BRK
63 65
 
64 66
 BRK
65 67
 
68
+@on-button ( -> )
69
+
70
+	.Controller/func DEI DEBUG
71
+
72
+BRK
73
+
66 74
 @on-error ( -> )
67 75
 
68 76
 	( background )
... ...
@@ -39,4 +39,14 @@ controller_key(Device *d, Uint8 key)
39 39
 		uxn_eval(d->u, d->vector);
40 40
 		d->dat[3] = 0x00;
41 41
 	}
42
+}
43
+
44
+void
45
+controller_special(Device *d, Uint8 key)
46
+{
47
+	if(key) {
48
+		d->dat[4] = key;
49
+		uxn_eval(d->u, d->vector);
50
+		d->dat[4] = 0x00;
51
+	}
42 52
 }
43 53
\ No newline at end of file
... ...
@@ -12,4 +12,5 @@ WITH REGARD TO THIS SOFTWARE.
12 12
 
13 13
 void controller_down(Device *d, Uint8 mask);
14 14
 void controller_up(Device *d, Uint8 mask);
15
-void controller_key(Device *d, Uint8 key);
16 15
\ No newline at end of file
16
+void controller_key(Device *d, Uint8 key);
17
+void controller_special(Device *d, Uint8 key);
17 18
\ No newline at end of file
... ...
@@ -272,8 +272,8 @@ start(Uxn *u, char *rom)
272 272
 	/* audio2   */ uxn_port(u, 0x5, 0xffff, audio_dei, audio_deo);
273 273
 	/* audio3   */ uxn_port(u, 0x6, 0xffff, audio_dei, audio_deo);
274 274
 	/* unused   */ uxn_port(u, 0x7, 0xffff, nil_dei, nil_deo);
275
-	/* control  */ devctrl = uxn_port(u, 0x8, 0xffff, nil_dei, nil_deo);
276
-	/* mouse    */ devmouse = uxn_port(u, 0x9, 0xffff, nil_dei, nil_deo);
275
+	/* control  */ devctrl = uxn_port(u, 0x8, 0x0000, nil_dei, nil_deo);
276
+	/* mouse    */ devmouse = uxn_port(u, 0x9, 0x0000, nil_dei, nil_deo);
277 277
 	/* file     */ uxn_port(u, 0xa, 0xffff, nil_dei, file_deo);
278 278
 	/* datetime */ uxn_port(u, 0xb, 0xffff, datetime_dei, nil_deo);
279 279
 	/* unused   */ uxn_port(u, 0xc, 0xffff, nil_dei, nil_deo);
... ...
@@ -285,6 +285,7 @@ start(Uxn *u, char *rom)
285 285
 	uxn_port(&supervisor, 0x0, 0xffff, system_dei, system_deo);
286 286
 	uxn_port(&supervisor, 0x1, 0xffff, nil_dei, console_deo);
287 287
 	uxn_port(&supervisor, 0x2, 0xffff, screen_dei, screen_deo);
288
+	uxn_port(&supervisor, 0x8, 0x0000, nil_dei, nil_deo);
288 289
 
289 290
 	uxn_eval(&supervisor, PAGE_PROGRAM);
290 291
 
... ...
@@ -348,6 +349,22 @@ get_button(SDL_Event *event)
348 349
 	return 0x00;
349 350
 }
350 351
 
352
+static Uint8
353
+get_fkey(SDL_Event *event)
354
+{
355
+	switch(event->key.keysym.sym) {
356
+	case SDLK_F1: return 0x01;
357
+	case SDLK_F2: return 0x02;
358
+	case SDLK_F3: return 0x04;
359
+	case SDLK_F4: return 0x08;
360
+	case SDLK_F5: return 0x10;
361
+	case SDLK_F6: return 0x20;
362
+	case SDLK_F7: return 0x40;
363
+	case SDLK_F8: return 0x80;
364
+	}
365
+	return 0x00;
366
+}
367
+
351 368
 static Uint8
352 369
 get_button_joystick(SDL_Event *event)
353 370
 {
... ...
@@ -442,6 +459,8 @@ run(Uxn *u)
442 459
 					controller_key(devctrl, get_key(&event));
443 460
 				else if(get_button(&event))
444 461
 					controller_down(devctrl, get_button(&event));
462
+				else if(get_fkey(&event))
463
+					controller_special(&supervisor.dev[0x8], get_fkey(&event));
445 464
 				else
446 465
 					do_shortcut(u, &event);
447 466
 				ksym = event.key.keysym.sym;