X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fop.cpp;h=62be06681901ac49a6f311e5298a3cb20bcc7645;hb=7a936c870f76998bc682b7db307d7732e36fbeac;hp=38322d8e432a0fd9e6d8678d10b48024bc1d6296;hpb=371821533a5a070a15fa1e7f2da2de7b94731bda;p=virtualjaguar diff --git a/src/op.cpp b/src/op.cpp index 38322d8..62be066 100644 --- a/src/op.cpp +++ b/src/op.cpp @@ -51,7 +51,8 @@ void OPProcessFixedBitmap(uint64 p0, uint64 p1, bool render); void OPProcessScaledBitmap(uint64 p0, uint64 p1, uint64 p2, bool render); -void OPDumpObjectList(uint32 address); +void OPDiscoverObjects(uint32 address); +void OPDumpObjectList(void); void DumpScaledObject(uint64 p0, uint64 p1, uint64 p2); void DumpFixedObject(uint64 p0, uint64 p1); void DumpBitmapCore(uint64 p0, uint64 p1); @@ -137,8 +138,10 @@ static const char * opType[8] = { "(BITMAP)", "(SCALED BITMAP)", "(GPU INT)", "(BRANCH)", "(STOP)", "???", "???", "???" }; static const char * ccType[8] = { "\"==\"", "\"<\"", "\">\"", "(opflag set)", "(second half line)", "?", "?", "?" }; -static uint32 objectLink[8192]; -static uint32 numberOfLinks; +static uint32 object[8192]; +static uint32 numberOfObjects; +//static uint32 objectLink[8192]; +//static uint32 numberOfLinks; void OPDone(void) { @@ -177,24 +180,23 @@ void OPDone(void) WriteLog("\n"); #else - numberOfLinks = 0; - - OPDumpObjectList(olp); + numberOfObjects = 0; + OPDiscoverObjects(olp); + OPDumpObjectList(); #endif } - -// To do this properly, we have to use recursion... -void OPDumpObjectList(uint32 address) +void OPDiscoverObjects(uint32 address) { - // Sanity checking: If we've already visited this link, bail out! - for(uint32 i=0; i> 21)) & 0x3FFFF8; - WriteLog("%08X: %08X %08X %s", address, hi, lo, opType[objectType]); if (objectType == 3) { uint16 ypos = (lo >> 3) & 0x7FF; uint8 cc = (lo >> 14) & 0x07; // Proper # of bits == 3 - WriteLog(" YPOS=%u, CC=%s, link=$%08X", ypos, ccType[cc], link); // Recursion needed to follow all links! - WriteLog("\n"); - OPDumpObjectList(address + 8); - - // Do the sanity check after recursive call: We may have already seen this... - // Sanity checking: If we've already visited this link, bail out! -//disnowok: we added ourself above -// for(uint32 i=0; i> 21)) & 0x3FFFF8; + WriteLog("%08X: %08X %08X %s", address, hi, lo, opType[objectType]); + + if (objectType == 3) + { + uint16 ypos = (lo >> 3) & 0x7FF; + uint8 cc = (lo >> 14) & 0x07; // Proper # of bits == 3 + WriteLog(" YPOS=%u, CC=%s, link=$%08X", ypos, ccType[cc], link); } WriteLog("\n"); @@ -238,19 +273,12 @@ void OPDumpObjectList(uint32 address) { // Runaway recursive link is bad! WriteLog("***** SELF REFERENTIAL LINK *****\n\n"); - return; } - - address = link; - objectLink[numberOfLinks++] = address; } - while (objectType != 4); WriteLog("\n"); } - - // // Object Processor memory access // Memory range: F00010 - F00027 @@ -372,6 +400,7 @@ void DumpFixedObject(uint64 p0, uint64 p1) void DumpBitmapCore(uint64 p0, uint64 p1) { + uint32 bdMultiplier[8] = { 64, 32, 16, 8, 4, 2, 1, 1 }; uint8 bitdepth = (p1 >> 12) & 0x07; //WAS: int16 ypos = ((p0 >> 3) & 0x3FF); // ??? What if not interlaced (/2)? int16 ypos = ((p0 >> 3) & 0x7FF); // ??? What if not interlaced (/2)? @@ -386,8 +415,9 @@ void DumpBitmapCore(uint64 p0, uint64 p1) uint8 flags = (p1 >> 45) & 0x0F; uint8 idx = (p1 >> 38) & 0x7F; uint32 pitch = (p1 >> 15) & 0x07; - WriteLog(" [%u (%u) x %u @ (%i, %u) (%u bpp), l: %08X, p: %08X fp: %02X, fl:%s%s%s%s, idx:%02X, pt:%02X]\n", - iwidth, dwidth, height, xpos, ypos, op_bitmap_bit_depth[bitdepth], link, + 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);