|
|
| version 1.5, 2004/01/30 01:56:01 | version 1.6, 2004/01/30 14:33:27 |
|---|---|
| Line 9 | Line 9 |
| #include "pc9861k.h" | #include "pc9861k.h" |
| UINT pc9861en; | _PC9861K pc9861k; |
| _PC9861CH pc9861ch1; | |
| _PC9861CH pc9861ch2; | |
| COMMNG cm_pc9861ch1; | COMMNG cm_pc9861ch1; |
| COMMNG cm_pc9861ch2; | COMMNG cm_pc9861ch2; |
| Line 57 static void pc9861k_callback(COMMNG cm, | Line 54 static void pc9861k_callback(COMMNG cm, |
| void pc9861ch1cb(NEVENTITEM item) { | void pc9861ch1cb(NEVENTITEM item) { |
| if (item->flag & NEVENT_SETEVENT) { | if (item->flag & NEVENT_SETEVENT) { |
| nevent_set(NEVENT_PC9861CH1, pc9861ch1.clk, pc9861ch1cb, | nevent_set(NEVENT_PC9861CH1, pc9861k.ch1.clk, pc9861ch1cb, |
| NEVENT_RELATIVE); | NEVENT_RELATIVE); |
| } | } |
| pc9861k_callback(cm_pc9861ch1, &pc9861ch1); | pc9861k_callback(cm_pc9861ch1, &pc9861k.ch1); |
| } | } |
| void pc9861ch2cb(NEVENTITEM item) { | void pc9861ch2cb(NEVENTITEM item) { |
| if (item->flag & NEVENT_SETEVENT) { | if (item->flag & NEVENT_SETEVENT) { |
| nevent_set(NEVENT_PC9861CH2, pc9861ch2.clk, pc9861ch2cb, | nevent_set(NEVENT_PC9861CH2, pc9861k.ch2.clk, pc9861ch2cb, |
| NEVENT_RELATIVE); | NEVENT_RELATIVE); |
| } | } |
| pc9861k_callback(cm_pc9861ch2, &pc9861ch2); | pc9861k_callback(cm_pc9861ch2, &pc9861k.ch2); |
| } | } |
| static UINT32 pc9861k_getspeed(REG8 dip) { | static UINT32 pc9861k_getspeed(REG8 dip) { |
| Line 100 static void pc9861ch1_open(void) { | Line 97 static void pc9861ch1_open(void) { |
| cm_pc9861ch1 = commng_create(COMCREATE_PC9861K1); | cm_pc9861ch1 = commng_create(COMCREATE_PC9861K1); |
| pc9861ch1.dip = np2cfg.pc9861sw[0]; | pc9861k.ch1.dip = np2cfg.pc9861sw[0]; |
| pc9861ch1.speed = pc9861k_getspeed(pc9861ch1.dip); | pc9861k.ch1.speed = pc9861k_getspeed(pc9861k.ch1.dip); |
| pc9861ch1.vect = ((np2cfg.pc9861sw[1] >> 1) & 1) | | pc9861k.ch1.vect = ((np2cfg.pc9861sw[1] >> 1) & 1) | |
| ((np2cfg.pc9861sw[1] << 1) & 2); | ((np2cfg.pc9861sw[1] << 1) & 2); |
| pc9861ch1.irq = ch1_irq[pc9861ch1.vect]; | pc9861k.ch1.irq = ch1_irq[pc9861k.ch1.vect]; |
| pc9861_makeclk(&pc9861ch1, 10*2); | pc9861_makeclk(&pc9861k.ch1, 10*2); |
| nevent_set(NEVENT_PC9861CH1, pc9861ch1.clk, pc9861ch1cb, NEVENT_ABSOLUTE); | nevent_set(NEVENT_PC9861CH1, pc9861k.ch1.clk, |
| pc9861ch1cb, NEVENT_ABSOLUTE); | |
| } | } |
| static void pc9861ch2_open(void) { | static void pc9861ch2_open(void) { |
| cm_pc9861ch2 = commng_create(COMCREATE_PC9861K2); | cm_pc9861ch2 = commng_create(COMCREATE_PC9861K2); |
| pc9861ch2.dip = np2cfg.pc9861sw[2]; | pc9861k.ch2.dip = np2cfg.pc9861sw[2]; |
| pc9861ch2.speed = pc9861k_getspeed(pc9861ch2.dip); | pc9861k.ch2.speed = pc9861k_getspeed(pc9861k.ch2.dip); |
| pc9861ch2.vect = ((np2cfg.pc9861sw[1] >> 3) & 1) | | pc9861k.ch2.vect = ((np2cfg.pc9861sw[1] >> 3) & 1) | |
| ((np2cfg.pc9861sw[1] >> 1) & 2); | ((np2cfg.pc9861sw[1] >> 1) & 2); |
| pc9861ch2.irq = ch1_irq[pc9861ch2.vect]; | pc9861k.ch2.irq = ch1_irq[pc9861k.ch2.vect]; |
| pc9861_makeclk(&pc9861ch2, 10*2); | pc9861_makeclk(&pc9861k.ch2, 10*2); |
| nevent_set(NEVENT_PC9861CH2, pc9861ch2.clk, pc9861ch2cb, NEVENT_ABSOLUTE); | nevent_set(NEVENT_PC9861CH2, pc9861k.ch2.clk, |
| pc9861ch2cb, NEVENT_ABSOLUTE); | |
| } | } |
| Line 211 static void IOOUTCALL pc9861k_ob0(UINT p | Line 210 static void IOOUTCALL pc9861k_ob0(UINT p |
| if (cm_pc9861ch1 == NULL) { | if (cm_pc9861ch1 == NULL) { |
| pc9861ch1_open(); | pc9861ch1_open(); |
| } | } |
| pc9861ch1.signal = dat; | pc9861k.ch1.signal = dat; |
| (void)port; | (void)port; |
| } | } |
| Line 220 static void IOOUTCALL pc9861k_ob2(UINT p | Line 219 static void IOOUTCALL pc9861k_ob2(UINT p |
| if (cm_pc9861ch2 == NULL) { | if (cm_pc9861ch2 == NULL) { |
| pc9861ch2_open(); | pc9861ch2_open(); |
| } | } |
| pc9861ch2.signal = dat; | pc9861k.ch2.signal = dat; |
| (void)port; | (void)port; |
| } | } |
| Line 230 static REG8 IOINPCALL pc9861k_ib0(UINT p | Line 229 static REG8 IOINPCALL pc9861k_ib0(UINT p |
| pc9861ch1_open(); | pc9861ch1_open(); |
| } | } |
| (void)port; | (void)port; |
| return(cm_pc9861ch1->getstat(cm_pc9861ch1) | pc9861ch1.vect); | return(cm_pc9861ch1->getstat(cm_pc9861ch1) | pc9861k.ch1.vect); |
| } | } |
| static REG8 IOINPCALL pc9861k_ib2(UINT port) { | static REG8 IOINPCALL pc9861k_ib2(UINT port) { |
| Line 239 static REG8 IOINPCALL pc9861k_ib2(UINT p | Line 238 static REG8 IOINPCALL pc9861k_ib2(UINT p |
| pc9861ch2_open(); | pc9861ch2_open(); |
| } | } |
| (void)port; | (void)port; |
| return(cm_pc9861ch2->getstat(cm_pc9861ch2) | pc9861ch2.vect); | return(cm_pc9861ch2->getstat(cm_pc9861ch2) | pc9861k.ch2.vect); |
| } | } |
| Line 248 static void IOOUTCALL pc9861k_ob1(UINT p | Line 247 static void IOOUTCALL pc9861k_ob1(UINT p |
| if (cm_pc9861ch1 == NULL) { | if (cm_pc9861ch1 == NULL) { |
| pc9861ch1_open(); | pc9861ch1_open(); |
| } | } |
| pc9861data_w8(cm_pc9861ch1, &pc9861ch1, port, dat); | pc9861data_w8(cm_pc9861ch1, &pc9861k.ch1, port, dat); |
| } | } |
| static REG8 IOINPCALL pc9861k_ib1(UINT port) { | static REG8 IOINPCALL pc9861k_ib1(UINT port) { |
| Line 256 static REG8 IOINPCALL pc9861k_ib1(UINT p | Line 255 static REG8 IOINPCALL pc9861k_ib1(UINT p |
| if (cm_pc9861ch2 == NULL) { | if (cm_pc9861ch2 == NULL) { |
| pc9861ch1_open(); | pc9861ch1_open(); |
| } | } |
| return(pc9861data_r8(cm_pc9861ch1, &pc9861ch1, port)); | return(pc9861data_r8(cm_pc9861ch1, &pc9861k.ch1, port)); |
| } | } |
| Line 265 static void IOOUTCALL pc9861k_ob9(UINT p | Line 264 static void IOOUTCALL pc9861k_ob9(UINT p |
| if (cm_pc9861ch2 == NULL) { | if (cm_pc9861ch2 == NULL) { |
| pc9861ch2_open(); | pc9861ch2_open(); |
| } | } |
| pc9861data_w8(cm_pc9861ch2, &pc9861ch2, port, dat); | pc9861data_w8(cm_pc9861ch2, &pc9861k.ch2, port, dat); |
| } | } |
| static REG8 IOINPCALL pc9861k_ib9(UINT port) { | static REG8 IOINPCALL pc9861k_ib9(UINT port) { |
| Line 273 static REG8 IOINPCALL pc9861k_ib9(UINT p | Line 272 static REG8 IOINPCALL pc9861k_ib9(UINT p |
| if (cm_pc9861ch2 == NULL) { | if (cm_pc9861ch2 == NULL) { |
| pc9861ch2_open(); | pc9861ch2_open(); |
| } | } |
| return(pc9861data_r8(cm_pc9861ch2, &pc9861ch2, port)); | return(pc9861data_r8(cm_pc9861ch2, &pc9861k.ch2, port)); |
| } | } |
| Line 300 void pc9861k_reset(void) { | Line 299 void pc9861k_reset(void) { |
| commng_destroy(cm_pc9861ch2); | commng_destroy(cm_pc9861ch2); |
| cm_pc9861ch2 = NULL; | cm_pc9861ch2 = NULL; |
| pc9861ch1 = pc9861def; | pc9861k.ch1 = pc9861def; |
| pc9861ch2 = pc9861def; | pc9861k.ch2 = pc9861def; |
| pc9861en = np2cfg.pc9861enable & 1; | pc9861k.en = np2cfg.pc9861enable & 1; |
| } | } |
| void pc9861k_bind(void) { | void pc9861k_bind(void) { |
| if (pc9861en) { | pc9861k_deinitialize(); |
| if (pc9861k.en) { | |
| iocore_attachout(0xb0, pc9861k_ob0); | iocore_attachout(0xb0, pc9861k_ob0); |
| iocore_attachout(0xb2, pc9861k_ob2); | iocore_attachout(0xb2, pc9861k_ob2); |
| iocore_attachinp(0xb0, pc9861k_ib0); | iocore_attachinp(0xb0, pc9861k_ib0); |