--- np2/cbus/board14.c 2003/11/12 20:02:54 1.2 +++ np2/cbus/board14.c 2005/02/09 20:11:33 1.7 @@ -13,103 +13,34 @@ // ---- 8253C-2 -static UINT16 pit3_latch(void) { +UINT board14_pitcount(void) { SINT32 clock; clock = nevent_getremain(NEVENT_MUSICGEN); if (clock >= 0) { - clock /= pc.multiple; + clock /= pccore.multiple; clock /= 8; - if (pc.baseclock == PCBASECLOCK25) { + if (!(pccore.cpumode & CPUMODE_8MHZ)) { clock = clock * 13 / 16; } - return((UINT16)clock); + return(clock); } return(0); } -static void pit3_setflag(BYTE value) { - - pit.flag[3] = 0; - if (value & 0x30) { - pit.mode[3] = value; - } - else { - pit.mode[3] &= ~0x30; - pit.latch[3] = pit3_latch(); - } -} - -static BOOL pit3_setcount(BYTE value) { - - switch(pit.mode[3] & 0x30) { - case 0x10: // access low - pit.value[3] = value; - break; - - case 0x20: // access high - pit.value[3] = value << 8; - break; - - case 0x30: // access word - if (!(pit.flag[3] & 2)) { - pit.value[3] &= 0xff00; - pit.value[3] += value; - pit.flag[3] ^= 2; - return(TRUE); - } - pit.value[3] &= 0x00ff; - pit.value[3] += value << 8; - pit.flag[3] ^= 2; - break; - } - return(FALSE); -} - -static BYTE pit3_getcount(void) { - - BYTE ret; - UINT16 w; - - if (!(pit.mode[3] & 0x30)) { - w = pit.latch[3]; - } - else { - w = pit3_latch(); - } - switch(pit.mode[3] & 0x30) { - case 0x10: // access low - return((BYTE)w); - - case 0x20: // access high - return((BYTE)(w >> 8)); - } - // access word - if (!(pit.flag[3] & 1)) { - ret = (BYTE)w; - } - else { - ret = (BYTE)(w >> 8); - } - pit.flag[3] ^= 1; - return(ret); -} - // ---- intr -static void setmusicgenevent(BOOL absolute) { +static void setmusicgenevent(UINT32 cnt, BOOL absolute) { - SINT32 cnt; - - if (pit.value[3] > 4) { // 根拠なし - cnt = pc.multiple * pit.value[3]; + if (cnt > 4) { // 根拠なし + cnt *= pccore.multiple; } else { - cnt = pc.multiple << 16; + cnt = pccore.multiple << 16; } - if (pc.baseclock == PCBASECLOCK25) { + if (!(pccore.cpumode & CPUMODE_8MHZ)) { cnt = cnt * 16 / 13; // cnt * 2457600 / 1996800 } cnt *= 8; @@ -118,10 +49,13 @@ static void setmusicgenevent(BOOL absolu void musicgenint(NEVENTITEM item) { + PITCH pitch; + if (item->flag & NEVENT_SETEVENT) { - if ((pit.mode[3] & 0x0c) == 0x04) { + pitch = pit.ch + 3; + if ((pitch->ctrl & 0x0c) == 0x04) { // レートジェネレータ - setmusicgenevent(NEVENT_RELATIVE); + setmusicgenevent(pitch->value, NEVENT_RELATIVE); } } pic_setirq(0x0c); @@ -131,19 +65,19 @@ void musicgenint(NEVENTITEM item) { // ---- I/O -static void IOOUTCALL musicgen_o088(UINT port, BYTE dat) { +static void IOOUTCALL musicgen_o088(UINT port, REG8 dat) { musicgen.porta = dat; (void)port; } -static void IOOUTCALL musicgen_o08a(UINT port, BYTE dat) { +static void IOOUTCALL musicgen_o08a(UINT port, REG8 dat) { musicgen.portb = dat; (void)port; } -static void IOOUTCALL musicgen_o08c(UINT port, BYTE dat) { +static void IOOUTCALL musicgen_o08c(UINT port, REG8 dat) { if (dat & 0x80) { if (!(musicgen.portc & 0x80)) { @@ -154,7 +88,7 @@ static void IOOUTCALL musicgen_o08c(UINT musicgen.sync = 0; sound_sync(); musicgen.key[musicgen.ch] = dat; - tms3631_setkey(&tms3631, (BYTE)musicgen.ch, dat); + tms3631_setkey(&tms3631, (REG8)musicgen.ch, dat); } else if ((!(dat & 0x40)) && (musicgen.portc & 0x40)) { musicgen.sync = 1; @@ -165,7 +99,7 @@ static void IOOUTCALL musicgen_o08c(UINT (void)port; } -static void IOOUTCALL musicgen_o188(UINT port, BYTE dat) { +static void IOOUTCALL musicgen_o188(UINT port, REG8 dat) { sound_sync(); musicgen.mask = dat; @@ -173,57 +107,60 @@ static void IOOUTCALL musicgen_o188(UINT (void)port; } -static void IOOUTCALL musicgen_o18c(UINT port, BYTE dat) { +static void IOOUTCALL musicgen_o18c(UINT port, REG8 dat) { + + PITCH pitch; - if (!pit3_setcount(dat)) { - setmusicgenevent(NEVENT_ABSOLUTE); + pitch = pit.ch + 3; + if (!pit_setcount(pitch, dat)) { + setmusicgenevent(pitch->value, NEVENT_ABSOLUTE); } (void)port; } -static void IOOUTCALL musicgen_o18e(UINT port, BYTE dat) { +static void IOOUTCALL musicgen_o18e(UINT port, REG8 dat) { - pit3_setflag(dat); + pit_setflag(pit.ch + 3, dat); (void)port; } -static BYTE IOINPCALL musicgen_i088(UINT port) { +static REG8 IOINPCALL musicgen_i088(UINT port) { (void)port; return(musicgen.porta); } -static BYTE IOINPCALL musicgen_i08a(UINT port) { +static REG8 IOINPCALL musicgen_i08a(UINT port) { (void)port; return(musicgen.portb); } -static BYTE IOINPCALL musicgen_i08c(UINT port) { +static REG8 IOINPCALL musicgen_i08c(UINT port) { (void)port; return(musicgen.portc); } -static BYTE IOINPCALL musicgen_i08e(UINT port) { +static REG8 IOINPCALL musicgen_i08e(UINT port) { (void)port; return(0x08); } -static BYTE IOINPCALL musicgen_i188(UINT port) { +static REG8 IOINPCALL musicgen_i188(UINT port) { (void)port; return(musicgen.mask); } -static BYTE IOINPCALL musicgen_i18c(UINT port) { +static REG8 IOINPCALL musicgen_i18c(UINT port) { (void)port; - return(pit3_getcount()); + return(pit_getstat(pit.ch + 3)); } -static BYTE IOINPCALL musicgen_i18e(UINT port) { +static REG8 IOINPCALL musicgen_i18e(UINT port) { (void)port; #if 1 @@ -252,7 +189,7 @@ static const IOINP musicgen_i1[4] = { void board14_reset(void) { ZeroMemory(&musicgen, sizeof(musicgen)); - soundrom_load(0xcc000, "14"); + soundrom_load(0xcc000, OEMTEXT("14")); } void board14_bind(void) { @@ -264,10 +201,10 @@ void board14_bind(void) { void board14_allkeymake(void) { - int i; + REG8 i; for (i=0; i<8; i++) { - tms3631_setkey(&tms3631, (BYTE)i, musicgen.key[i]); + tms3631_setkey(&tms3631, i, musicgen.key[i]); } }