|
|
| version 1.4, 2003/12/12 01:04:39 | version 1.5, 2004/03/07 23:04:50 |
|---|---|
| Line 20 void bios0x0c(void) { | Line 20 void bios0x0c(void) { |
| 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 = MEML_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 61 void bios0x0c(void) { | Line 61 void bios0x0c(void) { |
| } | } |
| } | } |
| // データ投棄 | // データ投棄 |
| pos = i286_memword_read(dseg, doff + R_PUTP); | pos = MEML_READ16(dseg, doff + R_PUTP); |
| i286_memword_write(dseg, pos, (UINT16)((data << 8) | stat)); | MEML_WRITE16(dseg, pos, (UINT16)((data << 8) | stat)); |
| // 次のポインタをストア | // 次のポインタをストア |
| pos = (UINT16)(pos + 2); | pos = (UINT16)(pos + 2); |
| if (pos >= i286_memword_read(dseg, doff + R_TAILP)) { | if (pos >= MEML_READ16(dseg, doff + R_TAILP)) { |
| pos = i286_memword_read(dseg, doff + R_HEADP); | pos = MEML_READ16(dseg, doff + R_HEADP); |
| } | } |
| i286_memword_write(dseg, doff + R_PUTP, pos); | MEML_WRITE16(dseg, doff + R_PUTP, pos); |
| // カウンタのインクリメント | // カウンタのインクリメント |
| cnt = (UINT16)(i286_memword_read(dseg, doff + R_CNT) + 1); | cnt = (UINT16)(MEML_READ16(dseg, doff + R_CNT) + 1); |
| i286_memword_write(dseg, doff + R_CNT, cnt); | MEML_WRITE16(dseg, doff + R_CNT, cnt); |
| // オーバーフローを見張る | // オーバーフローを見張る |
| if (pos == i286_memword_read(dseg, doff + R_GETP)) { | if (pos == MEML_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 >= MEML_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, | MEML_WRITE8(dseg, doff + R_CMD, |
| (REG8)(i286_membyte_read(dseg, doff + R_CMD) | RFLAG_BOVF)); | (REG8)(MEML_READ8(dseg, doff + R_CMD) | RFLAG_BOVF)); |
| } | } |
| i286_membyte_write(dseg, doff + R_INT, | MEML_WRITE8(dseg, doff + R_INT, |
| (REG8)(i286_membyte_read(dseg, doff + R_INT) | RINT_INT)); | (REG8)(MEML_READ8(dseg, doff + R_INT) | RINT_INT)); |
| i286_membyte_write(dseg, doff + R_FLAG, flag); | MEML_WRITE8(dseg, doff + R_FLAG, flag); |
| iocore_out8(0x00, 0x20); | iocore_out8(0x00, 0x20); |
| } | } |