Converted several 'toString' methods to use stringstreams instead of

multiple concatentation of strings.  This should be faster, or at least
lead to less string constructor calls.

Output of 'ROW' directives in the disassembly now shows only 8 items per
line, instead of 16.  This allows to see all the bytes without having a
'...' in between.  A future release may customize this to the size of the
output area.

Fixed output from debugger 'disasm' command to properly align different
directive types and show GFX and PGFX output.

Bumped state file version to 3.3 final, since there are no further
changes to the code that will break the file format.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2183 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2010-11-11 16:46:41 +00:00
parent 747164b4c5
commit c9ab109524
8 changed files with 366 additions and 455 deletions

View File

@ -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;
}

View File

@ -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];

View File

@ -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);

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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)

View File

@ -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)

View File

@ -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 */