From ca8b788e12e678d45fbc4b481a0394639674417c Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Mon, 8 Jan 2007 20:36:53 +0000 Subject: [PATCH] Add Beta2 patch:Fix nc5 installer. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2731 --- include/dos_inc.h | 6 ++++-- src/dos/dos.cpp | 22 ++++++++++++++++------ src/dos/dos_tables.cpp | 35 ++++++++++++++++++++++++++++++++--- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/include/dos_inc.h b/include/dos_inc.h index 8226a295..04c91b72 100644 --- a/include/dos_inc.h +++ b/include/dos_inc.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_inc.h,v 1.64 2007-01-08 20:10:34 qbix79 Exp $ */ +/* $Id: dos_inc.h,v 1.65 2007-01-08 20:36:53 qbix79 Exp $ */ #ifndef DOSBOX_DOS_INC_H #define DOSBOX_DOS_INC_H @@ -616,7 +616,9 @@ struct DOS_Block { RealPt mediaid; RealPt tempdta; RealPt tempdta_fcbdelete; - RealPt dcbs; + RealPt dbcs; + RealPt filenamechar; + RealPt collatingseq; Bit8u* country;//Will be copied to dos memory. resides in real mem } tables; Bit16u loaded_codepage; diff --git a/src/dos/dos.cpp b/src/dos/dos.cpp index 80f02c29..46fdb74d 100644 --- a/src/dos/dos.cpp +++ b/src/dos/dos.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos.cpp,v 1.97 2007-01-08 19:45:39 qbix79 Exp $ */ +/* $Id: dos.cpp,v 1.98 2007-01-08 20:36:53 qbix79 Exp $ */ #include #include @@ -838,8 +838,8 @@ static Bitu DOS_21Handler(void) { break; case 0x63: /* DOUBLE BYTE CHARACTER SET */ if(reg_al == 0) { - SegSet16(ds,RealSeg(dos.tables.dcbs)); - reg_si=RealOff(dos.tables.dcbs); + SegSet16(ds,RealSeg(dos.tables.dbcs)); + reg_si=RealOff(dos.tables.dbcs); reg_al = 0; CALLBACK_SCF(false); //undocumented } else reg_al = 0xff; //Doesn't officially touch carry flag @@ -870,14 +870,24 @@ static Bitu DOS_21Handler(void) { } CALLBACK_SCF(false); break; + case 0x05: // Get pointer to filename terminator table + mem_writeb(data + 0x00, reg_al); + mem_writed(data + 0x01, dos.tables.filenamechar); + reg_cx = 5; + CALLBACK_SCF(false); + break; + case 0x06: // Get pointer to collating sequence table + mem_writeb(data + 0x00, reg_al); + mem_writed(data + 0x01, dos.tables.collatingseq); + reg_cx = 5; + CALLBACK_SCF(false); + break; case 0x02: // Get pointer to uppercase table case 0x03: // Get pointer to lowercase table case 0x04: // Get pointer to filename uppercase table - case 0x05: // Get pointer to filename terminator table - case 0x06: // Get pointer to collating sequence table case 0x07: // Get pointer to double byte char set table mem_writeb(data + 0x00, reg_al); - mem_writed(data + 0x01, dos.tables.dcbs); //used to be 0 + mem_writed(data + 0x01, dos.tables.dbcs); //used to be 0 reg_cx = 5; CALLBACK_SCF(false); break; diff --git a/src/dos/dos_tables.cpp b/src/dos/dos_tables.cpp index f886421e..5962f524 100644 --- a/src/dos/dos_tables.cpp +++ b/src/dos/dos_tables.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_tables.cpp,v 1.25 2007-01-08 20:10:34 qbix79 Exp $ */ +/* $Id: dos_tables.cpp,v 1.26 2007-01-08 20:36:53 qbix79 Exp $ */ #include "dosbox.h" #include "mem.h" @@ -108,8 +108,37 @@ void DOS_SetupTables(void) { /* Allocate DCBS DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE */ - dos.tables.dcbs=RealMake(DOS_GetMemory(12),0); - mem_writed(Real2Phys(dos.tables.dcbs),0); //empty table + dos.tables.dbcs=RealMake(DOS_GetMemory(12),0); + mem_writed(Real2Phys(dos.tables.dbcs),0); //empty table + /* FILENAME CHARACTER TABLE */ + dos.tables.filenamechar=RealMake(DOS_GetMemory(2),0); + mem_writew(Real2Phys(dos.tables.filenamechar)+0x00,0x16); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x02,0x01); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x03,0x00); // allowed chars from + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x04,0xff); // ...to + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x05,0x00); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x06,0x00); // excluded chars from + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x07,0x20); // ...to + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x08,0x02); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x09,0x0e); // number of illegal separators + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x0a,0x2e); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x0b,0x22); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x0c,0x2f); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x0d,0x5c); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x0e,0x5b); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x0f,0x5d); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x10,0x3a); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x11,0x7c); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x12,0x3c); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x13,0x3e); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x14,0x2b); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x15,0x3d); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x16,0x3b); + mem_writeb(Real2Phys(dos.tables.filenamechar)+0x17,0x2c); + /* COLLATING SEQUENCE TABLE */ + dos.tables.collatingseq=RealMake(DOS_GetMemory(17),0); + mem_writew(Real2Phys(dos.tables.collatingseq),0x100); + for (i=0; i<256; i++) mem_writeb(Real2Phys(dos.tables.collatingseq)+i+2,i); /* Create a fake FCB SFT */ seg=DOS_GetMemory(4);