+void HandleMovem(char * output, uint16_t data, int direction)
+{
+ uint16_t ascending[16] = {
+ 0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080,
+ 0x0100, 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000 };
+ uint16_t descending[16] = {
+ 0x8000, 0x4000, 0x2000, 0x1000, 0x0800, 0x0400, 0x0200, 0x0100,
+ 0x0080, 0x0040, 0x0020, 0x0010, 0x0008, 0x0004, 0x0002, 0x0001 };
+
+ int i, j, first, runLength, firstPrint = 1;
+ char buf[16];
+ uint16_t * bitMask;
+
+ bitMask = (direction ? descending : ascending);
+ output[0] = 0;
+
+ // Handle D0-D7...
+ for(i=0; i<8; i++)
+ {
+ if (data & bitMask[i])
+ {
+ first = i;
+ runLength = 0;
+
+ for(j=i+1; j<8 && (data & bitMask[j]); j++)
+ runLength++;
+
+ i += runLength;
+
+ if (firstPrint)
+ firstPrint = 0;
+ else
+ strcat(output, "/");
+
+ sprintf(buf, "D%d", first);
+ strcat(output, buf);
+
+ if (runLength > 0)
+ {
+ sprintf(buf, "-D%d", first + runLength);
+ strcat(output, buf);
+ }
+ }
+ }
+
+ // Handle A0-A7...
+ for(i=0; i<8; i++)
+ {
+ if (data & bitMask[i + 8])
+ {
+ first = i;
+ runLength = 0;
+
+ for(j=i+1; j<8 && (data & bitMask[j+8]); j++)
+ runLength++;
+
+ i += runLength;
+
+ if (firstPrint)
+ firstPrint = 0;
+ else
+ strcat(output, "/");
+
+ sprintf(buf, "A%d", first);
+ strcat(output, buf);
+
+ if (runLength > 0)
+ {
+ sprintf(buf, "-A%d", first + runLength);
+ strcat(output, buf);
+ }
+ }
+ }
+}
+
+
+unsigned int M68KDisassemble(char * output, uint32_t addr)