X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdis6809.cpp;h=fdb45d451bf82cdc6dc0f7106676ebeea4761374;hb=b4e8ef6c5282d8763d7559370c007fa4c1219a54;hp=320f9f240b28993bd1d86c0b82c5fbaeb2d5e5ba;hpb=af27a070d6a36e5590c5d24ba255300825c25cf9;p=stargem2 diff --git a/src/dis6809.cpp b/src/dis6809.cpp index 320f9f2..fdb45d4 100755 --- a/src/dis6809.cpp +++ b/src/dis6809.cpp @@ -217,7 +217,7 @@ int Decode6809(uint16 pc) char outbuf[80], mnem[6], tmp[30]; uint8 opcode2, operand; - uint16 addr = pc; + uint16 addr = pc, offset; uint8 opcode = mainCPU.RdMem(addr++); // Get the opcode uint8 admode = op_mat1[opcode]; // addressing mode @@ -245,13 +245,23 @@ int Decode6809(uint16 pc) sprintf(outbuf, "%s $%02X", mnem, mainCPU.RdMem(addr++)); break; case 2: // Absolute - sprintf(outbuf, "%s $%04X", mnem, (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++)); +// sprintf(outbuf, "%s $%04X", mnem, (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++)); + offset = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1); + addr += 2; + sprintf(outbuf, "%s $%04X", mnem, offset); break; case 3: // Relative - sprintf(outbuf, "%s $%04X", mnem, ++addr + (int16)(int8)mainCPU.RdMem(addr)); +//DISNOWOK--FIX +// sprintf(outbuf, "%s $%04X", mnem, ++addr + (int16)((int8)mainCPU.RdMem(addr))); + offset = addr + 1 + (int16)(int8)mainCPU.RdMem(addr); + addr++; + sprintf(outbuf, "%s $%04X", mnem, offset); break; case 4: // Long Relative - sprintf(outbuf, "%s $%04X", mnem, addr + (int16)((mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++)) + 2); +// sprintf(outbuf, "%s $%04X", mnem, addr + (int16)((mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++)) + 2); + offset = addr + (int16)((mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1)) + 2; + addr += 2; + sprintf(outbuf, "%s $%04X", mnem, offset); break; case 5: // Inherent sprintf(outbuf, "%s ", mnem); @@ -301,7 +311,8 @@ int Decode6809(uint16 pc) sprintf(tmp, "($%02X,%s)", boff, iregs[reg]); break; case 9: - woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++); + woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1); + addr += 2; sprintf(tmp, "($%04X,%s)", woff, iregs[reg]); break; case 11: sprintf(tmp, "(D,%s)", iregs[reg]); break; @@ -310,11 +321,13 @@ int Decode6809(uint16 pc) sprintf(tmp, "($%02X,PC)", boff); break; case 13: - woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++); + woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1); + addr += 2; sprintf(tmp, "($%04X,PC)", woff); break; case 15: - woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++); + woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1); + addr += 2; sprintf(tmp, "[$%04X]", woff); break; default: @@ -337,7 +350,8 @@ int Decode6809(uint16 pc) sprintf(tmp, "($%02X),%s", boff, iregs[reg]); break; case 9: - woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++); + woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1); + addr += 2; sprintf(tmp, "($%04X),%s", woff, iregs[reg]); break; case 11: @@ -347,8 +361,9 @@ int Decode6809(uint16 pc) boff = mainCPU.RdMem(addr++); sprintf(tmp, "($%02X),PC", boff); break; - case 13: - woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++); + case 13: + woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1); + addr += 2; sprintf(tmp, "($%04X),PC", woff); break; default: @@ -363,7 +378,10 @@ int Decode6809(uint16 pc) sprintf(outbuf, "%s #$%02X", mnem, mainCPU.RdMem(addr++)); break; case 9: // Long Immediate - sprintf(outbuf, "%s #$%04X", mnem, (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++)); +// sprintf(outbuf, "%s #$%04X", mnem, (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++)); + offset = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1); + addr += 2; + sprintf(outbuf, "%s #$%04X", mnem, offset); break; }