From 7736351416416580aba2edcc4948abe57900cea2 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Sun, 26 Feb 2006 16:05:13 +0000 Subject: [PATCH] Make con use extended keys when machine is vga Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2520 --- src/dos/dev_con.h | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/dos/dev_con.h b/src/dos/dev_con.h index df97577b..5479014d 100644 --- a/src/dos/dev_con.h +++ b/src/dos/dev_con.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dev_con.h,v 1.23 2006-02-09 11:47:48 qbix79 Exp $ */ +/* $Id: dev_con.h,v 1.24 2006-02-26 16:05:13 qbix79 Exp $ */ #include "dos_inc.h" #include "../ints/int10.h" @@ -60,7 +60,7 @@ bool device_CON::Read(Bit8u * data,Bit16u * size) { readcache=0; } while (*size>count) { - reg_ah=0; + reg_ah=(machine==MCH_VGA)?0x10:0x0; CALLBACK_RunRealInt(0x16); switch(reg_al) { case 13: @@ -84,14 +84,23 @@ bool device_CON::Read(Bit8u * data,Bit16u * size) { continue; //no data read yet so restart whileloop. } break; - default: - data[count++]=reg_al; + case 0xe0: /* Extended keys in the int 16 0x10 case */ + if(!reg_ah) { /*extended key if reg_ah isn't 0 */ + data[count++] = reg_al; + } else { + data[count++] = 0; + if (*size>count) data[count++] = reg_ah; + else readcache = reg_ah; + } break; - case 0: + case 0: /* Extended keys in the int 16 0x0 case */ data[count++]=reg_al; if (*size>count) data[count++]=reg_ah; else readcache=reg_ah; break; + default: + data[count++]=reg_al; + break; } if(dos.echo) { //what to do if *size==1 and character is BS ????? INT10_TeletypeOutput(reg_al,7); @@ -357,7 +366,7 @@ bool device_CON::Close() { Bit16u device_CON::GetInformation(void) { Bit16u head=mem_readw(BIOS_KEYBOARD_BUFFER_HEAD); Bit16u tail=mem_readw(BIOS_KEYBOARD_BUFFER_TAIL); - + if ((head==tail) && !readcache) return 0x80D3; /* No Key Available */ return 0x8093; /* Key Available */ };