]> Shamusworld >> Repos - stargem2/blobdiff - src/dis6809.cpp
Finalizing move to trunk...
[stargem2] / src / dis6809.cpp
index 320f9f240b28993bd1d86c0b82c5fbaeb2d5e5ba..fdb45d451bf82cdc6dc0f7106676ebeea4761374 100755 (executable)
@@ -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;
        }