--- src/xmain.c 2012-12-22 07:53:19.000000000 +0000 +++ src/xmain.c 2022-09-07 22:11:24.405433694 +0100 @@ -57,6 +57,8 @@ mem+0xe000 }; +int is_fast_speed = 0; + unsigned long tstates=0,tsmax=62500; int memattr[8]={0,1,1,1,1,1,1,1}; /* 8K RAM Banks */ @@ -252,13 +254,28 @@ tape_attach(tape_filename); break; + case XK_F10: + if (is_fast_speed == 1) { + normal_speed(); + is_fast_speed = 0; + } else { + fast_speed(); + is_fast_speed = 1; + } + break; + case XK_F11: - printf("Enter spool file:"); - scanf("%256s", spool_filename); - spooler_open(spool_filename); + if (!spooler_active()) { + printf("Enter spool file:"); + scanf("%256s", spool_filename); + spooler_open(spool_filename); + } else { + spooler_close(); + } break; case XK_F12: + spooler_close(); reset_ace = 1; /* will cause a reset */ memset(mem+8192, 0xff, 57344); refresh_screen = 1; @@ -270,13 +287,14 @@ void main(int argc, char **argv) { - printf("xace: Jupiter ACE emulator v%s (by Edward Patel)\n", XACE_VERSION); + printf("xace: Jupiter ACE emulator v%s (by Edward Patel, with Slackware mods)\n", XACE_VERSION); printf("Keys:\n"); printf("\tF1 - Delete Line\n"); printf("\tF3 - Attach a tape image\n"); printf("\tF4 - Inverse Video\n"); printf("\tF9 - Graphics\n"); - printf("\tF11 - Spool from a file\n"); + printf("\tF10 - Toggle Normal/Fast Speed\n"); + printf("\tF11 - Start/Stop Spool from a file\n"); printf("\tF12 - Reset\n"); printf("\tEsc - Break\n"); printf("\tCtrl-Q - Quit xAce\n"); @@ -568,16 +586,16 @@ XAutoRepeatOn(display),XFlush(display); break; case KeyPress: - if (!spooler_active()) { kev = (XKeyEvent *)&xev; XLookupString(kev, key_buf, 20, &ks, NULL); + if (!spooler_active() || ks == XK_F10 || ks == XK_F11 || ks == XK_F12 ) { keyboard_keypress(ks, kev->state); } break; case KeyRelease: - if (!spooler_active()) { kev = (XKeyEvent *)&xev; XLookupString(kev, key_buf, 20, &ks, NULL); + if (!spooler_active() || ks == XK_F10 || ks == XK_F11 || ks == XK_F12 ) { keyboard_keyrelease(ks, kev->state); } break;