comparison z80inst.c @ 256:ce7ce2b9c2df

Fix decoding of address in JP and JPCC instructions in the Z80 core
author Mike Pavone <pavone@retrodev.com>
date Mon, 29 Apr 2013 22:58:45 -0700
parents 682e505f5757
children df5bf4c113dc
comparison
equal deleted inserted replaced
255:572b935dd030 256:ce7ce2b9c2df
1247 memcpy(decoded, z80_tbl_a + *istream, sizeof(z80inst)); 1247 memcpy(decoded, z80_tbl_a + *istream, sizeof(z80inst));
1248 1248
1249 } 1249 }
1250 if ((decoded->addr_mode & 0x1F) == Z80_IMMED && decoded->op != Z80_RST && decoded->op != Z80_IM) { 1250 if ((decoded->addr_mode & 0x1F) == Z80_IMMED && decoded->op != Z80_RST && decoded->op != Z80_IM) {
1251 decoded->immed = *(++istream); 1251 decoded->immed = *(++istream);
1252 if ((decoded->reg >= Z80_BC && decoded->reg < Z80_UNUSED) || decoded->op == Z80_CALL || decoded->op == Z80_CALLCC) { 1252 if ((decoded->reg >= Z80_BC && decoded->reg < Z80_UNUSED) || decoded->op == Z80_CALL || decoded->op == Z80_CALLCC || decoded->op == Z80_JP || decoded->op == Z80_JPCC) {
1253 decoded->immed |= *(++istream) << 8; 1253 decoded->immed |= *(++istream) << 8;
1254 } else if (decoded->immed & 0x80) { 1254 } else if (decoded->immed & 0x80) {
1255 decoded->immed |= 0xFF00; 1255 decoded->immed |= 0xFF00;
1256 } 1256 }
1257 } else if ((decoded->addr_mode & 0x1F) == Z80_IMMED_INDIRECT) { 1257 } else if ((decoded->addr_mode & 0x1F) == Z80_IMMED_INDIRECT) {