--- np2/io/iocore.c 2004/01/25 07:53:09 1.7 +++ np2/io/iocore.c 2004/03/19 03:36:52 1.14 @@ -5,6 +5,7 @@ #include "cbuscore.h" #include "sound.h" #include "fmboard.h" +#include "ideio.h" #include "cs4231io.h" #include "iocore16.tbl" @@ -21,8 +22,9 @@ _GDC gdc; _GDCS gdcs; _GRCG grcg; - _KEYB keyb; + _KEYBRD keybrd; _MOUSEIF mouseif; + _NECIO necio; _NMIIO nmiio; _NP2SYSP np2sysp; _PIC pic; @@ -49,6 +51,7 @@ typedef struct { typedef struct { IOFUNC base[256]; + UINT busclock; LISTARRAY iotbl; } _IOCORE, *IOCORE; @@ -432,6 +435,9 @@ static const IOCBFN resetfn[] = { #if !defined(CPUCORE_IA32) emsio_reset, #endif +#if defined(SUPPORT_PC9821) + pcidev_reset, +#endif }; static const IOCBFN bindfn[] = { @@ -451,6 +457,9 @@ static const IOCBFN bindfn[] = { #if !defined(CPUCORE_IA32) emsio_bind, #endif +#if defined(SUPPORT_PC9821) + pcidev_bind, +#endif }; @@ -469,15 +478,16 @@ void iocore_reset(void) { void iocore_bind(void) { + iocore.busclock = pccore.multiple; iocore_cb(bindfn, sizeof(bindfn)/sizeof(IOCBFN)); } -#if !defined(TRACE) - void IOOUTCALL iocore_out8(UINT port, REG8 dat) { IOFUNC iof; +// VERBOSE(("iocore_out8(%x, %x)", port, dat)); + CPU_REMCLOCK -= iocore.busclock; iof = iocore.base[(port >> 8) & 0xff]; iof->ioout[port & 0xff](port, dat); } @@ -486,43 +496,23 @@ REG8 IOINPCALL iocore_inp8(UINT port) { IOFUNC iof; +// VERBOSE(("iocore_inp8(%x)", port)); + CPU_REMCLOCK -= iocore.busclock; iof = iocore.base[(port >> 8) & 0xff]; return(iof->ioinp[port & 0xff](port)); } -#else - -void IOOUTCALL iocore_out8(UINT port, REG8 dat) { - - IOFUNC iof; - - if (dat & (~0xff)) { - TRACEOUT(("error: iocore_out8 - %x %x", port, dat)); - } - iof = iocore.base[(port >> 8) & 0xff]; - iof->ioout[port & 0xff](port, dat); -} - -REG8 IOINPCALL iocore_inp8(UINT port) { +void IOOUTCALL iocore_out16(UINT port, REG16 dat) { IOFUNC iof; - REG8 ret; - - iof = iocore.base[(port >> 8) & 0xff]; - ret = iof->ioinp[port & 0xff](port); - if (ret & (~0xff)) { - TRACEOUT(("error: iocore_inp8 - %x %x", port, ret)); + CPU_REMCLOCK -= iocore.busclock; +#if defined(SUPPORT_IDEIO) + if (port == 0x0640) { + ideio_w16(port, dat); + return; } - return(ret); -} - #endif - -void IOOUTCALL iocore_out16(UINT port, REG16 dat) { - - IOFUNC iof; - if ((port & 0xfff1) == 0x04a0) { egc_w16(port, dat); return; @@ -553,6 +543,12 @@ REG16 IOINPCALL iocore_inp16(UINT port) IOFUNC iof; REG8 ret; + CPU_REMCLOCK -= iocore.busclock; +#if defined(SUPPORT_IDEIO) + if (port == 0x0640) { + return(ideio_r16(port)); + } +#endif if ((port & 0xfffc) == 0x005c) { return(artic_r16(port)); } @@ -586,14 +582,25 @@ REG16 IOINPCALL iocore_inp16(UINT port) void IOOUTCALL iocore_out32(UINT port, UINT32 dat) { +#if defined(SUPPORT_PC9821) + if ((port & 0xfffb) == 0x0cf8) { + pcidev_w32(port, dat); + return; + } +#endif iocore_out16(port, (UINT16)dat); iocore_out16(port+2, (UINT16)(dat >> 16)); } UINT32 IOINPCALL iocore_inp32(UINT port) { - REG16 ret; + UINT32 ret; +#if defined(SUPPORT_PC9821) + if ((port & 0xfffb) == 0x0cf8) { + return(pcidev_r32(port)); + } +#endif ret = iocore_inp16(port); return(ret + (iocore_inp16(port+2) << 16)); }