⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpuemu_02.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "raine.h"#include "newmem.h"#include "readcpu.h"#include "newcpu.h"#include "cputbl.h"#pragma warning( disable : 4702 4100 )unsigned long op_4c40_0(UINT32 opcode) /* DIVL */{	UINT32 dstreg = opcode & 7;{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{	INT32 dst = m68k_dreg(regs, dstreg);m68k_incpc(2);	m68k_divl(opcode, dst, extra, oldpc);}}}}return 4;}unsigned long op_4c50_0(UINT32 opcode) /* DIVL */{	UINT32 dstreg = opcode & 7;{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{	unsigned int dsta = m68k_areg(regs, dstreg);{	INT32 dst = cpu_readmem24_dword(dsta);m68k_incpc(2);	m68k_divl(opcode, dst, extra, oldpc);}}}}}return 8;}unsigned long op_4c58_0(UINT32 opcode) /* DIVL */{	UINT32 dstreg = opcode & 7;{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{	unsigned int dsta = m68k_areg(regs, dstreg);{	INT32 dst = cpu_readmem24_dword(dsta);	m68k_areg(regs, dstreg) += 4;m68k_incpc(2);	m68k_divl(opcode, dst, extra, oldpc);}}}}}return 8;}unsigned long op_4c60_0(UINT32 opcode) /* DIVL */{	UINT32 dstreg = opcode & 7;{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{	unsigned int dsta = m68k_areg(regs, dstreg) - 4;{	INT32 dst = cpu_readmem24_dword(dsta);	m68k_areg (regs, dstreg) = dsta;m68k_incpc(2);	m68k_divl(opcode, dst, extra, oldpc);}}}}}return 9;}unsigned long op_4c68_0(UINT32 opcode) /* DIVL */{	UINT32 dstreg = opcode & 7;{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{	unsigned int dsta = m68k_areg(regs, dstreg) + (INT32)(INT16)get_iword(2);{	INT32 dst = cpu_readmem24_dword(dsta);m68k_incpc(4);	m68k_divl(opcode, dst, extra, oldpc);}}}}}return 10;}unsigned long op_4c70_0(UINT32 opcode) /* DIVL */{	UINT32 dstreg = opcode & 7;{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{m68k_incpc(2);{	unsigned int dsta = get_disp_ea_020(m68k_areg(regs, dstreg), next_iword());{	INT32 dst = cpu_readmem24_dword(dsta);	m68k_divl(opcode, dst, extra, oldpc);}}}}}}return 11;}unsigned long op_4c78_0(UINT32 opcode) /* DIVL */{{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{	unsigned int dsta = (INT32)(INT16)get_iword(2);{	INT32 dst = cpu_readmem24_dword(dsta);m68k_incpc(4);	m68k_divl(opcode, dst, extra, oldpc);}}}}}return 10;}unsigned long op_4c79_0(UINT32 opcode) /* DIVL */{{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{	unsigned int dsta = get_ilong(2);{	INT32 dst = cpu_readmem24_dword(dsta);m68k_incpc(6);	m68k_divl(opcode, dst, extra, oldpc);}}}}}return 12;}unsigned long op_4c7a_0(UINT32 opcode) /* DIVL */{{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{	unsigned int dsta = m68k_getpc () + 2;	dsta += (INT32)(INT16)get_iword(2);{	INT32 dst = cpu_readmem24_dword(dsta);m68k_incpc(4);	m68k_divl(opcode, dst, extra, oldpc);}}}}}return 10;}unsigned long op_4c7b_0(UINT32 opcode) /* DIVL */{{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{m68k_incpc(2);{	unsigned int tmppc = m68k_getpc();	unsigned int dsta = get_disp_ea_020(tmppc, next_iword());{	INT32 dst = cpu_readmem24_dword(dsta);	m68k_divl(opcode, dst, extra, oldpc);}}}}}}return 11;}unsigned long op_4c7c_0(UINT32 opcode) /* DIVL */{{m68k_incpc(2);{	unsigned int oldpc = m68k_getpc();{	INT16 extra = get_iword(0);{	INT32 dst = get_ilong(2);m68k_incpc(6);	m68k_divl(opcode, dst, extra, oldpc);}}}}return 8;}unsigned long op_4c90_0(UINT32 opcode) /* MVMEL */{	UINT32 dstreg = opcode & 7;{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = m68k_areg(regs, dstreg);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; amask = movem_next[amask]; }}}}m68k_incpc(4);return 4;}unsigned long op_4c98_0(UINT32 opcode) /* MVMEL */{	UINT32 dstreg = opcode & 7;{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = m68k_areg(regs, dstreg);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; amask = movem_next[amask]; }	m68k_areg(regs, dstreg) = srca;}}}m68k_incpc(4);return 4;}unsigned long op_4ca8_0(UINT32 opcode) /* MVMEL */{	UINT32 dstreg = opcode & 7;{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = m68k_areg(regs, dstreg) + (INT32)(INT16)get_iword(4);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; amask = movem_next[amask]; }}}}m68k_incpc(6);return 6;}unsigned long op_4cb0_0(UINT32 opcode) /* MVMEL */{	UINT32 dstreg = opcode & 7;{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{m68k_incpc(4);{	unsigned int srca = get_disp_ea_020(m68k_areg(regs, dstreg), next_iword());{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; amask = movem_next[amask]; }}}}}return 7;}unsigned long op_4cb8_0(UINT32 opcode) /* MVMEL */{	(void)(opcode);{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = (INT32)(INT16)get_iword(4);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; amask = movem_next[amask]; }}}}m68k_incpc(6);return 6;}unsigned long op_4cb9_0(UINT32 opcode) /* MVMEL */{	(void)(opcode);{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = get_ilong(4);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; amask = movem_next[amask]; }}}}m68k_incpc(8);return 8;}unsigned long op_4cba_0(UINT32 opcode) /* MVMEL */{	(void)(opcode);{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = m68k_getpc () + 4;	srca += (INT32)(INT16)get_iword(4);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; amask = movem_next[amask]; }}}}m68k_incpc(6);return 6;}unsigned long op_4cbb_0(UINT32 opcode) /* MVMEL */{	(void)(opcode);{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{m68k_incpc(4);{	unsigned int tmppc = m68k_getpc();	unsigned int srca = get_disp_ea_020(tmppc, next_iword());{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = (INT32)(INT16)cpu_readmem24_word(srca); srca += 2; amask = movem_next[amask]; }}}}}return 7;}unsigned long op_4cd0_0(UINT32 opcode) /* MVMEL */{	UINT32 dstreg = opcode & 7;{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = m68k_areg(regs, dstreg);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = cpu_readmem24_dword(srca); srca += 4; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = cpu_readmem24_dword(srca); srca += 4; amask = movem_next[amask]; }}}}m68k_incpc(4);return 4;}unsigned long op_4cd8_0(UINT32 opcode) /* MVMEL */{	UINT32 dstreg = opcode & 7;{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = m68k_areg(regs, dstreg);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = cpu_readmem24_dword(srca); srca += 4; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = cpu_readmem24_dword(srca); srca += 4; amask = movem_next[amask]; }	m68k_areg(regs, dstreg) = srca;}}}m68k_incpc(4);return 4;}unsigned long op_4ce8_0(UINT32 opcode) /* MVMEL */{	UINT32 dstreg = opcode & 7;{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = m68k_areg(regs, dstreg) + (INT32)(INT16)get_iword(4);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = cpu_readmem24_dword(srca); srca += 4; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = cpu_readmem24_dword(srca); srca += 4; amask = movem_next[amask]; }}}}m68k_incpc(6);return 6;}unsigned long op_4cf0_0(UINT32 opcode) /* MVMEL */{	UINT32 dstreg = opcode & 7;{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{m68k_incpc(4);{	unsigned int srca = get_disp_ea_020(m68k_areg(regs, dstreg), next_iword());{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = cpu_readmem24_dword(srca); srca += 4; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = cpu_readmem24_dword(srca); srca += 4; amask = movem_next[amask]; }}}}}return 7;}unsigned long op_4cf8_0(UINT32 opcode) /* MVMEL */{	(void)(opcode);{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = (INT32)(INT16)get_iword(4);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = cpu_readmem24_dword(srca); srca += 4; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = cpu_readmem24_dword(srca); srca += 4; amask = movem_next[amask]; }}}}m68k_incpc(6);return 6;}unsigned long op_4cf9_0(UINT32 opcode) /* MVMEL */{	(void)(opcode);{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = get_ilong(4);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = cpu_readmem24_dword(srca); srca += 4; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = cpu_readmem24_dword(srca); srca += 4; amask = movem_next[amask]; }}}}m68k_incpc(8);return 8;}unsigned long op_4cfa_0(UINT32 opcode) /* MVMEL */{	(void)(opcode);{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{	unsigned int srca = m68k_getpc () + 4;	srca += (INT32)(INT16)get_iword(4);{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = cpu_readmem24_dword(srca); srca += 4; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = cpu_readmem24_dword(srca); srca += 4; amask = movem_next[amask]; }}}}m68k_incpc(6);return 6;}unsigned long op_4cfb_0(UINT32 opcode) /* MVMEL */{	(void)(opcode);{	UINT16 mask = get_iword(2);	unsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;{m68k_incpc(4);{	unsigned int tmppc = m68k_getpc();	unsigned int srca = get_disp_ea_020(tmppc, next_iword());{	while (dmask) { m68k_dreg(regs, movem_index1[dmask]) = cpu_readmem24_dword(srca); srca += 4; dmask = movem_next[dmask]; }	while (amask) { m68k_areg(regs, movem_index1[amask]) = cpu_readmem24_dword(srca); srca += 4; amask = movem_next[amask]; }}}}}return 7;}unsigned long op_4e40_0(UINT32 opcode) /* TRAP */{	UINT32 srcreg = (opcode & 15);{{	UINT32 src = srcreg;m68k_incpc(2);	Exception(src+32,0);}}return 2;}unsigned long op_4e50_0(UINT32 opcode) /* LINK */{	UINT32 srcreg = (opcode & 7);{{	unsigned int olda = m68k_areg(regs, 7) - 4;	m68k_areg (regs, 7) = olda;{	INT32 src = m68k_areg(regs, srcreg);	cpu_writemem24_dword(olda,src);	m68k_areg(regs, srcreg) = (m68k_areg(regs, 7));{	INT16 offs = get_iword(2);	m68k_areg(regs, 7) += offs;}}}}m68k_incpc(4);return 9;}unsigned long op_4e58_0(UINT32 opcode) /* UNLK */{	UINT32 srcreg = (opcode & 7);{{	INT32 src = m68k_areg(regs, srcreg);	m68k_areg(regs, 7) = src;{	unsigned int olda = m68k_areg(regs, 7);{	INT32 old = cpu_readmem24_dword(olda);	m68k_areg(regs, 7) += 4;	m68k_areg(regs, srcreg) = (old);}}}}m68k_incpc(2);return 6;}unsigned long op_4e60_0(UINT32 opcode) /* MVR2USP */{	UINT32 srcreg = (opcode & 7);{if (!regs.s) { Exception(8,0); goto endlabel901; }{{	INT32 src = m68k_areg(regs, srcreg);	regs.usp = src;}}}m68k_incpc(2);endlabel901: ;return 2;}unsigned long op_4e68_0(UINT32 opcode) /* MVUSP2R */{	UINT32 srcreg = (opcode & 7);{if (!regs.s) { Exception(8,0); goto endlabel902; }{{	m68k_areg(regs, srcreg) = (regs.usp);}}}m68k_incpc(2);endlabel902: ;return 2;}unsigned long op_4e70_0(UINT32 opcode) /* RESET */{	(void)(opcode);{if (!regs.s) { Exception(8,0); goto endlabel903; }}m68k_incpc(2);endlabel903: ;return 2;}unsigned long op_4e71_0(UINT32 opcode) /* NOP */{	(void)(opcode);{}m68k_incpc(2);return 2;}unsigned long op_4e72_0(UINT32 opcode) /* STOP */{	(void)(opcode);{if (!regs.s) { Exception(8,0); goto endlabel905; }{{	INT16 src = get_iword(2);	regs.sr = src;	MakeFromSR();	m68k_setstopped(1);}}}m68k_incpc(4);endlabel905: ;return 4;}unsigned long op_4e73_0(UINT32 opcode) /* RTE */{	(void)(opcode);{if (!regs.s) { Exception(8,0); goto endlabel906; }{	UINT16 newsr; UINT32 newpc; for (;;) {{	unsigned int sra = m68k_areg(regs, 7);{	INT16 sr = cpu_readmem24_word(sra);	m68k_areg(regs, 7) += 2;{	unsigned int pca = m68k_areg(regs, 7);{	INT32 pc = cpu_readmem24_dword(pca);	m68k_areg(regs, 7) += 4;{	unsigned int formata = m68k_areg(regs, 7);{	INT16 format = cpu_readmem24_word(formata);	m68k_areg(regs, 7) += 2;	newsr = sr; newpc = pc;	if ((format & 0xF000) == 0x0000) { break; }	else if ((format & 0xF000) == 0x1000) { ; }	else if ((format & 0xF000) == 0x2000) { m68k_areg(regs, 7) += 4; break; }	else if ((format & 0xF000) == 0x8000) { m68k_areg(regs, 7) += 50; break; }	else if ((format & 0xF000) == 0x9000) { m68k_areg(regs, 7) += 12; break; }	else if ((format & 0xF000) == 0xa000) { m68k_areg(regs, 7) += 24; break; }	else if ((format & 0xF000) == 0xb000) { m68k_areg(regs, 7) += 84; break; }	else { Exception(14,0); goto endlabel906; }	regs.sr = newsr; MakeFromSR();}}}}}}}	regs.sr = newsr; MakeFromSR();	m68k_setpc_rte(newpc);}}endlabel906: ;return 10;}unsigned long op_4e74_0(UINT32 opcode) /* RTD */{	(void)(opcode);{{	unsigned int pca = m68k_areg(regs, 7);{	INT32 pc = cpu_readmem24_dword(pca);	m68k_areg(regs, 7) += 4;{	INT16 offs = get_iword(2);	m68k_areg(regs, 7) += offs;	m68k_setpc_rte(pc);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -