--- np2/cbus/pc9861k.c 2003/10/21 11:22:05 1.2 +++ np2/cbus/pc9861k.c 2007/11/03 00:00:19 1.8 @@ -1,4 +1,7 @@ #include "compiler.h" + +#if defined(SUPPORT_PC9861K) + #include "commng.h" #include "pccore.h" #include "iocore.h" @@ -6,10 +9,7 @@ #include "pc9861k.h" - UINT pc9861en; - _PC9861CH pc9861ch1; - _PC9861CH pc9861ch2; - + _PC9861K pc9861k; COMMNG cm_pc9861ch1; COMMNG cm_pc9861ch2; @@ -17,8 +17,8 @@ const UINT32 pc9861k_speed[11] = {75, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 76800}; -static const BYTE ch1_irq[4] = {IRQ_INT0, IRQ_INT1, IRQ_INT2, IRQ_INT3}; -static const BYTE ch2_irq[4] = {IRQ_INT0, IRQ_INT41, IRQ_INT5, IRQ_INT6}; +static const UINT8 ch1_irq[4] = {IRQ_INT0, IRQ_INT1, IRQ_INT2, IRQ_INT3}; +static const UINT8 ch2_irq[4] = {IRQ_INT0, IRQ_INT41, IRQ_INT5, IRQ_INT6}; static const _PC9861CH pc9861def = {0x05, 0xff, 7, 1, 0, 0, 2400, NEVENT_MAXCLOCK, 0, 0, 0}; @@ -38,7 +38,7 @@ static void pc9861k_callback(COMMNG cm, } } else { - m->result &= (BYTE)~2; + m->result &= ~2; } if (m->signal & 4) { if (m->send) { @@ -54,22 +54,22 @@ static void pc9861k_callback(COMMNG cm, void pc9861ch1cb(NEVENTITEM item) { if (item->flag & NEVENT_SETEVENT) { - nevent_set(NEVENT_PC9861CH1, pc9861ch1.clk, pc9861ch1cb, + nevent_set(NEVENT_PC9861CH1, pc9861k.ch1.clk, pc9861ch1cb, NEVENT_RELATIVE); } - pc9861k_callback(cm_pc9861ch1, &pc9861ch1); + pc9861k_callback(cm_pc9861ch1, &pc9861k.ch1); } void pc9861ch2cb(NEVENTITEM item) { if (item->flag & NEVENT_SETEVENT) { - nevent_set(NEVENT_PC9861CH2, pc9861ch2.clk, pc9861ch2cb, + nevent_set(NEVENT_PC9861CH2, pc9861k.ch2.clk, pc9861ch2cb, NEVENT_RELATIVE); } - pc9861k_callback(cm_pc9861ch2, &pc9861ch2); + pc9861k_callback(cm_pc9861ch2, &pc9861k.ch2); } -static UINT32 pc9861k_getspeed(BYTE dip) { +static UINT32 pc9861k_getspeed(REG8 dip) { UINT speed; @@ -82,54 +82,56 @@ static UINT32 pc9861k_getspeed(BYTE dip) speed = 0; } } - if (speed > ((sizeof(pc9861k_speed) / sizeof(UINT32)) - 1)) { - speed = (sizeof(pc9861k_speed) / sizeof(UINT32)) - 1; + if (speed > (NELEMENTS(pc9861k_speed) - 1)) { + speed = NELEMENTS(pc9861k_speed) - 1; } return(pc9861k_speed[speed]); } static void pc9861_makeclk(PC9861CH m, UINT32 mul2) { - m->clk = pc.realclock * mul2 / ((m->speed) * 2); + m->clk = pccore.realclock * mul2 / ((m->speed) * 2); } static void pc9861ch1_open(void) { cm_pc9861ch1 = commng_create(COMCREATE_PC9861K1); - pc9861ch1.dip = np2cfg.pc9861sw[0]; - pc9861ch1.speed = pc9861k_getspeed(pc9861ch1.dip); - pc9861ch1.vect = ((np2cfg.pc9861sw[1] >> 1) & 1) | + pc9861k.ch1.dip = np2cfg.pc9861sw[0]; + pc9861k.ch1.speed = pc9861k_getspeed(pc9861k.ch1.dip); + pc9861k.ch1.vect = ((np2cfg.pc9861sw[1] >> 1) & 1) | ((np2cfg.pc9861sw[1] << 1) & 2); - pc9861ch1.irq = ch1_irq[pc9861ch1.vect]; - pc9861_makeclk(&pc9861ch1, 10*2); - nevent_set(NEVENT_PC9861CH1, pc9861ch1.clk, pc9861ch1cb, NEVENT_ABSOLUTE); + pc9861k.ch1.irq = ch1_irq[pc9861k.ch1.vect]; + pc9861_makeclk(&pc9861k.ch1, 10*2); + nevent_set(NEVENT_PC9861CH1, pc9861k.ch1.clk, + pc9861ch1cb, NEVENT_ABSOLUTE); } static void pc9861ch2_open(void) { cm_pc9861ch2 = commng_create(COMCREATE_PC9861K2); - pc9861ch2.dip = np2cfg.pc9861sw[2]; - pc9861ch2.speed = pc9861k_getspeed(pc9861ch2.dip); - pc9861ch2.vect = ((np2cfg.pc9861sw[1] >> 3) & 1) | + pc9861k.ch2.dip = np2cfg.pc9861sw[2]; + pc9861k.ch2.speed = pc9861k_getspeed(pc9861k.ch2.dip); + pc9861k.ch2.vect = ((np2cfg.pc9861sw[1] >> 3) & 1) | ((np2cfg.pc9861sw[1] >> 1) & 2); - pc9861ch2.irq = ch1_irq[pc9861ch2.vect]; - pc9861_makeclk(&pc9861ch2, 10*2); - nevent_set(NEVENT_PC9861CH2, pc9861ch2.clk, pc9861ch2cb, NEVENT_ABSOLUTE); + pc9861k.ch2.irq = ch1_irq[pc9861k.ch2.vect]; + pc9861_makeclk(&pc9861k.ch2, 10*2); + nevent_set(NEVENT_PC9861CH2, pc9861k.ch2.clk, + pc9861ch2cb, NEVENT_ABSOLUTE); } // ------------------------------------------------------------------------- static void IOOUTCALL pc9861data_w8(COMMNG cm, PC9861CH m, - UINT port, BYTE value) { + UINT port, REG8 value) { UINT32 mul2; switch(port & 0x3) { case 0x01: - cm->write(cm, value); + cm->write(cm, (UINT8)value); if (m->signal & 4) { m->send = 0; pic_setirq(m->irq); @@ -187,7 +189,7 @@ static void IOOUTCALL pc9861data_w8(COMM } } -static BYTE IOINPCALL pc9861data_r8(COMMNG cm, PC9861CH m, UINT port) { +static REG8 IOINPCALL pc9861data_r8(COMMNG cm, PC9861CH m, UINT port) { switch(port & 0x3) { case 0x01: @@ -203,86 +205,86 @@ static BYTE IOINPCALL pc9861data_r8(COMM } -static void IOOUTCALL pc9861k_ob0(UINT port, BYTE dat) { +static void IOOUTCALL pc9861k_ob0(UINT port, REG8 dat) { if (cm_pc9861ch1 == NULL) { pc9861ch1_open(); } - pc9861ch1.signal = dat; + pc9861k.ch1.signal = dat; (void)port; } -static void IOOUTCALL pc9861k_ob2(UINT port, BYTE dat) { +static void IOOUTCALL pc9861k_ob2(UINT port, REG8 dat) { if (cm_pc9861ch2 == NULL) { pc9861ch2_open(); } - pc9861ch2.signal = dat; + pc9861k.ch2.signal = dat; (void)port; } -static BYTE IOINPCALL pc9861k_ib0(UINT port) { +static REG8 IOINPCALL pc9861k_ib0(UINT port) { if (cm_pc9861ch1 == NULL) { pc9861ch1_open(); } (void)port; - return(cm_pc9861ch1->getstat(cm_pc9861ch1) | pc9861ch1.vect); + return(cm_pc9861ch1->getstat(cm_pc9861ch1) | pc9861k.ch1.vect); } -static BYTE IOINPCALL pc9861k_ib2(UINT port) { +static REG8 IOINPCALL pc9861k_ib2(UINT port) { if (cm_pc9861ch2 == NULL) { pc9861ch2_open(); } (void)port; - return(cm_pc9861ch2->getstat(cm_pc9861ch2) | pc9861ch2.vect); + return(cm_pc9861ch2->getstat(cm_pc9861ch2) | pc9861k.ch2.vect); } -static void IOOUTCALL pc9861k_ob1(UINT port, BYTE dat) { +static void IOOUTCALL pc9861k_ob1(UINT port, REG8 dat) { if (cm_pc9861ch1 == NULL) { pc9861ch1_open(); } - pc9861data_w8(cm_pc9861ch1, &pc9861ch1, port, dat); + pc9861data_w8(cm_pc9861ch1, &pc9861k.ch1, port, dat); } -static BYTE IOINPCALL pc9861k_ib1(UINT port) { +static REG8 IOINPCALL pc9861k_ib1(UINT port) { if (cm_pc9861ch2 == NULL) { pc9861ch1_open(); } - return(pc9861data_r8(cm_pc9861ch1, &pc9861ch1, port)); + return(pc9861data_r8(cm_pc9861ch1, &pc9861k.ch1, port)); } -static void IOOUTCALL pc9861k_ob9(UINT port, BYTE dat) { +static void IOOUTCALL pc9861k_ob9(UINT port, REG8 dat) { if (cm_pc9861ch2 == NULL) { pc9861ch2_open(); } - pc9861data_w8(cm_pc9861ch2, &pc9861ch2, port, dat); + pc9861data_w8(cm_pc9861ch2, &pc9861k.ch2, port, dat); } -static BYTE IOINPCALL pc9861k_ib9(UINT port) { +static REG8 IOINPCALL pc9861k_ib9(UINT port) { if (cm_pc9861ch2 == NULL) { pc9861ch2_open(); } - return(pc9861data_r8(cm_pc9861ch2, &pc9861ch2, port)); + return(pc9861data_r8(cm_pc9861ch2, &pc9861k.ch2, port)); } // ---- I/F -void pc9861k_construct(void) { +void pc9861k_initialize(void) { cm_pc9861ch1 = NULL; cm_pc9861ch2 = NULL; } -void pc9861k_destruct(void) { +void pc9861k_deinitialize(void) { commng_destroy(cm_pc9861ch1); cm_pc9861ch1 = NULL; @@ -290,21 +292,22 @@ void pc9861k_destruct(void) { cm_pc9861ch2 = NULL; } -void pc9861k_reset(void) { +void pc9861k_reset(const NP2CFG *pConfig) { commng_destroy(cm_pc9861ch1); cm_pc9861ch1 = NULL; commng_destroy(cm_pc9861ch2); cm_pc9861ch2 = NULL; - pc9861ch1 = pc9861def; - pc9861ch2 = pc9861def; - pc9861en = np2cfg.pc9861enable & 1; + pc9861k.ch1 = pc9861def; + pc9861k.ch2 = pc9861def; + pc9861k.en = pConfig->pc9861enable & 1; } void pc9861k_bind(void) { - if (pc9861en) { + pc9861k_deinitialize(); + if (pc9861k.en) { iocore_attachout(0xb0, pc9861k_ob0); iocore_attachout(0xb2, pc9861k_ob2); iocore_attachinp(0xb0, pc9861k_ib0); @@ -332,3 +335,5 @@ void pc9861k_midipanic(void) { } } +#endif +