summaryrefslogtreecommitdiff
path: root/apps/plugins/chip8.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2004-10-17 00:54:09 +0000
committerJens Arnold <amiconn@rockbox.org>2004-10-17 00:54:09 +0000
commit79afbafa669bee52059d980ae887dfa06948c252 (patch)
treeb359f4cb336fbd477ec990a37b86a73f8266e455 /apps/plugins/chip8.c
parent7c2496d35a1046d6383a7df8a78a1e9ba5cf7607 (diff)
downloadrockbox-79afbafa669bee52059d980ae887dfa06948c252.tar.gz
rockbox-79afbafa669bee52059d980ae887dfa06948c252.zip
Plugin rework 2: (most) Compile-time keyboard configuration, for Ondio adaption. (all) Now using the default event handler, standard placement is now in switch() default case. (calendar, chip8) Fixed usb handling.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5295 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/chip8.c')
-rw-r--r--apps/plugins/chip8.c87
1 files changed, 62 insertions, 25 deletions
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index 91c25302dd..aa81b263dc 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -23,6 +23,27 @@
23#ifdef HAVE_LCD_BITMAP 23#ifdef HAVE_LCD_BITMAP
24#ifndef SIMULATOR /* not unless lcd_blit() is implemented and mp3_xx stubbed */ 24#ifndef SIMULATOR /* not unless lcd_blit() is implemented and mp3_xx stubbed */
25 25
26/* variable button definitions */
27#if CONFIG_KEYPAD == RECORDER_PAD /* only 9 out of 16 chip8 buttons */
28#define CHIP8_KEY1 BUTTON_F1
29#define CHIP8_KEY2 BUTTON_UP
30#define CHIP8_KEY3 BUTTON_F3
31#define CHIP8_KEY4 BUTTON_LEFT
32#define CHIP8_KEY5 BUTTON_PLAY
33#define CHIP8_KEY6 BUTTON_RIGHT
34#define CHIP8_KEY7 BUTTON_F2
35#define CHIP8_KEY8 BUTTON_DOWN
36#define CHIP8_KEY9 BUTTON_ON
37
38#elif CONFIG_KEYPAD == ONDIO_PAD /* even more limited */
39#define CHIP8_KEY2 BUTTON_UP
40#define CHIP8_KEY4 BUTTON_LEFT
41#define CHIP8_KEY5 BUTTON_MENU
42#define CHIP8_KEY6 BUTTON_RIGHT
43#define CHIP8_KEY8 BUTTON_DOWN
44
45#endif
46
26static struct plugin_api* rb; /* here is a global api struct pointer */ 47static struct plugin_api* rb; /* here is a global api struct pointer */
27unsigned char lcd_framebuf[8][64]; /* frame buffer in hardware fomat */ 48unsigned char lcd_framebuf[8][64]; /* frame buffer in hardware fomat */
28 49
@@ -407,33 +428,43 @@ static void chip8_update_display(void)
407 428
408static void chip8_keyboard(void) 429static void chip8_keyboard(void)
409{ 430{
410 switch (rb->button_get(false)) 431 int button = rb->button_get(false);
432 switch (button)
411 { 433 {
412 case BUTTON_OFF: /* Abort Emulator */ 434 case BUTTON_OFF: /* Abort Emulator */
413 chip8_running = false; 435 chip8_running = 0;
414 break; 436 break;
415 437
416 case BUTTON_UP: chip8_keys[2] = 1; break; 438 case CHIP8_KEY2: chip8_keys[2] = 1; break;
417 case BUTTON_UP | BUTTON_REL: chip8_keys[2] = 0; break; 439 case CHIP8_KEY2 | BUTTON_REL: chip8_keys[2] = 0; break;
418 case BUTTON_LEFT: chip8_keys[4] = 1; break; 440 case CHIP8_KEY4: chip8_keys[4] = 1; break;
419 case BUTTON_LEFT | BUTTON_REL: chip8_keys[4] = 0; break; 441 case CHIP8_KEY4 | BUTTON_REL: chip8_keys[4] = 0; break;
420 case BUTTON_RIGHT: chip8_keys[6] = 1; break; 442 case CHIP8_KEY6: chip8_keys[6] = 1; break;
421 case BUTTON_RIGHT | BUTTON_REL: chip8_keys[6] = 0; break; 443 case CHIP8_KEY6 | BUTTON_REL: chip8_keys[6] = 0; break;
422 case BUTTON_DOWN: chip8_keys[8] = 1; break; 444 case CHIP8_KEY8: chip8_keys[8] = 1; break;
423 case BUTTON_DOWN | BUTTON_REL: chip8_keys[8] = 0; break; 445 case CHIP8_KEY8 | BUTTON_REL: chip8_keys[8] = 0; break;
424 case BUTTON_PLAY: chip8_keys[5] = 1; break; 446 case CHIP8_KEY5: chip8_keys[5] = 1; break;
425 case BUTTON_PLAY | BUTTON_REL: chip8_keys[5] = 0; break; 447 case CHIP8_KEY5 | BUTTON_REL: chip8_keys[5] = 0; break;
426 case BUTTON_F1: chip8_keys[1] = 1; break; 448#ifdef CHIP8_KEY1
427 case BUTTON_F1 | BUTTON_REL: chip8_keys[1] = 0; break; 449 case CHIP8_KEY1: chip8_keys[1] = 1; break;
428 case BUTTON_F2: chip8_keys[7] = 1; break; 450 case CHIP8_KEY1 | BUTTON_REL: chip8_keys[1] = 0; break;
429 case BUTTON_F2 | BUTTON_REL: chip8_keys[7] = 0; break; 451#endif
430 case BUTTON_F3: chip8_keys[3] = 1; break; 452#ifdef CHIP8_KEY3
431 case BUTTON_F3 | BUTTON_REL: chip8_keys[3] = 0; break; 453 case CHIP8_KEY3: chip8_keys[3] = 1; break;
432 case BUTTON_ON: chip8_keys[9] = 1; break; 454 case CHIP8_KEY3 | BUTTON_REL: chip8_keys[3] = 0; break;
433 case BUTTON_ON | BUTTON_REL: chip8_keys[9] = 0; break; 455#endif
434 456#ifdef CHIP8_KEY7
435 case SYS_USB_CONNECTED: 457 case CHIP8_KEY7: chip8_keys[7] = 1; break;
436 chip8_running = false; 458 case CHIP8_KEY7 | BUTTON_REL: chip8_keys[7] = 0; break;
459#endif
460#ifdef CHIP8_KEY9
461 case CHIP8_KEY9: chip8_keys[9] = 1; break;
462 case CHIP8_KEY9 | BUTTON_REL: chip8_keys[9] = 0; break;
463#endif
464
465 default:
466 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
467 chip8_running = 2; /* indicates stopped because of USB */
437 break; 468 break;
438 } 469 }
439} 470}
@@ -556,7 +587,7 @@ bool chip8_run(char* file)
556 } 587 }
557 588
558 chip8_reset(); 589 chip8_reset();
559 while (chip8_running) chip8_execute(); 590 while (chip8_running == 1) chip8_execute();
560 591
561 if (!is_playing) 592 if (!is_playing)
562 { /* stop it if we used audio */ 593 { /* stop it if we used audio */
@@ -592,7 +623,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
592 } 623 }
593 624
594 /* now go ahead and have fun! */ 625 /* now go ahead and have fun! */
595 return chip8_run(filename) ? PLUGIN_OK : PLUGIN_ERROR; 626 if (chip8_run(filename))
627 if (chip8_running == 0)
628 return PLUGIN_OK;
629 else
630 return PLUGIN_USB_CONNECTED;
631 else
632 return PLUGIN_ERROR;
596} 633}
597 634
598#endif /* #ifndef SIMULATOR */ 635#endif /* #ifndef SIMULATOR */