From cc60e2b2c5303d599e4aea260ad90d7b036efdee Mon Sep 17 00:00:00 2001 From: SarahW Date: Tue, 20 Feb 2018 15:55:46 +0000 Subject: [PATCH] Added Packard Bell PB520r emulation. --- src/Makefile.am | 2 +- src/Makefile.linux32-wx-sdl2 | 2 +- src/Makefile.linux64-wx-sdl2 | 2 +- src/Makefile.mingw | 2 +- src/Makefile.mingw-network | 2 +- src/Makefile.mingw-wx-sdl2 | 2 +- src/Makefile.mingw-wx-sdl2-network | 2 +- src/Makefile.mingw64 | 2 +- src/Makefile.osx64-wx-sdl2 | 2 +- src/cmd640.c | 71 ++++++++++++++++++++++++++++++ src/cmd640.h | 1 + src/ibm.h | 1 + src/intel_flash.c | 3 ++ src/mem.c | 15 +++++++ src/model.c | 16 +++++++ src/nvr.c | 4 +- src/vid_cl5429.c | 17 +++++++ src/vid_cl5429.h | 1 + src/video.c | 9 ++++ 19 files changed, 146 insertions(+), 10 deletions(-) create mode 100644 src/cmd640.c create mode 100644 src/cmd640.h diff --git a/src/Makefile.am b/src/Makefile.am index 25cc85e..c833a9a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -24,7 +24,7 @@ wx-resources.cpp : pc.xrc # PCem pcem_SOURCES = 386.c 386_dynarec.c 386_dynarec_ops.c 808x.c acc2036.c acer386sx.c ali1429.c amstrad.c cbm_io.c cdrom-image.cc cdrom-null.c \ -codegen.c codegen_ops.c codegen_timing_486.c codegen_timing_686.c codegen_timing_common.c codegen_timing_pentium.c codegen_timing_winchip.c compaq.c config.c cpu.c \ +cmd640.c codegen.c codegen_ops.c codegen_timing_486.c codegen_timing_686.c codegen_timing_common.c codegen_timing_pentium.c codegen_timing_winchip.c compaq.c config.c cpu.c \ dells200.c device.c disc.c disc_fdi.c disc_img.c disc_sector.c dma.c esdi_at.c fdc.c fdc37c665.c fdd.c fdi2raw.c gameport.c \ hdd.c hdd_esdi.c hdd_file.c headland.c i430lx.c i430fx.c i430vx.c ide.c ide_atapi.c intel.c intel_flash.c io.c jim.c joystick_ch_flightstick_pro.c joystick_standard.c joystick_sw_pad.c \ joystick_tm_fcs.c keyboard.c keyboard_amstrad.c keyboard_at.c keyboard_olim24.c keyboard_pcjr.c keyboard_xt.c \ diff --git a/src/Makefile.linux32-wx-sdl2 b/src/Makefile.linux32-wx-sdl2 index 014e1a8..651e680 100644 --- a/src/Makefile.linux32-wx-sdl2 +++ b/src/Makefile.linux32-wx-sdl2 @@ -5,7 +5,7 @@ WXRC = wxrc CFLAGS = -O3 -fomit-frame-pointer -msse2 -m32 $(shell wx-config --cxxflags) $(shell sdl2-config --cflags) CXXFLAGS = $(CFLAGS) OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429.o amstrad.o cbm_io.o cdrom-ioctl-linux.o cdrom-image.o cdrom-null.o \ -codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.c compaq.o config.o cpu.o \ +cmd640.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.c compaq.o config.o cpu.o \ dells200.o device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o \ hdd.o hdd_esdi.o hdd_file.o headland.o i430lx.o i430fx.o i430vx.o ide.o ide_atapi.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 \ diff --git a/src/Makefile.linux64-wx-sdl2 b/src/Makefile.linux64-wx-sdl2 index 9ba1d36..0c4fd5d 100644 --- a/src/Makefile.linux64-wx-sdl2 +++ b/src/Makefile.linux64-wx-sdl2 @@ -5,7 +5,7 @@ WXRC = wxrc CFLAGS = -O3 -fomit-frame-pointer -msse2 -m64 $(shell wx-config --cxxflags) $(shell sdl2-config --cflags) CXXFLAGS = $(CFLAGS) OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429.o amstrad.o cbm_io.o cdrom-ioctl-linux.o cdrom-image.o cdrom-null.o \ -codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86-64.c compaq.o config.o cpu.o \ +cmd640.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86-64.c compaq.o config.o cpu.o \ dells200.o device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o \ hdd.o hdd_esdi.o hdd_file.o headland.o i430lx.o i430fx.o i430vx.o ide.o ide_atapi.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 \ diff --git a/src/Makefile.mingw b/src/Makefile.mingw index 8e4d53d..4448a70 100644 --- a/src/Makefile.mingw +++ b/src/Makefile.mingw @@ -4,7 +4,7 @@ CC = gcc.exe WINDRES = windres.exe CFLAGS = -O3 -march=i686 -fomit-frame-pointer -msse2 -mstackrealign -Wall -Werror -fno-strict-aliasing OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429.o amstrad.o cbm_io.o cdrom-ioctl.o cdrom-image.o \ - codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o \ + cmd640.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o \ dells200.o device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o hdd.o hdd_esdi.o hdd_file.o headland.o i430lx.o i430fx.o \ i430vx.o ide.o ide_atapi.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 laserxt.o lpt.o lpt_dac.o lpt_dss.o mca.o mcr.o mem.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_msystems.o mouse_ps2.o \ diff --git a/src/Makefile.mingw-network b/src/Makefile.mingw-network index 7f3b3f1..8a3c8df 100644 --- a/src/Makefile.mingw-network +++ b/src/Makefile.mingw-network @@ -5,7 +5,7 @@ MAKE = make.exe WINDRES = windres.exe CFLAGS = -O3 -march=i686 -fomit-frame-pointer -msse2 -mstackrealign -Wall -Werror -fno-strict-aliasing -DUSE_NETWORKING OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429.o amstrad.o cbm_io.o cdrom-ioctl.o cdrom-image.o \ - codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o \ + cmd640.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o \ dells200.o device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o hdd.o hdd_esdi.o hdd_file.o headland.o i430lx.o i430fx.o \ i430vx.o ide.o ide_atapi.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 laserxt.o lpt.o lpt_dac.o lpt_dss.o mca.o mcr.o mem.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_msystems.o mouse_ps2.o \ diff --git a/src/Makefile.mingw-wx-sdl2 b/src/Makefile.mingw-wx-sdl2 index f62d9ea..b9ee97a 100644 --- a/src/Makefile.mingw-wx-sdl2 +++ b/src/Makefile.mingw-wx-sdl2 @@ -7,7 +7,7 @@ WXINCLUDE = C:/MinGW/include/wx/ CFLAGS = -O3 -march=i686 -fomit-frame-pointer -msse2 -mstackrealign -Werror -fno-strict-aliasing CXXFLAGS = $(CFLAGS) OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429.o amstrad.o cbm_io.o cdrom-ioctl.o cdrom-image.o \ - codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o \ + cmd640.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o \ device.o dells200.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o hdd.o hdd_esdi.o hdd_file.o headland.o i430lx.o i430fx.o \ i430vx.o ide.o ide_atapi.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 laserxt.o lpt.o lpt_dac.o lpt_dss.o mca.o mcr.o mem.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_msystems.o mouse_ps2.o \ diff --git a/src/Makefile.mingw-wx-sdl2-network b/src/Makefile.mingw-wx-sdl2-network index 722061f..0a3fd57 100644 --- a/src/Makefile.mingw-wx-sdl2-network +++ b/src/Makefile.mingw-wx-sdl2-network @@ -7,7 +7,7 @@ WXINCLUDE = e:/mingwget/include/wx/ CFLAGS = -O3 -march=i686 -fomit-frame-pointer -msse2 -mstackrealign -Werror -fno-strict-aliasing -DUSE_NETWORKING CXXFLAGS = $(CFLAGS) OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429.o amstrad.o cbm_io.o cdrom-ioctl.o cdrom-image.o \ - codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o \ + cmd640.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86.o compaq.o config.o cpu.o \ device.o dells200.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o hdd.o hdd_esdi.o hdd_file.o headland.o i430lx.o i430fx.o \ i430vx.o ide.o ide_atapi.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 laserxt.o lpt.o lpt_dac.o lpt_dss.o mca.o mcr.o mem.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_msystems.o mouse_ps2.o \ diff --git a/src/Makefile.mingw64 b/src/Makefile.mingw64 index e5514eb..f164a5c 100644 --- a/src/Makefile.mingw64 +++ b/src/Makefile.mingw64 @@ -4,7 +4,7 @@ CC = gcc.exe WINDRES = windres.exe CFLAGS = -O3 -fomit-frame-pointer -msse2 -Wall -Werror -fno-strict-aliasing OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429.o amstrad.o cbm_io.o cdrom-ioctl.o cdrom-image.o \ - codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86-64.o compaq.o config.o cpu.o \ + cmd640.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86-64.o compaq.o config.o cpu.o \ dells200.o device.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o hdd.o hdd_esdi.o hdd_file.o headland.o i430lx.o i430fx.o \ i430vx.o ide.o ide_atapi.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 laserxt.o lpt.o lpt_dac.o lpt_dss.o mca.o mcr.o mem.o mfm_at.o mfm_xebec.o model.o mouse.o mouse_msystems.o mouse_ps2.o \ diff --git a/src/Makefile.osx64-wx-sdl2 b/src/Makefile.osx64-wx-sdl2 index ed36927..4e2f4f3 100644 --- a/src/Makefile.osx64-wx-sdl2 +++ b/src/Makefile.osx64-wx-sdl2 @@ -4,7 +4,7 @@ CC = gcc WXRC = wxrc CFLAGS = -D__unix=1 -DPCEM_RENDER_WITH_TIMER -DPCEM_RENDER_TIMER_LOOP -Dfopen64=fopen -Dfseeko64=fseeko -Dftello64=ftello -Doff64_t=off_t -O3 -fomit-frame-pointer -msse2 -m64 $(shell wx-config --cxxflags) $(shell sdl2-config --cflags) -I/usr/local/opt/openal-soft/include -I/usr/local/include OBJ = 386.o 386_dynarec.o 386_dynarec_ops.o 808x.o acc2036.o acer386sx.o ali1429.o amstrad.o cbm_io.o cdrom-ioctl-osx.o cdrom-image.o cdrom-null.o \ -codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86-64.c compaq.o config.o cpu.o \ +cmd640.o codegen.o codegen_ops.o codegen_timing_486.o codegen_timing_686.o codegen_timing_common.o codegen_timing_pentium.o codegen_timing_winchip.o codegen_x86-64.c compaq.o config.o cpu.o \ device.o dells200.o disc.o disc_fdi.o disc_img.o disc_sector.o dma.o esdi_at.o fdc.o fdc37c665.o fdd.o fdi2raw.o gameport.o \ hdd.o hdd_esdi.o hdd_file.o headland.o i430lx.o i430fx.o i430vx.o ide.o ide_atapi.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 \ diff --git a/src/cmd640.c b/src/cmd640.c new file mode 100644 index 0000000..1e8b8f9 --- /dev/null +++ b/src/cmd640.c @@ -0,0 +1,71 @@ +/*CMD640 emulation + Currently only legacy mode emulated*/ +#include "ibm.h" +#include "cmd640.h" +#include "ide.h" +#include "pci.h" + +static uint8_t card_cmd640[256]; + +void cmd640_write(int func, int addr, uint8_t val, void *priv) +{ +// pclog("cmd640_write: func=%d addr=%02x val=%02x %04x:%08x\n", func, addr, val, CS, cpu_state.pc); + if (func > 0) + return; + + switch (addr) + { + case 0x04: + ide_pri_disable(); + ide_sec_disable(); + if (val & 0x01) + { + ide_pri_enable(); + ide_sec_enable(); + } + card_cmd640[0x04] = val & 0x41; + break; + case 0x07: + card_cmd640[0x07] = val & 0x86; + break; + case 0x3c: + card_cmd640[0x3c] = val; + break; + } +} + +static uint8_t cmd640_read(int func, int addr, void *p) +{ +// pclog("cmd640_read: func=%d addr=%02x val=%02x %04x:%08x\n", func, addr, card_cmd640[addr], CS, cpu_state.pc); + if (func > 0) + return 0xff; + + return card_cmd640[addr]; +} + +void cmd640b_init(int card) +{ + pci_add_specific(card, cmd640_read, cmd640_write, NULL); + + memset(card_cmd640, 0, 256); + card_cmd640[0x00] = 0x95; card_cmd640[0x01] = 0x10; /**/ + card_cmd640[0x02] = 0x40; card_cmd640[0x03] = 0x06; /*CMD640*/ + card_cmd640[0x04] = 0x01; card_cmd640[0x05] = 0x00; + card_cmd640[0x06] = 0x00; card_cmd640[0x07] = 0x02; + card_cmd640[0x08] = 0x00; /*Revision*/ + card_cmd640[0x09] = 0x00; /*Programming interface*/ + card_cmd640[0x0a] = 0x01; /*Sub class - IDE controller*/ + card_cmd640[0x0b] = 0x01; /*Base class - Mass storage controller*/ + + + card_cmd640[0x3c] = 0x0e; /*Interrupt line*/ + card_cmd640[0x3d] = 1; + + card_cmd640[0x50] = 0x02; /*Revision = 2*/ + card_cmd640[0x51] = 0x80; /*2nd port disabled, drive 1 read ahead disabled*/ + card_cmd640[0x57] = 0x0c; /*Drive 2/3 read ahead disabled*/ + card_cmd640[0x59] = 0x40; /*Burst length*/ + + ide_pri_disable(); + ide_sec_disable(); +} diff --git a/src/cmd640.h b/src/cmd640.h new file mode 100644 index 0000000..5371669 --- /dev/null +++ b/src/cmd640.h @@ -0,0 +1 @@ +void cmd640b_init(int card); diff --git a/src/ibm.h b/src/ibm.h index ba2d856..d094b6a 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -454,6 +454,7 @@ enum ROM_ELX_PC425X, ROM_PB570, ROM_ZAPPA, + ROM_PB520R, ROM_MAX }; diff --git a/src/intel_flash.c b/src/intel_flash.c index bf169a4..f2de0bb 100644 --- a/src/intel_flash.c +++ b/src/intel_flash.c @@ -164,6 +164,9 @@ void *intel_flash_init(uint8_t type) case ROM_REVENGE: strcpy(flash_path, "revenge/"); break; + case ROM_PB520R: + strcpy(flash_path, "pb520r/"); + break; case ROM_ENDEAVOR: strcpy(flash_path, "endeavor/"); break; diff --git a/src/mem.c b/src/mem.c index d7cb896..c9a9eb2 100644 --- a/src/mem.c +++ b/src/mem.c @@ -875,6 +875,21 @@ int loadbios() fclose(f); biosmask = 0x1ffff; return 1; + + case ROM_PB520R: + f = romfopen("pb520r/1009bc0r.bio", "rb"); + if (!f) break; + fseek(f, 0x80, SEEK_SET); + romfread(rom + 0x10000, 0x10000, 1, f); + fclose(f); + f = romfopen("pb520r/1009bc0r.bi1", "rb"); + if (!f) break; + fseek(f, 0x80, SEEK_SET); + romfread(rom, 0xc000, 1, f); + romfread(rom+0xc000, 0x1000, 1, f); + fclose(f); + biosmask = 0x1ffff; + return 1; } printf("Failed to load ROM!\n"); if (f) fclose(f); diff --git a/src/model.c b/src/model.c index 030b554..27c37f7 100644 --- a/src/model.c +++ b/src/model.c @@ -9,6 +9,7 @@ #include "ali1429.h" #include "amstrad.h" #include "cbm_io.h" +#include "cmd640.h" #include "compaq.h" #include "dells200.h" #include "device.h" @@ -99,6 +100,7 @@ void xt_t1000_init(); void xt_t1200_init(); void at_sl82c460_init(); void at_zappa_init(); +void at_pb520r_init(); int model; int AMSTRAD, AT, PCI, TANDY; @@ -170,6 +172,7 @@ MODEL models[] = {"[486] Elonex PC-425X", ROM_ELX_PC425X, "elx_pc425x", { {"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}}, 1, MODEL_AT|MODEL_HAS_IDE, 1, 256, 1, at_sl82c460_init, NULL}, {"[Socket 4] Intel Premiere/PCI", ROM_REVENGE, "revenge", { {"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}}, 0, MODEL_AT|MODEL_PCI|MODEL_PS2|MODEL_HAS_IDE, 1, 128, 1, at_batman_init, NULL}, + {"[Socket 4] Packard Bell PB520R",ROM_PB520R, "pb520r", { {"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}}, 1, MODEL_AT|MODEL_PCI|MODEL_PS2|MODEL_HAS_IDE, 1, 128, 1, at_pb520r_init, NULL}, {"[Socket 5] Intel Advanced/EV", ROM_ENDEAVOR, "endeavor", { {"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}}, 0, MODEL_AT|MODEL_PCI|MODEL_PS2|MODEL_HAS_IDE, 1, 128, 1, at_endeavor_init, NULL}, {"[Socket 5] Intel Advanced/ZP", ROM_ZAPPA, "zappa", { {"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}}, 0, MODEL_AT|MODEL_PCI|MODEL_PS2|MODEL_HAS_IDE, 1, 128, 1, at_zappa_init, NULL}, @@ -538,6 +541,19 @@ void at_batman_init() intel_batman_init(); device_add(&intel_flash_bxt_ami_device); } +void at_pb520r_init() +{ + at_init(); + pci_init(PCI_CONFIG_TYPE_2); + pci_slot(0xc); + pci_slot(0xe); + pci_slot(0x6); + i430lx_init(); + sio_init(2, 0xc, 0xe, 0x6, 0); + cmd640b_init(1); + intel_batman_init(); + device_add(&intel_flash_bxt_ami_device); +} void at_endeavor_init() { at_init(); diff --git a/src/nvr.c b/src/nvr.c index 02096e7..59272be 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -300,7 +300,8 @@ void loadnvr() case ROM_ELX_PC425X: f = nvrfopen("elx_pc425.nvr", "rb"); nvrmask = 127; break; case ROM_PB570: f = nvrfopen("pb570.nvr", "rb"); nvrmask = 127; break; case ROM_ZAPPA: f = nvrfopen("zappa.nvr", "rb"); nvrmask = 127; break; - + case ROM_PB520R: f = nvrfopen("pb520r.nvr", "rb"); nvrmask = 127; break; + default: return; } if (!f) @@ -385,6 +386,7 @@ void savenvr() case ROM_ELX_PC425X: f = nvrfopen("elx_pc425.nvr", "wb"); break; case ROM_PB570: f = nvrfopen("pb570.nvr", "wb"); break; case ROM_ZAPPA: f = nvrfopen("zappa.nvr", "wb"); break; + case ROM_PB520R: f = nvrfopen("pb520r.nvr", "wb"); break; default: return; } diff --git a/src/vid_cl5429.c b/src/vid_cl5429.c index 19d7829..4f04a1e 100644 --- a/src/vid_cl5429.c +++ b/src/vid_cl5429.c @@ -1606,6 +1606,10 @@ static void *gd5434_init() { return cl_init(CL_TYPE_GD5434, "gd5434.bin"); } +static void *gd5434_pb520r_init() +{ + return cl_init(CL_TYPE_GD5434, "pb520r/gd5434.bin"); +} static int gd5429_available() { @@ -1754,3 +1758,16 @@ device_t gd5434_device = gd5429_add_status_info, gd5434_config }; + +device_t gd5434_pb520r_device = +{ + "Cirrus Logic GD5434 (PB520r)", + 0, + gd5434_pb520r_init, + gd5429_close, + gd5434_available, + gd5429_speed_changed, + gd5429_force_redraw, + gd5429_add_status_info, + gd5434_config +}; diff --git a/src/vid_cl5429.h b/src/vid_cl5429.h index 6b92f46..a045e6e 100644 --- a/src/vid_cl5429.h +++ b/src/vid_cl5429.h @@ -2,3 +2,4 @@ extern device_t gd5429_device; extern device_t gd5430_device; extern device_t gd5430_pb570_device; extern device_t gd5434_device; +extern device_t gd5434_pb520r_device; diff --git a/src/video.c b/src/video.c index 9bef9f5..29cbafc 100644 --- a/src/video.c +++ b/src/video.c @@ -114,6 +114,7 @@ static video_timings_t timing_t3100e = {VIDEO_ISA, 8,16,32, 8,16,32}; static video_timings_t timing_t1000 = {VIDEO_ISA, 8,16,32, 8,16,32}; static video_timings_t timing_pc425x = {VIDEO_BUS, 5, 5, 9, 20,20,30}; static video_timings_t timing_pb570 = {VIDEO_BUS, 4, 4, 8, 10,10,20}; +static video_timings_t timing_pb520r = {VIDEO_BUS, 4, 4, 8, 10,10,20}; int video_card_available(int card) { @@ -325,6 +326,10 @@ void video_updatetiming() case ROM_PB570: timing = &timing_pb570; break; + + case ROM_PB520R: + timing = &timing_pb520r; + break; default: new_gfxcard = video_old_to_new(gfxcard); @@ -467,6 +472,10 @@ void video_init() case ROM_PB570: device_add(&gd5430_pb570_device); return; + + case ROM_PB520R: + device_add(&gd5434_pb520r_device); + return; } device_add(video_cards[video_old_to_new(gfxcard)].device); }