--- np2/bios/bios.c 2004/07/22 11:31:32 1.69 +++ np2/bios/bios.c 2007/11/11 13:54:14 1.77 @@ -56,7 +56,7 @@ const IODATA *pterm; gdc_biosreset(); p = iodata; - pterm = iodata + (sizeof(iodata) / sizeof(IODATA)); + pterm = iodata + NELEMENTS(iodata); while(p < pterm) { iocore_out8(p->port, p->data); p++; @@ -82,12 +82,13 @@ static void bios_memclear(void) { static void bios_reinitbyswitch(void) { - BYTE prxcrt; - BYTE prxdupd; - BYTE biosflag; + UINT8 prxcrt; + UINT8 prxdupd; + UINT8 biosflag; + UINT8 extmem; UINT8 boot; - if (!(np2cfg.dipsw[2] & 0x80)) { + if (!(pccore.dipsw[2] & 0x80)) { #if defined(CPUCORE_IA32) mem[MEMB_SYS_TYPE] = 0x03; // 80386〜 #else @@ -100,13 +101,13 @@ static void bios_reinitbyswitch(void) { mem[MEMB_BIOS_FLAG0] = 0x01; prxcrt = 0x08; - if (!(np2cfg.dipsw[0] & 0x01)) { // dipsw1-1 on + if (!(pccore.dipsw[0] & 0x01)) { // dipsw1-1 on prxcrt |= 0x40; } if (gdc.display & (1 << GDCDISP_ANALOG)) { prxcrt |= 0x04; // color16 } - if (!(np2cfg.dipsw[0] & 0x80)) { // dipsw1-8 on + if (!(pccore.dipsw[0] & 0x80)) { // dipsw1-8 on prxcrt |= 0x01; } if (grcg.chip) { @@ -118,7 +119,7 @@ static void bios_reinitbyswitch(void) { if (grcg.chip >= 3) { prxdupd |= 0x40; } - if (!(np2cfg.dipsw[1] & 0x80)) { // dipsw2-8 on + if (!(pccore.dipsw[1] & 0x80)) { // dipsw2-8 on prxdupd |= 0x20; } mem[MEMB_PRXDUPD] = prxdupd; @@ -128,11 +129,16 @@ static void bios_reinitbyswitch(void) { biosflag |= 0x80; } biosflag |= mem[0xa3fea] & 7; - if (np2cfg.dipsw[2] & 0x80) { + if (pccore.dipsw[2] & 0x80) { biosflag |= 0x40; } mem[MEMB_BIOS_FLAG1] = biosflag; - mem[MEMB_EXPMMSZ] = (BYTE)(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 @@ -151,9 +157,10 @@ static void bios_reinitbyswitch(void) { mem[MEMB_F2DD_MODE] = 0xff; #if defined(SUPPORT_CRT31KHZ) - mem[MEMB_CRT_BIOS] = 0x80; + mem[MEMB_CRT_BIOS] |= 0x80; #endif #if defined(SUPPORT_PC9821) + mem[MEMB_CRT_BIOS] |= 0x04; // 05/02/03 mem[0x45c] = 0x40; #endif @@ -186,8 +193,8 @@ static void bios_screeninit(void) { REG8 al; al = 4; - al += (np2cfg.dipsw[1] & 0x04) >> 1; - al += (np2cfg.dipsw[1] & 0x08) >> 3; + al += (pccore.dipsw[1] & 0x04) >> 1; + al += (pccore.dipsw[1] & 0x08) >> 3; bios0x18_0a(al); } @@ -210,14 +217,14 @@ static void setbiosseed(UINT8 *ptr, UINT void bios_initialize(void) { BOOL biosrom; - char path[MAX_PATH]; + OEMCHAR path[MAX_PATH]; FILEH fh; UINT i; UINT32 tmp; UINT pos; biosrom = FALSE; - getbiospath(path, str_biosrom, sizeof(path)); + getbiospath(path, str_biosrom, NELEMENTS(path)); fh = file_open_rb(path); if (fh != FILEH_INVALID) { biosrom = (file_read(fh, mem + 0x0e8000, 0x18000) == 0x18000); @@ -248,7 +255,7 @@ void bios_initialize(void) { } #if defined(SUPPORT_PC9821) - getbiospath(path, "bios9821.rom", sizeof(path)); + getbiospath(path, OEMTEXT("bios9821.rom"), sizeof(path)); fh = file_open_rb(path); if (fh != FILEH_INVALID) { if (file_read(fh, mem + 0x0d8000, 0x2000) == 0x2000) { @@ -258,6 +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) @@ -347,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")); } @@ -444,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;