Modernization of drivers part 10 (no whatsnew)

This commit is contained in:
Miodrag Milanovic 2013-02-08 13:40:47 +00:00
parent 285f060f02
commit 3995e07169
22 changed files with 306 additions and 305 deletions

View File

@ -632,17 +632,17 @@ ADDRESS_MAP_END
Shogun Warriors Shogun Warriors
***************************************************************************/ ***************************************************************************/
static void kaneko16_common_oki_bank_w( running_machine& machine, const char *bankname, const char* tag, int bank, size_t fixedsize, size_t bankedsize ) void kaneko16_state::kaneko16_common_oki_bank_w( const char *bankname, const char* tag, int bank, size_t fixedsize, size_t bankedsize )
{ {
UINT32 bankaddr; UINT32 bankaddr;
UINT8* samples = machine.root_device().memregion(tag)->base(); UINT8* samples = machine().root_device().memregion(tag)->base();
size_t length = machine.root_device().memregion(tag)->bytes(); size_t length = machine().root_device().memregion(tag)->bytes();
bankaddr = fixedsize + (bankedsize * bank); bankaddr = fixedsize + (bankedsize * bank);
if (bankaddr <= (length-bankedsize)) if (bankaddr <= (length-bankedsize))
{ {
machine.root_device().membank(bankname)->set_base(samples + bankaddr); machine().root_device().membank(bankname)->set_base(samples + bankaddr);
} }
} }
@ -650,8 +650,8 @@ WRITE16_MEMBER(kaneko16_shogwarr_state::shogwarr_oki_bank_w)
{ {
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
kaneko16_common_oki_bank_w(machine(), "bank10", "oki1", (data >> 4) & 0xf, 0x30000, 0x10000); kaneko16_common_oki_bank_w("bank10", "oki1", (data >> 4) & 0xf, 0x30000, 0x10000);
kaneko16_common_oki_bank_w(machine(), "bank11", "oki2", (data & 0xf) , 0x00000, 0x40000); kaneko16_common_oki_bank_w("bank11", "oki2", (data & 0xf) , 0x00000, 0x40000);
} }
} }
@ -659,8 +659,8 @@ WRITE16_MEMBER(kaneko16_shogwarr_state::brapboys_oki_bank_w)
{ {
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
kaneko16_common_oki_bank_w(machine(), "bank10", "oki1", (data >> 4) & 0xf, 0x30000, 0x10000); kaneko16_common_oki_bank_w("bank10", "oki1", (data >> 4) & 0xf, 0x30000, 0x10000);
kaneko16_common_oki_bank_w(machine(), "bank11", "oki2", (data & 0xf) , 0x20000, 0x20000); kaneko16_common_oki_bank_w("bank11", "oki2", (data & 0xf) , 0x20000, 0x20000);
} }
} }
@ -2155,10 +2155,10 @@ MACHINE_CONFIG_END
have the even and odd pixels swapped. So we use this function to untangle have the even and odd pixels swapped. So we use this function to untangle
them and have one single gfxlayout for both tiles and sprites. them and have one single gfxlayout for both tiles and sprites.
*/ */
static void kaneko16_unscramble_tiles(running_machine &machine, const char *region) void kaneko16_state::kaneko16_unscramble_tiles(const char *region)
{ {
UINT8 *RAM = machine.root_device().memregion(region)->base(); UINT8 *RAM = machine().root_device().memregion(region)->base();
int size = machine.root_device().memregion(region)->bytes(); int size = machine().root_device().memregion(region)->bytes();
int i; int i;
if (RAM == NULL) return; if (RAM == NULL) return;
@ -2169,7 +2169,7 @@ static void kaneko16_unscramble_tiles(running_machine &machine, const char *regi
} }
} }
static void kaneko16_expand_sample_banks(running_machine &machine, const char *region) void kaneko16_state::kaneko16_expand_sample_banks(const char *region)
{ {
/* The sample data for the first OKI has an address translator/ /* The sample data for the first OKI has an address translator/
banking register in it that munges the addresses as follows: banking register in it that munges the addresses as follows:
@ -2183,11 +2183,11 @@ static void kaneko16_expand_sample_banks(running_machine &machine, const char *r
int bank; int bank;
UINT8 *src0; UINT8 *src0;
if (machine.root_device().memregion(region)->bytes() < 0x40000 * 16) if (machine().root_device().memregion(region)->bytes() < 0x40000 * 16)
fatalerror("gtmr SOUND1 region too small\n"); fatalerror("gtmr SOUND1 region too small\n");
/* bank 0 maps to itself, so we just leave it alone */ /* bank 0 maps to itself, so we just leave it alone */
src0 = machine.root_device().memregion(region)->base(); src0 = machine().root_device().memregion(region)->base();
for (bank = 15; bank > 0; bank--) for (bank = 15; bank > 0; bank--)
{ {
UINT8 *srcn = src0 + 0x10000 * (bank < 3 ? 3 : bank); UINT8 *srcn = src0 + 0x10000 * (bank < 3 ? 3 : bank);
@ -2200,20 +2200,20 @@ static void kaneko16_expand_sample_banks(running_machine &machine, const char *r
DRIVER_INIT_MEMBER( kaneko16_state, kaneko16 ) DRIVER_INIT_MEMBER( kaneko16_state, kaneko16 )
{ {
kaneko16_unscramble_tiles(machine(), "gfx2"); kaneko16_unscramble_tiles("gfx2");
kaneko16_unscramble_tiles(machine(), "gfx3"); kaneko16_unscramble_tiles("gfx3");
} }
DRIVER_INIT_MEMBER( kaneko16_berlwall_state, berlwall ) DRIVER_INIT_MEMBER( kaneko16_berlwall_state, berlwall )
{ {
kaneko16_unscramble_tiles(machine(), "gfx2"); kaneko16_unscramble_tiles("gfx2");
} }
DRIVER_INIT_MEMBER( kaneko16_state, samplebank ) DRIVER_INIT_MEMBER( kaneko16_state, samplebank )
{ {
kaneko16_unscramble_tiles(machine(), "gfx2"); kaneko16_unscramble_tiles("gfx2");
kaneko16_unscramble_tiles(machine(), "gfx3"); kaneko16_unscramble_tiles("gfx3");
kaneko16_expand_sample_banks(machine(), "oki1"); kaneko16_expand_sample_banks("oki1");
} }
@ -3829,8 +3829,8 @@ DRIVER_INIT_MEMBER( kaneko16_gtmr_state, gtmr )
DRIVER_INIT_MEMBER( kaneko16_shogwarr_state, shogwarr ) DRIVER_INIT_MEMBER( kaneko16_shogwarr_state, shogwarr )
{ {
// default sample banks // default sample banks
kaneko16_common_oki_bank_w(machine(), "bank10", "oki1", 0, 0x30000, 0x10000); kaneko16_common_oki_bank_w("bank10", "oki1", 0, 0x30000, 0x10000);
kaneko16_common_oki_bank_w(machine(), "bank11", "oki2", 0, 0x00000, 0x40000); kaneko16_common_oki_bank_w("bank11", "oki2", 0, 0x00000, 0x40000);
DRIVER_INIT_CALL(kaneko16); DRIVER_INIT_CALL(kaneko16);
} }
@ -3841,8 +3841,8 @@ DRIVER_INIT_MEMBER( kaneko16_shogwarr_state, brapboys )
machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xe00000, 0xe00001, write16_delegate(FUNC(kaneko16_shogwarr_state::brapboys_oki_bank_w),this)); machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xe00000, 0xe00001, write16_delegate(FUNC(kaneko16_shogwarr_state::brapboys_oki_bank_w),this));
// default sample banks // default sample banks
kaneko16_common_oki_bank_w(machine(), "bank10", "oki1", 0, 0x30000, 0x10000); kaneko16_common_oki_bank_w("bank10", "oki1", 0, 0x30000, 0x10000);
kaneko16_common_oki_bank_w(machine(), "bank11", "oki2", 0, 0x20000, 0x20000); kaneko16_common_oki_bank_w("bank11", "oki2", 0, 0x20000, 0x20000);
DRIVER_INIT_CALL(kaneko16); DRIVER_INIT_CALL(kaneko16);
} }

View File

@ -91,62 +91,58 @@ Stephh's notes (based on the games M68000 code and some tests) :
*************************************/ *************************************/
/* Emulation of the protected microcontroller - for coins & general protection */ /* Emulation of the protected microcontroller - for coins & general protection */
static void karnov_i8751_w( running_machine &machine, int data ) void karnov_state::karnov_i8751_w( int data )
{ {
karnov_state *state = machine.driver_data<karnov_state>();
/* Pending coin operations may cause protection commands to be queued */ /* Pending coin operations may cause protection commands to be queued */
if (state->m_i8751_needs_ack) if (m_i8751_needs_ack)
{ {
state->m_i8751_command_queue = data; m_i8751_command_queue = data;
return; return;
} }
state->m_i8751_return = 0; m_i8751_return = 0;
if (data == 0x100 && state->m_microcontroller_id == KARNOV) /* USA version */ if (data == 0x100 && m_microcontroller_id == KARNOV) /* USA version */
state->m_i8751_return = 0x56b; m_i8751_return = 0x56b;
if (data == 0x100 && state->m_microcontroller_id == KARNOVJ) /* Japan version */ if (data == 0x100 && m_microcontroller_id == KARNOVJ) /* Japan version */
state->m_i8751_return = 0x56a; m_i8751_return = 0x56a;
if ((data & 0xf00) == 0x300) if ((data & 0xf00) == 0x300)
state->m_i8751_return = (data & 0xff) * 0x12; /* Player sprite mapping */ m_i8751_return = (data & 0xff) * 0x12; /* Player sprite mapping */
/* I'm not sure the ones marked ^ appear in the right order */ /* I'm not sure the ones marked ^ appear in the right order */
if (data == 0x400) state->m_i8751_return = 0x4000; /* Get The Map... */ if (data == 0x400) m_i8751_return = 0x4000; /* Get The Map... */
if (data == 0x402) state->m_i8751_return = 0x40a6; /* Ancient Ruins */ if (data == 0x402) m_i8751_return = 0x40a6; /* Ancient Ruins */
if (data == 0x403) state->m_i8751_return = 0x4054; /* Forest... */ if (data == 0x403) m_i8751_return = 0x4054; /* Forest... */
if (data == 0x404) state->m_i8751_return = 0x40de; /* ^Rocky hills */ if (data == 0x404) m_i8751_return = 0x40de; /* ^Rocky hills */
if (data == 0x405) state->m_i8751_return = 0x4182; /* Sea */ if (data == 0x405) m_i8751_return = 0x4182; /* Sea */
if (data == 0x406) state->m_i8751_return = 0x41ca; /* Town */ if (data == 0x406) m_i8751_return = 0x41ca; /* Town */
if (data == 0x407) state->m_i8751_return = 0x421e; /* Desert */ if (data == 0x407) m_i8751_return = 0x421e; /* Desert */
if (data == 0x401) state->m_i8751_return = 0x4138; /* ^Whistling wind */ if (data == 0x401) m_i8751_return = 0x4138; /* ^Whistling wind */
if (data == 0x408) state->m_i8751_return = 0x4276; /* ^Heavy Gates */ if (data == 0x408) m_i8751_return = 0x4276; /* ^Heavy Gates */
// if (!state->m_i8751_return && data != 0x300) logerror("%s - Unknown Write %02x intel\n", machine.describe_context(), data); // if (!m_i8751_return && data != 0x300) logerror("%s - Unknown Write %02x intel\n", machine().describe_context(), data);
state->m_maincpu->set_input_line(6, HOLD_LINE); /* Signal main cpu task is complete */ m_maincpu->set_input_line(6, HOLD_LINE); /* Signal main cpu task is complete */
state->m_i8751_needs_ack = 1; m_i8751_needs_ack = 1;
} }
static void wndrplnt_i8751_w( running_machine &machine, int data ) void karnov_state::wndrplnt_i8751_w( int data )
{ {
karnov_state *state = machine.driver_data<karnov_state>();
/* The last command hasn't been ACK'd (probably a conflict with coin command) */ /* The last command hasn't been ACK'd (probably a conflict with coin command) */
if (state->m_i8751_needs_ack) if (m_i8751_needs_ack)
{ {
state->m_i8751_command_queue = data; m_i8751_command_queue = data;
return; return;
} }
state->m_i8751_return=0; m_i8751_return=0;
if (data == 0x100) state->m_i8751_return = 0x67a; if (data == 0x100) m_i8751_return = 0x67a;
if (data == 0x200) state->m_i8751_return = 0x214; if (data == 0x200) m_i8751_return = 0x214;
if (data == 0x300) state->m_i8751_return = 0x17; /* Copyright text on title screen */ if (data == 0x300) m_i8751_return = 0x17; /* Copyright text on title screen */
// if (data == 0x300) state->m_i8751_return = 0x1; /* (USA) Copyright text on title screen */ // if (data == 0x300) m_i8751_return = 0x1; /* (USA) Copyright text on title screen */
/* The game writes many values in the 0x600 range, but only a specific mask /* The game writes many values in the 0x600 range, but only a specific mask
matters for the return value */ matters for the return value */
@ -154,172 +150,170 @@ static void wndrplnt_i8751_w( running_machine &machine, int data )
{ {
switch (data & 0x18) switch (data & 0x18)
{ {
case 0x00: state->m_i8751_return = 0x4d53; break; case 0x00: m_i8751_return = 0x4d53; break;
case 0x08: state->m_i8751_return = 0x4b54; break; case 0x08: m_i8751_return = 0x4b54; break;
case 0x10: state->m_i8751_return = 0x5453; break; case 0x10: m_i8751_return = 0x5453; break;
case 0x18: state->m_i8751_return = 0x5341; break; case 0x18: m_i8751_return = 0x5341; break;
} }
} }
// else logerror("%s - Unknown Write %02x intel\n", machine.describe_context(), data); // else logerror("%s - Unknown Write %02x intel\n", machine().describe_context(), data);
/* These are 68k function call addresses - different address for each power-up */ /* These are 68k function call addresses - different address for each power-up */
if (data == 0x400) state->m_i8751_return = 0x594; if (data == 0x400) m_i8751_return = 0x594;
if (data == 0x401) state->m_i8751_return = 0x5ea; if (data == 0x401) m_i8751_return = 0x5ea;
if (data == 0x402) state->m_i8751_return = 0x628; if (data == 0x402) m_i8751_return = 0x628;
if (data == 0x403) state->m_i8751_return = 0x66c; if (data == 0x403) m_i8751_return = 0x66c;
if (data == 0x404) state->m_i8751_return = 0x6a4; if (data == 0x404) m_i8751_return = 0x6a4;
if (data == 0x405) state->m_i8751_return = 0x6a4; if (data == 0x405) m_i8751_return = 0x6a4;
if (data == 0x406) state->m_i8751_return = 0x6a4; if (data == 0x406) m_i8751_return = 0x6a4;
/* This is 68k program code which is executed every frame */ /* This is 68k program code which is executed every frame */
if (data == 0x50c) state->m_i8751_return = 0x13fc; if (data == 0x50c) m_i8751_return = 0x13fc;
if (data == 0x50b) state->m_i8751_return = 0x00ff; if (data == 0x50b) m_i8751_return = 0x00ff;
if (data == 0x50a) state->m_i8751_return = 0x0006; if (data == 0x50a) m_i8751_return = 0x0006;
if (data == 0x509) state->m_i8751_return = 0x0000; if (data == 0x509) m_i8751_return = 0x0000;
if (data == 0x508) state->m_i8751_return = 0x4a39; if (data == 0x508) m_i8751_return = 0x4a39;
if (data == 0x507) state->m_i8751_return = 0x0006; if (data == 0x507) m_i8751_return = 0x0006;
if (data == 0x506) state->m_i8751_return = 0x0000; if (data == 0x506) m_i8751_return = 0x0000;
if (data == 0x505) state->m_i8751_return = 0x66f8; if (data == 0x505) m_i8751_return = 0x66f8;
if (data == 0x504) state->m_i8751_return = 0x4a39; if (data == 0x504) m_i8751_return = 0x4a39;
if (data == 0x503) state->m_i8751_return = 0x000c; if (data == 0x503) m_i8751_return = 0x000c;
if (data == 0x502) state->m_i8751_return = 0x0003; if (data == 0x502) m_i8751_return = 0x0003;
if (data == 0x501) state->m_i8751_return = 0x6bf8; if (data == 0x501) m_i8751_return = 0x6bf8;
if (data == 0x500) state->m_i8751_return = 0x4e75; if (data == 0x500) m_i8751_return = 0x4e75;
state->m_maincpu->set_input_line(6, HOLD_LINE); /* Signal main cpu task is complete */ m_maincpu->set_input_line(6, HOLD_LINE); /* Signal main cpu task is complete */
state->m_i8751_needs_ack = 1; m_i8751_needs_ack = 1;
} }
static void chelnov_i8751_w( running_machine &machine, int data ) void karnov_state::chelnov_i8751_w( int data )
{ {
karnov_state *state = machine.driver_data<karnov_state>();
/* Pending coin operations may cause protection commands to be queued */ /* Pending coin operations may cause protection commands to be queued */
if (state->m_i8751_needs_ack) if (m_i8751_needs_ack)
{ {
state->m_i8751_command_queue = data; m_i8751_command_queue = data;
return; return;
} }
state->m_i8751_return = 0; m_i8751_return = 0;
if (data == 0x200 && state->m_microcontroller_id == CHELNOV) /* World version */ if (data == 0x200 && m_microcontroller_id == CHELNOV) /* World version */
state->m_i8751_return = 0x7736; m_i8751_return = 0x7736;
if (data == 0x200 && state->m_microcontroller_id == CHELNOVU) /* USA version */ if (data == 0x200 && m_microcontroller_id == CHELNOVU) /* USA version */
state->m_i8751_return = 0x783e; m_i8751_return = 0x783e;
if (data == 0x200 && state->m_microcontroller_id == CHELNOVJ) /* Japan version */ if (data == 0x200 && m_microcontroller_id == CHELNOVJ) /* Japan version */
state->m_i8751_return = 0x7734; m_i8751_return = 0x7734;
if (data == 0x100 && state->m_microcontroller_id == CHELNOV) /* World version */ if (data == 0x100 && m_microcontroller_id == CHELNOV) /* World version */
state->m_i8751_return = 0x71c; m_i8751_return = 0x71c;
if (data == 0x100 && state->m_microcontroller_id == CHELNOVU) /* USA version */ if (data == 0x100 && m_microcontroller_id == CHELNOVU) /* USA version */
state->m_i8751_return = 0x71b; m_i8751_return = 0x71b;
if (data == 0x100 && state->m_microcontroller_id == CHELNOVJ) /* Japan version */ if (data == 0x100 && m_microcontroller_id == CHELNOVJ) /* Japan version */
state->m_i8751_return = 0x71a; m_i8751_return = 0x71a;
if (data >= 0x6000 && data < 0x8000) if (data >= 0x6000 && data < 0x8000)
state->m_i8751_return = 1; /* patched */ m_i8751_return = 1; /* patched */
if ((data & 0xf000) == 0x1000) state->m_i8751_level = 1; /* Level 1 */ if ((data & 0xf000) == 0x1000) m_i8751_level = 1; /* Level 1 */
if ((data & 0xf000) == 0x2000) state->m_i8751_level++; /* Level Increment */ if ((data & 0xf000) == 0x2000) m_i8751_level++; /* Level Increment */
if ((data & 0xf000) == 0x3000) if ((data & 0xf000) == 0x3000)
{ {
/* Sprite table mapping */ /* Sprite table mapping */
int b = data & 0xff; int b = data & 0xff;
switch (state->m_i8751_level) switch (m_i8751_level)
{ {
case 1: /* Level 1, Sprite mapping tables */ case 1: /* Level 1, Sprite mapping tables */
if (state->m_microcontroller_id == CHELNOVU) /* USA */ if (m_microcontroller_id == CHELNOVU) /* USA */
{ {
if (b < 2) state->m_i8751_return = 0; if (b < 2) m_i8751_return = 0;
else if (b < 6) state->m_i8751_return = 1; else if (b < 6) m_i8751_return = 1;
else if (b < 0xb) state->m_i8751_return = 2; else if (b < 0xb) m_i8751_return = 2;
else if (b < 0xf) state->m_i8751_return = 3; else if (b < 0xf) m_i8751_return = 3;
else if (b < 0x13) state->m_i8751_return = 4; else if (b < 0x13) m_i8751_return = 4;
else state->m_i8751_return = 5; else m_i8751_return = 5;
} }
else /* Japan, World */ else /* Japan, World */
{ {
if (b < 3) state->m_i8751_return = 0; if (b < 3) m_i8751_return = 0;
else if (b < 8) state->m_i8751_return = 1; else if (b < 8) m_i8751_return = 1;
else if (b < 0xc) state->m_i8751_return = 2; else if (b < 0xc) m_i8751_return = 2;
else if (b < 0x10) state->m_i8751_return = 3; else if (b < 0x10) m_i8751_return = 3;
else if (b < 0x19) state->m_i8751_return = 4; else if (b < 0x19) m_i8751_return = 4;
else if (b < 0x1b) state->m_i8751_return = 5; else if (b < 0x1b) m_i8751_return = 5;
else if (b < 0x22) state->m_i8751_return = 6; else if (b < 0x22) m_i8751_return = 6;
else if (b < 0x28) state->m_i8751_return = 7; else if (b < 0x28) m_i8751_return = 7;
else state->m_i8751_return = 8; else m_i8751_return = 8;
} }
break; break;
case 2: /* Level 2, Sprite mapping tables, all sets are the same */ case 2: /* Level 2, Sprite mapping tables, all sets are the same */
if (b < 3) state->m_i8751_return = 0; if (b < 3) m_i8751_return = 0;
else if (b < 9) state->m_i8751_return = 1; else if (b < 9) m_i8751_return = 1;
else if (b < 0x11) state->m_i8751_return = 2; else if (b < 0x11) m_i8751_return = 2;
else if (b < 0x1b) state->m_i8751_return = 3; else if (b < 0x1b) m_i8751_return = 3;
else if (b < 0x21) state->m_i8751_return = 4; else if (b < 0x21) m_i8751_return = 4;
else if (b < 0x28) state->m_i8751_return = 5; else if (b < 0x28) m_i8751_return = 5;
else state->m_i8751_return = 6; else m_i8751_return = 6;
break; break;
case 3: /* Level 3, Sprite mapping tables, all sets are the same */ case 3: /* Level 3, Sprite mapping tables, all sets are the same */
if (b < 5) state->m_i8751_return = 0; if (b < 5) m_i8751_return = 0;
else if (b < 9) state->m_i8751_return = 1; else if (b < 9) m_i8751_return = 1;
else if (b < 0xd) state->m_i8751_return = 2; else if (b < 0xd) m_i8751_return = 2;
else if (b < 0x11) state->m_i8751_return = 3; else if (b < 0x11) m_i8751_return = 3;
else if (b < 0x1b) state->m_i8751_return = 4; else if (b < 0x1b) m_i8751_return = 4;
else if (b < 0x1c) state->m_i8751_return = 5; else if (b < 0x1c) m_i8751_return = 5;
else if (b < 0x22) state->m_i8751_return = 6; else if (b < 0x22) m_i8751_return = 6;
else if (b < 0x27) state->m_i8751_return = 7; else if (b < 0x27) m_i8751_return = 7;
else state->m_i8751_return = 8; else m_i8751_return = 8;
break; break;
case 4: /* Level 4, Sprite mapping tables, all sets are the same */ case 4: /* Level 4, Sprite mapping tables, all sets are the same */
if (b < 4) state->m_i8751_return = 0; if (b < 4) m_i8751_return = 0;
else if (b < 0xc) state->m_i8751_return = 1; else if (b < 0xc) m_i8751_return = 1;
else if (b < 0xf) state->m_i8751_return = 2; else if (b < 0xf) m_i8751_return = 2;
else if (b < 0x19) state->m_i8751_return = 3; else if (b < 0x19) m_i8751_return = 3;
else if (b < 0x1c) state->m_i8751_return = 4; else if (b < 0x1c) m_i8751_return = 4;
else if (b < 0x22) state->m_i8751_return = 5; else if (b < 0x22) m_i8751_return = 5;
else if (b < 0x29) state->m_i8751_return = 6; else if (b < 0x29) m_i8751_return = 6;
else state->m_i8751_return = 7; else m_i8751_return = 7;
break; break;
case 5: /* Level 5, Sprite mapping tables, all sets are the same */ case 5: /* Level 5, Sprite mapping tables, all sets are the same */
if (b < 7) state->m_i8751_return = 0; if (b < 7) m_i8751_return = 0;
else if (b < 0xe) state->m_i8751_return = 1; else if (b < 0xe) m_i8751_return = 1;
else if (b < 0x14) state->m_i8751_return = 2; else if (b < 0x14) m_i8751_return = 2;
else if (b < 0x1a) state->m_i8751_return = 3; else if (b < 0x1a) m_i8751_return = 3;
else if (b < 0x23) state->m_i8751_return = 4; else if (b < 0x23) m_i8751_return = 4;
else if (b < 0x27) state->m_i8751_return = 5; else if (b < 0x27) m_i8751_return = 5;
else state->m_i8751_return = 6; else m_i8751_return = 6;
break; break;
case 6: /* Level 6, Sprite mapping tables, all sets are the same */ case 6: /* Level 6, Sprite mapping tables, all sets are the same */
if (b < 3) state->m_i8751_return = 0; if (b < 3) m_i8751_return = 0;
else if (b < 0xb) state->m_i8751_return = 1; else if (b < 0xb) m_i8751_return = 1;
else if (b < 0x11) state->m_i8751_return = 2; else if (b < 0x11) m_i8751_return = 2;
else if (b < 0x17) state->m_i8751_return = 3; else if (b < 0x17) m_i8751_return = 3;
else if (b < 0x1d) state->m_i8751_return = 4; else if (b < 0x1d) m_i8751_return = 4;
else if (b < 0x24) state->m_i8751_return = 5; else if (b < 0x24) m_i8751_return = 5;
else state->m_i8751_return = 6; else m_i8751_return = 6;
break; break;
case 7: /* Level 7, Sprite mapping tables, all sets are the same */ case 7: /* Level 7, Sprite mapping tables, all sets are the same */
if (b < 5) state->m_i8751_return = 0; if (b < 5) m_i8751_return = 0;
else if (b < 0xb) state->m_i8751_return = 1; else if (b < 0xb) m_i8751_return = 1;
else if (b < 0x11) state->m_i8751_return = 2; else if (b < 0x11) m_i8751_return = 2;
else if (b < 0x1a) state->m_i8751_return = 3; else if (b < 0x1a) m_i8751_return = 3;
else if (b < 0x21) state->m_i8751_return = 4; else if (b < 0x21) m_i8751_return = 4;
else if (b < 0x27) state->m_i8751_return = 5; else if (b < 0x27) m_i8751_return = 5;
else state->m_i8751_return = 6; else m_i8751_return = 6;
break; break;
} }
} }
// logerror("%s - Unknown Write %02x intel\n", machine.describe_context(), data); // logerror("%s - Unknown Write %02x intel\n", machine().describe_context(), data);
state->m_maincpu->set_input_line(6, HOLD_LINE); /* Signal main cpu task is complete */ m_maincpu->set_input_line(6, HOLD_LINE); /* Signal main cpu task is complete */
state->m_i8751_needs_ack = 1; m_i8751_needs_ack = 1;
} }
/************************************* /*************************************
@ -370,16 +364,16 @@ WRITE16_MEMBER(karnov_state::karnov_control_w)
case 6: /* SECREQ (Interrupt & Data to i8751) */ case 6: /* SECREQ (Interrupt & Data to i8751) */
if (m_microcontroller_id == KARNOV || m_microcontroller_id == KARNOVJ) if (m_microcontroller_id == KARNOV || m_microcontroller_id == KARNOVJ)
karnov_i8751_w(machine(), data); karnov_i8751_w(data);
if (m_microcontroller_id == CHELNOV || m_microcontroller_id == CHELNOVU || m_microcontroller_id == CHELNOVJ) if (m_microcontroller_id == CHELNOV || m_microcontroller_id == CHELNOVU || m_microcontroller_id == CHELNOVJ)
chelnov_i8751_w(machine(), data); chelnov_i8751_w(data);
if (m_microcontroller_id == WNDRPLNT) if (m_microcontroller_id == WNDRPLNT)
wndrplnt_i8751_w(machine(), data); wndrplnt_i8751_w(data);
break; break;
case 8: /* HSHIFT (9 bits) - Top bit indicates video flip */ case 8: /* HSHIFT (9 bits) - Top bit indicates video flip */
COMBINE_DATA(&m_scroll[0]); COMBINE_DATA(&m_scroll[0]);
karnov_flipscreen_w(machine(), data >> 15); karnov_flipscreen_w(data >> 15);
break; break;
case 0xa: /* VSHIFT */ case 0xa: /* VSHIFT */

View File

@ -705,11 +705,11 @@ ROM_START( karatevs )
ROM_END ROM_END
static UINT8 *decrypt_code(running_machine &machine) UINT8 *kchamp_state::decrypt_code()
{ {
address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
UINT8 *decrypted = auto_alloc_array(machine, UINT8, 0x10000); UINT8 *decrypted = auto_alloc_array(machine(), UINT8, 0x10000);
UINT8 *rom = machine.root_device().memregion("maincpu")->base(); UINT8 *rom = machine().root_device().memregion("maincpu")->base();
int A; int A;
space.set_decrypted_region(0x0000, 0xffff, decrypted); space.set_decrypted_region(0x0000, 0xffff, decrypted);
@ -724,7 +724,7 @@ static UINT8 *decrypt_code(running_machine &machine)
DRIVER_INIT_MEMBER(kchamp_state,kchampvs) DRIVER_INIT_MEMBER(kchamp_state,kchampvs)
{ {
UINT8 *rom = memregion("maincpu")->base(); UINT8 *rom = memregion("maincpu")->base();
UINT8 *decrypted = decrypt_code(machine()); UINT8 *decrypted = decrypt_code();
int A; int A;
/* /*
@ -754,7 +754,7 @@ DRIVER_INIT_MEMBER(kchamp_state,kchampvs)
DRIVER_INIT_MEMBER(kchamp_state,kchampvs2) DRIVER_INIT_MEMBER(kchamp_state,kchampvs2)
{ {
decrypt_code(machine()); decrypt_code();
m_counter = 0; m_counter = 0;
m_msm_data = 0; m_msm_data = 0;
m_msm_play_lo_nibble = 1; m_msm_play_lo_nibble = 1;

View File

@ -116,7 +116,7 @@ Hollywood Action
//static int kickgoal_melody; //static int kickgoal_melody;
//static int kickgoal_snd_bank; //static int kickgoal_snd_bank;
static void kickgoal_play(okim6295_device *oki, int melody, int data) void ::kickgoal_play(okim6295_device *oki, int melody, int data)
{ {
int status = oki->read(0); int status = oki->read(0);
@ -124,12 +124,12 @@ static void kickgoal_play(okim6295_device *oki, int melody, int data)
if (kickgoal_sound == 0) popmessage("Unknown sound command %02x",kickgoal_sound); if (kickgoal_sound == 0) popmessage("Unknown sound command %02x",kickgoal_sound);
if (melody) { if (melody) {
if (state->m_melody != kickgoal_sound) { if (m_melody != kickgoal_sound) {
state->m_melody = kickgoal_sound; m_melody = kickgoal_sound;
state->m_melody_loop = kickgoal_sound; m_melody_loop = kickgoal_sound;
if (status & 0x08) if (status & 0x08)
oki->write(0,0x40); oki->write(0,0x40);
oki->write(0,(0x80 | state->m_melody)); oki->write(0,(0x80 | m_melody));
oki->write(0,0x81); oki->write(0,0x81);
} }
} }

View File

@ -67,6 +67,10 @@ public:
UINT32 screen_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(kaneko16_interrupt); TIMER_DEVICE_CALLBACK_MEMBER(kaneko16_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(shogwarr_interrupt); TIMER_DEVICE_CALLBACK_MEMBER(shogwarr_interrupt);
void kaneko16_fill_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect);
void kaneko16_common_oki_bank_w( const char *bankname, const char* tag, int bank, size_t fixedsize, size_t bankedsize );
void kaneko16_unscramble_tiles(const char *region);
void kaneko16_expand_sample_banks(const char *region);
}; };
class kaneko16_gtmr_state : public kaneko16_state class kaneko16_gtmr_state : public kaneko16_state
@ -117,6 +121,7 @@ public:
DECLARE_PALETTE_INIT(berlwall); DECLARE_PALETTE_INIT(berlwall);
DECLARE_VIDEO_START(berlwall); DECLARE_VIDEO_START(berlwall);
UINT32 screen_update_berlwall(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_berlwall(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void kaneko16_render_15bpp_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect);
}; };
class kaneko16_shogwarr_state : public kaneko16_state class kaneko16_shogwarr_state : public kaneko16_state

View File

@ -31,4 +31,6 @@ public:
virtual void video_start(); virtual void video_start();
DECLARE_MACHINE_START(kangaroo_mcu); DECLARE_MACHINE_START(kangaroo_mcu);
UINT32 screen_update_kangaroo(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); UINT32 screen_update_kangaroo(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void videoram_write( UINT16 offset, UINT8 data, UINT8 mask );
void blitter_execute( );
}; };

View File

@ -59,6 +59,11 @@ public:
DECLARE_VIDEO_START(wndrplnt); DECLARE_VIDEO_START(wndrplnt);
UINT32 screen_update_karnov(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_karnov(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(karnov_interrupt); INTERRUPT_GEN_MEMBER(karnov_interrupt);
void karnov_flipscreen_w( int data );
void draw_background( bitmap_ind16 &bitmap, const rectangle &cliprect );
void karnov_i8751_w( int data );
void wndrplnt_i8751_w( int data );
void chelnov_i8751_w( int data );
}; };
enum { enum {

View File

@ -52,4 +52,7 @@ public:
UINT32 screen_update_kchamp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_kchamp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(kc_interrupt); INTERRUPT_GEN_MEMBER(kc_interrupt);
INTERRUPT_GEN_MEMBER(sound_int); INTERRUPT_GEN_MEMBER(sound_int);
void kchamp_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
void kchampvs_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
UINT8 *decrypt_code();
}; };

View File

@ -76,4 +76,6 @@ public:
DECLARE_VIDEO_START(actionhw); DECLARE_VIDEO_START(actionhw);
UINT32 screen_update_kickgoal(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_kickgoal(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(kickgoal_interrupt); INTERRUPT_GEN_MEMBER(kickgoal_interrupt);
void kickgoal_draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
void kickgoal_play(okim6295_device *oki, int melody, int data);
}; };

View File

@ -59,4 +59,9 @@ public:
UINT32 screen_update_kingofb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_kingofb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_ringking(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_ringking(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(kingofb_interrupt); INTERRUPT_GEN_MEMBER(kingofb_interrupt);
void palette_init_common( const UINT8 *color_prom, void (kingofb_state::*get_rgb_data)(const UINT8 *, int, int *, int *, int *) );
void kingofb_get_rgb_data( const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data );
void ringking_get_rgb_data( const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data );
void kingofb_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void ringking_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
}; };

View File

@ -47,4 +47,5 @@ public:
virtual void palette_init(); virtual void palette_init();
UINT32 screen_update_kncljoe(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_kncljoe(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(sound_nmi); INTERRUPT_GEN_MEMBER(sound_nmi);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
}; };

View File

@ -40,4 +40,5 @@ public:
virtual void video_start(); virtual void video_start();
virtual void palette_init(); virtual void palette_init();
UINT32 screen_update_ksayakyu(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_ksayakyu(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
}; };

View File

@ -60,4 +60,5 @@ public:
virtual void video_start(); virtual void video_start();
UINT32 screen_update_kyugo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_kyugo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_irq); INTERRUPT_GEN_MEMBER(vblank_irq);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
}; };

View File

@ -24,11 +24,10 @@ VIDEO_START_MEMBER(kaneko16_state,kaneko16)
static void kaneko16_fill_bitmap(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect) void kaneko16_state::kaneko16_fill_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
kaneko16_state *state = machine.driver_data<kaneko16_state>(); if (m_kaneko_spr)
if (state->m_kaneko_spr) if(m_kaneko_spr->get_sprite_type()== 1)
if(state->m_kaneko_spr->get_sprite_type()== 1)
{ {
bitmap.fill(0x7f00, cliprect); bitmap.fill(0x7f00, cliprect);
return; return;
@ -67,7 +66,7 @@ UINT32 kaneko16_state::screen_update_common(screen_device &screen, bitmap_ind16
UINT32 kaneko16_state::screen_update_kaneko16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 kaneko16_state::screen_update_kaneko16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
kaneko16_fill_bitmap(machine(),bitmap,cliprect); kaneko16_fill_bitmap(bitmap,cliprect);
// if the display is disabled, do nothing? // if the display is disabled, do nothing?
if (!m_disp_enable) return 0; if (!m_disp_enable) return 0;
@ -168,13 +167,12 @@ WRITE16_MEMBER(kaneko16_berlwall_state::kaneko16_bg15_reg_w)
} }
static void kaneko16_render_15bpp_bitmap(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect) void kaneko16_berlwall_state::kaneko16_render_15bpp_bitmap(bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
kaneko16_berlwall_state *state = machine.driver_data<kaneko16_berlwall_state>(); if (m_bg15_bitmap.valid())
if (state->m_bg15_bitmap.valid())
{ {
int select = state->m_bg15_select[ 0 ]; int select = m_bg15_select[ 0 ];
// int reg = state->m_bg15_reg[ 0 ]; // int reg = m_bg15_reg[ 0 ];
int flip = select & 0x20; int flip = select & 0x20;
int sx, sy; int sx, sy;
@ -183,7 +181,7 @@ static void kaneko16_render_15bpp_bitmap(running_machine &machine, bitmap_ind16
sx = (select & 0x1f) * 256; sx = (select & 0x1f) * 256;
sy = 0; sy = 0;
copybitmap(bitmap, state->m_bg15_bitmap, flip, flip, -sx, -sy, cliprect); copybitmap(bitmap, m_bg15_bitmap, flip, flip, -sx, -sy, cliprect);
// flag = 0; // flag = 0;
} }
@ -191,7 +189,7 @@ static void kaneko16_render_15bpp_bitmap(running_machine &machine, bitmap_ind16
UINT32 kaneko16_berlwall_state::screen_update_berlwall(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 kaneko16_berlwall_state::screen_update_berlwall(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
// berlwall uses a 15bpp bitmap as a bg, not a solid fill // berlwall uses a 15bpp bitmap as a bg, not a solid fill
kaneko16_render_15bpp_bitmap(machine(),bitmap,cliprect); kaneko16_render_15bpp_bitmap(bitmap,cliprect);
// if the display is disabled, do nothing? // if the display is disabled, do nothing?
if (!m_disp_enable) return 0; if (!m_disp_enable) return 0;

View File

@ -7,9 +7,6 @@
#include "emu.h" #include "emu.h"
#include "includes/kangaroo.h" #include "includes/kangaroo.h"
static void blitter_execute(running_machine &machine);
/************************************* /*************************************
* *
* Video setup * Video setup
@ -31,9 +28,8 @@ void kangaroo_state::video_start()
* *
*************************************/ *************************************/
static void videoram_write( running_machine &machine, UINT16 offset, UINT8 data, UINT8 mask ) void kangaroo_state::videoram_write( UINT16 offset, UINT8 data, UINT8 mask )
{ {
kangaroo_state *state = machine.driver_data<kangaroo_state>();
UINT32 expdata, layermask; UINT32 expdata, layermask;
/* data contains 4 2-bit values packed as DCBADCBA; expand these into 4 8-bit values */ /* data contains 4 2-bit values packed as DCBADCBA; expand these into 4 8-bit values */
@ -55,13 +51,13 @@ static void videoram_write( running_machine &machine, UINT16 offset, UINT8 data,
if (mask & 0x01) layermask |= 0x0c0c0c0c; if (mask & 0x01) layermask |= 0x0c0c0c0c;
/* update layers */ /* update layers */
state->m_videoram[offset] = (state->m_videoram[offset] & ~layermask) | (expdata & layermask); m_videoram[offset] = (m_videoram[offset] & ~layermask) | (expdata & layermask);
} }
WRITE8_MEMBER(kangaroo_state::kangaroo_videoram_w) WRITE8_MEMBER(kangaroo_state::kangaroo_videoram_w)
{ {
videoram_write(machine(), offset, data, m_video_control[8]); videoram_write(offset, data, m_video_control[8]);
} }
@ -79,7 +75,7 @@ WRITE8_MEMBER(kangaroo_state::kangaroo_video_control_w)
switch (offset) switch (offset)
{ {
case 5: /* blitter start */ case 5: /* blitter start */
blitter_execute(machine()); blitter_execute();
break; break;
case 8: /* bank select */ case 8: /* bank select */
@ -96,16 +92,15 @@ WRITE8_MEMBER(kangaroo_state::kangaroo_video_control_w)
* *
*************************************/ *************************************/
static void blitter_execute( running_machine &machine ) void kangaroo_state::blitter_execute( )
{ {
kangaroo_state *state = machine.driver_data<kangaroo_state>(); UINT32 gfxhalfsize = memregion("gfx1")->bytes() / 2;
UINT32 gfxhalfsize = state->memregion("gfx1")->bytes() / 2; const UINT8 *gfxbase = memregion("gfx1")->base();
const UINT8 *gfxbase = state->memregion("gfx1")->base(); UINT16 src = m_video_control[0] + 256 * m_video_control[1];
UINT16 src = state->m_video_control[0] + 256 * state->m_video_control[1]; UINT16 dst = m_video_control[2] + 256 * m_video_control[3];
UINT16 dst = state->m_video_control[2] + 256 * state->m_video_control[3]; UINT8 height = m_video_control[5];
UINT8 height = state->m_video_control[5]; UINT8 width = m_video_control[4];
UINT8 width = state->m_video_control[4]; UINT8 mask = m_video_control[8];
UINT8 mask = state->m_video_control[8];
int x, y; int x, y;
/* during DMA operations, the top 2 bits are ORed together, as well as the bottom 2 bits */ /* during DMA operations, the top 2 bits are ORed together, as well as the bottom 2 bits */
@ -119,8 +114,8 @@ static void blitter_execute( running_machine &machine )
{ {
UINT16 effdst = (dst + x) & 0x3fff; UINT16 effdst = (dst + x) & 0x3fff;
UINT16 effsrc = src++ & (gfxhalfsize - 1); UINT16 effsrc = src++ & (gfxhalfsize - 1);
videoram_write(machine, effdst, gfxbase[0 * gfxhalfsize + effsrc], mask & 0x05); videoram_write(effdst, gfxbase[0 * gfxhalfsize + effsrc], mask & 0x05);
videoram_write(machine, effdst, gfxbase[1 * gfxhalfsize + effsrc], mask & 0x0a); videoram_write(effdst, gfxbase[1 * gfxhalfsize + effsrc], mask & 0x0a);
} }
} }

View File

@ -66,22 +66,20 @@ void karnov_state::palette_init()
} }
} }
void karnov_flipscreen_w( running_machine &machine, int data ) void karnov_state::karnov_flipscreen_w( int data )
{ {
karnov_state *state = machine.driver_data<karnov_state>(); m_flipscreen = data;
state->m_flipscreen = data; machine().tilemap().set_flip_all(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
machine.tilemap().set_flip_all(state->m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); flip_screen_set(m_flipscreen);
state->flip_screen_set(state->m_flipscreen);
} }
static void draw_background( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) void karnov_state::draw_background( bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
karnov_state *state = machine.driver_data<karnov_state>();
int my, mx, offs, color, tile, fx, fy; int my, mx, offs, color, tile, fx, fy;
int scrollx = state->m_scroll[0]; int scrollx = m_scroll[0];
int scrolly = state->m_scroll[1]; int scrolly = m_scroll[1];
if (state->m_flipscreen) if (m_flipscreen)
fx = fy = 1; fx = fy = 1;
else else
fx = fy = 0; fx = fy = 0;
@ -98,18 +96,18 @@ static void draw_background( running_machine &machine, bitmap_ind16 &bitmap, con
my++; my++;
} }
tile = state->m_pf_data[offs]; tile = m_pf_data[offs];
color = tile >> 12; color = tile >> 12;
tile = tile & 0x7ff; tile = tile & 0x7ff;
if (state->m_flipscreen) if (m_flipscreen)
drawgfx_opaque(*state->m_bitmap_f, state->m_bitmap_f->cliprect(), machine.gfx[1],tile, drawgfx_opaque(*m_bitmap_f, m_bitmap_f->cliprect(), machine().gfx[1],tile,
color, fx, fy, 496-16*mx,496-16*my); color, fx, fy, 496-16*mx,496-16*my);
else else
drawgfx_opaque(*state->m_bitmap_f, state->m_bitmap_f->cliprect(), machine.gfx[1],tile, drawgfx_opaque(*m_bitmap_f, m_bitmap_f->cliprect(), machine().gfx[1],tile,
color, fx, fy, 16*mx,16*my); color, fx, fy, 16*mx,16*my);
} }
if (!state->m_flipscreen) if (!m_flipscreen)
{ {
scrolly = -scrolly; scrolly = -scrolly;
scrollx = -scrollx; scrollx = -scrollx;
@ -120,14 +118,14 @@ static void draw_background( running_machine &machine, bitmap_ind16 &bitmap, con
scrollx = scrollx + 256; scrollx = scrollx + 256;
} }
copyscrollbitmap(bitmap, *state->m_bitmap_f, 1, &scrollx, 1, &scrolly, cliprect); copyscrollbitmap(bitmap, *m_bitmap_f, 1, &scrollx, 1, &scrolly, cliprect);
} }
/******************************************************************************/ /******************************************************************************/
UINT32 karnov_state::screen_update_karnov(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 karnov_state::screen_update_karnov(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
draw_background(machine(), bitmap, cliprect); draw_background(bitmap, cliprect);
machine().device<deco_karnovsprites_device>("spritegen")->draw_sprites(machine(), bitmap, cliprect, m_spriteram->buffer(), 0x800, 0); machine().device<deco_karnovsprites_device>("spritegen")->draw_sprites(machine(), bitmap, cliprect, m_spriteram->buffer(), 0x800, 0);
m_fix_tilemap->draw(bitmap, cliprect, 0, 0); m_fix_tilemap->draw(bitmap, cliprect, 0, 0);
return 0; return 0;

View File

@ -65,10 +65,9 @@ void kchamp_state::video_start()
3 XXXXXXXX 3 XXXXXXXX
*/ */
static void kchamp_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) void kchamp_state::kchamp_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
kchamp_state *state = machine.driver_data<kchamp_state>(); UINT8 *spriteram = m_spriteram;
UINT8 *spriteram = state->m_spriteram;
int offs; int offs;
for (offs = 0; offs < 0x100; offs += 4) for (offs = 0; offs < 0x100; offs += 4)
@ -82,7 +81,7 @@ static void kchamp_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap,
int sx = spriteram[offs + 3] - 8; int sx = spriteram[offs + 3] - 8;
int sy = 247 - spriteram[offs]; int sy = 247 - spriteram[offs];
if (state->flip_screen()) if (flip_screen())
{ {
sx = 240 - sx; sx = 240 - sx;
sy = 240 - sy; sy = 240 - sy;
@ -90,14 +89,13 @@ static void kchamp_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap,
flipy = !flipy; flipy = !flipy;
} }
drawgfx_transpen(bitmap, cliprect, machine.gfx[bank], code, color, flipx, flipy, sx, sy, 0); drawgfx_transpen(bitmap, cliprect, machine().gfx[bank], code, color, flipx, flipy, sx, sy, 0);
} }
} }
static void kchampvs_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) void kchamp_state::kchampvs_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
kchamp_state *state = machine.driver_data<kchamp_state>(); UINT8 *spriteram = m_spriteram;
UINT8 *spriteram = state->m_spriteram;
int offs; int offs;
for (offs = 0; offs < 0x100; offs += 4) for (offs = 0; offs < 0x100; offs += 4)
@ -111,7 +109,7 @@ static void kchampvs_draw_sprites( running_machine &machine, bitmap_ind16 &bitma
int sx = spriteram[offs + 3]; int sx = spriteram[offs + 3];
int sy = 240 - spriteram[offs]; int sy = 240 - spriteram[offs];
if (state->flip_screen()) if (flip_screen())
{ {
sx = 240 - sx; sx = 240 - sx;
sy = 240 - sy; sy = 240 - sy;
@ -119,7 +117,7 @@ static void kchampvs_draw_sprites( running_machine &machine, bitmap_ind16 &bitma
flipy = !flipy; flipy = !flipy;
} }
drawgfx_transpen(bitmap, cliprect, machine.gfx[bank], code, color, flipx, flipy, sx, sy, 0); drawgfx_transpen(bitmap, cliprect, machine().gfx[bank], code, color, flipx, flipy, sx, sy, 0);
} }
} }
@ -127,13 +125,13 @@ static void kchampvs_draw_sprites( running_machine &machine, bitmap_ind16 &bitma
UINT32 kchamp_state::screen_update_kchamp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 kchamp_state::screen_update_kchamp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
m_bg_tilemap->draw(bitmap, cliprect, 0, 0); m_bg_tilemap->draw(bitmap, cliprect, 0, 0);
kchamp_draw_sprites(machine(), bitmap, cliprect); kchamp_draw_sprites(bitmap, cliprect);
return 0; return 0;
} }
UINT32 kchamp_state::screen_update_kchampvs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 kchamp_state::screen_update_kchampvs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
m_bg_tilemap->draw(bitmap, cliprect, 0, 0); m_bg_tilemap->draw(bitmap, cliprect, 0, 0);
kchampvs_draw_sprites(machine(), bitmap, cliprect); kchampvs_draw_sprites(bitmap, cliprect);
return 0; return 0;
} }

View File

@ -88,14 +88,13 @@ TILEMAP_MAPPER_MEMBER(kickgoal_state::tilemap_scan_actionhwbg2)// 32x32 tiles
static void kickgoal_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect) void kickgoal_state::kickgoal_draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect)
{ {
kickgoal_state *state = machine.driver_data<kickgoal_state>(); UINT16 *spriteram = m_spriteram;
UINT16 *spriteram = state->m_spriteram; gfx_element *gfx = machine().gfx[1];
gfx_element *gfx = machine.gfx[1];
int offs; int offs;
for (offs = 0; offs < state->m_spriteram.bytes() / 2; offs += 4) for (offs = 0; offs < m_spriteram.bytes() / 2; offs += 4)
{ {
int xpos = spriteram[offs + 3]; int xpos = spriteram[offs + 3];
int ypos = spriteram[offs + 0] & 0x00ff; int ypos = spriteram[offs + 0] & 0x00ff;
@ -108,7 +107,7 @@ static void kickgoal_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap
ypos = 0x110 - ypos; ypos = 0x110 - ypos;
drawgfx_transpen(bitmap,cliprect,gfx, drawgfx_transpen(bitmap,cliprect,gfx,
tileno+state->m_sprbase, tileno+m_sprbase,
0x30 + color, 0x30 + color,
flipx,0, flipx,0,
xpos-16+4,ypos-32,15); xpos-16+4,ypos-32,15);
@ -172,7 +171,7 @@ UINT32 kickgoal_state::screen_update_kickgoal(screen_device &screen, bitmap_ind1
m_bg2tm->draw(bitmap, cliprect, 0, 0); m_bg2tm->draw(bitmap, cliprect, 0, 0);
m_bgtm->draw(bitmap, cliprect, 0, 0); m_bgtm->draw(bitmap, cliprect, 0, 0);
kickgoal_draw_sprites(machine(), bitmap, cliprect); kickgoal_draw_sprites(bitmap, cliprect);
m_fgtm->draw(bitmap, cliprect, 0, 0); m_fgtm->draw(bitmap, cliprect, 0, 0);

View File

@ -23,7 +23,7 @@
***************************************************************************/ ***************************************************************************/
static void palette_init_common( running_machine &machine, const UINT8 *color_prom, void (*get_rgb_data)(const UINT8 *, int, int *, int *, int *) ) void kingofb_state::palette_init_common( const UINT8 *color_prom, void (kingofb_state::*get_rgb_data)(const UINT8 *, int, int *, int *, int *) )
{ {
static const int resistances[4] = { 1500, 750, 360, 180 }; static const int resistances[4] = { 1500, 750, 360, 180 };
static const int resistances_fg[1] = { 51 }; static const int resistances_fg[1] = { 51 };
@ -43,7 +43,7 @@ static void palette_init_common( running_machine &machine, const UINT8 *color_pr
4, resistances, bweights, 470, 0); 4, resistances, bweights, 470, 0);
/* allocate the colortable */ /* allocate the colortable */
machine.colortable = colortable_alloc(machine, 0x108); machine().colortable = colortable_alloc(machine(), 0x108);
for (i = 0; i < 0x100; i++) for (i = 0; i < 0x100; i++)
{ {
@ -51,7 +51,7 @@ static void palette_init_common( running_machine &machine, const UINT8 *color_pr
int bit0, bit1, bit2, bit3; int bit0, bit1, bit2, bit3;
int r, g, b; int r, g, b;
get_rgb_data(color_prom, i, &r_data, &g_data, &b_data); (this->*get_rgb_data)(color_prom, i, &r_data, &g_data, &b_data);
/* red component */ /* red component */
bit0 = (r_data >> 0) & 0x01; bit0 = (r_data >> 0) & 0x01;
@ -74,7 +74,7 @@ static void palette_init_common( running_machine &machine, const UINT8 *color_pr
bit3 = (b_data >> 3) & 0x01; bit3 = (b_data >> 3) & 0x01;
b = combine_4_weights(bweights, bit0, bit1, bit2, bit3); b = combine_4_weights(bweights, bit0, bit1, bit2, bit3);
colortable_palette_set_color(machine.colortable, i, MAKE_RGB(r, g, b)); colortable_palette_set_color(machine().colortable, i, MAKE_RGB(r, g, b));
} }
/* the foreground chars directly map to primary colors */ /* the foreground chars directly map to primary colors */
@ -91,21 +91,21 @@ static void palette_init_common( running_machine &machine, const UINT8 *color_pr
/* blue component */ /* blue component */
b = (((i - 0x100) >> 0) & 0x01) * bweights_fg[0]; b = (((i - 0x100) >> 0) & 0x01) * bweights_fg[0];
colortable_palette_set_color(machine.colortable, i, MAKE_RGB(r, g, b)); colortable_palette_set_color(machine().colortable, i, MAKE_RGB(r, g, b));
} }
for (i = 0; i < 0x100; i++) for (i = 0; i < 0x100; i++)
colortable_entry_set_value(machine.colortable, i, i); colortable_entry_set_value(machine().colortable, i, i);
for (i = 0x101; i < 0x110; i += 2) for (i = 0x101; i < 0x110; i += 2)
{ {
UINT16 ctabentry = ((i - 0x101) >> 1) | 0x100; UINT16 ctabentry = ((i - 0x101) >> 1) | 0x100;
colortable_entry_set_value(machine.colortable, i, ctabentry); colortable_entry_set_value(machine().colortable, i, ctabentry);
} }
} }
static void kingofb_get_rgb_data( const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data ) void kingofb_state::kingofb_get_rgb_data( const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data )
{ {
*r_data = color_prom[i + 0x000] & 0x0f; *r_data = color_prom[i + 0x000] & 0x0f;
*g_data = color_prom[i + 0x100] & 0x0f; *g_data = color_prom[i + 0x100] & 0x0f;
@ -113,7 +113,7 @@ static void kingofb_get_rgb_data( const UINT8 *color_prom, int i, int *r_data, i
} }
static void ringking_get_rgb_data( const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data ) void kingofb_state::ringking_get_rgb_data( const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data )
{ {
*r_data = (color_prom[i + 0x000] >> 4) & 0x0f; *r_data = (color_prom[i + 0x000] >> 4) & 0x0f;
*g_data = (color_prom[i + 0x000] >> 0) & 0x0f; *g_data = (color_prom[i + 0x000] >> 0) & 0x0f;
@ -124,13 +124,13 @@ static void ringking_get_rgb_data( const UINT8 *color_prom, int i, int *r_data,
PALETTE_INIT_MEMBER(kingofb_state,kingofb) PALETTE_INIT_MEMBER(kingofb_state,kingofb)
{ {
const UINT8 *color_prom = machine().root_device().memregion("proms")->base(); const UINT8 *color_prom = machine().root_device().memregion("proms")->base();
palette_init_common(machine(), color_prom, kingofb_get_rgb_data); palette_init_common(color_prom, &kingofb_state::kingofb_get_rgb_data);
} }
PALETTE_INIT_MEMBER(kingofb_state,ringking) PALETTE_INIT_MEMBER(kingofb_state,ringking)
{ {
const UINT8 *color_prom = machine().root_device().memregion("proms")->base(); const UINT8 *color_prom = machine().root_device().memregion("proms")->base();
palette_init_common(machine(), color_prom, ringking_get_rgb_data); palette_init_common(color_prom, &kingofb_state::ringking_get_rgb_data);
} }
WRITE8_MEMBER(kingofb_state::kingofb_videoram_w) WRITE8_MEMBER(kingofb_state::kingofb_videoram_w)
@ -202,13 +202,12 @@ VIDEO_START_MEMBER(kingofb_state,kingofb)
m_fg_tilemap->set_transparent_pen(0); m_fg_tilemap->set_transparent_pen(0);
} }
static void kingofb_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect) void kingofb_state::kingofb_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
kingofb_state *state = machine.driver_data<kingofb_state>(); UINT8 *spriteram = m_spriteram;
UINT8 *spriteram = state->m_spriteram;
int offs; int offs;
for (offs = 0; offs < state->m_spriteram.bytes(); offs += 4) for (offs = 0; offs < m_spriteram.bytes(); offs += 4)
{ {
int roffs, bank, code, color, flipx, flipy, sx, sy; int roffs, bank, code, color, flipx, flipy, sx, sy;
@ -219,13 +218,13 @@ static void kingofb_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap,
bank = (spriteram[roffs + 3] & 0x04) >> 2; bank = (spriteram[roffs + 3] & 0x04) >> 2;
code = spriteram[roffs + 2] + ((spriteram[roffs + 3] & 0x03) << 8); code = spriteram[roffs + 2] + ((spriteram[roffs + 3] & 0x03) << 8);
color = ((spriteram[roffs + 3] & 0x70) >> 4) + 8 * state->m_palette_bank; color = ((spriteram[roffs + 3] & 0x70) >> 4) + 8 * m_palette_bank;
flipx = 0; flipx = 0;
flipy = spriteram[roffs + 3] & 0x80; flipy = spriteram[roffs + 3] & 0x80;
sx = spriteram[roffs + 1]; sx = spriteram[roffs + 1];
sy = spriteram[roffs]; sy = spriteram[roffs];
if (state->flip_screen()) if (flip_screen())
{ {
sx = 240 - sx; sx = 240 - sx;
sy = 240 - sy; sy = 240 - sy;
@ -233,7 +232,7 @@ static void kingofb_draw_sprites(running_machine &machine, bitmap_ind16 &bitmap,
flipy = !flipy; flipy = !flipy;
} }
drawgfx_transpen(bitmap, cliprect, machine.gfx[2 + bank], drawgfx_transpen(bitmap, cliprect, machine().gfx[2 + bank],
code, color, code, color,
flipx, flipy, flipx, flipy,
sx, sy, 0); sx, sy, 0);
@ -244,7 +243,7 @@ UINT32 kingofb_state::screen_update_kingofb(screen_device &screen, bitmap_ind16
{ {
m_bg_tilemap->set_scrolly(0, -(*m_scroll_y)); m_bg_tilemap->set_scrolly(0, -(*m_scroll_y));
m_bg_tilemap->draw(bitmap, cliprect, 0, 0); m_bg_tilemap->draw(bitmap, cliprect, 0, 0);
kingofb_draw_sprites(machine(), bitmap, cliprect); kingofb_draw_sprites(bitmap, cliprect);
m_fg_tilemap->draw(bitmap, cliprect, 0, 0); m_fg_tilemap->draw(bitmap, cliprect, 0, 0);
return 0; return 0;
} }
@ -267,23 +266,22 @@ VIDEO_START_MEMBER(kingofb_state,ringking)
m_fg_tilemap->set_transparent_pen(0); m_fg_tilemap->set_transparent_pen(0);
} }
static void ringking_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) void kingofb_state::ringking_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
kingofb_state *state = machine.driver_data<kingofb_state>(); UINT8 *spriteram = m_spriteram;
UINT8 *spriteram = state->m_spriteram;
int offs; int offs;
for (offs = 0; offs < state->m_spriteram.bytes(); offs += 4) for (offs = 0; offs < m_spriteram.bytes(); offs += 4)
{ {
int bank = (spriteram[offs + 1] & 0x04) >> 2; int bank = (spriteram[offs + 1] & 0x04) >> 2;
int code = spriteram[offs + 3] + ((spriteram[offs + 1] & 0x03) << 8); int code = spriteram[offs + 3] + ((spriteram[offs + 1] & 0x03) << 8);
int color = ((spriteram[offs + 1] & 0x70) >> 4) + 8 * state->m_palette_bank; int color = ((spriteram[offs + 1] & 0x70) >> 4) + 8 * m_palette_bank;
int flipx = 0; int flipx = 0;
int flipy = (spriteram[offs + 1] & 0x80) ? 0 : 1; int flipy = (spriteram[offs + 1] & 0x80) ? 0 : 1;
int sx = spriteram[offs + 2]; int sx = spriteram[offs + 2];
int sy = spriteram[offs]; int sy = spriteram[offs];
if (state->flip_screen()) if (flip_screen())
{ {
sx = 240 - sx; sx = 240 - sx;
sy = 240 - sy; sy = 240 - sy;
@ -291,7 +289,7 @@ static void ringking_draw_sprites( running_machine &machine, bitmap_ind16 &bitma
flipy = !flipy; flipy = !flipy;
} }
drawgfx_transpen(bitmap, cliprect, machine.gfx[2 + bank], drawgfx_transpen(bitmap, cliprect, machine().gfx[2 + bank],
code, color, code, color,
flipx, flipy, flipx, flipy,
sx, sy, 0); sx, sy, 0);
@ -302,7 +300,7 @@ UINT32 kingofb_state::screen_update_ringking(screen_device &screen, bitmap_ind16
{ {
m_bg_tilemap->set_scrolly(0, -(*m_scroll_y)); m_bg_tilemap->set_scrolly(0, -(*m_scroll_y));
m_bg_tilemap->draw(bitmap, cliprect, 0, 0); m_bg_tilemap->draw(bitmap, cliprect, 0, 0);
ringking_draw_sprites(machine(), bitmap, cliprect); ringking_draw_sprites(bitmap, cliprect);
m_fg_tilemap->draw(bitmap, cliprect, 0, 0); m_fg_tilemap->draw(bitmap, cliprect, 0, 0);
return 0; return 0;
} }

View File

@ -176,18 +176,17 @@ WRITE8_MEMBER(kncljoe_state::kncljoe_scroll_w)
***************************************************************************/ ***************************************************************************/
static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) void kncljoe_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
kncljoe_state *state = machine.driver_data<kncljoe_state>(); UINT8 *spriteram = m_spriteram;
UINT8 *spriteram = state->m_spriteram;
rectangle clip = cliprect; rectangle clip = cliprect;
gfx_element *gfx = machine.gfx[1 + state->m_sprite_bank]; gfx_element *gfx = machine().gfx[1 + m_sprite_bank];
int i, j; int i, j;
static const int pribase[4]={0x0180, 0x0080, 0x0100, 0x0000}; static const int pribase[4]={0x0180, 0x0080, 0x0100, 0x0000};
const rectangle &visarea = machine.primary_screen->visible_area(); const rectangle &visarea = machine().primary_screen->visible_area();
/* score covers sprites */ /* score covers sprites */
if (state->m_flipscreen) if (m_flipscreen)
{ {
if (clip.max_y > visarea.max_y - 64) if (clip.max_y > visarea.max_y - 64)
clip.max_y = visarea.max_y - 64; clip.max_y = visarea.max_y - 64;
@ -215,7 +214,7 @@ static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const
if (attr & 0x20) if (attr & 0x20)
code += 256; code += 256;
if (state->m_flipscreen) if (m_flipscreen)
{ {
flipx = !flipx; flipx = !flipx;
flipy = !flipy; flipy = !flipy;
@ -237,6 +236,6 @@ static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const
UINT32 kncljoe_state::screen_update_kncljoe(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 kncljoe_state::screen_update_kncljoe(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
m_bg_tilemap->draw(bitmap, cliprect, 0, 0); m_bg_tilemap->draw(bitmap, cliprect, 0, 0);
draw_sprites(machine(), bitmap, cliprect); draw_sprites(bitmap, cliprect);
return 0; return 0;
} }

View File

@ -78,11 +78,10 @@ TILE_GET_INFO_MEMBER(ksayakyu_state::get_text_tile_info)
[3] [3]
*/ */
static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) void ksayakyu_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
ksayakyu_state *state = machine.driver_data<ksayakyu_state>(); const UINT8 *source = m_spriteram + m_spriteram.bytes() - 4;
const UINT8 *source = state->m_spriteram + state->m_spriteram.bytes() - 4; const UINT8 *finish = m_spriteram;
const UINT8 *finish = state->m_spriteram;
while (source>=finish) /* is order correct ? */ while (source>=finish) /* is order correct ? */
{ {
@ -93,9 +92,9 @@ static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const
int flipx = (tile & 0x80) ? 1 : 0; int flipx = (tile & 0x80) ? 1 : 0;
int flipy = 0; int flipy = 0;
gfx_element *gfx = machine.gfx[2]; gfx_element *gfx = machine().gfx[2];
if (state->m_flipscreen) if (m_flipscreen)
{ {
sx = 240 - sx; sx = 240 - sx;
sy = 240 - sy; sy = 240 - sy;
@ -128,6 +127,6 @@ UINT32 ksayakyu_state::screen_update_ksayakyu(screen_device &screen, bitmap_ind1
m_tilemap->draw(bitmap, cliprect, 0, 0); m_tilemap->draw(bitmap, cliprect, 0, 0);
m_textmap->draw(bitmap, cliprect, 0, 0); m_textmap->draw(bitmap, cliprect, 0, 0);
draw_sprites(machine(), bitmap, cliprect); draw_sprites(bitmap, cliprect);
return 0; return 0;
} }

View File

@ -142,15 +142,13 @@ WRITE8_MEMBER(kyugo_state::kyugo_flipscreen_w)
* *
*************************************/ *************************************/
static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) void kyugo_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
kyugo_state *state = machine.driver_data<kyugo_state>();
/* sprite information is scattered through memory */ /* sprite information is scattered through memory */
/* and uses a portion of the text layer memory (outside the visible area) */ /* and uses a portion of the text layer memory (outside the visible area) */
UINT8 *spriteram_area1 = &state->m_spriteram_1[0x28]; UINT8 *spriteram_area1 = &m_spriteram_1[0x28];
UINT8 *spriteram_area2 = &state->m_spriteram_2[0x28]; UINT8 *spriteram_area2 = &m_spriteram_2[0x28];
UINT8 *spriteram_area3 = &state->m_fgvideoram[0x28]; UINT8 *spriteram_area3 = &m_fgvideoram[0x28];
int n; int n;
@ -168,7 +166,7 @@ static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const
if (sy > 0xf0) if (sy > 0xf0)
sy -= 256; sy -= 256;
if (state->m_flipscreen) if (m_flipscreen)
sy = 240 - sy; sy = 240 - sy;
color = spriteram_area1[offs + 1] & 0x1f; color = spriteram_area1[offs + 1] & 0x1f;
@ -185,18 +183,18 @@ static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const
flipx = attr & 0x08; flipx = attr & 0x08;
flipy = attr & 0x04; flipy = attr & 0x04;
if (state->m_flipscreen) if (m_flipscreen)
{ {
flipx = !flipx; flipx = !flipx;
flipy = !flipy; flipy = !flipy;
} }
drawgfx_transpen( bitmap, cliprect,machine.gfx[2], drawgfx_transpen( bitmap, cliprect,machine().gfx[2],
code, code,
color, color,
flipx,flipy, flipx,flipy,
sx,state->m_flipscreen ? sy - 16*y : sy + 16*y, 0 ); sx,m_flipscreen ? sy - 16*y : sy + 16*y, 0 );
} }
} }
} }
@ -212,7 +210,7 @@ UINT32 kyugo_state::screen_update_kyugo(screen_device &screen, bitmap_ind16 &bit
m_bg_tilemap->set_scrolly(0, m_scroll_y); m_bg_tilemap->set_scrolly(0, m_scroll_y);
m_bg_tilemap->draw(bitmap, cliprect, 0, 0); m_bg_tilemap->draw(bitmap, cliprect, 0, 0);
draw_sprites(machine(), bitmap, cliprect); draw_sprites(bitmap, cliprect);
m_fg_tilemap->draw(bitmap, cliprect, 0, 0); m_fg_tilemap->draw(bitmap, cliprect, 0, 0);
return 0; return 0;
} }