--- np2/pccore.c 2004/01/22 08:40:30 1.46 +++ np2/pccore.c 2004/01/23 15:05:04 1.50 @@ -5,7 +5,6 @@ #include "sysmng.h" #include "timemng.h" #include "cpucore.h" -#include "np2ver.h" #include "pccore.h" #include "iocore.h" #include "cbuscore.h" @@ -29,12 +28,13 @@ #include "fddfile.h" #include "fdd_mtr.h" #include "sxsi.h" -#include "calendar.h" -#include "timing.h" -#include "debugsub.h" #if defined(SUPPORT_HOSTDRV) #include "hostdrv.h" #endif +#include "np2ver.h" +#include "calendar.h" +#include "timing.h" +#include "debugsub.h" const char np2version[] = NP2VER_CORE; @@ -76,6 +76,7 @@ static const BYTE msw_default[8] = int soundrenewal = 0; BOOL drawframe; UINT drawcount = 0; + BOOL hardwarereset = FALSE; // --------------------------------------------------------------------------- @@ -175,12 +176,14 @@ static void pccore_set(void) { pccore.midiclock = pccore.realclock / 3125; // 拡張メモリ - pccore.extmem = 0; + if (!(np2cfg.dipsw[2] & 0x80)) { + pccore.extmem = np2cfg.EXTMEM; + } // HDDの接続 (I/Oの使用状態が変わるので.. -// if (np2cfg.dipsw[1] & 0x20) { + if (np2cfg.dipsw[1] & 0x20) { pccore.hddif |= PCHDD_IDE; -// } + } pccore.hddif |= PCHDD_SCSI; // サウンドボードの接続 @@ -290,6 +293,8 @@ void pccore_term(void) { mpu98ii_destruct(); sxsi_trash(); + + CPU_DEINITIALIZE(); } @@ -314,6 +319,13 @@ void pccore_reset(void) { int i; + soundmng_stop(); + if (soundrenewal) { + soundrenewal = 0; + sound_term(); + sound_init(); + } + ZeroMemory(mem, 0x10fff0); // ver0.28 ZeroMemory(mem + VRAM1_B, 0x18000); ZeroMemory(mem + VRAM1_E, 0x08000); @@ -333,31 +345,25 @@ void pccore_reset(void) { fddfile_reset2dmode(); bios0x18_16(0x20, 0xe1); - soundmng_stop(); - if (soundrenewal) { - soundrenewal = 0; - sound_term(); - sound_init(); + pccore_set(); + nevent_init(); + CPU_SETEXTMEM(pccore.extmem); + if (pccore.model & PCMODEL_EPSON) { // RAM ctrl + CPU_RAM_D000 = 0xffff; } - pccore_set(); sound_changeclock(); beep_changeclock(); - nevent_init(); - sound_reset(); #if defined(SUPPORT_WAVEMIX) wavemix_bind(); #endif - if (pccore.model & PCMODEL_EPSON) { // RAM ctrl - CPU_RAM_D000 = 0xffff; - } iocore_reset(); // サウンドでpicを呼ぶので… cbuscore_reset(); - fmboard_reset(np2cfg.SOUND_SW); + fmboard_reset(pccore.sound); i286_memorymap((pccore.model & PCMODEL_EPSON)?1:0); iocore_build(); @@ -365,7 +371,6 @@ void pccore_reset(void) { cbuscore_bind(); fmboard_bind(); - timing_reset(); fddmtr_init(); calendar_init(); vram_init(); @@ -391,11 +396,12 @@ void pccore_reset(void) { CPU_CLEARPREFETCH(); sysmng_cpureset(); - soundmng_play(); - #if defined(SUPPORT_HOSTDRV) hostdrv_reset(); #endif + + timing_reset(); + soundmng_play(); } static void drawscreen(void) { @@ -605,9 +611,9 @@ static int resetcnt = 0; static int execcnt = 0; int piccnt = 0; int tr = 0; +UINT cflg; #endif - UINT cflg; void pccore_exec(BOOL draw) { @@ -662,7 +668,9 @@ void pccore_exec(BOOL draw) { trpos++; #endif if (tr) { - TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); + if ((CPU_CS == 0xf760) || (CPU_CS == 0xf990)) { + TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); + } } #if 0 if ((tr & 2) && (mem[0x0471e] == '\\')) { @@ -682,8 +690,13 @@ void pccore_exec(BOOL draw) { } } #endif -// i286x_step(); - i286c_step(); +#if 0 + if ((CPU_CS == 0x0620) || (CPU_CS == 0x08a0)) { + TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); + } +#endif + i286x_step(); +// i286c_step(); } #endif nevent_progress(); @@ -695,6 +708,12 @@ void pccore_exec(BOOL draw) { S98_sync(); sound_sync(); // happy! + if (hardwarereset) { + hardwarereset = FALSE; + pccore_cfgupdate(); + pccore_reset(); + } + #if defined(TRACE) execcnt++; if (execcnt >= 60) {