98 lines
3.2 KiB
C++
98 lines
3.2 KiB
C++
#include "zx_ula.h"
|
|
#include <SDL2/SDL.h>
|
|
|
|
namespace zx_ula
|
|
{
|
|
static uint8_t border_color = 0;
|
|
static uint8_t ear = 0;
|
|
static uint8_t mic = 0;
|
|
|
|
int port_in(int port)
|
|
{
|
|
const uint8_t *keys = SDL_GetKeyboardState(NULL);
|
|
const uint8_t h_addr = (port>>8);
|
|
uint8_t result = 0xff;
|
|
if (!(h_addr & ~0xfe))
|
|
{
|
|
result &= ~(
|
|
keys[SDL_SCANCODE_LSHIFT]*0xef +
|
|
keys[SDL_SCANCODE_Z]*0xf7 +
|
|
keys[SDL_SCANCODE_X]*0xfb +
|
|
keys[SDL_SCANCODE_C]*0xfd +
|
|
keys[SDL_SCANCODE_V]*0xfe );
|
|
}
|
|
if (!(h_addr & ~0xfd))
|
|
{
|
|
result &= ~(
|
|
keys[SDL_SCANCODE_A]*0xef +
|
|
keys[SDL_SCANCODE_S]*0xf7 +
|
|
keys[SDL_SCANCODE_D]*0xfb +
|
|
keys[SDL_SCANCODE_F]*0xfd +
|
|
keys[SDL_SCANCODE_G]*0xfe );
|
|
}
|
|
if (!(h_addr & ~0xfb))
|
|
{
|
|
result &= ~(
|
|
keys[SDL_SCANCODE_Q]*0xef +
|
|
keys[SDL_SCANCODE_W]*0xf7 +
|
|
keys[SDL_SCANCODE_E]*0xfb +
|
|
keys[SDL_SCANCODE_R]*0xfd +
|
|
keys[SDL_SCANCODE_T]*0xfe );
|
|
}
|
|
if (!(h_addr & ~0xf7))
|
|
{
|
|
result &= ~(
|
|
keys[SDL_SCANCODE_1]*0xef +
|
|
keys[SDL_SCANCODE_2]*0xf7 +
|
|
keys[SDL_SCANCODE_3]*0xfb +
|
|
keys[SDL_SCANCODE_4]*0xfd +
|
|
keys[SDL_SCANCODE_5]*0xfe );
|
|
}
|
|
if (!(h_addr & ~0xef))
|
|
{
|
|
result &= ~(
|
|
keys[SDL_SCANCODE_0]*0xef +
|
|
keys[SDL_SCANCODE_9]*0xf7 +
|
|
keys[SDL_SCANCODE_8]*0xfb +
|
|
keys[SDL_SCANCODE_7]*0xfd +
|
|
keys[SDL_SCANCODE_6]*0xfe );
|
|
}
|
|
if (!(h_addr & ~0xdf))
|
|
{
|
|
result &= ~(
|
|
keys[SDL_SCANCODE_P]*0xef +
|
|
keys[SDL_SCANCODE_O]*0xf7 +
|
|
keys[SDL_SCANCODE_I]*0xfb +
|
|
keys[SDL_SCANCODE_U]*0xfd +
|
|
keys[SDL_SCANCODE_Y]*0xfe );
|
|
}
|
|
if (!(h_addr & ~0xbf))
|
|
{
|
|
result &= ~(
|
|
keys[SDL_SCANCODE_RETURN]*0xef +
|
|
keys[SDL_SCANCODE_L]*0xf7 +
|
|
keys[SDL_SCANCODE_K]*0xfb +
|
|
keys[SDL_SCANCODE_J]*0xfd +
|
|
keys[SDL_SCANCODE_H]*0xfe );
|
|
}
|
|
if (!(h_addr & ~0x7f))
|
|
{
|
|
result &= ~(
|
|
keys[SDL_SCANCODE_SPACE]*0xef +
|
|
keys[SDL_SCANCODE_RSHIFT]*0xf7 +
|
|
keys[SDL_SCANCODE_M]*0xfb +
|
|
keys[SDL_SCANCODE_N]*0xfd +
|
|
keys[SDL_SCANCODE_B]*0xfe );
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void port_out(int port, int val)
|
|
{
|
|
border_color = val & 0x7;
|
|
mic = (val>>3)&0x1;
|
|
ear = (val>>4)&0x1;
|
|
}
|
|
|
|
uint8_t get_border_color() { return border_color; }
|
|
} |