--- np2/pccore.c 2003/11/14 07:37:28 1.17 +++ np2/pccore.c 2003/12/04 13:54:28 1.26 @@ -1,4 +1,5 @@ #include "compiler.h" +#include "dosio.h" #include "soundmng.h" #include "sysmng.h" #include "timemng.h" @@ -35,38 +36,38 @@ const char np2version[] = NP2VER_CORE; - NP2CFG np2cfg = { - PCBASECLOCK25, 4, PCMODEL_VX, - {0x3e, 0x63, 0x7a}, - {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6E}, - {0x0c, 0x0c, 0x08, 0x06, 0x03, 0x0c}, - {1, 1, 6, 1, 8, 1}, - 0, 0, 4, 32, 22050, 800, 0, 1, 1, 0, - 0, 0, - 0, {0, 0, 0}, 0xd1, 0x7f, 0xd1, 0, 0, 1, 0x82, // ver0.30 - 1, 80, 3, 1, 1, 0, 0x000000, 0xffffff, - 0, 0, 0, 0x40, 0, - 64, 64, 64, 64, 64, + NP2CFG np2cfg = { + 0, 1, 0, 32, 0, 0, 0x40, + 0, 0, 0, 0, + {0x3e, 0x63, 0x7a}, 0, + 0, 0, {1, 1, 6, 1, 8, 1}, + + "VX", PCBASECLOCK25, 4, + {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6e}, + 1, 1, 2, 1, 0x000000, 0xffffff, + 22050, 800, 4, 0, + {0, 0, 0}, 0xd1, 0x7f, 0xd1, 0, 0, 1, + 3, {0x0c, 0x0c, 0x08, 0x06, 0x03, 0x0c}, 64, 64, 64, 64, 64, + 1, 0x82, 0, {0x17, 0x04, 0x1f}, {0x0c, 0x0c, 0x02, 0x10, 0x3f, 0x3f}, - 2, 1, 0, 0, - {"", ""}, ""}; + 1, 80, 0, + {"", ""}, "", ""}; PCCORE pc = { PCBASECLOCK25, - 4, - 4 * PCBASECLOCK25, - 4 * PCBASECLOCK25 * 50 / 3104, - 4 * PCBASECLOCK25 * 5 / 3104, - 4 * PCBASECLOCK25 / 120, - 4 * PCBASECLOCK25 / 1920, - 4 * PCBASECLOCK25 / 3125, - (4 * PCBASECLOCK25 / 56400), - 100, 20, - 0}; + 4, + 4 * PCBASECLOCK25, + 4 * PCBASECLOCK25 * 50 / 3104, + 4 * PCBASECLOCK25 * 5 / 3104, + 4 * PCBASECLOCK25 / 120, + 4 * PCBASECLOCK25 / 1920, + 4 * PCBASECLOCK25 / 3125, + 4 * PCBASECLOCK25 / 56400, + 100, 20, 0, PCMODEL_VX}; -// // on=0, off=1 + // on=0, off=1 // BYTE dip_default[3] = {0x3e, 0x63, 0x7a}; static const BYTE msw_default[8] = - {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6E}; + {0x48, 0x05, 0x04, 0x00, 0x01, 0x00, 0x00, 0x6e}; BYTE screenupdate = 3; int screendispflag = 1; @@ -79,6 +80,26 @@ static const BYTE msw_default[8] = // --------------------------------------------------------------------------- +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; @@ -116,7 +137,9 @@ static void setvsyncclock(void) { pc.vsyncclock = cnt - pc.dispclock; } -static void setpcclock(UINT base, UINT multiple) { // ver0.28 +static void setpcclock(UINT base, UINT multiple) { + + pc.model = PCMODEL_VX; if (base >= ((PCBASECLOCK25 + PCBASECLOCK20) / 2)) { pc.baseclock = PCBASECLOCK25; // 2.5MHz @@ -181,6 +204,8 @@ static void sound_term(void) { void pccore_init(void) { + i286_initialize(); + pal_initlcdtable(); pal_makelcdpal(); pal_makeskiptable(); @@ -485,8 +510,15 @@ void screenvsync(NEVENTITEM item) { (void)item; } + // --------------------------------------------------------------------------- +#if defined(TRACE) +static int resetcnt = 0; +static int execcnt = 0; +int piccnt = 0; +#endif + void pccore_exec(BOOL draw) { drawframe = draw; @@ -505,9 +537,12 @@ void pccore_exec(BOOL draw) { // nevent_get1stevent(); while(screendispflag) { +#if defined(TRACE) + resetcnt++; +#endif pic_irq(); - if (cpuio.reset_req) { - cpuio.reset_req = 0; + if (i286core.s.resetreq) { + i286core.s.resetreq = 0; I286_CS = 0xf000; CS_BASE = 0xf0000; I286_IP = 0xfff0; @@ -517,7 +552,7 @@ void pccore_exec(BOOL draw) { i286_resetprefetch(); } -#ifndef TRACE +#if 1 // ndef TRACE if (I286_REMCLOCK > 0) { if (!(CPUTYPE & CPUTYPE_V30)) { i286(); @@ -528,15 +563,26 @@ void pccore_exec(BOOL draw) { } #else while(I286_REMCLOCK > 0) { + TRACEOUT(("%.4x:%.4x", I286_CS, I286_IP)); i286_step(); } #endif nevent_progress(); } - artic_callback(); // ver0.28 + artic_callback(); mpu98ii_callback(); diskdrv_callback(); calendar_inc(); sound_sync(); // happy! + +#if defined(TRACE) + execcnt++; + if (execcnt >= 60) { + TRACEOUT(("resetcnt = %d / pic %d", resetcnt, piccnt)); + execcnt = 0; + resetcnt = 0; + piccnt = 0; + } +#endif }