--- np2/pccore.c 2003/12/04 09:47:08 1.25 +++ np2/pccore.c 2003/12/19 23:16:06 1.33 @@ -1,11 +1,9 @@ #include "compiler.h" -#include "strres.h" #include "dosio.h" #include "soundmng.h" #include "sysmng.h" #include "timemng.h" -#include "i286.h" -#include "memory.h" +#include "cpucore.h" #include "np2ver.h" #include "pccore.h" #include "iocore.h" @@ -24,6 +22,7 @@ #include "sound.h" #include "fmboard.h" #include "beep.h" +#include "s98.h" #include "font.h" #include "diskdrv.h" #include "fddfile.h" @@ -76,11 +75,29 @@ static const BYTE msw_default[8] = BOOL drawframe; UINT drawcount = 0; - BYTE mem[0x200000]; - // --------------------------------------------------------------------------- +void getbiospath(char *path, const char *fname, int maxlen) { + +const char *p; + + p = np2cfg.biospath; + + p = np2cfg.biospath; + if (p[0]) { + file_cpyname(path, p, maxlen); + file_setseparator(path, maxlen); + file_catname(path, fname, maxlen); + } + else { + file_cpyname(path, file_getcd(fname), maxlen); + } +} + + +// ---- + static void setvsyncclock(void) { UINT vfp; @@ -185,17 +202,7 @@ static void sound_term(void) { void pccore_init(void) { - char *p; - - p = np2cfg.biospath; - if (p[0]) { - file_setseparator(p, sizeof(np2cfg.biospath)); - } - else { - file_cpyname(p, file_getcd(str_null), sizeof(np2cfg.biospath)); - } - - i286_initialize(); + CPU_INITIALIZE(); pal_initlcdtable(); pal_makelcdpal(); @@ -268,10 +275,10 @@ void pccore_reset(void) { ZeroMemory(mem + VRAM1_E, 0x08000); ZeroMemory(mem + FONT_ADRS, 0x08000); - i286_reset(); - CPUTYPE = 0; + CPU_RESET(); + CPU_TYPE = 0; if (np2cfg.dipsw[2] & 0x80) { - CPUTYPE = CPUTYPE_V30; + CPU_TYPE = CPUTYPE_V30; } //メモリスイッチ @@ -317,18 +324,18 @@ void pccore_reset(void) { if (np2cfg.ITF_WORK) { CS_BASE = 0xf0000; - I286_CS = 0xf000; - I286_IP = 0xfff0; + CPU_CS = 0xf000; + CPU_IP = 0xfff0; } else { for (i=0; i<8; i++) { mem[0xa3fe2 + i*4] = msw_default[i]; } CS_BASE = 0xfd800; - I286_CS = 0xfd80; - I286_IP = 0x0002; + CPU_CS = 0xfd80; + CPU_IP = 0x0002; } - i286_resetprefetch(); + CPU_CLEARPREFETCH(); sysmng_cpureset(); soundmng_play(); @@ -483,9 +490,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) { @@ -520,9 +527,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(); @@ -532,29 +539,29 @@ void pccore_exec(BOOL draw) { resetcnt++; #endif pic_irq(); - if (i286core.s.resetreq) { - i286core.s.resetreq = 0; - I286_CS = 0xf000; + if (CPU_RESETREQ) { + CPU_RESETREQ = 0; + CPU_CS = 0xf000; CS_BASE = 0xf0000; - I286_IP = 0xfff0; -#ifdef CPU386 // defineを変えてね - I286_DX = 0x0300; + CPU_IP = 0xfff0; +#if defined(CPUCORE_IA32) + CPU_DX = 0x0300; #endif - i286_resetprefetch(); + CPU_CLEARPREFETCH(); } -#if 1 // ndef TRACE - if (I286_REMCLOCK > 0) { - if (!(CPUTYPE & CPUTYPE_V30)) { - i286(); +#if 1 //ndef TRACE + if (CPU_REMCLOCK > 0) { + if (!(CPU_TYPE & CPUTYPE_V30)) { + CPU_EXEC(); } else { - v30(); + CPU_EXECV30(); } } #else - while(I286_REMCLOCK > 0) { - TRACEOUT(("%.4x:%.4x", I286_CS, I286_IP)); + while(CPU_REMCLOCK > 0) { + TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); i286_step(); } #endif @@ -564,6 +571,7 @@ void pccore_exec(BOOL draw) { mpu98ii_callback(); diskdrv_callback(); calendar_inc(); + S98_sync(); sound_sync(); // happy! #if defined(TRACE)