]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/tom.cpp
Virtual Jaguar 2.0.0 release.
[virtualjaguar] / src / tom.cpp
index ed47bf8043f79ac42a76052ab70aca2d8297811e..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,22 +759,20 @@ 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;
 
 //Interlacing is still not handled correctly here... !!! FIX !!!
        if (scanline & 0x01)                                                    // Execute OP only on even lines (non-interlaced only!)
-//     if (!(scanline & 0x01))                                                 // Execute OP only on even lines (non-interlaced only!)
                return;
 
 //Hm, it seems that the OP needs to execute from zero, so let's try it:
@@ -779,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)
                {
@@ -820,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...
 
@@ -834,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
                        {
 /*
@@ -898,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);
@@ -906,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;
        }
 }