--- np2/bios/bios.c 2005/02/09 20:11:33 1.72 +++ np2/bios/bios.c 2005/05/20 13:59:46 1.76 @@ -85,6 +85,7 @@ static void bios_reinitbyswitch(void) { UINT8 prxcrt; UINT8 prxdupd; UINT8 biosflag; + UINT8 extmem; UINT8 boot; if (!(np2cfg.dipsw[2] & 0x80)) { @@ -132,7 +133,12 @@ static void bios_reinitbyswitch(void) { biosflag |= 0x40; } mem[MEMB_BIOS_FLAG1] = biosflag; - mem[MEMB_EXPMMSZ] = (UINT8)(pccore.extmem << 3); + extmem = pccore.extmem; + extmem = min(extmem, 14); + mem[MEMB_EXPMMSZ] = (UINT8)(extmem << 3); + if (pccore.extmem >= 15) { + mem[0x0594] = pccore.extmem - 15; + } mem[MEMB_CRT_RASTER] = 0x0f; // FDD initialize @@ -259,8 +265,16 @@ void bios_initialize(void) { } file_close(fh); } +#if defined(BIOS_SIMULATE) mem[0xf8e80] = 0x98; mem[0xf8e81] = 0x21; + mem[0xf8e82] = 0x1f; + mem[0xf8e83] = 0x20; // Model Number? + mem[0xf8e84] = 0x2c; + mem[0xf8e85] = 0xb0; + + // mem[0xf8eaf] = 0x21; // <- これって何だっけ? +#endif #endif #if defined(BIOS_SIMULATE) @@ -350,12 +364,12 @@ UINT MEMCALL biosfunc(UINT32 adrs) { // TRACEOUT(("biosfunc(%x)", adrs)); #if defined(CPUCORE_IA32) && defined(TRACE) if (CPU_STAT_PAGING) { - UINT32 pde = i286_memoryread_d(CPU_STAT_PDE_BASE); + UINT32 pde = MEMP_READ32(CPU_STAT_PDE_BASE); if (!(pde & CPU_PDE_PRESENT)) { TRACEOUT(("page0: PTE not present")); } else { - UINT32 pte = i286_memoryread_d(pde & CPU_PDE_BASEADDR_MASK); + UINT32 pte = MEMP_READ32(pde & CPU_PDE_BASEADDR_MASK); if (!(pte & CPU_PTE_PRESENT)) { TRACEOUT(("page0: not present")); } @@ -447,29 +461,7 @@ UINT MEMCALL biosfunc(UINT32 adrs) { case BIOS_BASE + BIOSOFST_WAIT: CPU_STI; -#if 1 return(bios0x1b_wait()); // ver0.78 -#else - if (fddmtr.busy) { - CPU_IP--; - CPU_REMCLOCK = -1; - } - else { - if (fdc.chgreg & 1) { - if (!(mem[MEMB_DISK_INTL] & (0x01 << fdc.us))) { - CPU_IP--; - CPU_REMCLOCK -= 1000; - } - } - else { - if (!(mem[MEMB_DISK_INTH] & (0x10 << fdc.us))) { - CPU_IP--; - CPU_REMCLOCK -= 1000; - } - } - } - return(1); -#endif case 0xfffe8: // ブートストラップロード CPU_REMCLOCK -= 2000;