Previous 199869 Revisions Next

r20903 Sunday 10th February, 2013 at 18:56:09 UTC by Wilbert Pol
(MESS) a7800.c: Reduce tagmap lookups (nw)
[src/mess/includes]a7800.h
[src/mess/machine]a7800.c
[src/mess/video]a7800.c

trunk/src/mess/machine/a7800.c
r20902r20903
2323#include "emu.h"
2424#include "includes/a7800.h"
2525#include "cpu/m6502/m6502.h"
26#include "sound/tiasound.h"
27#include "machine/6532riot.h"
28#include "sound/pokey.h"
29#include "sound/tiaintf.h"
3026
3127
3228
r20902r20903
4036
4137READ8_MEMBER(a7800_state::riot_joystick_r)
4238{
43   return machine().root_device().ioport("joysticks")->read();
39   return m_io_joysticks->read();
4440}
4541
4642READ8_MEMBER(a7800_state::riot_console_button_r)
4743{
48   return machine().root_device().ioport("console_buttons")->read();
44   return m_io_console_buttons->read();
4945}
5046
5147WRITE8_MEMBER(a7800_state::riot_button_pullup_w)
r20902r20903
7066
7167void a7800_state::a7800_driver_init(int ispal, int lines)
7268{
73   address_space& space = machine().device("maincpu")->memory().space(AS_PROGRAM);
74   m_ROM = memregion("maincpu")->base();
69   address_space& space = m_maincpu->space(AS_PROGRAM);
70   m_ROM = m_region_maincpu->base();
7571   m_ispal = ispal;
7672   m_lines = lines;
7773   m_p1_one_button = 1;
7874   m_p2_one_button = 1;
7975
8076   /* standard banks */
81   membank("bank5")->set_base(&m_ROM[0x2040]);       /* RAM0 */
82   membank("bank6")->set_base(&m_ROM[0x2140]);       /* RAM1 */
83   membank("bank7")->set_base(&m_ROM[0x2000]);       /* MAINRAM */
77   m_bank5->set_base(&m_ROM[0x2040]);       /* RAM0 */
78   m_bank6->set_base(&m_ROM[0x2140]);       /* RAM1 */
79   m_bank7->set_base(&m_ROM[0x2000]);       /* MAINRAM */
8480
8581   /* Brutal hack put in as a consequence of new memory system; fix this */
8682   space.install_readwrite_bank(0x0480, 0x04FF,"bank10");
87   membank("bank10")->set_base(m_ROM + 0x0480);
83   m_bank10 = membank("bank10");
84   m_bank10->set_base(m_ROM + 0x0480);
8885   space.install_readwrite_bank(0x1800, 0x27FF, "bank11");
89   membank("bank11")->set_base(m_ROM + 0x1800);
86   m_bank11 = membank("bank11");
87   m_bank11->set_base(m_ROM + 0x1800);
9088
9189   m_bios_bkup = NULL;
9290   m_cart_bkup = NULL;
r20902r20903
122120void a7800_state::machine_reset()
123121{
124122   UINT8 *memory;
125   address_space& space = machine().device("maincpu")->memory().space(AS_PROGRAM);
123   address_space& space = m_maincpu->space(AS_PROGRAM);
126124
127125   m_ctrl_lock = 0;
128126   m_ctrl_reg = 0;
129127   m_maria_flag = 0;
130128
131129   /* set banks to default states */
132   memory = memregion("maincpu")->base();
133   membank("bank1")->set_base(memory + 0x4000 );
134   membank("bank2")->set_base(memory + 0x8000 );
135   membank("bank3")->set_base(memory + 0xA000 );
136   membank("bank4")->set_base(memory + 0xC000 );
130   memory = m_region_maincpu->base();
131   m_bank1->set_base(memory + 0x4000 );
132   m_bank2->set_base(memory + 0x8000 );
133   m_bank3->set_base(memory + 0xA000 );
134   m_bank4->set_base(memory + 0xC000 );
137135
138136   /* pokey cartridge */
139137   if (m_cart_type & 0x01)
140138   {
141      pokey_device *pokey = machine().device<pokey_device>("pokey");
142      space.install_readwrite_handler(0x4000, 0x7FFF, read8_delegate(FUNC(pokey_device::read),pokey), write8_delegate(FUNC(pokey_device::write),pokey));
139      space.install_readwrite_handler(0x4000, 0x7FFF, read8_delegate(FUNC(pokey_device::read),(pokey_device*)m_pokey), write8_delegate(FUNC(pokey_device::write),(pokey_device*)m_pokey));
143140   }
144141}
145142
r20902r20903
246243{
247244   UINT32 len = 0, start = 0;
248245   unsigned char header[128];
249   UINT8 *memory = image.device().machine().root_device().memregion("maincpu")->base();
246   UINT8 *memory = m_region_maincpu->base();
250247   const char  *pcb_name;
251248
252249   // detect cart type either from xml or from header
r20902r20903
391388
392389WRITE8_MEMBER(a7800_state::a7800_cart_w)
393390{
394   UINT8 *memory = memregion("maincpu")->base();
391   UINT8 *memory = m_region_maincpu->base();
395392
396393   if(offset < 0x4000)
397394   {
r20902r20903
401398      }
402399      else if(m_cart_type & 0x01)
403400      {
404         pokey_device *pokey = machine().device<pokey_device>("pokey");
405         pokey->write(space, offset, data);
401         m_pokey->write(space, offset, data);
406402      }
407403      else
408404      {
r20902r20903
421417      {
422418         data &= 0x07;
423419      }
424      membank("bank2")->set_base(memory + 0x10000 + (data << 14));
425      membank("bank3")->set_base(memory + 0x12000 + (data << 14));
420      m_bank2->set_base(memory + 0x10000 + (data << 14));
421      m_bank3->set_base(memory + 0x12000 + (data << 14));
426422   /*  logerror("BANK SEL: %d\n",data); */
427423   }
428424   else if(( m_cart_type == MBANK_TYPE_ABSOLUTE ) &&( offset == 0x4000 ) )
r20902r20903
431427      /*logerror( "F18 BANK SEL: %d\n", data );*/
432428      if( data & 1 )
433429      {
434         membank("bank1")->set_base(memory + 0x10000 );
430         m_bank1->set_base(memory + 0x10000 );
435431      }
436432      else if( data & 2 )
437433      {
438         membank("bank1")->set_base(memory + 0x14000 );
434         m_bank1->set_base(memory + 0x14000 );
439435      }
440436   }
441437   else if(( m_cart_type == MBANK_TYPE_ACTIVISION ) &&( offset >= 0xBF80 ) )
r20902r20903
445441
446442      /*logerror( "Activision BANK SEL: %d\n", data );*/
447443
448      membank("bank3")->set_base(memory + 0x10000 + ( data << 14 ) );
449      membank("bank4")->set_base(memory + 0x12000 + ( data << 14 ) );
444      m_bank3->set_base(memory + 0x10000 + ( data << 14 ) );
445      m_bank4->set_base(memory + 0x12000 + ( data << 14 ) );
450446   }
451447}
452448
r20902r20903
471467         still return a reasonable value */
472468         return 0x00;
473469      case 0x08:
474            return((ioport("buttons")->read() & 0x02) << 6);
470            return((m_io_buttons->read() & 0x02) << 6);
475471      case 0x09:
476            return((ioport("buttons")->read() & 0x08) << 4);
472            return((m_io_buttons->read() & 0x08) << 4);
477473      case 0x0A:
478            return((ioport("buttons")->read() & 0x01) << 7);
474            return((m_io_buttons->read() & 0x01) << 7);
479475      case 0x0B:
480            return((ioport("buttons")->read() & 0x04) << 5);
476            return((m_io_buttons->read() & 0x04) << 5);
481477      case 0x0c:
482         if(((ioport("buttons")->read() & 0x08) ||(ioport("buttons")->read() & 0x02)) && m_p1_one_button)
478         if(((m_io_buttons->read() & 0x08) ||(m_io_buttons->read() & 0x02)) && m_p1_one_button)
483479            return 0x00;
484480         else
485481            return 0x80;
486482      case 0x0d:
487         if(((ioport("buttons")->read() & 0x01) ||(ioport("buttons")->read() & 0x04)) && m_p2_one_button)
483         if(((m_io_buttons->read() & 0x01) ||(m_io_buttons->read() & 0x04)) && m_p2_one_button)
488484            return 0x00;
489485         else
490486            return 0x80;
r20902r20903
516512      }
517513      break;
518514   }
519   machine().device<tia_device>("tia")->tia_sound_w(space, offset, data);
515   m_tia->tia_sound_w(space, offset, data);
520516   m_ROM[offset] = data;
521517}
trunk/src/mess/includes/a7800.h
r20902r20903
88#define A7800_H_
99
1010#include "machine/6532riot.h"
11#include "sound/pokey.h"
12#include "sound/tiasound.h"
13#include "sound/tiaintf.h"
1114
15
1216class a7800_state : public driver_device
1317{
1418public:
1519   a7800_state(const machine_config &mconfig, device_type type, const char *tag)
16      : driver_device(mconfig, type, tag),
17      m_maincpu(*this,"maincpu")
18      { }
20      : driver_device(mconfig, type, tag)
21      , m_maincpu(*this, "maincpu")
22      , m_pokey(*this, "pokey")
23      , m_tia(*this, "tia")
24      , m_region_maincpu(*this, "maincpu")
25      , m_bank1(*this, "bank1")
26      , m_bank2(*this, "bank2")
27      , m_bank3(*this, "bank3")
28      , m_bank4(*this, "bank4")
29      , m_bank5(*this, "bank5")
30      , m_bank6(*this, "bank6")
31      , m_bank7(*this, "bank7")
32      , m_io_joysticks(*this, "joysticks")
33      , m_io_buttons(*this, "buttons")
34      , m_io_vblank(*this, "vblank")
35      , m_io_console_buttons(*this, "console_buttons")
36      , m_bank10(NULL)
37      , m_bank11(NULL)
38   { }
1939
2040   int m_lines;
2141   int m_ispal;
r20902r20903
5272   int m_p1_one_button;
5373   int m_p2_one_button;
5474
55   required_device<cpu_device> m_maincpu;
5675   DECLARE_WRITE8_MEMBER(a7800_RAM0_w);
5776   DECLARE_WRITE8_MEMBER(a7800_cart_w);
5877   DECLARE_READ8_MEMBER(a7800_TIA_r);
r20902r20903
7392   DECLARE_WRITE8_MEMBER(riot_button_pullup_w);
7493
7594   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a7800_cart );
95
96protected:
97   required_device<cpu_device> m_maincpu;
98   required_device<pokey_device> m_pokey;
99   required_device<tia_device> m_tia;
100   required_memory_region m_region_maincpu;
101   required_memory_bank m_bank1;
102   required_memory_bank m_bank2;
103   required_memory_bank m_bank3;
104   required_memory_bank m_bank4;
105   required_memory_bank m_bank5;
106   required_memory_bank m_bank6;
107   required_memory_bank m_bank7;
108   required_ioport m_io_joysticks;
109   required_ioport m_io_buttons;
110   required_ioport m_io_vblank;
111   required_ioport m_io_console_buttons;
112   memory_bank *m_bank10;
113   memory_bank *m_bank11;
114
115   void maria_draw_scanline();
76116};
77117
78118/*----------- defined in machine/a7800.c -----------*/
trunk/src/mess/video/a7800.c
r20902r20903
8383
8484***************************************************************************/
8585
86static void maria_draw_scanline(running_machine &machine)
86void a7800_state::maria_draw_scanline()
8787{
88   a7800_state *state = machine.driver_data<a7800_state>();
89   address_space& space = machine.device("maincpu")->memory().space(AS_PROGRAM);
88   address_space& space = m_maincpu->space(AS_PROGRAM);
9089   unsigned int graph_adr,data_addr;
9190   int width,hpos,pal,mode,ind;
9291   unsigned int dl;
r20902r20903
9594   UINT16 *scanline;
9695
9796   /* set up scanline */
98   scanline = &state->m_bitmap.pix16(state->m_maria_scanline);
97   scanline = &m_bitmap.pix16(m_maria_scanline);
9998   for (i = 0; i < 320; i++)
100      scanline[i] = state->m_maria_backcolor;
99      scanline[i] = m_maria_backcolor;
101100
102101   /* Process this DLL entry */
103   dl = state->m_maria_dl;
102   dl = m_maria_dl;
104103
105104   /* Step through DL's */
106105   while ((READ_MEM(dl + 1) & 0x5F) != 0)
r20902r20903
112111         width = ((READ_MEM(dl+3) ^ 0xff) & 0x1F) + 1;
113112         hpos = READ_MEM(dl+4)*2;
114113         pal = READ_MEM(dl+3) >> 5;
115         state->m_maria_write_mode = (READ_MEM(dl+1) & 0x80) >> 5;
114         m_maria_write_mode = (READ_MEM(dl+1) & 0x80) >> 5;
116115         ind = READ_MEM(dl+1) & 0x20;
117116         dl+=5;
118117      }
r20902r20903
127126         dl+=4;
128127      }
129128
130      mode = state->m_maria_rm | state->m_maria_write_mode;
129      mode = m_maria_rm | m_maria_write_mode;
131130
132      /*logerror("%x DL: ADR=%x  width=%x  hpos=%x  pal=%x  mode=%x  ind=%x\n",state->m_maria_scanline,graph_adr,width,hpos,pal,mode,ind );*/
131      /*logerror("%x DL: ADR=%x  width=%x  hpos=%x  pal=%x  mode=%x  ind=%x\n",m_maria_scanline,graph_adr,width,hpos,pal,mode,ind );*/
133132
134133      for (x=0; x<width; x++) // 20030621 ericball get graphic data first, then switch (mode)
135134      {
r20902r20903
139138         if (ind)
140139         {
141140            c = READ_MEM(graph_adr + x) & 0xFF;
142            data_addr= (state->m_maria_charbase | c) + (state->m_maria_offset << 8);
143            if( state->m_maria_cwidth )
141            data_addr= (m_maria_charbase | c) + (m_maria_offset << 8);
142            if( m_maria_cwidth )
144143               ind_bytes = 2;
145144         }
146145         else
147146         {
148            data_addr = graph_adr + x + (state->m_maria_offset  << 8);
147            data_addr = graph_adr + x + (m_maria_offset  << 8);
149148         }
150149
151         if ( (state->m_maria_holey & 0x02) && ((data_addr & 0x9000) == 0x9000))
150         if ( (m_maria_holey & 0x02) && ((data_addr & 0x9000) == 0x9000))
152151            continue;
153         if ( (state->m_maria_holey & 0x01) && ((data_addr & 0x8800) == 0x8800))
152         if ( (m_maria_holey & 0x01) && ((data_addr & 0x8800) == 0x8800))
154153            continue;
155154
156155         while (ind_bytes > 0)
r20902r20903
163162               case 0x00:  /* 160A (160x2) */
164163               case 0x01:  /* 160A (160x2) */
165164                  c = (d & 0xC0) >> 6;
166                  if (c || state->m_maria_kangaroo)
165                  if (c || m_maria_kangaroo)
167166                  {
168                     scanline[hpos + 0] = state->m_maria_palette[pal][c];
169                     scanline[hpos + 1] = state->m_maria_palette[pal][c];
167                     scanline[hpos + 0] = m_maria_palette[pal][c];
168                     scanline[hpos + 1] = m_maria_palette[pal][c];
170169                  }
171170                  inc_hpos_by_2();
172171
173172                  c = (d & 0x30) >> 4;
174                  if (c || state->m_maria_kangaroo)
173                  if (c || m_maria_kangaroo)
175174                  {
176                     scanline[hpos + 0] = state->m_maria_palette[pal][c];
177                     scanline[hpos + 1] = state->m_maria_palette[pal][c];
175                     scanline[hpos + 0] = m_maria_palette[pal][c];
176                     scanline[hpos + 1] = m_maria_palette[pal][c];
178177                  }
179178                  inc_hpos_by_2();
180179
181180                  c = (d & 0x0C) >> 2;
182                  if (c || state->m_maria_kangaroo)
181                  if (c || m_maria_kangaroo)
183182                  {
184                     scanline[hpos + 0] = state->m_maria_palette[pal][c];
185                     scanline[hpos + 1] = state->m_maria_palette[pal][c];
183                     scanline[hpos + 0] = m_maria_palette[pal][c];
184                     scanline[hpos + 1] = m_maria_palette[pal][c];
186185                  }
187186                  inc_hpos_by_2();
188187
189188                  c = (d & 0x03);
190                  if (c || state->m_maria_kangaroo)
189                  if (c || m_maria_kangaroo)
191190                  {
192                     scanline[hpos + 0] = state->m_maria_palette[pal][c];
193                     scanline[hpos + 1] = state->m_maria_palette[pal][c];
191                     scanline[hpos + 0] = m_maria_palette[pal][c];
192                     scanline[hpos + 1] = m_maria_palette[pal][c];
194193                  }
195194                  inc_hpos_by_2();
196195                  break;
197196
198197               case 0x02: /* 320D used by Jinks! */
199198                  c = pal & 0x04;
200                  if ( d & 0xC0 || pal & 0x03 || state->m_maria_kangaroo )
199                  if ( d & 0xC0 || pal & 0x03 || m_maria_kangaroo )
201200                  {
202                     scanline[hpos + 0] = state->m_maria_palette[c][((d & 0x80) >> 6) | ((pal & 2) >> 1)];
203                     scanline[hpos + 1] = state->m_maria_palette[c][((d & 0x40) >> 5) | ((pal & 1) >> 0)];
201                     scanline[hpos + 0] = m_maria_palette[c][((d & 0x80) >> 6) | ((pal & 2) >> 1)];
202                     scanline[hpos + 1] = m_maria_palette[c][((d & 0x40) >> 5) | ((pal & 1) >> 0)];
204203                  }
205204                  inc_hpos_by_2();
206205
207                  if ( d & 0x30 || pal & 0x03 || state->m_maria_kangaroo )
206                  if ( d & 0x30 || pal & 0x03 || m_maria_kangaroo )
208207                  {
209                     scanline[hpos + 0] = state->m_maria_palette[c][((d & 0x20) >> 4) | ((pal & 2) >> 1)];
210                     scanline[hpos + 1] = state->m_maria_palette[c][((d & 0x10) >> 3) | ((pal & 1) >> 0)];
208                     scanline[hpos + 0] = m_maria_palette[c][((d & 0x20) >> 4) | ((pal & 2) >> 1)];
209                     scanline[hpos + 1] = m_maria_palette[c][((d & 0x10) >> 3) | ((pal & 1) >> 0)];
211210                  }
212211                  inc_hpos_by_2();
213212
214                  if ( d & 0x0C || pal & 0x03 || state->m_maria_kangaroo )
213                  if ( d & 0x0C || pal & 0x03 || m_maria_kangaroo )
215214                  {
216                     scanline[hpos + 0] = state->m_maria_palette[c][((d & 0x08) >> 2) | ((pal & 2) >> 1)];
217                     scanline[hpos + 1] = state->m_maria_palette[c][((d & 0x04) >> 1) | ((pal & 1) >> 0)];
215                     scanline[hpos + 0] = m_maria_palette[c][((d & 0x08) >> 2) | ((pal & 2) >> 1)];
216                     scanline[hpos + 1] = m_maria_palette[c][((d & 0x04) >> 1) | ((pal & 1) >> 0)];
218217                  }
219218                  inc_hpos_by_2();
220219
221                  if ( d & 0x03 || pal & 0x03 || state->m_maria_kangaroo )
220                  if ( d & 0x03 || pal & 0x03 || m_maria_kangaroo )
222221                  {
223                     scanline[hpos + 0] = state->m_maria_palette[c][((d & 0x02) << 0) | ((pal & 2) >> 1)];
224                     scanline[hpos + 1] = state->m_maria_palette[c][((d & 0x01) << 1) | ((pal & 1) >> 0)];
222                     scanline[hpos + 0] = m_maria_palette[c][((d & 0x02) << 0) | ((pal & 2) >> 1)];
223                     scanline[hpos + 1] = m_maria_palette[c][((d & 0x01) << 1) | ((pal & 1) >> 0)];
225224                  }
226225                  inc_hpos_by_2();
227226
228227                  break;
229228
230229               case 0x03:  /* MODE 320A */
231                  if (d & 0xC0 || state->m_maria_kangaroo)
230                  if (d & 0xC0 || m_maria_kangaroo)
232231                  {
233                     scanline[hpos + 0] = state->m_maria_palette[pal][(d & 0x80) >> 6];
234                     scanline[hpos + 1] = state->m_maria_palette[pal][(d & 0x40) >> 5];
232                     scanline[hpos + 0] = m_maria_palette[pal][(d & 0x80) >> 6];
233                     scanline[hpos + 1] = m_maria_palette[pal][(d & 0x40) >> 5];
235234                  }
236235                  inc_hpos_by_2();
237236
238                  if ( d & 0x30 || state->m_maria_kangaroo)
237                  if ( d & 0x30 || m_maria_kangaroo)
239238                  {
240                     scanline[hpos + 0] = state->m_maria_palette[pal][(d & 0x20) >> 4];
241                     scanline[hpos + 1] = state->m_maria_palette[pal][(d & 0x10) >> 3];
239                     scanline[hpos + 0] = m_maria_palette[pal][(d & 0x20) >> 4];
240                     scanline[hpos + 1] = m_maria_palette[pal][(d & 0x10) >> 3];
242241                  }
243242                  inc_hpos_by_2();
244243
245                  if (d & 0x0C || state->m_maria_kangaroo)
244                  if (d & 0x0C || m_maria_kangaroo)
246245                  {
247                     scanline[hpos + 0] = state->m_maria_palette[pal][(d & 0x08) >> 2];
248                     scanline[hpos + 1] = state->m_maria_palette[pal][(d & 0x04) >> 1];
246                     scanline[hpos + 0] = m_maria_palette[pal][(d & 0x08) >> 2];
247                     scanline[hpos + 1] = m_maria_palette[pal][(d & 0x04) >> 1];
249248                  }
250249                  inc_hpos_by_2();
251250
252                  if (d & 0x03 || state->m_maria_kangaroo)
251                  if (d & 0x03 || m_maria_kangaroo)
253252                  {
254                     scanline[hpos + 0] = state->m_maria_palette[pal][(d & 0x02)];
255                     scanline[hpos + 1] = state->m_maria_palette[pal][(d & 0x01) << 1];
253                     scanline[hpos + 0] = m_maria_palette[pal][(d & 0x02)];
254                     scanline[hpos + 1] = m_maria_palette[pal][(d & 0x01) << 1];
256255                  }
257256                  inc_hpos_by_2();
258257                  break;
r20902r20903
260259               case 0x04:  /* 160B (160x4) */
261260               case 0x05:  /* 160B (160x4) */
262261                  c = (d & 0xC0) >> 6;
263                  if (c || state->m_maria_kangaroo)
262                  if (c || m_maria_kangaroo)
264263                  {
265                     scanline[hpos + 0] = state->m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][c];
266                     scanline[hpos + 1] = state->m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][c];
264                     scanline[hpos + 0] = m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][c];
265                     scanline[hpos + 1] = m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][c];
267266                  }
268267                  inc_hpos_by_2();
269268
270269                  c = (d & 0x30) >> 4;
271                  if (c || state->m_maria_kangaroo)
270                  if (c || m_maria_kangaroo)
272271                  {
273                     scanline[hpos + 0] = state->m_maria_palette[(pal & 0x04) | (d & 0x03)][c];
274                     scanline[hpos + 1] = state->m_maria_palette[(pal & 0x04) | (d & 0x03)][c];
272                     scanline[hpos + 0] = m_maria_palette[(pal & 0x04) | (d & 0x03)][c];
273                     scanline[hpos + 1] = m_maria_palette[(pal & 0x04) | (d & 0x03)][c];
275274                  }
276275                  inc_hpos_by_2();
277276                  break;
278277
279278               case 0x06:  /* MODE 320B */
280                  if (d & 0xCC || state->m_maria_kangaroo)
279                  if (d & 0xCC || m_maria_kangaroo)
281280                  {
282                     scanline[hpos + 0] = state->m_maria_palette[pal][((d & 0x80) >> 6) | ((d & 0x08) >> 3)];
283                     scanline[hpos + 1] = state->m_maria_palette[pal][((d & 0x40) >> 5) | ((d & 0x04) >> 2)];
281                     scanline[hpos + 0] = m_maria_palette[pal][((d & 0x80) >> 6) | ((d & 0x08) >> 3)];
282                     scanline[hpos + 1] = m_maria_palette[pal][((d & 0x40) >> 5) | ((d & 0x04) >> 2)];
284283                  }
285284                  inc_hpos_by_2();
286285
287                  if ( d & 0x33 || state->m_maria_kangaroo)
286                  if ( d & 0x33 || m_maria_kangaroo)
288287                  {
289                     scanline[hpos + 0] = state->m_maria_palette[pal][((d & 0x20) >> 4) | ((d & 0x02) >> 1)];
290                     scanline[hpos + 1] = state->m_maria_palette[pal][((d & 0x10) >> 3) | (d & 0x01)];
288                     scanline[hpos + 0] = m_maria_palette[pal][((d & 0x20) >> 4) | ((d & 0x02) >> 1)];
289                     scanline[hpos + 1] = m_maria_palette[pal][((d & 0x10) >> 3) | (d & 0x01)];
291290                  }
292291                  inc_hpos_by_2();
293292                  break;
294293
295294               case 0x07: /* (320C mode) */
296                  if (d & 0xC0 || state->m_maria_kangaroo)
295                  if (d & 0xC0 || m_maria_kangaroo)
297296                  {
298                     scanline[hpos + 0] = state->m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][(d & 0x80) >> 6];
299                     scanline[hpos + 1] = state->m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][(d & 0x40) >> 5];
297                     scanline[hpos + 0] = m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][(d & 0x80) >> 6];
298                     scanline[hpos + 1] = m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][(d & 0x40) >> 5];
300299                  }
301300                  inc_hpos_by_2();
302301
303                  if ( d & 0x30 || state->m_maria_kangaroo)
302                  if ( d & 0x30 || m_maria_kangaroo)
304303                  {
305                     scanline[hpos + 0] = state->m_maria_palette[(pal & 0x04) | (d & 0x03)][(d & 0x20) >> 4];
306                     scanline[hpos + 1] = state->m_maria_palette[(pal & 0x04) | (d & 0x03)][(d & 0x10) >> 3];
304                     scanline[hpos + 0] = m_maria_palette[(pal & 0x04) | (d & 0x03)][(d & 0x20) >> 4];
305                     scanline[hpos + 1] = m_maria_palette[(pal & 0x04) | (d & 0x03)][(d & 0x10) >> 3];
307306                  }
308307                  inc_hpos_by_2();
309308                  break;
r20902r20903
318317TIMER_DEVICE_CALLBACK_MEMBER(a7800_state::a7800_interrupt)
319318{
320319   int frame_scanline;
321   UINT8 *ROM = machine().root_device().memregion("maincpu")->base();
322   address_space& space = machine().device("maincpu")->memory().space(AS_PROGRAM);
320   UINT8 *ROM = m_region_maincpu->base();
321   address_space& space = m_maincpu->space(AS_PROGRAM);
323322
324323   m_maria_scanline++;
325324
r20902r20903
391390   if( ( frame_scanline > 15 ) && m_maria_dodma )
392391   {
393392      if (m_maria_scanline < ( m_lines - 4 ) )
394         maria_draw_scanline(machine());
393         maria_draw_scanline();
395394
396395      if( m_maria_offset == 0 )
397396      {
r20902r20903
438437
439438READ8_MEMBER(a7800_state::a7800_MARIA_r)
440439{
441   UINT8 *ROM = memregion("maincpu")->base();
440   UINT8 *ROM = m_region_maincpu->base();
442441   switch (offset)
443442   {
444443      case 0x08:
r20902r20903
452451
453452WRITE8_MEMBER(a7800_state::a7800_MARIA_w)
454453{
455   UINT8 *ROM = memregion("maincpu")->base();
454   UINT8 *ROM = m_region_maincpu->base();
456455   switch (offset)
457456   {
458457      case 0x00:
r20902r20903
477476         m_maria_palette[0][3] = data;
478477         break;
479478      case 0x04:
480         machine().device("maincpu")->execute().spin_until_trigger(TRIGGER_HSYNC);
479         m_maincpu->spin_until_trigger(TRIGGER_HSYNC);
481480         m_maria_wsync=1;
482481         break;
483482

Previous 199869 Revisions Next


© 1997-2024 The MAME Team