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",
}
-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:
//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)
{
}
#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...
//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
{
/*
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);
for(uint32 i=0; i<tomWidth; i++)
*currentLineBuffer++ = pixel;
}
-
-#warning "!!! Need to move this to an interface file !!! FIX !!!"
-// TOMBackbuffer += GetSDLScreenWidthInPixels();
- TOMBackbuffer += tomDeviceWidth;
}
}