|
|
| version 1.1, 2003/10/16 17:57:29 | version 1.8, 2003/12/26 23:30:26 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "nevent.h" | #include "cpucore.h" |
| #include "i286.h" | |
| #include "i286x.h" | #include "i286x.h" |
| #include "i286xadr.h" | #include "i286xadr.h" |
| #include "i286xcts.h" | #include "i286xcts.h" |
| #include "memory.h" | |
| #include "i286x.mcr" | #include "i286x.mcr" |
| #include "i286xea.mcr" | #include "i286xea.mcr" |
| Line 17 I286 _sgdt(void) { | Line 15 I286 _sgdt(void) { |
| I286CLOCK(11) | I286CLOCK(11) |
| call p_get_ea[eax*4] | call p_get_ea[eax*4] |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| mov dx, word ptr GDTR | mov dx, word ptr i286core.s.GDTR |
| call i286_memorywrite_w | call i286_memorywrite_w |
| add bp, 2 | add bp, 2 |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| mov dx, word ptr (GDTR+2) | mov dx, word ptr (i286core.s.GDTR+2) |
| call i286_memorywrite_w | call i286_memorywrite_w |
| add bp, 2 | add bp, 2 |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| mov dl, byte ptr (GDTR+4) // ver0.29 | mov dl, byte ptr (i286core.s.GDTR+4) // ver0.29 |
| mov dh, -1 | mov dh, -1 |
| jmp i286_memorywrite_w | jmp i286_memorywrite_w |
| align 4 | align 4 |
| Line 43 I286 _sidt(void) { | Line 41 I286 _sidt(void) { |
| I286CLOCK(12) | I286CLOCK(12) |
| call p_get_ea[eax*4] | call p_get_ea[eax*4] |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| mov dx, word ptr IDTR | mov dx, word ptr i286core.s.IDTR |
| call i286_memorywrite_w | call i286_memorywrite_w |
| add bp, 2 | add bp, 2 |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| mov dx, word ptr (IDTR+2) | mov dx, word ptr (i286core.s.IDTR+2) |
| call i286_memorywrite_w | call i286_memorywrite_w |
| add bp, 2 | add bp, 2 |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| mov dl, byte ptr (IDTR+4) // ver0.29 | mov dl, byte ptr (i286core.s.IDTR+4) |
| mov dh, -1 | mov dh, -1 |
| jmp i286_memorywrite_w | jmp i286_memorywrite_w |
| align 4 | align 4 |
| Line 70 I286 _lgdt(void) { | Line 68 I286 _lgdt(void) { |
| call p_get_ea[eax*4] | call p_get_ea[eax*4] |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| call i286_memoryread_w | call i286_memoryread_w |
| mov word ptr GDTR, ax | mov word ptr i286core.s.GDTR, ax |
| add bp, 2 | add bp, 2 |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| call i286_memoryread_w | call i286_memoryread_w |
| mov word ptr (GDTR+2), ax | mov word ptr (i286core.s.GDTR+2), ax |
| add bp, 2 | add bp, 2 |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| call i286_memoryread_w | call i286_memoryread |
| mov word ptr (GDTR+4), ax | mov byte ptr (i286core.s.GDTR+4), al |
| ret | ret |
| align 4 | align 4 |
| register_eareg16: | register_eareg16: |
| Line 96 I286 _lidt(void) { | Line 94 I286 _lidt(void) { |
| call p_get_ea[eax*4] | call p_get_ea[eax*4] |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| call i286_memoryread_w | call i286_memoryread_w |
| mov word ptr IDTR, ax | mov word ptr i286core.s.IDTR, ax |
| add bp, 2 | add bp, 2 |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| call i286_memoryread_w | call i286_memoryread_w |
| mov word ptr (IDTR+2), ax | mov word ptr (i286core.s.IDTR+2), ax |
| add bp, 2 | add bp, 2 |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| call i286_memoryread_w | call i286_memoryread |
| mov word ptr (IDTR+4), ax | mov byte ptr (i286core.s.IDTR+4), al |
| ret | ret |
| align 4 | align 4 |
| register_eareg16: | register_eareg16: |
| Line 117 I286 _smsw(void) { | Line 115 I286 _smsw(void) { |
| __asm { | __asm { |
| PREPART_EA16(3) | PREPART_EA16(3) |
| mov dx, MSW | mov dx, i286core.s.MSW |
| mov word ptr I286_REG[eax*2], dx | mov word ptr I286_REG[eax*2], dx |
| GET_NEXTPRE2 | GET_NEXTPRE2 |
| ret | ret |
| MEMORY_EA16(6) | MEMORY_EA16(6) |
| mov ax, MSW | mov ax, i286core.s.MSW |
| mov word ptr I286_MEM[ecx], ax | mov word ptr I286_MEM[ecx], ax |
| ret | ret |
| extmem_eareg16: | extmem_eareg16: |
| mov dx, MSW | mov dx, i286core.s.MSW |
| jmp i286_memorywrite_w | jmp i286_memorywrite_w |
| } | } |
| } | } |
| Line 135 I286 _smsw(void) { | Line 133 I286 _smsw(void) { |
| I286 _lmsw(void) { | I286 _lmsw(void) { |
| __asm { | __asm { |
| and word ptr i286core.s.MSW, 1 | |
| PREPART_EA16(2) | PREPART_EA16(2) |
| mov ax, word ptr I286_REG[eax*2] | mov ax, word ptr I286_REG[eax*2] |
| and ax, 0ch | and ax, 0ch |
| mov MSW, ax | or i286core.s.MSW, ax |
| GET_NEXTPRE2 | GET_NEXTPRE2 |
| ret | ret |
| MEMORY_EA16(3) | MEMORY_EA16(3) |
| mov ax, word ptr I286_MEM[ecx] | mov ax, word ptr I286_MEM[ecx] |
| and ax, 0ch | and ax, 0ch |
| mov MSW, ax | or i286core.s.MSW, ax |
| ret | ret |
| EXTMEM_EA16 | EXTMEM_EA16 |
| and ax, 0ch | and ax, 0ch |
| mov MSW, ax | or i286core.s.MSW, ax |
| ret | ret |
| } | } |
| } | } |
| Line 195 i286_cts1: movzx eax, bh | Line 194 i286_cts1: movzx eax, bh |
| align 4 | align 4 |
| loadall286: I286CLOCK(195) | loadall286: I286CLOCK(195) |
| mov ax, word ptr mem[0x0804] // MSW | mov ax, word ptr mem[0x0804] // MSW |
| mov MSW, ax | mov i286core.s.MSW, ax |
| mov ax, word ptr mem[0x0818] // flag | mov ax, word ptr mem[0x0818] // flag |
| mov I286_FLAG, ax | mov I286_FLAG, ax |
| and ah, 3 | and ah, 3 |