X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fblitter.cpp;h=13960996e6e9acf7afe55f786ac1a2ef6bfede3a;hb=d4731454394b78afceb79046c1917e9049a09374;hp=3d4207d42f8d2c31e093e9eced5fffefebb2c9ac;hpb=94e1e961b57f253b760298ab0bae96a7de6d20fa;p=virtualjaguar diff --git a/src/blitter.cpp b/src/blitter.cpp index 3d4207d..1396099 100644 --- a/src/blitter.cpp +++ b/src/blitter.cpp @@ -1,10 +1,10 @@ // // Blitter core // -// by James L. Hammons +// by James Hammons // (C) 2010 Underground Software // -// JLH = James L. Hammons +// JLH = James Hammons // // Who When What // --- ---------- ------------------------------------------------------------- @@ -31,6 +31,8 @@ // Various conditional compilation goodies... +//#define LOG_BLITS + //#define USE_ORIGINAL_BLITTER //#define USE_MIDSUMMER_BLITTER #define USE_MIDSUMMER_BLITTER_MKII @@ -1557,10 +1559,17 @@ uint8 BlitterReadByte(uint32 offset, uint32 who/*=UNKNOWN*/) // status register //This isn't cycle accurate--how to fix? !!! FIX !!! //Probably have to do some multi-threaded implementation or at least a reentrant safe implementation... +//Real hardware returns $00000805, just like the JTRM says. + if (offset == (0x38 + 0)) + return 0x00; + if (offset == (0x38 + 1)) + return 0x00; + if (offset == (0x38 + 2)) + return 0x08; if (offset == (0x38 + 3)) - return 0x01; // always idle + return 0x05; // always idle/never stopped (collision detection ignored!) -// CHECK HERE ONCE THIS FIX HAS BEEN TESTED: [ ] +// CHECK HERE ONCE THIS FIX HAS BEEN TESTED: [X] //Fix for AvP: if (offset >= 0x04 && offset <= 0x07) //This is it. I wonder if it just ignores the lower three bits? @@ -1825,9 +1834,9 @@ void LogBlit(void) WriteLog(" UPDA2 = %s\n", (UPDA2 ? "1" : "0")); WriteLog(" DSTA2 = %s\n", (DSTA2 ? "1" : "0")); WriteLog(" ZOP = %s %s %s\n", (Z_OP_INF ? "<" : ""), (Z_OP_EQU ? "=" : ""), (Z_OP_SUP ? ">" : "")); - WriteLog("--LFUFUNC = %s\n", opStr[(cmd >> 21) & 0x0F]); + WriteLog("+-LFUFUNC = %s\n", opStr[(cmd >> 21) & 0x0F]); WriteLog("| PATDSEL = %s (PD=%08X%08X)\n", (PATDSEL ? "1" : "0"), REG(PATTERNDATA), REG(PATTERNDATA + 4)); - WriteLog("--ADDDSEL = %s\n", (ADDDSEL ? "1" : "0")); + WriteLog("+-ADDDSEL = %s\n", (ADDDSEL ? "1" : "0")); WriteLog(" CMPDST = %s\n", (CMPDST ? "1" : "0")); WriteLog(" BCOMPEN = %s\n", (BCOMPEN ? "1" : "0")); WriteLog(" DCOMPEN = %s\n", (DCOMPEN ? "1" : "0")); @@ -1854,6 +1863,9 @@ void LogBlit(void) void BlitterMidsummer(uint32 cmd) { +#ifdef LOG_BLITS + LogBlit(); +#endif uint32 outer_loop, inner_loop, a1_addr, a2_addr; int32 a1_x, a1_y, a2_x, a2_y, a1_width, a2_width; uint8 a1_phrase_mode, a2_phrase_mode; @@ -2672,6 +2684,9 @@ bool logBlit = false; void BlitterMidsummer2(void) { +#ifdef LOG_BLITS + LogBlit(); +#endif // Here's what the specs say the state machine does. Note that this can probably be // greatly simplified (also, it's different from what John has in his Oberon docs): //Will remove stuff that isn't in Jaguar I once fully described (stuff like texture won't