|
|
| version 1.23, 2005/02/08 09:57:26 | version 1.27, 2005/03/25 14:57:56 |
|---|---|
| Line 12 | Line 12 |
| #include "v30patch.h" | #include "v30patch.h" |
| #include "bios.h" | #include "bios.h" |
| #include "dmax86.h" | #include "dmax86.h" |
| #if defined(ENABLE_TRAP) | |
| #include "steptrap.h" | |
| #include "inttrap.h" | |
| #endif | |
| I286CORE i286core; | I286CORE i286core; |
| const BYTE iflags[256] = { // Z_FLAG, S_FLAG, P_FLAG | const UINT8 iflags[256] = { // Z_FLAG, S_FLAG, P_FLAG |
| 0x44, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, | 0x44, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x00, |
| 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, | 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, |
| 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, | 0x00, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x04, |
| Line 95 void i286x_setextsize(UINT32 size) { | Line 99 void i286x_setextsize(UINT32 size) { |
| CPU_EXTMEM = NULL; | CPU_EXTMEM = NULL; |
| } | } |
| if (size) { | if (size) { |
| CPU_EXTMEM = (BYTE *)_MALLOC(size + 16, "EXTMEM"); | CPU_EXTMEM = (UINT8 *)_MALLOC(size + 16, "EXTMEM"); |
| if (CPU_EXTMEM == NULL) { | if (CPU_EXTMEM == NULL) { |
| size = 0; | size = 0; |
| } | } |
| Line 110 void i286x_setextsize(UINT32 size) { | Line 114 void i286x_setextsize(UINT32 size) { |
| void i286x_setemm(UINT frame, UINT32 addr) { | void i286x_setemm(UINT frame, UINT32 addr) { |
| BYTE *ptr; | UINT8 *ptr; |
| frame &= 3; | frame &= 3; |
| if (addr < USE_HIMEM) { | if (addr < USE_HIMEM) { |
| Line 138 LABEL void i286x_resetprefetch(void) { | Line 142 LABEL void i286x_resetprefetch(void) { |
| } | } |
| } | } |
| LABEL void __fastcall i286x_interrupt(BYTE vect) { | LABEL void __fastcall i286x_interrupt(UINT8 vect) { |
| __asm { | __asm { |
| pushad | pushad |
| Line 264 LABEL void i286x(void) { | Line 268 LABEL void i286x(void) { |
| cmp dmac.working, 0 | cmp dmac.working, 0 |
| jne short i286_dma_mnlp | jne short i286_dma_mnlp |
| i286_mnlp: movzx eax, bl | i286_mnlp: |
| #if defined(ENABLE_TRAP) | |
| mov edx, esi | |
| movzx ecx, I286_CS | |
| call steptrap | |
| #endif | |
| movzx eax, bl | |
| call i286op[eax*4] | call i286op[eax*4] |
| cmp I286_REMCLOCK, 0 | cmp I286_REMCLOCK, 0 |
| jg i286_mnlp | jg i286_mnlp |
| Line 274 i286_mnlp: movzx eax, bl | Line 284 i286_mnlp: movzx eax, bl |
| ret | ret |
| align 16 | align 16 |
| i286_dma_mnlp: movzx eax, bl | i286_dma_mnlp: |
| #if defined(ENABLE_TRAP) | |
| mov edx, esi | |
| movzx ecx, I286_CS | |
| call steptrap | |
| #endif | |
| movzx eax, bl | |
| call i286op[eax*4] | call i286op[eax*4] |
| call dmax86 | call dmax86 |
| cmp I286_REMCLOCK, 0 | cmp I286_REMCLOCK, 0 |
| Line 285 i286_dma_mnlp: movzx eax, bl | Line 301 i286_dma_mnlp: movzx eax, bl |
| ret | ret |
| align 16 | align 16 |
| i286_trapping: movzx eax, bl | i286_trapping: |
| #if defined(ENABLE_TRAP) | |
| mov edx, esi | |
| movzx ecx, I286_CS | |
| call steptrap | |
| #endif | |
| movzx eax, bl | |
| call i286op[eax*4] | call i286op[eax*4] |
| cmp I286_TRAP, 0 | cmp I286_TRAP, 0 |
| je i286notrap | je i286notrap |
| Line 3431 I286 mov_ea8_data8(void) { // C6: m | Line 3453 I286 mov_ea8_data8(void) { // C6: m |
| bt bp, 2 | bt bp, 2 |
| rcl ebp, 1 | rcl ebp, 1 |
| and ebp, 7 | and ebp, 7 |
| GET_NEXTPRE2 | GET_NEXTPRE3 |
| mov byte ptr I286_REG[ebp], dh | mov byte ptr I286_REG[ebp], dh |
| ret | ret |
| align 16 | align 16 |
| Line 3487 I286 _enter(void) { // C8: enter | Line 3509 I286 _enter(void) { // C8: enter |
| je enter0 | je enter0 |
| dec eax | dec eax |
| je enter1 | je enter1 |
| lea ecx, [eax*4 + 12] | lea ecx, [eax*4 + 12 + 4] |
| I286CLOCK(ecx) | I286CLOCK(ecx) |
| push ebx | push ebx |
| movzx ebx, I286_BP | movzx ebx, I286_BP |
| Line 3635 I286 int_data8(void) { // CD: int | Line 3657 I286 int_data8(void) { // CD: int |
| lea ecx, [edi + ebp] | lea ecx, [edi + ebp] |
| mov dx, I286_CS | mov dx, I286_CS |
| call i286_memorywrite_w | call i286_memorywrite_w |
| #if defined(ENABLE_TRAP) | |
| movzx eax, bh | |
| push eax | |
| lea edx, [esi - 1] | |
| movzx ecx, I286_CS | |
| call softinttrap | |
| #endif | |
| movzx eax, bh | movzx eax, bh |
| sub bp, 2 | sub bp, 2 |
| mov I286_SP, bp | mov I286_SP, bp |