|
|
| version 1.4, 2004/01/22 01:10:03 | version 1.7, 2005/02/07 14:46:07 |
|---|---|
| Line 19 static const UINT rs_speed[] = { | Line 19 static const UINT rs_speed[] = { |
| void bios0x19(void) { | void bios0x19(void) { |
| BYTE speed; | UINT8 speed; |
| BYTE mode; | UINT8 mode; |
| RSBIOS rsb; | RSBIOS rsb; |
| UINT16 doff; | UINT16 doff; |
| UINT16 cnt; | UINT16 cnt; |
| UINT16 dseg; | UINT16 dseg; |
| BYTE flag; | UINT8 flag; |
| if (CPU_AH < 2) { | if (CPU_AH < 2) { |
| // 通信速度… | // 通信速度… |
| Line 58 void bios0x19(void) { | Line 58 void bios0x19(void) { |
| iocore_out8(0x32, CPU_CL); // cmd | iocore_out8(0x32, CPU_CL); // cmd |
| #endif | #endif |
| iocore_out8(0x77, 0xb6); | iocore_out8(0x77, 0xb6); |
| iocore_out8(0x75, (BYTE)rs_speed[speed]); | iocore_out8(0x75, (UINT8)rs_speed[speed]); |
| iocore_out8(0x75, (BYTE)(rs_speed[speed] >> 8)); | iocore_out8(0x75, (UINT8)(rs_speed[speed] >> 8)); |
| ZeroMemory(&rsb, sizeof(rsb)); | ZeroMemory(&rsb, sizeof(rsb)); |
| rsb.FLAG = (CPU_AH << 4); | rsb.FLAG = (CPU_AH << 4); |
| Line 95 void bios0x19(void) { | Line 95 void bios0x19(void) { |
| // ポインタ〜 | // ポインタ〜 |
| SETBIOSMEM16(MEMW_RS_CH0_OFST, CPU_DI); | SETBIOSMEM16(MEMW_RS_CH0_OFST, CPU_DI); |
| SETBIOSMEM16(MEMW_RS_CH0_SEG, CPU_ES); | SETBIOSMEM16(MEMW_RS_CH0_SEG, CPU_ES); |
| i286_memstr_write(CPU_ES, CPU_DI, &rsb, sizeof(rsb)); | MEML_WRITESTR(CPU_ES, CPU_DI, &rsb, sizeof(rsb)); |
| CPU_AH = 0; | CPU_AH = 0; |
| } | } |
| Line 106 void bios0x19(void) { | Line 106 void bios0x19(void) { |
| CPU_AH = 1; | CPU_AH = 1; |
| return; | return; |
| } | } |
| flag = i286_membyte_read(dseg, doff + R_FLAG); | flag = MEML_READ8(dseg, doff + R_FLAG); |
| if (!(flag & RFLAG_INIT)) { | if (!(flag & RFLAG_INIT)) { |
| CPU_AH = 1; | CPU_AH = 1; |
| return; | return; |
| } | } |
| switch(CPU_AH) { | switch(CPU_AH) { |
| case 0x02: | case 0x02: |
| CPU_CX = i286_memword_read(dseg, doff + R_CNT); | CPU_CX = MEML_READ16(dseg, doff + R_CNT); |
| break; | break; |
| case 0x03: | case 0x03: |
| Line 121 void bios0x19(void) { | Line 121 void bios0x19(void) { |
| break; | break; |
| case 0x04: | case 0x04: |
| cnt = i286_memword_read(dseg, doff + R_CNT); | cnt = MEML_READ16(dseg, doff + R_CNT); |
| if (cnt) { | if (cnt) { |
| UINT16 pos; | UINT16 pos; |
| // データ引き取り | // データ引き取り |
| pos = i286_memword_read(dseg, doff + R_GETP); | pos = MEML_READ16(dseg, doff + R_GETP); |
| CPU_CX = i286_memword_read(dseg, pos); | CPU_CX = MEML_READ16(dseg, pos); |
| // 次のポインタをストア | // 次のポインタをストア |
| pos += 2; | 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_GETP, pos); | MEML_WRITE16(dseg, doff + R_GETP, pos); |
| // カウンタをデクリメント | // カウンタをデクリメント |
| cnt--; | cnt--; |
| i286_memword_write(dseg, doff + R_CNT, cnt); | MEML_WRITE16(dseg, doff + R_CNT, cnt); |
| // XONを送信? | // XONを送信? |
| if ((flag & RFLAG_XOFF) && | if ((flag & RFLAG_XOFF) && |
| (cnt < i286_memword_read(dseg, doff + R_XOFF))) { | (cnt < MEML_READ16(dseg, doff + R_XOFF))) { |
| iocore_out8(0x30, RSCODE_XON); | iocore_out8(0x30, RSCODE_XON); |
| flag &= ~RFLAG_XOFF; | flag &= ~RFLAG_XOFF; |
| } | } |
| flag &= ~RFLAG_BOVF; | flag &= ~RFLAG_BOVF; |
| CPU_AH = 0; | CPU_AH = 0; |
| i286_membyte_write(dseg, doff + R_FLAG, flag); | MEML_WRITE8(dseg, doff + R_FLAG, flag); |
| return; | return; |
| } | } |
| else { | else { |
| Line 160 void bios0x19(void) { | Line 160 void bios0x19(void) { |
| iocore_out8(0x32, CPU_AL); | iocore_out8(0x32, CPU_AL); |
| if (CPU_AL & RCMD_IR) { | if (CPU_AL & RCMD_IR) { |
| flag &= ~RFLAG_INIT; | flag &= ~RFLAG_INIT; |
| i286_membyte_write(dseg, doff + R_FLAG, flag); | MEML_WRITE8(dseg, doff + R_FLAG, flag); |
| sysport.c &= ~1; | sysport.c &= ~1; |
| pic.pi[0].imr |= PIC_RS232C; | pic.pi[0].imr |= PIC_RS232C; |
| } | } |
| Line 172 void bios0x19(void) { | Line 172 void bios0x19(void) { |
| sysport.c |= 1; | sysport.c |= 1; |
| pic.pi[0].imr &= ~PIC_RS232C; | pic.pi[0].imr &= ~PIC_RS232C; |
| } | } |
| i286_membyte_write(dseg, doff + R_CMD, CPU_AL); | MEML_WRITE8(dseg, doff + R_CMD, CPU_AL); |
| break; | break; |
| case 0x06: | case 0x06: |
| CPU_CH = iocore_inp8(0x32); | CPU_CH = iocore_inp8(0x32); |
| Line 181 void bios0x19(void) { | Line 181 void bios0x19(void) { |
| } | } |
| CPU_AH = 0; | CPU_AH = 0; |
| if (flag & RFLAG_BOVF) { | if (flag & RFLAG_BOVF) { |
| i286_membyte_write(dseg, doff + R_FLAG, | MEML_WRITE8(dseg, doff + R_FLAG, (UINT8)(flag & (~RFLAG_BOVF))); |
| (BYTE)(flag & (~RFLAG_BOVF))); | |
| CPU_AH = 2; | CPU_AH = 2; |
| } | } |
| } | } |