]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/tom.cpp
Fixed missing source :-P
[virtualjaguar] / src / tom.cpp
index 11d963b112673efe8374abe18603686242307871..08832a8ce3ccb3b3ed9c304c26cd5ca3e54df7a9 100644 (file)
@@ -332,7 +332,11 @@ uint32 tomTimerDivider;
 int32 tomTimerCounter;
 uint16 tom_jerry_int_pending, tom_timer_int_pending, tom_object_int_pending,
        tom_gpu_int_pending, tom_video_int_pending;
-uint32 * TOMBackbuffer;
+
+// These are set by the "user" of the Jaguar core lib, since these are
+// OS/system dependent.
+uint32 * screenBuffer;
+uint32 screenPitch;
 
 static const char * videoMode_to_str[8] =
        { "16 BPP CRY", "24 BPP RGB", "16 BPP DIRECT", "16 BPP RGB",
@@ -755,15 +759,14 @@ void tom_render_16bpp_rgb_scanline(uint32 * backbuffer)
 }
 
 
-void TOMResetBackbuffer(uint32 * backbuffer)
+/*void TOMResetBackbuffer(uint32 * backbuffer)
 {
        TOMBackbuffer = backbuffer;
-}
+}*/
 
 //
 // Process a single scanline
 //
-uint32 tomDeviceWidth;//kludge
 void TOMExecScanline(uint16 scanline, bool render)
 {
        bool inActiveDisplayArea = true;
@@ -778,7 +781,9 @@ void TOMExecScanline(uint16 scanline, bool render)
 //this seems to cause a regression in certain games, like rayman
 //which means I have to dig thru the asic nets to see what's wrong...
 #if 1
+// 16 isn't enough, and neither is 32 for raptgun. 32 fucks up Rayman
        if (scanline >= (uint16)GET16(tomRam8, VDB) && scanline < (uint16)GET16(tomRam8, VDE))
+//     if (scanline >= ((uint16)GET16(tomRam8, VDB) - 32) && scanline < (uint16)GET16(tomRam8, VDE))
        {
                if (render)
                {
@@ -819,10 +824,11 @@ void TOMExecScanline(uint16 scanline, bool render)
        }
 #endif
 
-       // Try to take PAL into account...
+       // Try to take PAL into account... [We do now!]
 
        uint16 topVisible = (vjs.hardwareTypeNTSC ? TOP_VISIBLE_VC : TOP_VISIBLE_VC_PAL),
                bottomVisible = (vjs.hardwareTypeNTSC ? BOTTOM_VISIBLE_VC : BOTTOM_VISIBLE_VC_PAL);
+       uint32 * TOMCurrentLine = &(screenBuffer[((scanline - topVisible) / 2) * screenPitch]);
 
        // Here's our virtualized scanline code...
 
@@ -833,7 +839,8 @@ void TOMExecScanline(uint16 scanline, bool render)
 //NOTE: The following doesn't put BORDER color on the sides... !!! FIX !!!
 #warning "The following doesn't put BORDER color on the sides... !!! FIX !!!"
                        if (vjs.renderType == RT_NORMAL)
-                               scanline_render[TOMGetVideoMode()](TOMBackbuffer);
+//                             scanline_render[TOMGetVideoMode()](TOMBackbuffer);
+                               scanline_render[TOMGetVideoMode()](TOMCurrentLine);
                        else//TV type render
                        {
 /*
@@ -897,7 +904,7 @@ void tom_render_24bpp_scanline(uint32 * backbuffer)
                else
                {
                        // If outside of VDB & VDE, then display the border color
-                       uint32 * currentLineBuffer = TOMBackbuffer;
+                       uint32 * currentLineBuffer = TOMCurrentLine;
                        uint8 g = tomRam8[BORD1], r = tomRam8[BORD1 + 1], b = tomRam8[BORD2 + 1];
 //Hm.                  uint32 pixel = 0xFF000000 | (b << 16) | (g << 8) | r;
                        uint32 pixel = 0x000000FF | (r << 24) | (g << 16) | (b << 8);
@@ -905,10 +912,6 @@ void tom_render_24bpp_scanline(uint32 * backbuffer)
                        for(uint32 i=0; i<tomWidth; i++)
                                *currentLineBuffer++ = pixel;
                }
-
-#warning "!!! Need to move this to an interface file !!! FIX !!!"
-//             TOMBackbuffer += GetSDLScreenWidthInPixels();
-               TOMBackbuffer += tomDeviceWidth;
        }
 }
 
@@ -1386,6 +1389,8 @@ if (offset == VP)
        WriteLog("TOM: Vertical Period written by %s: %u (%sinterlaced)\n", whoName[who], data, (data & 0x01 ? "non-" : ""));
 if (offset == HDB1)
        WriteLog("TOM: Horizontal Display Begin 1 written by %s: %u\n", whoName[who], data);
+if (offset == HDB2)
+       WriteLog("TOM: Horizontal Display Begin 2 written by %s: %u\n", whoName[who], data);
 if (offset == HDE)
        WriteLog("TOM: Horizontal Display End written by %s: %u\n", whoName[who], data);
 if (offset == HP)