X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fdebug%2Fopbrowser.cpp;h=c4193d8798ce8438e0c183477aaf2970d2fa4c49;hb=32f569e1bd09f5d7f07005d119f6408805106381;hp=f129bec62f98c4208fbff6d2f6e9a227de986af7;hpb=9af4fb023287b26dce01a36c65c9e30f56481051;p=virtualjaguar diff --git a/src/gui/debug/opbrowser.cpp b/src/gui/debug/opbrowser.cpp index f129bec..c4193d8 100644 --- a/src/gui/debug/opbrowser.cpp +++ b/src/gui/debug/opbrowser.cpp @@ -21,10 +21,8 @@ OPBrowserWindow::OPBrowserWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog), -// layout(new QVBoxLayout), text(new QTextBrowser), layout(new QVBoxLayout), text(new QLabel), - refresh(new QPushButton(tr("Refresh")))//, -// memBase(0) + refresh(new QPushButton(tr("Refresh"))) { setWindowTitle(tr("OP Browser")); @@ -32,11 +30,16 @@ OPBrowserWindow::OPBrowserWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::D // resize(560, 480); QFont fixedFont("Lucida Console", 8, QFont::Normal); +// QFont fixedFont("", 8, QFont::Normal); + fixedFont.setStyleHint(QFont::TypeWriter); text->setFont(fixedFont); //// layout->setSizeConstraint(QLayout::SetFixedSize); setLayout(layout); - layout->addWidget(text); + QScrollArea * scrollArea = new QScrollArea; + scrollArea->setWidgetResizable(true); + scrollArea->setWidget(text); + layout->addWidget(scrollArea); layout->addWidget(refresh); connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents())); @@ -48,39 +51,8 @@ void OPBrowserWindow::RefreshContents(void) char string[1024];//, buf[64]; QString opDump; -#if 0 - for(uint32_t i=0; i<480; i+=16) - { - sprintf(string, "%s%06X: ", (i != 0 ? "
" : ""), memBase + i); - - for(uint32_t j=0; j<16; j++) - { - sprintf(buf, "%02X ", jaguarMainRAM[memBase + i + j]); - strcat(string, buf); - } - - sprintf(buf, "| "); - strcat(string, buf); - - for(uint32_t j=0; j<16; j++) - { - uint8_t c = jaguarMainRAM[memBase + i + j]; - sprintf(buf, "&#%i;", c); - - if (c == 0x20) - sprintf(buf, " "); - - if ((c < 0x20) || ((c > 0x7F) && (c < 0xA0))) - sprintf(buf, "."); - - strcat(string, buf); - } - - memDump += QString(string); - } -#endif uint32_t olp = OPGetListPointer(); - sprintf(string, "OLP = $%08X

", olp); + sprintf(string, "OLP = $%X
", olp); opDump += QString(string); numberOfObjects = 0; @@ -94,46 +66,10 @@ void OPBrowserWindow::RefreshContents(void) void OPBrowserWindow::keyPressEvent(QKeyEvent * e) { - if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Return) + if (e->key() == Qt::Key_Escape) hide(); -#if 0 - else if (e->key() == Qt::Key_PageUp) - { - memBase -= 480; - - if (memBase < 0) - memBase = 0; - - RefreshContents(); - } - else if (e->key() == Qt::Key_PageDown) - { - memBase += 480; - - if (memBase > (0x200000 - 480)) - memBase = 0x200000 - 480; - - RefreshContents(); - } - else if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus) - { - memBase -= 16; - - if (memBase < 0) - memBase = 0; - + else if (e->key() == Qt::Key_Enter) RefreshContents(); - } - else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal) - { - memBase += 16; - - if (memBase > (0x200000 - 480)) - memBase = 0x200000 - 480; - - RefreshContents(); - } -#endif } @@ -171,9 +107,13 @@ void OPBrowserWindow::DiscoverObjects(uint32_t address) if (objectType == 3) { - // Recursion needed to follow all links! This does depth-first recursion - // on the not-taken objects - DiscoverObjects(address + 8); + // Branch if YPOS < 2047 can be treated as a GOTO, so don't do any + // discovery in that case. Otherwise, have at it: + if ((lo & 0xFFFF) != 0x7FFB) + // Recursion needed to follow all links! This does depth-first + // recursion on the not-taken objects (N.B.: The object following + // the branch object is at +16, not +8!) + DiscoverObjects(address + 16); } // Get the next object... @@ -203,40 +143,35 @@ void OPBrowserWindow::DumpObjectList(QString & list) uint32_t lo = JaguarReadLong(address + 4, OP); uint8_t objectType = lo & 0x07; uint32_t link = ((hi << 11) | (lo >> 21)) & 0x3FFFF8; -// WriteLog("%08X: %08X %08X %s", address, hi, lo, opType[objectType]); - sprintf(buf, "%08X: %08X %08X %s -> %08X", address, hi, lo, opType[objectType], link); + sprintf(buf, "
%06X: %08X %08X %s -> %06X", address, hi, lo, opType[objectType], link); list += QString(buf); if (objectType == 3) { uint16_t ypos = (lo >> 3) & 0x7FF; uint8_t cc = (lo >> 14) & 0x07; // Proper # of bits == 3 -// WriteLog(" YPOS=%u, CC=%s, link=$%08X", ypos, ccType[cc], link); -// sprintf(buf, " YPOS=%u, CC=%s, link=$%08X", ypos, ccType[cc], link); sprintf(buf, " YPOS %s %u", ccType[cc], ypos); list += QString(buf); } -// WriteLog("\n"); list += "
"; if (objectType == 0) - DumpFixedObject(list, OPLoadPhrase(address + 0), OPLoadPhrase(address + 8)); + DumpFixedObject(list, OPLoadPhrase(address + 0), + OPLoadPhrase(address + 8)); if (objectType == 1) - DumpScaledObject(list, OPLoadPhrase(address + 0), OPLoadPhrase(address + 8), - OPLoadPhrase(address + 16)); + DumpScaledObject(list, OPLoadPhrase(address + 0), + OPLoadPhrase(address + 8), OPLoadPhrase(address + 16)); if (address == link) // Ruh roh... { // Runaway recursive link is bad! -// WriteLog("***** SELF REFERENTIAL LINK *****\n\n"); - sprintf(buf, "***** SELF REFERENTIAL LINK *****

"); + sprintf(buf, "***** SELF REFERENTIAL LINK *****
"); list += QString(buf); } } -// WriteLog("\n"); list += "
"; } @@ -245,18 +180,15 @@ void OPBrowserWindow::DumpScaledObject(QString & list, uint64_t p0, uint64_t p1, { char buf[512]; -// WriteLog(" %08X %08X\n", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF)); - sprintf(buf, "_________ %08X %08X
", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF)); + sprintf(buf, "        %08X %08X
", (uint32_t)(p1 >> 32), (uint32_t)(p1 & 0xFFFFFFFF)); list += QString(buf); -// WriteLog(" %08X %08X\n", (uint32)(p2>>32), (uint32)(p2&0xFFFFFFFF)); - sprintf(buf, "_________ %08X %08X
", (uint32)(p2>>32), (uint32)(p2&0xFFFFFFFF)); + sprintf(buf, "        %08X %08X
", (uint32_t)(p2 >> 32), (uint32_t)(p2 & 0xFFFFFFFF)); list += QString(buf); DumpBitmapCore(list, p0, p1); - uint32 hscale = p2 & 0xFF; - uint32 vscale = (p2 >> 8) & 0xFF; - uint32 remainder = (p2 >> 16) & 0xFF; -// WriteLog(" [hsc: %02X, vsc: %02X, rem: %02X]\n", hscale, vscale, remainder); - sprintf(buf, "[hsc: %02X, vsc: %02X, rem: %02X]
", hscale, vscale, remainder); + uint32_t hscale = p2 & 0xFF; + uint32_t vscale = (p2 >> 8) & 0xFF; + uint32_t remainder = (p2 >> 16) & 0xFF; + sprintf(buf, "        [hsc: %02X, vsc: %02X, rem: %02X]
", hscale, vscale, remainder); list += QString(buf); } @@ -265,8 +197,7 @@ void OPBrowserWindow::DumpFixedObject(QString & list, uint64_t p0, uint64_t p1) { char buf[512]; -// WriteLog(" %08X %08X\n", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF)); - sprintf(buf, "          %08X %08X
", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF)); + sprintf(buf, "        %08X %08X
", (uint32_t)(p1 >> 32), (uint32_t)(p1 & 0xFFFFFFFF)); list += QString(buf); DumpBitmapCore(list, p0, p1); } @@ -292,17 +223,13 @@ void OPBrowserWindow::DumpBitmapCore(QString & list, uint64_t p0, uint64_t p1) uint8_t flags = (p1 >> 45) & 0x0F; uint8_t idx = (p1 >> 38) & 0x7F; uint32_t pitch = (p1 >> 15) & 0x07; -// WriteLog(" [%u x %u @ (%i, %u) (iw:%u, dw:%u) (%u bpp), l:%08X, p:%08X fp:%02X, fl:%s%s%s%s, idx:%02X, pt:%02X]\n", -// iwidth * bdMultiplier[bitdepth], -// height, xpos, ypos, iwidth, dwidth, op_bitmap_bit_depth[bitdepth], link, -// ptr, firstPix, (flags&OPFLAG_REFLECT ? "REFLECT " : ""), -// (flags&OPFLAG_RMW ? "RMW " : ""), (flags&OPFLAG_TRANS ? "TRANS " : ""), -// (flags&OPFLAG_RELEASE ? "RELEASE" : ""), idx, pitch); - sprintf(buf, " [%u x %u @ (%i, %u) (iw:%u, dw:%u) (%u bpp), p:%08X fp:%02X, fl:%s%s%s%s, idx:%02X, pt:%02X]
", + + sprintf(buf, "        [%u x %u @ (%i, %u) (iw:%u, dw:%u) (%u bpp), p:%06X fp:%02X, fl:%s%s%s%s, idx:%02X, pt:%02X]
", iwidth * bdMultiplier[bitdepth], height, xpos, ypos, iwidth, dwidth, op_bitmap_bit_depth[bitdepth], - ptr, firstPix, (flags&OPFLAG_REFLECT ? "REFLECT " : ""), - (flags&OPFLAG_RMW ? "RMW " : ""), (flags&OPFLAG_TRANS ? "TRANS " : ""), - (flags&OPFLAG_RELEASE ? "RELEASE" : ""), idx, pitch); + ptr, firstPix, (flags & OPFLAG_REFLECT ? "REFLECT " : ""), + (flags & OPFLAG_RMW ? "RMW " : ""), (flags & OPFLAG_TRANS ? "TRANS " : ""), + (flags & OPFLAG_RELEASE ? "RELEASE" : ""), idx, pitch); list += QString(buf); } +