From c28490cc2f28b18120afdfc158b760c21374577e Mon Sep 17 00:00:00 2001 From: SarahW Date: Sat, 14 Oct 2017 12:31:47 +0100 Subject: [PATCH] Added Epson PC AX, AX2e and AX3 models. Patch from dns2kv2. --- src/ibm.h | 3 +++ src/mem.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/model.c | 3 +++ src/nvr.c | 6 ++++++ 4 files changed, 53 insertions(+) diff --git a/src/ibm.h b/src/ibm.h index 250feab..ff343c1 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -433,6 +433,9 @@ enum ROM_IBMPS2_M80, ROM_ATARIPC3, ROM_IBMXT286, + ROM_EPSON_PCAX, + ROM_EPSON_PCAX2E, + ROM_EPSON_PCAX3, ROM_MAX }; diff --git a/src/mem.c b/src/mem.c index 841f018..54575a2 100644 --- a/src/mem.c +++ b/src/mem.c @@ -714,6 +714,47 @@ int loadbios() fclose(ff); fclose(f); return 1; + + case ROM_EPSON_PCAX: + f = romfopen("epson_pcax/EVAX", "rb"); + ff = romfopen("epson_pcax/ODAX", "rb"); + if (!f || !ff) break; + for (c = 0x0000; c < 0x8000; c += 2) + { + rom[c] = getc(f); + rom[c + 1] = getc(ff); + } + fclose(ff); + fclose(f); + biosmask = 0x7fff; + return 1; + + case ROM_EPSON_PCAX2E: + f = romfopen("epson_pcax2e/EVAXE", "rb"); + ff = romfopen("epson_pcax2e/ODAXE", "rb"); + if (!f || !ff) break; + for (c = 0x0000; c < 0x10000; c += 2) + { + rom[c] = getc(f); + rom[c+1] = getc(ff); + } + fclose(ff); + fclose(f); + return 1; + + case ROM_EPSON_PCAX3: + f = romfopen("epson_pcax3/EVAX3", "rb"); + ff = romfopen("epson_pcax3/ODAX3", "rb"); + if (!f || !ff) break; + for (c = 0x0000; c < 0x10000;c += 2) + { + rom[c] = getc(f); + rom[c+1] = getc(ff); + } + fclose(ff); + fclose(f); + return 1; + } printf("Failed to load ROM!\n"); if (f) fclose(f); diff --git a/src/model.c b/src/model.c index 5105083..00734ba 100644 --- a/src/model.c +++ b/src/model.c @@ -122,6 +122,8 @@ MODEL models[] = {"[286] Award 286 clone", ROM_AWARD286, "award286", { {"", cpus_286}, {"", NULL}, {"", NULL}}, 0, MODEL_AT|MODEL_HAS_IDE, 512,16384,128, at_scat_init, NULL}, {"[286] Commodore PC 30 III", ROM_CMDPC30, "cmdpc30", { {"", cpus_286}, {"", NULL}, {"", NULL}}, 0, MODEL_AT|MODEL_HAS_IDE, 640,16384,128, at_cbm_init, NULL}, {"[286] DELL System 200", ROM_DELL200, "dells200", { {"", cpus_286}, {"", NULL}, {"", NULL}}, 0, MODEL_AT, 640,16384,128, dells200_init, NULL}, + {"[286] Epson PC AX", ROM_EPSON_PCAX, "epson_pcax", { {"", cpus_286}, {"", NULL}, {"", NULL}}, 0, MODEL_AT, 256,15872,128, at_init, NULL}, + {"[286] Epson PC AX2e", ROM_EPSON_PCAX2E, "epson_pcax2e", { {"", cpus_286}, {"", NULL}, {"", NULL}}, 0, MODEL_AT, 256,15872,128, at_init, NULL}, {"[286] GW-286CT GEAR", ROM_GW286CT, "gw286ct", { {"", cpus_286}, {"", NULL}, {"", NULL}}, 0, MODEL_AT , 512,16384,128, at_scat_init, NULL}, {"[286] IBM AT", ROM_IBMAT, "ibmat", { {"", cpus_ibmat}, {"", NULL}, {"", NULL}}, 0, MODEL_AT, 256,15872,128, ibm_at_init, NULL}, {"[286] IBM PS/1 model 2011", ROM_IBMPS1_2011, "ibmps1es", { {"", cpus_ps1_m2011}, {"", NULL}, {"", NULL}}, 1, MODEL_AT|MODEL_PS2, 512,16384,512, ps1_m2011_init, NULL}, @@ -135,6 +137,7 @@ MODEL models[] = {"[386SX] AMI 386SX clone", ROM_AMI386SX, "ami386", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, 0, MODEL_AT|MODEL_HAS_IDE, 512,16384,128, at_headland_init, NULL}, {"[386SX] Amstrad MegaPC", ROM_MEGAPC, "megapc", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, 1, MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 1, 16, 1, at_wd76c10_init, NULL}, {"[386SX] DTK 386SX clone", ROM_DTK386, "dtk386", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, 0, MODEL_AT|MODEL_HAS_IDE, 512,16384,128, at_neat_init, NULL}, + {"[386SX] Epson PC AX3", ROM_EPSON_PCAX3, "epson_pcax3", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, 0, MODEL_AT, 256,15872,128, at_init, NULL}, {"[386SX] IBM PS/1 model 2121", ROM_IBMPS1_2121, "ibmps1_2121", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, 1, MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 1, 16, 1, ps1_m2121_init, NULL}, {"[386SX] IBM PS/2 Model 55SX", ROM_IBMPS2_M55SX, "ibmps2_m55sx", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, 1, MODEL_AT|MODEL_PS2|MODEL_MCA, 1, 8, 1, ps2_model_55sx_init, NULL}, {"[386SX] KMX-C-02", ROM_KMXC02, "kmxc02", { {"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}}, 0, MODEL_AT , 512,16384,512, at_scatsx_init, NULL}, diff --git a/src/nvr.c b/src/nvr.c index 88b88b5..355281d 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -275,6 +275,9 @@ void loadnvr() case ROM_DTK386: f = nvrfopen("dtk386.nvr", "rb"); nvrmask = 127; break; case ROM_MR386DX_OPTI495: f = nvrfopen("mr386dx_opti495.nvr", "rb"); nvrmask = 127; break; case ROM_AMI386DX_OPTI495: f = nvrfopen("ami386dx_opti495.nvr", "rb"); nvrmask = 127; break; + case ROM_EPSON_PCAX: f = nvrfopen("epson_pcax.nvr", "rb"); nvrmask = 127; break; + case ROM_EPSON_PCAX2E: f = nvrfopen("epson_pcax2e.nvr", "rb"); nvrmask = 127; break; + case ROM_EPSON_PCAX3: f = nvrfopen("epson_pcax3.nvr", "rb"); nvrmask = 127; break; default: return; } if (!f) @@ -343,6 +346,9 @@ void savenvr() case ROM_DTK386: f = nvrfopen("dtk386.nvr", "wb"); break; case ROM_MR386DX_OPTI495: f = nvrfopen("mr386dx_opti495.nvr", "wb"); break; case ROM_AMI386DX_OPTI495: f = nvrfopen("ami386dx_opti495.nvr", "wb"); break; + case ROM_EPSON_PCAX: f = nvrfopen("epson_pcax.nvr", "wb"); break; + case ROM_EPSON_PCAX2E: f = nvrfopen("epson_pcax2e.nvr", "wb"); break; + case ROM_EPSON_PCAX3: f = nvrfopen("epson_pcax3.nvr", "wb"); break; default: return; } fwrite(nvrram,128,1,f);