X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftom.cpp;h=08832a8ce3ccb3b3ed9c304c26cd5ca3e54df7a9;hb=22e4f2eeba52ba2a1f2808e82147dc57a9e4e44f;hp=10a29f0f1913d1f0d4d2bc1d711376d6cde7ad47;hpb=2f21d8ee63902b160acbaf4c26caaaa0e23ca62f;p=virtualjaguar diff --git a/src/tom.cpp b/src/tom.cpp index 10a29f0..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,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; @@ -775,8 +778,12 @@ void TOMExecScanline(uint16 scanline, bool render) //Hm, it seems that the OP needs to execute from zero, so let's try it: // And it works! But need to do some optimizations in the OP to keep it from attempting // to do a scanline render in the non-display area... [DONE] -#if 0 +//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) { @@ -817,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... @@ -831,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 { /* @@ -895,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); @@ -903,10 +912,6 @@ void tom_render_24bpp_scanline(uint32 * backbuffer) for(uint32 i=0; i