diff --git a/src/debugger/CartDebug.cxx b/src/debugger/CartDebug.cxx
index 4b4ab396f..eb83eaaa1 100644
--- a/src/debugger/CartDebug.cxx
+++ b/src/debugger/CartDebug.cxx
@@ -155,8 +155,7 @@ int CartDebug::readFromWritePort()
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 string CartDebug::toString()
 {
-  string result;
-  char buf[128];
+  ostringstream buf;
   uInt32 bytesPerLine;
 
   switch(myDebugger.parser().base())
@@ -186,27 +185,26 @@ string CartDebug::toString()
     // bytes have been previously output
     if(state.rport[i] - curraddr > bytesPerLine || bytesSoFar >= 256)
     {
-      sprintf(buf, "%04x: (rport = %04x, wport = %04x)\n",
+      char port[50];
+      sprintf(port, "%04x: (rport = %04x, wport = %04x)\n",
               state.rport[i], state.rport[i], state.wport[i]);
-      buf[2] = buf[3] = 'x';
-      result += DebuggerParser::red(buf);
+      port[2] = port[3] = 'x';
+      buf << DebuggerParser::red(port);
       bytesSoFar = 0;
     }
     curraddr = state.rport[i];
-    sprintf(buf, "%.2x: ", curraddr & 0x00ff);
-    result += buf;
+    buf << HEX2 << (curraddr & 0x00ff) << ": ";
 
     for(uInt8 j = 0; j < bytesPerLine; ++j)
     {
-      result += myDebugger.invIfChanged(state.ram[i+j], oldstate.ram[i+j]);
-      result += " ";
+      buf << myDebugger.invIfChanged(state.ram[i+j], oldstate.ram[i+j]) << " ";
 
-      if(j == 0x07) result += " ";
+      if(j == 0x07) buf << " ";
     }
-    result += "\n";
+    buf << endl;
   }
 
-  return result;
+  return buf.str();
 }
 
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -317,9 +315,10 @@ string CartDebug::disassemble(uInt16 start, uInt16 lines) const
 {
   Disassembly disasm;
   BankInfo info;
+  uInt8 labels[0x1000], directives[0x1000];
   info.addressList.push_back(start);
-  DiStella distella(*this, disasm.list, info, (uInt8*)myDisLabels,
-                    (uInt8*)myDisDirectives, false);
+  DiStella distella(*this, disasm.list, info, (uInt8*)labels,
+                    (uInt8*)directives, false);
 
   // Fill the string with disassembled data
   start &= 0xFFF;
@@ -334,7 +333,8 @@ string CartDebug::disassemble(uInt16 start, uInt16 lines) const
     if((tag.address & 0xfff) >= start)
     {
       if(begin == list_size) begin = end;
-      length = BSPF_max(length, (uInt32)tag.disasm.length());
+      if(tag.type != CartDebug::ROW)
+        length = BSPF_max(length, (uInt32)tag.disasm.length());
 
       --lines;
     }
@@ -344,8 +344,15 @@ string CartDebug::disassemble(uInt16 start, uInt16 lines) const
   for(uInt32 i = begin; i < end; ++i)
   {
     const CartDebug::DisassemblyTag& tag = disasm.list[i];
-    buffer << uppercase << hex << setw(4) << setfill('0') << tag.address
-           << ":  " << tag.disasm << setw(length - tag.disasm.length() + 1)
+    if(tag.type == CartDebug::NONE)
+      continue;
+    else if(tag.address)
+      buffer << uppercase << hex << setw(4) << setfill('0') << tag.address
+           << ":  ";
+    else
+      buffer << "       ";
+
+    buffer << tag.disasm << setw(length - tag.disasm.length() + 1)
            << setfill(' ') << " "
            << tag.ccount << "   " << tag.bytes << endl;
   }
diff --git a/src/debugger/CpuDebug.cxx b/src/debugger/CpuDebug.cxx
index cf3e79b61..3f56ce6bd 100644
--- a/src/debugger/CpuDebug.cxx
+++ b/src/debugger/CpuDebug.cxx
@@ -75,6 +75,7 @@ void CpuDebug::saveOldState()
 string CpuDebug::toString()
 {
   // TODO - this doesn't seem to be used anywhere ??
+  //        if it's ever used, convert to C++ stringstream
   string result;
   char buf[255];
 
diff --git a/src/debugger/DiStella.cxx b/src/debugger/DiStella.cxx
index 40c7cf16c..f39f4593b 100644
--- a/src/debugger/DiStella.cxx
+++ b/src/debugger/DiStella.cxx
@@ -224,7 +224,7 @@ void DiStella::disasm(uInt32 distart, int pass)
           myDisasmBuf << HEX4 << myPC+myOffset << "'     '";
 
         bool isPGfx = check_bit(myPC, CartDebug::PGFX);
-        const string& bit_string = isPGfx ? "\x80" : "\x7f";
+        const string& bit_string = isPGfx ? "\x1f" : "\x1e";
         uInt8 byte = Debugger::debugger().peek(myPC+myOffset);
         myDisasmBuf << ".byte $" << HEX2 << (int)byte << "  |";
         for(uInt8 i = 0, c = byte; i < 8; ++i, c <<= 1)
@@ -275,7 +275,7 @@ void DiStella::disasm(uInt32 distart, int pass)
              && pass == 3 && myPC <= myAppData.end)
       {
         bytes++;
-        if (bytes == 17)
+        if (bytes == 9) // TODO - perhaps make this configurable to size of output area
         {
           addEntry(CartDebug::ROW);
           myDisasmBuf << "    '     '.byte $" << HEX2 << (int)Debugger::debugger().peek(myPC+myOffset);
diff --git a/src/debugger/RiotDebug.cxx b/src/debugger/RiotDebug.cxx
index 739edebfa..ae16954fb 100644
--- a/src/debugger/RiotDebug.cxx
+++ b/src/debugger/RiotDebug.cxx
@@ -315,55 +315,54 @@ string RiotDebug::switchesString()
 string RiotDebug::toString()
 {
   // TODO: keyboard controllers?
+  ostringstream buf;
 
   const RiotState& state    = (RiotState&) getState();
   const RiotState& oldstate = (RiotState&) getOldState();
-  string ret;
 
-  ret += myDebugger.valueToString(0x280) + "/SWCHA(R)=" +
-         myDebugger.invIfChanged(state.SWCHA_R, oldstate.SWCHA_R) + " ";
-  ret += myDebugger.valueToString(0x280) + "/SWCHA(W)=" +
-         myDebugger.invIfChanged(state.SWCHA_W, oldstate.SWCHA_W) + " ";
-  ret += myDebugger.valueToString(0x281) + "/SWACNT=" +
-         myDebugger.invIfChanged(state.SWACNT, oldstate.SWACNT) + " ";
-  ret += myDebugger.valueToString(0x282) + "/SWCHB=" +
-         myDebugger.invIfChanged(state.SWCHB, oldstate.SWCHB) + " ";
-  ret += "\n";
+  buf << myDebugger.valueToString(0x280) + "/SWCHA(R)="
+      << myDebugger.invIfChanged(state.SWCHA_R, oldstate.SWCHA_R) << " "
+      << myDebugger.valueToString(0x280) + "/SWCHA(W)="
+      << myDebugger.invIfChanged(state.SWCHA_W, oldstate.SWCHA_W) << " "
+      << myDebugger.valueToString(0x281) + "/SWACNT="
+      << myDebugger.invIfChanged(state.SWACNT, oldstate.SWACNT) << " "
+      << myDebugger.valueToString(0x282) + "/SWCHB="
+      << myDebugger.invIfChanged(state.SWCHB, oldstate.SWCHB) << " "
+      << endl
 
-  // These are squirrely: some symbol files will define these as
-  // 0x284-0x287. Doesn't actually matter, these registers repeat
-  // every 16 bytes.
-  ret += myDebugger.valueToString(0x294) + "/TIM1T=" +
-         myDebugger.invIfChanged(state.TIM1T, oldstate.TIM1T) + " ";
-  ret += myDebugger.valueToString(0x295) + "/TIM8T=" +
-         myDebugger.invIfChanged(state.TIM8T, oldstate.TIM8T) + " ";
-  ret += myDebugger.valueToString(0x296) + "/TIM64T=" +
-         myDebugger.invIfChanged(state.TIM64T, oldstate.TIM64T) + " ";
-  ret += myDebugger.valueToString(0x297) + "/TIM1024T=" +
-         myDebugger.invIfChanged(state.TIM1024T, oldstate.TIM1024T) + " ";
-  ret += "\n";
+      // These are squirrely: some symbol files will define these as
+      // 0x284-0x287. Doesn't actually matter, these registers repeat
+      // every 16 bytes.
+      << myDebugger.valueToString(0x294) + "/TIM1T="
+      << myDebugger.invIfChanged(state.TIM1T, oldstate.TIM1T) << " "
+      << myDebugger.valueToString(0x295) + "/TIM8T="
+      << myDebugger.invIfChanged(state.TIM8T, oldstate.TIM8T) << " "
+      << myDebugger.valueToString(0x296) + "/TIM64T="
+      << myDebugger.invIfChanged(state.TIM64T, oldstate.TIM64T) << " "
+      << myDebugger.valueToString(0x297) + "/TIM1024T="
+      << myDebugger.invIfChanged(state.TIM1024T, oldstate.TIM1024T) << " "
+      << endl
 
-  ret += myDebugger.valueToString(0x284) + "/INTIM=" +
-         myDebugger.invIfChanged(state.INTIM, oldstate.INTIM) + " ";
-  ret += myDebugger.valueToString(0x285) + "/TIMINT=" +
-         myDebugger.invIfChanged(state.TIMINT, oldstate.TIMINT) + " ";
-  ret += "Timer_Clocks=" +
-         myDebugger.invIfChanged(state.TIMCLKS, oldstate.TIMCLKS) + " ";
-  ret += "\n";
+      << myDebugger.valueToString(0x284) + "/INTIM="
+      << myDebugger.invIfChanged(state.INTIM, oldstate.INTIM) << " "
+      << myDebugger.valueToString(0x285) + "/TIMINT="
+      << myDebugger.invIfChanged(state.TIMINT, oldstate.TIMINT) << " "
+      << "Timer_Clocks="
+      << myDebugger.invIfChanged(state.TIMCLKS, oldstate.TIMCLKS) << " "
+      << endl
 
-  ret += "Left/P0diff: " + diffP0String() + "   Right/P1diff: " + diffP0String();
-  ret += "\n";
+      << "Left/P0diff: " << diffP0String() << "   Right/P1diff: " << diffP0String()
+      << endl
+      << "TVType: " << tvTypeString() << "   Switches: " << switchesString()
+      << endl
 
-  ret += "TVType: " + tvTypeString() + "   Switches: " + switchesString();
-  ret += "\n";
+      // Yes, the fire buttons are in the TIA, but we might as well
+      // show them here for convenience.
+      << "Left/P0 stick:  " << dirP0String()
+      << ((mySystem.peek(0x03c) & 0x80) ? "" : "(button) ")
+      << endl
+      << "Right/P1 stick: " << dirP1String()
+      << ((mySystem.peek(0x03d) & 0x80) ? "" : "(button) ");
 
-  // Yes, the fire buttons are in the TIA, but we might as well
-  // show them here for convenience.
-  ret += "Left/P0 stick:  " + dirP0String();
-  ret += (mySystem.peek(0x03c) & 0x80) ? "" : "(button) ";
-  ret += "\n";
-  ret += "Right/P1 stick: " + dirP1String();
-  ret += (mySystem.peek(0x03d) & 0x80) ? "" : "(button) ";
-
-  return ret;
+  return buf.str();
 }
diff --git a/src/debugger/TIADebug.cxx b/src/debugger/TIADebug.cxx
index 16c30345e..8beb3d0a1 100644
--- a/src/debugger/TIADebug.cxx
+++ b/src/debugger/TIADebug.cxx
@@ -735,20 +735,15 @@ string TIADebug::booleanWithLabel(string label, bool value)
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 string TIADebug::toString()
 {
-  string ret;
-  char buf[128];
+  ostringstream buf;
 
-  sprintf(buf, "%.2x: ", 0);
-  ret += buf;
+  buf << "00: ";
   for (uInt8 j = 0; j < 0x010; j++)
   {
-    sprintf(buf, "%.2x ", mySystem.peek(j));
-    ret += buf;
-
-    if(j == 0x07) ret += "- ";
+    buf << HEX2 << (int)mySystem.peek(j) << " ";
+    if(j == 0x07) buf << "- ";
   }
-
-  ret += "\n";
+  buf << endl;
 
   // TODO: inverse video for changed regs. Core needs to track this.
   // TODO: strobes? WSYNC RSYNC RESP0/1 RESM0/1 RESBL HMOVE HMCLR CXCLR
@@ -757,190 +752,100 @@ string TIADebug::toString()
 //  const TiaState& oldstate = (TiaState&) getOldState();
 
   // build up output, then return it.
-  ret += "scanline ";
-
-  ret += myDebugger.valueToString(myTIA.scanlines());
-  ret += " ";
-
-  ret += booleanWithLabel("vsync", vsync());
-  ret += " ";
-
-  ret += booleanWithLabel("vblank", vblank());
-  ret += "\n";
-
-  ret += booleanWithLabel("inpt0", myTIA.peek(0x08) & 0x80);
-  ret += " ";
-  ret += booleanWithLabel("inpt1", myTIA.peek(0x09) & 0x80);
-  ret += " ";
-  ret += booleanWithLabel("inpt2", myTIA.peek(0x0a) & 0x80);
-  ret += " ";
-  ret += booleanWithLabel("inpt3", myTIA.peek(0x0b) & 0x80);
-  ret += " ";
-  ret += booleanWithLabel("inpt4", myTIA.peek(0x0c) & 0x80);
-  ret += " ";
-  ret += booleanWithLabel("inpt5", myTIA.peek(0x0d) & 0x80);
-  ret += " ";
-  ret += booleanWithLabel("dump_gnd_0123", myTIA.myDumpEnabled);
-  ret += "\n";
-
-  ret += "COLUP0: ";
-  ret += myDebugger.valueToString(state.coluRegs[0]);
-  ret += "/";
-  ret += colorSwatch(state.coluRegs[0]);
-
-  ret += "COLUP1: ";
-  ret += myDebugger.valueToString(state.coluRegs[1]);
-  ret += "/";
-  ret += colorSwatch(state.coluRegs[1]);
-
-  ret += "COLUPF: ";
-  ret += myDebugger.valueToString(state.coluRegs[2]);
-  ret += "/";
-  ret += colorSwatch(state.coluRegs[2]);
-
-  ret += "COLUBK: ";
-  ret += myDebugger.valueToString(state.coluRegs[3]);
-  ret += "/";
-  ret += colorSwatch(state.coluRegs[3]);
-
-  ret += "\n";
-
-  ret += "P0: GR=";
-  ret += Debugger::to_bin_8(state.gr[P0]);
-  ret += "/";
-  ret += myDebugger.valueToString(state.gr[P0]);
-  ret += " pos=";
-  ret += myDebugger.valueToString(state.pos[P0]);
-  ret += " HM=";
-  ret += myDebugger.valueToString(state.hm[P0]);
-  ret += " ";
-  ret += nusizP0String();
-  ret += " ";
-  ret += booleanWithLabel("reflect", refP0());
-  ret += " ";
-  ret += booleanWithLabel("delay", vdelP0());
-  ret += "\n";
-
-  ret += "P1: GR=";
-  ret += Debugger::to_bin_8(state.gr[P1]);
-  ret += "/";
-  ret += myDebugger.valueToString(state.gr[P1]);
-  ret += " pos=";
-  ret += myDebugger.valueToString(state.pos[P1]);
-  ret += " HM=";
-  ret += myDebugger.valueToString(state.hm[P1]);
-  ret += " ";
-  ret += nusizP1String();
-  ret += " ";
-  ret += booleanWithLabel("reflect", refP1());
-  ret += " ";
-  ret += booleanWithLabel("delay", vdelP1());
-  ret += "\n";
-
-  ret += "M0: ";
-  ret += (myTIA.myENAM0 ? " ENABLED" : "disabled");
-  ret += " pos=";
-  ret += myDebugger.valueToString(state.pos[M0]);
-  ret += " HM=";
-  ret += myDebugger.valueToString(state.hm[M0]);
-  ret += " size=";
-  ret += myDebugger.valueToString(state.size[M0]);
-  ret += " ";
-  ret += booleanWithLabel("reset", resMP0());
-  ret += "\n";
-
-  ret += "M1: ";
-  ret += (myTIA.myENAM1 ? " ENABLED" : "disabled");
-  ret += " pos=";
-  ret += myDebugger.valueToString(state.pos[M1]);
-  ret += " HM=";
-  ret += myDebugger.valueToString(state.hm[M1]);
-  ret += " size=";
-  ret += myDebugger.valueToString(state.size[M1]);
-  ret += " ";
-  ret += booleanWithLabel("reset", resMP1());
-  ret += "\n";
-
-  ret += "BL: ";
-  ret += (myTIA.myENABL ? " ENABLED" : "disabled");
-  ret += " pos=";
-  ret += myDebugger.valueToString(state.pos[BL]);
-  ret += " HM=";
-  ret += myDebugger.valueToString(state.hm[BL]);
-  ret += " size=";
-  ret += myDebugger.valueToString(state.size[BL]);
-  ret += " ";
-  ret += booleanWithLabel("delay", vdelBL());
-  ret += "\n";
-
-  ret += "PF0: ";
-  ret += Debugger::to_bin_8(state.pf[0]);
-  ret += "/";
-  ret += myDebugger.valueToString(state.pf[0]);
-  ret += " PF1: ";
-  ret += Debugger::to_bin_8(state.pf[1]);
-  ret += "/";
-  ret += myDebugger.valueToString(state.pf[1]);
-  ret += " PF2: ";
-  ret += Debugger::to_bin_8(state.pf[2]);
-  ret += "/";
-  ret += myDebugger.valueToString(state.pf[2]);
-  ret += "\n     ";
-  ret += booleanWithLabel("reflect",  refPF());
-  ret += " ";
-  ret += booleanWithLabel("score",    scorePF());
-  ret += " ";
-  ret += booleanWithLabel("priority", priorityPF());
-  ret += "\n";
-
-  ret += "Collisions: ";
-  ret += booleanWithLabel("m0_p1 ", collM0_P1());
-  ret += booleanWithLabel("m0_p0 ", collM0_P0());
-  ret += booleanWithLabel("m1_p0 ", collM1_P0());
-  ret += booleanWithLabel("m1_p1 ", collM1_P1());
-  ret += booleanWithLabel("p0_pf ", collP0_PF());
-  ret += booleanWithLabel("p0_bl ", collP0_BL());
-  ret += booleanWithLabel("p1_pf ", collP1_PF());
-  ret += "\n            ";
-  ret += booleanWithLabel("p1_bl ", collP1_BL());
-  ret += booleanWithLabel("m0_pf ", collM0_PF());
-  ret += booleanWithLabel("m0_bl ", collM0_BL());
-  ret += booleanWithLabel("m1_pf ", collM1_PF());
-  ret += booleanWithLabel("m1_bl ", collM1_BL());
-  ret += booleanWithLabel("bl_pf ", collBL_PF());
-  ret += booleanWithLabel("p0_p1 ", collP0_P1());
-  ret += booleanWithLabel("m0_m1 ", collM0_M1());
-  ret += "\n";
-
-  ret += "AUDF0: ";
-  ret += myDebugger.valueToString(myTIA.myAUDF0);
-  ret += "/";
-  ret += audFreq(myTIA.myAUDF0);
-  ret += " ";
-
-  ret += "AUDC0: ";
-  ret += myDebugger.valueToString(myTIA.myAUDC0);
-  ret += " ";
-
-  ret += "AUDV0: ";
-  ret += myDebugger.valueToString(myTIA.myAUDV0);
-  ret += "\n";
-
-  ret += "AUDF1: ";
-  ret += myDebugger.valueToString(myTIA.myAUDF1);
-  ret += "/";
-  ret += audFreq(myTIA.myAUDF1);
-  ret += " ";
-
-  ret += "AUDC1: ";
-  ret += myDebugger.valueToString(myTIA.myAUDC1);
-  ret += " ";
-
-  ret += "AUDV1: ";
-  ret += myDebugger.valueToString(myTIA.myAUDV1);
-  //ret += "\n";
-
-  // note: last "ret +=" line should not contain \n, caller will add.
-
-  return ret;
+  buf << "scanline " << myDebugger.valueToString(myTIA.scanlines()) << " "
+      << booleanWithLabel("vsync", vsync()) << " "
+      << booleanWithLabel("vblank", vblank())
+      << endl
+      << booleanWithLabel("inpt0", myTIA.peek(0x08) & 0x80) << " "
+      << booleanWithLabel("inpt1", myTIA.peek(0x09) & 0x80) << " "
+      << booleanWithLabel("inpt2", myTIA.peek(0x0a) & 0x80) << " "
+      << booleanWithLabel("inpt3", myTIA.peek(0x0b) & 0x80) << " "
+      << booleanWithLabel("inpt4", myTIA.peek(0x0c) & 0x80) << " "
+      << booleanWithLabel("inpt5", myTIA.peek(0x0d) & 0x80) << " "
+      << booleanWithLabel("dump_gnd_0123", myTIA.myDumpEnabled)
+      << endl
+      << "COLUxx: "
+      << "P0=" << myDebugger.valueToString(state.coluRegs[0]) << "/"
+      << colorSwatch(state.coluRegs[0])
+      << "P1=" << myDebugger.valueToString(state.coluRegs[1]) << "/"
+      << colorSwatch(state.coluRegs[1])
+      << "PF=" << myDebugger.valueToString(state.coluRegs[2]) << "/"
+      << colorSwatch(state.coluRegs[2])
+      << "BK=" << myDebugger.valueToString(state.coluRegs[3]) << "/"
+      << colorSwatch(state.coluRegs[3])
+      << endl
+      << "P0: GR=" << string(Debugger::to_bin_8(state.gr[P0]))
+      << " pos=" << myDebugger.valueToString(state.pos[P0])
+      << " HM=" << myDebugger.valueToString(state.hm[P0]) << " "
+      << nusizP0String() << " "
+      << booleanWithLabel("refl", refP0()) << " "
+      << booleanWithLabel("delay", vdelP0())
+      << endl
+      << "P1: GR=" << string(Debugger::to_bin_8(state.gr[P1]))
+      << " pos=" << myDebugger.valueToString(state.pos[P1])
+      << " HM=" << myDebugger.valueToString(state.hm[P1]) << " "
+      << nusizP1String() << " "
+      << booleanWithLabel("refl", refP1()) << " "
+      << booleanWithLabel("delay", vdelP1())
+      << endl
+      << "M0: " << (myTIA.myENAM0 ? " ENABLED" : "disabled")
+      << " pos=" << myDebugger.valueToString(state.pos[M0])
+      << " HM=" << myDebugger.valueToString(state.hm[M0])
+      << " size=" << myDebugger.valueToString(state.size[M0]) << " "
+      << booleanWithLabel("reset", resMP0())
+      << endl
+      << "M1: " << (myTIA.myENAM1 ? " ENABLED" : "disabled")
+      << " pos=" << myDebugger.valueToString(state.pos[M1])
+      << " HM=" << myDebugger.valueToString(state.hm[M1])
+      << " size=" << myDebugger.valueToString(state.size[M1]) << " "
+      << booleanWithLabel("reset", resMP0())
+      << endl
+      << "BL: " << (myTIA.myENABL ? " ENABLED" : "disabled")
+      << " pos=" << myDebugger.valueToString(state.pos[BL])
+      << " HM=" << myDebugger.valueToString(state.hm[BL])
+      << " size=" << myDebugger.valueToString(state.size[BL]) << " "
+      << booleanWithLabel("delay", vdelBL())
+      << endl
+      << "PF0: " << string(Debugger::to_bin_8(state.pf[0])) << "/"
+      << myDebugger.valueToString(state.pf[0])
+      << " PF1: " << string(Debugger::to_bin_8(state.pf[1])) << "/"
+      << myDebugger.valueToString(state.pf[1])
+      << " PF2: " << string(Debugger::to_bin_8(state.pf[2])) << "/"
+      << myDebugger.valueToString(state.pf[2])
+      << endl << "     "
+      << booleanWithLabel("reflect",  refPF()) << " "
+      << booleanWithLabel("score",    scorePF()) << " "
+      << booleanWithLabel("priority", priorityPF())
+      << endl
+      << "Collisions: "
+      << booleanWithLabel("m0_p1 ", collM0_P1())
+      << booleanWithLabel("m0_p0 ", collM0_P0())
+      << booleanWithLabel("m1_p0 ", collM1_P0())
+      << booleanWithLabel("m1_p1 ", collM1_P1())
+      << booleanWithLabel("p0_pf ", collP0_PF())
+      << booleanWithLabel("p0_bl ", collP0_BL())
+      << booleanWithLabel("p1_pf ", collP1_PF())
+      << endl << "            "
+      << booleanWithLabel("p1_bl ", collP1_BL())
+      << booleanWithLabel("m0_pf ", collM0_PF())
+      << booleanWithLabel("m0_bl ", collM0_BL())
+      << booleanWithLabel("m1_pf ", collM1_PF())
+      << booleanWithLabel("m1_bl ", collM1_BL())
+      << booleanWithLabel("bl_pf ", collBL_PF())
+      << booleanWithLabel("p0_p1 ", collP0_P1())
+      << endl << "            "
+      << booleanWithLabel("m0_m1 ", collM0_M1())
+      << endl
+      << "AUDF0: " << myDebugger.valueToString(myTIA.myAUDF0)
+      << "/" << audFreq(myTIA.myAUDF0) << " "
+      << "AUDC0: " << myDebugger.valueToString(myTIA.myAUDC0) << " "
+      << "AUDV0: " << myDebugger.valueToString(myTIA.myAUDV0)
+      << endl
+      << "AUDF1: " << myDebugger.valueToString(myTIA.myAUDF1)
+      << "/" << audFreq(myTIA.myAUDF1) << " "
+      << "AUDC1: " << myDebugger.valueToString(myTIA.myAUDC1) << " "
+      << "AUDV1: " << myDebugger.valueToString(myTIA.myAUDV1)
+      ;
+  // note: last line should not contain \n, caller will add.
+  return buf.str();
 }
diff --git a/src/debugger/gui/PromptWidget.cxx b/src/debugger/gui/PromptWidget.cxx
index a585525f3..3d98fb95d 100644
--- a/src/debugger/gui/PromptWidget.cxx
+++ b/src/debugger/gui/PromptWidget.cxx
@@ -789,7 +789,8 @@ void PromptWidget::putcharIntern(int c)
                       // OverlayColor contains 256 of them
     _textcolor = (c & 0x7f) << 1;
   }
-  else if(c < ' ') { // More colors (the regular GUI ones)
+  else if(c < 0x1e) { // first actual character is large dash
+    // More colors (the regular GUI ones)
     _textcolor = c + 0x100;
   }
   else if(c == 0x7f) { // toggle inverse video (DEL char)
diff --git a/src/emucore/StateManager.cxx b/src/emucore/StateManager.cxx
index dc2b56a05..ca671b0c9 100644
--- a/src/emucore/StateManager.cxx
+++ b/src/emucore/StateManager.cxx
@@ -30,8 +30,8 @@
 
 #include "StateManager.hxx"
 
-#define STATE_HEADER "03031100state"
-#define MOVIE_HEADER "03031100movie"
+#define STATE_HEADER "03030000state"
+#define MOVIE_HEADER "03030000movie"
 
 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 StateManager::StateManager(OSystem* osystem)
diff --git a/src/gui/ConsoleFont.hxx b/src/gui/ConsoleFont.hxx
index 24b2462aa..4442001be 100644
--- a/src/gui/ConsoleFont.hxx
+++ b/src/gui/ConsoleFont.hxx
@@ -34,7 +34,7 @@ namespace GUI {
    ascent: 11
    descent: 2
    first char: 0 (0x00)
-   last char: 128 (0x80)
+   last char: 126 (0x7e)
    default char: 0 (0x00)
    proportional: no
    Public domain font.  Share and enjoy.
@@ -75,6 +75,70 @@ static const uInt16 _console_font_bits[] = {
 0x0000,
 0x0000,
 
+/* Character 30 (0x1e): large centered rounded rectangle
+   width 8
+   +--------+
+   |  ****  |
+   | ****** |
+   | ****** |
+   | ****** |
+   | ****** |
+   | ****** |
+   | ****** |
+   | ****** |
+   | ****** |
+   | ****** |
+   | ****** |
+   | ****** |
+   |  ****  |
+   +--------+
+*/
+0x3c00,
+0x7e00,
+0x7e00,
+0x7e00,
+0x7e00,
+0x7e00,
+0x7e00,
+0x7e00,
+0x7e00,
+0x7e00,
+0x7e00,
+0x7e00,
+0x3c00,
+
+/* Character 31 (0x1f): large centered circle
+   width 8
+   +--------+
+   |        |
+   |        |
+   |        |
+   |        |
+   |        |
+   |  ****  |
+   | ****** |
+   | ****** |
+   |  ****  |
+   |        |
+   |        |
+   |        |
+   |        |
+   +--------+
+*/
+0x0000,
+0x0000,
+0x0000,
+0x0000,
+0x0000,
+0x3c00,
+0x7e00,
+0x7e00,
+0x3c00,
+0x0000,
+0x0000,
+0x0000,
+0x0000,
+
 /* Character 32 (0x20):
    width 8
    +--------+
@@ -3113,204 +3177,138 @@ static const uInt16 _console_font_bits[] = {
 0x0000,
 0x0000,
 0x0000,
-0x0000,
-
-/* Character 127 (0x7f): large centered rounded rectangle
-   width 8
-   +--------+
-   |  ****  |
-   | ****** |
-   | ****** |
-   | ****** |
-   | ****** |
-   | ****** |
-   | ****** |
-   | ****** |
-   | ****** |
-   | ****** |
-   | ****** |
-   | ****** |
-   |  ****  |
-   +--------+
-*/
-0x3c00,
-0x7e00,
-0x7e00,
-0x7e00,
-0x7e00,
-0x7e00,
-0x7e00,
-0x7e00,
-0x7e00,
-0x7e00,
-0x7e00,
-0x7e00,
-0x3c00,
-
-/* Character 128 (0x80): large centered circle
-   width 8
-   +--------+
-   |        |
-   |        |
-   |        |
-   |        |
-   |        |
-   |  ****  |
-   | ****** |
-   | ****** |
-   |  ****  |
-   |        |
-   |        |
-   |        |
-   |        |
-   +--------+
-*/
-0x0000,
-0x0000,
-0x0000,
-0x0000,
-0x0000,
-0x3c00,
-0x7e00,
-0x7e00,
-0x3c00,
-0x0000,
-0x0000,
-0x0000,
 0x0000
 };
 
 /* Character->glyph mapping. */
 static const uInt32 _console_sysfont_offset[] = {
-	13, /* (0x00) */
-	0,	/* (0x01) */
-	0,	/* (0x02) */
-	0,	/* (0x03) */
-	0,	/* (0x04) */
-	0,	/* (0x05) */
-	0,	/* (0x06) */
-	0,	/* (0x07) */
-	0,	/* (0x08) */
-	0,	/* (0x09) */
-	0,	/* (0x0a) */
-	0,	/* (0x0b) */
-	0,	/* (0x0c) */
-	0,	/* (0x0d) */
-	0,	/* (0x0e) */
-	0,	/* (0x0f) */
-	0,	/* (0x10) */
-	0,	/* (0x11) */
-	0,	/* (0x12) */
-	0,	/* (0x13) */
-	0,	/* (0x14) */
-	0,	/* (0x15) */
-	0,	/* (0x16) */
-	0,	/* (0x17) */
-	0,	/* (0x18) */
-	0,	/* (0x19) */
-	0,	/* (0x1a) */
-	0,	/* (0x1b) */
-	0,	/* (0x1c) */
-	0,	/* (0x1d) */
-	0,	/* (0x1e) */
-	0,	/* (0x1f) */
-	13,	/* (0x20) */
-	26,	/* (0x21) */
-	39,	/* (0x22) */
-	52,	/* (0x23) */
-	65,	/* (0x24) */
-	78,	/* (0x25) */
-	91,	/* (0x26) */
-	104,	/* (0x27) */
-	117,	/* (0x28) */
-	130,	/* (0x29) */
-	143,	/* (0x2a) */
-	156,	/* (0x2b) */
-	169,	/* (0x2c) */
-	182,	/* (0x2d) */
-	195,	/* (0x2e) */
-	208,	/* (0x2f) */
-	221,	/* (0x30) */
-	234,	/* (0x31) */
-	247,	/* (0x32) */
-	260,	/* (0x33) */
-	273,	/* (0x34) */
-	286,	/* (0x35) */
-	299,	/* (0x36) */
-	312,	/* (0x37) */
-	325,	/* (0x38) */
-	338,	/* (0x39) */
-	351,	/* (0x3a) */
-	364,	/* (0x3b) */
-	377,	/* (0x3c) */
-	390,	/* (0x3d) */
-	403,	/* (0x3e) */
-	416,	/* (0x3f) */
-	429,	/* (0x40) */
-	442,	/* (0x41) */
-	455,	/* (0x42) */
-	468,	/* (0x43) */
-	481,	/* (0x44) */
-	494,	/* (0x45) */
-	507,	/* (0x46) */
-	520,	/* (0x47) */
-	533,	/* (0x48) */
-	546,	/* (0x49) */
-	559,	/* (0x4a) */
-	572,	/* (0x4b) */
-	585,	/* (0x4c) */
-	598,	/* (0x4d) */
-	611,	/* (0x4e) */
-	624,	/* (0x4f) */
-	637,	/* (0x50) */
-	650,	/* (0x51) */
-	663,	/* (0x52) */
-	676,	/* (0x53) */
-	689,	/* (0x54) */
-	702,	/* (0x55) */
-	715,	/* (0x56) */
-	728,	/* (0x57) */
-	741,	/* (0x58) */
-	754,	/* (0x59) */
-	767,	/* (0x5a) */
-	780,	/* (0x5b) */
-	793,	/* (0x5c) */
-	806,	/* (0x5d) */
-	819,	/* (0x5e) */
-	832,	/* (0x5f) */
-	845,	/* (0x60) */
-	858,	/* (0x61) */
-	871,	/* (0x62) */
-	884,	/* (0x63) */
-	897,	/* (0x64) */
-	910,	/* (0x65) */
-	923,	/* (0x66) */
-	936,	/* (0x67) */
-	949,	/* (0x68) */
-	962,	/* (0x69) */
-	975,	/* (0x6a) */
-	988,	/* (0x6b) */
-	1001,	/* (0x6c) */
-	1014,	/* (0x6d) */
-	1027,	/* (0x6e) */
-	1040,	/* (0x6f) */
-	1053,	/* (0x70) */
-	1066,	/* (0x71) */
-	1079,	/* (0x72) */
-	1092,	/* (0x73) */
-	1105,	/* (0x74) */
-	1118,	/* (0x75) */
-	1131,	/* (0x76) */
-	1144,	/* (0x77) */
-	1157,	/* (0x78) */
-	1170,	/* (0x79) */
-	1183,	/* (0x7a) */
-	1196,	/* (0x7b) */
-	1209,	/* (0x7c) */
-	1222,	/* (0x7d) */
-	1235,	/* (0x7e) */
-	1248,	/* (0x7f) */
-	1261,	/* (0x80) */
+  39,   /* (0x00) */
+  0,    /* (0x01) */
+  0,    /* (0x02) */
+  0,    /* (0x03) */
+  0,    /* (0x04) */
+  0,    /* (0x05) */
+  0,    /* (0x06) */
+  0,    /* (0x07) */
+  0,    /* (0x08) */
+  0,    /* (0x09) */
+  0,    /* (0x0a) */
+  0,    /* (0x0b) */
+  0,    /* (0x0c) */
+  0,    /* (0x0d) */
+  0,    /* (0x0e) */
+  0,    /* (0x0f) */
+  0,    /* (0x10) */
+  0,    /* (0x11) */
+  0,    /* (0x12) */
+  0,    /* (0x13) */
+  0,    /* (0x14) */
+  0,    /* (0x15) */
+  0,    /* (0x16) */
+  0,    /* (0x17) */
+  0,    /* (0x18) */
+  0,    /* (0x19) */
+  0,    /* (0x1a) */
+  0,    /* (0x1b) */
+  0,    /* (0x1c) */
+  0,    /* (0x1d) */
+  13,   /* (0x1e) */
+  26,   /* (0x1f) */
+  39,   /* (0x20) */
+  52,   /* (0x21) */
+  65,   /* (0x22) */
+  78,   /* (0x23) */
+  91,   /* (0x24) */
+  104,  /* (0x25) */
+  117,  /* (0x26) */
+  130,  /* (0x27) */
+  143,  /* (0x28) */
+  156,  /* (0x29) */
+  169,  /* (0x2a) */
+  182,  /* (0x2b) */
+  195,  /* (0x2c) */
+  208,  /* (0x2d) */
+  221,  /* (0x2e) */
+  234,  /* (0x2f) */
+  247,  /* (0x30) */
+  260,  /* (0x31) */
+  273,  /* (0x32) */
+  286,  /* (0x33) */
+  299,  /* (0x34) */
+  312,  /* (0x35) */
+  325,  /* (0x36) */
+  338,  /* (0x37) */
+  351,  /* (0x38) */
+  364,  /* (0x39) */
+  377,  /* (0x3a) */
+  390,  /* (0x3b) */
+  403,  /* (0x3c) */
+  416,  /* (0x3d) */
+  429,  /* (0x3e) */
+  442,  /* (0x3f) */
+  455,  /* (0x40) */
+  468,  /* (0x41) */
+  481,  /* (0x42) */
+  494,  /* (0x43) */
+  507,  /* (0x44) */
+  520,  /* (0x45) */
+  533,  /* (0x46) */
+  546,  /* (0x47) */
+  559,  /* (0x48) */
+  572,  /* (0x49) */
+  585,  /* (0x4a) */
+  598,  /* (0x4b) */
+  611,  /* (0x4c) */
+  624,  /* (0x4d) */
+  637,  /* (0x4e) */
+  650,  /* (0x4f) */
+  663,  /* (0x50) */
+  676,  /* (0x51) */
+  689,  /* (0x52) */
+  702,  /* (0x53) */
+  715,  /* (0x54) */
+  728,  /* (0x55) */
+  741,  /* (0x56) */
+  754,  /* (0x57) */
+  767,  /* (0x58) */
+  780,  /* (0x59) */
+  793,  /* (0x5a) */
+  806,  /* (0x5b) */
+  819,  /* (0x5c) */
+  832,  /* (0x5d) */
+  845,  /* (0x5e) */
+  858,  /* (0x5f) */
+  871,  /* (0x60) */
+  884,  /* (0x61) */
+  897,  /* (0x62) */
+  910,  /* (0x63) */
+  923,  /* (0x64) */
+  936,  /* (0x65) */
+  949,  /* (0x66) */
+  962,  /* (0x67) */
+  975,  /* (0x68) */
+  988,  /* (0x69) */
+  1001, /* (0x6a) */
+  1014, /* (0x6b) */
+  1027, /* (0x6c) */
+  1040, /* (0x6d) */
+  1053, /* (0x6e) */
+  1066, /* (0x6f) */
+  1079, /* (0x70) */
+  1092, /* (0x71) */
+  1105, /* (0x72) */
+  1118, /* (0x73) */
+  1131, /* (0x74) */
+  1144, /* (0x75) */
+  1157, /* (0x76) */
+  1170, /* (0x77) */
+  1183, /* (0x78) */
+  1196, /* (0x79) */
+  1209, /* (0x7a) */
+  1222, /* (0x7b) */
+  1235, /* (0x7c) */
+  1248, /* (0x7d) */
+  1261  /* (0x7e) */
 };
 
 static const FontDesc consoleDesc = {
@@ -3320,7 +3318,7 @@ static const FontDesc consoleDesc = {
 	8, 13, 0, -1,             /* max bounding box */
 	11,                       /* ascent (baseline) height */
 	0,                        /* first character in bitmap */
-	129,                      /* font size in glyphs */
+	127,                      /* font size in glyphs */
 	_console_font_bits,       /* 16-bit right-padded bitmap data */
 	_console_sysfont_offset,  /* offsets into bitmap data*/
 	0,  /* fixed width*/      /* character widths or NULL if fixed */