Previous 199869 Revisions Next

r31439 Sunday 27th July, 2014 at 19:56:23 UTC by Wilbert Pol
315_5124.c: Use a simple array for cram. Fixes autosave issue found by Tafoid (nw)
[src/emu/video]315_5124.c 315_5124.h

trunk/src/emu/video/315_5124.c
r31438r31439
16611661
16621662   for (i = 0; i < 32; i++)
16631663   {
1664      m_current_palette[i] = m_CRAM->u8(i) & 0x3f;
1664      m_current_palette[i] = m_CRAM[i] & 0x3f;
16651665   }
16661666}
16671667
r31438r31439
16811681   {
16821682      for (i = 0; i < 32; i++)
16831683      {
1684         m_current_palette[i] = ((m_CRAM->u8(i) & 0x30) << 6) | ((m_CRAM->u8(i) & 0x0c ) << 4) | ((m_CRAM->u8(i) & 0x03) << 2);
1684         m_current_palette[i] = ((m_CRAM[i] & 0x30) << 6) | ((m_CRAM[i] & 0x0c ) << 4) | ((m_CRAM[i] & 0x03) << 2);
16851685      }
16861686   }
16871687   else
16881688   {
16891689      for (i = 0; i < 32; i++)
16901690      {
1691         m_current_palette[i] = m_CRAM->u16(i) & 0x0fff;
1691         m_current_palette[i] = (m_CRAM[2*i] | (m_CRAM[2*i+1] << 8)) & 0x0fff;
16921692      }
16931693   }
16941694}
r31438r31439
16971697void sega315_5124_device::cram_write(UINT8 data)
16981698{
16991699   UINT16 address = m_addr & m_cram_mask;
1700   if (data != m_CRAM->u8(address))
1700   if (data != m_CRAM[address])
17011701   {
1702      m_CRAM->u8(address) = data;
1702      m_CRAM[address] = data;
17031703      m_cram_dirty = 1;
17041704   }
17051705}
r31438r31439
17151715   {
17161716      if (m_addr & 1)
17171717      {
1718         UINT16 address = (m_addr & m_cram_mask) >> 1;
1719         UINT16 dataw = (data << 8) | m_buffer;
1720         if (dataw != m_CRAM->u16(address))
1718         UINT16 address = (m_addr & m_cram_mask) & ~1;
1719         if (m_buffer != m_CRAM[address] || data != m_CRAM[address + 1])
17211720         {
1722            m_CRAM->u16(address) = dataw;
1721            m_CRAM[address] = m_buffer;
1722            m_CRAM[address + 1] = data;
17231723            m_cram_dirty = 1;
17241724         }
17251725      }
r31438r31439
17821782
17831783   /* Allocate video RAM */
17841784   astring tempstring;
1785   m_CRAM = machine().memory().region_alloc(subtag(tempstring,"vdp_cram"), SEGA315_5378_CRAM_SIZE, 1, ENDIANNESS_LITTLE);
17861785   m_line_buffer = auto_alloc_array(machine(), int, 256 * 5);
17871786
17881787   m_frame_timing = (m_is_pal) ? pal_192 : ntsc_192;
r31438r31439
18301829   save_item(NAME(m_sprite_count));
18311830   save_item(NAME(m_sprite_height));
18321831   save_item(NAME(m_sprite_zoom));
1832   save_item(NAME(m_CRAM));
18331833
18341834   machine().save().register_postload(save_prepost_delegate(FUNC(sega315_5124_device::vdp_postload), this));
18351835}
r31438r31439
18701870   set_display_settings();
18711871
18721872   /* Clear RAM */
1873   memset(m_CRAM->base(), 0, SEGA315_5378_CRAM_SIZE);
1873   memset(m_CRAM, 0, sizeof(m_CRAM));
18741874   memset(m_line_buffer, 0, 256 * 5 * sizeof(int));
18751875}
18761876
trunk/src/emu/video/315_5124.h
r31438r31439
131131   int              m_draw_time;
132132   UINT8            m_line_counter;
133133   UINT8            m_hcounter;
134   memory_region    *m_CRAM;                    /* Pointer to CRAM */
134   UINT8            m_CRAM[SEGA315_5378_CRAM_SIZE];  /* CRAM */
135135   const UINT8      *m_frame_timing;
136136   bitmap_rgb32     m_tmpbitmap;
137137   bitmap_ind8      m_y1_bitmap;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team