+// SPDX-License-Identifier: MIT
+
#include "m68k.h"
#include "emulator.h"
#include "platforms/platforms.h"
extern volatile unsigned int *gpio;
extern volatile uint16_t srdata;
extern uint8_t realtime_graphics_debug;
+extern uint8_t rtg_on;
uint8_t realtime_disassembly, int2_enabled = 0;
uint32_t do_disasm = 0, old_level;
-char c = 0, c_code = 0, c_type = 0; // @todo temporary main/cpu_task scope workaround until input moved to a thread
uint32_t last_irq = 8, last_last_irq = 8;
+uint8_t end_signal = 0;
+
char disasm_buf[4096];
#define KICKBASE 0xF80000
}*/
if (do_reset) {
cpu_pulse_reset();
- m68k_pulse_reset();
do_reset=0;
usleep(1000000); // 1sec
+ rtg_on=0;
// while(amiga_reset==0);
// printf("CPU emulation reset.\n");
}
-
if (mouse_hook_enabled && (mouse_extra != 0x00)) {
// mouse wheel events have occurred; unlike l/m/r buttons, these are queued as keypresses, so add to end of buffer
switch (mouse_extra) {
// dampen the scroll wheel until next while loop iteration
mouse_extra = 0x00;
}
+
+ if (end_signal)
+ goto stop_cpu_emulation;
+
goto cpu_loop;
-//stop_cpu_emulation:
+stop_cpu_emulation:
printf("[CPU] End of CPU thread\n");
+ return (void *)NULL;
}
void *keyboard_task() {
struct pollfd kbdpoll[1];
int kpollrc;
+ char c = 0, c_code = 0, c_type = 0;
char grab_message[] = "[KBD] Grabbing keyboard from input layer\n",
ungrab_message[] = "[KBD] Ungrabbing keyboard\n";
//m68k_pulse_reset();
printf("CPU emulation reset.\n");
}
- // @todo work out how to signal the main process that we want to quit
- // if (c == 'q') {
- // printf("Quitting and exiting emulator.\n");
- // goto stop_cpu_emulation;
- // }
+ if (c == 'q') {
+ printf("Quitting and exiting emulator.\n");
+ end_signal = 1;
+ goto key_end;
+ }
if (c == 'd') {
realtime_disassembly ^= 1;
do_disasm = 1;
key_end:
printf("[KBD] Keyboard thread ending\n");
+ if (cfg->keyboard_grab) {
+ printf(ungrab_message);
+ release_device(keyboard_fd);
+ }
return (void*)NULL;
}
int g;
//const struct sched_param priority = {99};
- if (argc > 1) {
- irq_delay = atoi(argv[1]);
- printf("Setting IRQ delay to %d loops (%s).\n", irq_delay, argv[1]);
- }
-
// Some command line switch stuffles
for (g = 1; g < argc; g++) {
if (strcmp(argv[g], "--cpu_type") == 0 || strcmp(argv[g], "--cpu") == 0) {
printf("Failed to open keyboard event source.\n");
}
+ if (cfg->mouse_autoconnect)
+ mouse_hook_enabled = 1;
+
+ if (cfg->keyboard_autoconnect)
+ kb_hook_enabled = 1;
+
InitGayle();
signal(SIGINT, sigint_handler);