Previous 199869 Revisions Next

r20806 Thursday 7th February, 2013 at 16:42:33 UTC by Angelo Salese
Removed 'gfx_decode' and fixed compile. Minor speed gain
[src/mame/includes]stv.h
[src/mame/machine]stvcd.c
[src/mame/video]stvvdp1.c

trunk/src/mame/machine/stvcd.c
r20805r20806
2525#include "imagedev/chd_cd.h"
2626#include "includes/stv.h"
2727#include "cdrom.h"
28#include "stvcd.h"
2928#include "sound/cdda.h"
3029#include "debugger.h"
3130#include "coreutil.h"
trunk/src/mame/video/stvvdp1.c
r20805r20806
311311
312312WRITE32_MEMBER ( saturn_state::saturn_vdp1_vram_w )
313313{
314   UINT8 *vdp1 = m_vdp1.gfx_decode;
315
316   COMBINE_DATA (&m_vdp1_vram[offset]);
317
318//  if (((offset * 4) > 0xdf) && ((offset * 4) < 0x140))
319//  {
320//      logerror("cpu %s (PC=%08X): VRAM dword write to %08X = %08X & %08X\n", space.device().tag(), space.device().safe_pc(), offset*4, data, mem_mask);
321//  }
322
323   data = m_vdp1_vram[offset];
324   /* put in gfx region for easy decoding */
325   vdp1[offset*4+0] = (data & 0xff000000) >> 24;
326   vdp1[offset*4+1] = (data & 0x00ff0000) >> 16;
327   vdp1[offset*4+2] = (data & 0x0000ff00) >> 8;
328   vdp1[offset*4+3] = (data & 0x000000ff) >> 0;
314   COMBINE_DATA(&m_vdp1_vram[offset]);
329315}
330316
331317WRITE32_MEMBER ( saturn_state::saturn_vdp1_framebuffer0_w )
r20805r20806
838824
839825void saturn_state::drawpixel_8bpp_trans(int x, int y, int patterndata, int offsetcnt)
840826{
827   UINT8 *vdp1_vram = (UINT8 *)m_vdp1_vram;
841828   UINT16 pix;
842829
843   pix = m_vdp1.gfx_decode[patterndata+offsetcnt];
830   pix = vdp1_vram[(patterndata+offsetcnt/2)^3];
844831   if ( pix & 0xff )
845832   {
846833      m_vdp1.framebuffer_draw_lines[y][x] = pix | m_sprite_colorbank;
r20805r20806
849836
850837void saturn_state::drawpixel_4bpp_notrans(int x, int y, int patterndata, int offsetcnt)
851838{
839   UINT8 *vdp1_vram = (UINT8 *)m_vdp1_vram;
852840   UINT16 pix;
853841
854   pix = m_vdp1.gfx_decode[patterndata+offsetcnt/2];
842   pix = vdp1_vram[(patterndata+offsetcnt/2)^3];
855843   pix = offsetcnt&1 ? (pix & 0x0f):((pix & 0xf0)>>4) ;
856844   m_vdp1.framebuffer_draw_lines[y][x] = pix | m_sprite_colorbank;
857845}
858846
859847void saturn_state::drawpixel_4bpp_trans(int x, int y, int patterndata, int offsetcnt)
860848{
849   UINT8 *vdp1_vram = (UINT8 *)m_vdp1_vram;
861850   UINT16 pix;
862851
863   pix = m_vdp1.gfx_decode[patterndata+offsetcnt/2];
852   pix = vdp1_vram[(patterndata+offsetcnt/2)^3];
864853   pix = offsetcnt&1 ? (pix & 0x0f):((pix & 0xf0)>>4) ;
865854   if ( pix )
866855      m_vdp1.framebuffer_draw_lines[y][x] = pix | m_sprite_colorbank;
r20805r20806
868857
869858void saturn_state::drawpixel_generic(int x, int y, int patterndata, int offsetcnt)
870859{
860   UINT8 *vdp1_vram = (UINT8 *)m_vdp1_vram;
871861   int pix,mode,transmask, spd = stv2_current_sprite.CMDPMOD & 0x40;
872862   int mesh = stv2_current_sprite.CMDPMOD & 0x100;
873863   int pix2;
r20805r20806
897887      {
898888         case 0x0000: // mode 0 16 colour bank mode (4bits) (hanagumi blocks)
899889            // most of the shienryu sprites use this mode
900            pix = m_vdp1.gfx_decode[(patterndata+offsetcnt/2) & 0xfffff];
890            pix = vdp1_vram[((patterndata+offsetcnt/2)^3) & 0xfffff];
901891            pix = offsetcnt&1 ? (pix & 0x0f):((pix & 0xf0)>>4) ;
902892            pix = pix+((stv2_current_sprite.CMDCOLR&0xfff0));
903893            mode = 0;
r20805r20806
905895            break;
906896         case 0x0008: // mode 1 16 colour lookup table mode (4bits)
907897            // shienryu explosisons (and some enemies) use this mode
908            pix2 = m_vdp1.gfx_decode[(patterndata+offsetcnt/2) & 0xfffff];
898            pix2 = vdp1_vram[((patterndata+offsetcnt/2)^3) & 0xfffff];
909899            pix2 = offsetcnt&1 ?  (pix2 & 0x0f):((pix2 & 0xf0)>>4);
910900            pix = pix2&1 ?
911901            ((((m_vdp1_vram[(((stv2_current_sprite.CMDCOLR&0xffff)*8)>>2)+((pix2&0xfffe)/2)])) & 0x0000ffff) >> 0):
r20805r20806
927917            }
928918            break;
929919         case 0x0010: // mode 2 64 colour bank mode (8bits) (character select portraits on hanagumi)
930            pix = m_vdp1.gfx_decode[(patterndata+offsetcnt) & 0xfffff];
920            pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0xfffff];
931921            mode = 2;
932922            pix = pix+(stv2_current_sprite.CMDCOLR&0xffc0);
933923            transmask = 0x3f;
934924            break;
935925         case 0x0018: // mode 3 128 colour bank mode (8bits) (little characters on hanagumi use this mode)
936            pix = m_vdp1.gfx_decode[(patterndata+offsetcnt) & 0xfffff];
926            pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0xfffff];
937927            pix = pix+(stv2_current_sprite.CMDCOLR&0xff80);
938928            transmask = 0x7f;
939929            mode = 3;
940930            break;
941931         case 0x0020: // mode 4 256 colour bank mode (8bits) (hanagumi title)
942            pix = m_vdp1.gfx_decode[(patterndata+offsetcnt) & 0xfffff];
932            pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0xfffff];
943933            pix = pix+(stv2_current_sprite.CMDCOLR&0xff00);
944934            transmask = 0xff;
945935            mode = 4;
946936            break;
947937         case 0x0028: // mode 5 32,768 colour RGB mode (16bits)
948            pix = m_vdp1.gfx_decode[(patterndata+offsetcnt*2+1) & 0xfffff] | (m_vdp1.gfx_decode[(patterndata+offsetcnt*2) & 0xfffff]<<8) ;
938            pix = vdp1_vram[((patterndata+offsetcnt*2+1)^3) & 0xfffff] | (vdp1_vram[((patterndata+offsetcnt*2)^3) & 0xfffff]<<8) ;
949939            mode = 5;
950940            transmask = -1; /* TODO: check me */
951941            break;
r20805r20806
20492039
20502040void saturn_state::stv_vdp1_state_save_postload( void )
20512041{
2052   UINT8 *vdp1 = m_vdp1.gfx_decode;
2053   int offset;
2054   UINT32 data;
2055
20562042   m_vdp1.framebuffer_mode = -1;
20572043   m_vdp1.framebuffer_double_interlace = -1;
20582044
20592045   stv_set_framebuffer_config();
2060
2061   for (offset = 0; offset < 0x80000/4; offset++ )
2062   {
2063      data = m_vdp1_vram[offset];
2064      /* put in gfx region for easy decoding */
2065      vdp1[offset*4+0] = (data & 0xff000000) >> 24;
2066      vdp1[offset*4+1] = (data & 0x00ff0000) >> 16;
2067      vdp1[offset*4+2] = (data & 0x0000ff00) >> 8;
2068      vdp1[offset*4+3] = (data & 0x000000ff) >> 0;
2069   }
20702046}
20712047
20722048int saturn_state::stv_vdp1_start ( void )
20732049{
20742050   m_vdp1_regs = auto_alloc_array_clear(machine(), UINT16, 0x020/2 );
20752051   m_vdp1_vram = auto_alloc_array_clear(machine(), UINT32, 0x100000/4 );
2076   m_vdp1.gfx_decode = auto_alloc_array(machine(), UINT8, 0x100000 );
20772052
20782053   stv_vdp1_shading_data = auto_alloc(machine(), struct stv_vdp1_poly_scanline_data);
20792054
trunk/src/mame/includes/stv.h
r20805r20806
6868      rectangle user_cliprect;
6969      UINT16    *framebuffer[2];
7070      UINT16    **framebuffer_draw_lines;
71      UINT8     *gfx_decode;
7271      UINT16    lopr;
7372      UINT16    copr;
7473      UINT16    ewdr;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team