| version 1.2, 2004/08/11 13:53:53 | version 1.4, 2008/06/02 20:07:31 | 
| Line 5 | Line 5 | 
 | #include        "iocore.h" | #include        "iocore.h" | 
 |  |  | 
 |  |  | 
| // sw ... 割り込み 1=かける 0=かけない | /* sw ... 割り込み 1=かける 0=かけない */ | 
 | static void fifo_w(SIOFIFO *sf, REG8 data, REG8 sw) { | static void fifo_w(SIOFIFO *sf, REG8 data, REG8 sw) { | 
 |  |  | 
 | UINT    off; | UINT    off; | 
| Line 93  static void mouse_read(SIOCH *ch) { | Line 93  static void mouse_read(SIOCH *ch) { | 
 |  |  | 
 | SINT16  mx; | SINT16  mx; | 
 | SINT16  my; | SINT16  my; | 
| BYTE    dat0, dat1, dat2; | UINT8   dat0, dat1, dat2; | 
 |  |  | 
 | dat0 = mousemng_getstat(&mx, &my, TRUE) & 3; | dat0 = mousemng_getstat(&mx, &my, TRUE) & 3; | 
 |  |  | 
| Line 106  static void mouse_read(SIOCH *ch) { | Line 106  static void mouse_read(SIOCH *ch) { | 
 | dat0 |= 0x20; | dat0 |= 0x20; | 
 | } | } | 
 | else { | else { | 
| dat1 = (char)mx; | dat1 = (UINT8)mx; | 
 | } | } | 
 | if (my > 127) { | if (my > 127) { | 
 | dat2 = 0x7f; | dat2 = 0x7f; | 
| Line 117  static void mouse_read(SIOCH *ch) { | Line 117  static void mouse_read(SIOCH *ch) { | 
 | dat0 |= 0x80; | dat0 |= 0x80; | 
 | } | } | 
 | else { | else { | 
| dat2 = (char)my; | dat2 = (UINT8)my; | 
 | } | } | 
 | if ((ch->wr[1] & 0x18) == 0x08) { | if ((ch->wr[1] & 0x18) == 0x08) { | 
| fifo_w(&ch->RxD, dat0, 1);              // 最初の1バイトだけ受信割り込み | fifo_w(&ch->RxD, dat0, 1);              /* 最初の1バイトだけ受信割り込み */ | 
 | fifo_w(&ch->RxD, dat1, 0); | fifo_w(&ch->RxD, dat1, 0); | 
 | fifo_w(&ch->RxD, dat2, 0); | fifo_w(&ch->RxD, dat2, 0); | 
 | } | } | 
 | else { | else { | 
| fifo_w(&ch->RxD, dat0, 1);              // 1バイト毎に割り込み | fifo_w(&ch->RxD, dat0, 1);              /* 1バイト毎に割り込み */ | 
 | fifo_w(&ch->RxD, dat1, 1); | fifo_w(&ch->RxD, dat1, 1); | 
 | fifo_w(&ch->RxD, dat2, 1); | fifo_w(&ch->RxD, dat2, 1); | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
| // ---- | /* ---- */ | 
 |  |  | 
 | void IOOUTCALL sio_o(UINT port, REG8 value) { | void IOOUTCALL sio_o(UINT port, REG8 value) { | 
 |  |  | 
 | switch(port) { | switch(port) { | 
| case 0x1f90:                            // CH-A データ | case 0x1f90:                            /* CH-A データ */ | 
 | if (sio.ch[SIOCH_A].wr[3] & 0x08) { | if (sio.ch[SIOCH_A].wr[3] & 0x08) { | 
 | fifo_w(&sio.ch[SIOCH_A].TxD, value, 0); | fifo_w(&sio.ch[SIOCH_A].TxD, value, 0); | 
 | } | } | 
 | break; | break; | 
 |  |  | 
| case 0x1f91:                            // CH-A コントロール | case 0x1f91:                            /* CH-A コントロール */ | 
 | sio.ch[SIOCH_A].wr[sio.ch[SIOCH_A].num] = value; | sio.ch[SIOCH_A].wr[sio.ch[SIOCH_A].num] = value; | 
 | if (sio.ch[SIOCH_A].num) { | if (sio.ch[SIOCH_A].num) { | 
 | sio.ch[SIOCH_A].num = 0; | sio.ch[SIOCH_A].num = 0; | 
| Line 153  void IOOUTCALL sio_o(UINT port, REG8 val | Line 153  void IOOUTCALL sio_o(UINT port, REG8 val | 
 | } | } | 
 | break; | break; | 
 | #if 0 | #if 0 | 
| case 0x1f92:                            // CH-B データ   (Mouse) | case 0x1f92:                            /* CH-B データ   (Mouse) */ | 
 | if (CH_B.wr[3] & 0x08) { | if (CH_B.wr[3] & 0x08) { | 
 | fifo_w(&CH_B.T_D, value, 0); | fifo_w(&CH_B.T_D, value, 0); | 
 | } | } | 
 | break; | break; | 
 | #endif | #endif | 
| case 0x1f93:                            // CH-B コントロール (Mouse) | case 0x1f93:                            /* CH-B コントロール (Mouse) */ | 
 | if (sio.ch[SIOCH_B].num == 5) { | if (sio.ch[SIOCH_B].num == 5) { | 
| // RTS(WR5:BIT1)を0から1へ変化させると | /* RTS(WR5:BIT1)を0から1へ変化させると */ | 
| // マウスから3バイトのデータが送られてくる | /* マウスから3バイトのデータが送られてくる */ | 
 | if (!(sio.ch[SIOCH_B].wr[5] & 2) && (value & 2)) { | if (!(sio.ch[SIOCH_B].wr[5] & 2) && (value & 2)) { | 
 | mouse_read(sio.ch + SIOCH_B); | mouse_read(sio.ch + SIOCH_B); | 
 | } | } | 
| Line 184  REG8 IOINPCALL sio_i(UINT port) { | Line 184  REG8 IOINPCALL sio_i(UINT port) { | 
 |  |  | 
 | ret = 0; | ret = 0; | 
 | switch(port) { | switch(port) { | 
| case 0x1f90:                            // CH-A データ | case 0x1f90:                            /* CH-A データ */ | 
 | if (sio.ch[SIOCH_A].RxD.cnt) { | if (sio.ch[SIOCH_A].RxD.cnt) { | 
 | return(fifo_r(&sio.ch[SIOCH_A].RxD)); | return(fifo_r(&sio.ch[SIOCH_A].RxD)); | 
 | } | } | 
 | break; | break; | 
 |  |  | 
| case 0x1f91:                            // CH-A コントロール | case 0x1f91:                            /* CH-A コントロール */ | 
 | if (sio.ch[SIOCH_A].num == 0) { | if (sio.ch[SIOCH_A].num == 0) { | 
 | if (sio.ch[SIOCH_A].RxD.cnt != 0) { | if (sio.ch[SIOCH_A].RxD.cnt != 0) { | 
 | ret |= 1; | ret |= 1; | 
| Line 201  REG8 IOINPCALL sio_i(UINT port) { | Line 201  REG8 IOINPCALL sio_i(UINT port) { | 
 | } | } | 
 | break; | break; | 
 |  |  | 
| case 0x1f92:                            // CH-B データ   (Mouse) | case 0x1f92:                            /* CH-B データ   (Mouse) */ | 
 | if (sio.ch[SIOCH_B].RxD.cnt) { | if (sio.ch[SIOCH_B].RxD.cnt) { | 
 | return(fifo_r(&sio.ch[SIOCH_B].RxD)); | return(fifo_r(&sio.ch[SIOCH_B].RxD)); | 
 | } | } | 
 | break; | break; | 
 |  |  | 
| case 0x1f93:                            // CH-B コントロール (Mouse) | case 0x1f93:                            /* CH-B コントロール (Mouse) */ | 
| if (sio.ch[SIOCH_B].num == 0) {         // ?? | if (sio.ch[SIOCH_B].num == 0) {         /* ?? */ | 
 | if (sio.ch[SIOCH_B].RxD.cnt != 0) { | if (sio.ch[SIOCH_B].RxD.cnt != 0) { | 
 | ret |= 1; | ret |= 1; | 
 | } | } | 
| Line 222  REG8 IOINPCALL sio_i(UINT port) { | Line 222  REG8 IOINPCALL sio_i(UINT port) { | 
 | } | } | 
 |  |  | 
 |  |  | 
| // ---- | /* reset */ | 
 |  |  | 
 | void sio_reset(void) { | void sio_reset(void) { | 
 |  |  |