mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
(MESS) a7800.c: Reduce tagmap lookups (nw)
This commit is contained in:
parent
39431cdbe7
commit
2c81cb6f60
@ -8,14 +8,34 @@
|
||||
#define A7800_H_
|
||||
|
||||
#include "machine/6532riot.h"
|
||||
#include "sound/pokey.h"
|
||||
#include "sound/tiasound.h"
|
||||
#include "sound/tiaintf.h"
|
||||
|
||||
|
||||
class a7800_state : public driver_device
|
||||
{
|
||||
public:
|
||||
a7800_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this,"maincpu")
|
||||
{ }
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_pokey(*this, "pokey")
|
||||
, m_tia(*this, "tia")
|
||||
, m_region_maincpu(*this, "maincpu")
|
||||
, m_bank1(*this, "bank1")
|
||||
, m_bank2(*this, "bank2")
|
||||
, m_bank3(*this, "bank3")
|
||||
, m_bank4(*this, "bank4")
|
||||
, m_bank5(*this, "bank5")
|
||||
, m_bank6(*this, "bank6")
|
||||
, m_bank7(*this, "bank7")
|
||||
, m_io_joysticks(*this, "joysticks")
|
||||
, m_io_buttons(*this, "buttons")
|
||||
, m_io_vblank(*this, "vblank")
|
||||
, m_io_console_buttons(*this, "console_buttons")
|
||||
, m_bank10(NULL)
|
||||
, m_bank11(NULL)
|
||||
{ }
|
||||
|
||||
int m_lines;
|
||||
int m_ispal;
|
||||
@ -52,7 +72,6 @@ public:
|
||||
int m_p1_one_button;
|
||||
int m_p2_one_button;
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
DECLARE_WRITE8_MEMBER(a7800_RAM0_w);
|
||||
DECLARE_WRITE8_MEMBER(a7800_cart_w);
|
||||
DECLARE_READ8_MEMBER(a7800_TIA_r);
|
||||
@ -73,6 +92,27 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(riot_button_pullup_w);
|
||||
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a7800_cart );
|
||||
|
||||
protected:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<pokey_device> m_pokey;
|
||||
required_device<tia_device> m_tia;
|
||||
required_memory_region m_region_maincpu;
|
||||
required_memory_bank m_bank1;
|
||||
required_memory_bank m_bank2;
|
||||
required_memory_bank m_bank3;
|
||||
required_memory_bank m_bank4;
|
||||
required_memory_bank m_bank5;
|
||||
required_memory_bank m_bank6;
|
||||
required_memory_bank m_bank7;
|
||||
required_ioport m_io_joysticks;
|
||||
required_ioport m_io_buttons;
|
||||
required_ioport m_io_vblank;
|
||||
required_ioport m_io_console_buttons;
|
||||
memory_bank *m_bank10;
|
||||
memory_bank *m_bank11;
|
||||
|
||||
void maria_draw_scanline();
|
||||
};
|
||||
|
||||
/*----------- defined in machine/a7800.c -----------*/
|
||||
|
@ -23,10 +23,6 @@
|
||||
#include "emu.h"
|
||||
#include "includes/a7800.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "sound/tiasound.h"
|
||||
#include "machine/6532riot.h"
|
||||
#include "sound/pokey.h"
|
||||
#include "sound/tiaintf.h"
|
||||
|
||||
|
||||
|
||||
@ -40,12 +36,12 @@
|
||||
|
||||
READ8_MEMBER(a7800_state::riot_joystick_r)
|
||||
{
|
||||
return machine().root_device().ioport("joysticks")->read();
|
||||
return m_io_joysticks->read();
|
||||
}
|
||||
|
||||
READ8_MEMBER(a7800_state::riot_console_button_r)
|
||||
{
|
||||
return machine().root_device().ioport("console_buttons")->read();
|
||||
return m_io_console_buttons->read();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(a7800_state::riot_button_pullup_w)
|
||||
@ -70,23 +66,25 @@ const riot6532_interface a7800_r6532_interface =
|
||||
|
||||
void a7800_state::a7800_driver_init(int ispal, int lines)
|
||||
{
|
||||
address_space& space = machine().device("maincpu")->memory().space(AS_PROGRAM);
|
||||
m_ROM = memregion("maincpu")->base();
|
||||
address_space& space = m_maincpu->space(AS_PROGRAM);
|
||||
m_ROM = m_region_maincpu->base();
|
||||
m_ispal = ispal;
|
||||
m_lines = lines;
|
||||
m_p1_one_button = 1;
|
||||
m_p2_one_button = 1;
|
||||
|
||||
/* standard banks */
|
||||
membank("bank5")->set_base(&m_ROM[0x2040]); /* RAM0 */
|
||||
membank("bank6")->set_base(&m_ROM[0x2140]); /* RAM1 */
|
||||
membank("bank7")->set_base(&m_ROM[0x2000]); /* MAINRAM */
|
||||
m_bank5->set_base(&m_ROM[0x2040]); /* RAM0 */
|
||||
m_bank6->set_base(&m_ROM[0x2140]); /* RAM1 */
|
||||
m_bank7->set_base(&m_ROM[0x2000]); /* MAINRAM */
|
||||
|
||||
/* Brutal hack put in as a consequence of new memory system; fix this */
|
||||
space.install_readwrite_bank(0x0480, 0x04FF,"bank10");
|
||||
membank("bank10")->set_base(m_ROM + 0x0480);
|
||||
m_bank10 = membank("bank10");
|
||||
m_bank10->set_base(m_ROM + 0x0480);
|
||||
space.install_readwrite_bank(0x1800, 0x27FF, "bank11");
|
||||
membank("bank11")->set_base(m_ROM + 0x1800);
|
||||
m_bank11 = membank("bank11");
|
||||
m_bank11->set_base(m_ROM + 0x1800);
|
||||
|
||||
m_bios_bkup = NULL;
|
||||
m_cart_bkup = NULL;
|
||||
@ -122,24 +120,23 @@ DRIVER_INIT_MEMBER(a7800_state,a7800_pal)
|
||||
void a7800_state::machine_reset()
|
||||
{
|
||||
UINT8 *memory;
|
||||
address_space& space = machine().device("maincpu")->memory().space(AS_PROGRAM);
|
||||
address_space& space = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
m_ctrl_lock = 0;
|
||||
m_ctrl_reg = 0;
|
||||
m_maria_flag = 0;
|
||||
|
||||
/* set banks to default states */
|
||||
memory = memregion("maincpu")->base();
|
||||
membank("bank1")->set_base(memory + 0x4000 );
|
||||
membank("bank2")->set_base(memory + 0x8000 );
|
||||
membank("bank3")->set_base(memory + 0xA000 );
|
||||
membank("bank4")->set_base(memory + 0xC000 );
|
||||
memory = m_region_maincpu->base();
|
||||
m_bank1->set_base(memory + 0x4000 );
|
||||
m_bank2->set_base(memory + 0x8000 );
|
||||
m_bank3->set_base(memory + 0xA000 );
|
||||
m_bank4->set_base(memory + 0xC000 );
|
||||
|
||||
/* pokey cartridge */
|
||||
if (m_cart_type & 0x01)
|
||||
{
|
||||
pokey_device *pokey = machine().device<pokey_device>("pokey");
|
||||
space.install_readwrite_handler(0x4000, 0x7FFF, read8_delegate(FUNC(pokey_device::read),pokey), write8_delegate(FUNC(pokey_device::write),pokey));
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
@ -246,7 +243,7 @@ DEVICE_IMAGE_LOAD_MEMBER( a7800_state, a7800_cart )
|
||||
{
|
||||
UINT32 len = 0, start = 0;
|
||||
unsigned char header[128];
|
||||
UINT8 *memory = image.device().machine().root_device().memregion("maincpu")->base();
|
||||
UINT8 *memory = m_region_maincpu->base();
|
||||
const char *pcb_name;
|
||||
|
||||
// detect cart type either from xml or from header
|
||||
@ -391,7 +388,7 @@ WRITE8_MEMBER(a7800_state::a7800_RAM0_w)
|
||||
|
||||
WRITE8_MEMBER(a7800_state::a7800_cart_w)
|
||||
{
|
||||
UINT8 *memory = memregion("maincpu")->base();
|
||||
UINT8 *memory = m_region_maincpu->base();
|
||||
|
||||
if(offset < 0x4000)
|
||||
{
|
||||
@ -401,8 +398,7 @@ WRITE8_MEMBER(a7800_state::a7800_cart_w)
|
||||
}
|
||||
else if(m_cart_type & 0x01)
|
||||
{
|
||||
pokey_device *pokey = machine().device<pokey_device>("pokey");
|
||||
pokey->write(space, offset, data);
|
||||
m_pokey->write(space, offset, data);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -421,8 +417,8 @@ WRITE8_MEMBER(a7800_state::a7800_cart_w)
|
||||
{
|
||||
data &= 0x07;
|
||||
}
|
||||
membank("bank2")->set_base(memory + 0x10000 + (data << 14));
|
||||
membank("bank3")->set_base(memory + 0x12000 + (data << 14));
|
||||
m_bank2->set_base(memory + 0x10000 + (data << 14));
|
||||
m_bank3->set_base(memory + 0x12000 + (data << 14));
|
||||
/* logerror("BANK SEL: %d\n",data); */
|
||||
}
|
||||
else if(( m_cart_type == MBANK_TYPE_ABSOLUTE ) &&( offset == 0x4000 ) )
|
||||
@ -431,11 +427,11 @@ WRITE8_MEMBER(a7800_state::a7800_cart_w)
|
||||
/*logerror( "F18 BANK SEL: %d\n", data );*/
|
||||
if( data & 1 )
|
||||
{
|
||||
membank("bank1")->set_base(memory + 0x10000 );
|
||||
m_bank1->set_base(memory + 0x10000 );
|
||||
}
|
||||
else if( data & 2 )
|
||||
{
|
||||
membank("bank1")->set_base(memory + 0x14000 );
|
||||
m_bank1->set_base(memory + 0x14000 );
|
||||
}
|
||||
}
|
||||
else if(( m_cart_type == MBANK_TYPE_ACTIVISION ) &&( offset >= 0xBF80 ) )
|
||||
@ -445,8 +441,8 @@ WRITE8_MEMBER(a7800_state::a7800_cart_w)
|
||||
|
||||
/*logerror( "Activision BANK SEL: %d\n", data );*/
|
||||
|
||||
membank("bank3")->set_base(memory + 0x10000 + ( data << 14 ) );
|
||||
membank("bank4")->set_base(memory + 0x12000 + ( data << 14 ) );
|
||||
m_bank3->set_base(memory + 0x10000 + ( data << 14 ) );
|
||||
m_bank4->set_base(memory + 0x12000 + ( data << 14 ) );
|
||||
}
|
||||
}
|
||||
|
||||
@ -471,20 +467,20 @@ READ8_MEMBER(a7800_state::a7800_TIA_r)
|
||||
still return a reasonable value */
|
||||
return 0x00;
|
||||
case 0x08:
|
||||
return((ioport("buttons")->read() & 0x02) << 6);
|
||||
return((m_io_buttons->read() & 0x02) << 6);
|
||||
case 0x09:
|
||||
return((ioport("buttons")->read() & 0x08) << 4);
|
||||
return((m_io_buttons->read() & 0x08) << 4);
|
||||
case 0x0A:
|
||||
return((ioport("buttons")->read() & 0x01) << 7);
|
||||
return((m_io_buttons->read() & 0x01) << 7);
|
||||
case 0x0B:
|
||||
return((ioport("buttons")->read() & 0x04) << 5);
|
||||
return((m_io_buttons->read() & 0x04) << 5);
|
||||
case 0x0c:
|
||||
if(((ioport("buttons")->read() & 0x08) ||(ioport("buttons")->read() & 0x02)) && m_p1_one_button)
|
||||
if(((m_io_buttons->read() & 0x08) ||(m_io_buttons->read() & 0x02)) && m_p1_one_button)
|
||||
return 0x00;
|
||||
else
|
||||
return 0x80;
|
||||
case 0x0d:
|
||||
if(((ioport("buttons")->read() & 0x01) ||(ioport("buttons")->read() & 0x04)) && m_p2_one_button)
|
||||
if(((m_io_buttons->read() & 0x01) ||(m_io_buttons->read() & 0x04)) && m_p2_one_button)
|
||||
return 0x00;
|
||||
else
|
||||
return 0x80;
|
||||
@ -516,6 +512,6 @@ WRITE8_MEMBER(a7800_state::a7800_TIA_w)
|
||||
}
|
||||
break;
|
||||
}
|
||||
machine().device<tia_device>("tia")->tia_sound_w(space, offset, data);
|
||||
m_tia->tia_sound_w(space, offset, data);
|
||||
m_ROM[offset] = data;
|
||||
}
|
||||
|
@ -83,10 +83,9 @@ void a7800_state::video_start()
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static void maria_draw_scanline(running_machine &machine)
|
||||
void a7800_state::maria_draw_scanline()
|
||||
{
|
||||
a7800_state *state = machine.driver_data<a7800_state>();
|
||||
address_space& space = machine.device("maincpu")->memory().space(AS_PROGRAM);
|
||||
address_space& space = m_maincpu->space(AS_PROGRAM);
|
||||
unsigned int graph_adr,data_addr;
|
||||
int width,hpos,pal,mode,ind;
|
||||
unsigned int dl;
|
||||
@ -95,12 +94,12 @@ static void maria_draw_scanline(running_machine &machine)
|
||||
UINT16 *scanline;
|
||||
|
||||
/* set up scanline */
|
||||
scanline = &state->m_bitmap.pix16(state->m_maria_scanline);
|
||||
scanline = &m_bitmap.pix16(m_maria_scanline);
|
||||
for (i = 0; i < 320; i++)
|
||||
scanline[i] = state->m_maria_backcolor;
|
||||
scanline[i] = m_maria_backcolor;
|
||||
|
||||
/* Process this DLL entry */
|
||||
dl = state->m_maria_dl;
|
||||
dl = m_maria_dl;
|
||||
|
||||
/* Step through DL's */
|
||||
while ((READ_MEM(dl + 1) & 0x5F) != 0)
|
||||
@ -112,7 +111,7 @@ static void maria_draw_scanline(running_machine &machine)
|
||||
width = ((READ_MEM(dl+3) ^ 0xff) & 0x1F) + 1;
|
||||
hpos = READ_MEM(dl+4)*2;
|
||||
pal = READ_MEM(dl+3) >> 5;
|
||||
state->m_maria_write_mode = (READ_MEM(dl+1) & 0x80) >> 5;
|
||||
m_maria_write_mode = (READ_MEM(dl+1) & 0x80) >> 5;
|
||||
ind = READ_MEM(dl+1) & 0x20;
|
||||
dl+=5;
|
||||
}
|
||||
@ -127,9 +126,9 @@ static void maria_draw_scanline(running_machine &machine)
|
||||
dl+=4;
|
||||
}
|
||||
|
||||
mode = state->m_maria_rm | state->m_maria_write_mode;
|
||||
mode = m_maria_rm | m_maria_write_mode;
|
||||
|
||||
/*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 );*/
|
||||
/*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 );*/
|
||||
|
||||
for (x=0; x<width; x++) // 20030621 ericball get graphic data first, then switch (mode)
|
||||
{
|
||||
@ -139,18 +138,18 @@ static void maria_draw_scanline(running_machine &machine)
|
||||
if (ind)
|
||||
{
|
||||
c = READ_MEM(graph_adr + x) & 0xFF;
|
||||
data_addr= (state->m_maria_charbase | c) + (state->m_maria_offset << 8);
|
||||
if( state->m_maria_cwidth )
|
||||
data_addr= (m_maria_charbase | c) + (m_maria_offset << 8);
|
||||
if( m_maria_cwidth )
|
||||
ind_bytes = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
data_addr = graph_adr + x + (state->m_maria_offset << 8);
|
||||
data_addr = graph_adr + x + (m_maria_offset << 8);
|
||||
}
|
||||
|
||||
if ( (state->m_maria_holey & 0x02) && ((data_addr & 0x9000) == 0x9000))
|
||||
if ( (m_maria_holey & 0x02) && ((data_addr & 0x9000) == 0x9000))
|
||||
continue;
|
||||
if ( (state->m_maria_holey & 0x01) && ((data_addr & 0x8800) == 0x8800))
|
||||
if ( (m_maria_holey & 0x01) && ((data_addr & 0x8800) == 0x8800))
|
||||
continue;
|
||||
|
||||
while (ind_bytes > 0)
|
||||
@ -163,96 +162,96 @@ static void maria_draw_scanline(running_machine &machine)
|
||||
case 0x00: /* 160A (160x2) */
|
||||
case 0x01: /* 160A (160x2) */
|
||||
c = (d & 0xC0) >> 6;
|
||||
if (c || state->m_maria_kangaroo)
|
||||
if (c || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][c];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][c];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][c];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][c];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
c = (d & 0x30) >> 4;
|
||||
if (c || state->m_maria_kangaroo)
|
||||
if (c || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][c];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][c];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][c];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][c];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
c = (d & 0x0C) >> 2;
|
||||
if (c || state->m_maria_kangaroo)
|
||||
if (c || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][c];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][c];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][c];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][c];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
c = (d & 0x03);
|
||||
if (c || state->m_maria_kangaroo)
|
||||
if (c || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][c];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][c];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][c];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][c];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
break;
|
||||
|
||||
case 0x02: /* 320D used by Jinks! */
|
||||
c = pal & 0x04;
|
||||
if ( d & 0xC0 || pal & 0x03 || state->m_maria_kangaroo )
|
||||
if ( d & 0xC0 || pal & 0x03 || m_maria_kangaroo )
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[c][((d & 0x80) >> 6) | ((pal & 2) >> 1)];
|
||||
scanline[hpos + 1] = state->m_maria_palette[c][((d & 0x40) >> 5) | ((pal & 1) >> 0)];
|
||||
scanline[hpos + 0] = m_maria_palette[c][((d & 0x80) >> 6) | ((pal & 2) >> 1)];
|
||||
scanline[hpos + 1] = m_maria_palette[c][((d & 0x40) >> 5) | ((pal & 1) >> 0)];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
if ( d & 0x30 || pal & 0x03 || state->m_maria_kangaroo )
|
||||
if ( d & 0x30 || pal & 0x03 || m_maria_kangaroo )
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[c][((d & 0x20) >> 4) | ((pal & 2) >> 1)];
|
||||
scanline[hpos + 1] = state->m_maria_palette[c][((d & 0x10) >> 3) | ((pal & 1) >> 0)];
|
||||
scanline[hpos + 0] = m_maria_palette[c][((d & 0x20) >> 4) | ((pal & 2) >> 1)];
|
||||
scanline[hpos + 1] = m_maria_palette[c][((d & 0x10) >> 3) | ((pal & 1) >> 0)];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
if ( d & 0x0C || pal & 0x03 || state->m_maria_kangaroo )
|
||||
if ( d & 0x0C || pal & 0x03 || m_maria_kangaroo )
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[c][((d & 0x08) >> 2) | ((pal & 2) >> 1)];
|
||||
scanline[hpos + 1] = state->m_maria_palette[c][((d & 0x04) >> 1) | ((pal & 1) >> 0)];
|
||||
scanline[hpos + 0] = m_maria_palette[c][((d & 0x08) >> 2) | ((pal & 2) >> 1)];
|
||||
scanline[hpos + 1] = m_maria_palette[c][((d & 0x04) >> 1) | ((pal & 1) >> 0)];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
if ( d & 0x03 || pal & 0x03 || state->m_maria_kangaroo )
|
||||
if ( d & 0x03 || pal & 0x03 || m_maria_kangaroo )
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[c][((d & 0x02) << 0) | ((pal & 2) >> 1)];
|
||||
scanline[hpos + 1] = state->m_maria_palette[c][((d & 0x01) << 1) | ((pal & 1) >> 0)];
|
||||
scanline[hpos + 0] = m_maria_palette[c][((d & 0x02) << 0) | ((pal & 2) >> 1)];
|
||||
scanline[hpos + 1] = m_maria_palette[c][((d & 0x01) << 1) | ((pal & 1) >> 0)];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
break;
|
||||
|
||||
case 0x03: /* MODE 320A */
|
||||
if (d & 0xC0 || state->m_maria_kangaroo)
|
||||
if (d & 0xC0 || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][(d & 0x80) >> 6];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][(d & 0x40) >> 5];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][(d & 0x80) >> 6];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][(d & 0x40) >> 5];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
if ( d & 0x30 || state->m_maria_kangaroo)
|
||||
if ( d & 0x30 || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][(d & 0x20) >> 4];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][(d & 0x10) >> 3];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][(d & 0x20) >> 4];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][(d & 0x10) >> 3];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
if (d & 0x0C || state->m_maria_kangaroo)
|
||||
if (d & 0x0C || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][(d & 0x08) >> 2];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][(d & 0x04) >> 1];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][(d & 0x08) >> 2];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][(d & 0x04) >> 1];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
if (d & 0x03 || state->m_maria_kangaroo)
|
||||
if (d & 0x03 || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][(d & 0x02)];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][(d & 0x01) << 1];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][(d & 0x02)];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][(d & 0x01) << 1];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
break;
|
||||
@ -260,50 +259,50 @@ static void maria_draw_scanline(running_machine &machine)
|
||||
case 0x04: /* 160B (160x4) */
|
||||
case 0x05: /* 160B (160x4) */
|
||||
c = (d & 0xC0) >> 6;
|
||||
if (c || state->m_maria_kangaroo)
|
||||
if (c || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][c];
|
||||
scanline[hpos + 1] = state->m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][c];
|
||||
scanline[hpos + 0] = m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][c];
|
||||
scanline[hpos + 1] = m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][c];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
c = (d & 0x30) >> 4;
|
||||
if (c || state->m_maria_kangaroo)
|
||||
if (c || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[(pal & 0x04) | (d & 0x03)][c];
|
||||
scanline[hpos + 1] = state->m_maria_palette[(pal & 0x04) | (d & 0x03)][c];
|
||||
scanline[hpos + 0] = m_maria_palette[(pal & 0x04) | (d & 0x03)][c];
|
||||
scanline[hpos + 1] = m_maria_palette[(pal & 0x04) | (d & 0x03)][c];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
break;
|
||||
|
||||
case 0x06: /* MODE 320B */
|
||||
if (d & 0xCC || state->m_maria_kangaroo)
|
||||
if (d & 0xCC || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][((d & 0x80) >> 6) | ((d & 0x08) >> 3)];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][((d & 0x40) >> 5) | ((d & 0x04) >> 2)];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][((d & 0x80) >> 6) | ((d & 0x08) >> 3)];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][((d & 0x40) >> 5) | ((d & 0x04) >> 2)];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
if ( d & 0x33 || state->m_maria_kangaroo)
|
||||
if ( d & 0x33 || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[pal][((d & 0x20) >> 4) | ((d & 0x02) >> 1)];
|
||||
scanline[hpos + 1] = state->m_maria_palette[pal][((d & 0x10) >> 3) | (d & 0x01)];
|
||||
scanline[hpos + 0] = m_maria_palette[pal][((d & 0x20) >> 4) | ((d & 0x02) >> 1)];
|
||||
scanline[hpos + 1] = m_maria_palette[pal][((d & 0x10) >> 3) | (d & 0x01)];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
break;
|
||||
|
||||
case 0x07: /* (320C mode) */
|
||||
if (d & 0xC0 || state->m_maria_kangaroo)
|
||||
if (d & 0xC0 || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][(d & 0x80) >> 6];
|
||||
scanline[hpos + 1] = state->m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][(d & 0x40) >> 5];
|
||||
scanline[hpos + 0] = m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][(d & 0x80) >> 6];
|
||||
scanline[hpos + 1] = m_maria_palette[(pal & 0x04) | ((d & 0x0C) >> 2)][(d & 0x40) >> 5];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
|
||||
if ( d & 0x30 || state->m_maria_kangaroo)
|
||||
if ( d & 0x30 || m_maria_kangaroo)
|
||||
{
|
||||
scanline[hpos + 0] = state->m_maria_palette[(pal & 0x04) | (d & 0x03)][(d & 0x20) >> 4];
|
||||
scanline[hpos + 1] = state->m_maria_palette[(pal & 0x04) | (d & 0x03)][(d & 0x10) >> 3];
|
||||
scanline[hpos + 0] = m_maria_palette[(pal & 0x04) | (d & 0x03)][(d & 0x20) >> 4];
|
||||
scanline[hpos + 1] = m_maria_palette[(pal & 0x04) | (d & 0x03)][(d & 0x10) >> 3];
|
||||
}
|
||||
inc_hpos_by_2();
|
||||
break;
|
||||
@ -318,8 +317,8 @@ static void maria_draw_scanline(running_machine &machine)
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(a7800_state::a7800_interrupt)
|
||||
{
|
||||
int frame_scanline;
|
||||
UINT8 *ROM = machine().root_device().memregion("maincpu")->base();
|
||||
address_space& space = machine().device("maincpu")->memory().space(AS_PROGRAM);
|
||||
UINT8 *ROM = m_region_maincpu->base();
|
||||
address_space& space = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
m_maria_scanline++;
|
||||
|
||||
@ -391,7 +390,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(a7800_state::a7800_interrupt)
|
||||
if( ( frame_scanline > 15 ) && m_maria_dodma )
|
||||
{
|
||||
if (m_maria_scanline < ( m_lines - 4 ) )
|
||||
maria_draw_scanline(machine());
|
||||
maria_draw_scanline();
|
||||
|
||||
if( m_maria_offset == 0 )
|
||||
{
|
||||
@ -438,7 +437,7 @@ UINT32 a7800_state::screen_update_a7800(screen_device &screen, bitmap_ind16 &bit
|
||||
|
||||
READ8_MEMBER(a7800_state::a7800_MARIA_r)
|
||||
{
|
||||
UINT8 *ROM = memregion("maincpu")->base();
|
||||
UINT8 *ROM = m_region_maincpu->base();
|
||||
switch (offset)
|
||||
{
|
||||
case 0x08:
|
||||
@ -452,7 +451,7 @@ READ8_MEMBER(a7800_state::a7800_MARIA_r)
|
||||
|
||||
WRITE8_MEMBER(a7800_state::a7800_MARIA_w)
|
||||
{
|
||||
UINT8 *ROM = memregion("maincpu")->base();
|
||||
UINT8 *ROM = m_region_maincpu->base();
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00:
|
||||
@ -477,7 +476,7 @@ WRITE8_MEMBER(a7800_state::a7800_MARIA_w)
|
||||
m_maria_palette[0][3] = data;
|
||||
break;
|
||||
case 0x04:
|
||||
machine().device("maincpu")->execute().spin_until_trigger(TRIGGER_HSYNC);
|
||||
m_maincpu->spin_until_trigger(TRIGGER_HSYNC);
|
||||
m_maria_wsync=1;
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user