X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftom.cpp;h=08832a8ce3ccb3b3ed9c304c26cd5ca3e54df7a9;hb=80871c4045dd1aa9b60e03b9cc92e7d2835a2387;hp=ed47bf8043f79ac42a76052ab70aca2d8297811e;hpb=34c2f4526d11f2139130c4c94920dd7b1c7a6124;p=virtualjaguar diff --git a/src/tom.cpp b/src/tom.cpp index ed47bf8..08832a8 100644 --- a/src/tom.cpp +++ b/src/tom.cpp @@ -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