diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2012-09-20 12:00:57 +0000 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2012-09-20 12:00:57 +0000 |
commit | 086b4d97cde40f39abd66cba6cfbadf46d6b478d (patch) | |
tree | 0282d04ba048a863f27f045143ee554d26d0ece1 /src/mame/drivers/decocass.c | |
parent | 8270986acb5ea8155921bc727189aa75c40c6245 (diff) |
decocass modernized and cleaned (no whatsnew)
Diffstat (limited to 'src/mame/drivers/decocass.c')
-rw-r--r-- | src/mame/drivers/decocass.c | 152 |
1 files changed, 71 insertions, 81 deletions
diff --git a/src/mame/drivers/decocass.c b/src/mame/drivers/decocass.c index 7393720ab97..a09e0fb7819 100644 --- a/src/mame/drivers/decocass.c +++ b/src/mame/drivers/decocass.c @@ -34,7 +34,8 @@ #include "emu.h" #include "cpu/m6502/m6502.h" #include "cpu/mcs48/mcs48.h" -#include "machine/decocass.h" +#include "includes/decocass.h" +#include "machine/decocass_tape.h" #include "sound/ay8910.h" #define MASTER_CLOCK XTAL_12MHz @@ -55,124 +56,116 @@ INLINE int swap_bits_5_6(int data) return (data & 0x9f) | ((data & 0x20) << 1) | ((data & 0x40) >> 1); } -static WRITE8_HANDLER( ram_w ) +WRITE8_MEMBER(decocass_state::ram_w) { - decocass_state *state = space.machine().driver_data<decocass_state>(); - state->m_decrypted[0x0000 + offset] = swap_bits_5_6(data); - state->m_rambase[0x0000 + offset] = data; + m_decrypted[0x0000 + offset] = swap_bits_5_6(data); + m_rambase[0x0000 + offset] = data; } -static WRITE8_HANDLER( charram_w ) +WRITE8_MEMBER(decocass_state::charram_w) { - decocass_state *state = space.machine().driver_data<decocass_state>(); - state->m_decrypted[0x6000 + offset] = swap_bits_5_6(data); + m_decrypted[0x6000 + offset] = swap_bits_5_6(data); decocass_charram_w(space, offset, data); } -static WRITE8_HANDLER( fgvideoram_w ) +WRITE8_MEMBER(decocass_state::fgvideoram_w) { - decocass_state *state = space.machine().driver_data<decocass_state>(); - state->m_decrypted[0xc000 + offset] = swap_bits_5_6(data); + m_decrypted[0xc000 + offset] = swap_bits_5_6(data); decocass_fgvideoram_w(space, offset, data); } -static WRITE8_HANDLER( fgcolorram_w ) +WRITE8_MEMBER(decocass_state::fgcolorram_w) { - decocass_state *state = space.machine().driver_data<decocass_state>(); - state->m_decrypted[0xc400 + offset] = swap_bits_5_6(data); + m_decrypted[0xc400 + offset] = swap_bits_5_6(data); decocass_colorram_w(space, offset, data); } -static WRITE8_HANDLER( tileram_w ) +WRITE8_MEMBER(decocass_state::tileram_w) { - decocass_state *state = space.machine().driver_data<decocass_state>(); - state->m_decrypted[0xd000 + offset] = swap_bits_5_6(data); + m_decrypted[0xd000 + offset] = swap_bits_5_6(data); decocass_tileram_w(space, offset, data); } -static WRITE8_HANDLER( objectram_w ) +WRITE8_MEMBER(decocass_state::objectram_w) { - decocass_state *state = space.machine().driver_data<decocass_state>(); - state->m_decrypted[0xd800 + offset] = swap_bits_5_6(data); + m_decrypted[0xd800 + offset] = swap_bits_5_6(data); decocass_objectram_w(space, offset, data); } -static WRITE8_HANDLER( mirrorvideoram_w ) { offset = ((offset >> 5) & 0x1f) | ((offset & 0x1f) << 5); fgvideoram_w(space, offset, data, mem_mask); } -static WRITE8_HANDLER( mirrorcolorram_w ) { offset = ((offset >> 5) & 0x1f) | ((offset & 0x1f) << 5); fgcolorram_w(space, offset, data, mem_mask); } +WRITE8_MEMBER(decocass_state::mirrorvideoram_w) { offset = ((offset >> 5) & 0x1f) | ((offset & 0x1f) << 5); fgvideoram_w(space, offset, data, mem_mask); } +WRITE8_MEMBER(decocass_state::mirrorcolorram_w) { offset = ((offset >> 5) & 0x1f) | ((offset & 0x1f) << 5); fgcolorram_w(space, offset, data, mem_mask); } -static READ8_HANDLER( mirrorvideoram_r ) +READ8_MEMBER(decocass_state::mirrorvideoram_r) { - decocass_state *state = space.machine().driver_data<decocass_state>(); offset = ((offset >> 5) & 0x1f) | ((offset & 0x1f) << 5); - return state->m_fgvideoram[offset]; + return m_fgvideoram[offset]; } -static READ8_HANDLER( mirrorcolorram_r ) +READ8_MEMBER(decocass_state::mirrorcolorram_r) { - decocass_state *state = space.machine().driver_data<decocass_state>(); offset = ((offset >> 5) & 0x1f) | ((offset & 0x1f) << 5); - return state->m_colorram[offset]; + return m_colorram[offset]; } static ADDRESS_MAP_START( decocass_map, AS_PROGRAM, 8, decocass_state ) - AM_RANGE(0x0000, 0x5fff) AM_RAM_WRITE_LEGACY(ram_w) AM_SHARE("rambase") - AM_RANGE(0x6000, 0xbfff) AM_RAM_WRITE_LEGACY(charram_w) AM_SHARE("charram") /* still RMS3 RAM */ - AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE_LEGACY(fgvideoram_w) AM_SHARE("fgvideoram") /* DSP3 RAM */ - AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE_LEGACY(fgcolorram_w) AM_SHARE("colorram") - AM_RANGE(0xc800, 0xcbff) AM_READWRITE_LEGACY(mirrorvideoram_r, mirrorvideoram_w) - AM_RANGE(0xcc00, 0xcfff) AM_READWRITE_LEGACY(mirrorcolorram_r, mirrorcolorram_w) - AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE_LEGACY(tileram_w) AM_SHARE("tileram") - AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE_LEGACY(objectram_w) AM_SHARE("objectram") - AM_RANGE(0xe000, 0xe0ff) AM_RAM_WRITE_LEGACY(decocass_paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0xe300, 0xe300) AM_READ_PORT("DSW1") AM_WRITE_LEGACY(decocass_watchdog_count_w) - AM_RANGE(0xe301, 0xe301) AM_READ_PORT("DSW2") AM_WRITE_LEGACY(decocass_watchdog_flip_w) - AM_RANGE(0xe302, 0xe302) AM_WRITE_LEGACY(decocass_color_missiles_w) - AM_RANGE(0xe400, 0xe400) AM_WRITE_LEGACY(decocass_reset_w) + AM_RANGE(0x0000, 0x5fff) AM_RAM_WRITE(ram_w) AM_SHARE("rambase") + AM_RANGE(0x6000, 0xbfff) AM_RAM_WRITE(charram_w) AM_SHARE("charram") /* still RMS3 RAM */ + AM_RANGE(0xc000, 0xc3ff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram") /* DSP3 RAM */ + AM_RANGE(0xc400, 0xc7ff) AM_RAM_WRITE(fgcolorram_w) AM_SHARE("colorram") + AM_RANGE(0xc800, 0xcbff) AM_READWRITE(mirrorvideoram_r, mirrorvideoram_w) + AM_RANGE(0xcc00, 0xcfff) AM_READWRITE(mirrorcolorram_r, mirrorcolorram_w) + AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(tileram_w) AM_SHARE("tileram") + AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(objectram_w) AM_SHARE("objectram") + AM_RANGE(0xe000, 0xe0ff) AM_RAM_WRITE(decocass_paletteram_w) AM_SHARE("paletteram") + AM_RANGE(0xe300, 0xe300) AM_READ_PORT("DSW1") AM_WRITE(decocass_watchdog_count_w) + AM_RANGE(0xe301, 0xe301) AM_READ_PORT("DSW2") AM_WRITE(decocass_watchdog_flip_w) + AM_RANGE(0xe302, 0xe302) AM_WRITE(decocass_color_missiles_w) + AM_RANGE(0xe400, 0xe400) AM_WRITE(decocass_reset_w) /* BIO-3 board */ - AM_RANGE(0xe402, 0xe402) AM_WRITE_LEGACY(decocass_mode_set_w) - AM_RANGE(0xe403, 0xe403) AM_WRITE_LEGACY(decocass_back_h_shift_w) - AM_RANGE(0xe404, 0xe404) AM_WRITE_LEGACY(decocass_back_vl_shift_w) - AM_RANGE(0xe405, 0xe405) AM_WRITE_LEGACY(decocass_back_vr_shift_w) - AM_RANGE(0xe406, 0xe406) AM_WRITE_LEGACY(decocass_part_h_shift_w) - AM_RANGE(0xe407, 0xe407) AM_WRITE_LEGACY(decocass_part_v_shift_w) - - AM_RANGE(0xe410, 0xe410) AM_WRITE_LEGACY(decocass_color_center_bot_w) - AM_RANGE(0xe411, 0xe411) AM_WRITE_LEGACY(decocass_center_h_shift_space_w) - AM_RANGE(0xe412, 0xe412) AM_WRITE_LEGACY(decocass_center_v_shift_w) - AM_RANGE(0xe413, 0xe413) AM_WRITE_LEGACY(decocass_coin_counter_w) - AM_RANGE(0xe414, 0xe414) AM_WRITE_LEGACY(decocass_sound_command_w) - AM_RANGE(0xe415, 0xe416) AM_WRITE_LEGACY(decocass_quadrature_decoder_reset_w) - AM_RANGE(0xe417, 0xe417) AM_WRITE_LEGACY(decocass_nmi_reset_w) - AM_RANGE(0xe420, 0xe42f) AM_WRITE_LEGACY(decocass_adc_w) - - AM_RANGE(0xe500, 0xe5ff) AM_READWRITE_LEGACY(decocass_e5xx_r, decocass_e5xx_w) /* read data from 8041/status */ - - AM_RANGE(0xe600, 0xe6ff) AM_READ_LEGACY(decocass_input_r) /* inputs */ - AM_RANGE(0xe700, 0xe700) AM_READ_LEGACY(decocass_sound_data_r) /* read sound CPU data */ - AM_RANGE(0xe701, 0xe701) AM_READ_LEGACY(decocass_sound_ack_r) /* read sound CPU ack status */ + AM_RANGE(0xe402, 0xe402) AM_WRITE(decocass_mode_set_w) + AM_RANGE(0xe403, 0xe403) AM_WRITE(decocass_back_h_shift_w) + AM_RANGE(0xe404, 0xe404) AM_WRITE(decocass_back_vl_shift_w) + AM_RANGE(0xe405, 0xe405) AM_WRITE(decocass_back_vr_shift_w) + AM_RANGE(0xe406, 0xe406) AM_WRITE(decocass_part_h_shift_w) + AM_RANGE(0xe407, 0xe407) AM_WRITE(decocass_part_v_shift_w) + + AM_RANGE(0xe410, 0xe410) AM_WRITE(decocass_color_center_bot_w) + AM_RANGE(0xe411, 0xe411) AM_WRITE(decocass_center_h_shift_space_w) + AM_RANGE(0xe412, 0xe412) AM_WRITE(decocass_center_v_shift_w) + AM_RANGE(0xe413, 0xe413) AM_WRITE(decocass_coin_counter_w) + AM_RANGE(0xe414, 0xe414) AM_WRITE(decocass_sound_command_w) + AM_RANGE(0xe415, 0xe416) AM_WRITE(decocass_quadrature_decoder_reset_w) + AM_RANGE(0xe417, 0xe417) AM_WRITE(decocass_nmi_reset_w) + AM_RANGE(0xe420, 0xe42f) AM_WRITE(decocass_adc_w) + + AM_RANGE(0xe500, 0xe5ff) AM_READWRITE(decocass_e5xx_r, decocass_e5xx_w) /* read data from 8041/status */ + + AM_RANGE(0xe600, 0xe6ff) AM_READ(decocass_input_r) /* inputs */ + AM_RANGE(0xe700, 0xe700) AM_READ(decocass_sound_data_r) /* read sound CPU data */ + AM_RANGE(0xe701, 0xe701) AM_READ(decocass_sound_ack_r) /* read sound CPU ack status */ AM_RANGE(0xf000, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( decocass_sound_map, AS_PROGRAM, 8, decocass_state ) AM_RANGE(0x0000, 0x0fff) AM_RAM - AM_RANGE(0x1000, 0x17ff) AM_READWRITE_LEGACY(decocass_sound_nmi_enable_r, decocass_sound_nmi_enable_w) - AM_RANGE(0x1800, 0x1fff) AM_READWRITE_LEGACY(decocass_sound_data_ack_reset_r, decocass_sound_data_ack_reset_w) + AM_RANGE(0x1000, 0x17ff) AM_READWRITE(decocass_sound_nmi_enable_r, decocass_sound_nmi_enable_w) + AM_RANGE(0x1800, 0x1fff) AM_READWRITE(decocass_sound_data_ack_reset_r, decocass_sound_data_ack_reset_w) AM_RANGE(0x2000, 0x2fff) AM_DEVWRITE_LEGACY("ay1", ay8910_data_w) AM_RANGE(0x4000, 0x4fff) AM_DEVWRITE_LEGACY("ay1", ay8910_address_w) AM_RANGE(0x6000, 0x6fff) AM_DEVWRITE_LEGACY("ay2", ay8910_data_w) AM_RANGE(0x8000, 0x8fff) AM_DEVWRITE_LEGACY("ay2", ay8910_address_w) - AM_RANGE(0xa000, 0xafff) AM_READ_LEGACY(decocass_sound_command_r) - AM_RANGE(0xc000, 0xcfff) AM_WRITE_LEGACY(decocass_sound_data_w) + AM_RANGE(0xa000, 0xafff) AM_READ(decocass_sound_command_r) + AM_RANGE(0xc000, 0xcfff) AM_WRITE(decocass_sound_data_w) AM_RANGE(0xf800, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( decocass_mcu_portmap, AS_IO, 8, decocass_state ) - AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE_LEGACY(i8041_p1_r, i8041_p1_w) - AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE_LEGACY(i8041_p2_r, i8041_p2_w) + AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(i8041_p1_r, i8041_p1_w) + AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(i8041_p2_r, i8041_p2_w) ADDRESS_MAP_END static INPUT_PORTS_START( decocass ) @@ -1617,9 +1610,9 @@ DRIVER_INIT_MEMBER(decocass_state,decocass) save_pointer(NAME(m_decrypted), 0x10000); /* Call the state save setup code in machine/decocass.c */ - decocass_machine_state_save_init(machine()); + decocass_machine_state_save_init(); /* and in video/decocass.c, too */ - decocass_video_state_save_init(machine()); + decocass_video_state_save_init(); } DRIVER_INIT_MEMBER(decocass_state,decocrom) @@ -1639,7 +1632,7 @@ DRIVER_INIT_MEMBER(decocass_state,decocrom) /* convert charram to a banked ROM */ machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x6000, 0xafff, "bank1"); - machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x6000, 0xafff, FUNC(decocass_de0091_w)); + machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x6000, 0xafff, write8_delegate(FUNC(decocass_state::decocass_de0091_w),this)); membank("bank1")->configure_entry(0, m_charram); membank("bank1")->configure_entry(1, memregion("user3")->base()); membank("bank1")->configure_decrypted_entry(0, &m_decrypted[0x6000]); @@ -1647,14 +1640,13 @@ DRIVER_INIT_MEMBER(decocass_state,decocrom) membank("bank1")->set_entry(0); /* install the bank selector */ - machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xe900, 0xe900, FUNC(decocass_e900_w)); + machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xe900, 0xe900, write8_delegate(FUNC(decocass_state::decocass_e900_w),this)); save_pointer(NAME(m_decrypted2), romlength); } -static READ8_HANDLER( cdsteljn_input_r ) +READ8_MEMBER(decocass_state::cdsteljn_input_r ) { - decocass_state *state = space.machine().driver_data<decocass_state>(); UINT8 res; static const char *const portnames[2][4] = { {"P1_MP0", "P1_MP1", "P1_MP2", "P1_MP3"}, @@ -1663,16 +1655,14 @@ static READ8_HANDLER( cdsteljn_input_r ) if(offset & 6) return decocass_input_r(space,offset); - res = space.machine().root_device().ioport(portnames[offset & 1][state->m_mux_data])->read(); + res = machine().root_device().ioport(portnames[offset & 1][m_mux_data])->read(); return res; } -static WRITE8_HANDLER( cdsteljn_mux_w ) +WRITE8_MEMBER(decocass_state::cdsteljn_mux_w ) { - decocass_state *state = space.machine().driver_data<decocass_state>(); - - state->m_mux_data = (data & 0xc) >> 2; + m_mux_data = (data & 0xc) >> 2; /* bit 0 and 1 are p1/p2 lamps */ if(data & ~0xf) @@ -1685,8 +1675,8 @@ DRIVER_INIT_MEMBER(decocass_state,cdsteljn) DRIVER_INIT_CALL(decocass); /* install custom mahjong panel */ - machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xe413, 0xe413, FUNC(cdsteljn_mux_w)); - machine().device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xe600, 0xe6ff, FUNC(cdsteljn_input_r)); + machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0xe413, 0xe413, write8_delegate(FUNC(decocass_state::cdsteljn_mux_w), this)); + machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0xe600, 0xe6ff, read8_delegate(FUNC(decocass_state::cdsteljn_input_r), this)); } /* -- */ GAME( 1981, decocass, 0, decocass, decocass, decocass_state, decocass, ROT270, "Data East Corporation", "DECO Cassette System", GAME_IS_BIOS_ROOT ) |