diff --git a/src/86box.h b/src/86box.h index 0b4ca1f9c..e3971f3c3 100644 --- a/src/86box.h +++ b/src/86box.h @@ -1,4 +1,4 @@ /* Copyright holders: Tenshi see COPYING for more details */ -#define emulator_version "1.10" +#define emulator_version "1.03" diff --git a/src/ibm.h b/src/ibm.h index c57e4abe8..eebb072b4 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -635,3 +635,7 @@ void trc_init(); extern int enable_xtide; extern int enable_external_fpu; + +extern int invert_display; + +uint32_t svga_color_transform(uint32_t color); diff --git a/src/ide.c b/src/ide.c index db88e534d..2750802b8 100644 --- a/src/ide.c +++ b/src/ide.c @@ -2064,8 +2064,8 @@ void callbackide(int ide_board) { goto abort_cmd; } - if (((hdc[cur_ide[ide->board]].at_hpc == 0) && (hdc[cur_ide[ide->board]].at_spt == 0)) || (ide->hdi != 2)) - { + /* if (((hdc[cur_ide[ide->board]].at_hpc == 0) && (hdc[cur_ide[ide->board]].at_spt == 0)) || (ide->hdi != 2)) + { */ full_size /= (ide->head+1); full_size /= ide->secount; ide->specify_success = 1; @@ -2077,7 +2077,7 @@ void callbackide(int ide_board) fwrite(&(hdc[cur_ide[ide->board]].at_spt), 1, 4, ide->hdfile); fwrite(&(hdc[cur_ide[ide->board]].at_hpc), 1, 4, ide->hdfile); } - } + /* } else { if ((hdc[cur_ide[ide->board]].at_hpc == (ide->head + 1)) && (hdc[cur_ide[ide->board]].at_spt == ide->secount)) @@ -2089,7 +2089,7 @@ void callbackide(int ide_board) ide_log("WIN_SPECIFY error (%04X, %04X)\n", ide->head + 1, ide->secount); ide->specify_success = 0; } - } + } */ ide->spt=ide->secount; ide->hpc=ide->head+1; ide->atastat = READY_STAT | DSC_STAT; diff --git a/src/model.c b/src/model.c index 51689152f..41dde94d3 100644 --- a/src/model.c +++ b/src/model.c @@ -125,74 +125,66 @@ PCI_RESET pci_reset_handler; MODEL models[] = { - {"IBM PC", ROM_IBMPC, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, - {"IBM XT", ROM_IBMXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, - {"IBM PCjr", ROM_IBMPCJR, { "", cpus_pcjr, "", NULL, "", NULL}, 1, 0, 128, 640, 128, pcjr_init, &pcjr_device}, - {"Generic XT clone", ROM_GENXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, - {"AMI XT clone", ROM_AMIXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, - {"DTK XT clone", ROM_DTKXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, - {"VTech Laser Turbo XT",ROM_LTXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, - {"VTech Laser XT3", ROM_LXT3, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, - {"Phoenix XT clone", ROM_PXXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, - {"Juko XT clone", ROM_JUKOPC, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, - {"Tandy 1000", ROM_TANDY, { "", cpus_8088, "", NULL, "", NULL}, 1, 0, 128, 640, 128, tandy1k_init, &tandy1000_device}, - {"Tandy 1000 HX", ROM_TANDY1000HX, { "", cpus_8088, "", NULL, "", NULL}, 1, 0, 256, 640, 128, tandy1k_init, &tandy1000hx_device}, - {"Tandy 1000 SL/2", ROM_TANDY1000SL2,{ "", cpus_8086, "", NULL, "", NULL}, 1, 0, 512, 768, 128, tandy1ksl2_init, NULL}, - {"Amstrad PC1512", ROM_PC1512, { "", cpus_pc1512, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 512, 640, 128, ams_init, NULL}, - {"Sinclair PC200", ROM_PC200, { "", cpus_8086, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 512, 640, 128, ams_init, NULL}, - {"Euro PC", ROM_EUROPC, { "", cpus_8086, "", NULL, "", NULL}, 0, 0, 512, 640, 128, europc_init, NULL}, - {"Olivetti M24", ROM_OLIM24, { "", cpus_8086, "", NULL, "", NULL}, 1, MODEL_OLIM24, 128, 640, 128, olim24_init, NULL}, - {"Amstrad PC1640", ROM_PC1640, { "", cpus_8086, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 640, 640, 0, ams_init, NULL}, - {"Amstrad PC2086", ROM_PC2086, { "", cpus_8086, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 640, 640, 0, ams_init, NULL}, - {"Amstrad PC3086", ROM_PC3086, { "", cpus_8086, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 640, 640, 0, ams_init, NULL}, - {"IBM AT", ROM_IBMAT, { "", cpus_ibmat, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_init, NULL}, - {"Commodore PC 30 III", ROM_CMDPC30, { "", cpus_286, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_init, NULL}, - {"AMI 286 clone", ROM_AMI286, { "", cpus_286, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_neat_init, NULL}, - {"Award 286 clone", ROM_AWARD286, { "", cpus_286, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_scat_init, NULL}, - {"DELL System 200", ROM_DELL200, { "", cpus_286, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_init, NULL}, - {"Hyundai Super-286TR", ROM_SUPER286TR, { "", cpus_286, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_scat_init, NULL}, - {"Samsung SPC-4200P", ROM_SPC4200P, { "", cpus_286, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_scat_init, NULL}, - {"IBM PS/1 model 2011", ROM_IBMPS1_2011, { "", cpus_ps1_m2011,"", NULL, "", NULL}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, ps1_m2011_init, NULL}, - {"IBM PS/1 model 2121", ROM_IBMPS1_2121, { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, ps1_m2121_init, NULL}, - {"IBM PS/1 m.2121+ISA", ROM_IBMPS1_2121_ISA, { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, ps1_m2121_init, NULL}, - {"IBM PS/2 Model 30-286", ROM_IBMPS2_M30_286, { "", cpus_ps2_m30_286, "", NULL, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 16, 1, ps2_m30_286_init, NULL}, - {"Compaq Deskpro 386", ROM_DESKPRO_386, { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC}, 0, MODEL_AT, 1, 15, 1, deskpro386_init, NULL}, -/* {"Acer 386SX25/N", ROM_ACER386, { "Intel", cpus_acer, "", NULL, "", NULL}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, at_acer386sx_init, NULL}, */ - {"DTK 386SX clone", ROM_DTK386, { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC}, 0, MODEL_AT, 1, 16, 1, at_neat_init, NULL}, -/* {"Phoenix 386 clone", ROM_PX386, { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC}, 0, MODEL_AT, 1, 16, 1, at_82335_init, NULL}, */ - {"Amstrad MegaPC", ROM_MEGAPC, { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, at_wd76c10_init, NULL}, + {"IBM PC", ROM_IBMPC, "ibmpc", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, + {"IBM XT", ROM_IBMXT, "ibmxt", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, + {"IBM PCjr", ROM_IBMPCJR, "ibmpcjr", { "", cpus_pcjr, "", NULL, "", NULL, "", NULL, "", NULL}, 1, 0, 128, 640, 128, pcjr_init, &pcjr_device}, + {"Generic XT clone", ROM_GENXT, "genxt", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, + {"AMI XT clone", ROM_AMIXT, "amixt", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, + {"DTK XT clone", ROM_DTKXT, "dtk", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, + {"VTech Laser Turbo XT", ROM_LTXT, "ltxt", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, + {"VTech Laser XT3", ROM_LXT3, "lxt3", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, + {"Phoenix XT clone", ROM_PXXT, "pxxt", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, + {"Juko XT clone", ROM_JUKOPC, "jukopc", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 64, 640, 64, xt_init, NULL}, + {"Tandy 1000", ROM_TANDY, "tandy", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 1, 0, 128, 640, 128, tandy1k_init, &tandy1000_device}, + {"Tandy 1000 HX", ROM_TANDY1000HX, "tandy1000hx", { "", cpus_8088, "", NULL, "", NULL, "", NULL, "", NULL}, 1, 0, 256, 640, 128, tandy1k_init, &tandy1000hx_device}, + {"Tandy 1000 SL/2", ROM_TANDY1000SL2, "tandy1000sl2", { "", cpus_8086, "", NULL, "", NULL, "", NULL, "", NULL}, 1, 0, 512, 768, 128, tandy1ksl2_init, NULL}, + {"Amstrad PC1512", ROM_PC1512, "pc1512", { "", cpus_pc1512, "", NULL, "", NULL, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 512, 640, 128, ams_init, NULL}, + {"Sinclair PC200", ROM_PC200, "pc200", { "", cpus_8086, "", NULL, "", NULL, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 512, 640, 128, ams_init, NULL}, + {"Euro PC", ROM_EUROPC, "europc", { "", cpus_8086, "", NULL, "", NULL, "", NULL, "", NULL}, 0, 0, 512, 640, 128, europc_init, NULL}, + {"Olivetti M24", ROM_OLIM24, "olivetti_m24", { "", cpus_8086, "", NULL, "", NULL, "", NULL, "", NULL}, 1, MODEL_OLIM24, 128, 640, 128, olim24_init, NULL}, + {"Amstrad PC1640", ROM_PC1640, "pc1640", { "", cpus_8086, "", NULL, "", NULL, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 640, 640, 0, ams_init, NULL}, + {"Amstrad PC2086", ROM_PC2086, "pc2086", { "", cpus_8086, "", NULL, "", NULL, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 640, 640, 0, ams_init, NULL}, + {"Amstrad PC3086", ROM_PC3086, "pc3086", { "", cpus_8086, "", NULL, "", NULL, "", NULL, "", NULL}, 1, MODEL_AMSTRAD, 640, 640, 0, ams_init, NULL}, + {"IBM AT", ROM_IBMAT, "ibmat", { "", cpus_ibmat, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_init, NULL}, + {"Commodore PC 30 III", ROM_CMDPC30, "cmdpc30", { "", cpus_286, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_init, NULL}, + {"AMI 286 clone", ROM_AMI286, "ami286", { "", cpus_286, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_neat_init, NULL}, + {"Award 286 clone", ROM_AWARD286, "award286", { "", cpus_286, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_scat_init, NULL}, + {"DELL System 200", ROM_DELL200, "dells200", { "", cpus_286, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_init, NULL}, + {"Hyundai Super-286TR", ROM_SUPER286TR, "super286tr", { "", cpus_286, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_scat_init, NULL}, + {"Samsung SPC-4200P", ROM_SPC4200P, "spc4200p", { "", cpus_286, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_scat_init, NULL}, + {"IBM PS/1 model 2011", ROM_IBMPS1_2011, "ibmps1es", { "", cpus_ps1_m2011, "", NULL, "", NULL, "", NULL, "", NULL}, 1, MODEL_AT | MODEL_PS2, 1, 16, 1, ps1_m2011_init, NULL}, + {"IBM PS/2 Model 30-286", ROM_IBMPS2_M30_286, "ibmps2_m30_286", { "", cpus_ps2_m30_286, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 16, 1, ps2_m30_286_init, NULL}, + {"IBM PS/1 model 2121", ROM_IBMPS1_2121, "ibmps1_2121", { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC, "", NULL, "", NULL}, 1, MODEL_AT | MODEL_PS2, 1, 16, 1, ps1_m2121_init, NULL}, + {"IBM PS/1 m.2121 + ISA", ROM_IBMPS1_2121_ISA, "ibmps1_2121_isa", { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC, "", NULL, "", NULL}, 1, MODEL_AT | MODEL_PS2, 1, 16, 1, ps1_m2121_init, NULL}, + {"Compaq Deskpro 386", ROM_DESKPRO_386, "dekspro386", { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC, "", NULL, "", NULL}, 0, MODEL_AT, 1, 15, 1, deskpro386_init, NULL}, + {"DTK 386SX clone", ROM_DTK386, "dtk386", { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC, "", NULL, "", NULL}, 0, MODEL_AT, 1, 16, 1, at_neat_init, NULL}, + {"Amstrad MegaPC", ROM_MEGAPC, "megapc", { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC, "", NULL, "", NULL}, 1, MODEL_AT | MODEL_PS2, 1, 16, 1, at_wd76c10_init, NULL}, /* The MegaPC manual says 386DX model of the Amstrad PC70386 exists, but Sarah Walker just *had* to remove 386DX CPU's from some boards. */ - {"Amstrad MegaPC 386DX",ROM_MEGAPCDX, { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, at_wd76c10_init, NULL}, - {"AMI 386SX clone", ROM_AMI386SX, { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC}, 0, MODEL_AT, 1, 256, 1, at_headland_init, NULL}, - {"MR 386DX clone", ROM_MR386DX_OPTI495, { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC}, 0, MODEL_AT, 1, 256, 1, at_opti495_init, NULL}, - {"AMI 386DX clone", ROM_AMI386DX_OPTI495, { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC}, 0, MODEL_AT, 1, 256, 1, at_opti495_init, NULL}, - {"AMI 486 clone", ROM_AMI486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, MODEL_AT, 1, 256, 1, at_ali1429_init, NULL}, - {"AMI WinBIOS 486", ROM_WIN486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, MODEL_AT, 1, 256, 1, at_ali1429_init, NULL}, -/* {"AMI WinBIOS 486 PCI", ROM_PCI486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, MODEL_AT, 1, 256, 1, at_um8881f_init, NULL},*/ - {"DTK PKM-0038S E-2", ROM_DTK486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, MODEL_AT, 1, 256, 1, at_dtk486_init, NULL}, - {"Award SiS 496/497", ROM_SIS496, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, MODEL_AT, 1, 256, 1, at_sis496_init, NULL}, - {"Rise Computer R418", ROM_R418, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, MODEL_AT, 1, 256, 1, at_r418_init, NULL}, - {"Intel Premiere/PCI", ROM_REVENGE, { "Intel", cpus_Pentium5V, "", NULL, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 128, 1, at_batman_init, NULL}, - {"Micro Star 586MC1", ROM_586MC1, { "Intel", cpus_Pentium5V50, "",NULL, "", NULL}, 0, MODEL_AT, 1, 128, 1, at_586mc1_init, NULL}, - {"Intel Premiere/PCI II",ROM_PLATO, { "Intel", cpus_PentiumS5,"IDT", cpus_WinChip, "AMD", cpus_K5, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 128, 1, at_plato_init, NULL}, - {"Intel Advanced/EV", ROM_ENDEAVOR, { "Intel", cpus_PentiumS5,"IDT", cpus_WinChip, "AMD", cpus_K5, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 128, 1, at_endeavor_init, NULL}, - {"PC Partner MB500N", ROM_MB500N, { "Intel", cpus_PentiumS5,"IDT", cpus_WinChip, "AMD", cpus_K5, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 128, 1, at_mb500n_init, NULL}, -#if 0 - {"NEC PowerMate V", ROM_POWERMATE_V, { "Intel", cpus_PentiumS5,"IDT", cpus_WinChip, "AMD", cpus_K5, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 128, 1, at_powermate_v_init, NULL}, -#endif - {"Intel Advanced/ATX", ROM_THOR, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 256, 1, at_endeavor_init, NULL}, - {"MR Intel Advanced/ATX", ROM_MRTHOR, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 256, 1, at_endeavor_init, NULL}, - {"ASUS P/I-P54TP4XE", ROM_P54TP4XE, { "Intel", cpus_PentiumS5, "IDT", cpus_WinChip, "AMD", cpus_K5, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 512, 1, at_p54tp4xe_init, NULL}, - // {"Intel Advanced/ML", ROM_MARL, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 512, 1, at_marl_init, NULL}, - {"Acer M3a", ROM_ACERM3A, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 512, 1, at_acerm3a_init, NULL}, - {"Acer V35N", ROM_ACERV35N, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 512, 1, at_acerv35n_init, NULL}, - {"ASUS P/I-P55T2P4", ROM_P55T2P4, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 512, 1, at_p55t2p4_init, NULL}, - {"Award 430VX PCI", ROM_430VX, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 256, 1, at_i430vx_init, NULL}, - {"Epox P55-VA", ROM_P55VA, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 256, 1, at_p55va_init, NULL}, - {"ASUS P/I-P55TVP4", ROM_P55TVP4, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 256, 1, at_p55tvp4_init, NULL}, - {"Award 440FX PCI", ROM_440FX, { "Intel", cpus_PentiumPro, "", NULL, "", NULL}, 0, MODEL_AT|MODEL_PS2, 1, 1024, 1, at_i440fx_init, NULL}, - // {"Award 440FX PCI", ROM_440FX, { "Intel", cpus_PentiumPro,"Klamath", cpus_Pentium2, "Deschutes", cpus_Pentium2D}, 0, MODEL_AT|MODEL_PS2, 1, 1024, 1, at_i440fx_init, NULL}, - {"", -1, {"", 0, "", 0, "", 0}, 0,0,0, 0} + {"Amstrad MegaPC 386DX", ROM_MEGAPCDX, "megapcdx", { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC, "", NULL, "", NULL}, 1, MODEL_AT | MODEL_PS2, 1, 16, 1, at_wd76c10_init, NULL}, + {"AMI 386SX clone", ROM_AMI386SX, "ami386", { "Intel", cpus_i386SX, "AMD", cpus_Am386SX, "Cyrix", cpus_486SLC, "", NULL, "", NULL}, 0, MODEL_AT, 1, 256, 1, at_headland_init, NULL}, + {"MR 386DX clone", ROM_MR386DX_OPTI495, "mr386dx", { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC, "", NULL, "", NULL}, 0, MODEL_AT, 1, 256, 1, at_opti495_init, NULL}, + {"AMI 386DX clone", ROM_AMI386DX_OPTI495, "ami386dx", { "Intel", cpus_i386DX, "AMD", cpus_Am386DX, "Cyrix", cpus_486DLC, "", NULL, "", NULL}, 0, MODEL_AT, 1, 256, 1, at_opti495_init, NULL}, + {"AMI 486 clone", ROM_AMI486, "ami486", { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486, "", NULL, "", NULL}, 0, MODEL_AT, 1, 256, 1, at_ali1429_init, NULL}, + {"AMI WinBIOS 486", ROM_WIN486, "win486", { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486, "", NULL, "", NULL}, 0, MODEL_AT, 1, 256, 1, at_ali1429_init, NULL}, + {"DTK PKM-0038S E-2", ROM_DTK486, "dtk486", { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486, "", NULL, "", NULL}, 0, MODEL_AT, 1, 256, 1, at_dtk486_init, NULL}, + {"Award SiS 496/497", ROM_SIS496, "sis496", { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486, "", NULL, "", NULL}, 0, MODEL_AT, 1, 256, 1, at_sis496_init, NULL}, + {"Rise Computer R418", ROM_R418, "r418", { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486, "", NULL, "", NULL}, 0, MODEL_AT, 1, 256, 1, at_r418_init, NULL}, + {"Intel Premiere/PCI", ROM_REVENGE, "revenge", { "Intel", cpus_Pentium5V, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 128, 1, at_batman_init, NULL}, + {"Micro Star 586MC1", ROM_586MC1, "586mc1", { "Intel", cpus_Pentium5V50, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT, 1, 128, 1, at_586mc1_init, NULL}, + {"Intel Premiere/PCI II", ROM_PLATO, "plato", { "Intel", cpus_PentiumS5, "IDT", cpus_WinChip, "AMD", cpus_K5, "", NULL, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 128, 1, at_plato_init, NULL}, + {"Intel Advanced/EV", ROM_ENDEAVOR, "endeavor", { "Intel", cpus_PentiumS5, "IDT", cpus_WinChip, "AMD", cpus_K5, "", NULL, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 128, 1, at_endeavor_init, NULL}, + {"PC Partner MB500N", ROM_MB500N, "mb500n", { "Intel", cpus_PentiumS5, "IDT", cpus_WinChip, "AMD", cpus_K5, "", NULL, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 128, 1, at_mb500n_init, NULL}, + {"Intel Advanced/ATX", ROM_THOR, "thor", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 256, 1, at_endeavor_init, NULL}, + {"MR Intel Advanced/ATX", ROM_MRTHOR, "mrthor", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 256, 1, at_endeavor_init, NULL}, + {"ASUS P/I-P54TP4XE", ROM_P54TP4XE, "p54tp4xe", { "Intel", cpus_PentiumS5, "IDT", cpus_WinChip, "AMD", cpus_K5, "", NULL, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 512, 1, at_p54tp4xe_init, NULL}, + {"Acer M3a", ROM_ACERM3A, "acerm3a", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 512, 1, at_acerm3a_init, NULL}, + {"Acer V35N", ROM_ACERV35N, "acerv3n", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 512, 1, at_acerv35n_init, NULL}, + {"ASUS P/I-P55T2P4", ROM_P55T2P4, "p55r2p4", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 512, 1, at_p55t2p4_init, NULL}, + {"Award 430VX PCI", ROM_430VX, "430vx", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 256, 1, at_i430vx_init, NULL}, + {"Epox P55-VA", ROM_P55VA, "p55va", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 256, 1, at_p55va_init, NULL}, + {"ASUS P/I-P55TVP4", ROM_P55TVP4, "p55tvp4", { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "Cyrix", cpus_6x86, "AMD", cpus_K56, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 256, 1, at_p55tvp4_init, NULL}, + {"Award 440FX PCI", ROM_440FX, "440fx", { "Intel", cpus_PentiumPro, "", NULL, "", NULL, "", NULL, "", NULL}, 0, MODEL_AT | MODEL_PS2, 1, 1024, 1, at_i440fx_init, NULL}, + {"", -1, "", {"", 0, "", 0, "", 0}, 0,0,0, 0} }; int model_count() @@ -230,6 +222,25 @@ device_t *model_getdevice(int model) return models[model].device; } +char *model_get_internal_name() +{ + return models[model].internal_name; +} + +int model_get_model_from_internal_name(char *s) +{ + int c = 0; + + while (models[c].id != -1) + { + if (!strcmp(models[c].internal_name, s)) + return c; + c++; + } + + return 0; +} + void common_init() { dma_init(); diff --git a/src/model.h b/src/model.h index 8eb2cc152..eceda3a39 100644 --- a/src/model.h +++ b/src/model.h @@ -11,8 +11,9 @@ typedef struct { - char name[24]; + char name[32]; int id; + char internal_name[24]; struct { char name[16]; @@ -34,5 +35,7 @@ int model_count(); int model_getromset(); int model_getmodel(int romset); char *model_getname(); +char *model_get_internal_name(); +int model_get_model_from_internal_name(char *s); void model_init(); struct device_t *model_getdevice(int model); diff --git a/src/pc.c b/src/pc.c index de8f5cc85..511de3999 100644 --- a/src/pc.c +++ b/src/pc.c @@ -745,7 +745,11 @@ void loadconfig(char *fn) inum = ethif + 1; network_card_current = config_get_int(NULL, "netcard", NE2000); - model = config_get_int(NULL, "model", 14); + p = (char *)config_get_string(NULL, "model", ""); + if (p) + model = model_get_model_from_internal_name(p); + else + model = 0; if (model >= model_count()) model = model_count() - 1; @@ -757,7 +761,11 @@ void loadconfig(char *fn) cpu_waitstates = config_get_int(NULL, "cpu_waitstates", 0); - gfxcard = config_get_int(NULL, "gfxcard", 0); + p = (char *)config_get_string(NULL, "gfxcard", ""); + if (p) + gfxcard = video_get_video_from_internal_name(p); + else + gfxcard = 0; video_speed = config_get_int(NULL, "video_speed", 3); sound_card_current = config_get_int(NULL, "sndcard", SB2); @@ -986,13 +994,13 @@ void saveconfig() config_set_int(NULL, "netinterface", ethif); config_set_int(NULL, "netcard", network_card_current); - config_set_int(NULL, "model", model); + config_set_string(NULL, "model", model_get_internal_name()); config_set_int(NULL, "cpu_manufacturer", cpu_manufacturer); config_set_int(NULL, "cpu", cpu); config_set_int(NULL, "cpu_use_dynarec", cpu_use_dynarec); config_set_int(NULL, "cpu_waitstates", cpu_waitstates); - config_set_int(NULL, "gfxcard", gfxcard); + config_set_string(NULL, "gfxcard", video_get_internal_name(video_old_to_new(gfxcard))); config_set_int(NULL, "video_speed", video_speed); config_set_int(NULL, "sndcard", sound_card_current); config_set_int(NULL, "cpu_speed", cpuspeed); diff --git a/src/pc.rc b/src/pc.rc index 18c05c9cf..4b7297461 100644 --- a/src/pc.rc +++ b/src/pc.rc @@ -293,6 +293,8 @@ BEGIN MENUITEM "&DirectDraw", IDM_VID_DDRAW MENUITEM "Direct&3D 9", IDM_VID_D3D MENUITEM SEPARATOR + MENUITEM "D&isc activity flash", IDM_VID_FLASH + MENUITEM SEPARATOR MENUITEM "&Fullscreen", IDM_VID_FULLSCREEN POPUP "Fullscreen &stretch mode" BEGIN @@ -301,12 +303,11 @@ BEGIN MENUITEM "&Square pixels", IDM_VID_FS_SQ MENUITEM "&Integer scale", IDM_VID_FS_INT END + MENUITEM "&Inverted VGA monitor", IDM_VID_INVERT MENUITEM SEPARATOR MENUITEM "F&orce 4:3 display ratio", IDM_VID_FORCE43 MENUITEM "E&GA/(S)VGA overscan", IDM_VID_OVERSCAN MENUITEM SEPARATOR - MENUITEM "D&isc activity flash", IDM_VID_FLASH - MENUITEM SEPARATOR MENUITEM "Take s&creenshot\tCtrl+F11", IDM_VID_SCREENSHOT END MENUITEM "&Status", IDM_STATUS diff --git a/src/resources.h b/src/resources.h index 41b018c9f..d216f0f7e 100644 --- a/src/resources.h +++ b/src/resources.h @@ -30,12 +30,13 @@ #define IDM_VID_OVERSCAN 40076 #define IDM_VID_FLASH 40077 #define IDM_VID_SCREENSHOT 40078 -#define IDM_DISC_3 40079 -#define IDM_DISC_4 40080 -#define IDM_EJECT_3 40081 -#define IDM_EJECT_4 40082 -#define IDM_DISC_3_WP 40083 -#define IDM_DISC_4_WP 40084 +#define IDM_VID_INVERT 40079 +#define IDM_DISC_3 40081 +#define IDM_DISC_4 40082 +#define IDM_EJECT_3 40083 +#define IDM_EJECT_4 40084 +#define IDM_DISC_3_WP 40085 +#define IDM_DISC_4_WP 40086 #define IDM_CDROM_1_ISO 40100 #define IDM_CDROM_1_RELOAD 40101 #define IDM_CDROM_1_EMPTY 40200 diff --git a/src/vid_ega.c b/src/vid_ega.c index dc8ec33a8..a900b3e49 100644 --- a/src/vid_ega.c +++ b/src/vid_ega.c @@ -597,10 +597,10 @@ void ega_poll(void *p) { if ((x >= 160) && ((ega->lastline - ega->firstline) >= 120)) { - for (i = 0; i < 14; i++) + for (i = 0; i < y_add; i++) { q = &((uint32_t *)buffer32->line[i])[32]; - r = &((uint32_t *)buffer32->line[ysize + y_add_ex - 1 - i])[32]; + r = &((uint32_t *)buffer32->line[ysize + y_add + i])[32]; for (j = 0; j < (xsize + x_add_ex); j++) { @@ -609,14 +609,14 @@ void ega_poll(void *p) } } - for (i = 14; i < (ysize + 14); i ++) + for (i = y_add; i < (ysize + y_add); i ++) { q = &((uint32_t *)buffer32->line[i])[32]; - for (j = 0; j < 8; j++) + for (j = 0; j < x_add; j++) { q[j] = ega->pallook[ega->attrregs[0x11]]; - q[xsize + x_add_ex - 1 - j] = ega->pallook[ega->attrregs[0x11]]; + q[xsize + x_add + j] = ega->pallook[ega->attrregs[0x11]]; } } } diff --git a/src/vid_svga.c b/src/vid_svga.c index 0a8970b43..57999469f 100644 --- a/src/vid_svga.c +++ b/src/vid_svga.c @@ -1605,26 +1605,26 @@ void svga_doblit(int y1, int y2, int wx, int wy, svga_t *svga) { if ((wx >= 160) && ((wy + 1) >= 120)) { - for (i = 0; i < 16; i++) + for (i = 0; i < (y_add >> 1); i++) { p = &((uint32_t *)buffer32->line[i])[32]; - q = &((uint32_t *)buffer32->line[ysize + y_add - 1 - i])[32]; + q = &((uint32_t *)buffer32->line[ysize + (y_add >> 1) + i])[32]; for (j = 0; j < (xsize + x_add); j++) { - p[j] = svga->pallook[svga->attrregs[0x11]]; - q[j] = svga->pallook[svga->attrregs[0x11]]; + p[j] = svga_color_transform(svga->pallook[svga->attrregs[0x11]]); + q[j] = svga_color_transform(svga->pallook[svga->attrregs[0x11]]); } } - for (i = 16; i < (ysize + 16); i ++) + for (i = (y_add >> 1); i < (ysize + (y_add >> 1)); i ++) { p = &((uint32_t *)buffer32->line[i])[32]; for (j = 0; j < 8; j++) { - p[j] = svga->pallook[svga->attrregs[0x11]]; - p[xsize + x_add - 1 - j] = svga->pallook[svga->attrregs[0x11]]; + p[j] = svga_color_transform(svga->pallook[svga->attrregs[0x11]]); + p[xsize + (x_add >> 1) + j] = svga_color_transform(svga->pallook[svga->attrregs[0x11]]); } } } diff --git a/src/vid_svga_render.c b/src/vid_svga_render.c index 0565b0281..56907c4ba 100644 --- a/src/vid_svga_render.c +++ b/src/vid_svga_render.c @@ -8,6 +8,24 @@ #include "vid_svga_render.h" #include +int invert_display = 0; + +uint32_t svga_color_transform(uint32_t color) +{ + uint32_t temp = 0; + if (invert_display) + { + temp |= (0xff - (color & 0xff)); + temp |= (0xff00 - (color & 0xff00)); + temp |= (0xff0000 - (color & 0xff0000)); + } + else + { + temp = color; + } + return temp; +} + void svga_render_blank(svga_t *svga) { int x, xx; @@ -23,16 +41,16 @@ void svga_render_blank(svga_t *svga) switch (svga->seqregs[1] & 9) { case 0: - for (xx = 0; xx < 9; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 9) + xx + 32 + x_add] = 0; + for (xx = 0; xx < 9; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 9) + xx + 32 + x_add] = svga_color_transform(0); break; case 1: - for (xx = 0; xx < 8; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 8) + xx + 32 + x_add] = 0; + for (xx = 0; xx < 8; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 8) + xx + 32 + x_add] = svga_color_transform(0); break; case 8: - for (xx = 0; xx < 18; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 18) + xx + 32 + x_add] = 0; + for (xx = 0; xx < 18; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 18) + xx + 32 + x_add] = svga_color_transform(0); break; case 9: - for (xx = 0; xx < 16; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 16) + xx + 32 + x_add] = 0; + for (xx = 0; xx < 16; xx++) ((uint32_t *)buffer32->line[svga->displine + y_add])[(x * 16) + xx + 32 + x_add] = svga_color_transform(0); break; } } @@ -86,16 +104,16 @@ void svga_render_text_40(svga_t *svga) if (svga->seqregs[1] & 1) { for (xx = 0; xx < 16; xx += 2) - p[xx] = p[xx + 1] = (dat & (0x80 >> (xx >> 1))) ? fg : bg; + p[xx] = p[xx + 1] = (dat & (0x80 >> (xx >> 1))) ? svga_color_transform(fg) : svga_color_transform(bg); } else { for (xx = 0; xx < 16; xx += 2) - p[xx] = p[xx + 1] = (dat & (0x80 >> (xx >> 1))) ? fg : bg; + p[xx] = p[xx + 1] = (dat & (0x80 >> (xx >> 1))) ? svga_color_transform(fg) : svga_color_transform(bg); if ((chr & ~0x1F) != 0xC0 || !(svga->attrregs[0x10] & 4)) - p[16] = p[17] = bg; + p[16] = p[17] = svga_color_transform(bg); else - p[16] = p[17] = (dat & 1) ? fg : bg; + p[16] = p[17] = (dat & 1) ? svga_color_transform(fg) : svga_color_transform(bg); } svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); @@ -151,7 +169,7 @@ void svga_render_text_40_12(svga_t *svga) dat = *(uint16_t *) &(svga->vram[charaddr + (svga->sc << 2) - 1]); for (xx = 0; xx < 24; xx += 2) - p[xx] = p[xx + 1] = (dat & (0x800 >> (xx >> 1))) ? fg : bg; + p[xx] = p[xx + 1] = (dat & (0x800 >> (xx >> 1))) ? svga_color_transform(fg) : svga_color_transform(bg); svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); p += xinc; @@ -207,16 +225,16 @@ void svga_render_text_80(svga_t *svga) if (svga->seqregs[1] & 1) { for (xx = 0; xx < 8; xx++) - p[xx] = (dat & (0x80 >> xx)) ? fg : bg; + p[xx] = (dat & (0x80 >> xx)) ? svga_color_transform(fg) : svga_color_transform(bg); } else { for (xx = 0; xx < 8; xx++) - p[xx] = (dat & (0x80 >> xx)) ? fg : bg; + p[xx] = (dat & (0x80 >> xx)) ? svga_color_transform(fg) : svga_color_transform(bg); if ((chr & ~0x1F) != 0xC0 || !(svga->attrregs[0x10] & 4)) - p[8] = bg; + p[8] = svga_color_transform(bg); else - p[8] = (dat & 1) ? fg : bg; + p[8] = (dat & 1) ? svga_color_transform(fg) : svga_color_transform(bg); } svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); @@ -273,7 +291,7 @@ void svga_render_text_80_12(svga_t *svga) dat = svga->vram[charaddr + (svga->sc << 2)] << 4; dat |= ((svga->vram[charaddr + (svga->sc << 2) + 1]) >> 4); for (xx = 0; xx < 12; xx++) - p[xx] = (dat & (0x800 >> xx)) ? fg : bg; + p[xx] = (dat & (0x800 >> xx)) ? svga_color_transform(fg) : svga_color_transform(bg); svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); p += xinc; @@ -319,14 +337,14 @@ void svga_render_2bpp_lowres(svga_t *svga) svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); - p[0] = p[1] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3] & svga->dac_mask]; - p[2] = p[3] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3] & svga->dac_mask]; - p[4] = p[5] = svga->pallook[svga->egapal[(dat[0] >> 2) & 3] & svga->dac_mask]; - p[6] = p[7] = svga->pallook[svga->egapal[dat[0] & 3] & svga->dac_mask]; - p[8] = p[9] = svga->pallook[svga->egapal[(dat[1] >> 6) & 3] & svga->dac_mask]; - p[10] = p[11] = svga->pallook[svga->egapal[(dat[1] >> 4) & 3] & svga->dac_mask]; - p[12] = p[13] = svga->pallook[svga->egapal[(dat[1] >> 2) & 3] & svga->dac_mask]; - p[14] = p[15] = svga->pallook[svga->egapal[dat[1] & 3] & svga->dac_mask]; + p[0] = p[1] = svga_color_transform(svga->pallook[svga->egapal[(dat[0] >> 6) & 3] & svga->dac_mask]); + p[2] = p[3] = svga_color_transform(svga->pallook[svga->egapal[(dat[0] >> 4) & 3] & svga->dac_mask]); + p[4] = p[5] = svga_color_transform(svga->pallook[svga->egapal[(dat[0] >> 2) & 3] & svga->dac_mask]); + p[6] = p[7] = svga_color_transform(svga->pallook[svga->egapal[dat[0] & 3] & svga->dac_mask]); + p[8] = p[9] = svga_color_transform(svga->pallook[svga->egapal[(dat[1] >> 6) & 3] & svga->dac_mask]); + p[10] = p[11] = svga_color_transform(svga->pallook[svga->egapal[(dat[1] >> 4) & 3] & svga->dac_mask]); + p[12] = p[13] = svga_color_transform(svga->pallook[svga->egapal[(dat[1] >> 2) & 3] & svga->dac_mask]); + p[14] = p[15] = svga_color_transform(svga->pallook[svga->egapal[dat[1] & 3] & svga->dac_mask]); p += 16; } @@ -371,14 +389,14 @@ void svga_render_2bpp_highres(svga_t *svga) svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); - p[0] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3] & svga->dac_mask]; - p[1] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3] & svga->dac_mask]; - p[2] = svga->pallook[svga->egapal[(dat[0] >> 2) & 3] & svga->dac_mask]; - p[3] = svga->pallook[svga->egapal[dat[0] & 3] & svga->dac_mask]; - p[4] = svga->pallook[svga->egapal[(dat[1] >> 6) & 3] & svga->dac_mask]; - p[5] = svga->pallook[svga->egapal[(dat[1] >> 4) & 3] & svga->dac_mask]; - p[6] = svga->pallook[svga->egapal[(dat[1] >> 2) & 3] & svga->dac_mask]; - p[7] = svga->pallook[svga->egapal[dat[1] & 3] & svga->dac_mask]; + p[0] = svga_color_transform(svga->pallook[svga->egapal[(dat[0] >> 6) & 3] & svga->dac_mask]); + p[1] = svga_color_transform(svga->pallook[svga->egapal[(dat[0] >> 4) & 3] & svga->dac_mask]); + p[2] = svga_color_transform(svga->pallook[svga->egapal[(dat[0] >> 2) & 3] & svga->dac_mask]); + p[3] = svga_color_transform(svga->pallook[svga->egapal[dat[0] & 3] & svga->dac_mask]); + p[4] = svga_color_transform(svga->pallook[svga->egapal[(dat[1] >> 6) & 3] & svga->dac_mask]); + p[5] = svga_color_transform(svga->pallook[svga->egapal[(dat[1] >> 4) & 3] & svga->dac_mask]); + p[6] = svga_color_transform(svga->pallook[svga->egapal[(dat[1] >> 2) & 3] & svga->dac_mask]); + p[7] = svga_color_transform(svga->pallook[svga->egapal[dat[1] & 3] & svga->dac_mask]); p += 8; } @@ -410,17 +428,17 @@ void svga_render_4bpp_lowres(svga_t *svga) svga->ma = svga_mask_addr(svga->ma, svga); dat = edatlookup[edat[0] >> 6][edat[1] >> 6] | (edatlookup[edat[2] >> 6][edat[3] >> 6] << 2); - p[0] = p[1] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]; - p[2] = p[3] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]; + p[0] = p[1] = svga_color_transform(svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]); + p[2] = p[3] = svga_color_transform(svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]); dat = edatlookup[(edat[0] >> 4) & 3][(edat[1] >> 4) & 3] | (edatlookup[(edat[2] >> 4) & 3][(edat[3] >> 4) & 3] << 2); - p[4] = p[5] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]; - p[6] = p[7] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]; + p[4] = p[5] = svga_color_transform(svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]); + p[6] = p[7] = svga_color_transform(svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]); dat = edatlookup[(edat[0] >> 2) & 3][(edat[1] >> 2) & 3] | (edatlookup[(edat[2] >> 2) & 3][(edat[3] >> 2) & 3] << 2); - p[8] = p[9] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]; - p[10] = p[11] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]; + p[8] = p[9] = svga_color_transform(svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]); + p[10] = p[11] = svga_color_transform(svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]); dat = edatlookup[edat[0] & 3][edat[1] & 3] | (edatlookup[edat[2] & 3][edat[3] & 3] << 2); - p[12] = p[13] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]; - p[14] = p[15] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]; + p[12] = p[13] = svga_color_transform(svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]); + p[14] = p[15] = svga_color_transform(svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]); p += 16; } @@ -467,17 +485,17 @@ void svga_render_4bpp_highres(svga_t *svga) svga->ma = svga_mask_addr(svga->ma, svga); dat = edatlookup[edat[0] >> 6][edat[1] >> 6] | (edatlookup[edat[2] >> 6][edat[3] >> 6] << 2); - p[0] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]; - p[1] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]; + p[0] = svga_color_transform(svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]); + p[1] = svga_color_transform(svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]); dat = edatlookup[(edat[0] >> 4) & 3][(edat[1] >> 4) & 3] | (edatlookup[(edat[2] >> 4) & 3][(edat[3] >> 4) & 3] << 2); - p[2] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]; - p[3] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]; + p[2] = svga_color_transform(svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]); + p[3] = svga_color_transform(svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]); dat = edatlookup[(edat[0] >> 2) & 3][(edat[1] >> 2) & 3] | (edatlookup[(edat[2] >> 2) & 3][(edat[3] >> 2) & 3] << 2); - p[4] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]; - p[5] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]; + p[4] = svga_color_transform(svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]); + p[5] = svga_color_transform(svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]); dat = edatlookup[edat[0] & 3][edat[1] & 3] | (edatlookup[edat[2] & 3][edat[3] & 3] << 2); - p[6] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]; - p[7] = svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]; + p[6] = svga_color_transform(svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask] & svga->dac_mask]); + p[7] = svga_color_transform(svga->pallook[svga->egapal[dat & svga->plane_mask] & svga->dac_mask]); p += 8; } @@ -503,10 +521,10 @@ void svga_render_8bpp_lowres(svga_t *svga) { uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma]); - p[0] = p[1] = svga->pallook[dat & svga->dac_mask]; - p[2] = p[3] = svga->pallook[(dat >> 8) & svga->dac_mask]; - p[4] = p[5] = svga->pallook[(dat >> 16) & svga->dac_mask]; - p[6] = p[7] = svga->pallook[(dat >> 24) & svga->dac_mask]; + p[0] = p[1] = svga_color_transform(svga->pallook[dat & svga->dac_mask]); + p[2] = p[3] = svga_color_transform(svga->pallook[(dat >> 8) & svga->dac_mask]); + p[4] = p[5] = svga_color_transform(svga->pallook[(dat >> 16) & svga->dac_mask]); + p[6] = p[7] = svga_color_transform(svga->pallook[(dat >> 24) & svga->dac_mask]); svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); @@ -536,16 +554,16 @@ void svga_render_8bpp_highres(svga_t *svga) { uint32_t dat; dat = *(uint32_t *)(&svga->vram[svga->ma]); - p[0] = svga->pallook[dat & svga->dac_mask]; - p[1] = svga->pallook[(dat >> 8) & svga->dac_mask]; - p[2] = svga->pallook[(dat >> 16) & svga->dac_mask]; - p[3] = svga->pallook[(dat >> 24) & svga->dac_mask]; + p[0] = svga_color_transform(svga->pallook[dat & svga->dac_mask]); + p[1] = svga_color_transform(svga->pallook[(dat >> 8) & svga->dac_mask]); + p[2] = svga_color_transform(svga->pallook[(dat >> 16) & svga->dac_mask]); + p[3] = svga_color_transform(svga->pallook[(dat >> 24) & svga->dac_mask]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + 4, svga)]); - p[4] = svga->pallook[dat & svga->dac_mask]; - p[5] = svga->pallook[(dat >> 8) & svga->dac_mask]; - p[6] = svga->pallook[(dat >> 16) & svga->dac_mask]; - p[7] = svga->pallook[(dat >> 24) & svga->dac_mask]; + p[4] = svga_color_transform(svga->pallook[dat & svga->dac_mask]); + p[5] = svga_color_transform(svga->pallook[(dat >> 8) & svga->dac_mask]); + p[6] = svga_color_transform(svga->pallook[(dat >> 16) & svga->dac_mask]); + p[7] = svga_color_transform(svga->pallook[(dat >> 24) & svga->dac_mask]); svga->ma += 8; svga->ma = svga_mask_addr(svga->ma, svga); @@ -575,13 +593,13 @@ void svga_render_15bpp_lowres(svga_t *svga) { uint32_t dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1), svga)]); - p[x] = video_15to32[dat & 0xffff]; - p[x + 1] = video_15to32[dat >> 16]; + p[x] = svga_color_transform(video_15to32[dat & 0xffff]); + p[x + 1] = svga_color_transform(video_15to32[dat >> 16]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1) + 4, svga)]); - p[x] = video_15to32[dat & 0xffff]; - p[x + 1] = video_15to32[dat >> 16]; + p[x] = svga_color_transform(video_15to32[dat & 0xffff]); + p[x + 1] = svga_color_transform(video_15to32[dat >> 16]); } svga->ma += x << 1; svga->ma = svga_mask_addr(svga->ma, svga); @@ -606,20 +624,20 @@ void svga_render_15bpp_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 8) { uint32_t dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1), svga)]); - p[x] = video_15to32[dat & 0xffff]; - p[x + 1] = video_15to32[dat >> 16]; + p[x] = svga_color_transform(video_15to32[dat & 0xffff]); + p[x + 1] = svga_color_transform(video_15to32[dat >> 16]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1) + 4, svga)]); - p[x + 2] = video_15to32[dat & 0xffff]; - p[x + 3] = video_15to32[dat >> 16]; + p[x + 2] = svga_color_transform(video_15to32[dat & 0xffff]); + p[x + 3] = svga_color_transform(video_15to32[dat >> 16]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1) + 8, svga)]); - p[x + 4] = video_15to32[dat & 0xffff]; - p[x + 5] = video_15to32[dat >> 16]; + p[x + 4] = svga_color_transform(video_15to32[dat & 0xffff]); + p[x + 5] = svga_color_transform(video_15to32[dat >> 16]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1) + 12, svga)]); - p[x + 6] = video_15to32[dat & 0xffff]; - p[x + 7] = video_15to32[dat >> 16]; + p[x + 6] = svga_color_transform(video_15to32[dat & 0xffff]); + p[x + 7] = svga_color_transform(video_15to32[dat >> 16]); } svga->ma += x << 1; svga->ma = svga_mask_addr(svga->ma, svga); @@ -645,13 +663,13 @@ void svga_render_16bpp_lowres(svga_t *svga) { uint32_t dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1), svga)]); - p[x] = video_16to32[dat & 0xffff]; - p[x + 1] = video_16to32[dat >> 16]; + p[x] = svga_color_transform(video_16to32[dat & 0xffff]); + p[x + 1] = svga_color_transform(video_16to32[dat >> 16]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1) + 4, svga)]); - p[x] = video_16to32[dat & 0xffff]; - p[x + 1] = video_16to32[dat >> 16]; + p[x] = svga_color_transform(video_16to32[dat & 0xffff]); + p[x + 1] = svga_color_transform(video_16to32[dat >> 16]); } svga->ma += x << 1; svga->ma = svga_mask_addr(svga->ma, svga); @@ -676,20 +694,20 @@ void svga_render_16bpp_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 8) { uint32_t dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1), svga)]); - p[x] = video_16to32[dat & 0xffff]; - p[x + 1] = video_16to32[dat >> 16]; + p[x] = svga_color_transform(video_16to32[dat & 0xffff]); + p[x + 1] = svga_color_transform(video_16to32[dat >> 16]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1) + 4, svga)]); - p[x + 2] = video_16to32[dat & 0xffff]; - p[x + 3] = video_16to32[dat >> 16]; + p[x + 2] = svga_color_transform(video_16to32[dat & 0xffff]); + p[x + 3] = svga_color_transform(video_16to32[dat >> 16]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1) + 8, svga)]); - p[x + 4] = video_16to32[dat & 0xffff]; - p[x + 5] = video_16to32[dat >> 16]; + p[x + 4] = svga_color_transform(video_16to32[dat & 0xffff]); + p[x + 5] = svga_color_transform(video_16to32[dat >> 16]); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 1) + 12, svga)]); - p[x + 6] = video_16to32[dat & 0xffff]; - p[x + 7] = video_16to32[dat >> 16]; + p[x + 6] = svga_color_transform(video_16to32[dat & 0xffff]); + p[x + 7] = svga_color_transform(video_16to32[dat >> 16]); } svga->ma += x << 1; svga->ma = svga_mask_addr(svga->ma, svga); @@ -716,7 +734,7 @@ void svga_render_24bpp_lowres(svga_t *svga) fg = svga->vram[svga->ma] | (svga->vram[svga_mask_addr(svga->ma + 1, svga)] << 8) | (svga->vram[svga_mask_addr(svga->ma + 2, svga)] << 16); svga->ma += 3; svga->ma = svga_mask_addr(svga->ma, svga); - ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + offset + x_add] = ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + 1 + offset + x_add] = fg; + ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + offset + x_add] = ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + 1 + offset + x_add] = svga_color_transform(fg); } } } @@ -739,16 +757,16 @@ void svga_render_24bpp_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 4) { uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma]); - p[x] = dat & 0xffffff; + p[x] = svga_color_transform(dat & 0xffffff); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + 3, svga)]); - p[x + 1] = dat & 0xffffff; + p[x + 1] = svga_color_transform(dat & 0xffffff); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + 6, svga)]); - p[x + 2] = dat & 0xffffff; + p[x + 2] = svga_color_transform(dat & 0xffffff); dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + 9, svga)]); - p[x + 3] = dat & 0xffffff; + p[x + 3] = svga_color_transform(dat & 0xffffff); svga->ma += 12; svga->ma = svga_mask_addr(svga->ma, svga); @@ -776,7 +794,7 @@ void svga_render_32bpp_lowres(svga_t *svga) fg = svga->vram[svga->ma] | (svga->vram[svga_mask_addr(svga->ma + 1, svga)] << 8) | (svga->vram[svga_mask_addr(svga->ma + 2, svga)] << 16); svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); - ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + offset + x_add] = ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + 1 + offset + x_add] = fg; + ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + offset + x_add] = ((uint32_t *)buffer32->line[svga->displine + y_add])[(x << 1) + 1 + offset + x_add] = svga_color_transform(fg); } } } @@ -801,7 +819,7 @@ void svga_render_32bpp_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x++) { uint32_t dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 2), svga)]); - p[x] = dat & 0xffffff; + p[x] = svga_color_transform(dat & 0xffffff); } svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); @@ -826,7 +844,7 @@ void svga_render_ABGR8888_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x++) { uint32_t dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 2), svga)]); - p[x] = ((dat & 0xff0000) >> 16) | (dat & 0x00ff00) | ((dat & 0x0000ff) << 16); + p[x] = svga_color_transform(((dat & 0xff0000) >> 16) | (dat & 0x00ff00) | ((dat & 0x0000ff) << 16)); } svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); @@ -851,7 +869,7 @@ void svga_render_RGBA8888_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x++) { uint32_t dat = *(uint32_t *)(&svga->vram[svga_mask_addr(svga->ma + (x << 2), svga)]); - p[x] = dat >> 8; + p[x] = svga_color_transform(dat >> 8); } svga->ma += 4; svga->ma = svga_mask_addr(svga->ma, svga); diff --git a/src/video.c b/src/video.c index 6c3c00ab8..6dd8883a0 100644 --- a/src/video.c +++ b/src/video.c @@ -4,7 +4,7 @@ #include #include #include -#include 1 +#include #include "ibm.h" #include "config.h" #include "device.h" @@ -57,54 +57,53 @@ int cga_palette = 0; typedef struct { char name[64]; + char internal_name[24]; device_t *device; int legacy_id; } VIDEO_CARD; static VIDEO_CARD video_cards[] = { - {"ATI Graphics Pro Turbo (Mach64 GX)", &mach64gx_device, GFX_MACH64GX}, - {"ATI VGA Charger (ATI-28800-5)", &ati28800_device, GFX_VGACHARGER}, - {"ATI VGA Wonder XL24 (ATI-28800-6)", &ati28800_wonderxl24_device, GFX_VGAWONDERXL24}, - {"ATI VGA Edge-16 (ATI-18800)", &ati18800_device, GFX_VGAEDGE16}, - {"CGA", &cga_device, GFX_CGA}, - {"Cirrus Logic CL-GD5429", &gd5429_device, GFX_CL_GD5429}, - {"Diamond Stealth 32 (Tseng ET4000/w32p)", &et4000w32p_device, GFX_ET4000W32}, - {"Diamond Stealth 64 DRAM (S3 Vision864)", &s3_diamond_stealth64_device,GFX_STEALTH64}, - {"Diamond Stealth 3D 2000 (S3 ViRGE)", &s3_virge_device, GFX_VIRGE}, - {"EGA", &ega_device, GFX_EGA}, - {"Chips & Technologies SuperEGA", &sega_device, GFX_SUPER_EGA}, - /* {"Chips & Technologies VGA 451", &vga_chips_device, GFX_CHIPS_VGA}, */ - {"Compaq ATI VGA Wonder XL (ATI-28800-5)", &compaq_ati28800_device, GFX_VGAWONDERXL}, - {"Compaq EGA", &cpqega_device, GFX_COMPAQ_EGA}, - {"Compaq/Paradise VGA", &cpqvga_device, GFX_COMPAQ_VGA}, - {"Hercules", &hercules_device, GFX_HERCULES}, - {"Hercules Plus", &herculesplus_device, GFX_HERCULESPLUS}, - {"Hercules InColor", &incolor_device, GFX_INCOLOR}, - {"MDA", &mda_device, GFX_MDA}, - {"Miro Crystal S3 Vision964", &s3_miro_vision964_device, GFX_MIRO_VISION964}, - {"Number Nine 9FX (S3 Trio64)", &s3_9fx_device, GFX_N9_9FX}, - {"nVidia RIVA 128 (Experimental)", &riva128_device, GFX_RIVA128}, - {"nVidia RIVA TNT (Experimental)", &rivatnt_device, GFX_RIVATNT}, - {"nVidia TNT2 (Experimental)", &rivatnt2_device, GFX_RIVATNT2}, + {"ATI Graphics Pro Turbo (Mach64 GX)", "mach64x", &mach64gx_device, GFX_MACH64GX}, + {"ATI VGA Charger (ATI-28800-5)", "ati28800", &ati28800_device, GFX_VGACHARGER}, + {"ATI VGA Wonder XL24 (ATI-28800-6)", "ati28800w", &ati28800_wonderxl24_device, GFX_VGAWONDERXL24}, + {"ATI VGA Edge-16 (ATI-18800)", "ati18800", &ati18800_device, GFX_VGAEDGE16}, + {"CGA", "cga", &cga_device, GFX_CGA}, + {"Cirrus Logic CL-GD5429", "cl_gd5429", &gd5429_device, GFX_CL_GD5429}, + {"Diamond Stealth 32 (Tseng ET4000/w32p)", "stealth32", &et4000w32p_device, GFX_ET4000W32}, + {"Diamond Stealth 64 DRAM (S3 Vision864)", "stealth64d", &s3_diamond_stealth64_device,GFX_STEALTH64}, + {"Diamond Stealth 3D 2000 (S3 ViRGE)", "stealth3d_2000", &s3_virge_device, GFX_VIRGE}, + {"EGA", "ega", &ega_device, GFX_EGA}, + {"Chips & Technologies SuperEGA", "superega", &sega_device, GFX_SUPER_EGA}, + {"Compaq ATI VGA Wonder XL (ATI-28800-5)", "compaq_ati28800", &compaq_ati28800_device, GFX_VGAWONDERXL}, + {"Compaq EGA", "compaq_ega", &cpqega_device, GFX_COMPAQ_EGA}, + {"Compaq/Paradise VGA", "compaq_vga", &cpqvga_device, GFX_COMPAQ_VGA}, + {"Hercules", "hercules", &hercules_device, GFX_HERCULES}, + {"Hercules Plus", "hercules_plus", &herculesplus_device, GFX_HERCULESPLUS}, + {"Hercules InColor", "incolor", &incolor_device, GFX_INCOLOR}, + {"MDA", "mda", &mda_device, GFX_MDA}, + {"Miro Crystal S3 Vision964", "mc_vision964", &s3_miro_vision964_device, GFX_MIRO_VISION964}, + {"Number Nine 9FX (S3 Trio64)", "n9_9fx", &s3_9fx_device, GFX_N9_9FX}, + {"nVidia RIVA 128 (Experimental)", "nv_riva128", &riva128_device, GFX_RIVA128}, + {"nVidia RIVA TNT (Experimental)", "nv_rivatnt", &rivatnt_device, GFX_RIVATNT}, + {"nVidia RIVA TNT2 (Experimental)", "nv_rivatnt2", &rivatnt2_device, GFX_RIVATNT2}, - /* {"OAK OTI-037", &oti037_device, GFX_OTI037}, */ - {"OAK OTI-067", &oti067_device, GFX_OTI067}, - {"OAK OTI-077", &oti077_device, GFX_OTI077}, - {"Paradise Bahamas 64 (S3 Vision864)", &s3_bahamas64_device, GFX_BAHAMAS64}, - {"Paradise WD90C11", ¶dise_wd90c11_device, GFX_WD90C11}, - {"Phoenix S3 Vision864", &s3_phoenix_vision864_device,GFX_PHOENIX_VISION864}, - {"Phoenix S3 Trio32", &s3_phoenix_trio32_device, GFX_PHOENIX_TRIO32}, - {"Phoenix S3 Trio64", &s3_phoenix_trio64_device, GFX_PHOENIX_TRIO64}, - {"Plantronics ColorPlus", &colorplus_device, GFX_COLORPLUS}, - {"S3 ViRGE/DX", &s3_virge_375_device, GFX_VIRGEDX}, - {"Trident TGUI9440", &tgui9440_device, GFX_TGUI9440}, - {"Trident TVGA8900D", &tvga8900d_device, GFX_TVGA}, - {"TriGem Unknown Adapter", &trigem_unk_device, GFX_TRIGEM_UNK}, - {"Tseng ET4000AX", &et4000_device, GFX_ET4000}, - {"VGA", &vga_device, GFX_VGA}, - {"Wyse 700", &wy700_device, GFX_WY700}, - {"", NULL, 0} + {"OAK OTI-067", "oti067", &oti067_device, GFX_OTI067}, + {"OAK OTI-077", "oti077", &oti077_device, GFX_OTI077}, + {"Paradise Bahamas 64 (S3 Vision864)", "bahamas64", &s3_bahamas64_device, GFX_BAHAMAS64}, + {"Paradise WD90C11", "wd90c11", ¶dise_wd90c11_device, GFX_WD90C11}, + {"Phoenix S3 Vision864", "px_vision864", &s3_phoenix_vision864_device,GFX_PHOENIX_VISION864}, + {"Phoenix S3 Trio32", "px_trio32", &s3_phoenix_trio32_device, GFX_PHOENIX_TRIO32}, + {"Phoenix S3 Trio64", "px_trio64", &s3_phoenix_trio64_device, GFX_PHOENIX_TRIO64}, + {"Plantronics ColorPlus", "plantronics", &colorplus_device, GFX_COLORPLUS}, + {"S3 ViRGE/DX", "virge375", &s3_virge_375_device, GFX_VIRGEDX}, + {"Trident TGUI9440", "tgui9440", &tgui9440_device, GFX_TGUI9440}, + {"Trident TVGA8900D", "tvga8900d", &tvga8900d_device, GFX_TVGA}, + {"TriGem Unknown Adapter", "trigem_unk", &trigem_unk_device, GFX_TRIGEM_UNK}, + {"Tseng ET4000AX", "et4000ax", &et4000_device, GFX_ET4000}, + {"VGA", "vga", &vga_device, GFX_VGA}, + {"Wyse 700", "wy700", &wy700_device, GFX_WY700}, + {"", "", NULL, 0} }; int video_card_available(int card) @@ -163,6 +162,25 @@ int video_new_to_old(int card) return video_cards[card].legacy_id; } +char *video_get_internal_name(int card) +{ + return video_cards[card].internal_name; +} + +int video_get_video_from_internal_name(char *s) +{ + int c = 0; + + while (video_cards[c].legacy_id != -1) + { + if (!strcmp(video_cards[c].internal_name, s)) + return video_cards[c].legacy_id; + c++; + } + + return 0; +} + int video_fullscreen = 0, video_fullscreen_scale, video_fullscreen_first; uint32_t *video_6to8, *video_15to32, *video_16to32; diff --git a/src/video.h b/src/video.h index effcfb7e3..c01bb812b 100644 --- a/src/video.h +++ b/src/video.h @@ -39,6 +39,8 @@ int video_card_has_config(int card); int video_card_getid(char *s); int video_old_to_new(int card); int video_new_to_old(int card); +char *video_get_internal_name(int card); +int video_get_video_from_internal_name(char *s); extern int video_fullscreen, video_fullscreen_scale, video_fullscreen_first; diff --git a/src/win.c b/src/win.c index 4df50eba7..2cf0b78c9 100644 --- a/src/win.c +++ b/src/win.c @@ -757,6 +757,7 @@ int WINAPI WinMain (HINSTANCE hThisInstance, CheckMenuItem(menu, IDM_VID_FORCE43, force_43 ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(menu, IDM_VID_OVERSCAN, enable_overscan ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(menu, IDM_VID_FLASH, enable_flash ? MF_CHECKED : MF_UNCHECKED); + CheckMenuItem(menu, IDM_VID_INVERT, invert_display ? MF_CHECKED : MF_UNCHECKED); // pclog("Checking video resize menu item...\n"); if (vid_resize) CheckMenuItem(menu, IDM_VID_RESIZE, MF_CHECKED); @@ -1428,6 +1429,10 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM video_toggle_option(hmenu, &force_43, IDM_VID_FORCE43); break; + case IDM_VID_INVERT: + video_toggle_option(hmenu, &invert_display, IDM_VID_INVERT); + break; + case IDM_VID_OVERSCAN: video_toggle_option(hmenu, &enable_overscan, IDM_VID_OVERSCAN); break;