diff --git a/src/Makefile.am b/src/Makefile.am index 5b62127..a45f83c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -40,7 +40,7 @@ vid_icd2061.c vid_ics2595.c vid_incolor.c vid_mda.c vid_olivetti_m24.c vid_oti03 vid_pc1512.c vid_pc1640.c vid_pcjr.c vid_ps1_svga.c vid_s3.c vid_s3_virge.c vid_sdac_ramdac.c vid_sigma.c \ vid_stg_ramdac.c vid_svga.c vid_svga_render.c vid_t1000.c vid_t3100e.c vid_tandy.c vid_tandysl.c vid_tgui9440.c \ vid_tkd8001_ramdac.c vid_tvga.c vid_unk_ramdac.c vid_vga.c vid_voodoo.c video.c wd76c10.c vid_wy700.c \ -x86seg.c x87.c xi8088.c xtide.c sound_dbopl.cc sound_resid.cc +x86seg.c x87.c xi8088.c xtide.c zenith.c sound_dbopl.cc sound_resid.cc # DOSBox pcem_SOURCES += dosbox/cdrom_image.cpp dosbox/dbopl.cpp dosbox/nukedopl.cpp dosbox/vid_cga_comp.c diff --git a/src/Makefile.linux32-wx-sdl2 b/src/Makefile.linux32-wx-sdl2 index 3656f1c..450a3e6 100644 --- a/src/Makefile.linux32-wx-sdl2 +++ b/src/Makefile.linux32-wx-sdl2 @@ -20,7 +20,7 @@ vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o vid_olivetti_m24.o vid_oti03 vid_pc1512.o vid_pc1640.o vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_sigma.o \ vid_stg_ramdac.o vid_svga.o vid_svga_render.o vid_t1000.o vid_t3100e.o vid_tandy.o vid_tandysl.o vid_tgui9440.o \ vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o \ -x86seg.o x87.o xi8088.c xtide.o sound_dbopl.o sound_resid.o \ +x86seg.o x87.o xi8088.c xtide.o zenith.o sound_dbopl.o sound_resid.o \ wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \ wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \ wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o diff --git a/src/Makefile.linux64-wx-sdl2 b/src/Makefile.linux64-wx-sdl2 index c4b6f3a..dab01f4 100644 --- a/src/Makefile.linux64-wx-sdl2 +++ b/src/Makefile.linux64-wx-sdl2 @@ -20,7 +20,7 @@ vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o vid_olivetti_m24.o vid_oti03 vid_pc1512.o vid_pc1640.o vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_sigma.o \ vid_stg_ramdac.o vid_svga.o vid_svga_render.o vid_t1000.o vid_t3100e.o vid_tandy.o vid_tandysl.o vid_tgui9440.o \ vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o \ -x86seg.o x87.o xi8088.c xtide.o sound_dbopl.o sound_resid.o \ +x86seg.o x87.o xi8088.c xtide.o zenith.o sound_dbopl.o sound_resid.o \ wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \ wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \ wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o diff --git a/src/Makefile.mingw-wx-sdl2 b/src/Makefile.mingw-wx-sdl2 index 91c1a7c..cbf8c22 100644 --- a/src/Makefile.mingw-wx-sdl2 +++ b/src/Makefile.mingw-wx-sdl2 @@ -24,7 +24,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429 vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o x86seg.o x87.o xi8088.c xtide.o win-midi.o \ wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o \ wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display-win.o \ - wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o wx.res + wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o zenith.o wx.res DBOBJ = cdrom_image.o dbopl.o nukedopl.o vid_cga_comp.o SIDOBJ = convolve.o convolve-sse.o envelope.o extfilt.o filter.o pot.o sid.o voice.o wave6581__ST.o wave6581_P_T.o wave6581_PS_.o wave6581_PST.o wave8580__ST.o wave8580_P_T.o wave8580_PS_.o wave8580_PST.o wave.o diff --git a/src/Makefile.mingw-wx-sdl2-network b/src/Makefile.mingw-wx-sdl2-network index b4421f8..41e90c3 100644 --- a/src/Makefile.mingw-wx-sdl2-network +++ b/src/Makefile.mingw-wx-sdl2-network @@ -21,7 +21,7 @@ OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429 vid_olivetti_m24.o vid_oti037.c vid_oti067.o vid_paradise.o vid_pc1512.o vid_pc1640.o vid_pc200.o \ vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_sigma.o vid_stg_ramdac.o vid_svga.o \ vid_svga_render.o vid_t1000.o vid_t3100e.o vid_tandy.o vid_tandysl.o vid_tgui9440.o vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o \ - vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o x86seg.o x87.o xi8088.c xtide.o win-midi.o \ + vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o x86seg.o x87.o xi8088.c xtide.o zenith.o win-midi.o \ wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o \ wx-sdl2.o wx-config.o wx-deviceconfig.o wx-hostconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display-win.o \ wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o wx.res diff --git a/src/Makefile.osx64-wx-sdl2 b/src/Makefile.osx64-wx-sdl2 index 3587ce3..b0b3445 100644 --- a/src/Makefile.osx64-wx-sdl2 +++ b/src/Makefile.osx64-wx-sdl2 @@ -19,7 +19,7 @@ vid_icd2061.o vid_ics2595.o vid_incolor.o vid_mda.o vid_olivetti_m24.o vid_oti03 vid_pc1512.o vid_pc1640.o vid_pcjr.o vid_ps1_svga.o vid_s3.o vid_s3_virge.o vid_sdac_ramdac.o vid_sigma.o \ vid_stg_ramdac.o vid_svga.o vid_svga_render.o vid_t1000.o vid_t3100e.o vid_tandy.o vid_tandysl.o vid_tgui9440.o \ vid_tkd8001_ramdac.o vid_tvga.o vid_unk_ramdac.o vid_vga.o vid_voodoo.o vid_wy700.o video.o wd76c10.o \ -x86seg.o x87.o xi8088.c xtide.o sound_dbopl.o sound_resid.o \ +x86seg.o x87.o xi8088.c xtide.o zenith.o sound_dbopl.o sound_resid.o \ wx-main.o wx-config_sel.o wx-dialogbox.o wx-utils.o wx-app.o wx-sdl2-joystick.o wx-sdl2-mouse.o wx-sdl2-keyboard.o wx-sdl2-video.o wx-sdl2-midi.o \ wx-sdl2.o wx-config.o wx-deviceconfig.o wx-status.o wx-sdl2-status.o wx-resources.o wx-thread.o wx-common.o wx-sdl2-display.o \ wx-sdl2-video-renderer.o wx-sdl2-video-gl3.o wx-glslp-parser.o wx-shader_man.o wx-shaderconfig.o wx-joystickconfig.o wx-createdisc.o diff --git a/src/ibm.h b/src/ibm.h index 177c923..110b755 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -465,6 +465,7 @@ enum ROM_IBMPS2_M70_TYPE3, ROM_IBMPS2_M70_TYPE4, ROM_TULIP_TC7, + ROM_ZD_SUPERS, /* [8088] Zenith Data Systems SupersPort */ ROM_MAX }; diff --git a/src/mem_bios.c b/src/mem_bios.c index f258602..0df10e6 100644 --- a/src/mem_bios.c +++ b/src/mem_bios.c @@ -950,6 +950,13 @@ int loadbios() biosmask = 0x7fff; return 1; + case ROM_ZD_SUPERS: /* [8088] Zenith Data Systems SupersPort */ + f=romfopen("zdsupers/z184m v3.1d.10d","rb"); + if (!f) break; + romfread(rom, 32768, 1, f); + fclose(f); + biosmask = 0x7fff; + return 1; } printf("Failed to load ROM!\n"); if (f) fclose(f); diff --git a/src/model.c b/src/model.c index b5af7e1..dc15b0a 100644 --- a/src/model.c +++ b/src/model.c @@ -63,6 +63,7 @@ #include "vid_t1000.h" #include "wd76c10.h" #include "xi8088.h" +#include "zenith.h" void xt_init(); void pcjr_init(); @@ -108,6 +109,7 @@ void at_pb520r_init(); void at_pb570_init(); void compaq_pip_init(); void xt_xi8088_init(); +void xt_zenith_init(); int model; int AMSTRAD, AT, PCI, TANDY; @@ -131,6 +133,7 @@ MODEL models[] = {"[8088] Thomson TO16 PC", ROM_TO16_PC, "to16_pc", { {"", cpus_8088}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE, 512, 640, 128, xt_init, NULL}, {"[8088] Toshiba T1000", ROM_T1000, "t1000", { {"", cpus_8088}, {"", NULL}, {"", NULL}}, MODEL_GFX_FIXED, 512, 1280, 768, xt_t1000_init, &t1000_device}, {"[8088] VTech Laser Turbo XT", ROM_LTXT, "ltxt", { {"", cpus_8088}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE, 64, 1152, 64, xt_laserxt_init, NULL}, + {"[8088] Zenith Data SupersPort", ROM_ZD_SUPERS, "zdsupers", { {"", cpus_8088}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE, 128, 640, 128, xt_zenith_init, NULL}, {"[8088] Xi8088", ROM_XI8088, "xi8088", { {"", cpus_8088}, {"", NULL}, {"", NULL}}, MODEL_GFX_NONE|MODEL_AT|MODEL_PS2, 64, 1024, 128, xt_xi8088_init, &xi8088_device}, {"[8086] Amstrad PC1512", ROM_PC1512, "pc1512", { {"", cpus_pc1512}, {"", NULL}, {"", NULL}}, MODEL_GFX_FIXED|MODEL_AMSTRAD, 512, 640, 128, ams_init, NULL}, @@ -377,6 +380,22 @@ void xt_laserxt_init() laserxt_init(); } +void xt_zenith_init() /* [8088] Zenith Data Systems SupersPort */ +{ + dma_init(); + fdc_add(); + lpt_init(); + lpt2_remove(); /* only one parallel port */ + pic_init(); + pit_init(); + serial1_init(0x3f8, 4); /* only one serial port */ + mem_add_bios(); + device_add(&zenith_scratchpad_device); + pit_set_out_func(&pit, 1, pit_refresh_timer_xt); + keyboard_xt_init(); + nmi_init(); +} + void xt_xi8088_init() { /* TODO: set UMBs? See if PCem always sets when we have > 640KB ram and avoids conflicts when a peripheral uses the same memory space */ diff --git a/src/zenith.c b/src/zenith.c new file mode 100644 index 0000000..f7f361b --- /dev/null +++ b/src/zenith.c @@ -0,0 +1,50 @@ +#include +#include "ibm.h" +#include "device.h" +#include "mem.h" +#include "zenith.h" + +static uint8_t *zenith_scratchpad_ram; +static mem_mapping_t zenith_scratchpad_mapping; + +static uint8_t zenith_scratchpad_read(uint32_t addr, void *p) +{ + return zenith_scratchpad_ram[addr & 0x3fff]; +} +static void zenith_scratchpad_write(uint32_t addr, uint8_t val, void *p) +{ + zenith_scratchpad_ram[addr & 0x3fff] = val; +} + +static void *zenith_scratchpad_init() +{ + zenith_scratchpad_ram = malloc(0x4000); + + mem_mapping_disable(&bios_mapping[4]); + mem_mapping_disable(&bios_mapping[5]); + + mem_mapping_add(&zenith_scratchpad_mapping, 0xf0000, 0x4000, + zenith_scratchpad_read, NULL, NULL, + zenith_scratchpad_write, NULL, NULL, + zenith_scratchpad_ram, MEM_MAPPING_EXTERNAL, NULL); + + return zenith_scratchpad_ram; +} + +static void zenith_scratchpad_close(void *p) +{ + free(p); +} + +device_t zenith_scratchpad_device = +{ + "Zenith scratchpad RAM", + 0, + zenith_scratchpad_init, + zenith_scratchpad_close, + NULL, + NULL, + NULL, + NULL, + NULL +}; diff --git a/src/zenith.h b/src/zenith.h new file mode 100644 index 0000000..0e58f45 --- /dev/null +++ b/src/zenith.h @@ -0,0 +1 @@ +device_t zenith_scratchpad_device;