--- np2/pccore.c 2003/12/08 00:55:30 1.27 +++ np2/pccore.c 2004/01/08 16:29:56 1.41 @@ -1,10 +1,10 @@ #include "compiler.h" +#include "strres.h" #include "dosio.h" #include "soundmng.h" #include "sysmng.h" #include "timemng.h" #include "cpucore.h" -#include "memory.h" #include "np2ver.h" #include "pccore.h" #include "iocore.h" @@ -23,6 +23,7 @@ #include "sound.h" #include "fmboard.h" #include "beep.h" +#include "s98.h" #include "font.h" #include "diskdrv.h" #include "fddfile.h" @@ -30,8 +31,10 @@ #include "sxsi.h" #include "calendar.h" #include "timing.h" -//#include "hostdrv.h" #include "debugsub.h" +#if defined(SUPPORT_HOSTDRV) +// #include "hostdrv.h" +#endif const char np2version[] = NP2VER_CORE; @@ -75,8 +78,6 @@ static const BYTE msw_default[8] = BOOL drawframe; UINT drawcount = 0; - BYTE mem[0x200000]; - // --------------------------------------------------------------------------- @@ -85,8 +86,6 @@ void getbiospath(char *path, const char const char *p; p = np2cfg.biospath; - - p = np2cfg.biospath; if (p[0]) { file_cpyname(path, p, maxlen); file_setseparator(path, maxlen); @@ -137,9 +136,18 @@ static void setvsyncclock(void) { pc.vsyncclock = cnt - pc.dispclock; } -static void setpcclock(UINT base, UINT multiple) { +static void setpcclock(const char *modelstr, UINT base, UINT multiple) { - pc.model = PCMODEL_VX; + UINT8 model; + + model = PCMODEL_VX; + if (!milstr_cmp(modelstr, str_VM)) { + model = PCMODEL_VM; + } + else if (!milstr_cmp(modelstr, str_EPSON)) { + model = PCMODEL_EPSON | PCMODEL_VM; + } + pc.model = model; if (base >= ((PCBASECLOCK25 + PCBASECLOCK20) / 2)) { pc.baseclock = PCBASECLOCK25; // 2.5MHz @@ -179,6 +187,9 @@ static void sound_init(void) { rate = 0; } sound_create(rate, np2cfg.delayms); +#if defined(SUPPORT_WAVEMIX) + wavemix_initialize(rate); +#endif beep_initialize(rate); beep_setvol(np2cfg.BEEP_VOL); tms3631_initialize(rate); @@ -193,11 +204,15 @@ static void sound_init(void) { adpcm_setvol(np2cfg.vol_adpcm); pcm86gen_initialize(rate); pcm86gen_setvol(np2cfg.vol_pcm); + cs4231_initialize(rate); } static void sound_term(void) { soundmng_stop(); +#if defined(SUPPORT_WAVEMIX) + wavemix_deinitialize(); +#endif rhythm_deinitialize(); sound_destroy(); } @@ -298,17 +313,25 @@ void pccore_reset(void) { sound_init(); } - setpcclock(np2cfg.baseclock, np2cfg.multiple); + setpcclock(np2cfg.model, np2cfg.baseclock, np2cfg.multiple); sound_changeclock(); beep_changeclock(); nevent_init(); sound_reset(); +#if defined(SUPPORT_WAVEMIX) + wavemix_bind(); +#endif + + if (pc.model & PCMODEL_EPSON) { // RAM ctrl + CPU_RAM_D000 = 0xffff; + } iocore_reset(); // サウンドでpicを呼ぶので… cbuscore_reset(); fmboard_reset(np2cfg.SOUND_SW); + i286_memorymap((pc.model & PCMODEL_EPSON)?1:0); iocore_build(); iocore_bind(); cbuscore_bind(); @@ -492,9 +515,9 @@ void screendisp(NEVENTITEM item) { void screenvsync(NEVENTITEM item) { - vramop.tramwait = np2cfg.wait[1]; - vramop.vramwait = np2cfg.wait[3]; - vramop.grcgwait = np2cfg.wait[5]; + MEMWAIT_TRAM = np2cfg.wait[1]; + MEMWAIT_VRAM = np2cfg.wait[3]; + MEMWAIT_GRCG = np2cfg.wait[5]; gdc_work(GDCWORK_MASTER); gdc.vsync = 0x20; if (gdc.vsyncint) { @@ -529,9 +552,9 @@ void pccore_exec(BOOL draw) { gdc.vsync = 0; screendispflag = 1; - vramop.tramwait = np2cfg.wait[0]; - vramop.vramwait = np2cfg.wait[2]; - vramop.grcgwait = np2cfg.wait[4]; + MEMWAIT_TRAM = np2cfg.wait[0]; + MEMWAIT_VRAM = np2cfg.wait[2]; + MEMWAIT_GRCG = np2cfg.wait[4]; nevent_set(NEVENT_FLAMES, pc.dispclock, screenvsync, NEVENT_RELATIVE); // nevent_get1stevent(); @@ -543,13 +566,17 @@ void pccore_exec(BOOL draw) { pic_irq(); if (CPU_RESETREQ) { CPU_RESETREQ = 0; +#if 1 + CPU_SHUT(); +#else CPU_CS = 0xf000; CS_BASE = 0xf0000; CPU_IP = 0xfff0; -#ifdef CPU386 // defineを変えてね +#if defined(CPUCORE_IA32) CPU_DX = 0x0300; #endif CPU_CLEARPREFETCH(); +#endif } #if 1 // ndef TRACE @@ -564,7 +591,7 @@ void pccore_exec(BOOL draw) { #else while(CPU_REMCLOCK > 0) { TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); - i286_step(); + i286x_step(); } #endif nevent_progress(); @@ -573,12 +600,13 @@ void pccore_exec(BOOL draw) { mpu98ii_callback(); diskdrv_callback(); calendar_inc(); + S98_sync(); sound_sync(); // happy! #if defined(TRACE) execcnt++; if (execcnt >= 60) { - TRACEOUT(("resetcnt = %d / pic %d", resetcnt, piccnt)); +// TRACEOUT(("resetcnt = %d / pic %d", resetcnt, piccnt)); execcnt = 0; resetcnt = 0; piccnt = 0;