|
|
| version 1.21, 2003/12/03 07:59:57 | version 1.22, 2003/12/08 00:55:31 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "i286.h" | #include "cpucore.h" |
| #include "i286c.h" | #include "i286c.h" |
| #include "memory.h" | #include "memory.h" |
| #include "pccore.h" | #include "pccore.h" |
| Line 623 I286FN _segprefix_es(void) { // 26: | Line 623 I286FN _segprefix_es(void) { // 26: |
| SS_FIX = ES_BASE; | SS_FIX = ES_BASE; |
| DS_FIX = ES_BASE; | DS_FIX = ES_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op[op](); | i286op[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 769 I286FN _segprefix_cs(void) { // 2e: | Line 769 I286FN _segprefix_cs(void) { // 2e: |
| SS_FIX = CS_BASE; | SS_FIX = CS_BASE; |
| DS_FIX = CS_BASE; | DS_FIX = CS_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op[op](); | i286op[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 910 I286FN _segprefix_ss(void) { // 36: | Line 910 I286FN _segprefix_ss(void) { // 36: |
| SS_FIX = SS_BASE; | SS_FIX = SS_BASE; |
| DS_FIX = SS_BASE; | DS_FIX = SS_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op[op](); | i286op[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 1027 I286FN _segprefix_ds(void) { // 3e: | Line 1027 I286FN _segprefix_ds(void) { // 3e: |
| SS_FIX = DS_BASE; | SS_FIX = DS_BASE; |
| DS_FIX = DS_BASE; | DS_FIX = DS_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op[op](); | i286op[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 1820 I286FN _popf(void) { // 9D: popf | Line 1820 I286FN _popf(void) { // 9D: popf |
| I286_TRAP = ((flag & 0x300) == 0x300); | I286_TRAP = ((flag & 0x300) == 0x300); |
| I286_WORKCLOCK(5); | I286_WORKCLOCK(5); |
| #if defined(INTR_FAST) | #if defined(INTR_FAST) |
| if ((flag & I_FLAG) && (PICEXISTINTR)) { | if ((I286_TRAP) || ((flag & I_FLAG) && (PICEXISTINTR))) { |
| I286IRQCHECKTERM | I286IRQCHECKTERM |
| } | } |
| #else | #else |
| Line 2282 I286FN _iret(void) { // CF: iret | Line 2282 I286FN _iret(void) { // CF: iret |
| CS_BASE = I286_CS << 4; | CS_BASE = I286_CS << 4; |
| I286_WORKCLOCK(31); | I286_WORKCLOCK(31); |
| #if defined(INTR_FAST) | #if defined(INTR_FAST) |
| if ((flag & I_FLAG) && (PICEXISTINTR)) { | if ((I286_TRAP) || ((flag & I_FLAG) && (PICEXISTINTR))) { |
| I286IRQCHECKTERM | I286IRQCHECKTERM |
| } | } |
| #else | #else |
| Line 2475 I286FN _in_al_data8(void) { // E4: i | Line 2475 I286FN _in_al_data8(void) { // E4: i |
| I286_WORKCLOCK(5); | I286_WORKCLOCK(5); |
| GET_PCBYTE(port) | GET_PCBYTE(port) |
| i286core.s.inport = CS_BASE + I286_IP; | I286_INPADRS = CS_BASE + I286_IP; |
| I286_AL = iocore_inp8(port); | I286_AL = iocore_inp8(port); |
| i286core.s.inport = 0; | I286_INPADRS = 0; |
| } | } |
| I286FN _in_ax_data8(void) { // E5: in ax, DATA8 | I286FN _in_ax_data8(void) { // E5: in ax, DATA8 |
| Line 2577 I286FN _lock(void) { // F0: lock | Line 2577 I286FN _lock(void) { // F0: lock |
| I286FN _repne(void) { // F2: repne | I286FN _repne(void) { // F2: repne |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repne[op](); | i286op_repne[op](); |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 2591 I286FN _repne(void) { // F2: repne | Line 2591 I286FN _repne(void) { // F2: repne |
| I286FN _repe(void) { // F3: repe | I286FN _repe(void) { // F3: repe |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repe[op](); | i286op_repe[op](); |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 2662 I286FN _sti(void) { // FB: sti | Line 2662 I286FN _sti(void) { // FB: sti |
| I286_FLAG |= I_FLAG; | I286_FLAG |= I_FLAG; |
| I286_TRAP = (I286_FLAG & T_FLAG) >> 8; | I286_TRAP = (I286_FLAG & T_FLAG) >> 8; |
| #if defined(INTR_FAST) | #if defined(INTR_FAST) |
| if (!PICEXISTINTR) { | if ((I286_TRAP) || (PICEXISTINTR)) { |
| NEXT_OPCODE; | REMAIN_ADJUST(1) |
| } | } |
| else { | else { |
| REMAIN_ADJUST(1) | NEXT_OPCODE; |
| } | } |
| #else | #else |
| REMAIN_ADJUST(1) | REMAIN_ADJUST(1) |
| Line 2985 I286FN _repe_segprefix_es(void) { | Line 2985 I286FN _repe_segprefix_es(void) { |
| DS_FIX = ES_BASE; | DS_FIX = ES_BASE; |
| SS_FIX = ES_BASE; | SS_FIX = ES_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repe[op](); | i286op_repe[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 3002 I286FN _repe_segprefix_cs(void) { | Line 3002 I286FN _repe_segprefix_cs(void) { |
| DS_FIX = CS_BASE; | DS_FIX = CS_BASE; |
| SS_FIX = CS_BASE; | SS_FIX = CS_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repe[op](); | i286op_repe[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 3019 I286FN _repe_segprefix_ss(void) { | Line 3019 I286FN _repe_segprefix_ss(void) { |
| DS_FIX = SS_BASE; | DS_FIX = SS_BASE; |
| SS_FIX = SS_BASE; | SS_FIX = SS_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repe[op](); | i286op_repe[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 3036 I286FN _repe_segprefix_ds(void) { | Line 3036 I286FN _repe_segprefix_ds(void) { |
| DS_FIX = DS_BASE; | DS_FIX = DS_BASE; |
| SS_FIX = DS_BASE; | SS_FIX = DS_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repe[op](); | i286op_repe[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 3330 I286FN _repne_segprefix_es(void) { | Line 3330 I286FN _repne_segprefix_es(void) { |
| DS_FIX = ES_BASE; | DS_FIX = ES_BASE; |
| SS_FIX = ES_BASE; | SS_FIX = ES_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repne[op](); | i286op_repne[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 3347 I286FN _repne_segprefix_cs(void) { | Line 3347 I286FN _repne_segprefix_cs(void) { |
| DS_FIX = CS_BASE; | DS_FIX = CS_BASE; |
| SS_FIX = CS_BASE; | SS_FIX = CS_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repne[op](); | i286op_repne[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 3364 I286FN _repne_segprefix_ss(void) { | Line 3364 I286FN _repne_segprefix_ss(void) { |
| DS_FIX = SS_BASE; | DS_FIX = SS_BASE; |
| SS_FIX = SS_BASE; | SS_FIX = SS_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repne[op](); | i286op_repne[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |
| Line 3381 I286FN _repne_segprefix_ds(void) { | Line 3381 I286FN _repne_segprefix_ds(void) { |
| DS_FIX = DS_BASE; | DS_FIX = DS_BASE; |
| SS_FIX = DS_BASE; | SS_FIX = DS_BASE; |
| i286core.s.prefix++; | I286_PREFIX++; |
| if (i286core.s.prefix < MAX_PREFIX) { | if (I286_PREFIX < MAX_PREFIX) { |
| UINT op; | UINT op; |
| GET_PCBYTE(op); | GET_PCBYTE(op); |
| i286op_repne[op](); | i286op_repne[op](); |
| REMOVE_PREFIX | REMOVE_PREFIX |
| i286core.s.prefix = 0; | I286_PREFIX = 0; |
| } | } |
| else { | else { |
| INT_NUM(6, I286_IP); | INT_NUM(6, I286_IP); |