k055555 reworking

This commit is contained in:
David Haywood 2013-07-13 00:10:52 +00:00
parent b03966ce17
commit a1e479d5bd
17 changed files with 185 additions and 190 deletions

View File

@ -151,7 +151,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, bishi_state )
AM_RANGE(0x830000, 0x83003f) AM_DEVWRITE("k056832", k056832_device, word_w) AM_RANGE(0x830000, 0x83003f) AM_DEVWRITE("k056832", k056832_device, word_w)
AM_RANGE(0x840000, 0x840007) AM_DEVWRITE("k056832", k056832_device, b_word_w) // VSCCS AM_RANGE(0x840000, 0x840007) AM_DEVWRITE("k056832", k056832_device, b_word_w) // VSCCS
AM_RANGE(0x850000, 0x85001f) AM_DEVWRITE("k054338", k054338_device, word_w) // CLTC AM_RANGE(0x850000, 0x85001f) AM_DEVWRITE("k054338", k054338_device, word_w) // CLTC
AM_RANGE(0x870000, 0x8700ff) AM_DEVWRITE_LEGACY("k055555", k055555_word_w) // PCU2 AM_RANGE(0x870000, 0x8700ff) AM_DEVWRITE("k055555", k055555_device, k055555_word_w) // PCU2
AM_RANGE(0x880000, 0x880003) AM_DEVREADWRITE8("ymz", ymz280b_device, read, write, 0xff00) AM_RANGE(0x880000, 0x880003) AM_DEVREADWRITE8("ymz", ymz280b_device, read, write, 0xff00)
AM_RANGE(0xa00000, 0xa01fff) AM_DEVREADWRITE("k056832", k056832_device, ram_word_r, ram_word_w) // Graphic planes AM_RANGE(0xa00000, 0xa01fff) AM_DEVREADWRITE("k056832", k056832_device, ram_word_r, ram_word_w) // Graphic planes
AM_RANGE(0xb00000, 0xb03fff) AM_RAM_WRITE(paletteram_xbgr_word_be_w) AM_SHARE("paletteram") AM_RANGE(0xb00000, 0xb03fff) AM_RAM_WRITE(paletteram_xbgr_word_be_w) AM_SHARE("paletteram")

View File

@ -399,7 +399,7 @@ static ADDRESS_MAP_START( memory_map, AS_PROGRAM, 32, djmain_state )
AM_RANGE(0x500000, 0x57ffff) AM_READWRITE(sndram_r, sndram_w) // SOUND RAM AM_RANGE(0x500000, 0x57ffff) AM_READWRITE(sndram_r, sndram_w) // SOUND RAM
AM_RANGE(0x580000, 0x58003f) AM_DEVREADWRITE("k056832", k056832_device, long_r, long_w) // VIDEO REG (tilemap) AM_RANGE(0x580000, 0x58003f) AM_DEVREADWRITE("k056832", k056832_device, long_r, long_w) // VIDEO REG (tilemap)
AM_RANGE(0x590000, 0x590007) AM_WRITE(unknown590000_w) // ?? AM_RANGE(0x590000, 0x590007) AM_WRITE(unknown590000_w) // ??
AM_RANGE(0x5a0000, 0x5a005f) AM_DEVWRITE_LEGACY("k055555", k055555_long_w) // 055555: priority encoder AM_RANGE(0x5a0000, 0x5a005f) AM_DEVWRITE("k055555", k055555_device, k055555_long_w) // 055555: priority encoder
AM_RANGE(0x5b0000, 0x5b04ff) AM_DEVREADWRITE8("k054539_1", k054539_device, read, write, 0xff00ff00) AM_RANGE(0x5b0000, 0x5b04ff) AM_DEVREADWRITE8("k054539_1", k054539_device, read, write, 0xff00ff00)
AM_RANGE(0x5b0000, 0x5b04ff) AM_DEVREADWRITE8("k054539_2", k054539_device, read, write, 0x00ff00ff) AM_RANGE(0x5b0000, 0x5b04ff) AM_DEVREADWRITE8("k054539_2", k054539_device, read, write, 0x00ff00ff)
AM_RANGE(0x5c0000, 0x5c0003) AM_READ8(inp1_r, 0xffffffff) // DSW3,BTN3,BTN2,BTN1 // input port control (buttons and DIP switches) AM_RANGE(0x5c0000, 0x5c0003) AM_READ8(inp1_r, 0xffffffff) // DSW3,BTN3,BTN2,BTN1 // input port control (buttons and DIP switches)

View File

@ -318,17 +318,20 @@ static void generate_sprites(address_space &space, UINT32 src, UINT32 spr, int c
static void tkmmpzdm_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) static void tkmmpzdm_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
{ {
konamigx_esc_alert(space.machine().driver_data<konamigx_state>()->m_workram, 0x0142, 0x100, 0); konamigx_state* state = space.machine().driver_data<konamigx_state>();
state->konamigx_esc_alert(space.machine().driver_data<konamigx_state>()->m_workram, 0x0142, 0x100, 0);
} }
static void dragoonj_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) static void dragoonj_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
{ {
konamigx_esc_alert(space.machine().driver_data<konamigx_state>()->m_workram, 0x5c00, 0x100, 0); konamigx_state* state = space.machine().driver_data<konamigx_state>();
state->konamigx_esc_alert(space.machine().driver_data<konamigx_state>()->m_workram, 0x5c00, 0x100, 0);
} }
static void sal2_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) static void sal2_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
{ {
konamigx_esc_alert(space.machine().driver_data<konamigx_state>()->m_workram, 0x1c8c, 0x172, 1); konamigx_state* state = space.machine().driver_data<konamigx_state>();
state->konamigx_esc_alert(space.machine().driver_data<konamigx_state>()->m_workram, 0x1c8c, 0x172, 1);
} }
static void sexyparo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) static void sexyparo_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4)
@ -1158,7 +1161,7 @@ static ADDRESS_MAP_START( gx_base_memmap, AS_PROGRAM, 32, konamigx_state )
AM_RANGE(0xd4a010, 0xd4a01f) AM_WRITE_LEGACY(K053247_reg_long_w) AM_RANGE(0xd4a010, 0xd4a01f) AM_WRITE_LEGACY(K053247_reg_long_w)
AM_RANGE(0xd4c000, 0xd4c01f) AM_READWRITE(ccu_r, ccu_w) AM_RANGE(0xd4c000, 0xd4c01f) AM_READWRITE(ccu_r, ccu_w)
AM_RANGE(0xd4e000, 0xd4e01f) AM_WRITENOP AM_RANGE(0xd4e000, 0xd4e01f) AM_WRITENOP
AM_RANGE(0xd50000, 0xd500ff) AM_WRITE_LEGACY(K055555_long_w) AM_RANGE(0xd50000, 0xd500ff) AM_DEVWRITE("k055555", k055555_device, K055555_long_w)
AM_RANGE(0xd52000, 0xd5200f) AM_WRITE(sound020_w) AM_RANGE(0xd52000, 0xd5200f) AM_WRITE(sound020_w)
AM_RANGE(0xd52010, 0xd5201f) AM_READ(sound020_r) AM_RANGE(0xd52010, 0xd5201f) AM_READ(sound020_r)
AM_RANGE(0xd56000, 0xd56003) AM_WRITE(eeprom_w) AM_RANGE(0xd56000, 0xd56003) AM_WRITE(eeprom_w)
@ -1792,6 +1795,7 @@ static MACHINE_CONFIG_START( konamigx, konamigx_state )
MCFG_PALETTE_LENGTH(8192) MCFG_PALETTE_LENGTH(8192)
MCFG_K056832_ADD_NOINTF("k056832"/*, konamigx_k056832_intf*/) MCFG_K056832_ADD_NOINTF("k056832"/*, konamigx_k056832_intf*/)
MCFG_K055555_ADD("k055555")
MCFG_VIDEO_START_OVERRIDE(konamigx_state,konamigx_5bpp) MCFG_VIDEO_START_OVERRIDE(konamigx_state,konamigx_5bpp)

View File

@ -247,7 +247,7 @@ static ADDRESS_MAP_START( mystwarr_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x000000, 0x1fffff) AM_ROM // main program AM_RANGE(0x000000, 0x1fffff) AM_ROM // main program
AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("gx_workram") AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_SHARE("gx_workram")
AM_RANGE(0x400000, 0x40ffff) AM_READWRITE(K053247_scattered_word_r,K053247_scattered_word_w) AM_SHARE("spriteram") AM_RANGE(0x400000, 0x40ffff) AM_READWRITE(K053247_scattered_word_r,K053247_scattered_word_w) AM_SHARE("spriteram")
AM_RANGE(0x480000, 0x4800ff) AM_WRITE_LEGACY(K055555_word_w) AM_RANGE(0x480000, 0x4800ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w)
AM_RANGE(0x482000, 0x48200f) AM_READ_LEGACY(K055673_rom_word_r) AM_RANGE(0x482000, 0x48200f) AM_READ_LEGACY(K055673_rom_word_r)
AM_RANGE(0x482010, 0x48201f) AM_WRITE_LEGACY(K053247_reg_word_w) AM_RANGE(0x482010, 0x48201f) AM_WRITE_LEGACY(K053247_reg_word_w)
AM_RANGE(0x484000, 0x484007) AM_WRITE_LEGACY(K053246_word_w) AM_RANGE(0x484000, 0x484007) AM_WRITE_LEGACY(K053246_word_w)
@ -291,7 +291,7 @@ static ADDRESS_MAP_START( metamrph_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x24c000, 0x24ffff) AM_DEVREADWRITE("k053250_1", k053250_device, ram_r, ram_w) AM_RANGE(0x24c000, 0x24ffff) AM_DEVREADWRITE("k053250_1", k053250_device, ram_r, ram_w)
AM_RANGE(0x250000, 0x25000f) AM_DEVREADWRITE("k053250_1", k053250_device, reg_r, reg_w) AM_RANGE(0x250000, 0x25000f) AM_DEVREADWRITE("k053250_1", k053250_device, reg_r, reg_w)
AM_RANGE(0x254000, 0x25401f) AM_WRITE_LEGACY(K054338_word_w) AM_RANGE(0x254000, 0x25401f) AM_WRITE_LEGACY(K054338_word_w)
AM_RANGE(0x258000, 0x2580ff) AM_WRITE_LEGACY(K055555_word_w) AM_RANGE(0x258000, 0x2580ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w)
AM_RANGE(0x260000, 0x26001f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff) AM_RANGE(0x260000, 0x26001f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff)
AM_RANGE(0x264000, 0x264001) AM_WRITE(sound_irq_w) AM_RANGE(0x264000, 0x264001) AM_WRITE(sound_irq_w)
AM_RANGE(0x26800c, 0x26800d) AM_WRITE(sound_cmd1_w) AM_RANGE(0x26800c, 0x26800d) AM_WRITE(sound_cmd1_w)
@ -333,7 +333,7 @@ static ADDRESS_MAP_START( viostorm_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x24c000, 0x24ffff) AM_RAM // K053250 ram AM_RANGE(0x24c000, 0x24ffff) AM_RAM // K053250 ram
AM_RANGE(0x250000, 0x25000f) AM_RAM // K053250 reg AM_RANGE(0x250000, 0x25000f) AM_RAM // K053250 reg
AM_RANGE(0x254000, 0x25401f) AM_WRITE_LEGACY(K054338_word_w) AM_RANGE(0x254000, 0x25401f) AM_WRITE_LEGACY(K054338_word_w)
AM_RANGE(0x258000, 0x2580ff) AM_WRITE_LEGACY(K055555_word_w) AM_RANGE(0x258000, 0x2580ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w)
AM_RANGE(0x25c000, 0x25c03f) AM_READWRITE(K055550_word_r,K055550_word_w) AM_RANGE(0x25c000, 0x25c03f) AM_READWRITE(K055550_word_r,K055550_word_w)
AM_RANGE(0x260000, 0x26001f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff) AM_RANGE(0x260000, 0x26001f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff)
AM_RANGE(0x264000, 0x264001) AM_WRITE(sound_irq_w) AM_RANGE(0x264000, 0x264001) AM_WRITE(sound_irq_w)
@ -419,7 +419,7 @@ static ADDRESS_MAP_START( martchmp_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM // main program AM_RANGE(0x000000, 0x0fffff) AM_ROM // main program
AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_SHARE("gx_workram") // work RAM AM_RANGE(0x100000, 0x10ffff) AM_RAM AM_SHARE("gx_workram") // work RAM
AM_RANGE(0x300000, 0x3fffff) AM_ROM // data ROM AM_RANGE(0x300000, 0x3fffff) AM_ROM // data ROM
AM_RANGE(0x400000, 0x4000ff) AM_WRITE_LEGACY(K055555_word_w) // PCU2 AM_RANGE(0x400000, 0x4000ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w) // PCU2
AM_RANGE(0x402000, 0x40200f) AM_READ_LEGACY(K055673_rom_word_r) // sprite ROM readback AM_RANGE(0x402000, 0x40200f) AM_READ_LEGACY(K055673_rom_word_r) // sprite ROM readback
AM_RANGE(0x402010, 0x40201f) AM_WRITE_LEGACY(K053247_reg_word_w) // OBJSET2 AM_RANGE(0x402010, 0x40201f) AM_WRITE_LEGACY(K053247_reg_word_w) // OBJSET2
AM_RANGE(0x404000, 0x404007) AM_WRITE_LEGACY(K053246_word_w) // OBJSET1 AM_RANGE(0x404000, 0x404007) AM_WRITE_LEGACY(K053246_word_w) // OBJSET1
@ -472,7 +472,7 @@ static ADDRESS_MAP_START( dadandrn_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x482000, 0x482007) AM_DEVWRITE("k056832", k056832_device,b_word_w) // VSCCS AM_RANGE(0x482000, 0x482007) AM_DEVWRITE("k056832", k056832_device,b_word_w) // VSCCS
AM_RANGE(0x484000, 0x484003) AM_WRITE(ddd_053936_clip_w) AM_RANGE(0x484000, 0x484003) AM_WRITE(ddd_053936_clip_w)
AM_RANGE(0x486000, 0x48601f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff) AM_RANGE(0x486000, 0x48601f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff)
AM_RANGE(0x488000, 0x4880ff) AM_WRITE_LEGACY(K055555_word_w) AM_RANGE(0x488000, 0x4880ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w)
AM_RANGE(0x48a00c, 0x48a00d) AM_WRITE(sound_cmd1_msb_w) AM_RANGE(0x48a00c, 0x48a00d) AM_WRITE(sound_cmd1_msb_w)
AM_RANGE(0x48a00e, 0x48a00f) AM_WRITE(sound_cmd2_msb_w) AM_RANGE(0x48a00e, 0x48a00f) AM_WRITE(sound_cmd2_msb_w)
AM_RANGE(0x48a014, 0x48a015) AM_READ(sound_status_msb_r) AM_RANGE(0x48a014, 0x48a015) AM_READ(sound_status_msb_r)
@ -519,7 +519,7 @@ static ADDRESS_MAP_START( gaiapols_map, AS_PROGRAM, 16, mystwarr_state )
AM_RANGE(0x482000, 0x482007) AM_DEVWRITE("k056832", k056832_device,b_word_w) // VSCCS AM_RANGE(0x482000, 0x482007) AM_DEVWRITE("k056832", k056832_device,b_word_w) // VSCCS
AM_RANGE(0x484000, 0x484003) AM_WRITE(ddd_053936_clip_w) AM_RANGE(0x484000, 0x484003) AM_WRITE(ddd_053936_clip_w)
AM_RANGE(0x486000, 0x48601f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff) AM_RANGE(0x486000, 0x48601f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff)
AM_RANGE(0x488000, 0x4880ff) AM_WRITE_LEGACY(K055555_word_w) AM_RANGE(0x488000, 0x4880ff) AM_DEVWRITE("k055555", k055555_device, K055555_word_w)
AM_RANGE(0x48a00c, 0x48a00d) AM_WRITE(sound_cmd1_msb_w) AM_RANGE(0x48a00c, 0x48a00d) AM_WRITE(sound_cmd1_msb_w)
AM_RANGE(0x48a00e, 0x48a00f) AM_WRITE(sound_cmd2_msb_w) AM_RANGE(0x48a00e, 0x48a00f) AM_WRITE(sound_cmd2_msb_w)
AM_RANGE(0x48a014, 0x48a015) AM_READ(sound_status_msb_r) AM_RANGE(0x48a014, 0x48a015) AM_READ(sound_status_msb_r)
@ -999,6 +999,7 @@ static MACHINE_CONFIG_START( mystwarr, mystwarr_state )
MCFG_PALETTE_LENGTH(2048) MCFG_PALETTE_LENGTH(2048)
MCFG_K056832_ADD_NOINTF("k056832"/*, mystwarr_k056832_intf*/) MCFG_K056832_ADD_NOINTF("k056832"/*, mystwarr_k056832_intf*/)
MCFG_K055555_ADD("k055555")
MCFG_VIDEO_START_OVERRIDE(mystwarr_state,mystwarr) MCFG_VIDEO_START_OVERRIDE(mystwarr_state,mystwarr)

View File

@ -612,7 +612,8 @@ static MACHINE_CONFIG_START( kongambl, kongambl_state )
MCFG_VIDEO_START_OVERRIDE(kongambl_state,kongambl) MCFG_VIDEO_START_OVERRIDE(kongambl_state,kongambl)
MCFG_K053247_ADD("k053246", k053247_intf) MCFG_K053247_ADD("k053246", k053247_intf)
MCFG_K055555_ADD("k055555")
MCFG_GFXDECODE(tasman) MCFG_GFXDECODE(tasman)
MCFG_K056832_ADD("k056832", k056832_intf) MCFG_K056832_ADD("k056832", k056832_intf)

View File

@ -15,6 +15,7 @@ public:
m_workram(*this,"workram"), m_workram(*this,"workram"),
m_psacram(*this,"psacram"), m_psacram(*this,"psacram"),
m_subpaletteram32(*this,"subpaletteram"), m_subpaletteram32(*this,"subpaletteram"),
m_k055555(*this, "k055555"),
m_k056832(*this, "k056832"), m_k056832(*this, "k056832"),
m_k053936_0_ctrl(*this,"k053936_0_ctrl",32), m_k053936_0_ctrl(*this,"k053936_0_ctrl",32),
m_k053936_0_linectrl(*this,"k053936_0_line",32), m_k053936_0_linectrl(*this,"k053936_0_line",32),
@ -31,6 +32,7 @@ public:
optional_shared_ptr<UINT32> m_workram; optional_shared_ptr<UINT32> m_workram;
optional_shared_ptr<UINT32> m_psacram; optional_shared_ptr<UINT32> m_psacram;
optional_shared_ptr<UINT32> m_subpaletteram32; optional_shared_ptr<UINT32> m_subpaletteram32;
required_device<k055555_device> m_k055555;
required_device<k056832_device> m_k056832; required_device<k056832_device> m_k056832;
optional_shared_ptr<UINT16> m_k053936_0_ctrl; optional_shared_ptr<UINT16> m_k053936_0_ctrl;
optional_shared_ptr<UINT16> m_k053936_0_linectrl; optional_shared_ptr<UINT16> m_k053936_0_linectrl;
@ -112,6 +114,10 @@ public:
tilemap_t *sub1, int sub1flags, tilemap_t *sub1, int sub1flags,
tilemap_t *sub2, int sub2flags, tilemap_t *sub2, int sub2flags,
int mixerflags, bitmap_ind16 *extra_bitmap, int rushingheroes_hack); int mixerflags, bitmap_ind16 *extra_bitmap, int rushingheroes_hack);
void konamigx_esc_alert(UINT32 *srcbase, int srcoffs, int count, int mode);
void konamigx_precache_registers(void);
}; };
@ -191,6 +197,6 @@ extern int konamigx_current_frame;
/*----------- defined in machine/konamigx.c -----------*/ /*----------- defined in machine/konamigx.c -----------*/
// K055550/K053990/ESC protection devices handlers // K055550/K053990/ESC protection devices handlers
void konamigx_esc_alert(UINT32 *srcbase, int srcoffs, int count, int mode);
void fantjour_dma_install(running_machine &machine); void fantjour_dma_install(running_machine &machine);

View File

@ -260,7 +260,7 @@ WRITE16_MEMBER(konamigx_state::K053990_martchmp_word_w)
} }
} }
void konamigx_esc_alert(UINT32 *srcbase, int srcoffs, int count, int mode) // (WARNING: assumed big endianess) void konamigx_state::konamigx_esc_alert(UINT32 *srcbase, int srcoffs, int count, int mode) // (WARNING: assumed big endianess)
{ {
// hand-filled but should be close // hand-filled but should be close
static const UINT8 ztable[7][8] = static const UINT8 ztable[7][8] =
@ -380,7 +380,7 @@ if((data1=obj[0])&0x80000000)\
case 0x11010010: i = 5; vmask = 0x1ff; break; case 0x11010010: i = 5; vmask = 0x1ff; break;
case 0x01111018: i = 4; break; case 0x01111018: i = 4; break;
case 0x10010011: i = 3; case 0x10010011: i = 3;
if ((srcbase[0x1c75]&0xff)==32) K055555_write_reg(K55_BLEND_ENABLES,36); // (TEMPORARY) if ((srcbase[0x1c75]&0xff)==32) m_k055555->K055555_write_reg(K55_BLEND_ENABLES,36); // (TEMPORARY)
break; break;
case 0x11010811: i = 2; break; case 0x11010811: i = 2; break;
case 0x10000010: i = 1; break; case 0x10000010: i = 1; break;

View File

@ -54,7 +54,7 @@ UINT32 bishi_state::screen_update_bishi(screen_device &screen, bitmap_rgb32 &bit
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
layers[i] = i; layers[i] = i;
layerpri[i] = k055555_read_register(m_k055555, pris[i]); layerpri[i] = m_k055555->k055555_read_register(m_k055555, pris[i]);
} }
konami_sortlayers4(layers, layerpri); konami_sortlayers4(layers, layerpri);
@ -63,7 +63,7 @@ UINT32 bishi_state::screen_update_bishi(screen_device &screen, bitmap_rgb32 &bit
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
if (k055555_read_register(m_k055555, K55_INPUT_ENABLES) & enables[layers[i]]) if (m_k055555->k055555_read_register(m_k055555, K55_INPUT_ENABLES) & enables[layers[i]])
{ {
m_k056832->tilemap_draw(bitmap, cliprect, layers[i], 0, 1 << i); m_k056832->tilemap_draw(bitmap, cliprect, layers[i], 0, 1 << i);
} }

View File

@ -16,7 +16,7 @@ void djmain_state::draw_sprites( bitmap_rgb32 &bitmap, const rectangle &cliprect
int offs, pri_code; int offs, pri_code;
int sortedlist[NUM_SPRITES]; int sortedlist[NUM_SPRITES];
machine().gfx[0]->set_colorbase(k055555_read_register(m_k055555, K55_PALBASE_SUB2) * 0x400); machine().gfx[0]->set_colorbase(m_k055555->k055555_read_register(m_k055555, K55_PALBASE_SUB2) * 0x400);
for (offs = 0; offs < NUM_SPRITES; offs++) for (offs = 0; offs < NUM_SPRITES; offs++)
sortedlist[offs] = -1; sortedlist[offs] = -1;
@ -140,14 +140,14 @@ void djmain_state::video_start()
UINT32 djmain_state::screen_update_djmain(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) UINT32 djmain_state::screen_update_djmain(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{ {
int enables = k055555_read_register(m_k055555, K55_INPUT_ENABLES); int enables = m_k055555->k055555_read_register(m_k055555, K55_INPUT_ENABLES);
int pri[NUM_LAYERS + 1]; int pri[NUM_LAYERS + 1];
int order[NUM_LAYERS + 1]; int order[NUM_LAYERS + 1];
int i, j; int i, j;
for (i = 0; i < NUM_LAYERS; i++) for (i = 0; i < NUM_LAYERS; i++)
pri[i] = k055555_read_register(m_k055555, K55_PRIINP_0 + i * 3); pri[i] = m_k055555->k055555_read_register(m_k055555, K55_PRIINP_0 + i * 3);
pri[i] = k055555_read_register(m_k055555, K55_PRIINP_10); pri[i] = m_k055555->k055555_read_register(m_k055555, K55_PRIINP_10);
for (i = 0; i < NUM_LAYERS + 1; i++) for (i = 0; i < NUM_LAYERS + 1; i++)
order[i] = i; order[i] = i;

View File

@ -166,7 +166,6 @@ ones. The other 7 words are ignored. Global scrollx is ignored.
#include "k054156_k054157_k056832.h" #include "k054156_k054157_k056832.h"
#include "konami_helper.h" #include "konami_helper.h"
#include "video/k055555.h"// still needs k055555_get_palette_index
/* end common functions */ /* end common functions */
@ -378,7 +377,8 @@ void k056832_device::device_start()
return; return;
m_k055555 = machine().device(m_k055555_tag); m_k055555 = machine().device<k055555_device>(m_k055555_tag);
/* TODO: understand which elements MUST be init here (to keep correct layer /* TODO: understand which elements MUST be init here (to keep correct layer
associations) and which ones can can be init at RESET, if any */ associations) and which ones can can be init at RESET, if any */
@ -1464,7 +1464,7 @@ printf("\nend\n");
} }
*/ */
last_active = m_active_layer; last_active = m_active_layer;
new_colorbase = (m_k055555 != NULL) ? k055555_get_palette_index(m_k055555, layer) : 0; new_colorbase = (m_k055555 != NULL) ? m_k055555->k055555_get_palette_index(m_k055555, layer) : 0;
for (r = 0; r < rowspan; r++) for (r = 0; r < rowspan; r++)
{ {
@ -1769,7 +1769,7 @@ void k056832_device::tilemap_draw_dj( bitmap_rgb32 &bitmap, const rectangle &cli
sdat_adv = -sdat_adv; sdat_adv = -sdat_adv;
last_active = m_active_layer; last_active = m_active_layer;
new_colorbase = (m_k055555 != NULL) ? k055555_get_palette_index(m_k055555, layer) : 0; new_colorbase = (m_k055555 != NULL) ? m_k055555->k055555_get_palette_index(m_k055555, layer) : 0;
for (r = 0; r <= rowspan; r++) for (r = 0; r <= rowspan; r++)
{ {
@ -2182,7 +2182,7 @@ void k056832_device::altK056832_vh_start(running_machine &machine, const char *g
void (*callback)(running_machine &machine, int layer, int *code, int *color, int *flags), void (*callback)(running_machine &machine, int layer, int *code, int *color, int *flags),
int djmain_hack) int djmain_hack)
{ {
m_k055555_use = 0; m_k055555 = 0;
m_callback = callback; m_callback = callback;
m_djmain_hack = djmain_hack; m_djmain_hack = djmain_hack;
@ -2403,7 +2403,7 @@ void k056832_device::m_tilemap_draw(running_machine &machine, bitmap_rgb32 &bitm
if (flipy) sdat_adv = -sdat_adv; if (flipy) sdat_adv = -sdat_adv;
last_active = m_active_layer; last_active = m_active_layer;
new_colorbase = (m_k055555_use) ? K055555_get_palette_index(layer) : 0; new_colorbase = (m_k055555 != NULL) ? m_k055555->K055555_get_palette_index(layer) : 0;
for (r=0; r<rowspan; r++) for (r=0; r<rowspan; r++)
{ {
@ -2501,7 +2501,7 @@ void k056832_device::m_tilemap_draw(running_machine &machine, bitmap_rgb32 &bitm
m_active_layer = layer; m_active_layer = layer;
} }
if (m_k055555_use) if (m_k055555 != NULL)
{ {
if (last_colorbase[pageIndex] != new_colorbase) if (last_colorbase[pageIndex] != new_colorbase)
{ {
@ -2607,9 +2607,9 @@ int k056832_device::get_layer_association(void)
return(m_layer_association); return(m_layer_association);
} }
void k056832_device::altK056832_set_UpdateMode(int mode) void k056832_device::K056832_set_k055555(k055555_device * mode)
{ {
m_k055555_use = mode; m_k055555 = mode;
} }

View File

@ -5,6 +5,9 @@
#define VERBOSE 0 #define VERBOSE 0
#define LOG(x) do { if (VERBOSE) logerror x; } while (0) #define LOG(x) do { if (VERBOSE) logerror x; } while (0)
#include "video/k055555.h"// still needs k055555_get_palette_index
typedef void (*k056832_callback)(running_machine &machine, int layer, int *code, int *color, int *flags); typedef void (*k056832_callback)(running_machine &machine, int layer, int *code, int *color, int *flags);
@ -53,7 +56,7 @@ public:
k056832_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); k056832_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
~k056832_device() ~k056832_device()
{ {
m_k055555_use = 0; m_k055555 = 0;
} }
void SetExtLinescroll(); /* Lethal Enforcers */ void SetExtLinescroll(); /* Lethal Enforcers */
@ -174,7 +177,7 @@ private:
device_t *m_k055555; /* used to choose colorbase */ k055555_device *m_k055555; /* used to choose colorbase */
void get_tile_info( tile_data &tileinfo, int tile_index, int pageIndex ); void get_tile_info( tile_data &tileinfo, int tile_index, int pageIndex );
@ -216,15 +219,12 @@ private:
public: public:
// todo: collapse these into above // todo: collapse these into above
int m_k055555_use;
void altK056832_vh_start(running_machine &machine, const char *gfx_memory_region, int bpp, int big, void altK056832_vh_start(running_machine &machine, const char *gfx_memory_region, int bpp, int big,
int (*scrolld)[4][2], int (*scrolld)[4][2],
void (*callback)(running_machine &machine, int layer, int *code, int *color, int *flags), void (*callback)(running_machine &machine, int layer, int *code, int *color, int *flags),
int djmain_hack); int djmain_hack);
void altK056832_set_UpdateMode(int mode); // k055555 hook void K056832_set_k055555(k055555_device* mode); // k055555 hook
void m_tilemap_draw(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int num, UINT32 flags, UINT32 priority); void m_tilemap_draw(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int num, UINT32 flags, UINT32 priority);

View File

@ -21,14 +21,19 @@ static int K054338_shdRGB[9];
static int K054338_alphainverted; static int K054338_alphainverted;
// use member once implementations are merged.
k055555_device* temp_k055555 = 0;
// K054338 alpha blend / final mixer (normally used with the 55555) // K054338 alpha blend / final mixer (normally used with the 55555)
// because the implementation is video dependant, this is just a // because the implementation is video dependant, this is just a
// register-handling shell. // register-handling shell.
void K054338_vh_start(running_machine &machine) void K054338_vh_start(running_machine &machine, k055555_device* k055555)
{ {
memset(k54338_regs, 0, sizeof(UINT16)*32); memset(k54338_regs, 0, sizeof(UINT16)*32);
memset(K054338_shdRGB, 0, sizeof(int)*9); memset(K054338_shdRGB, 0, sizeof(int)*9);
K054338_alphainverted = 1; K054338_alphainverted = 1;
temp_k055555 = k055555;
machine.save().save_item(NAME(k54338_regs)); machine.save().save_item(NAME(k54338_regs));
} }
@ -77,6 +82,8 @@ void K054338_update_all_shadows(running_machine &machine, int rushingheroes_hack
} }
} }
// Unified K054338/K055555 BG color fill // Unified K054338/K055555 BG color fill
void K054338_fill_backcolor(running_machine &machine, bitmap_rgb32 &bitmap, int mode) // (see p.67) void K054338_fill_backcolor(running_machine &machine, bitmap_rgb32 &bitmap, int mode) // (see p.67)
{ {
@ -106,8 +113,8 @@ void K054338_fill_backcolor(running_machine &machine, bitmap_rgb32 &bitmap, int
} }
else else
{ {
BGC_CBLK = K055555_read_register(0); BGC_CBLK = temp_k055555->K055555_read_register(0);
BGC_SET = K055555_read_register(1); BGC_SET = temp_k055555->K055555_read_register(1);
pal_ptr += BGC_CBLK << 9; pal_ptr += BGC_CBLK << 9;
// single color output from PCU2 // single color output from PCU2
@ -264,7 +271,7 @@ void k054338_device::device_config_complete()
void k054338_device::device_start() void k054338_device::device_start()
{ {
m_screen = machine().device<screen_device>(m_screen_tag); m_screen = machine().device<screen_device>(m_screen_tag);
m_k055555 = machine().device(m_k055555_tag); m_k055555 = machine().device<k055555_device>(m_k055555_tag);
save_item(NAME(m_regs)); save_item(NAME(m_regs));
save_item(NAME(m_shd_rgb)); save_item(NAME(m_shd_rgb));
@ -376,8 +383,8 @@ void k054338_device::fill_backcolor( bitmap_rgb32 &bitmap, int mode ) // (see p.
} }
else else
{ {
BGC_CBLK = k055555_read_register(m_k055555, 0); BGC_CBLK = m_k055555->k055555_read_register(m_k055555, 0);
BGC_SET = k055555_read_register(m_k055555, 1); BGC_SET = m_k055555->k055555_read_register(m_k055555, 1);
pal_ptr += BGC_CBLK << 9; pal_ptr += BGC_CBLK << 9;

View File

@ -3,6 +3,7 @@
#ifndef __K054338_H__ #ifndef __K054338_H__
#define __K054338_H__ #define __K054338_H__
#include "k055555.h"
#define MCFG_K054338_ADD(_tag, _interface) \ #define MCFG_K054338_ADD(_tag, _interface) \
MCFG_DEVICE_ADD(_tag, K054338, 0) \ MCFG_DEVICE_ADD(_tag, K054338, 0) \
@ -11,7 +12,7 @@
/* K054338 mixer/alpha blender */ /* K054338 mixer/alpha blender */
void K054338_vh_start(running_machine &machine); void K054338_vh_start(running_machine &machine, k055555_device* k055555);
DECLARE_WRITE16_HANDLER( K054338_word_w ); // "CLCT" registers DECLARE_WRITE16_HANDLER( K054338_word_w ); // "CLCT" registers
DECLARE_WRITE32_HANDLER( K054338_long_w ); DECLARE_WRITE32_HANDLER( K054338_long_w );
int K054338_read_register(int reg); int K054338_read_register(int reg);
@ -77,7 +78,7 @@ private:
int m_shd_rgb[9]; int m_shd_rgb[9];
screen_device *m_screen; screen_device *m_screen;
device_t *m_k055555; /* used to fill BG color */ k055555_device *m_k055555; /* used to fill BG color */
}; };
extern const device_type K054338; extern const device_type K054338;

View File

@ -59,7 +59,6 @@ Lots of byte-wise registers. A partial map:
#include "emu.h" #include "emu.h"
#include "k055555.h" #include "k055555.h"
#include "devlegcy.h"
#define VERBOSE 0 #define VERBOSE 0
@ -68,16 +67,15 @@ Lots of byte-wise registers. A partial map:
/* K055555 5-bit-per-pixel priority encoder */ /* K055555 5-bit-per-pixel priority encoder */
/* This device has 48 8-bit-wide registers */ /* This device has 48 8-bit-wide registers */
static UINT8 k55555_regs[128];
void K055555_vh_start(running_machine &machine) void k055555_device::K055555_vh_start(running_machine &machine)
{ {
machine.save().save_item(NAME(k55555_regs)); machine.save().save_item(NAME(m_regs));
memset(k55555_regs, 0, 64*sizeof(UINT8)); memset(m_regs, 0, 64*sizeof(UINT8));
} }
void K055555_write_reg(UINT8 regnum, UINT8 regdat) void k055555_device::K055555_write_reg(UINT8 regnum, UINT8 regdat)
{ {
static const char *const rnames[46] = static const char *const rnames[46] =
{ {
@ -89,15 +87,15 @@ void K055555_write_reg(UINT8 regnum, UINT8 regdat)
"SHD PRI 2", "SHD PRI 3", "SHD ON", "SHD PRI SEL", "V BRI", "OS INBRI", "OS INBRI ON", "ENABLE" "SHD PRI 2", "SHD PRI 3", "SHD ON", "SHD PRI SEL", "V BRI", "OS INBRI", "OS INBRI ON", "ENABLE"
}; };
if (regdat != k55555_regs[regnum]) if (regdat != m_regs[regnum])
{ {
LOG(("5^5: %x to reg %x (%s)\n", regdat, regnum, rnames[regnum])); LOG(("5^5: %x to reg %x (%s)\n", regdat, regnum, rnames[regnum]));
} }
k55555_regs[regnum] = regdat; m_regs[regnum] = regdat;
} }
WRITE32_HANDLER( K055555_long_w ) WRITE32_MEMBER( k055555_device::K055555_long_w )
{ {
UINT8 regnum, regdat; UINT8 regnum, regdat;
@ -123,7 +121,7 @@ WRITE32_HANDLER( K055555_long_w )
K055555_write_reg(regnum, regdat); K055555_write_reg(regnum, regdat);
} }
WRITE16_HANDLER( K055555_word_w ) WRITE16_MEMBER( k055555_device::K055555_word_w )
{ {
if (mem_mask == 0x00ff) if (mem_mask == 0x00ff)
{ {
@ -135,14 +133,14 @@ WRITE16_HANDLER( K055555_word_w )
} }
} }
int K055555_read_register(int regnum) int k055555_device::K055555_read_register(int regnum)
{ {
return(k55555_regs[regnum]); return(m_regs[regnum]);
} }
int K055555_get_palette_index(int idx) int k055555_device::K055555_get_palette_index(int idx)
{ {
return(k55555_regs[K55_PALBASE_A + idx]); return(m_regs[K55_PALBASE_A + idx]);
} }
@ -157,31 +155,12 @@ int K055555_get_palette_index(int idx)
/* K055555 5-bit-per-pixel priority encoder */ /* K055555 5-bit-per-pixel priority encoder */
/* This device has 48 8-bit-wide registers */ /* This device has 48 8-bit-wide registers */
struct k055555_state
{
UINT8 regs[128];
};
/*****************************************************************************
INLINE FUNCTIONS
*****************************************************************************/
INLINE k055555_state *k055555_get_safe_token( device_t *device )
{
assert(device != NULL);
assert(device->type() == K055555);
return (k055555_state *)downcast<k055555_device *>(device)->token();
}
/***************************************************************************** /*****************************************************************************
DEVICE HANDLERS DEVICE HANDLERS
*****************************************************************************/ *****************************************************************************/
void k055555_write_reg( device_t *device, UINT8 regnum, UINT8 regdat ) void k055555_device::k055555_write_reg( UINT8 regnum, UINT8 regdat )
{ {
k055555_state *k055555 = k055555_get_safe_token(device);
static const char *const rnames[46] = static const char *const rnames[46] =
{ {
"BGC CBLK", "BGC SET", "COLSET0", "COLSET1", "COLSET2", "COLSET3", "COLCHG ON", "BGC CBLK", "BGC SET", "COLSET0", "COLSET1", "COLSET2", "COLSET3", "COLCHG ON",
@ -192,15 +171,15 @@ void k055555_write_reg( device_t *device, UINT8 regnum, UINT8 regdat )
"SHD PRI 2", "SHD PRI 3", "SHD ON", "SHD PRI SEL", "V BRI", "OS INBRI", "OS INBRI ON", "ENABLE" "SHD PRI 2", "SHD PRI 3", "SHD ON", "SHD PRI SEL", "V BRI", "OS INBRI", "OS INBRI ON", "ENABLE"
}; };
if (regdat != k055555->regs[regnum]) if (regdat != m_regs[regnum])
{ {
LOG(("5^5: %x to reg %x (%s)\n", regdat, regnum, rnames[regnum])); LOG(("5^5: %x to reg %x (%s)\n", regdat, regnum, rnames[regnum]));
} }
k055555->regs[regnum] = regdat; m_regs[regnum] = regdat;
} }
WRITE32_DEVICE_HANDLER( k055555_long_w ) WRITE32_MEMBER( k055555_device::k055555_long_w )
{ {
UINT8 regnum, regdat; UINT8 regnum, regdat;
@ -223,55 +202,43 @@ WRITE32_DEVICE_HANDLER( k055555_long_w )
} }
} }
k055555_write_reg(device, regnum, regdat); k055555_write_reg(regnum, regdat);
} }
WRITE16_DEVICE_HANDLER( k055555_word_w ) WRITE16_MEMBER( k055555_device::k055555_word_w )
{ {
if (mem_mask == 0x00ff) if (mem_mask == 0x00ff)
{ {
k055555_write_reg(device, offset, data & 0xff); k055555_write_reg(offset, data & 0xff);
} }
else else
{ {
k055555_write_reg(device, offset, data >> 8); k055555_write_reg(offset, data >> 8);
} }
} }
int k055555_read_register( device_t *device, int regnum ) int k055555_device::k055555_read_register( device_t *device, int regnum )
{ {
k055555_state *k055555 = k055555_get_safe_token(device); return m_regs[regnum];
return k055555->regs[regnum];
} }
int k055555_get_palette_index( device_t *device, int idx ) int k055555_device::k055555_get_palette_index( device_t *device, int idx )
{ {
k055555_state *k055555 = k055555_get_safe_token(device); return m_regs[K55_PALBASE_A + idx];
return k055555->regs[K55_PALBASE_A + idx];
} }
/***************************************************************************** /*****************************************************************************
DEVICE INTERFACE DEVICE INTERFACE
*****************************************************************************/ *****************************************************************************/
static DEVICE_START( k055555 )
{
k055555_state *k055555 = k055555_get_safe_token(device);
device->save_item(NAME(k055555->regs));
}
static DEVICE_RESET( k055555 )
{
k055555_state *k055555 = k055555_get_safe_token(device);
memset(k055555->regs, 0, 64 * sizeof(UINT8));
}
const device_type K055555 = &device_creator<k055555_device>; const device_type K055555 = &device_creator<k055555_device>;
k055555_device::k055555_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) k055555_device::k055555_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, K055555, "Konami 055555", tag, owner, clock, "k055555", __FILE__) : device_t(mconfig, K055555, "Konami 055555", tag, owner, clock, "k055555", __FILE__)
{ {
m_token = global_alloc_clear(k055555_state);
} }
//------------------------------------------------- //-------------------------------------------------
@ -290,7 +257,8 @@ void k055555_device::device_config_complete()
void k055555_device::device_start() void k055555_device::device_start()
{ {
DEVICE_START_NAME( k055555 )(this); save_item(NAME(m_regs));
} }
//------------------------------------------------- //-------------------------------------------------
@ -299,22 +267,21 @@ void k055555_device::device_start()
void k055555_device::device_reset() void k055555_device::device_reset()
{ {
DEVICE_RESET_NAME( k055555 )(this); memset(m_regs, 0, 64 * sizeof(UINT8));
} }
READ16_DEVICE_HANDLER( k055555_word_r ) READ16_MEMBER( k055555_device::k055555_word_r )
{ {
k055555_state *k055555 = k055555_get_safe_token(device); return(m_regs[offset] << 8);
return(k055555->regs[offset] << 8);
} // PCU2 } // PCU2
READ32_DEVICE_HANDLER( k055555_long_r ) READ32_MEMBER( k055555_device::k055555_long_r )
{ {
offset <<= 1; offset <<= 1;
return (k055555_word_r(device, space, offset + 1, 0xffff) | k055555_word_r(device, space, offset, 0xffff) << 16); return (k055555_word_r(space, offset + 1, 0xffff) | k055555_word_r(space, offset, 0xffff) << 16);
} }

View File

@ -7,12 +7,7 @@
#define MCFG_K055555_ADD(_tag) \ #define MCFG_K055555_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, K055555, 0) MCFG_DEVICE_ADD(_tag, K055555, 0)
void K055555_vh_start(running_machine &machine); // "PCU2"
void K055555_write_reg(UINT8 regnum, UINT8 regdat);
DECLARE_WRITE16_HANDLER( K055555_word_w );
DECLARE_WRITE32_HANDLER( K055555_long_w );
int K055555_read_register(int regnum);
int K055555_get_palette_index(int idx);
/* K055555 registers */ /* K055555 registers */
/* priority inputs */ /* priority inputs */
@ -84,33 +79,46 @@ class k055555_device : public device_t
{ {
public: public:
k055555_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); k055555_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
~k055555_device() { global_free(m_token); } ~k055555_device() { }
void k055555_write_reg(UINT8 regnum, UINT8 regdat);
/** Konami 055555 **/
DECLARE_WRITE16_MEMBER( k055555_word_w );
DECLARE_WRITE32_MEMBER( k055555_long_w );
int k055555_read_register(device_t *device, int regnum);
int k055555_get_palette_index(device_t *device, int idx);
// debug handlers
DECLARE_READ16_MEMBER( k055555_word_r ); // PCU2
DECLARE_READ32_MEMBER( k055555_long_r ); // PCU2
/* alt implementation to merge */
void K055555_vh_start(running_machine &machine); // "PCU2"
void K055555_write_reg(UINT8 regnum, UINT8 regdat);
DECLARE_WRITE16_MEMBER( K055555_word_w );
DECLARE_WRITE32_MEMBER( K055555_long_w );
int K055555_read_register(int regnum);
int K055555_get_palette_index(int idx);
// access to legacy token
void *token() const { assert(m_token != NULL); return m_token; }
protected: protected:
// device-level overrides // device-level overrides
virtual void device_config_complete(); virtual void device_config_complete();
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
UINT8 m_regs[128];
private: private:
// internal state
void *m_token;
}; };
extern const device_type K055555; extern const device_type K055555;
/** Konami 055555 **/
void k055555_write_reg(device_t *device, UINT8 regnum, UINT8 regdat);
DECLARE_WRITE16_DEVICE_HANDLER( k055555_word_w );
DECLARE_WRITE32_DEVICE_HANDLER( k055555_long_w );
int k055555_read_register(device_t *device, int regnum);
int k055555_get_palette_index(device_t *device, int idx);
// debug handlers
DECLARE_READ16_DEVICE_HANDLER( k055555_word_r ); // PCU2
DECLARE_READ32_DEVICE_HANDLER( k055555_long_r ); // PCU2
#endif #endif

View File

@ -849,7 +849,7 @@ static int vcblk[6], ocblk;
static int vinmix, vmixon, osinmix, osmixon; static int vinmix, vmixon, osinmix, osmixon;
static void konamigx_precache_registers(void) void konamigx_state::konamigx_precache_registers(void)
{ {
// (see sprite color coding scheme on p.46 & 47) // (see sprite color coding scheme on p.46 & 47)
static const int coregmasks[5] = {0xf,0xe,0xc,0x8,0x0}; static const int coregmasks[5] = {0xf,0xe,0xc,0x8,0x0};
@ -875,19 +875,19 @@ static void konamigx_precache_registers(void)
K053247_coregshift = coregshifts[i]; K053247_coregshift = coregshifts[i];
opri = K055555_read_register(K55_PRIINP_8); opri = m_k055555->K055555_read_register(K55_PRIINP_8);
oinprion = K055555_read_register(K55_OINPRI_ON); oinprion = m_k055555->K055555_read_register(K55_OINPRI_ON);
vcblk[0] = K055555_read_register(K55_PALBASE_A); vcblk[0] = m_k055555->K055555_read_register(K55_PALBASE_A);
vcblk[1] = K055555_read_register(K55_PALBASE_B); vcblk[1] = m_k055555->K055555_read_register(K55_PALBASE_B);
vcblk[2] = K055555_read_register(K55_PALBASE_C); vcblk[2] = m_k055555->K055555_read_register(K55_PALBASE_C);
vcblk[3] = K055555_read_register(K55_PALBASE_D); vcblk[3] = m_k055555->K055555_read_register(K55_PALBASE_D);
vcblk[4] = K055555_read_register(K55_PALBASE_SUB1); vcblk[4] = m_k055555->K055555_read_register(K55_PALBASE_SUB1);
vcblk[5] = K055555_read_register(K55_PALBASE_SUB2); vcblk[5] = m_k055555->K055555_read_register(K55_PALBASE_SUB2);
ocblk = K055555_read_register(K55_PALBASE_OBJ); ocblk = m_k055555->K055555_read_register(K55_PALBASE_OBJ);
vinmix = K055555_read_register(K55_BLEND_ENABLES); vinmix = m_k055555->K055555_read_register(K55_BLEND_ENABLES);
vmixon = K055555_read_register(K55_VINMIX_ON); vmixon = m_k055555->K055555_read_register(K55_VINMIX_ON);
osinmix = K055555_read_register(K55_OSBLEND_ENABLES); osinmix = m_k055555->K055555_read_register(K55_OSBLEND_ENABLES);
osmixon = K055555_read_register(K55_OSBLEND_ON); osmixon = m_k055555->K055555_read_register(K55_OSBLEND_ON);
} }
INLINE int K053247GX_combine_c18(int attrib) // (see p.46) INLINE int K053247GX_combine_c18(int attrib) // (see p.46)
@ -1195,7 +1195,7 @@ void konamigx_state::konamigx_mixer(running_machine &machine, bitmap_rgb32 &bitm
parity ^= 1; parity ^= 1;
// abort if video has been disabled // abort if video has been disabled
disp = K055555_read_register(K55_INPUT_ENABLES); disp = m_k055555->K055555_read_register(K55_INPUT_ENABLES);
if (!disp) return; if (!disp) return;
cltc_shdpri = K054338_read_register(K338_REG_CONTROL); cltc_shdpri = K054338_read_register(K338_REG_CONTROL);
@ -1245,22 +1245,22 @@ void konamigx_state::konamigx_mixer(running_machine &machine, bitmap_rgb32 &bitm
// invert layer priority when this flag is set (not used by any GX game?) // invert layer priority when this flag is set (not used by any GX game?)
//prflp = K055555_read_register(K55_CONTROL) & K55_CTL_FLIPPRI; //prflp = K055555_read_register(K55_CONTROL) & K55_CTL_FLIPPRI;
layerpri[0] = K055555_read_register(K55_PRIINP_0); layerpri[0] = m_k055555->K055555_read_register(K55_PRIINP_0);
layerpri[1] = K055555_read_register(K55_PRIINP_3); layerpri[1] = m_k055555->K055555_read_register(K55_PRIINP_3);
layerpri[3] = K055555_read_register(K55_PRIINP_7); layerpri[3] = m_k055555->K055555_read_register(K55_PRIINP_7);
layerpri[4] = K055555_read_register(K55_PRIINP_9); layerpri[4] = m_k055555->K055555_read_register(K55_PRIINP_9);
layerpri[5] = K055555_read_register(K55_PRIINP_10); layerpri[5] = m_k055555->K055555_read_register(K55_PRIINP_10);
if (gx_primode == -1) if (gx_primode == -1)
{ {
// Lethal Enforcer hack (requires pixel color comparison) // Lethal Enforcer hack (requires pixel color comparison)
layerpri[2] = K055555_read_register(K55_PRIINP_3) + 0x20; layerpri[2] = m_k055555->K055555_read_register(K55_PRIINP_3) + 0x20;
shdprisel = 0x3f; shdprisel = 0x3f;
} }
else else
{ {
layerpri[2] = K055555_read_register(K55_PRIINP_6); layerpri[2] = m_k055555->K055555_read_register(K55_PRIINP_6);
shdprisel = K055555_read_register(K55_SHD_PRI_SEL); shdprisel = m_k055555->K055555_read_register(K55_SHD_PRI_SEL);
} }
// SHDPRISEL filters shadows by different priority comparison methods (UNIMPLEMENTED, see detail on p.66) // SHDPRISEL filters shadows by different priority comparison methods (UNIMPLEMENTED, see detail on p.66)
@ -1268,9 +1268,9 @@ void konamigx_state::konamigx_mixer(running_machine &machine, bitmap_rgb32 &bitm
if (!(shdprisel & 0x0c)) shadowon[1] = 0; if (!(shdprisel & 0x0c)) shadowon[1] = 0;
if (!(shdprisel & 0x30)) shadowon[2] = 0; if (!(shdprisel & 0x30)) shadowon[2] = 0;
shdpri[0] = K055555_read_register(K55_SHAD1_PRI); shdpri[0] = m_k055555->K055555_read_register(K55_SHAD1_PRI);
shdpri[1] = K055555_read_register(K55_SHAD2_PRI); shdpri[1] = m_k055555->K055555_read_register(K55_SHAD2_PRI);
shdpri[2] = K055555_read_register(K55_SHAD3_PRI); shdpri[2] = m_k055555->K055555_read_register(K55_SHAD3_PRI);
spri_min = 0; spri_min = 0;
shadowon[2] = shadowon[1] = shadowon[0] = 0; shadowon[2] = shadowon[1] = shadowon[0] = 0;
@ -1286,7 +1286,7 @@ void konamigx_state::konamigx_mixer(running_machine &machine, bitmap_rgb32 &bitm
} }
// SHDON specifies layers on which shadows can be projected (see detail on p.65 7.2.8) // SHDON specifies layers on which shadows can be projected (see detail on p.65 7.2.8)
temp = K055555_read_register(K55_SHD_ON); temp = m_k055555->K055555_read_register(K55_SHD_ON);
for (i=0; i<4; i++) if (!(temp>>i & 1) && spri_min < layerpri[i]) spri_min = layerpri[i]; // HACK for (i=0; i<4; i++) if (!(temp>>i & 1) && spri_min < layerpri[i]) spri_min = layerpri[i]; // HACK
// update shadows status // update shadows status
@ -2019,8 +2019,8 @@ void konamigx_state::_gxcommoninitnosprites(running_machine &machine)
{ {
int i; int i;
K054338_vh_start(machine); K054338_vh_start(machine, m_k055555);
K055555_vh_start(machine); m_k055555->K055555_vh_start(machine);
konamigx_mixer_init(machine, 0); konamigx_mixer_init(machine, 0);
@ -2077,7 +2077,7 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_5bpp)
if (!strcmp(machine().system().name,"tbyahhoo")) if (!strcmp(machine().system().name,"tbyahhoo"))
{ {
m_k056832->altK056832_set_UpdateMode(1); m_k056832->K056832_set_k055555(m_k055555);
gx_tilemode = 1; gx_tilemode = 1;
} else } else
@ -2134,7 +2134,7 @@ VIDEO_START_MEMBER(konamigx_state,le2)
konamigx_mixer_primode(-1); // swapped layer B and C priorities? konamigx_mixer_primode(-1); // swapped layer B and C priorities?
gx_le2_textcolour_hack = 1; // force text layer to use the right palette gx_le2_textcolour_hack = 1; // force text layer to use the right palette
K055555_write_reg(K55_INPUT_ENABLES, 1); // it doesn't turn on the video output at first for the test screens, maybe it should default to ON? m_k055555->K055555_write_reg(K55_INPUT_ENABLES, 1); // it doesn't turn on the video output at first for the test screens, maybe it should default to ON?
} }
VIDEO_START_MEMBER(konamigx_state,konamigx_6bpp) VIDEO_START_MEMBER(konamigx_state,konamigx_6bpp)
@ -2394,7 +2394,7 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3
unchained = m_k056832->get_layer_association(); unchained = m_k056832->get_layer_association();
for (i=0; i<4; i++) for (i=0; i<4; i++)
{ {
newbase = K055555_get_palette_index(i)<<6; newbase = m_k055555->K055555_get_palette_index(i)<<6;
if (layer_colorbase[i] != newbase) if (layer_colorbase[i] != newbase)
{ {
layer_colorbase[i] = newbase; layer_colorbase[i] = newbase;
@ -2415,7 +2415,7 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3
if (gx_rozenable) if (gx_rozenable)
{ {
last_psac_colorbase = psac_colorbase; last_psac_colorbase = psac_colorbase;
psac_colorbase = K055555_get_palette_index(6); psac_colorbase = m_k055555->K055555_get_palette_index(6);
if (psac_colorbase != last_psac_colorbase) if (psac_colorbase != last_psac_colorbase)
{ {

View File

@ -161,8 +161,8 @@ TILE_GET_INFO_MEMBER(mystwarr_state::get_gai_936_tile_info)
VIDEO_START_MEMBER(mystwarr_state,gaiapols) VIDEO_START_MEMBER(mystwarr_state,gaiapols)
{ {
K055555_vh_start(machine()); m_k055555->K055555_vh_start(machine());
K054338_vh_start(machine()); K054338_vh_start(machine(), m_k055555);
m_gametype = 0; m_gametype = 0;
@ -201,8 +201,8 @@ TILE_GET_INFO_MEMBER(mystwarr_state::get_ult_936_tile_info)
VIDEO_START_MEMBER(mystwarr_state,dadandrn) VIDEO_START_MEMBER(mystwarr_state,dadandrn)
{ {
K055555_vh_start(machine()); m_k055555->K055555_vh_start(machine());
K054338_vh_start(machine()); K054338_vh_start(machine(), m_k055555);
m_gametype = 1; m_gametype = 1;
@ -230,8 +230,8 @@ VIDEO_START_MEMBER(mystwarr_state,dadandrn)
VIDEO_START_MEMBER(mystwarr_state,mystwarr) VIDEO_START_MEMBER(mystwarr_state,mystwarr)
{ {
K055555_vh_start(machine()); m_k055555->K055555_vh_start(machine());
K054338_vh_start(machine()); K054338_vh_start(machine(), m_k055555);
m_gametype = 0; m_gametype = 0;
@ -255,8 +255,8 @@ VIDEO_START_MEMBER(mystwarr_state,metamrph)
{ {
m_gametype = 0; m_gametype = 0;
K055555_vh_start(machine()); m_k055555->K055555_vh_start(machine());
K054338_vh_start(machine()); K054338_vh_start(machine(), m_k055555);
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 0, NULL, game4bpp_tile_callback, 0); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 0, NULL, game4bpp_tile_callback, 0);
@ -277,8 +277,8 @@ VIDEO_START_MEMBER(mystwarr_state,viostorm)
{ {
m_gametype = 0; m_gametype = 0;
K055555_vh_start(machine()); m_k055555->K055555_vh_start(machine());
K054338_vh_start(machine()); K054338_vh_start(machine(), m_k055555);
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 0, NULL, game4bpp_tile_callback, 0); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 0, NULL, game4bpp_tile_callback, 0);
@ -298,8 +298,8 @@ VIDEO_START_MEMBER(mystwarr_state,martchmp)
{ {
m_gametype = 0; m_gametype = 0;
K055555_vh_start(machine()); m_k055555->K055555_vh_start(machine());
K054338_vh_start(machine()); K054338_vh_start(machine(), m_k055555);
m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 0, NULL, game5bpp_tile_callback, 0); m_k056832->altK056832_vh_start(machine(), "gfx1", K056832_BPP_5, 0, NULL, game5bpp_tile_callback, 0);
@ -328,11 +328,11 @@ UINT32 mystwarr_state::screen_update_mystwarr(screen_device &screen, bitmap_rgb3
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
old = m_layer_colorbase[i]; old = m_layer_colorbase[i];
m_layer_colorbase[i] = K055555_get_palette_index(i)<<4; m_layer_colorbase[i] = m_k055555->K055555_get_palette_index(i)<<4;
if( old != m_layer_colorbase[i] ) m_k056832->mark_plane_dirty(i); if( old != m_layer_colorbase[i] ) m_k056832->mark_plane_dirty(i);
} }
m_sprite_colorbase = K055555_get_palette_index(4)<<5; m_sprite_colorbase = m_k055555->K055555_get_palette_index(4)<<5;
konamigx_mixer(machine(), bitmap, cliprect, 0, 0, 0, 0, blendmode, 0, 0); konamigx_mixer(machine(), bitmap, cliprect, 0, 0, 0, 0, blendmode, 0, 0);
return 0; return 0;
@ -345,11 +345,11 @@ UINT32 mystwarr_state::screen_update_metamrph(screen_device &screen, bitmap_rgb3
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
old = m_layer_colorbase[i]; old = m_layer_colorbase[i];
m_layer_colorbase[i] = K055555_get_palette_index(i)<<4; m_layer_colorbase[i] = m_k055555->K055555_get_palette_index(i)<<4;
if (old != m_layer_colorbase[i]) m_k056832->mark_plane_dirty(i); if (old != m_layer_colorbase[i]) m_k056832->mark_plane_dirty(i);
} }
m_sprite_colorbase = K055555_get_palette_index(4)<<4; m_sprite_colorbase = m_k055555->K055555_get_palette_index(4)<<4;
konamigx_mixer(machine(), bitmap, cliprect, 0, GXSUB_K053250 | GXSUB_4BPP, 0, 0, 0, 0, 0); konamigx_mixer(machine(), bitmap, cliprect, 0, GXSUB_K053250 | GXSUB_4BPP, 0, 0, 0, 0, 0);
return 0; return 0;
@ -362,14 +362,14 @@ UINT32 mystwarr_state::screen_update_martchmp(screen_device &screen, bitmap_rgb3
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
old = m_layer_colorbase[i]; old = m_layer_colorbase[i];
m_layer_colorbase[i] = K055555_get_palette_index(i)<<4; m_layer_colorbase[i] = m_k055555->K055555_get_palette_index(i)<<4;
if (old != m_layer_colorbase[i]) m_k056832->mark_plane_dirty(i); if (old != m_layer_colorbase[i]) m_k056832->mark_plane_dirty(i);
} }
m_sprite_colorbase = K055555_get_palette_index(4)<<5; m_sprite_colorbase = m_k055555->K055555_get_palette_index(4)<<5;
m_cbparam = K055555_read_register(K55_PRIINP_8); m_cbparam = m_k055555->K055555_read_register(K55_PRIINP_8);
m_oinprion = K055555_read_register(K55_OINPRI_ON); m_oinprion = m_k055555->K055555_read_register(K55_OINPRI_ON);
// not quite right // not quite right
blendmode = (m_oinprion==0xef && K054338_read_register(K338_REG_PBLEND)) ? ((1<<16|GXMIX_BLEND_FORCE)<<2) : 0; blendmode = (m_oinprion==0xef && K054338_read_register(K338_REG_PBLEND)) ? ((1<<16|GXMIX_BLEND_FORCE)<<2) : 0;
@ -488,12 +488,12 @@ UINT32 mystwarr_state::screen_update_dadandrn(screen_device &screen, bitmap_rgb3
if (m_gametype == 0) if (m_gametype == 0)
{ {
m_sprite_colorbase = (K055555_get_palette_index(4)<<4)&0x7f; m_sprite_colorbase = (m_k055555->K055555_get_palette_index(4)<<4)&0x7f;
rozmode = GXSUB_4BPP; rozmode = GXSUB_4BPP;
} }
else else
{ {
m_sprite_colorbase = (K055555_get_palette_index(4)<<3)&0x7f; m_sprite_colorbase = (m_k055555->K055555_get_palette_index(4)<<3)&0x7f;
rozmode = GXSUB_8BPP; rozmode = GXSUB_8BPP;
} }
@ -501,7 +501,7 @@ UINT32 mystwarr_state::screen_update_dadandrn(screen_device &screen, bitmap_rgb3
{ {
for (i=0; i<4; i++) for (i=0; i<4; i++)
{ {
newbase = K055555_get_palette_index(i)<<4; newbase = m_k055555->K055555_get_palette_index(i)<<4;
if (m_layer_colorbase[i] != newbase) if (m_layer_colorbase[i] != newbase)
{ {
m_layer_colorbase[i] = newbase; m_layer_colorbase[i] = newbase;
@ -513,7 +513,7 @@ UINT32 mystwarr_state::screen_update_dadandrn(screen_device &screen, bitmap_rgb3
{ {
for (dirty=0, i=0; i<4; i++) for (dirty=0, i=0; i<4; i++)
{ {
newbase = K055555_get_palette_index(i)<<4; newbase = m_k055555->K055555_get_palette_index(i)<<4;
if (m_layer_colorbase[i] != newbase) if (m_layer_colorbase[i] != newbase)
{ {
m_layer_colorbase[i] = newbase; m_layer_colorbase[i] = newbase;
@ -525,7 +525,7 @@ UINT32 mystwarr_state::screen_update_dadandrn(screen_device &screen, bitmap_rgb3
} }
m_last_psac_colorbase = m_sub1_colorbase; m_last_psac_colorbase = m_sub1_colorbase;
m_sub1_colorbase = K055555_get_palette_index(5); m_sub1_colorbase = m_k055555->K055555_get_palette_index(5);
if (m_last_psac_colorbase != m_sub1_colorbase) if (m_last_psac_colorbase != m_sub1_colorbase)
{ {