Add Packard Bell PB570 emulation.

This commit is contained in:
SarahW 2018-02-19 22:09:56 +00:00
commit ce5ae22307
9 changed files with 58 additions and 3 deletions

BIN
nvr/default/pb570.nvr Normal file

Binary file not shown.

View file

@ -452,6 +452,7 @@ enum
ROM_TO16_PC, ROM_TO16_PC,
ROM_COMPAQ_PII, ROM_COMPAQ_PII,
ROM_ELX_PC425X, ROM_ELX_PC425X,
ROM_PB570,
ROM_MAX ROM_MAX
}; };

View file

@ -167,6 +167,9 @@ void *intel_flash_init(uint8_t type)
case ROM_ENDEAVOR: case ROM_ENDEAVOR:
strcpy(flash_path, "endeavor/"); strcpy(flash_path, "endeavor/");
break; break;
case ROM_PB570:
strcpy(flash_path, "pb570/");
break;
case ROM_430VX: case ROM_430VX:
strcpy(flash_path, "430vx/"); strcpy(flash_path, "430vx/");
break; break;

View file

@ -844,6 +844,23 @@ int loadbios()
romfread(rom, 65536, 1, f); romfread(rom, 65536, 1, f);
fclose(f); fclose(f);
return 1; return 1;
case ROM_PB570:
if (!rom_present("gd5430/pci.bin"))
break;
f = romfopen("pb570/1007by0r.bio", "rb");
if (!f) break;
fseek(f, 0x80, SEEK_SET);
romfread(rom + 0x10000, 0x10000, 1, f);
fclose(f);
f = romfopen("pb570/1007by0r.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"); printf("Failed to load ROM!\n");
if (f) fclose(f); if (f) fclose(f);

View file

@ -171,6 +171,7 @@ MODEL models[] =
{"[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] 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 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/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] Packard Bell PB570", ROM_PB570, "pb570", { {"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}}, 1, MODEL_AT|MODEL_PCI|MODEL_PS2|MODEL_HAS_IDE, 1, 128, 1, at_endeavor_init, NULL},
{"[Socket 7] Award 430VX PCI", ROM_430VX, "430vx", { {"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}}, 0, MODEL_AT|MODEL_PCI|MODEL_PS2|MODEL_HAS_IDE, 1, 256, 1, at_i430vx_init, NULL}, {"[Socket 7] Award 430VX PCI", ROM_430VX, "430vx", { {"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}}, 0, MODEL_AT|MODEL_PCI|MODEL_PS2|MODEL_HAS_IDE, 1, 256, 1, at_i430vx_init, NULL},

View file

@ -298,6 +298,7 @@ void loadnvr()
t1000_emsboard_loadnvr(); t1000_emsboard_loadnvr();
return; return;
case ROM_ELX_PC425X: f = nvrfopen("elx_pc425.nvr", "rb"); nvrmask = 127; break; case ROM_ELX_PC425X: f = nvrfopen("elx_pc425.nvr", "rb"); nvrmask = 127; break;
case ROM_PB570: f = nvrfopen("pb570.nvr", "rb"); nvrmask = 127; break;
default: return; default: return;
} }
@ -381,6 +382,8 @@ void savenvr()
t1000_emsboard_savenvr(); t1000_emsboard_savenvr();
return; return;
case ROM_ELX_PC425X: f = nvrfopen("elx_pc425.nvr", "wb"); break; case ROM_ELX_PC425X: f = nvrfopen("elx_pc425.nvr", "wb"); break;
case ROM_PB570: f = nvrfopen("pb570.nvr", "wb"); break;
default: return; default: return;
} }
fwrite(nvrram,128,1,f); fwrite(nvrram,128,1,f);

View file

@ -1469,11 +1469,19 @@ static void *gd5430_init()
{ {
return cl_init(CL_TYPE_GD5430, "gd5430/pci.bin"); return cl_init(CL_TYPE_GD5430, "gd5430/pci.bin");
} }
static void *gd5430_pb570_init()
{
return cl_init(CL_TYPE_GD5430, "pb570/gd5430.bin");
}
static int gd5429_available() static int gd5429_available()
{ {
return rom_present("5429.vbi"); return rom_present("5429.vbi");
} }
static int gd5430_available()
{
return rom_present("gd5430/pci.bin");
}
void gd5429_close(void *p) void gd5429_close(void *p)
{ {
@ -1551,7 +1559,20 @@ device_t gd5430_device =
0, 0,
gd5430_init, gd5430_init,
gd5429_close, gd5429_close,
gd5429_available, gd5430_available,
gd5429_speed_changed,
gd5429_force_redraw,
gd5429_add_status_info,
gd5429_config
};
device_t gd5430_pb570_device =
{
"Cirrus Logic GD5430 (PB570)",
0,
gd5430_pb570_init,
gd5429_close,
gd5430_available,
gd5429_speed_changed, gd5429_speed_changed,
gd5429_force_redraw, gd5429_force_redraw,
gd5429_add_status_info, gd5429_add_status_info,

View file

@ -1,2 +1,3 @@
extern device_t gd5429_device; extern device_t gd5429_device;
extern device_t gd5430_device; extern device_t gd5430_device;
extern device_t gd5430_pb570_device;

View file

@ -112,6 +112,7 @@ static video_timings_t timing_ps1_svga = {VIDEO_ISA, 6, 8,16, 6, 8,16};
static video_timings_t timing_t3100e = {VIDEO_ISA, 8,16,32, 8,16,32}; 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_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_pc425x = {VIDEO_BUS, 5, 5, 9, 20,20,30};
static video_timings_t timing_pb570 = {VIDEO_BUS, 4, 4, 8, 10,10,20};
int video_card_available(int card) int video_card_available(int card)
{ {
@ -318,7 +319,10 @@ void video_updatetiming()
case ROM_ELX_PC425X: case ROM_ELX_PC425X:
timing = &timing_pc425x; timing = &timing_pc425x;
pclog("PC425 timing\n"); break;
case ROM_PB570:
timing = &timing_pb570;
break; break;
default: default:
@ -458,6 +462,10 @@ void video_init()
case ROM_ELX_PC425X: case ROM_ELX_PC425X:
device_add(&tgui9400cxi_elx_device); device_add(&tgui9400cxi_elx_device);
return; return;
case ROM_PB570:
device_add(&gd5430_pb570_device);
return;
} }
device_add(video_cards[video_old_to_new(gfxcard)].device); device_add(video_cards[video_old_to_new(gfxcard)].device);
} }