Previous 199869 Revisions Next

r34708 Wednesday 28th January, 2015 at 20:18:10 UTC by Angelo Salese
Experimental scanline-based drawing function, and added color attribute.
[src/mess/drivers]c65.c

trunk/src/mess/drivers/c65.c
r243219r243220
5151   required_shared_ptr<UINT8> m_cram;
5252   required_device<gfxdecode_device> m_gfxdecode;
5353
54   UINT8 *m_iplrom;
55
56   
5457   DECLARE_READ8_MEMBER(vic4567_dummy_r);
5558   DECLARE_WRITE8_MEMBER(vic4567_dummy_w);
5659   DECLARE_WRITE8_MEMBER(PalRed_w);
r243219r243220
8083   UINT8 m_VIC3_ControlA,m_VIC3_ControlB;
8184   void PalEntryFlush(UINT8 offset);
8285   void DMAgicExecute(address_space &space,UINT32 address);
86   int inner_x_char(int xoffs);
87   int inner_y_char(int yoffs);
8388};
8489
8590void c65_state::video_start()
8691{
8792}
8893
94// TODO: inline?
95int c65_state::inner_x_char(int xoffs)
96{
97   return xoffs>>3;
98}
99
100int c65_state::inner_y_char(int yoffs)
101{
102   return yoffs>>3;
103}
104
89105UINT32 c65_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
90106{
91107   int y,x;
92   gfx_element *gfx = m_gfxdecode->gfx(0);
93
94   for(y=0;y<25;y++)
108     
109   // TODO: border area
110   for(y=0;y<m_screen->height();y++)
95111   {
96      for(x=0;x<80;x++)
112      for(x=0;x<m_screen->width();x++)
97113      {
98         UINT8 tile = m_workram[x+y*80+0x800];
99         gfx->opaque(bitmap,cliprect,tile,0,0,0,x*8,y*8);
114         //int, xi,yi,xm,ym,dot_x;
115         int xi = inner_x_char(x);
116         int yi = inner_y_char(y);
117         int xm = 7 - (x & 7);
118         int ym = (y & 7);
119         UINT8 tile = m_workram[xi+yi*80+0x800];
120         UINT8 attr = m_cram[xi+yi*80];
121         int enable_dot = ((m_iplrom[(tile<<3)+ym+0xd000] >> xm) & 1);
122                 
123         //if(cliprect.contains(x, y))
124                 
125            bitmap.pix16(y, x) = m_palette->pen((enable_dot) ? attr & 0xf : 0);
126
127         
128         //gfx->opaque(bitmap,cliprect,tile,0,0,0,x*8,y*8);
100129      }
101130   }
102131
r243219r243220
261290      return m_cram[offset];
262291   else
263292   {
264      // CIA
293      // CIA at 0xdc00
265294   }
266295
267296   return 0xff;
r243219r243220
273302      m_cram[offset] = data;
274303   else
275304   {
276      // CIA
305      // CIA at 0xdc00
277306   }
278307   
279308}
r243219r243220
298327   AM_RANGE(0x0d700, 0x0d702) AM_WRITE(DMAgic_w) AM_SHARE("dmalist") // 0x0d700, 0x0d7** DMAgic
299328   //AM_RANGE(0x0d703, 0x0d703) AM_READ(DMAgic_r)
300329   // 0x0d800, 0x0d8** Color matrix
301   AM_RANGE(0x0dc00, 0x0dfff) AM_READWRITE(CIASelect_r,CIASelect_w) AM_SHARE("cram")
330   AM_RANGE(0x0d800, 0x0dfff) AM_READWRITE(CIASelect_r,CIASelect_w) AM_SHARE("cram")
302331   // 0x0dc00, 0x0dc** CIA-1
303332   // 0x0dd00, 0x0dd** CIA-2
304333   // 0x0de00, 0x0de** Ext I/O Select 1
r243219r243220
370399
371400void c65_state::machine_start()
372401{
402   m_iplrom = memregion("maincpu")->base();
403
404   save_pointer(NAME(m_cram.target()), 0x800);
373405}
374406
375407void c65_state::machine_reset()
r243219r243220
394426};
395427
396428static GFXDECODE_START( c65 )
397   GFXDECODE_ENTRY( "maincpu", 0xd000, charlayout,     0, 1 ) // another identical copy is at 0x9000
429   GFXDECODE_ENTRY( "maincpu", 0xd000, charlayout,     0, 16 ) // another identical copy is at 0x9000
398430GFXDECODE_END
399431
400432INTERRUPT_GEN_MEMBER(c65_state::vic3_vblank_irq)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team