diff options
author | Roberto Fresca <robbie@robertofresca.com> | 2019-04-05 21:16:48 +0200 |
---|---|---|
committer | Roberto Fresca <robbie@robertofresca.com> | 2019-04-05 21:16:48 +0200 |
commit | 216826a0dfe61c8031f45601ea2b6c15518f5106 (patch) | |
tree | dbdb32d6d788b443a82bd4768fcafb6a1068a42a | |
parent | a790d185875db2894fcc4acf3052df76bfe24712 (diff) |
Royal Card (Slovak, encrypted) improvements. [Roberto Fresca, Grull Osgo]
- Moved the royalcrdf class to the header.
- Created new memory map.
- Fixed the VRAM offsets.
-rw-r--r-- | src/mame/drivers/funworld.cpp | 66 | ||||
-rw-r--r-- | src/mame/includes/funworld.h | 23 |
2 files changed, 56 insertions, 33 deletions
diff --git a/src/mame/drivers/funworld.cpp b/src/mame/drivers/funworld.cpp index a02476ff3ce..c35eed7b890 100644 --- a/src/mame/drivers/funworld.cpp +++ b/src/mame/drivers/funworld.cpp @@ -1290,6 +1290,22 @@ void funworld_state::fw_brick_map(address_map &map) map(0xc000, 0xffff).rom(); } +void royalcrdf_state::royalcrdf_map(address_map &map) +{ + map(0x0000, 0x07ff).ram().share("nvram"); + map(0x0800, 0x0803).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x0a00, 0x0a03).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x0c00, 0x0c00).r("ay8910", FUNC(ay8910_device::data_r)); + map(0x0c00, 0x0c01).w("ay8910", FUNC(ay8910_device::address_data_w)); + map(0x0e00, 0x0e00).w("crtc", FUNC(mc6845_device::address_w)); + map(0x0e01, 0x0e01).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); + map(0x4000, 0x4fff).ram().w(FUNC(royalcrdf_state::funworld_videoram_w)).share("videoram"); + map(0x5000, 0x5fff).ram().w(FUNC(royalcrdf_state::funworld_colorram_w)).share("colorram"); + map(0x8000, 0xbfff).rom(); + map(0xc000, 0xffff).rom(); +} + + /************************* * Input ports * *************************/ @@ -3146,8 +3162,10 @@ void funworld_state::fw1stpal(machine_config &config) void funworld_state::fw2ndpal(machine_config &config) { fw1stpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::funworld_map); + m_gfxdecode->set_info(gfx_fw2ndpal); } @@ -3155,12 +3173,12 @@ void funworld_state::fw2ndpal(machine_config &config) void funworld_state::funquiz(machine_config &config) { - fw1stpal(config); -// fw2ndpal(config); + fw1stpal(config); // gray background. +// fw2ndpal(config); // blue background. + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::funquiz_map); - subdevice<ay8910_device>("ay8910")->port_a_read_callback().set(FUNC(funworld_state::funquiz_ay8910_a_r)); subdevice<ay8910_device>("ay8910")->port_b_read_callback().set(FUNC(funworld_state::funquiz_ay8910_b_r)); } @@ -3185,6 +3203,7 @@ void magicrd2_state::magicrd2(machine_config &config) void funworld_state::royalcd1(machine_config &config) { fw1stpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* (G65SC02P in pro version) 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::magicrd2_map); } @@ -3193,6 +3212,7 @@ void funworld_state::royalcd1(machine_config &config) void funworld_state::royalcd2(machine_config &config) { fw2ndpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::magicrd2_map); } @@ -3201,6 +3221,7 @@ void funworld_state::royalcd2(machine_config &config) void funworld_state::cuoreuno(machine_config &config) { fw1stpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::cuoreuno_map); } @@ -3209,8 +3230,10 @@ void funworld_state::cuoreuno(machine_config &config) void funworld_state::saloon(machine_config &config) { fw1stpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::saloon_map); + config.device_remove("pia0"); config.device_remove("pia1"); } @@ -3219,6 +3242,7 @@ void funworld_state::saloon(machine_config &config) void funworld_state::witchryl(machine_config &config) { fw1stpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::witchryl_map); } @@ -3227,6 +3251,7 @@ void funworld_state::witchryl(machine_config &config) void lunapark_state::lunapark(machine_config &config) { fw1stpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &lunapark_state::lunapark_map); // mirrored video RAM (4000/5000 to 6000/7000). } @@ -3235,6 +3260,7 @@ void lunapark_state::lunapark(machine_config &config) void chinatow_state::chinatow(machine_config &config) { fw2ndpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &chinatow_state::chinatow_map); } @@ -3242,6 +3268,7 @@ void chinatow_state::chinatow(machine_config &config) void chinatow_state::rcdino4(machine_config &config) { fw1stpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &chinatow_state::chinatow_map); } @@ -3250,8 +3277,10 @@ void chinatow_state::rcdino4(machine_config &config) void funworld_state::intrgmes(machine_config &config) { fw1stpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::intergames_map); + m_gfxdecode->set_info(gfx_fw2ndpal); } @@ -3259,43 +3288,24 @@ void funworld_state::intrgmes(machine_config &config) void funworld_state::fw_brick_1(machine_config &config) { fw1stpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_brick_map); + NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0); -// m_gfxdecode->set_info(gfx_fw2ndpal); } void funworld_state::fw_brick_2(machine_config &config) { fw2ndpal(config); + R65C02(config.replace(), m_maincpu, CPU_CLOCK); /* 2MHz */ m_maincpu->set_addrmap(AS_PROGRAM, &funworld_state::fw_brick_map); + NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0); -// m_gfxdecode->set_info(gfx_fw2ndpal); } -// TO-DO: clean up and relocate, when convenient, all the opcode-encryption stuff - -class royalcrdf_state : public funworld_state -{ -public: - royalcrdf_state(const machine_config &mconfig, device_type type, const char* tag) - : funworld_state(mconfig, type, tag) - { - } - - void royalcrdf(machine_config& config); - - void driver_init() override; - -private: - cpu_device* _maincpu {}; - DECLARE_READ8_MEMBER(royalcrdf_opcode_r); - - void royalcrdf_opcodes_map(address_map& map); -}; - READ8_MEMBER(royalcrdf_state::royalcrdf_opcode_r) { // address-based data bitswap; 4 address bits are involved, but only @@ -3357,7 +3367,9 @@ void royalcrdf_state::driver_init() void royalcrdf_state::royalcrdf(machine_config &config) { fw1stpal(config); - + + m_maincpu->set_addrmap(AS_PROGRAM, &royalcrdf_state::royalcrdf_map); + _maincpu = reinterpret_cast<cpu_device*>(config.device("maincpu")); _maincpu->set_addrmap(AS_OPCODES, &royalcrdf_state::royalcrdf_opcodes_map); } diff --git a/src/mame/includes/funworld.h b/src/mame/includes/funworld.h index 50002677e53..97f5ba7ef9a 100644 --- a/src/mame/includes/funworld.h +++ b/src/mame/includes/funworld.h @@ -139,12 +139,6 @@ class multiwin_state : public funworld_state public: using funworld_state::funworld_state; -/* - multiwin_state(const machine_config &mconfig, device_type type, const char* tag) - : funworld_state(mconfig, type, tag) - { - } -*/ void multiwin(machine_config& config); @@ -160,5 +154,22 @@ private: void multiwin_opcodes_map(address_map& map); }; +class royalcrdf_state : public funworld_state +{ +public: + + using funworld_state::funworld_state; + + void royalcrdf(machine_config& config); + + void driver_init() override; + +private: + cpu_device* _maincpu {}; + DECLARE_READ8_MEMBER(royalcrdf_opcode_r); + + void royalcrdf_map(address_map& map); + void royalcrdf_opcodes_map(address_map& map); +}; #endif // MAME_INCLUDES_FUNWORLD_H
\ No newline at end of file |