| version 1.22, 2003/11/30 11:20:55 | version 1.33, 2003/12/19 23:16:06 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 |  | #include        "dosio.h" | 
 | #include        "soundmng.h" | #include        "soundmng.h" | 
 | #include        "sysmng.h" | #include        "sysmng.h" | 
 | #include        "timemng.h" | #include        "timemng.h" | 
| #include        "i286.h" | #include        "cpucore.h" | 
| #include        "memory.h" |  | 
 | #include        "np2ver.h" | #include        "np2ver.h" | 
 | #include        "pccore.h" | #include        "pccore.h" | 
 | #include        "iocore.h" | #include        "iocore.h" | 
| Line 22 | Line 22 | 
 | #include        "sound.h" | #include        "sound.h" | 
 | #include        "fmboard.h" | #include        "fmboard.h" | 
 | #include        "beep.h" | #include        "beep.h" | 
 |  | #include        "s98.h" | 
 | #include        "font.h" | #include        "font.h" | 
 | #include        "diskdrv.h" | #include        "diskdrv.h" | 
 | #include        "fddfile.h" | #include        "fddfile.h" | 
| Line 31 | Line 32 | 
 | #include        "timing.h" | #include        "timing.h" | 
 | //#include      "hostdrv.h" | //#include      "hostdrv.h" | 
 | #include        "debugsub.h" | #include        "debugsub.h" | 
 | #include        "dosio.h" |  | 
 |  |  | 
 |  |  | 
 | const char      np2version[] = NP2VER_CORE; | const char      np2version[] = NP2VER_CORE; | 
| Line 51 | Line 51 | 
 | 1, 0x82, | 1, 0x82, | 
 | 0, {0x17, 0x04, 0x1f}, {0x0c, 0x0c, 0x02, 0x10, 0x3f, 0x3f}, | 0, {0x17, 0x04, 0x1f}, {0x0c, 0x0c, 0x02, 0x10, 0x3f, 0x3f}, | 
 | 1, 80, 0, | 1, 80, 0, | 
| {"", ""}, ""}; | {"", ""}, "", ""}; | 
 |  |  | 
 | PCCORE  pc = {  PCBASECLOCK25, | PCCORE  pc = {  PCBASECLOCK25, | 
 | 4, | 4, | 
| Line 75  static const BYTE msw_default[8] = | Line 75  static const BYTE msw_default[8] = | 
 | BOOL    drawframe; | BOOL    drawframe; | 
 | UINT    drawcount = 0; | 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) { | static void setvsyncclock(void) { | 
 |  |  | 
 | UINT    vfp; | UINT    vfp; | 
| Line 184  static void sound_term(void) { | Line 202  static void sound_term(void) { | 
 |  |  | 
 | void pccore_init(void) { | void pccore_init(void) { | 
 |  |  | 
 |  | CPU_INITIALIZE(); | 
 |  |  | 
 | pal_initlcdtable(); | pal_initlcdtable(); | 
 | pal_makelcdpal(); | pal_makelcdpal(); | 
 | pal_makeskiptable(); | pal_makeskiptable(); | 
| Line 255  void pccore_reset(void) { | Line 275  void pccore_reset(void) { | 
 | ZeroMemory(mem + VRAM1_E, 0x08000); | ZeroMemory(mem + VRAM1_E, 0x08000); | 
 | ZeroMemory(mem + FONT_ADRS, 0x08000); | ZeroMemory(mem + FONT_ADRS, 0x08000); | 
 |  |  | 
| i286_reset(); | CPU_RESET(); | 
| CPUTYPE = 0; | CPU_TYPE = 0; | 
 | if (np2cfg.dipsw[2] & 0x80) { | if (np2cfg.dipsw[2] & 0x80) { | 
| CPUTYPE = CPUTYPE_V30; | CPU_TYPE = CPUTYPE_V30; | 
 | } | } | 
 |  |  | 
 | //メモリスイッチ | //メモリスイッチ | 
| Line 304  void pccore_reset(void) { | Line 324  void pccore_reset(void) { | 
 |  |  | 
 | if (np2cfg.ITF_WORK) { | if (np2cfg.ITF_WORK) { | 
 | CS_BASE = 0xf0000; | CS_BASE = 0xf0000; | 
| I286_CS = 0xf000; | CPU_CS = 0xf000; | 
| I286_IP = 0xfff0; | CPU_IP = 0xfff0; | 
 | } | } | 
 | else { | else { | 
 | for (i=0; i<8; i++) { | for (i=0; i<8; i++) { | 
 | mem[0xa3fe2 + i*4] = msw_default[i]; | mem[0xa3fe2 + i*4] = msw_default[i]; | 
 | } | } | 
 | CS_BASE = 0xfd800; | CS_BASE = 0xfd800; | 
| I286_CS = 0xfd80; | CPU_CS = 0xfd80; | 
| I286_IP = 0x0002; | CPU_IP = 0x0002; | 
 | } | } | 
| i286_resetprefetch(); | CPU_CLEARPREFETCH(); | 
 | sysmng_cpureset(); | sysmng_cpureset(); | 
 |  |  | 
 | soundmng_play(); | soundmng_play(); | 
| Line 470  void screendisp(NEVENTITEM item) { | Line 490  void screendisp(NEVENTITEM item) { | 
 |  |  | 
 | void screenvsync(NEVENTITEM item) { | void screenvsync(NEVENTITEM item) { | 
 |  |  | 
| vramop.tramwait = np2cfg.wait[1]; | MEMWAIT_TRAM = np2cfg.wait[1]; | 
| vramop.vramwait = np2cfg.wait[3]; | MEMWAIT_VRAM = np2cfg.wait[3]; | 
| vramop.grcgwait = np2cfg.wait[5]; | MEMWAIT_GRCG = np2cfg.wait[5]; | 
 | gdc_work(GDCWORK_MASTER); | gdc_work(GDCWORK_MASTER); | 
 | gdc.vsync = 0x20; | gdc.vsync = 0x20; | 
 | if (gdc.vsyncint) { | if (gdc.vsyncint) { | 
| Line 507  void pccore_exec(BOOL draw) { | Line 527  void pccore_exec(BOOL draw) { | 
 |  |  | 
 | gdc.vsync = 0; | gdc.vsync = 0; | 
 | screendispflag = 1; | screendispflag = 1; | 
| vramop.tramwait = np2cfg.wait[0]; | MEMWAIT_TRAM = np2cfg.wait[0]; | 
| vramop.vramwait = np2cfg.wait[2]; | MEMWAIT_VRAM = np2cfg.wait[2]; | 
| vramop.grcgwait = np2cfg.wait[4]; | MEMWAIT_GRCG = np2cfg.wait[4]; | 
 | nevent_set(NEVENT_FLAMES, pc.dispclock, screenvsync, NEVENT_RELATIVE); | nevent_set(NEVENT_FLAMES, pc.dispclock, screenvsync, NEVENT_RELATIVE); | 
 |  |  | 
 | //      nevent_get1stevent(); | //      nevent_get1stevent(); | 
| Line 519  void pccore_exec(BOOL draw) { | Line 539  void pccore_exec(BOOL draw) { | 
 | resetcnt++; | resetcnt++; | 
 | #endif | #endif | 
 | pic_irq(); | pic_irq(); | 
| if (cpuio.reset_req) { | if (CPU_RESETREQ) { | 
| cpuio.reset_req = 0; | CPU_RESETREQ = 0; | 
| I286_CS = 0xf000; | CPU_CS = 0xf000; | 
 | CS_BASE = 0xf0000; | CS_BASE = 0xf0000; | 
| I286_IP = 0xfff0; | CPU_IP = 0xfff0; | 
| #ifdef CPU386                                                                                   // defineを変えてね | #if defined(CPUCORE_IA32) | 
| I286_DX = 0x0300; | CPU_DX = 0x0300; | 
 | #endif | #endif | 
| i286_resetprefetch(); | CPU_CLEARPREFETCH(); | 
 | } | } | 
 |  |  | 
| #if 1 // ndef TRACE | #if 1 //ndef TRACE | 
| if (I286_REMCLOCK > 0) { | if (CPU_REMCLOCK > 0) { | 
| if (!(CPUTYPE & CPUTYPE_V30)) { | if (!(CPU_TYPE & CPUTYPE_V30)) { | 
| i286(); | CPU_EXEC(); | 
 | } | } | 
 | else { | else { | 
| v30(); | CPU_EXECV30(); | 
 | } | } | 
 | } | } | 
 | #else | #else | 
| while(I286_REMCLOCK > 0) { | while(CPU_REMCLOCK > 0) { | 
| TRACEOUT(("%.4x:%.4x", I286_CS, I286_IP)); | TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); | 
 | i286_step(); | i286_step(); | 
 | } | } | 
 | #endif | #endif | 
| Line 551  void pccore_exec(BOOL draw) { | Line 571  void pccore_exec(BOOL draw) { | 
 | mpu98ii_callback(); | mpu98ii_callback(); | 
 | diskdrv_callback(); | diskdrv_callback(); | 
 | calendar_inc(); | calendar_inc(); | 
 |  | S98_sync(); | 
 | sound_sync();                                                                                                   // happy! | sound_sync();                                                                                                   // happy! | 
 |  |  | 
 | #if defined(TRACE) | #if defined(TRACE) |