mirror of
				https://github.com/RaySollium99/picodrive.git
				synced 2025-10-27 21:48:50 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			40133 lines
		
	
	
	
		
			559 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			40133 lines
		
	
	
	
		
			559 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| #define NOT_POLLING ctx->not_polling = 1;
 | |
| #else
 | |
| #define NOT_POLLING
 | |
| #endif
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x001F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x005F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x0098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x00A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x00A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x00B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(34)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x00B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x00B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(36)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x009F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ORI
 | |
| OPCODE(0x00A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ORICCR
 | |
| OPCODE(0x003C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	res &= M68K_CCR_MASK;
 | |
| 	res |= GET_CCR;
 | |
| 	SET_CCR(res)
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORISR
 | |
| OPCODE(0x007C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		u32 res;
 | |
| 		FETCH_WORD(res);
 | |
| 		res &= M68K_SR_MASK;
 | |
| 		res |= GET_SR;
 | |
| 		SET_SR(res)
 | |
| 		CHECK_INT_TO_JUMP(20)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| 		RET(0)
 | |
| #else
 | |
| 		RET(4)
 | |
| #endif
 | |
| 	}
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0200)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0210)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0218)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0220)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0228)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0230)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0238)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0239)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x021F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0227)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0240)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0250)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0258)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0260)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0268)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0270)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0278)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0279)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x025F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0267)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0280)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(14)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0290)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x0298)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x02A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x02A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x02B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(34)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x02B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x02B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(36)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x029F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ANDI
 | |
| OPCODE(0x02A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ANDICCR
 | |
| OPCODE(0x023C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	res &= M68K_CCR_MASK;
 | |
| 	res &= GET_CCR;
 | |
| 	SET_CCR(res)
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDISR
 | |
| OPCODE(0x027C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		FETCH_WORD(res);
 | |
| 		res &= M68K_SR_MASK;
 | |
| 		res &= GET_SR;
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		CHECK_INT_TO_JUMP(20)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A10)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A18)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A20)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A28)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A30)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A38)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A39)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A1F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A27)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A40)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A50)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A58)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A60)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A68)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A70)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A78)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A79)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A5F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A67)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A80)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A90)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A98)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0AA0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0AA8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0AB0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(34)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0AB8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0AB9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(36)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0A9F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // EORI
 | |
| OPCODE(0x0AA7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // EORICCR
 | |
| OPCODE(0x0A3C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	res &= M68K_CCR_MASK;
 | |
| 	res ^= GET_CCR;
 | |
| 	SET_CCR(res)
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORISR
 | |
| OPCODE(0x0A7C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		FETCH_WORD(res);
 | |
| 		res &= M68K_SR_MASK;
 | |
| 		res ^= GET_SR;
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		CHECK_INT_TO_JUMP(20)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(0)
 | |
| 	}
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0400)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	dst = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0410)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0418)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0420)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0428)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0430)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0438)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0439)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x041F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0427)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0440)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	dst = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0450)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0458)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0460)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0468)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0470)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0478)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0479)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x045F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0467)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0480)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	dst = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0490)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x0498)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x04A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x04A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x04B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(34)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x04B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x04B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(36)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x049F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // SUBI
 | |
| OPCODE(0x04A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0600)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	dst = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0610)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0618)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0620)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0628)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0630)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0638)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0639)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x061F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0627)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0640)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	dst = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0650)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0658)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0660)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0668)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0670)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0678)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0679)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x065F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0667)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0680)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	dst = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0690)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x0698)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x06A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x06A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x06B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(34)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x06B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x06B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(36)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x069F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ADDI
 | |
| OPCODE(0x06A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	dst = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C10)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C18)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C20)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C28)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C30)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C38)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C39)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C1F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C27)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C40)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	dst = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C50)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C58)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C60)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C68)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C70)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C78)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C79)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C5F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C67)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C80)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	dst = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C90)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C98)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0CA0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0CA8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0CB0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0CB8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0CB9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0C9F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMPI
 | |
| OPCODE(0x0CA7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x0800)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 31);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_NotZ = res & src;
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x0810)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x0818)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x0820)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x0828)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x0830)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x0838)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x0839)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x083A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x083B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x081F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BTSTn
 | |
| OPCODE(0x0827)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x0840)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 31);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x0850)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x0858)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x0860)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x0868)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x0870)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x0878)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x0879)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x085F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCHGn
 | |
| OPCODE(0x0867)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x0880)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 31);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x0890)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x0898)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x08A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x08A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x08B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x08B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x08B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x089F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCLRn
 | |
| OPCODE(0x08A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 31);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BSETn
 | |
| OPCODE(0x08E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x0100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 31);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_NotZ = res & src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x0110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x0118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x0120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x0128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x0130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x0138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x0139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x013A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x013B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x013C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_NotZ = res & src;
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x011F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BTST
 | |
| OPCODE(0x0127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x0140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 31);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x0150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x0158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x0160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x0168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x0170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x0178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x0179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x015F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCHG
 | |
| OPCODE(0x0167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res ^= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x0180)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 31);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x0190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x0198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x01A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x01A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x01B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x01B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x01B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x019F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCLR
 | |
| OPCODE(0x01A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res &= ~src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 31);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BSET
 | |
| OPCODE(0x01E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	src = 1 << (src & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_NotZ = res & src;
 | |
| 	res |= src;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEPWaD
 | |
| OPCODE(0x0108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr + 0, res)
 | |
| 	READ_BYTE_F(adr + 2, src)
 | |
| 	DREGu16((Opcode >> 9) & 7) = (res << 8) | src;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(24)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEPLaD
 | |
| OPCODE(0x0148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res <<= 24;
 | |
| 	adr += 2;
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res |= src << 16;
 | |
| 	adr += 2;
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res |= src << 8;
 | |
| 	adr += 2;
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	DREG((Opcode >> 9) & 7) = res | src;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(24)
 | |
| #else
 | |
| RET(32)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEPWDa
 | |
| OPCODE(0x0188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr + 0, res >> 8)
 | |
| 	WRITE_BYTE_F(adr + 2, res >> 0)
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(24)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEPLDa
 | |
| OPCODE(0x01C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res >> 24)
 | |
| 	adr += 2;
 | |
| 	WRITE_BYTE_F(adr, res >> 16)
 | |
| 	adr += 2;
 | |
| 	WRITE_BYTE_F(adr, res >> 8)
 | |
| 	adr += 2;
 | |
| 	WRITE_BYTE_F(adr, res >> 0)
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(24)
 | |
| #else
 | |
| RET(32)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1180)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| #if 0
 | |
| // MOVEB
 | |
| OPCODE(0x1008)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| */
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1088)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| */
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| */
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| */
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| */
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| */
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| */
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| */
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EC8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| */
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F08)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| */
 | |
| RET(8)
 | |
| }
 | |
| #endif
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1ED0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F10)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1ED8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F18)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F20)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F28)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F30)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F38)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F39)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x103A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x113A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x117A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EFA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F3A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x103B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x113B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x117B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EFB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F3B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = (uptr)(PC) - BasePC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x103C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x113C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x117C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EFC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F3C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x101F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x109F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x111F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x115F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x119F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EDF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F1F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x10E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x11E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x13E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1EE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEB
 | |
| OPCODE(0x1F27)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2180)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2008)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2088)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EC8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F08)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2ED0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F10)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2ED8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F18)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F20)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F28)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(34)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F30)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F38)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(34)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(36)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F39)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x203A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x213A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x217A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EFA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F3A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x203B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x213B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x217B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(32)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(34)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EFB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F3B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x203C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x213C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x217C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EFC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F3C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x201F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x209F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x211F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x215F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x219F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EDF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F1F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x20E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x21E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x23E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2EE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEL
 | |
| OPCODE(0x2F27)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_LONG_DEC_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = (s32)DREGs32((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2048)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = (s32)AREGs32((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x207A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x207B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x207C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(res);
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x205F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEAL
 | |
| OPCODE(0x2067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3180)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3008)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3088)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EC8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F08)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3ED0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F10)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3ED8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F18)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F20)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F28)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F30)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F38)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F39)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x303A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x313A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x317A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EFA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F3A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x303B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x313B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x317B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EFB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F3B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x303C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x313C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x317C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EFC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F3C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x301F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x309F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x311F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x315F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x319F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EDF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F1F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x30E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 9) & 7);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x31E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x33E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	FETCH_LONG(adr);
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3EE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEW
 | |
| OPCODE(0x3F27)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = (s32)DREGs16((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3048)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = (s32)AREGs16((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x307A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x307B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x307C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(res);
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x305F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEAW
 | |
| OPCODE(0x3067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, res)
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x401F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x405F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) | (src >> 1) | (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x4098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x40A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x40A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x40B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x40B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x40B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x409F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEGX
 | |
| OPCODE(0x40A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| flag_X = flag_C = (res?1:0)<<8;
 | |
| //	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4200)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4210)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4218)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4220)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4228)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4230)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4238)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4239)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x421F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4227)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4240)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4250)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4258)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4260)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4268)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4270)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4278)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4279)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x425F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4267)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4280)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4290)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x4298)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x42A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x42A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x42B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x42B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x42B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x429F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CLR
 | |
| OPCODE(0x42A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	res = 0;
 | |
| 	flag_N = flag_NotZ = flag_V = flag_C = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4400)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4410)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4418)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4420)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4428)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4430)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4438)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4439)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x441F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4427)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = res & src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4440)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4450)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4458)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4460)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4468)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4470)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4478)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4479)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x445F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4467)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_V = (res & src) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4480)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4490)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x4498)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x44A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x44A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x44B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x44B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x44B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x449F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NEG
 | |
| OPCODE(0x44A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = -src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = (res & src) >> 24;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4600)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4610)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4618)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4620)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4628)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4630)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4638)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4639)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x461F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4627)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res;
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4640)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4650)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4658)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4660)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4668)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4670)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4678)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4679)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x465F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4667)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4680)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4690)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x4698)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x46A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x46A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x46B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x46B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x46B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x469F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NOT
 | |
| OPCODE(0x46A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = ~src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVESRa
 | |
| OPCODE(0x40E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = GET_SR;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	SET_CCR(res)
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	SET_CCR(res)
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEaCCR
 | |
| OPCODE(0x44E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	SET_CCR(res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		res = DREGu16((Opcode >> 0) & 7);
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		CHECK_INT_TO_JUMP(12)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		adr = AREG((Opcode >> 0) & 7);
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(16)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		adr = AREG((Opcode >> 0) & 7);
 | |
| 		AREG((Opcode >> 0) & 7) += 2;
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(16)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 		AREG((Opcode >> 0) & 7) = adr;
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(18)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		FETCH_SWORD(adr);
 | |
| 		adr += AREG((Opcode >> 0) & 7);
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(20)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		adr = AREG((Opcode >> 0) & 7);
 | |
| 		DECODE_EXT_WORD
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(22)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		FETCH_SWORD(adr);
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(20)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		FETCH_LONG(adr);
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(24)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		adr = GET_SWORD + GET_PC;
 | |
| 		PC++;
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(20)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		adr = GET_PC;
 | |
| 		DECODE_EXT_WORD
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(22)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		FETCH_WORD(res);
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		CHECK_INT_TO_JUMP(16)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		adr = AREG(7);
 | |
| 		AREG(7) += 2;
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(16)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // MOVEaSR
 | |
| OPCODE(0x46E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_S)
 | |
| 	{
 | |
| 		adr = AREG(7) - 2;
 | |
| 		AREG(7) = adr;
 | |
| 		PRE_IO
 | |
| 		READ_WORD_F(adr, res)
 | |
| 		SET_SR(res)
 | |
| 		if (!flag_S)
 | |
| 		{
 | |
| 			res = AREG(7);
 | |
| 			AREG(7) = ASP;
 | |
| 			ASP = res;
 | |
| 		}
 | |
| 		POST_IO
 | |
| 		CHECK_INT_TO_JUMP(18)
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x4800)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	dst = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		DREGu8((Opcode >> 0) & 7) = res;
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x4810)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		WRITE_BYTE_F(adr, res)
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x4818)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		WRITE_BYTE_F(adr, res)
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x4820)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		WRITE_BYTE_F(adr, res)
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x4828)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		WRITE_BYTE_F(adr, res)
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x4830)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		WRITE_BYTE_F(adr, res)
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x4838)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		WRITE_BYTE_F(adr, res)
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x4839)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		WRITE_BYTE_F(adr, res)
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x481F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		WRITE_BYTE_F(adr, res)
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // NBCD
 | |
| OPCODE(0x4827)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 
 | |
| 	if (res != 0)
 | |
| 	{
 | |
| 		flag_V = res;
 | |
| 		if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
 | |
| 		res = (res + 0x9a) & 0xFF;
 | |
| 		WRITE_BYTE_F(adr, res)
 | |
| 		flag_V &= ~res;
 | |
| 		flag_NotZ |= res;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_V = flag_X = flag_C = 0;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // PEA
 | |
| OPCODE(0x4850)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	PUSH_32_F(adr)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // PEA
 | |
| OPCODE(0x4868)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	PUSH_32_F(adr)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // PEA
 | |
| OPCODE(0x4870)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	PUSH_32_F(adr)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // PEA
 | |
| OPCODE(0x4878)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	PUSH_32_F(adr)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // PEA
 | |
| OPCODE(0x4879)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	PUSH_32_F(adr)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // PEA
 | |
| OPCODE(0x487A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	PUSH_32_F(adr)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // PEA
 | |
| OPCODE(0x487B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	PUSH_32_F(adr)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SWAP
 | |
| OPCODE(0x4840)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = (res >> 16) | (res << 16);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x4890)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(8)
 | |
| #else
 | |
| RET(12)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &AREGu32(7);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			adr -= 2;
 | |
| 			WRITE_WORD_F(adr, *psrc)
 | |
| 		}
 | |
| 		psrc--;
 | |
| 	} while (res >>= 1);
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (dst - adr) * 2;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(20)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(14)
 | |
| #else
 | |
| RET(24)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(20)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_LONG(adr);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(28)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG(7);
 | |
| 	psrc = &AREGu32(7);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			adr -= 2;
 | |
| 			WRITE_WORD_F(adr, *psrc)
 | |
| 		}
 | |
| 		psrc--;
 | |
| 	} while (res >>= 1);
 | |
| 	AREG(7) = adr;
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (dst - adr) * 2;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(8)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &AREGu32(7);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			adr -= 4;
 | |
| 			WRITE_LONG_DEC_F(adr, *psrc)
 | |
| 		}
 | |
| 		psrc--;
 | |
| 	} while (res >>= 1);
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (dst - adr) * 2;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(24)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(14)
 | |
| #else
 | |
| RET(28)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(24)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_LONG(adr);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			WRITE_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(32)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMRa
 | |
| OPCODE(0x48E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG(7);
 | |
| 	psrc = &AREGu32(7);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			adr -= 4;
 | |
| 			WRITE_LONG_DEC_F(adr, *psrc)
 | |
| 		}
 | |
| 		psrc--;
 | |
| 	} while (res >>= 1);
 | |
| 	AREG(7) = adr;
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (dst - adr) * 2;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // EXT
 | |
| OPCODE(0x4880)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = (s32)DREGs8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // EXT
 | |
| OPCODE(0x48C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = (s32)DREGs16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A10)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A18)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A20)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A28)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A30)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A38)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A39)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A1F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A27)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A40)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A50)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A58)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A60)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A68)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A70)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A78)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A79)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A5F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A67)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A80)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A90)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A98)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4AA0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4AA8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4AB0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4AB8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4AB9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4A9F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // TST
 | |
| OPCODE(0x4AA7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4AC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	res |= 0x80;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4AD0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	if (ctx == &PicoCpuFS68k) {
 | |
| 		res |= 0x80;
 | |
| 		WRITE_BYTE_F(adr, res);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(8)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4AD8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	if (ctx == &PicoCpuFS68k) {
 | |
| 		res |= 0x80;
 | |
| 		WRITE_BYTE_F(adr, res);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(8)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4AE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	if (ctx == &PicoCpuFS68k) {
 | |
| 		res |= 0x80;
 | |
| 		WRITE_BYTE_F(adr, res);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(20)
 | |
| #else
 | |
| RET(10)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4AE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	if (ctx == &PicoCpuFS68k) {
 | |
| 		res |= 0x80;
 | |
| 		WRITE_BYTE_F(adr, res);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(22)
 | |
| #else
 | |
| RET(12)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4AF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	if (ctx == &PicoCpuFS68k) {
 | |
| 		res |= 0x80;
 | |
| 		WRITE_BYTE_F(adr, res);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(24)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4AF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	if (ctx == &PicoCpuFS68k) {
 | |
| 		res |= 0x80;
 | |
| 		WRITE_BYTE_F(adr, res);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(22)
 | |
| #else
 | |
| RET(12)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4AF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	if (ctx == &PicoCpuFS68k) {
 | |
| 		res |= 0x80;
 | |
| 		WRITE_BYTE_F(adr, res);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(26)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4ADF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	if (ctx == &PicoCpuFS68k) {
 | |
| 		res |= 0x80;
 | |
| 		WRITE_BYTE_F(adr, res);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(8)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // TAS
 | |
| OPCODE(0x4AE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	if (ctx == &PicoCpuFS68k) {
 | |
| 		res |= 0x80;
 | |
| 		WRITE_BYTE_F(adr, res);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(20)
 | |
| #else
 | |
| RET(8)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ILLEGAL
 | |
| OPCODE(0x4AFC)
 | |
| {
 | |
| #ifdef PICODRIVE_HACK
 | |
| 	extern void SekFinishIdleDet(void);
 | |
| 	SekFinishIdleDet();
 | |
| #endif
 | |
| 	SET_PC(execute_exception(ctx, M68K_ILLEGAL_INSTRUCTION_EX, GET_PC-2, GET_SR));
 | |
| RET(0)
 | |
| }
 | |
| 
 | |
| // ILLEGAL A000-AFFF
 | |
| OPCODE(0xA000)
 | |
| {
 | |
| 	SET_PC(execute_exception(ctx, M68K_1010_EX, GET_PC-2, GET_SR));
 | |
| RET(0)
 | |
| }
 | |
| 
 | |
| // ILLEGAL F000-FFFF
 | |
| OPCODE(0xF000)
 | |
| {
 | |
| 	SET_PC(execute_exception(ctx, M68K_1111_EX, GET_PC-2, GET_SR));
 | |
| RET(0) // 4 already taken by exc. handler
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4C90)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	s32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGs32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READSX_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4C98)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	s32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGs32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READSX_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CA8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	s32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGs32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READSX_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(24)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CB0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	s32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	psrc = &DREGs32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READSX_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(28)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CB8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	s32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	psrc = &DREGs32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READSX_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(24)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CB9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	s32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_LONG(adr);
 | |
| 	psrc = &DREGs32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READSX_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(20)
 | |
| #else
 | |
| RET(32)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CBA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	s32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	psrc = &DREGs32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READSX_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(24)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CBB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	s32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	psrc = &DREGs32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READSX_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(28)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4C9F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	s32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG(7);
 | |
| 	psrc = &DREGs32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READSX_WORD_F(adr, *psrc)
 | |
| 			adr += 2;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	AREG(7) = adr;
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CD0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READ_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(20)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CD8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READ_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READ_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(28)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READ_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(32)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READ_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(28)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	FETCH_LONG(adr);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READ_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(20)
 | |
| #else
 | |
| RET(36)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CFA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READ_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(28)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CFB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READ_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(32)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MOVEMaR
 | |
| OPCODE(0x4CDF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 *psrc;
 | |
| 
 | |
| 	FETCH_WORD(res);
 | |
| 	adr = AREG(7);
 | |
| 	psrc = &DREGu32(0);
 | |
| 	dst = adr;
 | |
| 	PRE_IO
 | |
| 	do
 | |
| 	{
 | |
| 		if (res & 1)
 | |
| 		{
 | |
| 			READ_LONG_F(adr, *psrc)
 | |
| 			adr += 4;
 | |
| 		}
 | |
| 		psrc++;
 | |
| 	} while (res >>= 1);
 | |
| 	AREG(7) = adr;
 | |
| 	POST_IO
 | |
| 	ctx->io_cycle_counter -= (adr - dst) * 2;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // TRAP
 | |
| OPCODE(0x4E40)
 | |
| {
 | |
| 	SET_PC(execute_exception(ctx, M68K_TRAP_BASE_EX + (Opcode & 0xF), GET_PC, GET_SR));
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // LINK
 | |
| OPCODE(0x4E50)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	PUSH_32_F(res)
 | |
| 	res = AREG(7);
 | |
| 	AREG((Opcode >> 0) & 7) = res;
 | |
| 	FETCH_SWORD(res);
 | |
| 	AREG(7) += res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // LINKA7
 | |
| OPCODE(0x4E57)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	AREG(7) -= 4;
 | |
| 	PRE_IO
 | |
| 	WRITE_LONG_DEC_F(AREG(7), AREG(7))
 | |
| 	FETCH_SWORD(res);
 | |
| 	AREG(7) += res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ULNK
 | |
| OPCODE(0x4E58)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = AREGu32((Opcode >> 0) & 7);
 | |
| 	AREG(7) = src + 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(src, res)
 | |
| 	AREG((Opcode >> 0) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ULNKA7
 | |
| OPCODE(0x4E5F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(AREG(7), AREG(7))
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // MOVEAUSP
 | |
| OPCODE(0x4E60)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!flag_S)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	ASP = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // MOVEUSPA
 | |
| OPCODE(0x4E68)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!flag_S)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| 	res = ASP;
 | |
| 	AREG((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // RESET
 | |
| OPCODE(0x4E70)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!flag_S)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| 	PRE_IO
 | |
| 	if (ctx->reset_handler) ctx->reset_handler();
 | |
| //	CPU->Reset_CallBack();
 | |
| 	POST_IO
 | |
| RET(132)
 | |
| }
 | |
| 
 | |
| // NOP
 | |
| OPCODE(0x4E71)
 | |
| {
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // STOP
 | |
| OPCODE(0x4E72)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!flag_S)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| 	FETCH_WORD(res);
 | |
| 	res &= M68K_SR_MASK;
 | |
| 	SET_SR(res)
 | |
| 	if (!flag_S)
 | |
| 	{
 | |
| 		res = AREG(7);
 | |
| 		AREG(7) = ASP;
 | |
| 		ASP = res;
 | |
| 	}
 | |
| 	ctx->execinfo |= FM68K_HALTED;
 | |
| RET0()
 | |
| }
 | |
| 
 | |
| // RTE
 | |
| OPCODE(0x4E73)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!flag_S)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
 | |
| 		RET(4)
 | |
| 	}
 | |
| 	PRE_IO
 | |
| 	POP_16_F(res)
 | |
| 	SET_SR(res)
 | |
| 	POP_32_F(res)
 | |
| 	SET_PC(res)
 | |
| 	if (!flag_S)
 | |
| 	{
 | |
| 		res = AREG(7);
 | |
| 		AREG(7) = ASP;
 | |
| 		ASP = res;
 | |
| 	}
 | |
| 	CHECK_BRANCH_EXCEPTION(res)
 | |
| 	POST_IO
 | |
| 	ctx->execinfo &= ~(FM68K_EMULATE_GROUP_0|FM68K_EMULATE_TRACE|FM68K_DO_TRACE);
 | |
| 	CHECK_INT_TO_JUMP(20)
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // RTS
 | |
| OPCODE(0x4E75)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	PRE_IO
 | |
| 	POP_32_F(res)
 | |
| 	SET_PC(res)
 | |
| 	CHECK_BRANCH_EXCEPTION(res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // TRAPV
 | |
| OPCODE(0x4E76)
 | |
| {
 | |
| 	if (flag_V & 0x80)
 | |
| 		SET_PC(execute_exception(ctx, M68K_TRAPV_EX, GET_PC, GET_SR));
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // RTR
 | |
| OPCODE(0x4E77)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	PRE_IO
 | |
| 	POP_16_F(res)
 | |
| 	SET_CCR(res)
 | |
| 	POP_32_F(res)
 | |
| 	SET_PC(res)
 | |
| 	CHECK_BRANCH_EXCEPTION(res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // JSR
 | |
| OPCODE(0x4E90)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	{
 | |
| 		u32 oldPC;
 | |
| 
 | |
| 		oldPC = GET_PC;
 | |
| 	PRE_IO
 | |
| 		PUSH_32_F(oldPC)
 | |
| 	}
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // JSR
 | |
| OPCODE(0x4EA8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	{
 | |
| 		u32 oldPC;
 | |
| 
 | |
| 		oldPC = GET_PC;
 | |
| 	PRE_IO
 | |
| 		PUSH_32_F(oldPC)
 | |
| 	}
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // JSR
 | |
| OPCODE(0x4EB0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	{
 | |
| 		u32 oldPC;
 | |
| 
 | |
| 		oldPC = GET_PC;
 | |
| 	PRE_IO
 | |
| 		PUSH_32_F(oldPC)
 | |
| 	}
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // JSR
 | |
| OPCODE(0x4EB8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	{
 | |
| 		u32 oldPC;
 | |
| 
 | |
| 		oldPC = GET_PC;
 | |
| 	PRE_IO
 | |
| 		PUSH_32_F(oldPC)
 | |
| 	}
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // JSR
 | |
| OPCODE(0x4EB9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	{
 | |
| 		u32 oldPC;
 | |
| 
 | |
| 		oldPC = GET_PC;
 | |
| 	PRE_IO
 | |
| 		PUSH_32_F(oldPC)
 | |
| 	}
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // JSR
 | |
| OPCODE(0x4EBA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	{
 | |
| 		u32 oldPC;
 | |
| 
 | |
| 		oldPC = GET_PC;
 | |
| 	PRE_IO
 | |
| 		PUSH_32_F(oldPC)
 | |
| 	}
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // JSR
 | |
| OPCODE(0x4EBB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	{
 | |
| 		u32 oldPC;
 | |
| 
 | |
| 		oldPC = GET_PC;
 | |
| 	PRE_IO
 | |
| 		PUSH_32_F(oldPC)
 | |
| 	}
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // JMP
 | |
| OPCODE(0x4ED0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // JMP
 | |
| OPCODE(0x4EE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // JMP
 | |
| OPCODE(0x4EF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // JMP
 | |
| OPCODE(0x4EF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // JMP
 | |
| OPCODE(0x4EF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // JMP
 | |
| OPCODE(0x4EFA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // JMP
 | |
| OPCODE(0x4EFB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	SET_PC(adr)
 | |
| 	CHECK_BRANCH_EXCEPTION(adr)
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x4180)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 
 | |
| 	src = DREGs16((Opcode >> 0) & 7);
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x4190)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x4198)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x41A0)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x41A8)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x41B0)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x41B8)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x41B9)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x41BA)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x41BB)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x41BC)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	FETCH_SWORD(src);
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x419F)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CHK
 | |
| OPCODE(0x41A7)
 | |
| {
 | |
| 	s32 src, res;
 | |
| 	u32 adr;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = DREGs16((Opcode >> 9) & 7);
 | |
| 	if ((res < 0) || (res > src))
 | |
| 	{
 | |
| 		flag_N = res >> 8;
 | |
| 		SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // LEA
 | |
| OPCODE(0x41D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	res = adr;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // LEA
 | |
| OPCODE(0x41E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	res = adr;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // LEA
 | |
| OPCODE(0x41F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	res = adr;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // LEA
 | |
| OPCODE(0x41F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	res = adr;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // LEA
 | |
| OPCODE(0x41F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	res = adr;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // LEA
 | |
| OPCODE(0x41FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	res = adr;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // LEA
 | |
| OPCODE(0x41FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	res = adr;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5AC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5EC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FC0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(4)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5AD0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BD0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CD0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DD0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5ED0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FD0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5AD8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BD8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CD8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DD8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5ED8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FD8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5AE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5EE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FE0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5AE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5EE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FE8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5AF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5EF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FF0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(18)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5AF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5EF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FF8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(16)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5AF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5EF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FF9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(20)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5ADF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BDF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CDF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DDF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5EDF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FDF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(12)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x50E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x51E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x52E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x53E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x54E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x55E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x56E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x57E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x58E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x59E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5AE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5BE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5CE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5DE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5EE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // STCC
 | |
| OPCODE(0x5FE7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = 0xFF;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| 	}
 | |
| 	res = 0;
 | |
| 	PRE_IO
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| 	RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x50C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x51C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x52C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x53C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x54C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x55C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x56C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x57C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x58C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x59C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x5AC8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x5BC8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x5CC8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x5DC8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x5EC8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // DBCC
 | |
| OPCODE(0x5FC8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	NOT_POLLING
 | |
| 
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res--;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	if ((s32)res != -1)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	RET(10)
 | |
| 	}
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		PC++;
 | |
| 	RET(12)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x501F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5048)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = AREGu32((Opcode >> 0) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x505F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5088)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = AREGu32((Opcode >> 0) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x5098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x50A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x50A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x50B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x50B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x50B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x509F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDQ
 | |
| OPCODE(0x50A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x511F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = AREGu32((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x515F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5180)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	dst = AREGu32((Opcode >> 0) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x5198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x51A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x51A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x51B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x51B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x51B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x519F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBQ
 | |
| OPCODE(0x51A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6201)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6301)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6401)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6501)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6601)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6701)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6801)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6901)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6A01)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6B01)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6C01)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6D01)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6E01)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6F01)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 	ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6200)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_NotZ && (!(flag_C & 0x100)))
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6300)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if ((!flag_NotZ) || (flag_C & 0x100))
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6400)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!(flag_C & 0x100))
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6500)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_C & 0x100)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6600)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6700)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6800)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!(flag_V & 0x80))
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6900)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_V & 0x80)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6A00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!(flag_N & 0x80))
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6B00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_N & 0x80)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6C00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (!((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6D00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if ((flag_N ^ flag_V) & 0x80)
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6E00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BCC16
 | |
| OPCODE(0x6F00)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	PC++;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // BRA
 | |
| OPCODE(0x6001)
 | |
| {
 | |
| #ifdef FAMEC_CHECK_BRANCHES
 | |
| 	u32 newPC = GET_PC;
 | |
| 	s8 offs=Opcode;
 | |
| 	newPC += offs;
 | |
| 	SET_PC(newPC);
 | |
| 	CHECK_BRANCH_EXCEPTION(offs)
 | |
| #else
 | |
| 	PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| #endif
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // BRA16
 | |
| OPCODE(0x6000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	{
 | |
| 		u32 newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	}
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // BSR
 | |
| OPCODE(0x6101)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 oldPC;
 | |
| 	s8 offs;
 | |
| 
 | |
| 	PRE_IO
 | |
| 
 | |
| 	oldPC = GET_PC;
 | |
| 	PUSH_32_F(oldPC)
 | |
| #ifdef FAMEC_CHECK_BRANCHES
 | |
| 	offs = Opcode;
 | |
| 	oldPC += offs;
 | |
| 	SET_PC(oldPC);
 | |
| 	CHECK_BRANCH_EXCEPTION(offs)
 | |
| #else
 | |
| 	PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| #endif
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // BSR16
 | |
| OPCODE(0x6100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	PRE_IO
 | |
| 	{
 | |
| 		u32 oldPC, newPC;
 | |
| 
 | |
| 		newPC = GET_PC;
 | |
| 		oldPC = newPC + 2;
 | |
| 		PUSH_32_F(oldPC)
 | |
| 		newPC += GET_SWORD;
 | |
| 		SET_PC(newPC);
 | |
| 		CHECK_BRANCH_EXCEPTION(newPC)
 | |
| 	}
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MOVEQ
 | |
| OPCODE(0x7000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = (s32)(s8)Opcode;
 | |
| 	flag_C = flag_V = 0;
 | |
| 	flag_N = flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x803A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x803B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x803C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x801F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x807A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x807B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x807C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x805F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x8098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x80A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x80A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x80B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x80B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x80B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x80BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x80BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x80BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x809F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORaD
 | |
| OPCODE(0x80A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x811F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x815F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x8198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x81A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x81A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x81B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x81B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x81B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x819F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ORDa
 | |
| OPCODE(0x81A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res |= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // SBCD
 | |
| OPCODE(0x8100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 0xF) corf = 6;
 | |
| 	res += (dst & 0xF0) - (src & 0xF0);
 | |
| 	flag_V = res;
 | |
| 	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
 | |
| 	if (res > 0xff) res += 0xA0;
 | |
| 	res = (res - corf) & 0xFF;
 | |
| 	flag_V &= ~res;
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // SBCDM
 | |
| OPCODE(0x8108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 0xF) corf = 6;
 | |
| 	res += (dst & 0xF0) - (src & 0xF0);
 | |
| 	flag_V = res;
 | |
| 	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
 | |
| 	if (res > 0xff) res += 0xA0;
 | |
| 	res = (res - corf) & 0xFF;
 | |
| 	flag_V &= ~res;
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SBCD7M
 | |
| OPCODE(0x810F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 0xF) corf = 6;
 | |
| 	res += (dst & 0xF0) - (src & 0xF0);
 | |
| 	flag_V = res;
 | |
| 	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
 | |
| 	if (res > 0xff) res += 0xA0;
 | |
| 	res = (res - corf) & 0xFF;
 | |
| 	flag_V &= ~res;
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SBCDM7
 | |
| OPCODE(0x8F08)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 0xF) corf = 6;
 | |
| 	res += (dst & 0xF0) - (src & 0xF0);
 | |
| 	flag_V = res;
 | |
| 	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
 | |
| 	if (res > 0xff) res += 0xA0;
 | |
| 	res = (res - corf) & 0xFF;
 | |
| 	flag_V &= ~res;
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SBCD7M7
 | |
| OPCODE(0x8F0F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 0xF) corf = 6;
 | |
| 	res += (dst & 0xF0) - (src & 0xF0);
 | |
| 	flag_V = res;
 | |
| 	flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
 | |
| 	if (res > 0xff) res += 0xA0;
 | |
| 	res = (res - corf) & 0xFF;
 | |
| 	flag_V &= ~res;
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(140)
 | |
| #else
 | |
| RET(10)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(140)
 | |
| #else
 | |
| RET(70)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(140)
 | |
| #else
 | |
| RET(90)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| 	RET(74)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| RET(94)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| 	RET(74)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| RET(94)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(146)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(146)
 | |
| #else
 | |
| 	RET(76)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(146)
 | |
| #else
 | |
| RET(96)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(148)
 | |
| #else
 | |
| RET(18)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(148)
 | |
| #else
 | |
| 	RET(78)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(148)
 | |
| #else
 | |
| RET(98)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(150)
 | |
| #else
 | |
| RET(20)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(150)
 | |
| #else
 | |
| 	RET(80)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(150)
 | |
| #else
 | |
| RET(100)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(148)
 | |
| #else
 | |
| RET(18)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(148)
 | |
| #else
 | |
| 	RET(78)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(148)
 | |
| #else
 | |
| RET(98)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(152)
 | |
| #else
 | |
| RET(22)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(152)
 | |
| #else
 | |
| 	RET(82)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(152)
 | |
| #else
 | |
| RET(102)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(148)
 | |
| #else
 | |
| RET(18)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(148)
 | |
| #else
 | |
| 	RET(78)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(148)
 | |
| #else
 | |
| RET(98)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(150)
 | |
| #else
 | |
| RET(20)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(150)
 | |
| #else
 | |
| 	RET(80)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(150)
 | |
| #else
 | |
| RET(100)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| 	RET(74)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| RET(94)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| 	RET(74)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(144)
 | |
| #else
 | |
| RET(94)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVU
 | |
| OPCODE(0x80E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(146)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	{
 | |
| 		u32 q, r;
 | |
| 
 | |
| 		q = dst / src;
 | |
| 		r = dst % src;
 | |
| 
 | |
| 		if (q & 0xFFFF0000)
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(146)
 | |
| #else
 | |
| 	RET(76)
 | |
| #endif
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| RET(146)
 | |
| #else
 | |
| RET(96)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)DREGs16((Opcode >> 0) & 7);
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81C0;
 | |
| #endif
 | |
| 		RET(10)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81C0;
 | |
| #endif
 | |
| 	RET(50)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81C0;
 | |
| #endif
 | |
| 	RET(80)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81C0: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(108)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81D0;
 | |
| #endif
 | |
| 		RET(14)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81D0;
 | |
| #endif
 | |
| 	RET(54)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81D0;
 | |
| #endif
 | |
| 	RET(84)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81D0: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(112)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81D8;
 | |
| #endif
 | |
| 		RET(14)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81D8;
 | |
| #endif
 | |
| 	RET(54)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81D8;
 | |
| #endif
 | |
| 	RET(84)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81D8: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(112)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81E0;
 | |
| #endif
 | |
| 		RET(16)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81E0;
 | |
| #endif
 | |
| 	RET(56)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81E0;
 | |
| #endif
 | |
| 	RET(86)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81E0: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(114)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81E8;
 | |
| #endif
 | |
| 		RET(18)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81E8;
 | |
| #endif
 | |
| 	RET(58)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81E8;
 | |
| #endif
 | |
| 	RET(88)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81E8: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(116)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81F0;
 | |
| #endif
 | |
| 		RET(20)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81F0;
 | |
| #endif
 | |
| 	RET(60)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81F0;
 | |
| #endif
 | |
| 	RET(90)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81F0: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(118)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81F8;
 | |
| #endif
 | |
| 		RET(18)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81F8;
 | |
| #endif
 | |
| 	RET(58)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81F8;
 | |
| #endif
 | |
| 	RET(88)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81F8: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(116)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81F9;
 | |
| #endif
 | |
| 		RET(22)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81F9;
 | |
| #endif
 | |
| 	RET(62)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81F9;
 | |
| #endif
 | |
| 	RET(92)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81F9: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(120)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81FA;
 | |
| #endif
 | |
| 		RET(18)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81FA;
 | |
| #endif
 | |
| 	RET(58)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81FA;
 | |
| #endif
 | |
| 	RET(88)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81FA: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(116)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81FB;
 | |
| #endif
 | |
| 		RET(20)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81FB;
 | |
| #endif
 | |
| 	RET(60)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81FB;
 | |
| #endif
 | |
| 	RET(90)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81FB: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(118)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(src);
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81FC;
 | |
| #endif
 | |
| 		RET(14)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81FC;
 | |
| #endif
 | |
| 	RET(54)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81FC;
 | |
| #endif
 | |
| 	RET(84)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81FC: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(112)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81DF;
 | |
| #endif
 | |
| 		RET(14)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81DF;
 | |
| #endif
 | |
| 	RET(54)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81DF;
 | |
| #endif
 | |
| 	RET(84)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81DF: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(112)
 | |
| }
 | |
| 
 | |
| // DIVS
 | |
| OPCODE(0x81E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	if (src == 0)
 | |
| 	{
 | |
| 		SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81E7;
 | |
| #endif
 | |
| 		RET(16)
 | |
| 	}
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	if ((dst == 0x80000000) && (src == (u32)-1))
 | |
| 	{
 | |
| 		flag_NotZ = flag_N = 0;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81E7;
 | |
| #endif
 | |
| 	RET(56)
 | |
| 	}
 | |
| 	{
 | |
| 		s32 q, r;
 | |
| 
 | |
| 		q = (s32)dst / (s32)src;
 | |
| 		r = (s32)dst % (s32)src;
 | |
| 
 | |
| 		if ((q > 0x7FFF) || (q < -0x8000))
 | |
| 		{
 | |
| 			flag_V = M68K_SR_V;
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| goto end81E7;
 | |
| #endif
 | |
| 	RET(86)
 | |
| 		}
 | |
| 		q &= 0x0000FFFF;
 | |
| 		flag_NotZ = q;
 | |
| 		flag_N = q >> 8;
 | |
| 		flag_V = flag_C = 0;
 | |
| 		res = q | (r << 16);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	}
 | |
| #ifdef USE_CYCLONE_TIMING_DIV
 | |
| end81E7: ctx->io_cycle_counter -= 50;
 | |
| #endif
 | |
| RET(114)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| #if 0
 | |
| OPCODE(0x9008)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| */
 | |
| RET(4)
 | |
| }
 | |
| #endif
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x903A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x903B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x903C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x901F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9048)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = AREGu16((Opcode >> 0) & 7);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x907A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x907B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x907C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x905F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9088)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = AREGu32((Opcode >> 0) & 7);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x9098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x90A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x90A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x90B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x90B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x90B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x90BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x90BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x90BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x909F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBaD
 | |
| OPCODE(0x90A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x911F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x915F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x9198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x91A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x91A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x91B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x91B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x91B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x919F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBDa
 | |
| OPCODE(0x91A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // SUBX
 | |
| OPCODE(0x9100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // SUBX
 | |
| OPCODE(0x9140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // SUBX
 | |
| OPCODE(0x9180)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBXM
 | |
| OPCODE(0x9108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBXM
 | |
| OPCODE(0x9148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBXM
 | |
| OPCODE(0x9188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // SUBX7M
 | |
| OPCODE(0x910F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBX7M
 | |
| OPCODE(0x914F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBX7M
 | |
| OPCODE(0x918F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // SUBXM7
 | |
| OPCODE(0x9F08)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBXM7
 | |
| OPCODE(0x9F48)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBXM7
 | |
| OPCODE(0x9F88)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // SUBX7M7
 | |
| OPCODE(0x9F0F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBX7M7
 | |
| OPCODE(0x9F4F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBX7M7
 | |
| OPCODE(0x9F8F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src - ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)DREGs16((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)AREGs16((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(10)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(10)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(14)
 | |
| #else
 | |
| RET(12)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(20)
 | |
| #else
 | |
| RET(18)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(src);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(10)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x90E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(14)
 | |
| #else
 | |
| RET(12)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)DREGs32((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(8)
 | |
| #else
 | |
| RET(6)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)AREGs32((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(8)
 | |
| #else
 | |
| RET(6)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // SUBA
 | |
| OPCODE(0x91E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| #if 0
 | |
| OPCODE(0xB008)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| */
 | |
| RET(4)
 | |
| }
 | |
| #endif
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB03A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB03B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB03C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB01F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB048)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = AREGu16((Opcode >> 0) & 7);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB07A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB07B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB07C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB05F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB088)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = AREGu32((Opcode >> 0) & 7);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB0A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB0A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB0B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB0B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB0B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB0BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB0BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB0BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB09F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMP
 | |
| OPCODE(0xB0A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMPM
 | |
| OPCODE(0xB108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPM
 | |
| OPCODE(0xB148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPM
 | |
| OPCODE(0xB188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMP7M
 | |
| OPCODE(0xB10F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 1;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP7M
 | |
| OPCODE(0xB14F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 2;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP7M
 | |
| OPCODE(0xB18F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) += 4;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMPM7
 | |
| OPCODE(0xBF08)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPM7
 | |
| OPCODE(0xBF48)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPM7
 | |
| OPCODE(0xBF88)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMP7M7
 | |
| OPCODE(0xBF0F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_N = flag_C = res;
 | |
| 	flag_V = (src ^ dst) & (res ^ dst);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP7M7
 | |
| OPCODE(0xBF4F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
 | |
| 	flag_N = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMP7M7
 | |
| OPCODE(0xBF8F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = DREGu8((Opcode >> 0) & 7);
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB11F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = DREGu16((Opcode >> 0) & 7);
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB15F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB180)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB1A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB1A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB1B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB1B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB1B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB19F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // EORDa
 | |
| OPCODE(0xB1A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res ^= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)DREGs16((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)AREGs16((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(src);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB0E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)DREGs32((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)AREGs32((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // CMPA
 | |
| OPCODE(0xB1E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst - src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC03A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC03B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC03C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC01F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	res = DREGu8((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC07A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC07B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC07C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC05F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC0A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC0A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC0B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC0B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC0B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC0BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC0BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC0BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC09F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDaD
 | |
| OPCODE(0xC0A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	res = DREGu32((Opcode >> 9) & 7);
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC11F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC15F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 8;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC1A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC1A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC1B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC1B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC1B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC19F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ANDDa
 | |
| OPCODE(0xC1A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, res)
 | |
| 	res &= src;
 | |
| 	flag_C = 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ABCD
 | |
| OPCODE(0xC100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 9) corf = 6;
 | |
| 	res += (dst & 0xF0) + (src & 0xF0);
 | |
| 	flag_V = ~res;
 | |
| 	res += corf;
 | |
| 	if (res > 0x9F)
 | |
| 	{
 | |
| 		res -= 0xA0;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_X = flag_C = 0;
 | |
| 	flag_V &= res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	flag_N = res;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ABCDM
 | |
| OPCODE(0xC108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 9) corf = 6;
 | |
| 	res += (dst & 0xF0) + (src & 0xF0);
 | |
| 	flag_V = ~res;
 | |
| 	res += corf;
 | |
| 	if (res > 0x9F)
 | |
| 	{
 | |
| 		res -= 0xA0;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_X = flag_C = 0;
 | |
| 	flag_V &= res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ABCD7M
 | |
| OPCODE(0xC10F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 9) corf = 6;
 | |
| 	res += (dst & 0xF0) + (src & 0xF0);
 | |
| 	flag_V = ~res;
 | |
| 	res += corf;
 | |
| 	if (res > 0x9F)
 | |
| 	{
 | |
| 		res -= 0xA0;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_X = flag_C = 0;
 | |
| 	flag_V &= res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ABCDM7
 | |
| OPCODE(0xCF08)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 9) corf = 6;
 | |
| 	res += (dst & 0xF0) + (src & 0xF0);
 | |
| 	flag_V = ~res;
 | |
| 	res += corf;
 | |
| 	if (res > 0x9F)
 | |
| 	{
 | |
| 		res -= 0xA0;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_X = flag_C = 0;
 | |
| 	flag_V &= res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ABCD7M7
 | |
| OPCODE(0xCF0F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 	u32 corf = 0;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
 | |
| 	if (res > 9) corf = 6;
 | |
| 	res += (dst & 0xF0) + (src & 0xF0);
 | |
| 	flag_V = ~res;
 | |
| 	res += corf;
 | |
| 	if (res > 0x9F)
 | |
| 	{
 | |
| 		res -= 0xA0;
 | |
| 		flag_X = flag_C = M68K_SR_C;
 | |
| 	}
 | |
| 	else flag_X = flag_C = 0;
 | |
| 	flag_V &= res;
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	flag_N = res;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(54)
 | |
| #else
 | |
| RET(50)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(58)
 | |
| #else
 | |
| RET(54)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(58)
 | |
| #else
 | |
| RET(54)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(60)
 | |
| #else
 | |
| RET(56)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(62)
 | |
| #else
 | |
| RET(58)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(64)
 | |
| #else
 | |
| RET(60)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(62)
 | |
| #else
 | |
| RET(58)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(66)
 | |
| #else
 | |
| RET(62)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(62)
 | |
| #else
 | |
| RET(58)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(64)
 | |
| #else
 | |
| RET(60)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(58)
 | |
| #else
 | |
| RET(54)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(58)
 | |
| #else
 | |
| RET(54)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULU
 | |
| OPCODE(0xC0E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	res = DREGu16((Opcode >> 9) & 7);
 | |
| 	res *= src;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(60)
 | |
| #else
 | |
| RET(56)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)DREGs16((Opcode >> 0) & 7);
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(54)
 | |
| #else
 | |
| RET(50)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(58)
 | |
| #else
 | |
| RET(54)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(58)
 | |
| #else
 | |
| RET(54)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(60)
 | |
| #else
 | |
| RET(56)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(62)
 | |
| #else
 | |
| RET(58)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(64)
 | |
| #else
 | |
| RET(60)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(62)
 | |
| #else
 | |
| RET(58)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(66)
 | |
| #else
 | |
| RET(62)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(62)
 | |
| #else
 | |
| RET(58)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(64)
 | |
| #else
 | |
| RET(60)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(src);
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(58)
 | |
| #else
 | |
| RET(54)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(58)
 | |
| #else
 | |
| RET(54)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // MULS
 | |
| OPCODE(0xC1E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	res = (s32)DREGs16((Opcode >> 9) & 7);
 | |
| 	res = ((s32)res) * ((s32)src);
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_V = flag_C = 0;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(60)
 | |
| #else
 | |
| RET(56)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // EXGDD
 | |
| OPCODE(0xC140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = DREGu32((Opcode >> 0) & 7);
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	res = src;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // EXGAA
 | |
| OPCODE(0xC148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	src = AREGu32((Opcode >> 9) & 7);
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	res = src;
 | |
| 	AREG((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // EXGAD
 | |
| OPCODE(0xC188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	res = AREGu32((Opcode >> 0) & 7);
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	res = src;
 | |
| 	AREG((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| #if 0
 | |
| OPCODE(0xD008)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	// can't read byte from Ax registers !
 | |
| 	ctx->execinfo |= M68K_FAULTED;
 | |
| 	ctx->io_cycle_counter = 0;
 | |
| /*
 | |
| 	goto famec_Exec_End;
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| */
 | |
| RET(4)
 | |
| }
 | |
| #endif
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD039)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD03A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD03B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD03C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_BYTE(src);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD01F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD027)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD048)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = AREGu16((Opcode >> 0) & 7);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD079)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD07A)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD07B)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD07C)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_WORD(src);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD05F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD067)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(10)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD088)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = AREGu32((Opcode >> 0) & 7);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD0A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD0A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD0B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD0B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD0B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD0BA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD0BB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD0BC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD09F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDaD
 | |
| OPCODE(0xD0A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 1;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD139)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD11F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD127)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ = res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD179)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD15F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD167)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ = res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD1A0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD1A8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD1B0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(26)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD1B8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(24)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD1B9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(28)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD19F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDDa
 | |
| OPCODE(0xD1A7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 9) & 7);
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src;
 | |
| 	flag_NotZ = res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ADDX
 | |
| OPCODE(0xD100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	dst = DREGu8((Opcode >> 9) & 7);
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	DREGu8((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ADDX
 | |
| OPCODE(0xD140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	dst = DREGu16((Opcode >> 9) & 7);
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	DREGu16((Opcode >> 9) & 7) = res;
 | |
| RET(4)
 | |
| }
 | |
| 
 | |
| // ADDX
 | |
| OPCODE(0xD180)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	dst = DREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	DREGu32((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDXM
 | |
| OPCODE(0xD108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDXM
 | |
| OPCODE(0xD148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDXM
 | |
| OPCODE(0xD188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ADDX7M
 | |
| OPCODE(0xD10F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 1;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDX7M
 | |
| OPCODE(0xD14F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 2;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDX7M
 | |
| OPCODE(0xD18F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG((Opcode >> 9) & 7) - 4;
 | |
| 	AREG((Opcode >> 9) & 7) = adr;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ADDXM7
 | |
| OPCODE(0xDF08)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 1;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDXM7
 | |
| OPCODE(0xDF48)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDXM7
 | |
| OPCODE(0xDF88)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ADDX7M7
 | |
| OPCODE(0xDF0F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_BYTE_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_BYTE_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_N = flag_X = flag_C = res;
 | |
| 	flag_V = (src ^ res) & (dst ^ res);
 | |
| 	flag_NotZ |= res & 0xFF;
 | |
| 	WRITE_BYTE_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDX7M7
 | |
| OPCODE(0xDF4F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_WORD_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 8;
 | |
| 	flag_N = flag_X = flag_C = res >> 8;
 | |
| 	flag_NotZ |= res & 0xFFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDX7M7
 | |
| OPCODE(0xDF8F)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_LONG_F(adr, src)
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	READ_LONG_F(adr, dst)
 | |
| 	res = dst + src + ((flag_X >> 8) & 1);
 | |
| 	flag_NotZ |= res;
 | |
| 	flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
 | |
| 	flag_V = ((src ^ res) & (dst ^ res)) >> 24;
 | |
| 	flag_N = res >> 24;
 | |
| 	WRITE_LONG_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(30)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)DREGs16((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)AREGs16((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(10)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(10)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(14)
 | |
| #else
 | |
| RET(12)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(20)
 | |
| #else
 | |
| RET(18)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(18)
 | |
| #else
 | |
| RET(16)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(src);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(12)
 | |
| #else
 | |
| RET(10)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD0E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_WORD_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(14)
 | |
| #else
 | |
| RET(12)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1C0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)DREGs32((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(8)
 | |
| #else
 | |
| RET(6)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1C8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	src = (s32)AREGs32((Opcode >> 0) & 7);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(8)
 | |
| #else
 | |
| RET(6)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 4;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 4;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(22)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1FA)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_SWORD + GET_PC;
 | |
| 	PC++;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1FB)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = GET_PC;
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1FC)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(src);
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| RET(16)
 | |
| #else
 | |
| RET(14)
 | |
| #endif
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 4;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ADDA
 | |
| OPCODE(0xD1E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 4;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READSX_LONG_F(adr, src)
 | |
| 	dst = AREGu32((Opcode >> 9) & 7);
 | |
| 	res = dst + src;
 | |
| 	AREG((Opcode >> 9) & 7) = res;
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ASRk
 | |
| OPCODE(0xE000)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = (s32)DREGs8((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	res = ((s32)src) >> sft;
 | |
| 	flag_N = res >> 0;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ASRk
 | |
| OPCODE(0xE040)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = (s32)DREGs16((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	res = ((s32)src) >> sft;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ASRk
 | |
| OPCODE(0xE080)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = (s32)DREGs32((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	res = ((s32)src) >> sft;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // LSRk
 | |
| OPCODE(0xE008)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	res = src >> sft;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // LSRk
 | |
| OPCODE(0xE048)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	res = src >> sft;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // LSRk
 | |
| OPCODE(0xE088)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	res = src >> sft;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ROXRk
 | |
| OPCODE(0xE010)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	src |= (flag_X & M68K_SR_X) << 0;
 | |
| 	res = (src >> sft) | (src << (9 - sft));
 | |
| 	flag_X = flag_C = res >> 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res >> 0;
 | |
| 	flag_NotZ = res & 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROXRk
 | |
| OPCODE(0xE050)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	src |= (flag_X & M68K_SR_X) << 8;
 | |
| 	res = (src >> sft) | (src << (17 - sft));
 | |
| 	flag_X = flag_C = res >> 8;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROXRk
 | |
| OPCODE(0xE090)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
 | |
| 	else res = (src >> sft) | (src << (33 - sft)) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + sft)));
 | |
| 	flag_X = flag_C;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // RORk
 | |
| OPCODE(0xE018)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	res = (src >> sft) | (src << (8 - sft));
 | |
| 	flag_N = res >> 0;
 | |
| 	flag_NotZ = res & 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // RORk
 | |
| OPCODE(0xE058)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	res = (src >> sft) | (src << (16 - sft));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // RORk
 | |
| OPCODE(0xE098)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 	res = (src >> sft) | (src << (32 - sft));
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ASLk
 | |
| OPCODE(0xE100)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	if (sft < 8)
 | |
| 	{
 | |
| 		flag_X = flag_C = src << (0 + sft);
 | |
| 		res = src << sft;
 | |
| 		flag_N = res >> 0;
 | |
| 		flag_NotZ = res & 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 		flag_V = 0;
 | |
| 		if ((sft > 7) && (src)) flag_V = M68K_SR_V;
 | |
| 		else
 | |
| 		{
 | |
| 			u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF;
 | |
| 			src &= msk;
 | |
| 			if ((src) && (src != msk)) flag_V = M68K_SR_V;
 | |
| 		}
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	if (src) flag_V = M68K_SR_V;
 | |
| 	else flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	flag_N = 0;
 | |
| 	flag_NotZ = 0;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ASLk
 | |
| OPCODE(0xE140)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 		flag_X = flag_C = src >> (8 - sft);
 | |
| 		res = src << sft;
 | |
| 		flag_N = res >> 8;
 | |
| 		flag_NotZ = res & 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 		flag_V = 0;
 | |
| 		{
 | |
| 			u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF;
 | |
| 			src &= msk;
 | |
| 			if ((src) && (src != msk)) flag_V = M68K_SR_V;
 | |
| 		}
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ASLk
 | |
| OPCODE(0xE180)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 		flag_X = flag_C = src >> (24 - sft);
 | |
| 		res = src << sft;
 | |
| 		flag_N = res >> 24;
 | |
| 		flag_NotZ = res & 0xFFFFFFFF;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 		flag_V = 0;
 | |
| 		{
 | |
| 			u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF;
 | |
| 			src &= msk;
 | |
| 			if ((src) && (src != msk)) flag_V = M68K_SR_V;
 | |
| 		}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // LSLk
 | |
| OPCODE(0xE108)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << (0 + sft);
 | |
| 	res = src << sft;
 | |
| 	flag_N = res >> 0;
 | |
| 	flag_NotZ = res & 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // LSLk
 | |
| OPCODE(0xE148)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> (8 - sft);
 | |
| 	res = src << sft;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // LSLk
 | |
| OPCODE(0xE188)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> (24 - sft);
 | |
| 	res = src << sft;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res & 0xFFFFFFFF;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ROXLk
 | |
| OPCODE(0xE110)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	src |= (flag_X & M68K_SR_X) << 0;
 | |
| 	res = (src << sft) | (src >> (9 - sft));
 | |
| 	flag_X = flag_C = res >> 0;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res >> 0;
 | |
| 	flag_NotZ = res & 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROXLk
 | |
| OPCODE(0xE150)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	src |= (flag_X & M68K_SR_X) << 8;
 | |
| 	res = (src << sft) | (src >> (17 - sft));
 | |
| 	flag_X = flag_C = res >> 8;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROXLk
 | |
| OPCODE(0xE190)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_C = src >> ((32 - M68K_SR_C_SFT) - sft);
 | |
| 	if (sft == 1) res = (src << 1) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - 1));
 | |
| 	else res = (src << sft) | (src >> (33 - sft)) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - sft));
 | |
| 	flag_X = flag_C;
 | |
| 	flag_V = 0;
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ROLk
 | |
| OPCODE(0xE118)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << (0 + sft);
 | |
| 	res = (src << sft) | (src >> (8 - sft));
 | |
| 	flag_N = res >> 0;
 | |
| 	flag_NotZ = res & 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROLk
 | |
| OPCODE(0xE158)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> (8 - sft);
 | |
| 	res = (src << sft) | (src >> (16 - sft));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROLk
 | |
| OPCODE(0xE198)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = (((Opcode >> 9) - 1) & 7) + 1;
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> (24 - sft);
 | |
| 	res = (src << sft) | (src >> (32 - sft));
 | |
| 	flag_N = res >> 24;
 | |
| 	flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| // ASRD
 | |
| OPCODE(0xE020)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = (s32)DREGs8((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft < 8)
 | |
| 		{
 | |
| 			flag_V = 0;
 | |
| 			flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 			res = ((s32)src) >> sft;
 | |
| 			flag_N = res >> 0;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		if (src & (1 << 7))
 | |
| 		{
 | |
| 			flag_N = M68K_SR_N;
 | |
| 			flag_NotZ = 1;
 | |
| 			flag_V = 0;
 | |
| 			flag_C = M68K_SR_C;
 | |
| 			flag_X = M68K_SR_X;
 | |
| 			res = 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 		flag_V = 0;
 | |
| 		flag_C = 0;
 | |
| 		flag_X = 0;
 | |
| 		res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 0;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ASRD
 | |
| OPCODE(0xE060)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = (s32)DREGs16((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft < 16)
 | |
| 		{
 | |
| 			flag_V = 0;
 | |
| 			flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
 | |
| 			res = ((s32)src) >> sft;
 | |
| 			flag_N = res >> 8;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		if (src & (1 << 15))
 | |
| 		{
 | |
| 			flag_N = M68K_SR_N;
 | |
| 			flag_NotZ = 1;
 | |
| 			flag_V = 0;
 | |
| 			flag_C = M68K_SR_C;
 | |
| 			flag_X = M68K_SR_X;
 | |
| 			res = 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 		flag_V = 0;
 | |
| 		flag_C = 0;
 | |
| 		flag_X = 0;
 | |
| 		res = 0;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 8;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ASRD
 | |
| OPCODE(0xE0A0)
 | |
| {
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| #define CYC 8
 | |
| #else
 | |
| #define CYC 6
 | |
| #endif
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = (s32)DREGs32((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft < 32)
 | |
| 		{
 | |
| 			flag_V = 0;
 | |
| 			flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
 | |
| 			res = ((s32)src) >> sft;
 | |
| 			flag_N = res >> 24;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 		}
 | |
| 
 | |
| 		if (src & (1 << 31))
 | |
| 		{
 | |
| 			flag_N = M68K_SR_N;
 | |
| 			flag_NotZ = 1;
 | |
| 			flag_V = 0;
 | |
| 			flag_C = M68K_SR_C;
 | |
| 			flag_X = M68K_SR_X;
 | |
| 			res = 0xFFFFFFFF;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 		}
 | |
| 
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 		flag_V = 0;
 | |
| 		flag_C = 0;
 | |
| 		flag_X = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 24;
 | |
| 	flag_NotZ = src;
 | |
| RET(CYC)
 | |
| #undef CYC
 | |
| }
 | |
| 
 | |
| // LSRD
 | |
| OPCODE(0xE028)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft <= 8)
 | |
| 		{
 | |
| 			flag_N = flag_V = 0;
 | |
| 			flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
 | |
| 			res = src >> sft;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		flag_X = flag_C = 0;
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 		flag_V = 0;
 | |
| 		res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 0;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // LSRD
 | |
| OPCODE(0xE068)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft <= 16)
 | |
| 		{
 | |
| 			flag_N = flag_V = 0;
 | |
| 			flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
 | |
| 			res = src >> sft;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		flag_X = flag_C = 0;
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 		flag_V = 0;
 | |
| 		res = 0;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 8;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // LSRD
 | |
| OPCODE(0xE0A8)
 | |
| {
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| #define CYC 8
 | |
| #else
 | |
| #define CYC 6
 | |
| #endif
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft < 32)
 | |
| 		{
 | |
| 			flag_N = flag_V = 0;
 | |
| 			flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
 | |
| 			res = src >> sft;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 		}
 | |
| 
 | |
| 		if (sft == 32) flag_C = src >> (31 - M68K_SR_C_SFT);
 | |
| 		else flag_C = 0;
 | |
| 		flag_X = flag_C;
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 		flag_V = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 24;
 | |
| 	flag_NotZ = src;
 | |
| RET(CYC)
 | |
| #undef CYC
 | |
| }
 | |
| 
 | |
| // ROXRD
 | |
| OPCODE(0xE030)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		sft %= 9;
 | |
| 
 | |
| 		src |= (flag_X & M68K_SR_X) << 0;
 | |
| 		res = (src >> sft) | (src << (9 - sft));
 | |
| 		flag_X = flag_C = res >> 0;
 | |
| 		flag_V = 0;
 | |
| 		flag_N = res >> 0;
 | |
| 		flag_NotZ = res & 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = flag_X;
 | |
| 	flag_N = src >> 0;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROXRD
 | |
| OPCODE(0xE070)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		sft %= 17;
 | |
| 
 | |
| 		src |= (flag_X & M68K_SR_X) << 8;
 | |
| 		res = (src >> sft) | (src << (17 - sft));
 | |
| 		flag_X = flag_C = res >> 8;
 | |
| 		flag_V = 0;
 | |
| 		flag_N = res >> 8;
 | |
| 		flag_NotZ = res & 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = flag_X;
 | |
| 	flag_N = src >> 8;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROXRD
 | |
| OPCODE(0xE0B0)
 | |
| {
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| #define CYC 8
 | |
| #else
 | |
| #define CYC 6
 | |
| #endif
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		sft %= 33;
 | |
| 
 | |
| 		if (sft != 0)
 | |
| 		{
 | |
| 			if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
 | |
| 			else res = (src >> sft) | (src << (33 - sft)) | (((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1))) >> (sft - 1));
 | |
| 			flag_X = (src >> (sft - 1)) << M68K_SR_X_SFT;
 | |
| 		}
 | |
| 		else res = src;
 | |
| 		flag_C = flag_X;
 | |
| 		flag_V = 0;
 | |
| 		flag_N = res >> 24;
 | |
| 		flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = flag_X;
 | |
| 	flag_N = src >> 24;
 | |
| 	flag_NotZ = src;
 | |
| RET(CYC)
 | |
| #undef CYC
 | |
| }
 | |
| 
 | |
| // RORD
 | |
| OPCODE(0xE038)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		sft &= 0x07;
 | |
| 
 | |
| 		flag_C = src << (M68K_SR_C_SFT - ((sft - 1) & 7));
 | |
| 		res = (src >> sft) | (src << (8 - sft));
 | |
| 		flag_V = 0;
 | |
| 		flag_N = res >> 0;
 | |
| 		flag_NotZ = res & 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 0;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // RORD
 | |
| OPCODE(0xE078)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		sft &= 0x0F;
 | |
| 
 | |
| 		flag_C = (src >> ((sft - 1) & 15)) << M68K_SR_C_SFT;
 | |
| 		res = (src >> sft) | (src << (16 - sft));
 | |
| 		flag_V = 0;
 | |
| 		flag_N = res >> 8;
 | |
| 		flag_NotZ = res & 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 8;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // RORD
 | |
| OPCODE(0xE0B8)
 | |
| {
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| #define CYC 8
 | |
| #else
 | |
| #define CYC 6
 | |
| #endif
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		sft &= 0x1F;
 | |
| 
 | |
| 		flag_C = (src >> ((sft - 1) & 31)) << M68K_SR_C_SFT;
 | |
| 		res = (src >> sft) | (src << (32 - sft));
 | |
| 		flag_V = 0;
 | |
| 		flag_N = res >> 24;
 | |
| 		flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 24;
 | |
| 	flag_NotZ = src;
 | |
| RET(CYC)
 | |
| #undef CYC
 | |
| }
 | |
| 
 | |
| // ASLD
 | |
| OPCODE(0xE120)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft < 8)
 | |
| 		{
 | |
| 			flag_X = flag_C = (src << sft) >> 0;
 | |
| 			res = (src << sft) & 0x000000FF;
 | |
| 			flag_N = res >> 0;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 			flag_V = 0;
 | |
| 			{
 | |
| 				u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF;
 | |
| 				src &= msk;
 | |
| 				if ((src) && (src != msk)) flag_V = M68K_SR_V;
 | |
| 			}
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		if (sft == 256) flag_C = src << M68K_SR_C_SFT;
 | |
| 		else flag_C = 0;
 | |
| 		flag_X = flag_C;
 | |
| 		if (src) flag_V = M68K_SR_V;
 | |
| 		else flag_V = 0;
 | |
| 		res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 0;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ASLD
 | |
| OPCODE(0xE160)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft < 16)
 | |
| 		{
 | |
| 			flag_X = flag_C = (src << sft) >> 8;
 | |
| 			res = (src << sft) & 0x0000FFFF;
 | |
| 			flag_N = res >> 8;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 			flag_V = 0;
 | |
| 			{
 | |
| 				u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF;
 | |
| 				src &= msk;
 | |
| 				if ((src) && (src != msk)) flag_V = M68K_SR_V;
 | |
| 			}
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		if (sft == 65536) flag_C = src << M68K_SR_C_SFT;
 | |
| 		else flag_C = 0;
 | |
| 		flag_X = flag_C;
 | |
| 		if (src) flag_V = M68K_SR_V;
 | |
| 		else flag_V = 0;
 | |
| 		res = 0;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 8;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ASLD
 | |
| OPCODE(0xE1A0)
 | |
| {
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| #define CYC 8
 | |
| #else
 | |
| #define CYC 6
 | |
| #endif
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft < 32)
 | |
| 		{
 | |
| 			flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
 | |
| 			res = src << sft;
 | |
| 			flag_N = res >> 24;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 			flag_V = 0;
 | |
| 			{
 | |
| 				u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF;
 | |
| 				src &= msk;
 | |
| 				if ((src) && (src != msk)) flag_V = M68K_SR_V;
 | |
| 			}
 | |
| 	RET(CYC)
 | |
| 		}
 | |
| 
 | |
| 		if (sft == 0) flag_C = src << M68K_SR_C_SFT;
 | |
| 		else flag_C = 0;
 | |
| 		flag_X = flag_C;
 | |
| 		if (src) flag_V = M68K_SR_V;
 | |
| 		else flag_V = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 	RET(CYC)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 24;
 | |
| 	flag_NotZ = src;
 | |
| RET(CYC)
 | |
| #undef CYC
 | |
| }
 | |
| 
 | |
| // LSLD
 | |
| OPCODE(0xE128)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft <= 8)
 | |
| 		{
 | |
| 			flag_X = flag_C = (src << sft) >> 0;
 | |
| 			res = (src << sft) & 0x000000FF;
 | |
| 			flag_V = 0;
 | |
| 			flag_N = res >> 0;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		flag_X = flag_C = 0;
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 		flag_V = 0;
 | |
| 		res = 0;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 0;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // LSLD
 | |
| OPCODE(0xE168)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft <= 16)
 | |
| 		{
 | |
| 			flag_X = flag_C = (src << sft) >> 8;
 | |
| 			res = (src << sft) & 0x0000FFFF;
 | |
| 			flag_V = 0;
 | |
| 			flag_N = res >> 8;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		flag_X = flag_C = 0;
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 		flag_V = 0;
 | |
| 		res = 0;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 8;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // LSLD
 | |
| OPCODE(0xE1A8)
 | |
| {
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| #define CYC 8
 | |
| #else
 | |
| #define CYC 6
 | |
| #endif
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft < 32)
 | |
| 		{
 | |
| 			flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
 | |
| 			res = src << sft;
 | |
| 			flag_V = 0;
 | |
| 			flag_N = res >> 24;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 		}
 | |
| 
 | |
| 		if (sft == 32) flag_C = src << M68K_SR_C_SFT;
 | |
| 		else flag_C = 0;
 | |
| 		flag_X = flag_C;
 | |
| 		flag_N = 0;
 | |
| 		flag_NotZ = 0;
 | |
| 		flag_V = 0;
 | |
| 		res = 0;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 24;
 | |
| 	flag_NotZ = src;
 | |
| RET(CYC)
 | |
| #undef CYC
 | |
| }
 | |
| 
 | |
| // ROXLD
 | |
| OPCODE(0xE130)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		sft %= 9;
 | |
| 
 | |
| 		src |= (flag_X & M68K_SR_X) << 0;
 | |
| 		res = (src << sft) | (src >> (9 - sft));
 | |
| 		flag_X = flag_C = res >> 0;
 | |
| 		flag_V = 0;
 | |
| 		flag_N = res >> 0;
 | |
| 		flag_NotZ = res & 0x000000FF;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = flag_X;
 | |
| 	flag_N = src >> 0;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROXLD
 | |
| OPCODE(0xE170)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		sft %= 17;
 | |
| 
 | |
| 		src |= (flag_X & M68K_SR_X) << 8;
 | |
| 		res = (src << sft) | (src >> (17 - sft));
 | |
| 		flag_X = flag_C = res >> 8;
 | |
| 		flag_V = 0;
 | |
| 		flag_N = res >> 8;
 | |
| 		flag_NotZ = res & 0x0000FFFF;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = flag_X;
 | |
| 	flag_N = src >> 8;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROXLD
 | |
| OPCODE(0xE1B0)
 | |
| {
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| #define CYC 8
 | |
| #else
 | |
| #define CYC 6
 | |
| #endif
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		sft %= 33;
 | |
| 
 | |
| 		if (sft != 0)
 | |
| 		{
 | |
| 			if (sft == 1) res = (src << 1) | ((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1);
 | |
| 			else res = (src << sft) | (src >> (33 - sft)) | (((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1) << (sft - 1));
 | |
| 			flag_X = (src >> (32 - sft)) << M68K_SR_X_SFT;
 | |
| 		}
 | |
| 		else res = src;
 | |
| 		flag_C = flag_X;
 | |
| 		flag_V = 0;
 | |
| 		flag_N = res >> 24;
 | |
| 		flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = flag_X;
 | |
| 	flag_N = src >> 24;
 | |
| 	flag_NotZ = src;
 | |
| RET(CYC)
 | |
| #undef CYC
 | |
| }
 | |
| 
 | |
| // ROLD
 | |
| OPCODE(0xE138)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu8((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft &= 0x07)
 | |
| 		{
 | |
| 			flag_C = (src << sft) >> 0;
 | |
| 			res = ((src << sft) | (src >> (8 - sft))) & 0x000000FF;
 | |
| 			flag_V = 0;
 | |
| 			flag_N = res >> 0;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu8((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		flag_V = 0;
 | |
| 		flag_C = src << M68K_SR_C_SFT;
 | |
| 		flag_N = src >> 0;
 | |
| 		flag_NotZ = src;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 0;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROLD
 | |
| OPCODE(0xE178)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu16((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft &= 0x0F)
 | |
| 		{
 | |
| 			flag_C = (src << sft) >> 8;
 | |
| 			res = ((src << sft) | (src >> (16 - sft))) & 0x0000FFFF;
 | |
| 			flag_V = 0;
 | |
| 			flag_N = res >> 8;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu16((Opcode >> 0) & 7) = res;
 | |
| 	RET(6)
 | |
| 		}
 | |
| 
 | |
| 		flag_V = 0;
 | |
| 		flag_C = src << M68K_SR_C_SFT;
 | |
| 		flag_N = src >> 8;
 | |
| 		flag_NotZ = src;
 | |
| 	RET(6)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 8;
 | |
| 	flag_NotZ = src;
 | |
| RET(6)
 | |
| }
 | |
| 
 | |
| // ROLD
 | |
| OPCODE(0xE1B8)
 | |
| {
 | |
| #ifdef USE_CYCLONE_TIMING
 | |
| #define CYC 8
 | |
| #else
 | |
| #define CYC 6
 | |
| #endif
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	u32 sft;
 | |
| 
 | |
| 	sft = DREG((Opcode >> 9) & 7) & 0x3F;
 | |
| 	src = DREGu32((Opcode >> 0) & 7);
 | |
| 	if (sft)
 | |
| 	{
 | |
| 	ctx->io_cycle_counter -= sft * 2;
 | |
| 		if (sft &= 0x1F)
 | |
| 		{
 | |
| 			flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
 | |
| 			res = (src << sft) | (src >> (32 - sft));
 | |
| 			flag_V = 0;
 | |
| 			flag_N = res >> 24;
 | |
| 			flag_NotZ = res;
 | |
| 	DREGu32((Opcode >> 0) & 7) = res;
 | |
| 	RET(CYC)
 | |
| 		}
 | |
| 
 | |
| 		flag_V = 0;
 | |
| 		flag_C = src << M68K_SR_C_SFT;
 | |
| 		flag_N = src >> 24;
 | |
| 		flag_NotZ = src;
 | |
| 	RET(CYC)
 | |
| 	}
 | |
| 
 | |
| 	flag_V = 0;
 | |
| 	flag_C = 0;
 | |
| 	flag_N = src >> 24;
 | |
| 	flag_NotZ = src;
 | |
| RET(CYC)
 | |
| #undef CYC
 | |
| }
 | |
| 
 | |
| // ASR
 | |
| OPCODE(0xE0D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src & (1 << 15));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ASR
 | |
| OPCODE(0xE0D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src & (1 << 15));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ASR
 | |
| OPCODE(0xE0E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src & (1 << 15));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ASR
 | |
| OPCODE(0xE0E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src & (1 << 15));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ASR
 | |
| OPCODE(0xE0F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src & (1 << 15));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ASR
 | |
| OPCODE(0xE0F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src & (1 << 15));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ASR
 | |
| OPCODE(0xE0F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src & (1 << 15));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ASR
 | |
| OPCODE(0xE0DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src & (1 << 15));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ASR
 | |
| OPCODE(0xE0E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src & (1 << 15));
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // LSR
 | |
| OPCODE(0xE2D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = src >> 1;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // LSR
 | |
| OPCODE(0xE2D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = src >> 1;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // LSR
 | |
| OPCODE(0xE2E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = src >> 1;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // LSR
 | |
| OPCODE(0xE2E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = src >> 1;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // LSR
 | |
| OPCODE(0xE2F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = src >> 1;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // LSR
 | |
| OPCODE(0xE2F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = src >> 1;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // LSR
 | |
| OPCODE(0xE2F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = src >> 1;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // LSR
 | |
| OPCODE(0xE2DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = src >> 1;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // LSR
 | |
| OPCODE(0xE2E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_N = flag_V = 0;
 | |
| 	flag_X = flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = src >> 1;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ROXR
 | |
| OPCODE(0xE4D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
 | |
| 	flag_C = flag_X = src << M68K_SR_C_SFT;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROXR
 | |
| OPCODE(0xE4D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
 | |
| 	flag_C = flag_X = src << M68K_SR_C_SFT;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROXR
 | |
| OPCODE(0xE4E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
 | |
| 	flag_C = flag_X = src << M68K_SR_C_SFT;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ROXR
 | |
| OPCODE(0xE4E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
 | |
| 	flag_C = flag_X = src << M68K_SR_C_SFT;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ROXR
 | |
| OPCODE(0xE4F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
 | |
| 	flag_C = flag_X = src << M68K_SR_C_SFT;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ROXR
 | |
| OPCODE(0xE4F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
 | |
| 	flag_C = flag_X = src << M68K_SR_C_SFT;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ROXR
 | |
| OPCODE(0xE4F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
 | |
| 	flag_C = flag_X = src << M68K_SR_C_SFT;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ROXR
 | |
| OPCODE(0xE4DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
 | |
| 	flag_C = flag_X = src << M68K_SR_C_SFT;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROXR
 | |
| OPCODE(0xE4E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
 | |
| 	flag_C = flag_X = src << M68K_SR_C_SFT;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ROR
 | |
| OPCODE(0xE6D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src << 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROR
 | |
| OPCODE(0xE6D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src << 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROR
 | |
| OPCODE(0xE6E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src << 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ROR
 | |
| OPCODE(0xE6E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src << 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ROR
 | |
| OPCODE(0xE6F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src << 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ROR
 | |
| OPCODE(0xE6F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src << 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ROR
 | |
| OPCODE(0xE6F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src << 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ROR
 | |
| OPCODE(0xE6DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src << 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROR
 | |
| OPCODE(0xE6E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src << M68K_SR_C_SFT;
 | |
| 	res = (src >> 1) | (src << 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ASL
 | |
| OPCODE(0xE1D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_V = (src ^ res) >> 8;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ASL
 | |
| OPCODE(0xE1D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_V = (src ^ res) >> 8;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ASL
 | |
| OPCODE(0xE1E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_V = (src ^ res) >> 8;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ASL
 | |
| OPCODE(0xE1E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_V = (src ^ res) >> 8;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ASL
 | |
| OPCODE(0xE1F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_V = (src ^ res) >> 8;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ASL
 | |
| OPCODE(0xE1F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_V = (src ^ res) >> 8;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ASL
 | |
| OPCODE(0xE1F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_V = (src ^ res) >> 8;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ASL
 | |
| OPCODE(0xE1DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_V = (src ^ res) >> 8;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ASL
 | |
| OPCODE(0xE1E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_V = (src ^ res) >> 8;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // LSL
 | |
| OPCODE(0xE3D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // LSL
 | |
| OPCODE(0xE3D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // LSL
 | |
| OPCODE(0xE3E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // LSL
 | |
| OPCODE(0xE3E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // LSL
 | |
| OPCODE(0xE3F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // LSL
 | |
| OPCODE(0xE3F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // LSL
 | |
| OPCODE(0xE3F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // LSL
 | |
| OPCODE(0xE3DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // LSL
 | |
| OPCODE(0xE3E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	res = src << 1;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ROXL
 | |
| OPCODE(0xE5D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROXL
 | |
| OPCODE(0xE5D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROXL
 | |
| OPCODE(0xE5E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ROXL
 | |
| OPCODE(0xE5E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ROXL
 | |
| OPCODE(0xE5F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ROXL
 | |
| OPCODE(0xE5F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ROXL
 | |
| OPCODE(0xE5F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ROXL
 | |
| OPCODE(0xE5DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROXL
 | |
| OPCODE(0xE5E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
 | |
| 	flag_X = flag_C = src >> 7;
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ROL
 | |
| OPCODE(0xE7D0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> 7;
 | |
| 	res = (src << 1) | (src >> 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROL
 | |
| OPCODE(0xE7D8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	AREG((Opcode >> 0) & 7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> 7;
 | |
| 	res = (src << 1) | (src >> 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROL
 | |
| OPCODE(0xE7E0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7) - 2;
 | |
| 	AREG((Opcode >> 0) & 7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> 7;
 | |
| 	res = (src << 1) | (src >> 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| // ROL
 | |
| OPCODE(0xE7E8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	adr += AREG((Opcode >> 0) & 7);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> 7;
 | |
| 	res = (src << 1) | (src >> 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ROL
 | |
| OPCODE(0xE7F0)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG((Opcode >> 0) & 7);
 | |
| 	DECODE_EXT_WORD
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> 7;
 | |
| 	res = (src << 1) | (src >> 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(18)
 | |
| }
 | |
| 
 | |
| // ROL
 | |
| OPCODE(0xE7F8)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_SWORD(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> 7;
 | |
| 	res = (src << 1) | (src >> 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(16)
 | |
| }
 | |
| 
 | |
| // ROL
 | |
| OPCODE(0xE7F9)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	FETCH_LONG(adr);
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> 7;
 | |
| 	res = (src << 1) | (src >> 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(20)
 | |
| }
 | |
| 
 | |
| // ROL
 | |
| OPCODE(0xE7DF)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7);
 | |
| 	AREG(7) += 2;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> 7;
 | |
| 	res = (src << 1) | (src >> 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(12)
 | |
| }
 | |
| 
 | |
| // ROL
 | |
| OPCODE(0xE7E7)
 | |
| {
 | |
| 	u32 adr, res;
 | |
| 	u32 src, dst;
 | |
| 
 | |
| 	adr = AREG(7) - 2;
 | |
| 	AREG(7) = adr;
 | |
| 	PRE_IO
 | |
| 	READ_WORD_F(adr, src)
 | |
| 	flag_V = 0;
 | |
| 	flag_C = src >> 7;
 | |
| 	res = (src << 1) | (src >> 15);
 | |
| 	flag_N = res >> 8;
 | |
| 	flag_NotZ = res & 0x0000FFFF;
 | |
| 	WRITE_WORD_F(adr, res)
 | |
| 	POST_IO
 | |
| RET(14)
 | |
| }
 | |
| 
 | |
| #ifdef PICODRIVE_HACK
 | |
| #if 0
 | |
| #define UPDATE_IDLE_COUNT { \
 | |
| 	extern int idle_hit_counter; \
 | |
| 	idle_hit_counter++; \
 | |
| }
 | |
| #else
 | |
| #define UPDATE_IDLE_COUNT
 | |
| #endif
 | |
| 
 | |
| // BRA
 | |
| OPCODE(0x6001_idle)
 | |
| {
 | |
| #ifdef FAMEC_CHECK_BRANCHES
 | |
| 	u32 newPC = GET_PC;
 | |
| 	s8 offs=Opcode;
 | |
| 	newPC += offs;
 | |
| 	SET_PC(newPC);
 | |
| 	CHECK_BRANCH_EXCEPTION(offs)
 | |
| #else
 | |
| 	PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| #endif
 | |
| 	UPDATE_IDLE_COUNT
 | |
| RET0()
 | |
| }
 | |
| 
 | |
| // BCC
 | |
| OPCODE(0x6601_idle)
 | |
| {
 | |
| 	if (flag_NotZ)
 | |
| 	{
 | |
| 		UPDATE_IDLE_COUNT
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 		//if (idle_hit)
 | |
| 		RET0()
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| OPCODE(0x6701_idle)
 | |
| {
 | |
| 	if (!flag_NotZ)
 | |
| 	{
 | |
| 		UPDATE_IDLE_COUNT
 | |
| 		PC += ((s8)(Opcode & 0xFE)) >> 1;
 | |
| 		//if (idle_hit)
 | |
| 		RET0()
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| 
 | |
| extern int SekIsIdleReady(void);
 | |
| extern int SekIsIdleCode(unsigned short *dst, int bytes);
 | |
| extern int SekRegisterIdlePatch(unsigned int pc, int oldop, int newop, void *ctx);
 | |
| 
 | |
| OPCODE(idle_detector_bcc8)
 | |
| {
 | |
| 	int frame_count, cond_true, bytes, ret, newop;
 | |
| 	u16 *dest_pc;
 | |
| 
 | |
| 	dest_pc = PC + (((s8)(Opcode & 0xFE)) >> 1);
 | |
| 
 | |
| 	if (!SekIsIdleReady())
 | |
| 		goto end;
 | |
| 
 | |
| 	bytes = 0 - (s8)(Opcode & 0xFE) - 2;
 | |
| 	ret = SekIsIdleCode(dest_pc, bytes);
 | |
| 	newop = (Opcode & 0xfe) | 0x7100;
 | |
| 	if (!ret) newop |= 0x200;
 | |
| 	if (  Opcode & 0x0100)  newop |= 0x400; // beq
 | |
| 	if (!(Opcode & 0x0f00)) newop |= 0xc00; // bra
 | |
| 
 | |
| 	ret = SekRegisterIdlePatch(GET_PC - 2, Opcode, newop, ctx);
 | |
| 	switch (ret)
 | |
| 	{
 | |
| 		case 0: PC[-1] = newop; break;
 | |
| 		case 1: break;
 | |
| 		case 2: JumpTable[Opcode] = (Opcode & 0x0f00) ?
 | |
| 				((Opcode & 0x0100) ? CAST_OP(0x6701) : CAST_OP(0x6601)) :
 | |
| 				CAST_OP(0x6001); break;
 | |
| 	}
 | |
| 
 | |
| end:
 | |
| 	if ((Opcode & 0xff00) == 0x6000) cond_true = 1;
 | |
| 	else cond_true = (Opcode & 0x0100) ? !flag_NotZ : flag_NotZ; // beq?
 | |
| 	if (cond_true)
 | |
| 	{
 | |
| 		PC = dest_pc;
 | |
| 		ctx->io_cycle_counter -= 2;
 | |
| 	}
 | |
| RET(8)
 | |
| }
 | |
| 
 | |
| #endif // PICODRIVE_HACK
 | 
