diff --git a/src/mame/drivers/bishi.c b/src/mame/drivers/bishi.c index e15ce3e00f0..2f990683492 100644 --- a/src/mame/drivers/bishi.c +++ b/src/mame/drivers/bishi.c @@ -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(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(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(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") diff --git a/src/mame/drivers/djmain.c b/src/mame/drivers/djmain.c index cb80c34c965..c76f4f21c43 100644 --- a/src/mame/drivers/djmain.c +++ b/src/mame/drivers/djmain.c @@ -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(0x580000, 0x58003f) AM_DEVREADWRITE("k056832", k056832_device, long_r, long_w) // VIDEO REG (tilemap) 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_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) diff --git a/src/mame/drivers/konamigx.c b/src/mame/drivers/konamigx.c index 962eea61011..fffd15a25ef 100644 --- a/src/mame/drivers/konamigx.c +++ b/src/mame/drivers/konamigx.c @@ -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) { - konamigx_esc_alert(space.machine().driver_data()->m_workram, 0x0142, 0x100, 0); + konamigx_state* state = space.machine().driver_data(); + state->konamigx_esc_alert(space.machine().driver_data()->m_workram, 0x0142, 0x100, 0); } static void dragoonj_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { - konamigx_esc_alert(space.machine().driver_data()->m_workram, 0x5c00, 0x100, 0); + konamigx_state* state = space.machine().driver_data(); + state->konamigx_esc_alert(space.machine().driver_data()->m_workram, 0x5c00, 0x100, 0); } static void sal2_esc(address_space &space, UINT32 p1, UINT32 p2, UINT32 p3, UINT32 p4) { - konamigx_esc_alert(space.machine().driver_data()->m_workram, 0x1c8c, 0x172, 1); + konamigx_state* state = space.machine().driver_data(); + state->konamigx_esc_alert(space.machine().driver_data()->m_workram, 0x1c8c, 0x172, 1); } 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(0xd4c000, 0xd4c01f) AM_READWRITE(ccu_r, ccu_w) 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(0xd52010, 0xd5201f) AM_READ(sound020_r) AM_RANGE(0xd56000, 0xd56003) AM_WRITE(eeprom_w) @@ -1792,6 +1795,7 @@ static MACHINE_CONFIG_START( konamigx, konamigx_state ) MCFG_PALETTE_LENGTH(8192) MCFG_K056832_ADD_NOINTF("k056832"/*, konamigx_k056832_intf*/) + MCFG_K055555_ADD("k055555") MCFG_VIDEO_START_OVERRIDE(konamigx_state,konamigx_5bpp) diff --git a/src/mame/drivers/mystwarr.c b/src/mame/drivers/mystwarr.c index 14cbf33e8a5..fa92c302e49 100644 --- a/src/mame/drivers/mystwarr.c +++ b/src/mame/drivers/mystwarr.c @@ -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(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(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(0x482010, 0x48201f) AM_WRITE_LEGACY(K053247_reg_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(0x250000, 0x25000f) AM_DEVREADWRITE("k053250_1", k053250_device, reg_r, reg_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(0x264000, 0x264001) AM_WRITE(sound_irq_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(0x250000, 0x25000f) AM_RAM // K053250 reg 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(0x260000, 0x26001f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0x00ff) 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(0x100000, 0x10ffff) AM_RAM AM_SHARE("gx_workram") // work RAM 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(0x402010, 0x40201f) AM_WRITE_LEGACY(K053247_reg_word_w) // OBJSET2 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(0x484000, 0x484003) AM_WRITE(ddd_053936_clip_w) 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(0x48a00e, 0x48a00f) AM_WRITE(sound_cmd2_msb_w) 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(0x484000, 0x484003) AM_WRITE(ddd_053936_clip_w) 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(0x48a00e, 0x48a00f) AM_WRITE(sound_cmd2_msb_w) 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_K056832_ADD_NOINTF("k056832"/*, mystwarr_k056832_intf*/) + MCFG_K055555_ADD("k055555") MCFG_VIDEO_START_OVERRIDE(mystwarr_state,mystwarr) diff --git a/src/mame/drivers/tasman.c b/src/mame/drivers/tasman.c index 205d40a8fa5..e4a8e5d4c00 100644 --- a/src/mame/drivers/tasman.c +++ b/src/mame/drivers/tasman.c @@ -612,7 +612,8 @@ static MACHINE_CONFIG_START( kongambl, kongambl_state ) MCFG_VIDEO_START_OVERRIDE(kongambl_state,kongambl) MCFG_K053247_ADD("k053246", k053247_intf) - + MCFG_K055555_ADD("k055555") + MCFG_GFXDECODE(tasman) MCFG_K056832_ADD("k056832", k056832_intf) diff --git a/src/mame/includes/konamigx.h b/src/mame/includes/konamigx.h index 6ddfc3a90a6..124a665e71f 100644 --- a/src/mame/includes/konamigx.h +++ b/src/mame/includes/konamigx.h @@ -15,6 +15,7 @@ public: m_workram(*this,"workram"), m_psacram(*this,"psacram"), m_subpaletteram32(*this,"subpaletteram"), + m_k055555(*this, "k055555"), m_k056832(*this, "k056832"), m_k053936_0_ctrl(*this,"k053936_0_ctrl",32), m_k053936_0_linectrl(*this,"k053936_0_line",32), @@ -31,6 +32,7 @@ public: optional_shared_ptr m_workram; optional_shared_ptr m_psacram; optional_shared_ptr m_subpaletteram32; + required_device m_k055555; required_device m_k056832; optional_shared_ptr m_k053936_0_ctrl; optional_shared_ptr m_k053936_0_linectrl; @@ -112,6 +114,10 @@ public: tilemap_t *sub1, int sub1flags, tilemap_t *sub2, int sub2flags, 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 -----------*/ // 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); diff --git a/src/mame/machine/konamigx.c b/src/mame/machine/konamigx.c index 5c3abc7c4d9..c49584f63ba 100644 --- a/src/mame/machine/konamigx.c +++ b/src/mame/machine/konamigx.c @@ -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 static const UINT8 ztable[7][8] = @@ -380,7 +380,7 @@ if((data1=obj[0])&0x80000000)\ case 0x11010010: i = 5; vmask = 0x1ff; break; case 0x01111018: i = 4; break; 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; case 0x11010811: i = 2; break; case 0x10000010: i = 1; break; diff --git a/src/mame/video/bishi.c b/src/mame/video/bishi.c index 648ead5b4a1..90a3feaa8a4 100644 --- a/src/mame/video/bishi.c +++ b/src/mame/video/bishi.c @@ -54,7 +54,7 @@ UINT32 bishi_state::screen_update_bishi(screen_device &screen, bitmap_rgb32 &bit for (i = 0; i < 4; 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); @@ -63,7 +63,7 @@ UINT32 bishi_state::screen_update_bishi(screen_device &screen, bitmap_rgb32 &bit 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); } diff --git a/src/mame/video/djmain.c b/src/mame/video/djmain.c index ffdf366eac3..bd98051f942 100644 --- a/src/mame/video/djmain.c +++ b/src/mame/video/djmain.c @@ -16,7 +16,7 @@ void djmain_state::draw_sprites( bitmap_rgb32 &bitmap, const rectangle &cliprect int offs, pri_code; 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++) 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) { - 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 order[NUM_LAYERS + 1]; int i, j; for (i = 0; i < NUM_LAYERS; i++) - pri[i] = 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_0 + i * 3); + pri[i] = m_k055555->k055555_read_register(m_k055555, K55_PRIINP_10); for (i = 0; i < NUM_LAYERS + 1; i++) order[i] = i; diff --git a/src/mame/video/k054156_k054157_k056832.c b/src/mame/video/k054156_k054157_k056832.c index 7cb486e00fd..fe6e38d082b 100644 --- a/src/mame/video/k054156_k054157_k056832.c +++ b/src/mame/video/k054156_k054157_k056832.c @@ -166,7 +166,6 @@ ones. The other 7 words are ignored. Global scrollx is ignored. #include "k054156_k054157_k056832.h" #include "konami_helper.h" -#include "video/k055555.h"// still needs k055555_get_palette_index /* end common functions */ @@ -378,7 +377,8 @@ void k056832_device::device_start() return; - m_k055555 = machine().device(m_k055555_tag); + m_k055555 = machine().device(m_k055555_tag); + /* TODO: understand which elements MUST be init here (to keep correct layer associations) and which ones can can be init at RESET, if any */ @@ -1464,7 +1464,7 @@ printf("\nend\n"); } */ 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++) { @@ -1769,7 +1769,7 @@ void k056832_device::tilemap_draw_dj( bitmap_rgb32 &bitmap, const rectangle &cli sdat_adv = -sdat_adv; 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++) { @@ -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), int djmain_hack) { - m_k055555_use = 0; + m_k055555 = 0; m_callback = callback; 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; 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; rK055555_read_register(0); + BGC_SET = temp_k055555->K055555_read_register(1); pal_ptr += BGC_CBLK << 9; // single color output from PCU2 @@ -264,7 +271,7 @@ void k054338_device::device_config_complete() void k054338_device::device_start() { m_screen = machine().device(m_screen_tag); - m_k055555 = machine().device(m_k055555_tag); + m_k055555 = machine().device(m_k055555_tag); save_item(NAME(m_regs)); save_item(NAME(m_shd_rgb)); @@ -376,8 +383,8 @@ void k054338_device::fill_backcolor( bitmap_rgb32 &bitmap, int mode ) // (see p. } else { - BGC_CBLK = k055555_read_register(m_k055555, 0); - BGC_SET = k055555_read_register(m_k055555, 1); + BGC_CBLK = m_k055555->k055555_read_register(m_k055555, 0); + BGC_SET = m_k055555->k055555_read_register(m_k055555, 1); pal_ptr += BGC_CBLK << 9; diff --git a/src/mame/video/k054338.h b/src/mame/video/k054338.h index 43e9c91d78a..12667099ac9 100644 --- a/src/mame/video/k054338.h +++ b/src/mame/video/k054338.h @@ -3,6 +3,7 @@ #ifndef __K054338_H__ #define __K054338_H__ +#include "k055555.h" #define MCFG_K054338_ADD(_tag, _interface) \ MCFG_DEVICE_ADD(_tag, K054338, 0) \ @@ -11,7 +12,7 @@ /* 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_WRITE32_HANDLER( K054338_long_w ); int K054338_read_register(int reg); @@ -77,7 +78,7 @@ private: int m_shd_rgb[9]; 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; diff --git a/src/mame/video/k055555.c b/src/mame/video/k055555.c index dde6989b3c2..74cd0ff096a 100644 --- a/src/mame/video/k055555.c +++ b/src/mame/video/k055555.c @@ -59,7 +59,6 @@ Lots of byte-wise registers. A partial map: #include "emu.h" #include "k055555.h" -#include "devlegcy.h" #define VERBOSE 0 @@ -68,16 +67,15 @@ Lots of byte-wise registers. A partial map: /* K055555 5-bit-per-pixel priority encoder */ /* 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] = { @@ -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" }; - if (regdat != k55555_regs[regnum]) + if (regdat != m_regs[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; @@ -123,7 +121,7 @@ WRITE32_HANDLER( K055555_long_w ) K055555_write_reg(regnum, regdat); } -WRITE16_HANDLER( K055555_word_w ) +WRITE16_MEMBER( k055555_device::K055555_word_w ) { 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 */ /* 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(device)->token(); -} - /***************************************************************************** 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] = { "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" }; - if (regdat != k055555->regs[regnum]) + if (regdat != m_regs[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; @@ -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) { - k055555_write_reg(device, offset, data & 0xff); + k055555_write_reg(offset, data & 0xff); } 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 k055555->regs[regnum]; + return m_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 k055555->regs[K55_PALBASE_A + idx]; + return m_regs[K55_PALBASE_A + idx]; } /***************************************************************************** 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::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__) { - m_token = global_alloc_clear(k055555_state); + } //------------------------------------------------- @@ -290,7 +257,8 @@ void k055555_device::device_config_complete() 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() { - 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(k055555->regs[offset] << 8); + return(m_regs[offset] << 8); } // PCU2 -READ32_DEVICE_HANDLER( k055555_long_r ) +READ32_MEMBER( k055555_device::k055555_long_r ) { 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); } diff --git a/src/mame/video/k055555.h b/src/mame/video/k055555.h index 8625cb24c13..42b7b21dda5 100644 --- a/src/mame/video/k055555.h +++ b/src/mame/video/k055555.h @@ -7,12 +7,7 @@ #define MCFG_K055555_ADD(_tag) \ 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 */ /* priority inputs */ @@ -84,33 +79,46 @@ class k055555_device : public device_t { public: 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: // device-level overrides virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); + + UINT8 m_regs[128]; + private: - // internal state - void *m_token; + }; 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 diff --git a/src/mame/video/konamigx.c b/src/mame/video/konamigx.c index 762790553fb..382b4eb2ebf 100644 --- a/src/mame/video/konamigx.c +++ b/src/mame/video/konamigx.c @@ -849,7 +849,7 @@ static int vcblk[6], ocblk; 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) static const int coregmasks[5] = {0xf,0xe,0xc,0x8,0x0}; @@ -875,19 +875,19 @@ static void konamigx_precache_registers(void) K053247_coregshift = coregshifts[i]; - opri = K055555_read_register(K55_PRIINP_8); - oinprion = K055555_read_register(K55_OINPRI_ON); - vcblk[0] = K055555_read_register(K55_PALBASE_A); - vcblk[1] = K055555_read_register(K55_PALBASE_B); - vcblk[2] = K055555_read_register(K55_PALBASE_C); - vcblk[3] = K055555_read_register(K55_PALBASE_D); - vcblk[4] = K055555_read_register(K55_PALBASE_SUB1); - vcblk[5] = K055555_read_register(K55_PALBASE_SUB2); - ocblk = K055555_read_register(K55_PALBASE_OBJ); - vinmix = K055555_read_register(K55_BLEND_ENABLES); - vmixon = K055555_read_register(K55_VINMIX_ON); - osinmix = K055555_read_register(K55_OSBLEND_ENABLES); - osmixon = K055555_read_register(K55_OSBLEND_ON); + opri = m_k055555->K055555_read_register(K55_PRIINP_8); + oinprion = m_k055555->K055555_read_register(K55_OINPRI_ON); + vcblk[0] = m_k055555->K055555_read_register(K55_PALBASE_A); + vcblk[1] = m_k055555->K055555_read_register(K55_PALBASE_B); + vcblk[2] = m_k055555->K055555_read_register(K55_PALBASE_C); + vcblk[3] = m_k055555->K055555_read_register(K55_PALBASE_D); + vcblk[4] = m_k055555->K055555_read_register(K55_PALBASE_SUB1); + vcblk[5] = m_k055555->K055555_read_register(K55_PALBASE_SUB2); + ocblk = m_k055555->K055555_read_register(K55_PALBASE_OBJ); + vinmix = m_k055555->K055555_read_register(K55_BLEND_ENABLES); + vmixon = m_k055555->K055555_read_register(K55_VINMIX_ON); + osinmix = m_k055555->K055555_read_register(K55_OSBLEND_ENABLES); + osmixon = m_k055555->K055555_read_register(K55_OSBLEND_ON); } 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; // 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; 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?) //prflp = K055555_read_register(K55_CONTROL) & K55_CTL_FLIPPRI; - layerpri[0] = K055555_read_register(K55_PRIINP_0); - layerpri[1] = K055555_read_register(K55_PRIINP_3); - layerpri[3] = K055555_read_register(K55_PRIINP_7); - layerpri[4] = K055555_read_register(K55_PRIINP_9); - layerpri[5] = K055555_read_register(K55_PRIINP_10); + layerpri[0] = m_k055555->K055555_read_register(K55_PRIINP_0); + layerpri[1] = m_k055555->K055555_read_register(K55_PRIINP_3); + layerpri[3] = m_k055555->K055555_read_register(K55_PRIINP_7); + layerpri[4] = m_k055555->K055555_read_register(K55_PRIINP_9); + layerpri[5] = m_k055555->K055555_read_register(K55_PRIINP_10); if (gx_primode == -1) { // 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; } else { - layerpri[2] = K055555_read_register(K55_PRIINP_6); - shdprisel = K055555_read_register(K55_SHD_PRI_SEL); + layerpri[2] = m_k055555->K055555_read_register(K55_PRIINP_6); + shdprisel = m_k055555->K055555_read_register(K55_SHD_PRI_SEL); } // 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 & 0x30)) shadowon[2] = 0; - shdpri[0] = K055555_read_register(K55_SHAD1_PRI); - shdpri[1] = K055555_read_register(K55_SHAD2_PRI); - shdpri[2] = K055555_read_register(K55_SHAD3_PRI); + shdpri[0] = m_k055555->K055555_read_register(K55_SHAD1_PRI); + shdpri[1] = m_k055555->K055555_read_register(K55_SHAD2_PRI); + shdpri[2] = m_k055555->K055555_read_register(K55_SHAD3_PRI); spri_min = 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) - 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 // update shadows status @@ -2019,8 +2019,8 @@ void konamigx_state::_gxcommoninitnosprites(running_machine &machine) { int i; - K054338_vh_start(machine); - K055555_vh_start(machine); + K054338_vh_start(machine, m_k055555); + m_k055555->K055555_vh_start(machine); konamigx_mixer_init(machine, 0); @@ -2077,7 +2077,7 @@ VIDEO_START_MEMBER(konamigx_state,konamigx_5bpp) if (!strcmp(machine().system().name,"tbyahhoo")) { - m_k056832->altK056832_set_UpdateMode(1); + m_k056832->K056832_set_k055555(m_k055555); gx_tilemode = 1; } else @@ -2134,7 +2134,7 @@ VIDEO_START_MEMBER(konamigx_state,le2) konamigx_mixer_primode(-1); // swapped layer B and C priorities? 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) @@ -2394,7 +2394,7 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 unchained = m_k056832->get_layer_association(); 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) { layer_colorbase[i] = newbase; @@ -2415,7 +2415,7 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3 if (gx_rozenable) { 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) { diff --git a/src/mame/video/mystwarr.c b/src/mame/video/mystwarr.c index d3e6b9c44d6..67aaf979ead 100644 --- a/src/mame/video/mystwarr.c +++ b/src/mame/video/mystwarr.c @@ -161,8 +161,8 @@ TILE_GET_INFO_MEMBER(mystwarr_state::get_gai_936_tile_info) VIDEO_START_MEMBER(mystwarr_state,gaiapols) { - K055555_vh_start(machine()); - K054338_vh_start(machine()); + m_k055555->K055555_vh_start(machine()); + K054338_vh_start(machine(), m_k055555); m_gametype = 0; @@ -201,8 +201,8 @@ TILE_GET_INFO_MEMBER(mystwarr_state::get_ult_936_tile_info) VIDEO_START_MEMBER(mystwarr_state,dadandrn) { - K055555_vh_start(machine()); - K054338_vh_start(machine()); + m_k055555->K055555_vh_start(machine()); + K054338_vh_start(machine(), m_k055555); m_gametype = 1; @@ -230,8 +230,8 @@ VIDEO_START_MEMBER(mystwarr_state,dadandrn) VIDEO_START_MEMBER(mystwarr_state,mystwarr) { - K055555_vh_start(machine()); - K054338_vh_start(machine()); + m_k055555->K055555_vh_start(machine()); + K054338_vh_start(machine(), m_k055555); m_gametype = 0; @@ -255,8 +255,8 @@ VIDEO_START_MEMBER(mystwarr_state,metamrph) { m_gametype = 0; - K055555_vh_start(machine()); - K054338_vh_start(machine()); + m_k055555->K055555_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); @@ -277,8 +277,8 @@ VIDEO_START_MEMBER(mystwarr_state,viostorm) { m_gametype = 0; - K055555_vh_start(machine()); - K054338_vh_start(machine()); + m_k055555->K055555_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); @@ -298,8 +298,8 @@ VIDEO_START_MEMBER(mystwarr_state,martchmp) { m_gametype = 0; - K055555_vh_start(machine()); - K054338_vh_start(machine()); + m_k055555->K055555_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); @@ -328,11 +328,11 @@ UINT32 mystwarr_state::screen_update_mystwarr(screen_device &screen, bitmap_rgb3 for (i = 0; i < 4; 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); } - 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); return 0; @@ -345,11 +345,11 @@ UINT32 mystwarr_state::screen_update_metamrph(screen_device &screen, bitmap_rgb3 for (i = 0; i < 4; 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); } - 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); return 0; @@ -362,14 +362,14 @@ UINT32 mystwarr_state::screen_update_martchmp(screen_device &screen, bitmap_rgb3 for (i = 0; i < 4; 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); } - 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_oinprion = K055555_read_register(K55_OINPRI_ON); + m_cbparam = m_k055555->K055555_read_register(K55_PRIINP_8); + m_oinprion = m_k055555->K055555_read_register(K55_OINPRI_ON); // not quite right 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) { - 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; } 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; } @@ -501,7 +501,7 @@ UINT32 mystwarr_state::screen_update_dadandrn(screen_device &screen, bitmap_rgb3 { 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) { 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++) { - newbase = K055555_get_palette_index(i)<<4; + newbase = m_k055555->K055555_get_palette_index(i)<<4; if (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_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) {