From a3ae6a6eed43396954d75e5f57f935b5cc301880 Mon Sep 17 00:00:00 2001 From: SarahW Date: Wed, 11 Oct 2017 22:09:26 +0100 Subject: [PATCH] Added IBM XT Model 286 emulation. --- nvr/default/ibmxt286.nvr | Bin 0 -> 128 bytes src/cpu.c | 7 +++++++ src/cpu.h | 1 + src/ibm.h | 1 + src/mem.c | 13 +++++++++++++ src/model.c | 1 + src/nvr.c | 2 ++ 7 files changed, 25 insertions(+) create mode 100644 nvr/default/ibmxt286.nvr diff --git a/nvr/default/ibmxt286.nvr b/nvr/default/ibmxt286.nvr new file mode 100644 index 0000000000000000000000000000000000000000..b5c94c19fcbdcd8ddd8d02746d84db620f07fc06 GIT binary patch literal 128 ucmd;JFkld6U=tUbsOH4bV8Ecnz`)?xzyu_*f~O2Tk_|u^9;~ut2m%1y&IF+V literal 0 HcmV?d00001 diff --git a/src/cpu.c b/src/cpu.c index 4f1b6ec..79e6ab6 100644 --- a/src/cpu.c +++ b/src/cpu.c @@ -197,6 +197,13 @@ CPU cpus_ibmat[] = {"", -1, 0, 0, 0, 0} }; +CPU cpus_ibmxt286[] = +{ + /*286*/ + {"286/6", CPU_286, 0, 6000000, 1, 0, 0, 0, 0, 0, 2,2,2,2}, + {"", -1, 0, 0, 0, 0} +}; + CPU cpus_ps1_m2011[] = { /*286*/ diff --git a/src/cpu.h b/src/cpu.h index 2a94816..2b26555 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -92,6 +92,7 @@ extern CPU cpus_pcjr[]; extern CPU cpus_europc[]; extern CPU cpus_pc1512[]; extern CPU cpus_ibmat[]; +extern CPU cpus_ibmxt286[]; extern CPU cpus_ps1_m2011[]; extern CPU cpus_ps2_m30_286[]; extern CPU cpus_acer[]; diff --git a/src/ibm.h b/src/ibm.h index 4a4f28d..250feab 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -432,6 +432,7 @@ enum ROM_IBMPS2_M55SX, ROM_IBMPS2_M80, ROM_ATARIPC3, + ROM_IBMXT286, ROM_MAX }; diff --git a/src/mem.c b/src/mem.c index 65154a6..8b80783 100644 --- a/src/mem.c +++ b/src/mem.c @@ -715,6 +715,19 @@ int loadbios() fread(rom+0x8000,32768,1,f); fclose(f); return 1; + + case ROM_IBMXT286: + f = romfopen("ibmxt286/BIOS_5162_21APR86_U34_78X7460_27256.BIN", "rb"); + ff =romfopen("ibmxt286/BIOS_5162_21APR86_U35_78X7461_27256.BIN", "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 1613279..5105083 100644 --- a/src/model.c +++ b/src/model.c @@ -127,6 +127,7 @@ MODEL models[] = {"[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}, {"[286] IBM PS/2 Model 30-286", ROM_IBMPS2_M30_286, "ibmps2_m30_286", { {"", cpus_ps2_m30_286}, {"", NULL}, {"", NULL}}, 1, MODEL_AT|MODEL_PS2, 1, 16, 1, ps2_m30_286_init, NULL}, {"[286] IBM PS/2 Model 50", ROM_IBMPS2_M50, "ibmps2_m50", { {"", cpus_ps2_m30_286}, {"", NULL}, {"", NULL}}, 1, MODEL_AT|MODEL_PS2|MODEL_MCA, 1, 16, 1, ps2_model_50_init, NULL}, + {"[286] IBM XT Model 286", ROM_IBMXT286, "ibmxt286", { {"", cpus_ibmxt286}, {"", NULL}, {"", NULL}}, 0, MODEL_AT, 256,15872,128, ibm_at_init, NULL}, {"[286] Samsung SPC-4200P", ROM_SPC4200P, "spc4200p", { {"", cpus_286}, {"", NULL}, {"", NULL}}, 0, MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 512,2048, 128, at_scat_init, NULL}, {"[286] Samsung SPC-4216P", ROM_SPC4216P, "spc4216p", { {"", cpus_286}, {"", NULL}, {"", NULL}}, 0, MODEL_AT|MODEL_PS2|MODEL_HAS_IDE, 1, 5, 1, at_scat_init, NULL}, diff --git a/src/nvr.c b/src/nvr.c index 35a2a83..88b88b5 100644 --- a/src/nvr.c +++ b/src/nvr.c @@ -244,6 +244,7 @@ void loadnvr() case ROM_PC2086: f = nvrfopen("pc2086.nvr", "rb"); break; case ROM_PC3086: f = nvrfopen("pc3086.nvr", "rb"); break; case ROM_IBMAT: f = nvrfopen("at.nvr", "rb"); break; + case ROM_IBMXT286: f = nvrfopen("ibmxt286.nvr", "rb"); break; case ROM_IBMPS1_2011: f = nvrfopen("ibmps1_2011.nvr", "rb"); /*nvrmask = 127; */break; case ROM_IBMPS1_2121: f = nvrfopen("ibmps1_2121.nvr", "rb"); nvrmask = 127; break; case ROM_IBMPS2_M30_286: f = nvrfopen("ibmps2_m30_286.nvr", "rb"); /*nvrmask = 127; */break; @@ -311,6 +312,7 @@ void savenvr() case ROM_PC2086: f = nvrfopen("pc2086.nvr", "wb"); break; case ROM_PC3086: f = nvrfopen("pc3086.nvr", "wb"); break; case ROM_IBMAT: f = nvrfopen("at.nvr", "wb"); break; + case ROM_IBMXT286: f = nvrfopen("ibmxt286.nvr", "wb"); break; case ROM_IBMPS1_2011: f = nvrfopen("ibmps1_2011.nvr", "wb"); break; case ROM_IBMPS1_2121: f = nvrfopen("ibmps1_2121.nvr", "wb"); break; case ROM_IBMPS2_M30_286: f = nvrfopen("ibmps2_m30_286.nvr", "wb"); break;