From df362dac50f99c7b8d9e9d6a8d1f43597beab201 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 31 Dec 2022 17:04:54 +0100 Subject: megaphx: remove ppi reset workaround, remove vector table ram copy workaround --- src/mame/misc/megaphx.cpp | 255 +++++++++++++++++++++++--------------------- src/mame/shared/inder_vid.h | 1 + 2 files changed, 133 insertions(+), 123 deletions(-) diff --git a/src/mame/misc/megaphx.cpp b/src/mame/misc/megaphx.cpp index a67c916a0ed..885a616d986 100644 --- a/src/mame/misc/megaphx.cpp +++ b/src/mame/misc/megaphx.cpp @@ -1,53 +1,49 @@ // license: BSD-3-Clause // copyright-holders: David Haywood, Dirk Best /* - Dinamic / Inder arcade hardware - Mega Phoenix - Hammer Boy +Dinamic / Inder arcade hardware +- Mega Phoenix +- Hammer Boy +- YoYo Spell - also known to exist on this hardware: - Nonamed 2 (ever finished? only code seen has 1991 date and is vastly incomplete) (versions exist for Amstrad CPC, MSX and Spectrum) - After The War +also known to exist on this hardware: +- Nonamed 2 (ever finished? only code seen has 1991 date and is vastly incomplete) + (versions exist for Amstrad CPC, MSX and Spectrum) +- After The War +trivia: Test mode graphics are the same as Little Robin(?!), TMS is very similar too, +suggesting they share a common codebase. - trivia: Test mode graphics are the same as Little Robin(?!), TMS is very similar too, suggesting they share a common codebase. +PIC16C54 info: +- The PIC has 5 functions: + * Read dip switches (serially connected) [cmd 0x82 0x86] + * Read the two start buttons [returned with all commands] + * Provide 4 security codes. For the dumped PIC those are: + 0x4a 0x6f 0x61 0x6e (Joan). Not used by Mega Phoenix. [cmd 0x8a 0x8e 0x92 0x96] + * Watchdog enable. Not used by Mega Phoenix. [cmd 9a] + * Provide PIC software version to the game. This is 0x11 here. [all other cmds] +- Communication with the game is achieved using a 8255 PPI on port C that is + connected serially to the PIC. For port assignments see the code below. +- The game sends an 8-bit command. After each bit, the PIC sends an answer bit. + The start buttons are always bits 2 and 3 here. +- All sent commands look like this: 1ccccc10 +- After the command was received, the PIC will send an additional 8 bits + with the result. - PIC16C54 info: - - The PIC has 5 functions: - * Read dip switches (serially connected) [cmd 0x82 0x86] - * Read the two start buttons [returned with all commands] - * Provide 4 security codes. For the dumped PIC those are: - 0x4a 0x6f 0x61 0x6e (Joan). Not used by Mega Phoenix. [cmd 0x8a 0x8e 0x92 0x96] - * Watchdog enable. Not used by Mega Phoenix. [cmd 9a] - * Provide PIC software version to the game. This is 0x11 here. [all other cmds] - - Communication with the game is achieved using a 8255 PPI on port C that is - connected serially to the PIC. For port assignments see the code below. - - The game sends an 8-bit command. After each bit, the PIC sends an answer bit. - The start buttons are always bits 2 and 3 here. - - All sent commands look like this: 1ccccc10 - - After the command was received, the PIC will send an additional 8 bits - with the result. +TODO: +- how does sound banking work? when the irq callbacks happen for each irq level? currently no way + to access this because it's a daisy chain setup with the ctc? +- even if i hack that the title screen speech doesn't work properly - is there a timing register like little robin? +- Verify when m_ppi_to_pic_command is set and cleared. It's currently guessed but seems to work fine this way. +---------------------------------------- - ToDo: - - where should roms 6/7 map, they contain the 68k vectors, but the game expects RAM at 0, and it doesn't seem to read any of the other data from those roms.. they contain - a cross hatch pattern amongst other things? - Sound: - - how does banking work? when the irq callbacks happen for each irq level? currently no way to access this because it's a daisy chain setup with the ctc? - - even if i hack that the title screen speech doesn't work properly - is there a timing register like little robin? - I/O: - - Verify when m_ppi_to_pic_command is set and cleared. It's currently guessed but seems to work fine this way. +Chips of note - - -- - - - Chips of note - - Main board: +Main board: TS68000CP8 TMS34010FNL-40 @@ -59,7 +55,7 @@ 2x 8 DSW, bottom corner, away from everything.. - Sub / Sound board: +Sub / Sound board: ST Z8430AB1 @@ -70,102 +66,109 @@ LA MANIPULCION DE LA ETIQUETA O DE LA PLACA ANULA SU SARANTIA (this sticker is also present on the other PCB) - */ #include "emu.h" + #include "cpu/m68000/m68000.h" #include "cpu/pic16c5x/pic16c5x.h" #include "machine/74166.h" #include "machine/i8255.h" + #include "inder_sb.h" #include "inder_vid.h" - +namespace { class megaphx_state : public driver_device { public: - megaphx_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_indervid(*this, "inder_vid"), + megaphx_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_mainram(*this, "mainram"), + m_bootrom(*this, "boot"), + m_indervid(*this, "inder_vid"), m_indersb(*this, "inder_sb"), m_ppi(*this, "ppi8255_0"), m_dsw_shifter(*this, "ttl166_%u", 1U), - m_dsw_data(0), - m_ppi_to_pic_command(0), m_ppi_to_pic_clock(0), m_ppi_to_pic_data(0), - m_pic_to_ppi_clock(0), m_pic_to_ppi_data(0) + m_start(*this, "START") { } void megaphx(machine_config &config); - - void init_megaphx(); + void hamboy(machine_config &config); protected: virtual void machine_start() override; virtual void machine_reset() override; +private: + required_device m_maincpu; + required_shared_ptr m_mainram; + required_region_ptr m_bootrom; required_device m_indervid; + required_device m_indersb; + required_device m_ppi; + required_device_array m_dsw_shifter; + required_ioport m_start; -private: uint8_t pic_porta_r(); void pic_porta_w(uint8_t data); uint8_t pic_portb_r(); void pic_portb_w(uint8_t data); uint8_t ppi_portc_r(); void ppi_portc_w(uint8_t data); - DECLARE_WRITE_LINE_MEMBER(dsw_w); + void dsw_w(int state) { m_dsw_data = state; } void megaphx_68k_map(address_map &map); - required_device m_maincpu; - required_shared_ptr m_mainram; - required_device m_indersb; - required_device m_ppi; - required_device_array m_dsw_shifter; + void install_bootrom(bool enable); + TIMER_CALLBACK_MEMBER(disable_bootrom) { install_bootrom(false); } + emu_timer *m_disable_bootrom = nullptr; - int m_dsw_data; - int m_ppi_to_pic_command; - int m_ppi_to_pic_clock; - int m_ppi_to_pic_data; - int m_pic_to_ppi_clock; - int m_pic_to_ppi_data; -}; - -class hamboy_state : public megaphx_state -{ -public: - hamboy_state(const machine_config &mconfig, device_type type, const char *tag) - : megaphx_state(mconfig, type, tag) - { } - -protected: - virtual void machine_reset() override; + int m_dsw_data = 0; + int m_ppi_to_pic_command = 0; + int m_ppi_to_pic_clock = 0; + int m_ppi_to_pic_data = 0; + int m_pic_to_ppi_clock = 0; + int m_pic_to_ppi_data = 0; }; void megaphx_state::machine_start() { - uint16_t *src = (uint16_t*)memregion( "boot" )->base(); - // copy vector table? - it must be writable because the game write the irq vector.. - memcpy(m_mainram, src, 0x80); + m_disable_bootrom = timer_alloc(FUNC(megaphx_state::disable_bootrom), this); + + save_item(NAME(m_dsw_data)); + save_item(NAME(m_ppi_to_pic_command)); + save_item(NAME(m_ppi_to_pic_clock)); + save_item(NAME(m_ppi_to_pic_data)); + save_item(NAME(m_pic_to_ppi_clock)); + save_item(NAME(m_pic_to_ppi_data)); } void megaphx_state::machine_reset() { - m_indervid->set_bpp(8); + install_bootrom(true); + m_disable_bootrom->adjust(m_maincpu->cycles_to_attotime(50)); } -void hamboy_state::machine_reset() +void megaphx_state::install_bootrom(bool enable) { - m_indervid->set_bpp(4); + address_space &program = m_maincpu->space(AS_PROGRAM); + program.unmap_readwrite(0, std::max(m_bootrom.bytes(), m_mainram.bytes()) - 1); + + // bootrom bankswitch + if (enable) + program.install_rom(0, m_bootrom.bytes() - 1, m_bootrom); + else + program.install_ram(0, m_mainram.bytes() - 1, m_mainram); } + + void megaphx_state::megaphx_68k_map(address_map &map) { - map(0x000000, 0x03ffff).rom().region("boot", 0x00000); // or the rom doesn't map here? it contains the service mode grid amongst other things.. - map(0x000000, 0x00ffff).ram().share("mainram"); // maps over part of the rom?? + map(0x000000, 0x00ffff).ram().share(m_mainram); map(0x040000, 0x040007).rw("inder_vid:tms", FUNC(tms34010_device::host_r), FUNC(tms34010_device::host_w)); map(0x050000, 0x050001).w(m_indersb, FUNC(inder_sb_device::megaphx_0x050000_w)); map(0x050002, 0x050003).r(m_indersb, FUNC(inder_sb_device::megaphx_0x050002_r)); @@ -176,7 +179,6 @@ void megaphx_state::megaphx_68k_map(address_map &map) - static INPUT_PORTS_START( megaphx ) PORT_START("P1") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(1) // shield @@ -246,6 +248,7 @@ static INPUT_PORTS_START( megaphx ) PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW2:!8") INPUT_PORTS_END + static INPUT_PORTS_START( hamboy ) PORT_INCLUDE(megaphx) @@ -306,7 +309,6 @@ INPUT_PORTS_END - // pic port a // // 3--- r serial clock @@ -350,14 +352,13 @@ uint8_t megaphx_state::pic_portb_r() data |= m_ppi_to_pic_command << 0; data |= m_dsw_data << 1; - data |= ioport("START")->read() << 4; + data |= m_start->read() << 4 & 0x30; return data; } void megaphx_state::pic_portb_w(uint8_t data) { - m_dsw_shifter[0]->shift_load_w(BIT(data, 2)); m_dsw_shifter[1]->shift_load_w(BIT(data, 2)); m_dsw_shifter[0]->clock_w(BIT(data, 3)); @@ -387,10 +388,6 @@ uint8_t megaphx_state::ppi_portc_r() void megaphx_state::ppi_portc_w(uint8_t data) { - // avoid bogus write on reset - if (data == 0xff) - return; - // only set, don't clear here. otherwise the pic has no chance to pick it up if (BIT(data, 4)) m_ppi_to_pic_command = BIT(data, 4); @@ -399,10 +396,7 @@ void megaphx_state::ppi_portc_w(uint8_t data) m_ppi_to_pic_clock = BIT(data, 7); } -WRITE_LINE_MEMBER( megaphx_state::dsw_w ) -{ - m_dsw_data = state; -} + void megaphx_state::megaphx(machine_config &config) { @@ -430,14 +424,24 @@ void megaphx_state::megaphx(machine_config &config) m_ppi->in_pb_callback().set_ioport("P2"); m_ppi->in_pc_callback().set(FUNC(megaphx_state::ppi_portc_r)); m_ppi->out_pc_callback().set(FUNC(megaphx_state::ppi_portc_w)); + m_ppi->tri_pc_callback().set_constant(0); INDER_VIDEO(config, m_indervid, 0); INDER_AUDIO(config, "inder_sb", 0); } +void megaphx_state::hamboy(machine_config &config) +{ + megaphx(config); + + m_indervid->set_bpp(4); +} + + + ROM_START( megaphx ) - ROM_REGION16_BE( 0x40000, "boot", 0 ) // the majority of the data in these does not get used?! (only the vector table) is it just garbage?? + ROM_REGION16_BE( 0x40000, "boot", 0 ) // the majority of the data in these does not get used?! (only the vector table) is it just garbage?? ROM_LOAD16_BYTE( "mph6.u32", 0x000001, 0x20000, CRC(b99703d4) SHA1(393b6869e71d4c61060e66e0e9e36a1e6ca345d1) ) ROM_LOAD16_BYTE( "mph7.u21", 0x000000, 0x20000, CRC(f11e7449) SHA1(1017142d10011d68e49d3ccdb1ac4e815c03b17a) ) @@ -465,27 +469,28 @@ ROM_START( megaphx ) ROM_LOAD( "p40_u29_palce16v8h-25.jed", 0x000, 0xbd4, BAD_DUMP CRC(44b7e51c) SHA1(b8b34f3b319d664ec3ad72ed87d9f65701f183a5) ) ROM_END + ROM_START( hamboy ) - ROM_REGION16_BE( 0x40000, "boot", 0 ) // these only contain the boot vectors(!) - ROM_LOAD16_BYTE( "hb8 - u32.bin", 0x000001, 0x20000, CRC(4f7b142a) SHA1(e6e6cb05672e4f99def69be2f4cbc56f5d37f226) ) - ROM_LOAD16_BYTE( "hb9 - u21.bin", 0x000000, 0x20000, CRC(138e294f) SHA1(671b34395f0773889ddf6aa1f4291df981d1b059) ) + ROM_REGION16_BE( 0x40000, "boot", 0 ) // these only contain the boot vectors(!) + ROM_LOAD16_BYTE( "hb8.u32", 0x000001, 0x20000, CRC(4f7b142a) SHA1(e6e6cb05672e4f99def69be2f4cbc56f5d37f226) ) + ROM_LOAD16_BYTE( "hb9.u21", 0x000000, 0x20000, CRC(138e294f) SHA1(671b34395f0773889ddf6aa1f4291df981d1b059) ) ROM_REGION16_BE( 0x100000, "data", 0 ) - ROM_LOAD16_BYTE( "hb0 - u38.bin", 0x000001, 0x20000, CRC(b946a47f) SHA1(7f78a198fa3c5a00c124ab62473da4cddc0ac31f) ) - ROM_LOAD16_BYTE( "hb1 - u27.bin", 0x000000, 0x20000, CRC(890e1571) SHA1(e4a50a1849e9bc9853070da160e042f13737d8d2) ) - ROM_LOAD16_BYTE( "hb2 - u37.bin", 0x040001, 0x20000, CRC(b71b0aad) SHA1(fb2525a1581e6aa9a60ce76a09947b8d1941951c) ) - ROM_LOAD16_BYTE( "hb3 - u26.bin", 0x040000, 0x20000, CRC(1d0d61b9) SHA1(d747c8c31a81364d85ac00c50cefd695868d916d) ) - ROM_LOAD16_BYTE( "hb4 - u36.bin", 0x080001, 0x20000, CRC(9b81948e) SHA1(9e8bbee7f19e97d81205add7dbe89b353c6ab25a) ) - ROM_LOAD16_BYTE( "hb5 - u25.bin", 0x080000, 0x20000, CRC(23885e08) SHA1(f0233e3e007715d1b0b94fd52ffb597d667dc818) ) - ROM_LOAD16_BYTE( "hb6 - u35.bin", 0x0c0001, 0x20000, CRC(0c479648) SHA1(a07947b0b4e526b853782545bfdf73effa6c6579) ) - ROM_LOAD16_BYTE( "hb7 - u24.bin", 0x0c0000, 0x20000, CRC(297a6944) SHA1(7c5c66412db7905b0302a4e451fc20c20233990e) ) + ROM_LOAD16_BYTE( "hb0.u38", 0x000001, 0x20000, CRC(b946a47f) SHA1(7f78a198fa3c5a00c124ab62473da4cddc0ac31f) ) + ROM_LOAD16_BYTE( "hb1.u27", 0x000000, 0x20000, CRC(890e1571) SHA1(e4a50a1849e9bc9853070da160e042f13737d8d2) ) + ROM_LOAD16_BYTE( "hb2.u37", 0x040001, 0x20000, CRC(b71b0aad) SHA1(fb2525a1581e6aa9a60ce76a09947b8d1941951c) ) + ROM_LOAD16_BYTE( "hb3.u26", 0x040000, 0x20000, CRC(1d0d61b9) SHA1(d747c8c31a81364d85ac00c50cefd695868d916d) ) + ROM_LOAD16_BYTE( "hb4.u36", 0x080001, 0x20000, CRC(9b81948e) SHA1(9e8bbee7f19e97d81205add7dbe89b353c6ab25a) ) + ROM_LOAD16_BYTE( "hb5.u25", 0x080000, 0x20000, CRC(23885e08) SHA1(f0233e3e007715d1b0b94fd52ffb597d667dc818) ) + ROM_LOAD16_BYTE( "hb6.u35", 0x0c0001, 0x20000, CRC(0c479648) SHA1(a07947b0b4e526b853782545bfdf73effa6c6579) ) + ROM_LOAD16_BYTE( "hb7.u24", 0x0c0000, 0x20000, CRC(297a6944) SHA1(7c5c66412db7905b0302a4e451fc20c20233990e) ) ROM_REGION( 0x200000, "inder_sb:user2", 0 ) - ROM_LOAD( "sonido hammerboy 0 - u39.bin", 0x00000, 0x20000, CRC(8d94ac97) SHA1(3447e4b5670880a9b222cba84f5630e8ed42c2d3) ) - ROM_LOAD( "sonido hammerboy 1 - u38.bin", 0x20000, 0x20000, CRC(f92e5098) SHA1(10c869c7b1250a119bf201bfc8c586e9340c2a66) ) + ROM_LOAD( "sonido_hammerboy_0.u39", 0x00000, 0x20000, CRC(8d94ac97) SHA1(3447e4b5670880a9b222cba84f5630e8ed42c2d3) ) + ROM_LOAD( "sonido_hammerboy_1.u38", 0x20000, 0x20000, CRC(f92e5098) SHA1(10c869c7b1250a119bf201bfc8c586e9340c2a66) ) ROM_REGION( 0x100000, "inder_sb:audiocpu", 0 ) - ROM_LOAD( "hammerboy - u35.bin", 0x000000, 0x2000, CRC(cd22f2a4) SHA1(c5cf5b1ce528412493e2b5f565ed38e3e9123d37) ) + ROM_LOAD( "hammerboy.u35", 0x000000, 0x2000, CRC(cd22f2a4) SHA1(c5cf5b1ce528412493e2b5f565ed38e3e9123d37) ) ROM_REGION( 0x100000, "pic", 0 ) ROM_LOAD( "pic16c54-xt.bin", 0x000000, 0x430, CRC(21f396fb) SHA1(c8badb9b3681e684bced0ced1de4c3a15641de8b) ) @@ -495,25 +500,25 @@ ROM_END ROM_START( yoyospel ) ROM_REGION16_BE( 0x40000, "boot", 0 ) - ROM_LOAD16_BYTE( "yoyo9.010", 0x000000, 0x20000, CRC(7de27e36) SHA1(a32e79ab5a6c55df0056710c05ef714e25eda3d4) ) - ROM_LOAD16_BYTE( "yoyo8.010", 0x000001, 0x20000, CRC(9f350036) SHA1(be42ced534faf850f0b2780d77dda7df9b08cdcc) ) + ROM_LOAD16_BYTE( "yo-yo_9.u32", 0x000000, 0x20000, CRC(7de27e36) SHA1(a32e79ab5a6c55df0056710c05ef714e25eda3d4) ) + ROM_LOAD16_BYTE( "yo-yo_8.u21", 0x000001, 0x20000, CRC(9f350036) SHA1(be42ced534faf850f0b2780d77dda7df9b08cdcc) ) ROM_REGION16_BE( 0x100000, "data", 0 ) - ROM_LOAD16_BYTE( "yoyo1.010", 0x000001, 0x20000, CRC(3f09bbf3) SHA1(842a1d11090c91f8b1d14b209d51da4323c82894) ) - ROM_LOAD16_BYTE( "yoyo0.010", 0x000000, 0x20000, CRC(5aeeac9a) SHA1(a3b149fb92075d19aaf9bcd3319d9ae32208fac2) ) - ROM_LOAD16_BYTE( "yoyo3.010", 0x040001, 0x20000, CRC(1af108b9) SHA1(36e2d6044781e2b0d37003418eae02b949d3758a) ) - ROM_LOAD16_BYTE( "yoyo2.010", 0x040000, 0x20000, CRC(f578e99b) SHA1(026b6a243ef3ab345ff6be8bad679f64a081b768) ) - ROM_LOAD16_BYTE( "yoyo5.010", 0x080001, 0x20000, CRC(d1ebd4a4) SHA1(c19bbd39456394acc4d72c0d6cb5eeda50701def) ) - ROM_LOAD16_BYTE( "yoyo4.010", 0x080000, 0x20000, CRC(7e3219c6) SHA1(15c9bb1a3ff8e48e1d9a3fb50293d083a54b705c) ) - ROM_LOAD16_BYTE( "yoyo7.010", 0x0c0001, 0x20000, CRC(3139630c) SHA1(39992169bc65590edb209b516af59206ab9f550a) ) - ROM_LOAD16_BYTE( "yoyo6.010", 0x0c0000, 0x20000, CRC(b1066c4c) SHA1(eb0c95eeaf1e4b57d1bb08b110951ba044300361) ) + ROM_LOAD16_BYTE( "yo-yo_1.u38", 0x000001, 0x20000, CRC(3f09bbf3) SHA1(842a1d11090c91f8b1d14b209d51da4323c82894) ) + ROM_LOAD16_BYTE( "yo-yo_0.u27", 0x000000, 0x20000, CRC(5aeeac9a) SHA1(a3b149fb92075d19aaf9bcd3319d9ae32208fac2) ) + ROM_LOAD16_BYTE( "yo-yo_3.u37", 0x040001, 0x20000, CRC(1af108b9) SHA1(36e2d6044781e2b0d37003418eae02b949d3758a) ) + ROM_LOAD16_BYTE( "yo-yo_2.u26", 0x040000, 0x20000, CRC(f578e99b) SHA1(026b6a243ef3ab345ff6be8bad679f64a081b768) ) + ROM_LOAD16_BYTE( "yo-yo_5.u36", 0x080001, 0x20000, CRC(d1ebd4a4) SHA1(c19bbd39456394acc4d72c0d6cb5eeda50701def) ) + ROM_LOAD16_BYTE( "yo-yo_4.u25", 0x080000, 0x20000, CRC(7e3219c6) SHA1(15c9bb1a3ff8e48e1d9a3fb50293d083a54b705c) ) + ROM_LOAD16_BYTE( "yo-yo_7.u35", 0x0c0001, 0x20000, CRC(3139630c) SHA1(39992169bc65590edb209b516af59206ab9f550a) ) + ROM_LOAD16_BYTE( "yo-yo_6.u24", 0x0c0000, 0x20000, CRC(b1066c4c) SHA1(eb0c95eeaf1e4b57d1bb08b110951ba044300361) ) ROM_REGION( 0x200000, "inder_sb:user2", 0 ) - ROM_LOAD( "yoyo-som1.010", 0x00000, 0x20000, CRC(a075806e) SHA1(e0cf67cd22651a450646a35c87dffbf057dc5c21) ) - ROM_LOAD( "yoyo-som2.010", 0x20000, 0x20000, CRC(b31ad4a1) SHA1(a464301cf8ca152c23fb206eb52ba0910e1fd02e) ) + ROM_LOAD( "yo-yo_son_1.u39", 0x00000, 0x20000, CRC(a075806e) SHA1(e0cf67cd22651a450646a35c87dffbf057dc5c21) ) + ROM_LOAD( "yo-yo_son_2.u38", 0x20000, 0x20000, CRC(b31ad4a1) SHA1(a464301cf8ca152c23fb206eb52ba0910e1fd02e) ) ROM_REGION( 0x100000, "inder_sb:audiocpu", 0 ) - ROM_LOAD( "yoyo-som0.064", 0x000000, 0x2000, CRC(7f9a2dcf) SHA1(37a28fedc690e0486c13eb85c20610e695d7dce3) ) + ROM_LOAD( "yo-yo_son_0.u35", 0x000000, 0x2000, CRC(7f9a2dcf) SHA1(37a28fedc690e0486c13eb85c20610e695d7dce3) ) ROM_REGION( 0x100000, "pic", 0 ) ROM_LOAD( "pic16c54-xt.bin", 0x000000, 0x430, CRC(21f396fb) SHA1(c8badb9b3681e684bced0ced1de4c3a15641de8b) ) @@ -524,8 +529,12 @@ ROM_START( yoyospel ) ROM_LOAD( "p40_u29_palce16v8h-25.jed", 0x000, 0xbd4, NO_DUMP ) ROM_END +} // anonymous namespace + + + +GAME( 1991, megaphx, 0, megaphx, megaphx, megaphx_state, empty_init, ROT0, "Dinamic / Inder", "Mega Phoenix", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1990, hamboy, 0, hamboy, hamboy, megaphx_state, empty_init, ROT0, "Dinamic / Inder", "Hammer Boy", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) -GAME( 1991, megaphx, 0, megaphx, megaphx, megaphx_state, empty_init, ROT0, "Dinamic / Inder", "Mega Phoenix", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1990, hamboy, 0, megaphx, hamboy, hamboy_state, empty_init, ROT0, "Dinamic / Inder", "Hammer Boy", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // This game would later become Little Robin, although this early version has significant design differences. The game has no music, probably not an emulation problem. -GAME( 1992, yoyospel, littlerb, megaphx, yoyospel,megaphx_state, empty_init, ROT0, "Inder", "YoYo Spell (prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +GAME( 1992, yoyospel, littlerb, megaphx, yoyospel,megaphx_state, empty_init, ROT0, "Inder", "YoYo Spell (prototype)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/shared/inder_vid.h b/src/mame/shared/inder_vid.h index d827230fd76..cfd3cf513a0 100644 --- a/src/mame/shared/inder_vid.h +++ b/src/mame/shared/inder_vid.h @@ -34,6 +34,7 @@ public: void megaphx_tms_map(address_map &map); void ramdac_map(address_map &map); + protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; -- cgit v1.2.3