Diff for /xmil/io/sio.c between versions 1.2 and 1.4

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) {
   

Removed from v.1.2  
changed lines
  Added in v.1.4


RetroPC.NET-CVS <cvs@retropc.net>