diff --git a/nvr/default/pb570.nvr b/nvr/default/pb570.nvr new file mode 100644 index 0000000..cc21f81 Binary files /dev/null and b/nvr/default/pb570.nvr differ diff --git a/src/ibm.h b/src/ibm.h index a3a5a5f..53d2338 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -452,6 +452,7 @@ enum ROM_TO16_PC, ROM_COMPAQ_PII, ROM_ELX_PC425X, + ROM_PB570, ROM_MAX }; diff --git a/src/intel_flash.c b/src/intel_flash.c index 9846b93..2aa6a45 100644 --- a/src/intel_flash.c +++ b/src/intel_flash.c @@ -167,6 +167,9 @@ void *intel_flash_init(uint8_t type) case ROM_ENDEAVOR: strcpy(flash_path, "endeavor/"); break; + case ROM_PB570: + strcpy(flash_path, "pb570/"); + break; case ROM_430VX: strcpy(flash_path, "430vx/"); break; diff --git a/src/mem.c b/src/mem.c index b38248e..0c39836 100644 --- a/src/mem.c +++ b/src/mem.c @@ -844,6 +844,23 @@ int loadbios() romfread(rom, 65536, 1, f); fclose(f); 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"); if (f) fclose(f); diff --git a/src/model.c b/src/model.c index b90c4cb..4cdc03f 100644 --- a/src/model.c +++ b/src/model.c @@ -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 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}, diff --git a/src/nvr.c b/src/nvr.c index dc92b11..e462f11 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -298,7 +298,8 @@ void loadnvr() t1000_emsboard_loadnvr(); return; 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; } if (!f) @@ -381,6 +382,8 @@ void savenvr() t1000_emsboard_savenvr(); return; case ROM_ELX_PC425X: f = nvrfopen("elx_pc425.nvr", "wb"); break; + case ROM_PB570: f = nvrfopen("pb570.nvr", "wb"); break; + default: return; } fwrite(nvrram,128,1,f); diff --git a/src/vid_cl5429.c b/src/vid_cl5429.c index 71e0974..edb943c 100644 --- a/src/vid_cl5429.c +++ b/src/vid_cl5429.c @@ -1469,11 +1469,19 @@ static void *gd5430_init() { 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() { return rom_present("5429.vbi"); } +static int gd5430_available() +{ + return rom_present("gd5430/pci.bin"); +} void gd5429_close(void *p) { @@ -1551,7 +1559,20 @@ device_t gd5430_device = 0, gd5430_init, 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_force_redraw, gd5429_add_status_info, diff --git a/src/vid_cl5429.h b/src/vid_cl5429.h index 9537552..b6d2abf 100644 --- a/src/vid_cl5429.h +++ b/src/vid_cl5429.h @@ -1,2 +1,3 @@ extern device_t gd5429_device; extern device_t gd5430_device; +extern device_t gd5430_pb570_device; diff --git a/src/video.c b/src/video.c index c75ca33..98f042f 100644 --- a/src/video.c +++ b/src/video.c @@ -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_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}; int video_card_available(int card) { @@ -318,7 +319,10 @@ void video_updatetiming() case ROM_ELX_PC425X: timing = &timing_pc425x; - pclog("PC425 timing\n"); + break; + + case ROM_PB570: + timing = &timing_pb570; break; default: @@ -458,6 +462,10 @@ void video_init() case ROM_ELX_PC425X: device_add(&tgui9400cxi_elx_device); return; + + case ROM_PB570: + device_add(&gd5430_pb570_device); + return; } device_add(video_cards[video_old_to_new(gfxcard)].device); }