diff --git a/src/hardware/keyboard.cpp b/src/hardware/keyboard.cpp index b70995c0..97fbd86c 100644 --- a/src/hardware/keyboard.cpp +++ b/src/hardware/keyboard.cpp @@ -170,9 +170,11 @@ static void write_p60(Bitu port,Bitu val,Bitu iolen) { } } +extern bool TIMER_GetOutput2(void); static Bit8u port_61_data = 0; static Bitu read_p61(Bitu port,Bitu iolen) { - port_61_data^=0x20; + if (TIMER_GetOutput2()) port_61_data|=0x20; + else port_61_data&=~0x20; port_61_data^=0x10; return port_61_data; } @@ -186,6 +188,12 @@ static void write_p61(Bitu port,Bitu val,Bitu iolen) { port_61_data = val; } +static Bitu read_p62(Bitu port,Bitu iolen) { + Bit8u ret=~0x20; + if (TIMER_GetOutput2()) ret|=0x20; + return ret; +} + static void write_p64(Bitu port,Bitu val,Bitu iolen) { switch (val) { case 0xae: /* Activate keyboard */ @@ -377,6 +385,7 @@ void KEYBOARD_Init(Section* sec) { IO_RegisterReadHandler(0x60,read_p60,IO_MB); IO_RegisterWriteHandler(0x61,write_p61,IO_MB); IO_RegisterReadHandler(0x61,read_p61,IO_MB); + if (machine==MCH_CGA || machine==MCH_HERC) IO_RegisterReadHandler(0x62,read_p62,IO_MB); IO_RegisterWriteHandler(0x64,write_p64,IO_MB); IO_RegisterReadHandler(0x64,read_p64,IO_MB); TIMER_AddTickHandler(&KEYBOARD_TickHandler); diff --git a/src/hardware/timer.cpp b/src/hardware/timer.cpp index dce8d4ac..ac07064f 100644 --- a/src/hardware/timer.cpp +++ b/src/hardware/timer.cpp @@ -402,6 +402,10 @@ void TIMER_SetGate2(bool in) { gate2 = in; //Set it here so the counter_latch above works } +bool TIMER_GetOutput2(void) { + return counter_output(2); +} + class TIMER:public Module_base{ private: IO_ReadHandleObject ReadHandler[4];