diff --git a/src/dosbox.cpp b/src/dosbox.cpp index 7a8b3698..9e09b4df 100644 --- a/src/dosbox.cpp +++ b/src/dosbox.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dosbox.cpp,v 1.126 2008-01-16 20:16:31 c2woody Exp $ */ +/* $Id: dosbox.cpp,v 1.127 2008-02-03 20:43:13 c2woody Exp $ */ #include #include @@ -39,6 +39,7 @@ #include "programs.h" #include "support.h" #include "mapper.h" +#include "ints/int10.h" Config * control; MachineType machine; @@ -271,6 +272,7 @@ static void DOSBOX_RealInit(Section * sec) { MAPPER_AddHandler(DOSBOX_UnlockSpeed, MK_f12, MMOD2,"speedlock","Speedlock"); svgaCard=SVGA_None; machine=MCH_VGA; + int10.vesa_nolfb=false; std::string cmd_machine; const char * mtype; if (control->cmdline->FindString("-machine",cmd_machine,true)) mtype=cmd_machine.c_str(); @@ -284,6 +286,10 @@ static void DOSBOX_RealInit(Section * sec) { (strcasecmp(mtype,"svga")==0) || (strcasecmp(mtype,"svga_s3")==0)) { machine=MCH_VGA; svgaCard=SVGA_S3Trio; + } else if (strcasecmp(mtype,"vesa_nolfb")==0) { + machine=MCH_VGA; + svgaCard=SVGA_S3Trio; + int10.vesa_nolfb=true; } else if ((strcasecmp(mtype,"vga_et4000")==0) || (strcasecmp(mtype,"svga_et4000")==0)) { machine=MCH_VGA; svgaCard=SVGA_TsengET4K; diff --git a/src/ints/int10.h b/src/ints/int10.h index 5fb65dc4..9f9f4c2f 100644 --- a/src/ints/int10.h +++ b/src/ints/int10.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: int10.h,v 1.33 2008-02-03 12:19:35 c2woody Exp $ */ +/* $Id: int10.h,v 1.34 2008-02-03 20:43:14 c2woody Exp $ */ #include "vga.h" @@ -138,6 +138,7 @@ typedef struct { Bitu used; } rom; Bitu vesa_setmode; + bool vesa_nolfb; } Int10Data; extern Int10Data int10; diff --git a/src/ints/int10_modes.cpp b/src/ints/int10_modes.cpp index f8f2b86d..949ccb86 100644 --- a/src/ints/int10_modes.cpp +++ b/src/ints/int10_modes.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: int10_modes.cpp,v 1.76 2008-02-03 12:19:35 c2woody Exp $ */ +/* $Id: int10_modes.cpp,v 1.77 2008-02-03 20:43:14 c2woody Exp $ */ #include @@ -572,6 +572,7 @@ bool INT10_SetVideoMode_OTHER(Bitu mode,bool clearmem) { bool INT10_SetVideoMode(Bitu mode) { bool clearmem=true;Bitu i; if (mode>=0x100) { + if ((mode & 0x4000) && int10.vesa_nolfb) return false; if (mode & 0x8000) clearmem=false; mode&=0xfff; } diff --git a/src/ints/int10_vesa.cpp b/src/ints/int10_vesa.cpp index b622ff29..144ccad0 100644 --- a/src/ints/int10_vesa.cpp +++ b/src/ints/int10_vesa.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: int10_vesa.cpp,v 1.33 2008-02-03 12:19:35 c2woody Exp $ */ +/* $Id: int10_vesa.cpp,v 1.34 2008-02-03 20:43:14 c2woody Exp $ */ #include #include @@ -164,7 +164,8 @@ foundit: var_write(&minfo.NumberOfPlanes,0x1); var_write(&minfo.BitsPerPixel,8); var_write(&minfo.MemoryModel,4); //packed pixel - modeAttributes = 0x9b; // Color, graphics, linear buffer + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb) modeAttributes |= 0x80; // linear framebuffer break; case M_LIN15: pageSize = mblock->sheight * mblock->swidth*2; @@ -181,7 +182,8 @@ foundit: var_write(&minfo.BlueMaskPos,0); var_write(&minfo.ReservedMaskSize,0x01); var_write(&minfo.ReservedMaskPos,0x0f); - modeAttributes = 0x9b; // Color, graphics, linear buffer + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb) modeAttributes |= 0x80; // linear framebuffer break; case M_LIN16: pageSize = mblock->sheight * mblock->swidth*2; @@ -196,7 +198,8 @@ foundit: var_write(&minfo.GreenMaskPos,5); var_write(&minfo.BlueMaskSize,5); var_write(&minfo.BlueMaskPos,0); - modeAttributes = 0x9b; // Color, graphics, linear buffer + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb) modeAttributes |= 0x80; // linear framebuffer break; case M_LIN32: pageSize = mblock->sheight * mblock->swidth*4; @@ -213,7 +216,8 @@ foundit: var_write(&minfo.BlueMaskPos,0x0); var_write(&minfo.ReservedMaskSize,0x8); var_write(&minfo.ReservedMaskPos,0x18); - modeAttributes = 0x9b; // Color, graphics, linear buffer + modeAttributes = 0x1b; // Color, graphics + if (!int10.vesa_nolfb) modeAttributes |= 0x80; // linear framebuffer break; /* case M_TEXT: pageSize = mblock->sheight/8 * mblock->swidth*2/8; @@ -258,7 +262,7 @@ foundit: var_write(&minfo.Reserved_page,0x1); var_write(&minfo.XCharSize,mblock->cwidth); var_write(&minfo.YCharSize,mblock->cheight); - var_write(&minfo.PhysBasePtr,S3_LFB_BASE); + if (!int10.vesa_nolfb) var_write(&minfo.PhysBasePtr,S3_LFB_BASE); MEM_BlockWrite(buf,&minfo,sizeof(MODE_INFO)); return 0x00;