File:
[RetroPC.NET] /
np2 /
i286x /
i286x.mcr
Revision
1.2:
download - view:
text,
annotated -
select for diffs
Sun Oct 19 23:56:15 2003 JST (22 years ago) by
yui
Branches:
MAIN
CVS tags:
VER_0_82_x64,
VER_0_82,
VER_0_81A,
VER_0_81,
VER_0_80,
VER_0_79,
VER_0_78,
VER_0_77,
VER_0_76,
VER_0_75,
VER_0_74,
VER_0_73,
VER_0_72,
VER_0_71,
VER_0_70,
HEAD
fix CPU, Mac keyboard (T.Yui)
#define I286CLOCK(clock) \
__asm { sub I286_REMCLOCK, clock }
#define I286CLOCKDEC \
__asm { inc I286_REMCLOCK }
#define FLAG_LOAD \
__asm { mov ah, I286_FLAGL } \
__asm { sahf }
#define CFLAG_LOAD \
__asm { bt I286_FLAG, 0 }
#define FLAG_STORE \
__asm { lahf } \
__asm { mov I286_FLAGL, ah }
#define FLAG_STORE0 \
__asm { lahf } \
__asm { mov I286_FLAGL, ah } \
__asm { and I286_FLAG, not O_FLAG }
#define FLAG_STORE_OF \
__asm { lahf } \
__asm { mov I286_FLAGL, ah } \
__asm { seto ah } \
__asm { shl ah, 3 } \
__asm { and I286_FLAG, not O_FLAG } \
__asm { or I286_FLAGH, ah }
#define FLAG_STORE_NC \
__asm { clc } \
__asm { lahf } \
__asm { seto al } \
__asm { shl al, 3 } \
__asm { and I286_FLAG, 0f701h } \
__asm { or I286_FLAGL, ah } \
__asm { or I286_FLAGH, al }
#define FLAG_STORE_OC \
__asm { seto ah } \
__asm { setc al } \
__asm { shl ah, 3 } \
__asm { and I286_FLAG, not (O_FLAG or C_FLAG) } \
__asm { or I286_FLAG, ax }
// 毎回ストールが起きるので si加算を後に・・・
// フェッチする場所は異なってしまうが…
#define GET_NEXTPRE1 \
__asm { lea ecx, [esi + 4] } \
__asm { inc si } \
__asm { add ecx, CS_BASE } \
__asm { call i286_memoryread } \
__asm { shrd ebx, eax, 8 } \
#define GET_NEXTPRE2 \
__asm { lea ecx, [esi + 4] } \
__asm { add si, 2 } \
__asm { add ecx, CS_BASE } \
__asm { call i286_memoryread_w } \
__asm { shrd ebx, eax, 16 }
#define GET_NEXTPRE3 \
__asm { lea ecx, [esi + 4] } \
__asm { add si, 3 } \
__asm { add ecx, CS_BASE } \
__asm { call i286_memoryread } \
__asm { shrd ebx, eax, 8 } \
__asm { inc ecx } \
__asm { call i286_memoryread_w } \
__asm { shrd ebx, eax, 16 }
#define GET_NEXTPRE3a \
__asm { lea ecx, [esi + 4] } \
__asm { add ecx, CS_BASE } \
__asm { call i286_memoryread } \
__asm { shrd ebx, eax, 8 }
#define GET_NEXTPRE3b \
__asm { lea ecx, [esi + 4 + 1] } \
__asm { add si, 3 } \
__asm { add ecx, CS_BASE } \
__asm { call i286_memoryread_w } \
__asm { shrd ebx, eax, 16 }
#define GET_NEXTPRE4 \
__asm { add si, 4 } \
__asm { mov ecx, esi } \
__asm { add ecx, CS_BASE } \
__asm { call i286_memoryread_w } \
__asm { shl eax, 16 } \
__asm { mov ebx, eax } \
__asm { inc ecx } \
__asm { inc ecx } \
__asm { call i286_memoryread_w } \
__asm { shrd ebx, eax, 16 }
#define RESET_XPREFETCH \
__asm { mov ecx, esi } \
__asm { add ecx, CS_BASE } \
__asm { call i286_memoryread_w } \
__asm { shl eax, 16 } \
__asm { mov ebx, eax } \
__asm { inc ecx } \
__asm { inc ecx } \
__asm { call i286_memoryread_w } \
__asm { shrd ebx, eax, 16 }
#define REGPUSH(reg) \
__asm { mov dx, reg } \
__asm { sub I286_SP, 2 } \
__asm { movzx ecx, I286_SP } \
__asm { add ecx, SS_BASE } \
__asm { call i286_memorywrite_w }
#define REGPUSH1(reg) \
__asm { mov dx, reg } \
__asm { sub I286_SP, 2 } \
__asm { movzx ecx, I286_SP } \
__asm { add ecx, SS_BASE } \
__asm { jmp i286_memorywrite_w }
#define REGPOP(reg) \
__asm { movzx ecx, I286_SP } \
__asm { add ecx, SS_BASE } \
__asm { call i286_memoryread_w } \
__asm { mov reg, ax } \
__asm { add I286_SP, 2 }
#define INT_NUM(vect) \
__asm { movzx ebx, I286_SP } \
__asm { sub bx, 2 } \
__asm { mov edi, SS_BASE } \
__asm { lea ecx, [edi + ebx] } \
__asm { sub bx, 2 } \
__asm { mov dx, I286_FLAG } \
__asm { and I286_FLAG, not (T_FLAG or I_FLAG) } \
__asm { mov I286_TRAP, 0 } \
__asm { call i286_memorywrite_w } \
__asm { lea ecx, [edi + ebx] } \
__asm { sub bx, 2 } \
__asm { mov dx, I286_CS } \
__asm { call i286_memorywrite_w } \
__asm { mov I286_SP, bx } \
__asm { lea ecx, [edi + ebx] } \
__asm { mov dx, si } \
__asm { mov eax, dword ptr I286_MEM[vect*4] } \
__asm { mov si, ax } \
__asm { shr eax, 16 } \
__asm { mov I286_CS, ax } \
__asm { shl eax, 4 } \
__asm { mov CS_BASE, eax } \
__asm { call i286_memorywrite_w } \
RESET_XPREFETCH \
__asm { ret }
#define STRING_DIR \
__asm { xor eax, eax } \
__asm { test I286_FLAG, D_FLAG } \
__asm { setz al } \
__asm { add eax, eax } \
__asm { dec eax }
#define STRING_DIRx2 \
__asm { xor eax, eax } \
__asm { test I286_FLAG, D_FLAG } \
__asm { setz al } \
__asm { shl eax, 2 } \
__asm { sub eax, 2 }
RetroPC.NET-CVS <cvs@retropc.net>