| version 1.17, 2004/01/25 07:53:08 | version 1.22, 2004/08/03 10:11:37 | 
| Line 343  LABEL void removeprefix(void) { | Line 343  LABEL void removeprefix(void) { | 
 | I286 _reserved(void) { | I286 _reserved(void) { | 
 |  |  | 
 | __asm { | __asm { | 
| inc             si                                              // 01/08/31 | //                              inc             si                                              // 01/08/31 | 
 | INT_NUM(6) | INT_NUM(6) | 
 | } | } | 
 | } | } | 
| Line 448  I286 pop_es(void) {        // 07: pop es | Line 448  I286 pop_es(void) {        // 07: pop es | 
 | I286CLOCK(5) | I286CLOCK(5) | 
 | REGPOP(I286_ES) | REGPOP(I286_ES) | 
 | movzx   eax, ax | movzx   eax, ax | 
| test    I286_MSW, MSW_PE | test    byte ptr (I286_MSW), MSW_PE | 
 | jne             short pop_es_pe | jne             short pop_es_pe | 
 | shl             eax, 4                                  // make segreg | shl             eax, 4                                  // make segreg | 
 | pop_es_base:    mov             ES_BASE, eax | pop_es_base:    mov             ES_BASE, eax | 
| Line 661  I286 pop_ss(void) {        // 17: pop ss | Line 661  I286 pop_ss(void) {        // 17: pop ss | 
 | I286CLOCK(5) | I286CLOCK(5) | 
 | REGPOP(I286_SS) | REGPOP(I286_SS) | 
 | movzx   eax, ax | movzx   eax, ax | 
| test    I286_MSW, MSW_PE | test    byte ptr (I286_MSW), MSW_PE | 
 | jne             short pop_ss_pe | jne             short pop_ss_pe | 
 | shl             eax, 4                                  // make segreg | shl             eax, 4                                  // make segreg | 
 | pop_ss_base:    mov             SS_BASE, eax | pop_ss_base:    mov             SS_BASE, eax | 
| Line 790  I286 pop_ds(void) {        // 1F: pop ds | Line 790  I286 pop_ds(void) {        // 1F: pop ds | 
 | I286CLOCK(5) | I286CLOCK(5) | 
 | REGPOP(I286_DS) | REGPOP(I286_DS) | 
 | movzx   eax, ax | movzx   eax, ax | 
| test    I286_MSW, MSW_PE | test    byte ptr (I286_MSW), MSW_PE | 
 | jne             short pop_ds_pe | jne             short pop_ds_pe | 
 | shl             eax, 4                                  // make segreg | shl             eax, 4                                  // make segreg | 
 | pop_ds_base:    mov             DS_BASE, eax | pop_ds_base:    mov             DS_BASE, eax | 
| Line 1695  I286 _arpl(void) { | Line 1695  I286 _arpl(void) { | 
 | xor             eax, eax | xor             eax, eax | 
 | cmp             bh, 0c0h | cmp             bh, 0c0h | 
 | setc    al | setc    al | 
| add             si, ax | //              add             si, ax | 
 | add             eax, 10 | add             eax, 10 | 
 | I286CLOCK(eax) | I286CLOCK(eax) | 
 | INT_NUM(6) | INT_NUM(6) | 
| Line 2498  I286 mov_seg_ea(void) {       // 8E: mov | Line 2498  I286 mov_seg_ea(void) {       // 8E: mov | 
 | segset: | segset: | 
 | mov             word ptr I286_SEGREG[ebp], ax | mov             word ptr I286_SEGREG[ebp], ax | 
 | movzx   eax, ax | movzx   eax, ax | 
| test    I286_MSW, MSW_PE | test    byte ptr (I286_MSW), MSW_PE | 
 | jne             short mov_seg_pe | jne             short mov_seg_pe | 
 | shl             eax, 4                                  // make segreg | shl             eax, 4                                  // make segreg | 
 | mov_seg_base:   mov             SEG_BASE[ebp*2], eax | mov_seg_base:   mov             SEG_BASE[ebp*2], eax | 
| Line 2714  I286 call_far(void) {       // 9A: call | Line 2714  I286 call_far(void) {       // 9A: call | 
 | mov             si, bx | mov             si, bx | 
 | shr             ebx, 16 | shr             ebx, 16 | 
 | mov             I286_CS, bx | mov             I286_CS, bx | 
 |  | test    byte ptr (I286_MSW), MSW_PE | 
 |  | jne             short call_far_pe | 
 | shl             ebx, 4 | shl             ebx, 4 | 
 | mov             CS_BASE, ebx | mov             CS_BASE, ebx | 
| RESET_XPREFETCH | call_far_base:  RESET_XPREFETCH | 
 | ret | ret | 
 |  |  | 
 |  | call_far_pe:    mov             eax, ebx | 
 |  | call    i286x_selector | 
 |  | mov             CS_BASE, eax | 
 |  | jmp             short call_far_base | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 2761  I286 _popf(void) {        // 9D: popf | Line 2768  I286 _popf(void) {        // 9D: popf | 
 | je              irqcheck                                // fast_intr | je              irqcheck                                // fast_intr | 
 | test    ah, 2 | test    ah, 2 | 
 | je              nextop | je              nextop | 
| cmp             pic.ext_irq, 0 | mov             al, pic.pi[0 * (type _PICITEM)].imr | 
| jne             nextop | mov             ah, pic.pi[1 * (type _PICITEM)].imr | 
| mov             al, pic.pi[0].imr |  | 
| mov             ah, pic.pi[1].imr |  | 
 | not             ax | not             ax | 
| test    al, pic.pi[0].irr | test    al, pic.pi[0 * (type _PICITEM)].irr | 
 | jne             irqcheck | jne             irqcheck | 
| test    ah, pic.pi[1].irr | test    ah, pic.pi[1 * (type _PICITEM)].irr | 
 | jne             irqcheck | jne             irqcheck | 
 | nextop:                 ret | nextop:                 ret | 
 |  |  | 
| Line 2869  I286 _movsb(void) {        // A4: movsb | Line 2874  I286 _movsb(void) {        // A4: movsb | 
 | add             ecx, DS_FIX | add             ecx, DS_FIX | 
 | call    i286_memoryread | call    i286_memoryread | 
 | mov             dl, al | mov             dl, al | 
| movzx   ecx, I286_ES | movzx   ecx, I286_DI | 
| shl             ecx, 4 | add             ecx, ES_BASE | 
| movzx   eax, I286_DI |  | 
| add             ecx, eax |  | 
 | STRING_DIR | STRING_DIR | 
 | add             I286_SI, ax | add             I286_SI, ax | 
 | add             I286_DI, ax | add             I286_DI, ax | 
| Line 2889  I286 _movsw(void) {        // A5: movsw | Line 2892  I286 _movsw(void) {        // A5: movsw | 
 | add             ecx, DS_FIX | add             ecx, DS_FIX | 
 | call    i286_memoryread_w | call    i286_memoryread_w | 
 | mov             dx, ax | mov             dx, ax | 
| movzx   ecx, I286_ES | movzx   ecx, I286_DI | 
| shl             ecx, 4 | add             ecx, ES_BASE | 
| movzx   eax, I286_DI |  | 
| add             ecx, eax |  | 
 | STRING_DIRx2 | STRING_DIRx2 | 
 | add             I286_SI, ax | add             I286_SI, ax | 
 | add             I286_DI, ax | add             I286_DI, ax | 
| Line 2909  I286 _cmpsb(void) {        // A6: cmpsb | Line 2910  I286 _cmpsb(void) {        // A6: cmpsb | 
 | add             ecx, DS_FIX | add             ecx, DS_FIX | 
 | call    i286_memoryread | call    i286_memoryread | 
 | mov             dl, al | mov             dl, al | 
| movzx   ecx, I286_ES | movzx   ecx, I286_DI | 
| shl             ecx, 4 | add             ecx, ES_BASE | 
| movzx   eax, I286_DI |  | 
| add             ecx, eax |  | 
 | call    i286_memoryread | call    i286_memoryread | 
 | cmp             dl, al | cmp             dl, al | 
 | FLAG_STORE_OF | FLAG_STORE_OF | 
| Line 2932  I286 _cmpsw(void) {        // A7: cmpsw | Line 2931  I286 _cmpsw(void) {        // A7: cmpsw | 
 | add             ecx, DS_FIX | add             ecx, DS_FIX | 
 | call    i286_memoryread_w | call    i286_memoryread_w | 
 | mov             edx, eax | mov             edx, eax | 
| movzx   ecx, I286_ES | movzx   ecx, I286_DI | 
| shl             ecx, 4 | add             ecx, ES_BASE | 
| movzx   eax, I286_DI |  | 
| add             ecx, eax |  | 
 | call    i286_memoryread_w | call    i286_memoryread_w | 
 | cmp             dx, ax | cmp             dx, ax | 
 | FLAG_STORE_OF | FLAG_STORE_OF | 
| Line 2974  I286 _stosb(void) {        // AA: stosb | Line 2971  I286 _stosb(void) {        // AA: stosb | 
 | __asm { | __asm { | 
 | GET_NEXTPRE1 | GET_NEXTPRE1 | 
 | I286CLOCK(3) | I286CLOCK(3) | 
| movzx   ecx, I286_ES | movzx   ecx, I286_DI | 
| shl             ecx, 4 | add             ecx, ES_BASE | 
| movzx   eax, I286_DI |  | 
| add             ecx, eax |  | 
 | STRING_DIR | STRING_DIR | 
 | add             I286_DI, ax | add             I286_DI, ax | 
 | mov             dl, I286_AL | mov             dl, I286_AL | 
| Line 2990  I286 _stosw(void) {        // AB: stosw | Line 2985  I286 _stosw(void) {        // AB: stosw | 
 | __asm { | __asm { | 
 | GET_NEXTPRE1 | GET_NEXTPRE1 | 
 | I286CLOCK(3) | I286CLOCK(3) | 
| movzx   ecx, I286_ES | movzx   ecx, I286_DI | 
| shl             ecx, 4 | add             ecx, ES_BASE | 
| movzx   eax, I286_DI |  | 
| add             ecx, eax |  | 
 | STRING_DIRx2 | STRING_DIRx2 | 
 | add             I286_DI, ax | add             I286_DI, ax | 
 | mov             dx, I286_AX | mov             dx, I286_AX | 
| Line 3036  I286 _scasb(void) {        // AE: scasb | Line 3029  I286 _scasb(void) {        // AE: scasb | 
 | __asm { | __asm { | 
 | GET_NEXTPRE1 | GET_NEXTPRE1 | 
 | I286CLOCK(7) | I286CLOCK(7) | 
| movzx   ecx, I286_ES | movzx   ecx, I286_DI | 
| shl             ecx, 4 | add             ecx, ES_BASE | 
| movzx   eax, I286_DI |  | 
| add             ecx, eax |  | 
 | call    i286_memoryread | call    i286_memoryread | 
 | cmp             I286_AL, al | cmp             I286_AL, al | 
 | FLAG_STORE_OF | FLAG_STORE_OF | 
| Line 3054  I286 _scasw(void) {        // AF: scasw | Line 3045  I286 _scasw(void) {        // AF: scasw | 
 | __asm { | __asm { | 
 | GET_NEXTPRE1 | GET_NEXTPRE1 | 
 | I286CLOCK(7) | I286CLOCK(7) | 
| movzx   ecx, I286_ES | movzx   ecx, I286_DI | 
| shl             ecx, 4 | add             ecx, ES_BASE | 
| movzx   eax, I286_DI |  | 
| add             ecx, eax |  | 
 | call    i286_memoryread_w | call    i286_memoryread_w | 
 | cmp             I286_AX, ax | cmp             I286_AX, ax | 
 | FLAG_STORE_OF | FLAG_STORE_OF | 
| Line 3381  I286 les_r16_ea(void) {       // C4: les | Line 3370  I286 les_r16_ea(void) {       // C4: les | 
 | lea             ecx, [edi + ebp] | lea             ecx, [edi + ebp] | 
 | call    i286_memoryread_w | call    i286_memoryread_w | 
 | mov             I286_ES, ax | mov             I286_ES, ax | 
| and             eax, 0000ffffh | movzx   eax, ax | 
|  | test    byte ptr (I286_MSW), MSW_PE | 
|  | jne             short les_pe | 
 | shl             eax, 4                                  // make segreg | shl             eax, 4                                  // make segreg | 
| mov             ES_BASE, eax | les_base:               mov             ES_BASE, eax | 
 | ret | ret | 
| align   4 |  | 
| src_register: | les_pe:                 push    offset les_base | 
| INT_NUM(6) | jmp             i286x_selector | 
|  |  | 
|  | src_register:   INT_NUM(6) | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 3410  I286 lds_r16_ea(void) {       // C5: lds | Line 3403  I286 lds_r16_ea(void) {       // C5: lds | 
 | lea             ecx, [edi + ebp] | lea             ecx, [edi + ebp] | 
 | call    i286_memoryread_w | call    i286_memoryread_w | 
 | mov             I286_DS, ax | mov             I286_DS, ax | 
| and             eax, 0000ffffh | movzx   eax, ax | 
|  | test    byte ptr (I286_MSW), MSW_PE | 
|  | jne             short lds_pe | 
 | shl             eax, 4                                  // make segreg | shl             eax, 4                                  // make segreg | 
| mov             DS_BASE, eax | lds_base:               mov             DS_BASE, eax | 
 | mov             DS_FIX, eax | mov             DS_FIX, eax | 
 | ret | ret | 
| align   16 |  | 
| src_register: | lds_pe:                 push    offset lds_base | 
| INT_NUM(6) | jmp             i286x_selector | 
|  |  | 
|  | src_register:   INT_NUM(6) | 
|  |  | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 3569  I286 ret_far_data16(void) {      // CA: | Line 3567  I286 ret_far_data16(void) {      // CA: | 
 | lea             ecx, [edi + ebp] | lea             ecx, [edi + ebp] | 
 | call    i286_memoryread_w | call    i286_memoryread_w | 
 | mov             I286_CS, ax | mov             I286_CS, ax | 
| and             eax, 0000ffffh | movzx   eax, ax | 
|  | test    byte ptr (I286_MSW), MSW_PE | 
|  | jne             short ret_far16_pe | 
 | shl             eax, 4                                  // make segreg | shl             eax, 4                                  // make segreg | 
| mov             CS_BASE, eax | ret_far16_base: mov             CS_BASE, eax | 
 | add             I286_SP, 4 | add             I286_SP, 4 | 
 | RESET_XPREFETCH | RESET_XPREFETCH | 
 | ret | ret | 
 |  |  | 
 |  | ret_far16_pe:   push    offset ret_far16_base | 
 |  | jmp             i286x_selector | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 3592  I286 ret_far(void) {       // CB: ret fa | Line 3595  I286 ret_far(void) {       // CB: ret fa | 
 | add             bx, 2 | add             bx, 2 | 
 | call    i286_memoryread_w | call    i286_memoryread_w | 
 | mov             I286_CS, ax | mov             I286_CS, ax | 
| and             eax, 0000ffffh | movzx   eax, ax | 
|  | test    byte ptr (I286_MSW), MSW_PE | 
|  | jne             short ret_far_pe | 
 | shl             eax, 4                                  // make segreg | shl             eax, 4                                  // make segreg | 
| mov             CS_BASE, eax | ret_far_base:   mov             CS_BASE, eax | 
 | mov             ebp, eax | mov             ebp, eax | 
 | mov             I286_SP, bx | mov             I286_SP, bx | 
 | RESET_XPREFETCH | RESET_XPREFETCH | 
 | ret | ret | 
 |  |  | 
 |  | ret_far_pe:             push    offset ret_far_base | 
 |  | jmp             i286x_selector | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 3652  I286 _into(void) {        // CE: into | Line 3660  I286 _into(void) {        // CE: into | 
 | GET_NEXTPRE1 | GET_NEXTPRE1 | 
 | ret | ret | 
 |  |  | 
| intovf: INT_NUM(4) | intovf: inc             si                                                                                      // ver0.80 | 
|  | INT_NUM(4) | 
 | } | } | 
 | } | } | 
 |  |  | 
 | I286 _iret(void) {                                                              // CF: iret | I286 _iret(void) {                                                              // CF: iret | 
 |  |  | 
 | __asm { | __asm { | 
 | call    extirq_pop |  | 
 | I286CLOCK(31) | I286CLOCK(31) | 
 | mov             edi, SS_BASE | mov             edi, SS_BASE | 
 | movzx   ebx, I286_SP | movzx   ebx, I286_SP | 
| Line 3689  I286 _iret(void) {        // CF: iret | Line 3697  I286 _iret(void) {        // CF: iret | 
 | jne             irqcheck | jne             irqcheck | 
 | test    I286_FLAG, I_FLAG | test    I286_FLAG, I_FLAG | 
 | je              nextop | je              nextop | 
| cmp             pic.ext_irq, 0 | mov             al, pic.pi[0 * (type _PICITEM)].imr | 
| jne             nextop | mov             ah, pic.pi[1 * (type _PICITEM)].imr | 
| mov             al, pic.pi[0].imr |  | 
| mov             ah, pic.pi[1].imr |  | 
 | not             ax | not             ax | 
| test    al, pic.pi[0].irr | test    al, pic.pi[0 * (type _PICITEM)].irr | 
 | jne             irqcheck | jne             irqcheck | 
| test    ah, pic.pi[1].irr | test    ah, pic.pi[1 * (type _PICITEM)].irr | 
 | jne             irqcheck | jne             irqcheck | 
 | nextop:                 ret | nextop:                 ret | 
 |  |  | 
| Line 4100  I286 jmp_far(void) {       // EA: jmp fa | Line 4106  I286 jmp_far(void) {       // EA: jmp fa | 
 | mov             si, bx | mov             si, bx | 
 | shr             ebx, 16 | shr             ebx, 16 | 
 | mov             I286_CS, bx | mov             I286_CS, bx | 
 |  | test    byte ptr (I286_MSW), MSW_PE | 
 |  | jne             short jmp_far_pe | 
 | shl             ebx, 4                                  // make segreg | shl             ebx, 4                                  // make segreg | 
 | mov             CS_BASE, ebx | mov             CS_BASE, ebx | 
| RESET_XPREFETCH | jmp_far_base:   RESET_XPREFETCH | 
 | ret | ret | 
 |  |  | 
 |  | jmp_far_pe:             mov             eax, ebx | 
 |  | call    i286x_selector | 
 |  | mov             CS_BASE, eax | 
 |  | jmp             short jmp_far_base | 
 | } | } | 
 | } | } | 
 |  |  | 
| Line 4273  I286 _sti(void) {        // FB: sti | Line 4286  I286 _sti(void) {        // FB: sti | 
 | setne   I286_TRAP | setne   I286_TRAP | 
 |  |  | 
 | jne             nextopandexit                   // fast_intr | jne             nextopandexit                   // fast_intr | 
| cmp             pic.ext_irq, 0 | mov             al, pic.pi[0 * (type _PICITEM)].imr | 
| jne             jmp_nextop | mov             ah, pic.pi[1 * (type _PICITEM)].imr | 
| mov             al, pic.pi[0].imr |  | 
| mov             ah, pic.pi[1].imr |  | 
 | not             ax | not             ax | 
| test    al, pic.pi[0].irr | test    al, pic.pi[0 * (type _PICITEM)].irr | 
 | jne             nextopandexit | jne             nextopandexit | 
| test    ah, pic.pi[1].irr | test    ah, pic.pi[1 * (type _PICITEM)].irr | 
 | jne             nextopandexit | jne             nextopandexit | 
 | jmp_nextop:             jmp             i286op[ebp*4] | jmp_nextop:             jmp             i286op[ebp*4] | 
 |  |  | 
| Line 4338  I286 _ope0xff(void) {       // FF: | Line 4349  I286 _ope0xff(void) {       // FF: | 
 |  |  | 
 | // ------------------------------------------------------------------------- | // ------------------------------------------------------------------------- | 
 |  |  | 
| void (*i286op[])(void) = { | const I286TBL i286op[256] = { | 
 | add_ea_r8,                                              // 00:  add             EA, REG8 | add_ea_r8,                                              // 00:  add             EA, REG8 | 
 | add_ea_r16,                                             // 01:  add             EA, REG16 | add_ea_r16,                                             // 01:  add             EA, REG16 | 
 | add_r8_ea,                                              // 02:  add             REG8, EA | add_r8_ea,                                              // 02:  add             REG8, EA | 
| Line 4662  I286 repe_segprefix_ds(void) { | Line 4673  I286 repe_segprefix_ds(void) { | 
 | } | } | 
 | } | } | 
 |  |  | 
| void (*i286op_repe[])(void) = { | const I286TBL i286op_repe[256] = { | 
 | add_ea_r8,                                              // 00:  add             EA, REG8 | add_ea_r8,                                              // 00:  add             EA, REG8 | 
 | add_ea_r16,                                             // 01:  add             EA, REG16 | add_ea_r16,                                             // 01:  add             EA, REG16 | 
 | add_r8_ea,                                              // 02:  add             REG8, EA | add_r8_ea,                                              // 02:  add             REG8, EA | 
| Line 4986  I286 repne_segprefix_ds(void) { | Line 4997  I286 repne_segprefix_ds(void) { | 
 | } | } | 
 | } | } | 
 |  |  | 
| void (*i286op_repne[])(void) = { | const I286TBL i286op_repne[256] = { | 
 | add_ea_r8,                                              // 00:  add             EA, REG8 | add_ea_r8,                                              // 00:  add             EA, REG8 | 
 | add_ea_r16,                                             // 01:  add             EA, REG16 | add_ea_r16,                                             // 01:  add             EA, REG16 | 
 | add_r8_ea,                                              // 02:  add             REG8, EA | add_r8_ea,                                              // 02:  add             REG8, EA |