static HANDLE BiosConsoleInput = INVALID_HANDLE_VALUE;
static HANDLE BiosConsoleOutput = INVALID_HANDLE_VALUE;
static CONSOLE_SCREEN_BUFFER_INFO BiosSavedBufferInfo;
+static HANDLE InputThread = NULL;
/*
* VGA Register Configurations for BIOS Video Modes
/* Set the console input mode */
SetConsoleMode(BiosConsoleInput, ENABLE_MOUSE_INPUT | ENABLE_PROCESSED_INPUT);
+ /* Start the input thread */
+ InputThread = CreateThread(NULL, 0, &InputThreadProc, BiosConsoleInput, 0, NULL);
+
/* Initialize the PIC */
PicWriteCommand(PIC_MASTER_CMD, PIC_ICW1 | PIC_ICW1_ICW4);
PicWriteCommand(PIC_SLAVE_CMD , PIC_ICW1 | PIC_ICW1_ICW4);
/* Close the console handles */
if (BiosConsoleOutput != INVALID_HANDLE_VALUE) CloseHandle(BiosConsoleOutput);
if (BiosConsoleInput != INVALID_HANDLE_VALUE) CloseHandle(BiosConsoleInput);
+
+ /* Close the input thread handle */
+ if (InputThread != NULL) CloseHandle(InputThread);
}
WORD BiosPeekCharacter(VOID)
DWORD LastClockUpdate = GetTickCount();
LARGE_INTEGER Frequency, LastTimerTick, LastRtcTick, Counter;
LONGLONG TimerTicks;
- HANDLE InputThread = NULL;
LARGE_INTEGER StartPerfCount;
DWORD StartTickCount;
return -1;
}
- /* Start the input thread */
- InputThread = CreateThread(NULL, 0, &InputThreadProc, NULL, 0, NULL);
-
/* Find the starting performance and tick count */
StartTickCount = GetTickCount();
QueryPerformanceCounter(&StartPerfCount);
VgaRefreshDisplay();
Cleanup:
- if (InputThread != NULL) CloseHandle(InputThread);
SpeakerCleanup();
BiosCleanup();
EmulatorCleanup();
DWORD WINAPI InputThreadProc(LPVOID Parameter)
{
INT i;
- HANDLE ConsoleInput = GetStdHandle(STD_INPUT_HANDLE);
+ HANDLE ConsoleInput = (HANDLE)Parameter;
INPUT_RECORD InputRecord;
DWORD Count;