#include #include #include "vm.h" #include "vdp.h" #include #define BTN_ANY 0 #define BTN_UP 1 #define BTN_DOWN 2 #define BTN_LEFT 3 #define BTN_RIGHT 4 #define BTN_A 5 #define BTN_B 6 #define BTN_MENU 7 bool anykey = false; unsigned char data_in; void input_data_in(const unsigned char& value) { data_in = value; } unsigned char input_data_out() { const Uint8* keys = SDL_GetKeyboardState(nullptr); switch (data_in) { case BTN_ANY: return anykey; break; case BTN_UP: return keys[SDL_SCANCODE_UP]; break; case BTN_DOWN: return keys[SDL_SCANCODE_DOWN]; break; case BTN_LEFT: return keys[SDL_SCANCODE_LEFT]; break; case BTN_RIGHT: return keys[SDL_SCANCODE_RIGHT]; break; case BTN_A: return keys[SDL_SCANCODE_RCTRL]; break; case BTN_B: return keys[SDL_SCANCODE_RSHIFT]; break; case BTN_MENU: return keys[SDL_SCANCODE_RETURN]; break; }; } int main(int argc, char** argv) { vm_init("test.bas"); vdp_init(); vm_register_out_port(10, vdp_data_out); vm_register_out_port(11, vdp_cmd_out); vm_register_out_port(20, input_data_in); vm_register_in_port(21, input_data_out); static bool should_quit = false; static SDL_Event sdlEvent; SDL_Scancode just_pressed; //Uint32 ticks = SDL_GetTicks(); while (!should_quit) { just_pressed = SDL_SCANCODE_UNKNOWN; while (SDL_PollEvent(&sdlEvent)) { if (sdlEvent.type == SDL_QUIT) { should_quit = true; break; } else if (sdlEvent.type == SDL_KEYDOWN) { anykey = true; just_pressed = sdlEvent.key.keysym.scancode; if (sdlEvent.key.keysym.scancode == SDL_SCANCODE_ESCAPE) { should_quit = true; } } } vm_step(); //if (SDL_GetTicks() - ticks >= 15) { vdp_flip(); ticks = SDL_GetTicks(); } } vdp_quit(); return 0; }