From: Shamus Hammons Date: Fri, 25 Jan 2013 05:53:51 +0000 (-0600) Subject: Fixed missing border color on left hand side of screen. X-Git-Tag: 2.1.0~4 X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=virtualjaguar;a=commitdiff_plain;h=e82391f9b8113450e84d7178b61076f54e7cfa81 Fixed missing border color on left hand side of screen. --- diff --git a/src/tom.cpp b/src/tom.cpp index 9569252..db3f277 100644 --- a/src/tom.cpp +++ b/src/tom.cpp @@ -558,6 +558,7 @@ uint32 RGB16ToRGB32[0x10000]; uint32 CRY16ToRGB32[0x10000]; uint32 MIX16ToRGB32[0x10000]; + #warning "This is not endian-safe. !!! FIX !!!" void TOMFillLookupTables(void) { @@ -589,42 +590,50 @@ void TOMFillLookupTables(void) } } + void TOMSetPendingJERRYInt(void) { tom_jerry_int_pending = 1; } + void TOMSetPendingTimerInt(void) { tom_timer_int_pending = 1; } + void TOMSetPendingObjectInt(void) { tom_object_int_pending = 1; } + void TOMSetPendingGPUInt(void) { tom_gpu_int_pending = 1; } + void TOMSetPendingVideoInt(void) { tom_video_int_pending = 1; } + uint8 * TOMGetRamPointer(void) { return tomRam8; } + uint8 TOMGetVideoMode(void) { uint16 vmode = GET16(tomRam8, VMODE); return ((vmode & VARMOD) >> 6) | ((vmode & MODE) >> 1); } + //Used in only one place (and for debug purposes): OBJECTP.CPP #warning "Used in only one place (and for debug purposes): OBJECTP.CPP !!! FIX !!!" uint16 TOMGetVDB(void) @@ -632,6 +641,8 @@ uint16 TOMGetVDB(void) return GET16(tomRam8, VDB); } + +#define LEFT_BG_FIX // // 16 BPP CRY/RGB mixed mode rendering // @@ -646,15 +657,32 @@ void tom_render_16bpp_cry_rgb_mix_scanline(uint32 * backbuffer) //NOTE: May have to check HDB2 as well! // Get start position in HC ticks int16 startPos = GET16(tomRam8, HDB1) - (vjs.hardwareTypeNTSC ? LEFT_VISIBLE_HC : LEFT_VISIBLE_HC_PAL); + // Convert to pixels startPos /= pwidth; + if (startPos < 0) + // This is x2 because current_line_buffer is uint8 & we're in a 16bpp mode current_line_buffer += 2 * -startPos; else //This case doesn't properly handle the "start on the right side of virtual screen" case //Dunno why--looks Ok... -//What *is* for sure wrong is that it doesn't copy the linebuffer's BG pixels... +//What *is* for sure wrong is that it doesn't copy the linebuffer's BG pixels... [FIXED NOW] //This should likely be 4 instead of 2 (?--not sure) +// Actually, there should be NO multiplier, as startPos is expressed in PIXELS +// and so is the backbuffer. +#ifdef LEFT_BG_FIX + { + uint8 g = tomRam8[BORD1], r = tomRam8[BORD1 + 1], b = tomRam8[BORD2 + 1]; + uint32 pixel = 0x000000FF | (r << 24) | (g << 16) | (b << 8); + + for(int16 i=0; i= 0xF02000 && offset <= 0xF020FF) return (TOMReadByte(offset, who) << 8) | TOMReadByte(offset + 1, who); } + #define TOM_STRICT_MEMORY_ACCESS // // TOM byte access (write) @@ -1397,6 +1468,7 @@ void TOMWriteByte(uint32 offset, uint8 data, uint32 who/*=UNKNOWN*/) tomRam8[offset & 0x3FFF] = data; } + // // TOM word access (write) // @@ -1596,6 +1668,7 @@ if (offset == HEQ) #endif } + int TOMIRQEnabled(int irq) { // This is the correct byte in big endian... D'oh! @@ -1603,6 +1676,7 @@ int TOMIRQEnabled(int irq) return tomRam8[INT1 + 1/*0xE1*/] & (1 << irq); } + // NEW: // TOM Programmable Interrupt Timer handler // NOTE: TOM's PIT is only enabled if the prescaler is != 0 @@ -1610,6 +1684,7 @@ int TOMIRQEnabled(int irq) void TOMPITCallback(void); + void TOMResetPIT(void) { #ifndef NEW_TIMER_SYSTEM @@ -1632,6 +1707,7 @@ void TOMResetPIT(void) #endif } + // // TOM Programmable Interrupt Timer handler // NOTE: TOM's PIT is only enabled if the prescaler is != 0 @@ -1657,6 +1733,7 @@ void TOMExecPIT(uint32 cycles) } } + void TOMPITCallback(void) { // INT1_RREG |= 0x08; // Set TOM PIT interrupt pending @@ -1669,3 +1746,4 @@ void TOMPITCallback(void) TOMResetPIT(); } +