From 9df1cb8253cb057e385d367d574a63861a4db543 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Tue, 9 Nov 2004 21:35:51 +0000 Subject: [PATCH] Added numlock/capslock state checks on startup of dosbox Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2049 --- src/gui/sdlmain.cpp | 11 +++++++++-- src/ints/bios_keyboard.cpp | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/gui/sdlmain.cpp b/src/gui/sdlmain.cpp index fe478638..c11e4750 100644 --- a/src/gui/sdlmain.cpp +++ b/src/gui/sdlmain.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: sdlmain.cpp,v 1.80 2004-10-02 11:31:47 qbix79 Exp $ */ +/* $Id: sdlmain.cpp,v 1.81 2004-11-09 21:35:50 qbix79 Exp $ */ #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -194,6 +194,9 @@ static SDL_Block sdl; static void CaptureMouse(void); extern char * RunningProgram; +//Globals for keyboard initialisation +bool startup_state_numlock=false; +bool startup_state_capslock=false; void GFX_SetTitle(Bits cycles,Bits frameskip,bool paused){ char title[200]={0}; static Bits internal_cycles=0; @@ -825,7 +828,7 @@ static void GUI_StartUp(Section * sec) { sdl.desktop.height=768; #endif } - sdl.mouse.autoenable=section->Get_bool("autolock"); + sdl.mouse.autoenable=section->Get_bool("autolock"); sdl.mouse.autolock=false; sdl.mouse.sensitivity=section->Get_int("sensitivity"); const char * output=section->Get_string("output"); @@ -893,6 +896,10 @@ static void GUI_StartUp(Section * sec) { #else MAPPER_AddHandler(PauseDOSBox,MK_pause,0,"pause","Pause"); #endif + /* Get Keyboard state of numlock and capslock */ + SDLMod keystate = SDL_GetModState(); + if(keystate&KMOD_NUM) startup_state_numlock = true; + if(keystate&KMOD_CAPS) startup_state_capslock = true; } void Mouse_AutoLock(bool enable) { diff --git a/src/ints/bios_keyboard.cpp b/src/ints/bios_keyboard.cpp index eb3fdb3c..70f610ff 100644 --- a/src/ints/bios_keyboard.cpp +++ b/src/ints/bios_keyboard.cpp @@ -438,17 +438,26 @@ static Bitu INT16_Handler(void) { return CBRET_NONE; } +//Keyboard initialisation. src/gui/sdlmain.cpp +extern bool startup_state_numlock; +extern bool startup_state_capslock; + static void InitBiosSegment(void) { /* Setup the variables for keyboard in the bios data segment */ mem_writew(BIOS_KEYBOARD_BUFFER_START,0x1e); mem_writew(BIOS_KEYBOARD_BUFFER_END,0x3e); mem_writew(BIOS_KEYBOARD_BUFFER_HEAD,0x1e); mem_writew(BIOS_KEYBOARD_BUFFER_TAIL,0x1e); - mem_writeb(BIOS_KEYBOARD_FLAGS1,0); + Bit8u flag1 = 0; + Bit8u leds = 16; /* Ack recieved */ + if(startup_state_capslock) { flag1|=0x40; leds|=0x04;} + if(startup_state_numlock){ flag1|=0x20; leds|=0x02;} + mem_writeb(BIOS_KEYBOARD_FLAGS1,flag1); mem_writeb(BIOS_KEYBOARD_FLAGS2,0); - mem_writeb(BIOS_KEYBOARD_FLAGS3,16); /* Enhanced keyboard installed */ + mem_writeb(BIOS_KEYBOARD_FLAGS3,16); /* Enhanced keyboard installed */ mem_writeb(BIOS_KEYBOARD_TOKEN,0); - mem_writeb(BIOS_KEYBOARD_LEDS,16); + mem_writeb(BIOS_KEYBOARD_LEDS,leds); + } void BIOS_SetupKeyboard(void) {