megaphx: remove ppi reset workaround, remove vector table ram copy workaround

This commit is contained in:
hap 2022-12-31 17:04:54 +01:00
parent 17443dc5b0
commit df362dac50
2 changed files with 135 additions and 125 deletions

View File

@ -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;
required_device<inder_vid_device> m_indervid;
private:
required_device<cpu_device> m_maincpu;
required_shared_ptr<uint16_t> m_mainram;
required_region_ptr<uint16_t> m_bootrom;
required_device<inder_vid_device> m_indervid;
required_device<inder_sb_device> m_indersb;
required_device<i8255_device> m_ppi;
required_device_array<ttl166_device, 2> m_dsw_shifter;
required_ioport m_start;
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<cpu_device> m_maincpu;
required_shared_ptr<uint16_t> m_mainram;
required_device<inder_sb_device> m_indersb;
required_device<i8255_device> m_ppi;
required_device_array<ttl166_device, 2> 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 )

View File

@ -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;