diff --git a/include/cpu.h b/include/cpu.h index d9c52d630..ca7faab58 100644 --- a/include/cpu.h +++ b/include/cpu.h @@ -42,6 +42,7 @@ #define CPU_ARCHTYPE_MIXED 0xff #define CPU_ARCHTYPE_8086 0x05 +#define CPU_ARCHTYPE_80186 0x15 #define CPU_ARCHTYPE_286 0x25 #define CPU_ARCHTYPE_386 0x35 #define CPU_ARCHTYPE_486OLD 0x40 diff --git a/src/cpu/cpu.cpp b/src/cpu/cpu.cpp index e22bc7443..a659f8bee 100644 --- a/src/cpu/cpu.cpp +++ b/src/cpu/cpu.cpp @@ -2811,6 +2811,21 @@ public: } else { E_Exit("prefetch queue emulation requires the normal core setting."); } + } else if (cputype == "80186") { + CPU_ArchitectureType = CPU_ARCHTYPE_80186; + cpudecoder=&CPU_Core286_Normal_Run; + } else if (cputype == "80186_prefetch") { /* 6-byte prefetch queue ref [http://www.phatcode.net/res/224/files/html/ch11/11-02.html] */ + CPU_ArchitectureType = CPU_ARCHTYPE_80186; + if (core == "normal") { + cpudecoder=&CPU_Core_Prefetch_Run; /* TODO: Alternate 16-bit only decoder for 286 that does NOT include 386+ instructions */ + CPU_PrefetchQueueSize = 6; + } else if (core == "auto") { + cpudecoder=&CPU_Core_Prefetch_Run; /* TODO: Alternate 16-bit only decoder for 286 that does NOT include 386+ instructions */ + CPU_PrefetchQueueSize = 6; + CPU_AutoDetermineMode&=(~CPU_AUTODETERMINE_CORE); + } else { + E_Exit("prefetch queue emulation requires the normal core setting."); + } } else if (cputype == "286") { CPU_ArchitectureType = CPU_ARCHTYPE_286; cpudecoder=&CPU_Core286_Normal_Run; @@ -2861,12 +2876,12 @@ public: } /* WARNING */ - if (CPU_ArchitectureType == CPU_ARCHTYPE_286) { - LOG_MSG("CPU warning: 286 cpu type is experimental at this time"); - } - else if (CPU_ArchitectureType == CPU_ARCHTYPE_8086) { + if (CPU_ArchitectureType == CPU_ARCHTYPE_8086) { LOG_MSG("CPU warning: 8086 cpu type is experimental at this time"); } + else if (CPU_ArchitectureType == CPU_ARCHTYPE_80186) { + LOG_MSG("CPU warning: 80186 cpu type is experimental at this time"); + } if (CPU_ArchitectureType>=CPU_ARCHTYPE_486NEW) CPU_extflags_toggle=(FLAG_ID|FLAG_AC); else if (CPU_ArchitectureType>=CPU_ARCHTYPE_486OLD) CPU_extflags_toggle=(FLAG_AC); diff --git a/src/dosbox.cpp b/src/dosbox.cpp index abc7b2049..8e5c0ae3d 100644 --- a/src/dosbox.cpp +++ b/src/dosbox.cpp @@ -730,7 +730,7 @@ void DOSBOX_Init(void) { const char* vsyncmode[] = { "off", "on" ,"force", "host", 0 }; const char* blocksizes[] = {"1024", "2048", "4096", "8192", "512", "256", 0}; const char* auxdevices[] = {"none","2button","3button","intellimouse","intellimouse45",0}; - const char* cputype_values[] = {"auto", "8086", "8086_prefetch", "286", "286_prefetch", "386", "386_prefetch", "486", "pentium", "pentium_mmx", 0}; + const char* cputype_values[] = {"auto", "8086", "8086_prefetch", "80186", "80186_prefetch", "286", "286_prefetch", "386", "386_prefetch", "486", "pentium", "pentium_mmx", 0}; const char* rates[] = { "44100", "48000", "32000","22050", "16000", "11025", "8000", "49716", 0 }; const char* oplrates[] = { "44100", "49716", "48000", "32000","22050", "16000", "11025", "8000", 0 }; const char* devices[] = { "default", "win32", "alsa", "oss", "coreaudio", "coremidi", "mt32", "synth", "timidity", "none", 0}; // FIXME: add some way to offer the actually available choices.