added controller input

This commit is contained in:
Lauchmelder 2021-10-30 21:01:27 +02:00
parent 640df2feb2
commit 674ee5059b
6 changed files with 83 additions and 5 deletions

30
NES Emulator/controller.c Normal file
View file

@ -0,0 +1,30 @@
#include "controller.h"
#include <SDL.h>
Byte pollInput(struct Controller* controller)
{
if (controller->strobe)
{
fillRegister(controller);
}
Byte ret = 0x1 - (controller->latch & 0x1); // Controller port is active low
controller->latch >>= 1;
return ret;
}
void fillRegister(struct Controller* controller)
{
Byte* keyboard = SDL_GetKeyboardState(NULL);
controller->data.A = keyboard[SDL_SCANCODE_A];
controller->data.B = keyboard[SDL_SCANCODE_S];
controller->data.Up = keyboard[SDL_SCANCODE_UP];
controller->data.Down = keyboard[SDL_SCANCODE_DOWN];
controller->data.Left = keyboard[SDL_SCANCODE_LEFT];
controller->data.Right = keyboard[SDL_SCANCODE_RIGHT];
controller->data.Select = keyboard[SDL_SCANCODE_LSHIFT];
controller->data.Start = keyboard[SDL_SCANCODE_RETURN];
controller->latch = controller->data.raw;
}