From df4b4410e6d2b952c9a45cb4e6973f0e9434c276 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 20 Feb 2017 00:16:42 +0100 Subject: [PATCH] Fixed CGA, Hercules, and MDA for the second time, per suggestion and code from basic2004; Added IBM PS/2 Model 30 emulation per mainline PCem patch from dns2kv2; Commented out the Chips & Technologies VGA 451 as it needs further work; Added the ability to disable XTIDE; Prepared the icon that will be used for stable builds. --- src/86Box-RB.ico | Bin 0 -> 394182 bytes src/Makefile.mingw | 2 +- src/Makefile.mingw64 | 2 +- src/cpu.c | 11 ++++ src/cpu.h | 1 + src/ibm.h | 3 + src/mem.c | 110 +++++++++++++++++++++++++++------- src/model.c | 19 ++++++ src/nvr.c | 4 ++ src/pc.c | 4 ++ src/pc.rc | 12 +++- src/ps2.c | 136 +++++++++++++++++++++++++++++++++++++++++++ src/ps2.h | 1 + src/resources.h | 1 + src/vid_cga.c | 29 ++++----- src/vid_cga.h | 3 + src/vid_hercules.c | 18 +++--- src/vid_mda.c | 18 +++--- src/vid_vga.c | 8 +-- src/vid_vga.h | 2 +- src/video.c | 2 +- src/win-config.c | 12 +++- src/win-d3d-fs.cc | 14 +++-- 23 files changed, 346 insertions(+), 66 deletions(-) create mode 100644 src/86Box-RB.ico create mode 100644 src/ps2.c create mode 100644 src/ps2.h diff --git a/src/86Box-RB.ico b/src/86Box-RB.ico new file mode 100644 index 0000000000000000000000000000000000000000..2106da7e4c16176d9f20dd9e9ae682b60a9f9536 GIT binary patch literal 394182 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

LFpr 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 literal 0 HcmV?d00001 diff --git a/src/Makefile.mingw b/src/Makefile.mingw index a91fe441d..6c58d172a 100644 --- a/src/Makefile.mingw +++ b/src/Makefile.mingw @@ -9,7 +9,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429 device.o disc.o disc_86f.o disc_fdi.o disc_imd.o disc_img.o disc_random.o disc_td0.o dma.o fdc.o fdc37c665.o fdc37c932fr.o fdd.o fdi2raw.o gameport.o headland.o i82335.o i430hx.o i430lx.o i430fx.o \ i430nx.o i430vx.o i440fx.o ide.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o joystick_standard.o joystick_sw_pad.o joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o \ keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o lpt.o mcr.o mem.o memregs.o model.o mouse.o mouse_ps2.o \ - mouse_serial.o ne2000.o neat.o nethandler.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pc87306.o pci.o pic.o piix.o pit.o ppi.o ps1.o rom.o rtc.o \ + mouse_serial.o ne2000.o neat.o nethandler.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pc87306.o pci.o pic.o piix.o pit.o ppi.o ps1.o ps2.o rom.o rtc.o \ scat.o scsi.o serial.o sis496.o sis85c471.o sio.o sound.o sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_cms.o \ sound_dbopl.o sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \ sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o \ diff --git a/src/Makefile.mingw64 b/src/Makefile.mingw64 index 277ffadcb..d9df84dbb 100644 --- a/src/Makefile.mingw64 +++ b/src/Makefile.mingw64 @@ -9,7 +9,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acer386sx.o acerm3a.o ali1429 device.o disc.o disc_86f.o disc_fdi.o disc_imd.o disc_img.o disc_random.o disc_td0.o dma.o fdc.o fdc37c665.o fdc37c932fr.o fdd.o fdi2raw.o gameport.o headland.o i82335.o i430hx.o i430lx.o i430fx.o \ i430nx.o i430vx.o i440fx.o ide.o intel.o intel_flash.o io.o jim.o joystick_ch_flightstick_pro.o joystick_standard.o joystick_sw_pad.o joystick_tm_fcs.o keyboard.o keyboard_amstrad.o keyboard_at.o \ keyboard_olim24.o keyboard_pcjr.o keyboard_xt.o lpt.o mcr.o mem.o memregs.o model.o mouse.o mouse_ps2.o \ - mouse_serial.o ne2000.o neat.o nethandler.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pc87306.o pci.o pic.o piix.o pit.o ppi.o ps1.o rom.o rtc.o \ + mouse_serial.o ne2000.o neat.o nethandler.o nmi.o nvr.o olivetti_m24.o opti495.o pc.o pc87306.o pci.o pic.o piix.o pit.o ppi.o ps1.o ps2.o rom.o rtc.o \ scat.o scsi.o serial.o sis496.o sis85c471.o sio.o sound.o sound_ad1848.o sound_adlib.o sound_adlibgold.o sound_cms.o \ sound_dbopl.o sound_emu8k.o sound_gus.o sound_mpu401_uart.o sound_opl.o sound_pas16.o sound_ps1.o sound_pssj.o sound_resid.o \ sound_sb.o sound_sb_dsp.o sound_sn76489.o sound_speaker.o sound_ssi2001.o sound_wss.o sound_ym7128.o \ diff --git a/src/cpu.c b/src/cpu.c index af49feb4d..5172c4727 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -228,6 +228,17 @@ CPU cpus_ps1_m2011[] = {"", -1, 0, 0, 0, 0} }; +CPU cpus_ps2_m30_286[] = +{ + /*286*/ + {"286/10", CPU_286, 2, 10000000, 1, 0, 0, 0, 0, 0, 2,2,2,2}, + {"286/12", CPU_286, 3, 12000000, 1, 0, 0, 0, 0, 0, 3,3,3,3}, + {"286/16", CPU_286, 4, 16000000, 1, 0, 0, 0, 0, 0, 3,3,3,3}, + {"286/20", CPU_286, 5, 20000000, 1, 0, 0, 0, 0, 0, 4,4,4,4}, + {"286/25", CPU_286, 6, 25000000, 1, 0, 0, 0, 0, 0, 4,4,4,4}, + {"", -1, 0, 0, 0, 0} +}; + CPU cpus_i386SX[] = { /*i386SX*/ diff --git a/src/cpu.h b/src/cpu.h index a1775ecac..1159caefc 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -110,6 +110,7 @@ extern CPU cpus_pcjr[]; extern CPU cpus_pc1512[]; extern CPU cpus_ibmat[]; extern CPU cpus_ps1_m2011[]; +extern CPU cpus_ps2_m30_286[]; extern CPU cpus_acer[]; extern int cpu_iscyrix; diff --git a/src/ibm.h b/src/ibm.h index e88b108d3..d68e9ede6 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -397,6 +397,8 @@ enum ROM_AMI386DX_OPTI495, ROM_MR386DX_OPTI495, + ROM_IBMPS2_M30_286, + ROM_DTK486, /*DTK PKM-0038S E-2 / SiS 471 / Award BIOS / SiS 85C471*/ ROM_VLI486SV2G, /*ASUS VL/I-486SV2G / SiS 471 / Award BIOS / SiS 85C471*/ ROM_R418, /*Rise Computer R418 / SiS 496/497 / Award BIOS / SMC FDC37C665*/ @@ -627,3 +629,4 @@ uint8_t trc_read(uint16_t port, void *priv); void trc_write(uint16_t port, uint8_t val, void *priv); void trc_init(); +extern int enable_xtide; diff --git a/src/mem.c b/src/mem.c index def1e8c71..c1e6a101b 100644 --- a/src/mem.c +++ b/src/mem.c @@ -48,6 +48,8 @@ static mem_mapping_t romext_mapping; int shadowbios,shadowbios_write; +int enable_xtide = 0; + static unsigned char isram[0x10000]; static uint8_t ff_array[0x1000]; @@ -132,7 +134,10 @@ int loadbios() } fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } loadfont("roms/pc1512/40078.ic127", 2); return 1; case ROM_PC1640: @@ -149,7 +154,10 @@ int loadbios() f=romfopen("roms/pc1640/40100","rb"); if (!f) break; fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_PC200: f=romfopen("roms/pc200/pc20v2.1","rb"); @@ -162,7 +170,10 @@ int loadbios() } fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } loadfont("roms/pc200/40109.bin", 1); return 1; case ROM_TANDY: @@ -170,7 +181,10 @@ int loadbios() if (!f) break; fread(rom,65536,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_TANDY1000HX: f = romfopen("roms/tandy1000hx/v020000.u12", "rb"); @@ -178,7 +192,10 @@ int loadbios() fread(rom, 0x20000, 1, f); fclose(f); biosmask = 0x1ffff; - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_TANDY1000SL2: f = romfopen("roms/tandy1000sl2/8079047.hu1" ,"rb"); @@ -193,7 +210,10 @@ int loadbios() } fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; /* case ROM_IBMPCJR: f=fopen("pcjr/bios.rom","rb"); @@ -214,14 +234,20 @@ int loadbios() fread(rom + 0x8000, 0x8000, 1, ff); fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; } else { fread(rom,65536,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; } break; @@ -238,14 +264,20 @@ int loadbios() if (!f) break; fread(rom+0xE000,8192,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_DTKXT: f=romfopen("roms/dtk/DTK_ERSO_2.42_2764.bin","rb"); if (!f) break; fread(rom+0xE000,8192,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_OLIM24: f = romfopen("roms/olivetti_m24/olivetti_m24_version_1.43_low.bin" ,"rb"); @@ -258,7 +290,10 @@ int loadbios() } fclose(ff); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_PC2086: @@ -277,7 +312,10 @@ int loadbios() f = romfopen("roms/pc2086/40186.ic171", "rb"); if (!f) break; fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } biosmask = 0x3fff; return 1; @@ -289,7 +327,10 @@ int loadbios() f = romfopen("roms/pc3086/c000.bin", "rb"); if (!f) break; fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } biosmask = 0x3fff; return 1; @@ -398,7 +439,10 @@ int loadbios() fread(rom+0x8000,32768,1,f); fclose(f); // memset(romext,0x63,0x8000); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_IBMPC: @@ -423,7 +467,10 @@ int loadbios() if (!f) break; fread(rom+0xC000,8192,1,f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_MEGAPC: @@ -573,7 +620,10 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_LTXT: @@ -581,7 +631,10 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_LXT3: @@ -589,7 +642,10 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_SPC4200P: /*Samsung SPC-4200P*/ @@ -624,7 +680,10 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } return 1; case ROM_JUKOPC: @@ -632,7 +691,18 @@ int loadbios() if (!f) break; fread(rom + 0xE000, 8192, 1, f); fclose(f); - mem_load_xtide_bios(); + if (enable_xtide) + { + mem_load_xtide_bios(); + } + return 1; + + case ROM_IBMPS2_M30_286: + f = romfopen("roms/ibmps2_m30_286/33f5381a.bin", "rb"); + fread(rom, 0x20000, 1, f); + fclose(f); + biosmask = 0x1ffff; + mem_load_atide_bios(); return 1; case ROM_DTK486: diff --git a/src/model.c b/src/model.c index 0253cd97a..3e15c8018 100644 --- a/src/model.c +++ b/src/model.c @@ -55,6 +55,7 @@ #include "piix.h" #include "pit.h" #include "ps1.h" +#include "ps2.h" #include "scat.h" #include "serial.h" #include "sis496.h" @@ -84,6 +85,7 @@ void at_init(); void deskpro386_init(); void ps1_m2011_init(); void ps1_m2121_init(); +void ps2_m30_286_init(); void at_neat_init(); void at_scat_init(); void at_acer386sx_init(); @@ -152,6 +154,7 @@ MODEL models[] = {"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}, @@ -379,6 +382,22 @@ void ps1_m2121_init() fdc_set_ps1(); } +void ps2_m30_286_init() +{ + AT = 1; + common_init(); + mem_add_bios(); + pit_set_out_func(1, pit_refresh_timer_at); + dma16_init(); + ide_init(); + keyboard_at_init(); + mouse_ps2_init(); + nvr_init(); + pic2_init(); + ps2board_init(); + fdc_set_dskchg_activelow(); +} + void at_neat_init() { at_init(); diff --git a/src/nvr.c b/src/nvr.c index 7e4e4223e..7c3844d5c 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -208,6 +208,8 @@ void loadnvr() case ROM_IBMAT: f = romfopen(nvr_concat("at.nvr"), "rb"); break; case ROM_IBMPS1_2011: f = romfopen(nvr_concat("ibmps1_2011.nvr"), "rb"); /*nvrmask = 127; */break; case ROM_IBMPS1_2121: f = romfopen(nvr_concat("ibmps1_2121.nvr"), "rb"); nvrmask = 127; break; + case ROM_IBMPS1_2121_ISA: f = romfopen(nvr_concat("ibmps1_2121_isa.nvr"), "rb"); nvrmask = 127; break; + case ROM_IBMPS2_M30_286: f = romfopen("nvr/ibmps2_m30_286.nvr", "rb"); /*nvrmask = 127; */break; case ROM_CMDPC30: f = romfopen(nvr_concat("cmdpc30.nvr"), "rb"); nvrmask = 127; break; case ROM_AMI286: f = romfopen(nvr_concat("ami286.nvr"), "rb"); nvrmask = 127; break; case ROM_AWARD286: f = romfopen(nvr_concat("award286.nvr"), "rb"); nvrmask = 127; break; @@ -289,6 +291,8 @@ void savenvr() case ROM_IBMAT: f = romfopen(nvr_concat("at.nvr"), "wb"); break; case ROM_IBMPS1_2011: f = romfopen(nvr_concat("ibmps1_2011.nvr"), "wb"); break; case ROM_IBMPS1_2121: f = romfopen(nvr_concat("ibmps1_2121.nvr"), "wb"); break; + case ROM_IBMPS1_2121_ISA: f = romfopen(nvr_concat("ibmps1_2121_isa.nvr"), "wb"); break; + case ROM_IBMPS2_M30_286: f = romfopen("nvr/ibmps2_m30_286.nvr", "wb"); break; case ROM_CMDPC30: f = romfopen(nvr_concat("cmdpc30.nvr"), "wb"); break; case ROM_AMI286: f = romfopen(nvr_concat("ami286.nvr"), "wb"); break; case ROM_AWARD286: f = romfopen(nvr_concat("award286.nvr"), "wb"); break; diff --git a/src/pc.c b/src/pc.c index e0ab1e0db..42a764320 100644 --- a/src/pc.c +++ b/src/pc.c @@ -868,6 +868,8 @@ void loadconfig(char *fn) joystick_type = config_get_int(NULL, "joystick_type", 0); mouse_type = config_get_int(NULL, "mouse_type", 0); + enable_xtide = config_get_int(NULL, "enable_xtide", 1); + for (c = 0; c < joystick_get_max_joysticks(joystick_type); c++) { sprintf(s, "joystick_%i_nr", c); @@ -1050,6 +1052,8 @@ void saveconfig() config_set_int(NULL, "joystick_type", joystick_type); config_set_int(NULL, "mouse_type", mouse_type); + config_set_int(NULL, "enable_xtide", enable_xtide); + for (c = 0; c < joystick_get_max_joysticks(joystick_type); c++) { char s[80]; diff --git a/src/pc.rc b/src/pc.rc index 634a696d2..f22e897ae 100644 --- a/src/pc.rc +++ b/src/pc.rc @@ -380,11 +380,12 @@ BEGIN PUSHBUTTON "Configure", IDC_CONFIGUREMOD, 224, 16, 40, 14, WS_TABSTOP COMBOBOX IDC_COMBOVID,62,36,157,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Configure", IDC_CONFIGUREVID, 224, 36, 40, 14, WS_TABSTOP - COMBOBOX IDC_COMBOCPUM,62,56,157,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBOCPUM,62,56,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO3,62,76,102,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Dynamic Recompiler",IDC_CHECKDYNAREC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,169,76,99,10 + CONTROL "Enable XTIDE",IDC_CHECKXTIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,169,96,99,10 COMBOBOX IDC_COMBOWS, 62,96,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - COMBOBOX IDC_COMBOSPD,162,96,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_COMBOSPD,162,56,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBOSND,62,116,157,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Configure", IDC_CONFIGURESND, 224, 116, 40, 14, WS_TABSTOP EDITTEXT IDC_MEMTEXT, 62, 136, 36, 14, ES_AUTOHSCROLL | ES_NUMBER @@ -416,7 +417,7 @@ BEGIN LTEXT "CPU type :",IDC_STATIC,15,56,34,10 LTEXT "CPU :",IDC_STATIC,15,76,34,10 LTEXT "Waitstates :",IDC_STATIC,15,96,40,10 - LTEXT "Vid.speed:",IDC_STATIC,125,96,34,10 + LTEXT "Vid.speed:",IDC_STATIC,125,56,34,10 LTEXT "Sound card :",IDC_STATIC,15,116,40,10 LTEXT "Network :",IDC_STATIC,125,136,34,10 COMBOBOX IDC_COMBONET,162,136,57,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -604,5 +605,10 @@ END 1 24 "86Box.manifest" +#ifdef RELEASE_BUILD +/* Icon by Devcore - https://commons.wikimedia.org/wiki/File:Icon_PC_256x256.png */ +100 ICON "86Box-RB.ico" +#else /* Icon by Devcore - https://commons.wikimedia.org/wiki/File:Icon_PC2_256x256.png */ 100 ICON "86Box.ico" +#endif diff --git a/src/ps2.c b/src/ps2.c new file mode 100644 index 000000000..0b6b08424 --- /dev/null +++ b/src/ps2.c @@ -0,0 +1,136 @@ +#include "ibm.h" +#include "mem.h" +#include "ps2.h" +#include "rom.h" +#include "lpt.h" + +static uint8_t ps2_92, ps2_94, ps2_102, ps2_103, ps2_104, ps2_105, ps2_190; + +static struct +{ + uint8_t status, int_status; + uint8_t attention, ctrl; +} ps2_hd; + +uint8_t ps2_read(uint16_t port, void *p) +{ + uint8_t temp; + + switch (port) + { + case 0x91: + return 0; + case 0x92: + return ps2_92; + case 0x94: + return ps2_94; + case 0x102: + return ps2_102 | 8; + case 0x103: + return ps2_103; + case 0x104: + return ps2_104; + case 0x105: + return ps2_105; + case 0x190: + return ps2_190; + + case 0x322: + temp = ps2_hd.status; + break; + case 0x324: + temp = ps2_hd.int_status; + ps2_hd.int_status &= ~0x02; + break; + + default: + temp = 0xff; + break; + } + + return temp; +} + +void ps2_write(uint16_t port, uint8_t val, void *p) +{ + switch (port) + { + case 0x0092: + ps2_92 = val; + mem_a20_alt = val & 2; + mem_a20_recalc(); + break; + case 0x94: + ps2_94 = val; + break; + case 0x102: + lpt1_remove(); + if (val & 0x04) + serial1_init(0x3f8, 4); + else + serial1_remove(); + if (val & 0x10) + { + switch ((val >> 5) & 3) + { + case 0: + lpt1_init(0x3bc); + break; + case 1: + lpt1_init(0x378); + break; + case 2: + lpt1_init(0x278); + break; + } + } + ps2_102 = val; + break; + case 0x103: + ps2_103 = val; + break; + case 0x104: + ps2_104 = val; + break; + case 0x105: + ps2_105 = val; + break; + case 0x190: + ps2_190 = val; + break; + + case 0x322: + ps2_hd.ctrl = val; + if (val & 0x80) + ps2_hd.status |= 0x02; + break; + case 0x324: + ps2_hd.attention = val & 0xf0; + if (ps2_hd.attention) + ps2_hd.status = 0x14; + break; + } +} + +void ps2board_init() +{ + io_sethandler(0x0091, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0092, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0094, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0102, 0x0004, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0190, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0320, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0322, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + io_sethandler(0x0324, 0x0001, ps2_read, NULL, NULL, ps2_write, NULL, NULL, NULL); + + ps2_190 = 0; + + lpt1_remove(); + lpt2_remove(); + lpt1_init(0x3bc); + + serial1_remove(); + serial2_remove(); + + memset(&ps2_hd, 0, sizeof(ps2_hd)); +} diff --git a/src/ps2.h b/src/ps2.h new file mode 100644 index 000000000..92fb6e077 --- /dev/null +++ b/src/ps2.h @@ -0,0 +1 @@ +void ps2board_init(); diff --git a/src/resources.h b/src/resources.h index bc1aa903b..6e9c6a041 100644 --- a/src/resources.h +++ b/src/resources.h @@ -254,6 +254,7 @@ #define IDC_CHECKBUSLOGIC 1017 #define IDC_STATIC 1020 #define IDC_CHECKSYNC 1024 +#define IDC_CHECKXTIDE 1025 #define IDC_EDIT1 1030 #define IDC_EDIT2 1031 #define IDC_EDIT3 1032 diff --git a/src/vid_cga.c b/src/vid_cga.c index ab909b3f3..e5a9de837 100644 --- a/src/vid_cga.c +++ b/src/vid_cga.c @@ -59,6 +59,14 @@ void cga_out(uint16_t addr, uint8_t val, void *p) update_cga16_color(cga->cgamode); } cga->cgamode = val; +#ifndef __unix + cga_palette = (cga->rgb_type << 1); + if (!(cga->cgamode & 1) && (cga_palette > 0) && (cga_palette < 8)) + { + cga_palette--; + cgapal_rebuild(); + } +#endif return; case 0x3D9: cga->cgacol = val; @@ -466,7 +474,8 @@ void *cga_standalone_init() overscan_x = overscan_y = 16; #ifndef __unix - cga_palette = device_get_config_int("rgb_type"); + cga->rgb_type = device_get_config_int("rgb_type"); + cga_palette = (cga->rgb_type << 1); cgapal_rebuild(); #endif @@ -538,33 +547,25 @@ static device_config_t cga_config[] = .selection = { { - .description = "Full 16-color", + .description = "Color", .value = 0 }, { - .description = "Green, 4-color", + .description = "Green Monochrome", .value = 1 }, { - .description = "Green, 16-color", + .description = "Amber Monochrome", .value = 2 }, { - .description = "Amber, 4-color", + .description = "Gray Monochrome", .value = 3 }, { - .description = "Amber, 16-color", + .description = "Color (no brown)", .value = 4 }, - { - .description = "Gray, 4-color", - .value = 5 - }, - { - .description = "Gray, 16-color", - .value = 6 - }, { .description = "" } diff --git a/src/vid_cga.h b/src/vid_cga.h index e3b187777..ca513785d 100644 --- a/src/vid_cga.h +++ b/src/vid_cga.h @@ -34,6 +34,9 @@ typedef struct cga_t int revision; int composite; int snow_enabled; +#ifndef __unix + int rgb_type; +#endif } cga_t; void cga_init(cga_t *cga); diff --git a/src/vid_hercules.c b/src/vid_hercules.c index d3cd051e3..2c96a5654 100644 --- a/src/vid_hercules.c +++ b/src/vid_hercules.c @@ -346,7 +346,11 @@ void *hercules_init() overscan_x = overscan_y = 0; #ifndef __unix - cga_palette = device_get_config_int("rgb_type"); + cga_palette = device_get_config_int("rgb_type") << 1; + if (cga_palette > 6) + { + cga_palette = 0; + } cgapal_rebuild(); #endif @@ -378,20 +382,20 @@ static device_config_t hercules_config[] = .selection = { { - .description = "Default 4-color", + .description = "Default", .value = 0 }, { - .description = "Green, 4-color", + .description = "Green", .value = 1 }, { - .description = "Amber, 4-color", - .value = 3 + .description = "Amber", + .value = 2 }, { - .description = "Gray, 4-color", - .value = 5 + .description = "Gray", + .value = 3 }, { .description = "" diff --git a/src/vid_mda.c b/src/vid_mda.c index be38890bd..bf3b9e459 100644 --- a/src/vid_mda.c +++ b/src/vid_mda.c @@ -302,7 +302,11 @@ void *mda_init() overscan_x = overscan_y = 0; #ifndef __unix - cga_palette = device_get_config_int("rgb_type"); + cga_palette = device_get_config_int("rgb_type") << 1; + if (cga_palette > 6) + { + cga_palette = 0; + } cgapal_rebuild(); #endif @@ -334,20 +338,20 @@ static device_config_t mda_config[] = .selection = { { - .description = "Default 4-color", + .description = "Default", .value = 0 }, { - .description = "Green, 4-color", + .description = "Green", .value = 1 }, { - .description = "Amber, 4-color", - .value = 3 + .description = "Amber", + .value = 2 }, { - .description = "Gray, 4-color", - .value = 5 + .description = "Gray", + .value = 3 }, { .description = "" diff --git a/src/vid_vga.c b/src/vid_vga.c index 501643cf2..fbed319d7 100644 --- a/src/vid_vga.c +++ b/src/vid_vga.c @@ -105,7 +105,7 @@ void *vga_init() return vga; } -void *vga_chips_init() +/* void *vga_chips_init() { vga_t *vga = malloc(sizeof(vga_t)); memset(vga, 0, sizeof(vga_t)); @@ -124,7 +124,7 @@ void *vga_chips_init() vga->svga.miscout = 1; return vga; -} +} */ void *trigem_unk_init() { @@ -222,7 +222,7 @@ device_t vga_device = vga_force_redraw, vga_add_status_info }; -device_t vga_chips_device = +/* device_t vga_chips_device = { "Chips VGA", 0, @@ -232,7 +232,7 @@ device_t vga_chips_device = vga_speed_changed, vga_force_redraw, vga_add_status_info -}; +}; */ device_t trigem_unk_device = { "VGA", diff --git a/src/vid_vga.h b/src/vid_vga.h index 77aff5056..1f8fbe700 100644 --- a/src/vid_vga.h +++ b/src/vid_vga.h @@ -2,6 +2,6 @@ see COPYING for more details */ extern device_t vga_device; -extern device_t vga_chips_device; +// extern device_t vga_chips_device; extern device_t trigem_unk_device; extern device_t ps1vga_device; diff --git a/src/video.c b/src/video.c index ee3bdf0d9..1764b8739 100644 --- a/src/video.c +++ b/src/video.c @@ -74,7 +74,7 @@ static VIDEO_CARD video_cards[] = {"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}, + /* {"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}, diff --git a/src/win-config.c b/src/win-config.c index a72391e1b..0ffb74c7c 100644 --- a/src/win-config.c +++ b/src/win-config.c @@ -58,7 +58,8 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR int temp_joystick_type; int cpu_type; int temp_mouse_type; - + int temp_xtide; + UDACCEL accel; // pclog("Dialog msg %i %08X\n",message,message); switch (message) @@ -201,6 +202,9 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR EnableWindow(h, TRUE); SendMessage(h, BM_SETCHECK, ((cpu_flags & CPU_SUPPORTS_DYNAREC) && cpu_use_dynarec) || (cpu_flags & CPU_REQUIRES_DYNAREC), 0); + h=GetDlgItem(hdlg, IDC_CHECKXTIDE); + SendMessage(h, BM_SETCHECK, enable_xtide, 0); + h = GetDlgItem(hdlg, IDC_COMBOSPD); SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"8-bit"); SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"Slow 16-bit"); @@ -414,6 +418,9 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR h = GetDlgItem(hdlg, IDC_CHECKDYNAREC); temp_dynarec = SendMessage(h, BM_GETCHECK, 0, 0); + h = GetDlgItem(hdlg, IDC_CHECKXTIDE); + temp_xtide = SendMessage(h, BM_GETCHECK, 0, 0); + h = GetDlgItem(hdlg, IDC_COMBONET); temp_network_card_current = settings_list_to_network[SendMessage(h, CB_GETCURSEL, 0, 0)]; @@ -433,7 +440,7 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR if (temp_model != model || gfx != gfxcard || mem != mem_size || temp_cpu != cpu || temp_cpu_m != cpu_manufacturer || fpu != hasfpu || temp_GAMEBLASTER != GAMEBLASTER || temp_GUS != GUS || - temp_SSI2001 != SSI2001 || temp_sound_card_current != sound_card_current || + temp_SSI2001 != SSI2001 || temp_sound_card_current != sound_card_current || temp_xtide != enable_xtide || temp_voodoo != voodoo_enabled || temp_buslogic != buslogic_enabled || temp_dynarec != cpu_use_dynarec || temp_mouse_type != mouse_type || temp_fd1_type != fdd_get_type(0) || temp_fd2_type != fdd_get_type(1) || temp_fd3_type != fdd_get_type(2) || temp_fd4_type != fdd_get_type(3) || temp_network_card_current != network_card_current) { @@ -454,6 +461,7 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR buslogic_enabled = temp_buslogic; cpu_use_dynarec = temp_dynarec; mouse_type = temp_mouse_type; + enable_xtide = temp_xtide; fdd_set_type(0, temp_fd1_type); fdd_set_type(1, temp_fd2_type); diff --git a/src/win-d3d-fs.cc b/src/win-d3d-fs.cc index d6fad07c5..9f8f91b0a 100644 --- a/src/win-d3d-fs.cc +++ b/src/win-d3d-fs.cc @@ -85,12 +85,12 @@ PALETTE cgapal_mono[6] = {0x2c,0x13,0x00},{0x32,0x17,0x00},{0x3a,0x1e,0x00},{0x3c,0x1f,0x00},{0x3f,0x27,0x01},{0x3f,0x2a,0x04},{0x3f,0x36,0x0c},{0x3f,0x38,0x0d}, }, { // 4 - grey, 4-color-optimized contrast - {0x00,0x00,0x00},{0x0d,0x0d,0x0d},{0x15,0x15,0x15},{0x18,0x18,0x18},{0x24,0x24,0x24},{0x27,0x27,0x27},{0x33,0x33,0x33},{0x37,0x37,0x37}, - {0x08,0x08,0x08},{0x10,0x10,0x10},{0x1c,0x1c,0x1c},{0x20,0x20,0x20},{0x2c,0x2c,0x2c},{0x2f,0x2f,0x2f},{0x3b,0x3b,0x3b},{0x3f,0x3f,0x3f}, + {0x00,0x00,0x00},{0x0b,0x0c,0x0a},{0x12,0x14,0x10},{0x15,0x17,0x13},{0x21,0x24,0x1e},{0x23,0x26,0x21},{0x30,0x31,0x2e},{0x34,0x35,0x33}, + {0x07,0x08,0x07},{0x0e,0x0f,0x0d},{0x19,0x1b,0x16},{0x1c,0x1f,0x1a},{0x28,0x2b,0x26},{0x2b,0x2d,0x2a},{0x37,0x38,0x37},{0x3d,0x3d,0x3c}, }, { // 5 - grey, 16-color-optimized contrast - {0x00,0x00,0x00},{0x0d,0x0d,0x0d},{0x12,0x12,0x12},{0x15,0x15,0x15},{0x1e,0x1e,0x1e},{0x20,0x20,0x20},{0x29,0x29,0x29},{0x2c,0x2c,0x2c}, - {0x1f,0x1f,0x1f},{0x23,0x23,0x23},{0x2b,0x2b,0x2b},{0x2d,0x2d,0x2d},{0x34,0x34,0x34},{0x36,0x36,0x36},{0x3d,0x3d,0x3d},{0x3f,0x3f,0x3f}, + {0x00,0x00,0x00},{0x0b,0x0c,0x0a},{0x0f,0x11,0x0e},{0x12,0x14,0x10},{0x1b,0x1d,0x18},{0x1c,0x1f,0x1a},{0x25,0x28,0x23},{0x28,0x2b,0x26}, + {0x1c,0x1e,0x19},{0x20,0x23,0x1d},{0x27,0x2a,0x25},{0x29,0x2c,0x27},{0x31,0x32,0x30},{0x33,0x34,0x32},{0x3a,0x3b,0x3a},{0x3d,0x3d,0x3c}, }, }; @@ -112,11 +112,15 @@ void cgapal_rebuild() int c; for (c = 0; c < 256; c++) pal_lookup[c] = makecol(video_6to8[cgapal[c].r], video_6to8[cgapal[c].g], video_6to8[cgapal[c].b]); - if (cga_palette > 1) + if ((cga_palette > 1) && (cga_palette < 8)) { for (c = 0; c < 16; c++) pal_lookup[c + 16] = makecol(video_6to8[cgapal_mono[cga_palette - 1][c].r], video_6to8[cgapal_mono[cga_palette - 1][c].g], video_6to8[cgapal_mono[cga_palette - 1][c].b]); } + if (cga_palette == 8) + { + pal_lookup[0x16] = makecol(video_6to8[42], video_6to8[42], video_6to8[0]); + } } void d3d_fs_init(HWND h)