Diff for /np2/bios/bios0c.c between versions 1.1 and 1.7

version 1.1, 2003/10/16 17:58:19 version 1.7, 2005/05/20 13:59:46
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "i286.h"  #include        "cpucore.h"
 #include        "memory.h"  
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "bios.h"  #include        "bios.h"
Line 12  void bios0x0c(void) { Line 11  void bios0x0c(void) {
   
         UINT16  doff;          UINT16  doff;
         UINT16  dseg;          UINT16  dseg;
         BYTE    flag;          REG8    flag;
         BYTE    data;          UINT8   data;
         BYTE    stat;          UINT8   stat;
         UINT16  pos;          REG16   pos;
         UINT16  cnt;          REG16   cnt;
   
         doff = GETBIOSMEM16(MEMW_RS_CH0_OFST);          doff = GETBIOSMEM16(MEMW_RS_CH0_OFST);
         dseg = GETBIOSMEM16(MEMW_RS_CH0_SEG);          dseg = GETBIOSMEM16(MEMW_RS_CH0_SEG);
   
         flag = i286_membyte_read(dseg, doff + R_FLAG);          flag = MEMR_READ8(dseg, doff + R_FLAG);
         data = iocore_inp8(0x30);                                                       // データ引き取り          data = iocore_inp8(0x30);                                                       // データ引き取り
         stat = iocore_inp8(0x32) & 0xfc;                                        // ステータス          stat = iocore_inp8(0x32) & 0xfc;                                        // ステータス
         stat |= (iocore_inp8(0x33) & 3);          stat |= (iocore_inp8(0x33) & 3);
Line 62  void bios0x0c(void) { Line 61  void bios0x0c(void) {
                         }                          }
                 }                  }
                 // データ投棄                  // データ投棄
                 pos = i286_memword_read(dseg, doff + R_PUTP);                  pos = MEMR_READ16(dseg, doff + R_PUTP);
                 i286_memword_write(dseg, pos, (UINT16)((data << 8) | stat));                  MEMR_WRITE16(dseg, pos, (UINT16)((data << 8) | stat));
   
                 // 次のポインタをストア                  // 次のポインタをストア
                 pos += 2;                  pos = (UINT16)(pos + 2);
                 if (pos >= i286_memword_read(dseg, doff + R_TAILP)) {                  if (pos >= MEMR_READ16(dseg, doff + R_TAILP)) {
                         pos = i286_memword_read(dseg, doff + R_HEADP);                          pos = MEMR_READ16(dseg, doff + R_HEADP);
                 }                  }
                 i286_memword_write(dseg, doff + R_PUTP, pos);                  MEMR_WRITE16(dseg, doff + R_PUTP, pos);
   
                 // カウンタのインクリメント                  // カウンタのインクリメント
                 cnt = i286_memword_read(dseg, doff + R_CNT) + 1;                  cnt = (UINT16)(MEMR_READ16(dseg, doff + R_CNT) + 1);
                 i286_memword_write(dseg, doff + R_CNT, cnt);                  MEMR_WRITE16(dseg, doff + R_CNT, cnt);
   
                 // オーバーフローを見張る                  // オーバーフローを見張る
                 if (pos == i286_memword_read(dseg, doff + R_GETP)) {                  if (pos == MEMR_READ16(dseg, doff + R_GETP)) {
                         flag |= RFLAG_BFULL;                          flag |= RFLAG_BFULL;
                 }                  }
   
                 // XOFFを送信?                  // XOFFを送信?
                 if (((flag & (RFLAG_XON | RFLAG_XOFF)) == RFLAG_XON) &&                  if (((flag & (RFLAG_XON | RFLAG_XOFF)) == RFLAG_XON) &&
                         (cnt >= i286_memword_read(dseg, doff + R_XON))) {                          (cnt >= MEMR_READ16(dseg, doff + R_XON))) {
                         iocore_out8(0x30, RSCODE_XOFF);                          iocore_out8(0x30, RSCODE_XOFF);
                         flag |= RFLAG_XOFF;                          flag |= RFLAG_XOFF;
                 }                  }
         }          }
         else {          else {
                 i286_membyte_write(dseg, doff + R_CMD,                  MEMR_WRITE8(dseg, doff + R_CMD,
                                 (BYTE)(i286_membyte_read(dseg, doff + R_CMD) | RFLAG_BOVF));                                                  (REG8)(MEMR_READ8(dseg, doff + R_CMD) | RFLAG_BOVF));
         }          }
         i286_membyte_write(dseg, doff + R_INT,          MEMR_WRITE8(dseg, doff + R_INT,
                                 (BYTE)(i286_membyte_read(dseg, doff + R_INT) | RINT_INT));                                                  (REG8)(MEMR_READ8(dseg, doff + R_INT) | RINT_INT));
         i286_membyte_write(dseg, doff + R_FLAG, flag);          MEMR_WRITE8(dseg, doff + R_FLAG, flag);
         iocore_out8(0x00, 0x20);          iocore_out8(0x00, 0x20);
 }  }
   

Removed from v.1.1  
changed lines
  Added in v.1.7


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