|
|
| version 1.96, 2005/02/04 05:32:22 | version 1.104, 2005/03/24 01:42:46 |
|---|---|
| Line 141 static void pccore_set(void) { | Line 141 static void pccore_set(void) { |
| // HDDの接続 (I/Oの使用状態が変わるので.. | // HDDの接続 (I/Oの使用状態が変わるので.. |
| if (np2cfg.dipsw[1] & 0x20) { | if (np2cfg.dipsw[1] & 0x20) { |
| pccore.hddif |= PCHDD_IDE; | pccore.hddif |= PCHDD_IDE; |
| #if defined(SUPPORT_IDEIO) | |
| sxsi_setdevtype(0x02, SXSIDEV_CDROM); | |
| #endif | |
| } | |
| else { | |
| sxsi_setdevtype(0x02, SXSIDEV_NC); | |
| } | } |
| // 拡張メモリ | // 拡張メモリ |
| extsize = 0; | extsize = 0; |
| if (!(np2cfg.dipsw[2] & 0x80)) { | if (!(np2cfg.dipsw[2] & 0x80)) { |
| extsize = min(np2cfg.EXTMEM, 13); | extsize = np2cfg.EXTMEM; |
| #if defined(CPUCORE_IA32) | |
| extsize = min(extsize, 63); | |
| #else | |
| extsize = min(extsize, 13); | |
| #endif | |
| } | } |
| pccore.extmem = extsize; | pccore.extmem = extsize; |
| CopyMemory(pccore.dipsw, np2cfg.dipsw, 3); | CopyMemory(pccore.dipsw, np2cfg.dipsw, 3); |
| Line 260 void pccore_term(void) { | Line 271 void pccore_term(void) { |
| mpu98ii_destruct(); | mpu98ii_destruct(); |
| rs232c_destruct(); | rs232c_destruct(); |
| sxsi_trash(); | sxsi_alltrash(); |
| CPU_DEINITIALIZE(); | CPU_DEINITIALIZE(); |
| } | } |
| Line 320 void pccore_reset(void) { | Line 331 void pccore_reset(void) { |
| } | } |
| // HDDセット | // HDDセット |
| sxsi_open(); | diskdrv_hddbind(); |
| // SASI/IDEどっち? | |
| #if defined(SUPPORT_SASI) | #if defined(SUPPORT_SASI) |
| if (sxsi_issasi()) { | if (sxsi_issasi()) { |
| pccore.hddif &= ~PCHDD_IDE; | pccore.hddif &= ~PCHDD_IDE; |
| Line 374 void pccore_reset(void) { | Line 386 void pccore_reset(void) { |
| timing_reset(); | timing_reset(); |
| soundmng_play(); | soundmng_play(); |
| #if 0 && defined(SUPPORT_IDEIO) // Test! | |
| sxsi_devopen(0x02, OEMTEXT("e:\\pn\\pn.iso")); | |
| #endif | |
| } | } |
| static void drawscreen(void) { | static void drawscreen(void) { |
| Line 502 static void drawscreen(void) { | Line 518 static void drawscreen(void) { |
| } | } |
| } | } |
| if (screenupdate) { | if (screenupdate) { |
| screenupdate = scrndraw_draw((BYTE)(screenupdate & 2)); | screenupdate = scrndraw_draw((UINT8)(screenupdate & 2)); |
| drawcount++; | drawcount++; |
| } | } |
| } | } |
| Line 548 void screenvsync(NEVENTITEM item) { | Line 564 void screenvsync(NEVENTITEM item) { |
| // --------------------------------------------------------------------------- | // --------------------------------------------------------------------------- |
| // #define SINGLESTEPONLY | |
| // #define IPTRACE (1 << 12) | |
| #if defined(TRACE) && IPTRACE | |
| static UINT trpos = 0; | |
| static UINT32 treip[IPTRACE]; | |
| void iptrace_out(void) { | |
| FILEH fh; | |
| UINT s; | |
| UINT32 eip; | |
| char buf[32]; | |
| s = trpos; | |
| if (s > IPTRACE) { | |
| s -= IPTRACE; | |
| } | |
| else { | |
| s = 0; | |
| } | |
| fh = file_create_c("his.txt"); | |
| while(s < trpos) { | |
| eip = treip[s & (IPTRACE - 1)]; | |
| s++; | |
| SPRINTF(buf, "%.4x:%.4x\r\n", (eip >> 16), eip & 0xffff); | |
| file_write(fh, buf, strlen(buf)); | |
| } | |
| file_close(fh); | |
| } | |
| #endif | |
| #if defined(TRACE) | #if defined(TRACE) |
| static int resetcnt = 0; | static int resetcnt = 0; |
| static int execcnt = 0; | static int execcnt = 0; |
| int piccnt = 0; | int piccnt = 0; |
| int tr = 0; | |
| UINT cflg; | |
| #endif | #endif |
| Line 621 void pccore_exec(BOOL draw) { | Line 602 void pccore_exec(BOOL draw) { |
| CPU_RESETREQ = 0; | CPU_RESETREQ = 0; |
| CPU_SHUT(); | CPU_SHUT(); |
| } | } |
| #if !defined(SINGLESTEPONLY) | |
| if (CPU_REMCLOCK > 0) { | if (CPU_REMCLOCK > 0) { |
| if (!(CPU_TYPE & CPUTYPE_V30)) { | if (!(CPU_TYPE & CPUTYPE_V30)) { |
| CPU_EXEC(); | CPU_EXEC(); |
| Line 631 void pccore_exec(BOOL draw) { | Line 610 void pccore_exec(BOOL draw) { |
| CPU_EXECV30(); | CPU_EXECV30(); |
| } | } |
| } | } |
| #else | |
| while(CPU_REMCLOCK > 0) { | |
| #if 0 | |
| if (CPU_CS == 0x0000) { | |
| if (CPU_IP == 0x1191) { | |
| char buf[10]; | |
| int i; | |
| for (i=0; i<6; i++) { | |
| buf[i] = MEML_READ8(0x1000, CPU_BX + i); | |
| } | |
| buf[6] = '\0'; | |
| TRACEOUT(("load: %s", buf)); | |
| } | |
| if (CPU_IP == 0x1265) { | |
| TRACEOUT(("%.4x:%.4x addr=%.4x ret=%.4x", | |
| CPU_CS, CPU_IP, CPU_DX, | |
| MEML_READ16(CPU_SS, CPU_SP))); | |
| } | |
| } | |
| #endif | |
| #if 0 | |
| if (CPU_CS == 0x0080) { | |
| if (CPU_IP == 0x052A) { | |
| UINT i; | |
| UINT addr; | |
| char fname[9]; | |
| addr = MEML_READ16(CPU_SS, CPU_BP + 4); | |
| for (i=0; i<8; i++) { | |
| fname[i] = MEML_READ8(CPU_DS, addr + i); | |
| } | |
| fname[8] = 0; | |
| TRACEOUT(("%.4x:%.4x play... addr:%.4x %s", | |
| CPU_CS, CPU_IP, addr, fname)); | |
| } | |
| } | |
| #endif | |
| #if 0 | |
| if (CPU_CS == 0x800) { | |
| if (CPU_IP == 0x017A) { | |
| TRACEOUT(("%.4x:%.4x solve... DS=%.4x SIZE=%.4x KEY=%.4x", | |
| CPU_CS, CPU_IP, | |
| MEML_READ16(CPU_SS, CPU_BP - 0x06), | |
| CPU_DX, | |
| MEML_READ16(CPU_SS, CPU_BP - 0x08))); | |
| } | |
| } | |
| #endif | |
| #if 0 | |
| if (CPU_CS == 0x3d52) { | |
| if (CPU_IP == 0x4A57) { | |
| TRACEOUT(("%.4x:%.4x %.4x:%.4x/%.4x/%.4x", | |
| CPU_DX, CPU_BX, CPU_DS, | |
| MEML_READ16(CPU_SS, CPU_BP + 0x06), | |
| MEML_READ16(CPU_SS, CPU_BP + 0x08), | |
| MEML_READ16(CPU_SS, CPU_BP + 0x0a))); | |
| } | |
| if (CPU_IP == 0x4BF8) { | |
| debugsub_memorydump(); | |
| } | |
| #if 1 | |
| if (CPU_IP == 0x4B7A) { | |
| TRACEOUT(("datum = %x", CPU_AX)); | |
| } | |
| if (CPU_IP == 0x4B87) { | |
| TRACEOUT(("leng = %x", CPU_AX)); | |
| } | |
| if (CPU_IP == 0x4BD5) { | |
| TRACEOUT(("%.4x:%.4x <- %.2x[%.4x]", | |
| CPU_ES, CPU_BX, CPU_AL, CPU_DI)); | |
| } | |
| #endif | |
| } | |
| #endif | |
| #if 0 // DC | |
| if (CPU_CS == 0x1000) { | |
| if (CPU_IP == 0x5924) { | |
| TRACEOUT(("%.4x:%.4x -> %.4x:%.4x", CPU_CS, CPU_IP, | |
| MEML_READ16(CPU_DS, 0x6846), | |
| MEML_READ16(CPU_DS, 0x6848))); | |
| } | |
| } | |
| #endif | |
| #if 0 // 羅針盤 | |
| if (CPU_CS == 0x60) { | |
| if (CPU_IP == 0xADF9) { | |
| TRACEOUT(("%.4x:%.4x -> %.4x:%.4x:%.4x", CPU_CS, CPU_IP, CPU_BX, CPU_SI, CPU_AX)); | |
| } | |
| else if (CPU_IP == 0xC7E1) { | |
| TRACEOUT(("%.4x:%.4x -> %.4x:%.4x", CPU_CS, CPU_IP, CPU_ES, CPU_BX)); | |
| } | |
| } | |
| #endif | |
| #if 1 | |
| if (CPU_CS == 0x60) { | |
| if (CPU_IP == 0x8AC2) { | |
| UINT pos = CPU_SI + (CPU_AX * 6); | |
| TRACEOUT(("%.4x:%.4x -> %.4x:%.4x-%.4x:%.4x [%.2x %.2x %.2x %.2x %.2x %.2x]", CPU_CS, CPU_IP, CPU_SI, CPU_AX, CPU_DX, CPU_DI, | |
| MEML_READ8(CPU_DS, pos+0), | |
| MEML_READ8(CPU_DS, pos+1), | |
| MEML_READ8(CPU_DS, pos+2), | |
| MEML_READ8(CPU_DS, pos+3), | |
| MEML_READ8(CPU_DS, pos+4), | |
| MEML_READ8(CPU_DS, pos+5))); | |
| } | |
| } | |
| #endif | |
| #if IPTRACE | |
| treip[trpos & (IPTRACE - 1)] = (CPU_CS << 16) + CPU_IP; | |
| trpos++; | |
| #endif | |
| // TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); | |
| CPU_STEPEXEC(); | |
| } | |
| #endif | |
| nevent_progress(); | nevent_progress(); |
| } | } |
| artic_callback(); | artic_callback(); |