]> Shamusworld >> Repos - virtualjaguar/commitdiff
Fixed rendering to properly render different Jaguar pixel widths.
authorShamus Hammons <jlhamm@acm.org>
Thu, 20 Jan 2011 21:29:02 +0000 (21:29 +0000)
committerShamus Hammons <jlhamm@acm.org>
Thu, 20 Jan 2011 21:29:02 +0000 (21:29 +0000)
src/gui/glwidget.cpp
src/gui/mainwin.cpp
src/tom.cpp

index 51f2c26679b529a165a9e2578fd593faa1dc8161..d0e1934ed32a84a2a3499979522bd63ead26fe32 100644 (file)
@@ -71,9 +71,12 @@ rasterHeight = (vjs.hardwareTypeNTSC ? 240 : 256);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (vjs.glFilter ? GL_LINEAR : GL_NEAREST));
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (vjs.glFilter ? GL_LINEAR : GL_NEAREST));
 //     glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, rasterWidth, rasterHeight, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, buffer);
-       glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, rasterWidth, rasterHeight, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, buffer);
+//more kludge
+       glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, TOMGetVideoModeWidth(), rasterHeight, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, buffer);
+//     glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, rasterWidth, rasterHeight, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, buffer);
 
-       double w = (double)rasterWidth  / (double)textureWidth;
+       double w = (double)TOMGetVideoModeWidth()  / (double)textureWidth;
+//     double w = (double)rasterWidth  / (double)textureWidth;
        double h = (double)rasterHeight / (double)textureHeight;
        unsigned u = outputWidth;
        unsigned v = outputHeight;
index 8c66b8d3b3fd1854bec92b58d2d06162c90cc6bf..bfdbf0b8c8e4088ec8681e1bd4a0033f5487cc5e 100644 (file)
@@ -207,7 +207,9 @@ WriteLog("About to attempt to load BIOSes...\n");
        SET32(jaguarMainRAM, 0, 0x00200000);                    // Set top of stack...
 
 //Let's try this...
-/*if*/ JaguarLoadFile("./software/Rayman (World).j64");
+//     JaguarLoadFile("./software/Rayman (World).j64");
+//     JaguarLoadFile("./software/I-War (World).j64");
+       JaguarLoadFile("./software/Alien vs Predator (World).j64");
 
 //This is crappy!!! !!! FIX !!!
 //Is this even needed any more? Hmm. Maybe. Dunno.
index 69e02a8310bcc92604872c4b4112b23215dc3b97..4b109b46965cc4b46c527e471347d7c8177b019f 100644 (file)
 // Who  When        What
 // ---  ----------  -------------------------------------------------------------
 // JLH  01/16/2010  Created this log ;-)
+// JLH  01/20/2011  Change rendering to RGBA, removed unnecessary code
 //
 // Note: Endian wrongness probably stems from the MAME origins of this emu and
-//       the braindead way in which MAME handles memory. :-)
+//       the braindead way in which MAME used to handle memory. :-}
 //
 // Note: TOM has only a 16K memory space
 //
@@ -328,12 +329,8 @@ uint32 tomWidth, tomHeight;
 uint32 tomTimerPrescaler;
 uint32 tomTimerDivider;
 int32 tomTimerCounter;
-//uint32 tom_scanline;
-//uint32 hblankWidthInPixels = 0;
 uint16 tom_jerry_int_pending, tom_timer_int_pending, tom_object_int_pending,
        tom_gpu_int_pending, tom_video_int_pending;
-//uint16 * tom_cry_rgb_mix_lut;
-//int16 * TOMBackbuffer;
 uint32 * TOMBackbuffer;
 
 static const char * videoMode_to_str[8] =
@@ -350,13 +347,8 @@ void tom_render_16bpp_direct_scanline(uint32 * backbuffer);
 void tom_render_16bpp_rgb_scanline(uint32 * backbuffer);
 void tom_render_16bpp_cry_rgb_mix_scanline(uint32 * backbuffer);
 
-void tom_render_16bpp_cry_stretch_scanline(uint32 * backbuffer);
-void tom_render_24bpp_stretch_scanline(uint32 * backbuffer);
-void tom_render_16bpp_direct_stretch_scanline(uint32 * backbuffer);
-void tom_render_16bpp_rgb_stretch_scanline(uint32 * backbuffer);
-void tom_render_16bpp_cry_rgb_mix_stretch_scanline(uint32 * backbuffer);
-
-render_xxx_scanline_fn * scanline_render_normal[] =
+//render_xxx_scanline_fn * scanline_render_normal[] =
+render_xxx_scanline_fn * scanline_render[] =
 {
        tom_render_16bpp_cry_scanline,
        tom_render_24bpp_scanline,
@@ -368,21 +360,6 @@ render_xxx_scanline_fn * scanline_render_normal[] =
        tom_render_16bpp_rgb_scanline
 };
 
-render_xxx_scanline_fn * scanline_render_stretch[] =
-{
-       tom_render_16bpp_cry_stretch_scanline,
-       tom_render_24bpp_stretch_scanline,
-       tom_render_16bpp_direct_stretch_scanline,
-       tom_render_16bpp_rgb_stretch_scanline,
-       tom_render_16bpp_cry_rgb_mix_stretch_scanline,
-       tom_render_24bpp_stretch_scanline,
-       tom_render_16bpp_direct_stretch_scanline,
-       tom_render_16bpp_rgb_stretch_scanline,
-};
-
-render_xxx_scanline_fn * scanline_render[8];
-
-
 // Screen info for various games [PAL]...
 /*
 BIOS
@@ -571,11 +548,6 @@ void TOMFillLookupTables(void)
                        | ((i & 0xF100) << 16)                                  // Red
                        | ((i & 0x003F) << 18)                                  // Green
                        | ((i & 0x07C0) << 5);                                  // Blue
-/*
-It does this:
-0000 0000 0000 0000 RRRR RBBB BBGG GGGG -> AAAA AAAA BBBB BBBB GGGG GGGG RRRR RRRR
-                    5432 1543 2154 3210              5432 1543 5432 1054 5432 1543
-*/
 
        for(uint32 i=0; i<0x10000; i++)
        {
@@ -591,10 +563,6 @@ It does this:
                CRY16ToRGB32[i] = 0x000000FF | (r << 24) | (g << 16) | (b << 8);
                MIX16ToRGB32[i] = (i & 0x01 ? RGB16ToRGB32[i] : CRY16ToRGB32[i]);
        }
-
-//     for(uint32 i=0; i<0x10000; i++)
-//             if (i & 0x01)
-//                     MIX16ToRGB32[i] = RGB16ToRGB32[i];
 }
 
 void TOMSetPendingJERRYInt(void)
@@ -785,132 +753,6 @@ void tom_render_16bpp_rgb_scanline(uint32 * backbuffer)
        }
 }
 
-/////////////////////////////////////////////////////////////////////
-// This stuff may just go away by itself, especially if we do some //
-// good old OpenGL goodness...                                     //
-/////////////////////////////////////////////////////////////////////
-
-void tom_render_16bpp_cry_rgb_mix_stretch_scanline(uint32 *backbuffer)
-{
-       uint16 width=tomWidth;
-       uint8 *current_line_buffer=(uint8*)&tomRam8[0x1800];
-
-       while (width)
-       {
-               uint16 color = *current_line_buffer++;
-               color <<= 8;
-               color |= *current_line_buffer++;
-               *backbuffer++ = MIX16ToRGB32[color];
-               current_line_buffer += 2;
-               width--;
-       }
-}
-
-void tom_render_16bpp_cry_stretch_scanline(uint32 *backbuffer)
-{
-       uint32 chrm, chrl, y;
-
-       uint16 width=tomWidth;
-       uint8 *current_line_buffer=(uint8*)&tomRam8[0x1800];
-
-       while (width)
-       {
-               uint16 color;
-               color=*current_line_buffer++;
-               color<<=8;
-               color|=*current_line_buffer++;
-
-               chrm = (color & 0xF000) >> 12;
-               chrl = (color & 0x0F00) >> 8;
-               y    = (color & 0x00FF);
-
-               uint16 red   =  ((((uint32)redcv[chrm][chrl])*y)>>11);
-               uint16 green =  ((((uint32)greencv[chrm][chrl])*y)>>11);
-               uint16 blue  =  ((((uint32)bluecv[chrm][chrl])*y)>>11);
-
-               uint16 color2;
-               color2=*current_line_buffer++;
-               color2<<=8;
-               color2|=*current_line_buffer++;
-
-               chrm = (color2 & 0xF000) >> 12;
-               chrl = (color2 & 0x0F00) >> 8;
-               y    = (color2 & 0x00FF);
-
-               uint16 red2   = ((((uint32)redcv[chrm][chrl])*y)>>11);
-               uint16 green2 = ((((uint32)greencv[chrm][chrl])*y)>>11);
-               uint16 blue2  = ((((uint32)bluecv[chrm][chrl])*y)>>11);
-
-               red=(red+red2)>>1;
-               green=(green+green2)>>1;
-               blue=(blue+blue2)>>1;
-
-               *backbuffer++=(red<<10)|(green<<5)|blue;
-               width--;
-       }
-}
-
-void tom_render_24bpp_stretch_scanline(uint32 *backbuffer)
-{
-       uint16 width=tomWidth;
-       uint8 *current_line_buffer=(uint8*)&tomRam8[0x1800];
-
-       while (width)
-       {
-               uint16 green=*current_line_buffer++;
-               uint16 red=*current_line_buffer++;
-               /*uint16 nc=*/current_line_buffer++;
-               uint16 blue=*current_line_buffer++;
-               red>>=3;
-               green>>=3;
-               blue>>=3;
-               *backbuffer++=(red<<10)|(green<<5)|blue;
-               current_line_buffer+=4;
-               width--;
-       }
-}
-
-void tom_render_16bpp_direct_stretch_scanline(uint32 *backbuffer)
-{
-       uint16 width=tomWidth;
-       uint8 *current_line_buffer=(uint8*)&tomRam8[0x1800];
-
-       while (width)
-       {
-               uint16 color=*current_line_buffer++;
-               color<<=8;
-               color|=*current_line_buffer++;
-               color>>=1;
-               *backbuffer++=color;
-               current_line_buffer+=2;
-               width--;
-       }
-}
-
-void tom_render_16bpp_rgb_stretch_scanline(uint32 *backbuffer)
-{
-       uint16 width=tomWidth;
-       uint8 *current_line_buffer=(uint8*)&tomRam8[0x1800];
-
-       while (width)
-       {
-               uint16 color1=*current_line_buffer++;
-               color1<<=8;
-               color1|=*current_line_buffer++;
-               color1>>=1;
-               uint16 color2=*current_line_buffer++;
-               color2<<=8;
-               color2|=*current_line_buffer++;
-               color2>>=1;
-               uint16 red=(((color1&0x7c00)>>10)+((color2&0x7c00)>>10))>>1;
-               uint16 green=(((color1&0x00003e0)>>5)+((color2&0x00003e0)>>5))>>1;
-               uint16 blue=(((color1&0x0000001f))+((color2&0x0000001f)))>>1;
-
-               color1=(red<<10)|(blue<<5)|green;
-               *backbuffer++=color1;
-               width--;
-       }
-}
 
 void TOMResetBackbuffer(uint32 * backbuffer)
 {
@@ -1045,12 +887,10 @@ void tom_render_24bpp_scanline(uint32 * backbuffer)
 //
 void TOMInit(void)
 {
+       TOMFillLookupTables();
        OPInit();
        BlitterInit();
        TOMReset();
-       // Setup the non-stretchy scanline rendering...
-       memcpy(scanline_render, scanline_render_normal, sizeof(scanline_render));
-       TOMFillLookupTables();
 }
 
 void TOMDone(void)
@@ -1068,11 +908,6 @@ void TOMDone(void)
 //     memory_free(tom_cry_rgb_mix_lut);
 }
 
-/*uint32 tom_getHBlankWidthInPixels(void)
-{
-       return hblankWidthInPixels;
-}*/
-
 uint32 TOMGetVideoModeWidth(void)
 {
        //These widths are pretty bogus. Should use HDB1/2 & HDE/HBB & PWIDTH to calc the width...
@@ -1223,7 +1058,6 @@ void TOMReset(void)
        tomTimerPrescaler = 0;                                  // TOM PIT is disabled
        tomTimerDivider = 0;
        tomTimerCounter = 0;
-       memcpy(scanline_render, scanline_render_normal, sizeof(scanline_render));
 }
 
 //
@@ -1530,18 +1364,6 @@ int TOMIRQEnabled(int irq)
        return tomRam8[INT1 + 1/*0xE1*/] & (1 << irq);
 }
 
-//unused
-/*void tom_set_irq_latch(int irq, int enabled)
-{
-       tomRam8[0xE0] = (tomRam8[0xE0] & (~(1<<irq))) | (enabled ? (1<<irq) : 0);
-}*/
-
-//unused
-/*uint16 tom_irq_control_reg(void)
-{
-       return (tomRam8[0xE0] << 8) | tomRam8[0xE1];
-}*/
-
 // NEW:
 // TOM Programmable Interrupt Timer handler
 // NOTE: TOM's PIT is only enabled if the prescaler is != 0
@@ -1596,16 +1418,15 @@ void TOMExecPIT(uint32 cycles)
        }
 }
 
-
 void TOMPITCallback(void)
 {
-//     INT1_RREG |= 0x08;                         // Set TOM PIT interrupt pending
+//     INT1_RREG |= 0x08;                                                      // Set TOM PIT interrupt pending
        TOMSetPendingTimerInt();
-    GPUSetIRQLine(GPUIRQ_TIMER, ASSERT_LINE);  // It does the 'IRQ enabled' checking
+    GPUSetIRQLine(GPUIRQ_TIMER, ASSERT_LINE);  // It does the 'IRQ enabled' checking
 
 //     if (INT1_WREG & 0x08)
        if (TOMIRQEnabled(IRQ_TIMER))
-               m68k_set_irq(7);                       // Generate 68K NMI
+               m68k_set_irq(7);                                                // Generate 68K NMI
 
        TOMResetPIT();
 }