--- np2/pccore.c 2004/01/23 16:57:20 1.51 +++ np2/pccore.c 2004/02/07 08:01:28 1.62 @@ -42,7 +42,7 @@ NP2CFG np2cfg = { 0, 1, 0, 32, 0, 0, 0x40, 0, 0, 0, 0, - {0x3e, 0x63, 0x7a}, 0, + {0x3e, 0x63, 0x7b}, 0, 0, 0, {1, 1, 6, 1, 8, 1}, "VX", PCBASECLOCK25, 4, @@ -140,6 +140,7 @@ static void pccore_set(void) { UINT8 model; UINT32 multiple; + UINT8 extsize; ZeroMemory(&pccore, sizeof(pccore)); model = PCMODEL_VX; @@ -175,16 +176,17 @@ static void pccore_set(void) { pccore.keyboardclock = pccore.realclock / 1920; pccore.midiclock = pccore.realclock / 3125; - // 拡張メモリ - if (!(np2cfg.dipsw[2] & 0x80)) { - pccore.extmem = np2cfg.EXTMEM; - } - // HDDの接続 (I/Oの使用状態が変わるので.. if (np2cfg.dipsw[1] & 0x20) { pccore.hddif |= PCHDD_IDE; } - pccore.hddif |= PCHDD_SCSI; + + // 拡張メモリ + extsize = 0; + if (!(np2cfg.dipsw[2] & 0x80)) { + extsize = min(np2cfg.EXTMEM, 13); + } + pccore.extmem = extsize; // サウンドボードの接続 pccore.sound = np2cfg.SOUND_SW; @@ -260,9 +262,9 @@ void pccore_init(void) { sound_init(); - mpu98ii_construct(); rs232c_construct(); - pc9861k_construct(); + mpu98ii_construct(); + pc9861k_initialize(); iocore_create(); @@ -284,13 +286,11 @@ void pccore_term(void) { fdd_eject(2); fdd_eject(3); - extmemmng_clear(); - iocore_destroy(); - pc9861k_destruct(); - rs232c_destruct(); + pc9861k_deinitialize(); mpu98ii_destruct(); + rs232c_destruct(); sxsi_trash(); @@ -326,32 +326,45 @@ void pccore_reset(void) { sound_init(); } - ZeroMemory(mem, 0x10fff0); // ver0.28 + ZeroMemory(mem, 0x110000); // ver0.28 ZeroMemory(mem + VRAM1_B, 0x18000); ZeroMemory(mem + VRAM1_E, 0x08000); ZeroMemory(mem + FONT_ADRS, 0x08000); - CPU_RESET(); - CPU_TYPE = 0; - if (np2cfg.dipsw[2] & 0x80) { - CPU_TYPE = CPUTYPE_V30; - } - //メモリスイッチ for (i=0; i<8; i++) { mem[0xa3fe2 + i*4] = np2cfg.memsw[i]; } - fddfile_reset2dmode(); - bios0x18_16(0x20, 0xe1); - pccore_set(); nevent_init(); - CPU_SETEXTMEM(pccore.extmem); + + CPU_RESET(); + CPU_SETEXTSIZE((UINT32)pccore.extmem); + + CPU_TYPE = 0; + if (np2cfg.dipsw[2] & 0x80) { + CPU_TYPE = CPUTYPE_V30; + } if (pccore.model & PCMODEL_EPSON) { // RAM ctrl CPU_RAM_D000 = 0xffff; } + // HDDセット + sxsi_open(); +#if defined(SUPPORT_SASI) + if (sxsi_issasi()) { + pccore.hddif &= ~PCHDD_IDE; + pccore.hddif |= PCHDD_SASI; + TRACEOUT(("supported SASI")); + } +#endif +#if defined(SUPPORT_SCSI) + if (sxsi_isscsi()) { + pccore.hddif |= PCHDD_SCSI; + TRACEOUT(("supported SCSI")); + } +#endif sound_changeclock(); beep_changeclock(); @@ -360,6 +373,8 @@ void pccore_reset(void) { wavemix_bind(); #endif + fddfile_reset2dmode(); + bios0x18_16(0x20, 0xe1); iocore_reset(); // サウンドでpicを呼ぶので… cbuscore_reset(); @@ -378,7 +393,6 @@ void pccore_reset(void) { pal_change(1); bios_init(); - sxsi_open(); if (np2cfg.ITF_WORK) { CS_BASE = 0xf0000; @@ -667,11 +681,18 @@ void pccore_exec(BOOL draw) { treip[trpos & (IPTRACE - 1)] = (CPU_CS << 16) + CPU_IP; trpos++; #endif -#if 0 - if (tr) { - if ((CPU_CS == 0xf760) || (CPU_CS == 0xf990)) { - TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); - } +#if 1 + if ((CPU_CS == 0xf800) && (CPU_IP == 0x0B5B)) { + TRACEOUT(("%.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x", + mem[0x9000], mem[0x9001], + mem[0x9002], mem[0x9003], + mem[0x9004], mem[0x9005], + mem[0x9006], mem[0x9007], + mem[0x9008], mem[0x9009])); + } + if ((CPU_CS == 0xf800) && (CPU_IP == 0x15FF)) { + TRACEOUT(("DX = %.4x / DS:DI = %.4x:%.4x [%.2x]", + CPU_DX, CPU_DS, CPU_DI, mem[0xa3fe0])); } #endif #if 0 @@ -697,6 +718,13 @@ void pccore_exec(BOOL draw) { TRACEOUT(("%.4x:%.4x", CPU_CS, CPU_IP)); } #endif +#if 1 // VX LIO + if (CPU_CS == 0xf990) { + if (CPU_IP == 0x07BE) { + TRACEOUT(("%d,%d - %d,%d", CPU_BP, CPU_DX, CPU_SI, CPU_DI)); + } + } +#endif i286x_step(); // i286c_step(); }