void RENDER_Init(Section * sec) { Section_prop * section=static_cast<Section_prop *>(sec); //For restarting the renderer. static bool running = false; bool aspect = render.aspect; render.pal.first=256; render.pal.last=0; render.aspect=section->Get_bool("aspect"); render.frameskip.max=section->Get_int("frameskip"); render.frameskip.count=0; //If something changed that needs a ReInit // Only ReInit when there is a src.bpp (fixes crashes on startup and directly changing the scaler without a screen specified yet) if(running && render.src.bpp && render.aspect != aspect) RENDER_CallBack( GFX_CallBackReset ); if(!running) render.updating=true; running = true; MAPPER_AddHandler(DecreaseFrameSkip,MK_f7,MMOD1,"decfskip","Dec Fskip"); MAPPER_AddHandler(IncreaseFrameSkip,MK_f8,MMOD1,"incfskip","Inc Fskip"); GFX_SetTitle(-1,render.frameskip.max,false); }
void VGA_SetupOther(void) { Bitu i; if (machine==MCH_CGA || IS_TANDY_ARCH) { extern Bit8u int10_font_08[256 * 8]; for (i=0;i<256;i++) memcpy(&vga.draw.font[i*32],&int10_font_08[i*8],8); vga.draw.font_tables[0]=vga.draw.font_tables[1]=vga.draw.font; } if (machine==MCH_HERC) { extern Bit8u int10_font_14[256 * 14]; for (i=0;i<256;i++) memcpy(&vga.draw.font[i*32],&int10_font_14[i*14],14); vga.draw.font_tables[0]=vga.draw.font_tables[1]=vga.draw.font; } if (machine==MCH_CGA) { IO_RegisterWriteHandler(0x3d8,write_cga,IO_MB); IO_RegisterWriteHandler(0x3d9,write_cga,IO_MB); MAPPER_AddHandler(IncreaseHue,MK_f11,MMOD2,"inchue","Inc Hue"); MAPPER_AddHandler(DecreaseHue,MK_f11,0,"dechue","Dec Hue"); } if (machine==MCH_HERC) { vga.herc.enable_bits=0; vga.herc.mode_control=0x8; IO_RegisterWriteHandler(0x3b8,write_hercules,IO_MB); IO_RegisterWriteHandler(0x3bf,write_hercules,IO_MB); } if (machine==MCH_TANDY) { vga.tandy.is_32k_mode=false; IO_RegisterWriteHandler(0x3d8,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3d9,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3de,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3df,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3da,write_tandy,IO_MB); } if (machine==MCH_PCJR) { vga.tandy.mem_bank=7;vga.tandy.disp_bank=7; vga.tandy.is_32k_mode=false;vga.tandy.pcjr_flipflop=false; IO_RegisterWriteHandler(0x3d9,write_pcjr,IO_MB); IO_RegisterWriteHandler(0x3da,write_pcjr,IO_MB); IO_RegisterWriteHandler(0x3df,write_pcjr,IO_MB); } if (machine==MCH_CGA || machine==MCH_HERC || IS_TANDY_ARCH) { Bitu base=machine==MCH_HERC ? 0x3b4 : 0x3d4; IO_RegisterWriteHandler(base,write_crtc_index_other,IO_MB); IO_RegisterWriteHandler(base+1,write_crtc_data_other,IO_MB); IO_RegisterReadHandler(base,read_crtc_index_other,IO_MB); IO_RegisterReadHandler(base+1,read_crtc_data_other,IO_MB); } }
void VGA_SetupOther(void) { Bitu i; memset( &vga.tandy, 0, sizeof( vga.tandy )); //Initialize values common for most machines, can be overwritten vga.tandy.draw_base = vga.mem.linear; vga.tandy.mem_base = vga.mem.linear; vga.tandy.addr_mask = 8*1024 - 1; vga.tandy.line_mask = 3; vga.tandy.line_shift = 13; if (machine==MCH_CGA || IS_TANDY_ARCH) { extern Bit8u int10_font_08[256 * 8]; for (i=0;i<256;i++) memcpy(&vga.draw.font[i*32],&int10_font_08[i*8],8); vga.draw.font_tables[0]=vga.draw.font_tables[1]=vga.draw.font; } if (machine==MCH_HERC) { extern Bit8u int10_font_14[256 * 14]; for (i=0;i<256;i++) memcpy(&vga.draw.font[i*32],&int10_font_14[i*14],14); vga.draw.font_tables[0]=vga.draw.font_tables[1]=vga.draw.font; } if (machine==MCH_CGA) { IO_RegisterWriteHandler(0x3d8,write_cga,IO_MB); IO_RegisterWriteHandler(0x3d9,write_cga,IO_MB); MAPPER_AddHandler(IncreaseHue,MK_f11,MMOD2,"inchue","Inc Hue"); MAPPER_AddHandler(DecreaseHue,MK_f11,0,"dechue","Dec Hue"); } if (machine==MCH_TANDY) { write_tandy( 0x3df, 0x0, 0 ); IO_RegisterWriteHandler(0x3d8,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3d9,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3de,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3df,write_tandy,IO_MB); IO_RegisterWriteHandler(0x3da,write_tandy,IO_MB); } if (machine==MCH_PCJR) { //write_pcjr will setup base address write_pcjr( 0x3df, 0x7 | (0x7 << 3), 0 ); IO_RegisterWriteHandler(0x3d9,write_pcjr,IO_MB); IO_RegisterWriteHandler(0x3da,write_pcjr,IO_MB); IO_RegisterWriteHandler(0x3df,write_pcjr,IO_MB); } if (machine==MCH_HERC) { Bitu base=0x3b0; for (Bitu i = 0; i < 4; i++) { // The registers are repeated as the address is not decoded properly; // The official ports are 3b4, 3b5 IO_RegisterWriteHandler(base+i*2,write_crtc_index_other,IO_MB); IO_RegisterWriteHandler(base+i*2+1,write_crtc_data_other,IO_MB); IO_RegisterReadHandler(base+i*2,read_crtc_index_other,IO_MB); IO_RegisterReadHandler(base+i*2+1,read_crtc_data_other,IO_MB); } vga.herc.enable_bits=0; vga.herc.mode_control=0xa; // first mode written will be text mode vga.crtc.underline_location = 13; IO_RegisterWriteHandler(0x3b8,write_hercules,IO_MB); IO_RegisterWriteHandler(0x3bf,write_hercules,IO_MB); IO_RegisterReadHandler(0x3ba,read_herc_status,IO_MB); } if (machine==MCH_CGA) { Bitu base=0x3d0; for (Bitu port_ct=0; port_ct<4; port_ct++) { IO_RegisterWriteHandler(base+port_ct*2,write_crtc_index_other,IO_MB); IO_RegisterWriteHandler(base+port_ct*2+1,write_crtc_data_other,IO_MB); IO_RegisterReadHandler(base+port_ct*2,read_crtc_index_other,IO_MB); IO_RegisterReadHandler(base+port_ct*2+1,read_crtc_data_other,IO_MB); } } if (IS_TANDY_ARCH) { Bitu base=0x3d4; IO_RegisterWriteHandler(base,write_crtc_index_other,IO_MB); IO_RegisterWriteHandler(base+1,write_crtc_data_other,IO_MB); IO_RegisterReadHandler(base,read_crtc_index_other,IO_MB); IO_RegisterReadHandler(base+1,read_crtc_data_other,IO_MB); } }
void RENDER_Init(Section * sec) { Section_prop * section=static_cast<Section_prop *>(sec); //For restarting the renderer. static bool running = false; bool aspect = render.aspect; Bitu scalersize = render.scale.size; bool scalerforced = render.scale.forced; scalerOperation_t scaleOp = render.scale.op; render.pal.first=256; render.pal.last=0; render.aspect=section->Get_bool("aspect"); render.frameskip.max=section->Get_int("frameskip"); render.frameskip.count=0; std::string cline; std::string scaler; //Check for commandline paramters and parse them through the configclass so they get checked against allowed values if (control->cmdline->FindString("-scaler",cline,false)) { section->HandleInputline(std::string("scaler=") + cline); } else if (control->cmdline->FindString("-forcescaler",cline,false)) { section->HandleInputline(std::string("scaler=") + cline + " forced"); } Prop_multival* prop = section->Get_multival("scaler"); scaler = prop->GetSection()->Get_string("type"); std::string f = prop->GetSection()->Get_string("force"); render.scale.forced = false; if(f == "forced") render.scale.forced = true; if (scaler == "none") { render.scale.op = scalerOpNormal;render.scale.size = 1; } else if (scaler == "normal2x") { render.scale.op = scalerOpNormal;render.scale.size = 2; } else if (scaler == "normal3x") { render.scale.op = scalerOpNormal;render.scale.size = 3; } #if RENDER_USE_ADVANCED_SCALERS>2 else if (scaler == "advmame2x") { render.scale.op = scalerOpAdvMame;render.scale.size = 2; } else if (scaler == "advmame3x") { render.scale.op = scalerOpAdvMame;render.scale.size = 3; } else if (scaler == "advinterp2x") { render.scale.op = scalerOpAdvInterp;render.scale.size = 2; } else if (scaler == "advinterp3x") { render.scale.op = scalerOpAdvInterp;render.scale.size = 3; } else if (scaler == "hq2x") { render.scale.op = scalerOpHQ;render.scale.size = 2; } else if (scaler == "hq3x") { render.scale.op = scalerOpHQ;render.scale.size = 3; } else if (scaler == "2xsai") { render.scale.op = scalerOpSaI;render.scale.size = 2; } else if (scaler == "super2xsai") { render.scale.op = scalerOpSuperSaI;render.scale.size = 2; } else if (scaler == "supereagle") { render.scale.op = scalerOpSuperEagle;render.scale.size = 2; } #endif #if RENDER_USE_ADVANCED_SCALERS>0 else if (scaler == "tv2x") { render.scale.op = scalerOpTV;render.scale.size = 2; } else if (scaler == "tv3x") { render.scale.op = scalerOpTV;render.scale.size = 3; } else if (scaler == "rgb2x"){ render.scale.op = scalerOpRGB;render.scale.size = 2; } else if (scaler == "rgb3x"){ render.scale.op = scalerOpRGB;render.scale.size = 3; } else if (scaler == "scan2x"){ render.scale.op = scalerOpScan;render.scale.size = 2; } else if (scaler == "scan3x"){ render.scale.op = scalerOpScan;render.scale.size = 3; } #endif //If something changed that needs a ReInit // Only ReInit when there is a src.bpp (fixes crashes on startup and directly changing the scaler without a screen specified yet) if(running && render.src.bpp && ((render.aspect != aspect) || (render.scale.op != scaleOp) || (render.scale.size != scalersize) || (render.scale.forced != scalerforced) || render.scale.forced)) RENDER_CallBack( GFX_CallBackReset ); if(!running) render.updating=true; running = true; MAPPER_AddHandler(DecreaseFrameSkip,MK_f7,MMOD1,"decfskip","Dec Fskip"); MAPPER_AddHandler(IncreaseFrameSkip,MK_f8,MMOD1,"incfskip","Inc Fskip"); GFX_SetTitle(-1,render.frameskip.max,false); }
void RENDER_Init(Section * sec) { Section_prop * section=static_cast<Section_prop *>(sec); vga.draw.linewise_set=true; vga.draw.doublescan_set=section->Get_bool("doublescan"); vga.draw.char9_set=section->Get_bool("char9"); //For restarting the renderer. static bool running = false; bool aspect = render.aspect; Bitu scalersize = render.scale.size; bool scalerforced = render.scale.forced; scalerOperation_t scaleOp = render.scale.op; render.pal.first=0; render.pal.last=255; render.aspect=section->Get_bool("aspect"); render.frameskip.max=section->Get_int("frameskip"); /* BUG FIX: Some people's dosbox.conf files have frameskip=-1 WTF?? */ /* without this fix, nothing displays, EVER */ if ((int)render.frameskip.max < 0) render.frameskip.max = 0; render.frameskip.count=0; render.forceUpdate=false; std::string cline; std::string scaler; //Check for commandline paramters and parse them through the configclass so they get checked against allowed values if (control->cmdline->FindString("-scaler",cline,false)) { section->HandleInputline(std::string("scaler=") + cline); } else if (control->cmdline->FindString("-forcescaler",cline,false)) { section->HandleInputline(std::string("scaler=") + cline + " forced"); } Prop_multival* prop = section->Get_multival("scaler"); scaler = prop->GetSection()->Get_string("type"); std::string f = prop->GetSection()->Get_string("force"); render.scale.forced = false; if(f == "forced") render.scale.forced = true; if (scaler == "none") { render.scale.op = scalerOpNormal; render.scale.size = 1; render.scale.hardware=false; } else if (scaler == "normal2x") { render.scale.op = scalerOpNormal; render.scale.size = 2; render.scale.hardware=false; } else if (scaler == "normal3x") { render.scale.op = scalerOpNormal; render.scale.size = 3; render.scale.hardware=false; } else if (scaler == "normal4x") { render.scale.op = scalerOpNormal; render.scale.size = 4; render.scale.hardware=false; } else if (scaler == "normal5x") { render.scale.op = scalerOpNormal; render.scale.size = 5; render.scale.hardware=false; } #if RENDER_USE_ADVANCED_SCALERS>2 else if (scaler == "advmame2x") { render.scale.op = scalerOpAdvMame; render.scale.size = 2; render.scale.hardware=false; } else if (scaler == "advmame3x") { render.scale.op = scalerOpAdvMame; render.scale.size = 3; render.scale.hardware=false; } else if (scaler == "advinterp2x") { render.scale.op = scalerOpAdvInterp; render.scale.size = 2; render.scale.hardware=false; } else if (scaler == "advinterp3x") { render.scale.op = scalerOpAdvInterp; render.scale.size = 3; render.scale.hardware=false; } else if (scaler == "hq2x") { render.scale.op = scalerOpHQ; render.scale.size = 2; render.scale.hardware=false; } else if (scaler == "hq3x") { render.scale.op = scalerOpHQ; render.scale.size = 3; render.scale.hardware=false; } else if (scaler == "2xsai") { render.scale.op = scalerOpSaI; render.scale.size = 2; render.scale.hardware=false; } else if (scaler == "super2xsai") { render.scale.op = scalerOpSuperSaI; render.scale.size = 2; render.scale.hardware=false; } else if (scaler == "supereagle") { render.scale.op = scalerOpSuperEagle; render.scale.size = 2; render.scale.hardware=false; } #endif #if RENDER_USE_ADVANCED_SCALERS>0 else if (scaler == "tv2x") { render.scale.op = scalerOpTV; render.scale.size = 2; render.scale.hardware=false; } else if (scaler == "tv3x") { render.scale.op = scalerOpTV; render.scale.size = 3; render.scale.hardware=false; } else if (scaler == "rgb2x"){ render.scale.op = scalerOpRGB; render.scale.size = 2; render.scale.hardware=false; } else if (scaler == "rgb3x"){ render.scale.op = scalerOpRGB; render.scale.size = 3; render.scale.hardware=false; } else if (scaler == "scan2x"){ render.scale.op = scalerOpScan; render.scale.size = 2; render.scale.hardware=false; } else if (scaler == "scan3x"){ render.scale.op = scalerOpScan; render.scale.size = 3; render.scale.hardware=false; } #endif else if (scaler == "hardware_none") { render.scale.op = scalerOpNormal; render.scale.size = 1; render.scale.hardware=true; } else if (scaler == "hardware2x") { render.scale.op = scalerOpNormal; render.scale.size = 4; render.scale.hardware=true; } else if (scaler == "hardware3x") { render.scale.op = scalerOpNormal; render.scale.size = 6; render.scale.hardware=true; } else if (scaler == "hardware4x") { render.scale.op = scalerOpNormal; render.scale.size = 8; render.scale.hardware=true; } else if (scaler == "hardware5x") { render.scale.op = scalerOpNormal; render.scale.size = 10; render.scale.hardware=true; } render.autofit=section->Get_bool("autofit"); //If something changed that needs a ReInit // Only ReInit when there is a src.bpp (fixes crashes on startup and directly changing the scaler without a screen specified yet) if(running && render.src.bpp && ((render.aspect != aspect) || (render.scale.op != scaleOp) || (render.scale.size != scalersize) || (render.scale.forced != scalerforced) || render.scale.forced)) RENDER_CallBack( GFX_CallBackReset ); if(!running) render.updating=true; running = true; MAPPER_AddHandler(DecreaseFrameSkip,MK_f7,MMOD1,"decfskip","Dec Fskip"); MAPPER_AddHandler(IncreaseFrameSkip,MK_f8,MMOD1,"incfskip","Inc Fskip"); VGA_TweakUserVsyncOffset(0.0f); GFX_SetTitle(-1,render.frameskip.max,-1,false); }