|
|
| version 1.4, 2003/12/01 10:45:46 | version 1.5, 2003/12/01 18:25:03 |
|---|---|
| Line 573 I286 pop_ss(void) { // 17: pop ss | Line 573 I286 pop_ss(void) { // 17: pop ss |
| mov SS_BASE, eax | mov SS_BASE, eax |
| mov SS_FIX, eax | mov SS_FIX, eax |
| cmp i286core.s.prefix, 0 // 00/06/24 | cmp i286core.s.prefix, 0 // 00/06/24 |
| je noprefix | jne prefix_exist |
| call removeprefix | |
| pop eax | |
| noprefix: | noprefix: |
| movzx ebp, bh | movzx ebp, bh |
| GET_NEXTPRE1 | GET_NEXTPRE1 |
| jmp i286op[ebp*4] | jmp i286op[ebp*4] |
| prefix_exist: pop eax // eax<-offset removeprefix | |
| call eax | |
| jmp noprefix | |
| } | } |
| } | } |
| Line 2661 I286 _popf(void) { // 9D: popf | Line 2663 I286 _popf(void) { // 9D: popf |
| and ah, 3 | and ah, 3 |
| cmp ah, 3 | cmp ah, 3 |
| sete I286_TRAP | sete I286_TRAP |
| I286IRQCHECKTERM | |
| test ah, 2 // fast_intr | |
| je nextop | |
| cmp pic.ext_irq, 0 | |
| jne nextop | |
| mov al, pic.pi[0].imr | |
| mov ah, pic.pi[1].imr | |
| not ax | |
| test al, pic.pi[0].irr | |
| jne irqcheck | |
| test al, pic.pi[1].irr | |
| jne irqcheck | |
| nextop: ret | |
| irqcheck: I286IRQCHECKTERM | |
| } | } |
| } | } |
| Line 3575 I286 _iret(void) { // CF: iret | Line 3591 I286 _iret(void) { // CF: iret |
| cmp ah, 3 | cmp ah, 3 |
| sete I286_TRAP | sete I286_TRAP |
| RESET_XPREFETCH | RESET_XPREFETCH |
| I286IRQCHECKTERM | |
| test I286_FLAG, I_FLAG // fast_intr | |
| je nextop | |
| cmp pic.ext_irq, 0 | |
| jne nextop | |
| mov al, pic.pi[0].imr | |
| mov ah, pic.pi[1].imr | |
| not ax | |
| test al, pic.pi[0].irr | |
| jne irqcheck | |
| test al, pic.pi[1].irr | |
| jne irqcheck | |
| nextop: ret | |
| irqcheck: I286IRQCHECKTERM | |
| } | } |
| } | } |
| Line 4158 I286 _sti(void) { // FB: sti | Line 4188 I286 _sti(void) { // FB: sti |
| __asm { | __asm { |
| GET_NEXTPRE1 | GET_NEXTPRE1 |
| I286CLOCK(2) | I286CLOCK(2) |
| or I286_FLAG, I_FLAG | cmp i286core.s.prefix, 0 // ver0.26 00/10/08 |
| jne prefix_exist // 前方分岐ジャンプなので。 | |
| noprefix: | |
| movzx ebp, bl | |
| bts I286_FLAG, 9 | |
| jne jmp_nextop | |
| test I286_FLAG, T_FLAG | test I286_FLAG, T_FLAG |
| setne I286_TRAP | setne I286_TRAP |
| cmp i286core.s.prefix, 0 // ver0.26 00/10/08 | cmp pic.ext_irq, 0 // fast_intr |
| jne prefix_exist // 前方分岐ジャンプなので。 | jne jmp_nextop |
| noprefix: movzx eax, bl | mov al, pic.pi[0].imr |
| call i286op[eax*4] | mov ah, pic.pi[1].imr |
| not ax | |
| test al, pic.pi[0].irr | |
| jne nextopandexit | |
| test al, pic.pi[1].irr | |
| jne nextopandexit | |
| jmp_nextop: jmp i286op[ebp*4] | |
| nextopandexit: call i286op[ebp*4] | |
| I286IRQCHECKTERM | I286IRQCHECKTERM |
| prefix_exist: pop eax // eax<-offset removeprefix | prefix_exist: pop eax // eax<-offset removeprefix |