New working clones

------------------
Rastan Saga (bootleg, Japan Rev 1, earlier code base) [Fabrice Arzeno]

timeplt.cpp: added a note about a spaceplta PCB with a char ROM taken from the original [Trol]
This commit is contained in:
Ivan Vangelista 2022-01-14 17:55:38 +01:00
parent 367e7540b6
commit 20f5832682
6 changed files with 208 additions and 202 deletions

View File

@ -4114,8 +4114,6 @@ files {
MAME_DIR .. "src/mame/includes/rbisland.h", MAME_DIR .. "src/mame/includes/rbisland.h",
MAME_DIR .. "src/mame/video/rbisland.cpp", MAME_DIR .. "src/mame/video/rbisland.cpp",
MAME_DIR .. "src/mame/drivers/rastan.cpp", MAME_DIR .. "src/mame/drivers/rastan.cpp",
MAME_DIR .. "src/mame/includes/rastan.h",
MAME_DIR .. "src/mame/video/rastan.cpp",
MAME_DIR .. "src/mame/drivers/retofinv.cpp", MAME_DIR .. "src/mame/drivers/retofinv.cpp",
MAME_DIR .. "src/mame/includes/retofinv.h", MAME_DIR .. "src/mame/includes/retofinv.h",
MAME_DIR .. "src/mame/video/retofinv.cpp", MAME_DIR .. "src/mame/video/retofinv.cpp",

View File

@ -72,11 +72,6 @@ Address Dir Data Name Description
[1] Schematics also show a YM3526 that can replace the YM2151 [1] Schematics also show a YM3526 that can replace the YM2151
Notes:
- For sound communication, we are using code in audio/taitosnd.c, which
claims to be for the TC0140SYT chip. That chip is not present in Rastan,
the communication is handled by PC060HA, which I guess is compatible.
TODO: TODO:
- Unknown writes to 0x350008. - Unknown writes to 0x350008.
@ -147,7 +142,7 @@ Stephh's notes (based on the game M68000 code and some tests) :
- Different way to handle coins insertion ? See additional code at 0x039f00 - Different way to handle coins insertion ? See additional code at 0x039f00
- Same other notes as for 'rastan' - Same other notes as for 'rastan'
Note: The 'rastsagaa' set's rom numbers were named as RSxx_37 through RSxx_42 Note: The 'rastsagaa' set's ROM numbers were named as RSxx_37 through RSxx_42
skipping RSxx_41. It's doubtful that Taito would reuse those numbers in skipping RSxx_41. It's doubtful that Taito would reuse those numbers in
2 different sets with different data/code. The names have been corrected 2 different sets with different data/code. The names have been corrected
to known files names where the code matched. to known files names where the code matched.
@ -155,26 +150,121 @@ Note: The 'rastsagaa' set's rom numbers were named as RSxx_37 through RSxx_42
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
#include "includes/rastan.h"
#include "includes/taitoipt.h"
#include "audio/taitosnd.h" #include "audio/taitosnd.h"
#include "includes/taitoipt.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/74157.h"
#include "machine/watchdog.h" #include "machine/watchdog.h"
#include "sound/msm5205.h" #include "sound/msm5205.h"
#include "sound/ymopm.h" #include "sound/ymopm.h"
#include "video/pc080sn.h"
#include "video/pc090oj.h"
#include "emupal.h" #include "emupal.h"
#include "screen.h" #include "screen.h"
#include "speaker.h" #include "speaker.h"
namespace {
class rastan_state : public driver_device
{
public:
rastan_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_audiobank(*this, "audiobank"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_msm(*this, "msm"),
m_adpcm_sel(*this, "adpcm_sel"),
m_adpcm_data(*this, "adpcm"),
m_pc080sn(*this, "pc080sn"),
m_pc090oj(*this, "pc090oj")
{ }
void rastan(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
required_memory_bank m_audiobank;
// video-related
u16 m_sprite_ctrl;
u16 m_sprites_flipscreen;
// misc
u16 m_adpcm_pos;
bool m_adpcm_ff;
// devices
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<msm5205_device> m_msm;
required_device<ls157_device> m_adpcm_sel;
required_region_ptr<u8> m_adpcm_data;
required_device<pc080sn_device> m_pc080sn;
required_device<pc090oj_device> m_pc090oj;
void msm5205_address_w(u8 data);
void spritectrl_w(u16 data);
void sound_bankswitch_w(u8 data);
void msm5205_start_w(u8 data);
void msm5205_stop_w(u8 data);
void colpri_cb(u32 &sprite_colbank, u32 &pri_mask, u16 sprite_ctrl);
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(msm5205_vck);
void main_map(address_map &map);
void sound_map(address_map &map);
};
void rastan_state::colpri_cb(u32 &sprite_colbank, u32 &pri_mask, u16 sprite_ctrl)
{
// bits 5-7 are the sprite palette bank
sprite_colbank = (sprite_ctrl & 0xe0) >> 1;
pri_mask = 0; // sprites over everything
}
void rastan_state::spritectrl_w(u16 data)
{
m_pc090oj->sprite_ctrl_w(data);
// bit 4 unused
// bits 0 and 1 are coin lockout
machine().bookkeeping().coin_lockout_w(1, ~data & 0x01);
machine().bookkeeping().coin_lockout_w(0, ~data & 0x02);
// bits 2 and 3 are the coin counters
machine().bookkeeping().coin_counter_w(1, data & 0x04);
machine().bookkeeping().coin_counter_w(0, data & 0x08);
}
u32 rastan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_pc080sn->tilemap_update();
screen.priority().fill(0, cliprect);
m_pc080sn->tilemap_draw(screen, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 1);
m_pc080sn->tilemap_draw(screen, bitmap, cliprect, 1, 0, 2);
m_pc090oj->draw_sprites(screen, bitmap, cliprect);
return 0;
}
void rastan_state::sound_bankswitch_w(u8 data) void rastan_state::sound_bankswitch_w(u8 data)
{ {
m_audiobank->set_entry(data & 3); m_audiobank->set_entry(data & 3);
} }
WRITE_LINE_MEMBER(rastan_state::msm5205_vck) WRITE_LINE_MEMBER(rastan_state::msm5205_vck)
{ {
if (!state) if (!state)
@ -213,8 +303,8 @@ void rastan_state::main_map(address_map &map)
map(0x000000, 0x05ffff).rom(); map(0x000000, 0x05ffff).rom();
map(0x10c000, 0x10ffff).ram(); map(0x10c000, 0x10ffff).ram();
map(0x200000, 0x200fff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); map(0x200000, 0x200fff).ram().w("palette", FUNC(palette_device::write16)).share("palette");
map(0x350008, 0x350009).nopw(); /* 0 only (often) ? */ map(0x350008, 0x350009).nopw(); // 0 only (often) ?
map(0x380000, 0x380001).w(FUNC(rastan_state::spritectrl_w)); /* sprite palette bank, coin counters & lockout */ map(0x380000, 0x380001).w(FUNC(rastan_state::spritectrl_w)); // sprite palette bank, coin counters & lockout
map(0x390000, 0x390001).portr("P1"); map(0x390000, 0x390001).portr("P1");
map(0x390002, 0x390003).portr("P2"); map(0x390002, 0x390003).portr("P2");
map(0x390004, 0x390005).portr("SPECIAL"); map(0x390004, 0x390005).portr("SPECIAL");
@ -229,14 +319,14 @@ void rastan_state::main_map(address_map &map)
map(0xc20000, 0xc20003).w(m_pc080sn, FUNC(pc080sn_device::yscroll_word_w)); map(0xc20000, 0xc20003).w(m_pc080sn, FUNC(pc080sn_device::yscroll_word_w));
map(0xc40000, 0xc40003).w(m_pc080sn, FUNC(pc080sn_device::xscroll_word_w)); map(0xc40000, 0xc40003).w(m_pc080sn, FUNC(pc080sn_device::xscroll_word_w));
map(0xc50000, 0xc50003).w(m_pc080sn, FUNC(pc080sn_device::ctrl_word_w)); map(0xc50000, 0xc50003).w(m_pc080sn, FUNC(pc080sn_device::ctrl_word_w));
map(0xd00000, 0xd03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w)); /* sprite ram */ map(0xd00000, 0xd03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w)); // sprite ram
} }
void rastan_state::sound_map(address_map &map) void rastan_state::sound_map(address_map &map)
{ {
map(0x0000, 0x3fff).rom(); map(0x0000, 0x3fff).rom();
map(0x4000, 0x7fff).bankr("audiobank"); map(0x4000, 0x7fff).bankr(m_audiobank);
map(0x8000, 0x8fff).ram(); map(0x8000, 0x8fff).ram();
map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
map(0xa000, 0xa000).w("ciu", FUNC(pc060ha_device::slave_port_w)); map(0xa000, 0xa000).w("ciu", FUNC(pc060ha_device::slave_port_w));
@ -275,7 +365,7 @@ static INPUT_PORTS_START( rastan )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) // from PC050 (above 2 bits not checked when 0) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) // from PC050 (above 2 bits not checked when 0)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
/* 0x390008 -> 0x10c018 ($18,A5) */ // 0x390008 -> 0x10c018 ($18,A5)
PORT_START("DSWA") PORT_START("DSWA")
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
@ -283,14 +373,14 @@ static INPUT_PORTS_START( rastan )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:2") PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW1:3" ) /* Normally Demo Sound, but not used */ PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW1:3" ) // Normally Demo Sound, but not used
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW1:4" ) PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW1:4" )
TAITO_COINAGE_WORLD_LOC(SW1) TAITO_COINAGE_WORLD_LOC(SW1)
/* 0x39000a -> 0x10c01c ($1c,A5) */ // 0x39000a -> 0x10c01c ($1c,A5)
PORT_START("DSWB") PORT_START("DSWB")
TAITO_DIFFICULTY_LOC(SW2) TAITO_DIFFICULTY_LOC(SW2)
PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4") /* table at 0x059f2e */ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4") // table at 0x059f2e
PORT_DIPSETTING( 0x0c, "100k 200k 400k 600k 800k" ) PORT_DIPSETTING( 0x0c, "100k 200k 400k 600k 800k" )
PORT_DIPSETTING( 0x08, "150k 300k 600k 900k 1200k" ) PORT_DIPSETTING( 0x08, "150k 300k 600k 900k 1200k" )
PORT_DIPSETTING( 0x04, "200k 400k 800k 1200k 1600k" ) PORT_DIPSETTING( 0x04, "200k 400k 800k 1200k 1600k" )
@ -341,19 +431,19 @@ void rastan_state::machine_reset()
void rastan_state::rastan(machine_config &config) void rastan_state::rastan(machine_config &config)
{ {
/* basic machine hardware */ // basic machine hardware
M68000(config, m_maincpu, XTAL(16'000'000)/2); /* verified on pcb */ M68000(config, m_maincpu, XTAL(16'000'000)/2); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &rastan_state::main_map); m_maincpu->set_addrmap(AS_PROGRAM, &rastan_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(rastan_state::irq5_line_hold)); m_maincpu->set_vblank_int("screen", FUNC(rastan_state::irq5_line_hold));
Z80(config, m_audiocpu, XTAL(16'000'000)/4); /* verified on pcb */ Z80(config, m_audiocpu, XTAL(16'000'000)/4); // verified on PCB
m_audiocpu->set_addrmap(AS_PROGRAM, &rastan_state::sound_map); m_audiocpu->set_addrmap(AS_PROGRAM, &rastan_state::sound_map);
config.set_maximum_quantum(attotime::from_hz(600)); /* 10 CPU slices per frame - enough for the sound CPU to read all commands */ config.set_maximum_quantum(attotime::from_hz(600)); // 10 CPU slices per frame - enough for the sound CPU to read all commands
WATCHDOG_TIMER(config, "watchdog"); WATCHDOG_TIMER(config, "watchdog");
/* video hardware */ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60); screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
@ -370,20 +460,20 @@ void rastan_state::rastan(machine_config &config)
PC090OJ(config, m_pc090oj, 0); PC090OJ(config, m_pc090oj, 0);
m_pc090oj->set_palette("palette"); m_pc090oj->set_palette("palette");
m_pc090oj->set_colpri_callback(FUNC(rastan_state::rastan_colpri_cb)); m_pc090oj->set_colpri_callback(FUNC(rastan_state::colpri_cb));
/* sound hardware */ // sound hardware
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
ym2151_device &ymsnd(YM2151(config, "ymsnd", XTAL(16'000'000)/4)); /* verified on pcb */ ym2151_device &ymsnd(YM2151(config, "ymsnd", XTAL(16'000'000)/4)); // verified on PCB
ymsnd.irq_handler().set_inputline(m_audiocpu, 0); ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
ymsnd.port_write_handler().set(FUNC(rastan_state::sound_bankswitch_w)); ymsnd.port_write_handler().set(FUNC(rastan_state::sound_bankswitch_w));
ymsnd.add_route(0, "mono", 0.50); ymsnd.add_route(0, "mono", 0.50);
ymsnd.add_route(1, "mono", 0.50); ymsnd.add_route(1, "mono", 0.50);
MSM5205(config, m_msm, XTAL(384'000)); /* verified on pcb */ MSM5205(config, m_msm, XTAL(384'000)); // verified on PCB
m_msm->vck_legacy_callback().set(FUNC(rastan_state::msm5205_vck)); /* VCK function */ m_msm->vck_legacy_callback().set(FUNC(rastan_state::msm5205_vck)); // VCK function
m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8 kHz */ m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8 kHz
m_msm->add_route(ALL_OUTPUTS, "mono", 0.60); m_msm->add_route(ALL_OUTPUTS, "mono", 0.60);
LS157(config, m_adpcm_sel, 0); LS157(config, m_adpcm_sel, 0);
@ -409,7 +499,7 @@ B04-43-1 0x00 0x00
B04-43 0x01 0x03 B04-43 0x01 0x03
*/ */
ROM_START( rastan ) ROM_START( rastan )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ ROM_REGION( 0x60000, "maincpu", 0 ) // 6*64k for 68000 code
ROM_LOAD16_BYTE( "b04-38.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) ) ROM_LOAD16_BYTE( "b04-38.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) )
ROM_LOAD16_BYTE( "b04-37.7", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) ) ROM_LOAD16_BYTE( "b04-37.7", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) )
ROM_LOAD16_BYTE( "b04-40.20", 0x20000, 0x10000, CRC(0930d4b3) SHA1(c269b3856040ed9409de99cca48f22a2f355fc4c) ) ROM_LOAD16_BYTE( "b04-40.20", 0x20000, 0x10000, CRC(0930d4b3) SHA1(c269b3856040ed9409de99cca48f22a2f355fc4c) )
@ -432,12 +522,12 @@ ROM_START( rastan )
ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) ) ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) ) ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
ROM_REGION( 0x10000, "adpcm", 0 ) /* MSM5205 samples */ ROM_REGION( 0x10000, "adpcm", 0 ) // MSM5205 samples
ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
ROM_END ROM_END
ROM_START( rastana ) // also found on PCB with SEGA S.A. labels, for distribution in Spain ROM_START( rastana ) // also found on PCB with SEGA S.A. labels, for distribution in Spain
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ ROM_REGION( 0x60000, "maincpu", 0 ) // 6*64k for 68000 code
ROM_LOAD16_BYTE( "b04-38.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) ) ROM_LOAD16_BYTE( "b04-38.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) )
ROM_LOAD16_BYTE( "b04-37.7", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) ) ROM_LOAD16_BYTE( "b04-37.7", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) )
ROM_LOAD16_BYTE( "b04-40.20", 0x20000, 0x10000, CRC(0930d4b3) SHA1(c269b3856040ed9409de99cca48f22a2f355fc4c) ) ROM_LOAD16_BYTE( "b04-40.20", 0x20000, 0x10000, CRC(0930d4b3) SHA1(c269b3856040ed9409de99cca48f22a2f355fc4c) )
@ -460,14 +550,14 @@ ROM_START( rastana ) // also found on PCB with SEGA S.A. labels, for distributio
ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) ) ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) ) ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
ROM_REGION( 0x10000, "adpcm", 0 ) /* 64k for the samples */ ROM_REGION( 0x10000, "adpcm", 0 ) // 64k for the samples
ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) /* samples are 4bit ADPCM */ ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) // samples are 4bit ADPCM
ROM_END ROM_END
ROM_START( rastanb ) /* Earlier code base, but uses 2 US region roms and shows Taito Corporation Japan instead of Taito America Corporation */ ROM_START( rastanb ) // Earlier code base, but uses 2 US region roms and shows Taito Corporation Japan instead of Taito America Corporation
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ ROM_REGION( 0x60000, "maincpu", 0 ) // 6*64k for 68000 code
ROM_LOAD16_BYTE( "b04-14.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) ) /* These two are from the US rastanub set below */ ROM_LOAD16_BYTE( "b04-14.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) ) // These two are from the US rastanub set below
ROM_LOAD16_BYTE( "b04-21.7", 0x00001, 0x10000, CRC(7c8dde9a) SHA1(0cfc3b4f3bc7b940a6c07267ac95e4aae25801ea) ) /* These two are from the US rastanub set below */ ROM_LOAD16_BYTE( "b04-21.7", 0x00001, 0x10000, CRC(7c8dde9a) SHA1(0cfc3b4f3bc7b940a6c07267ac95e4aae25801ea) ) // These two are from the US rastanub set below
ROM_LOAD16_BYTE( "b04-27.20", 0x20000, 0x10000, CRC(ce37694b) SHA1(343c35d93f59c0696104e6934063057d117f4d9f) ) ROM_LOAD16_BYTE( "b04-27.20", 0x20000, 0x10000, CRC(ce37694b) SHA1(343c35d93f59c0696104e6934063057d117f4d9f) )
ROM_LOAD16_BYTE( "b04-26.8", 0x20001, 0x10000, CRC(fbdb98c7) SHA1(717aabf6ce0c7c6107c4bcaae646f7c67b644a54) ) ROM_LOAD16_BYTE( "b04-26.8", 0x20001, 0x10000, CRC(fbdb98c7) SHA1(717aabf6ce0c7c6107c4bcaae646f7c67b644a54) )
ROM_LOAD16_BYTE( "b04-29.21", 0x40000, 0x10000, CRC(90d7c6e8) SHA1(6a36cd6db04fcefbf0487f574fccb0eab94e058f) ) ROM_LOAD16_BYTE( "b04-29.21", 0x40000, 0x10000, CRC(90d7c6e8) SHA1(6a36cd6db04fcefbf0487f574fccb0eab94e058f) )
@ -488,7 +578,7 @@ ROM_START( rastanb ) /* Earlier code base, but uses 2 US region roms and shows T
ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) ) ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) ) ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
ROM_REGION( 0x10000, "adpcm", 0 ) /* MSM5205 samples */ ROM_REGION( 0x10000, "adpcm", 0 ) // MSM5205 samples
ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
ROM_END ROM_END
@ -499,8 +589,8 @@ ROM_END
B04-41-1 0x00 0x00 <-- Same changes as seen with the World set's B04-43-1.9 & B04-43.9 B04-41-1 0x00 0x00 <-- Same changes as seen with the World set's B04-43-1.9 & B04-43.9
B04-41 0x01 0x03 B04-41 0x01 0x03
*/ */
ROM_START( rastanu ) /* This US set is based on newer code */ ROM_START( rastanu ) // This US set is based on newer code
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ ROM_REGION( 0x60000, "maincpu", 0 ) // 6*64k for 68000 code
ROM_LOAD16_BYTE( "b04-38.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) ) ROM_LOAD16_BYTE( "b04-38.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) )
ROM_LOAD16_BYTE( "b04-37.7", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) ) ROM_LOAD16_BYTE( "b04-37.7", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) )
ROM_LOAD16_BYTE( "b04-45.20", 0x20000, 0x10000, CRC(362812dd) SHA1(f7df037ef423d931ca780b34813d4e9e4db67054) ) ROM_LOAD16_BYTE( "b04-45.20", 0x20000, 0x10000, CRC(362812dd) SHA1(f7df037ef423d931ca780b34813d4e9e4db67054) )
@ -523,12 +613,12 @@ ROM_START( rastanu ) /* This US set is based on newer code */
ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) ) ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) ) ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
ROM_REGION( 0x10000, "adpcm", 0 ) /* MSM5205 samples */ ROM_REGION( 0x10000, "adpcm", 0 ) // MSM5205 samples
ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
ROM_END ROM_END
ROM_START( rastanua ) /* This US set is based on newer code */ ROM_START( rastanua ) // This US set is based on newer code
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ ROM_REGION( 0x60000, "maincpu", 0 ) // 6*64k for 68000 code
ROM_LOAD16_BYTE( "b04-38.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) ) ROM_LOAD16_BYTE( "b04-38.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) )
ROM_LOAD16_BYTE( "b04-37.7", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) ) ROM_LOAD16_BYTE( "b04-37.7", 0x00001, 0x10000, CRC(ecf20bdd) SHA1(92e46b1edef40a19be17091c09daba598d77bca8) )
ROM_LOAD16_BYTE( "b04-45.20", 0x20000, 0x10000, CRC(362812dd) SHA1(f7df037ef423d931ca780b34813d4e9e4db67054) ) ROM_LOAD16_BYTE( "b04-45.20", 0x20000, 0x10000, CRC(362812dd) SHA1(f7df037ef423d931ca780b34813d4e9e4db67054) )
@ -551,7 +641,7 @@ ROM_START( rastanua ) /* This US set is based on newer code */
ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) ) ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) ) ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
ROM_REGION( 0x10000, "adpcm", 0 ) /* MSM5205 samples */ ROM_REGION( 0x10000, "adpcm", 0 ) // MSM5205 samples
ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
ROM_END ROM_END
@ -565,10 +655,10 @@ B04-13 0x44 0x44
These US & Japan sets didn't use a region code byte (see above) so the changes are likely These US & Japan sets didn't use a region code byte (see above) so the changes are likely
pointers to the copyright string. pointers to the copyright string.
*/ */
ROM_START( rastanub ) /* This US set is based on the earlier code */ ROM_START( rastanub ) // This US set is based on the earlier code
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ ROM_REGION( 0x60000, "maincpu", 0 ) // 6*64k for 68000 code
ROM_LOAD16_BYTE( "b04-14.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) ) /* This is the correct verfied ROM number */ ROM_LOAD16_BYTE( "b04-14.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) ) // This is the correct verified ROM number
ROM_LOAD16_BYTE( "b04-21.7", 0x00001, 0x10000, CRC(7c8dde9a) SHA1(0cfc3b4f3bc7b940a6c07267ac95e4aae25801ea) ) /* 2 bytes differ from the Japan set */ ROM_LOAD16_BYTE( "b04-21.7", 0x00001, 0x10000, CRC(7c8dde9a) SHA1(0cfc3b4f3bc7b940a6c07267ac95e4aae25801ea) ) // 2 bytes differ from the Japan set
ROM_LOAD16_BYTE( "b04-23.20", 0x20000, 0x10000, CRC(254b3dce) SHA1(5126cd5268abaa78dfdcd2ca70621c093c79be67) ) ROM_LOAD16_BYTE( "b04-23.20", 0x20000, 0x10000, CRC(254b3dce) SHA1(5126cd5268abaa78dfdcd2ca70621c093c79be67) )
ROM_LOAD16_BYTE( "b04-22.8", 0x20001, 0x10000, CRC(98e8edcf) SHA1(cc89ef36da6d21192efc19c3bbb215b1635b7ef3) ) ROM_LOAD16_BYTE( "b04-22.8", 0x20001, 0x10000, CRC(98e8edcf) SHA1(cc89ef36da6d21192efc19c3bbb215b1635b7ef3) )
ROM_LOAD16_BYTE( "b04-25.21", 0x40000, 0x10000, CRC(d1e5adee) SHA1(eafc275a0023aecb2efaff14cd890915fa162624) ) ROM_LOAD16_BYTE( "b04-25.21", 0x40000, 0x10000, CRC(d1e5adee) SHA1(eafc275a0023aecb2efaff14cd890915fa162624) )
@ -589,12 +679,12 @@ ROM_START( rastanub ) /* This US set is based on the earlier code */
ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) ) ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) ) ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
ROM_REGION( 0x10000, "adpcm", 0 ) /* MSM5205 samples */ ROM_REGION( 0x10000, "adpcm", 0 ) // MSM5205 samples
ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
ROM_END ROM_END
ROM_START( rastsaga ) ROM_START( rastsaga )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ ROM_REGION( 0x60000, "maincpu", 0 ) // 6*64k for 68000 code
ROM_LOAD16_BYTE( "b04-32.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) ) ROM_LOAD16_BYTE( "b04-32.19", 0x00000, 0x10000, CRC(1c91dbb1) SHA1(17fc55e8546cc0b847aebd67fb4570a1e9f128f3) )
ROM_LOAD16_BYTE( "b04-31.7", 0x00001, 0x10000, CRC(4c62e89e) SHA1(41673a1375a4ff3e59edbb6194915bb2348b70dd) ) ROM_LOAD16_BYTE( "b04-31.7", 0x00001, 0x10000, CRC(4c62e89e) SHA1(41673a1375a4ff3e59edbb6194915bb2348b70dd) )
ROM_LOAD16_BYTE( "b04-34-1.20", 0x20000, 0x10000, CRC(8f54dd19) SHA1(ed9c221ebce3ba76c39dc83fed58acff3028e6c9) ) ROM_LOAD16_BYTE( "b04-34-1.20", 0x20000, 0x10000, CRC(8f54dd19) SHA1(ed9c221ebce3ba76c39dc83fed58acff3028e6c9) )
@ -617,12 +707,12 @@ ROM_START( rastsaga )
ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) ) ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) ) ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
ROM_REGION( 0x10000, "adpcm", 0 ) /* MSM5205 samples */ ROM_REGION( 0x10000, "adpcm", 0 ) // MSM5205 samples
ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
ROM_END ROM_END
ROM_START( rastsagaa ) ROM_START( rastsagaa )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ ROM_REGION( 0x60000, "maincpu", 0 ) // 6*64k for 68000 code
ROM_LOAD16_BYTE( "b04-14.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) ) ROM_LOAD16_BYTE( "b04-14.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) )
ROM_LOAD16_BYTE( "b04-13.7", 0x00001, 0x10000, CRC(bad60872) SHA1(e020f79b3ac3d2abccfcd5d135d2dc49e1335c7d) ) ROM_LOAD16_BYTE( "b04-13.7", 0x00001, 0x10000, CRC(bad60872) SHA1(e020f79b3ac3d2abccfcd5d135d2dc49e1335c7d) )
ROM_LOAD16_BYTE( "b04-16-1.20", 0x20000, 0x10000, CRC(00b59e60) SHA1(545ab3eb9ef25c532dda5a9eec087665ba0cecc1) ) ROM_LOAD16_BYTE( "b04-16-1.20", 0x20000, 0x10000, CRC(00b59e60) SHA1(545ab3eb9ef25c532dda5a9eec087665ba0cecc1) )
@ -645,18 +735,58 @@ ROM_START( rastsagaa )
ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) ) ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) ) ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
ROM_REGION( 0x10000, "adpcm", 0 ) /* MSM5205 samples */ ROM_REGION( 0x10000, "adpcm", 0 ) // MSM5205 samples
ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
ROM_END ROM_END
ROM_START( rastsagaabl ) // 2-PCB set, data is identical to rastsagaa but the GFX ROMs are smaller
ROM_REGION( 0x60000, "maincpu", 0 )
ROM_LOAD16_BYTE( "9", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) )
ROM_LOAD16_BYTE( "12", 0x00001, 0x10000, CRC(bad60872) SHA1(e020f79b3ac3d2abccfcd5d135d2dc49e1335c7d) )
ROM_LOAD16_BYTE( "10", 0x20000, 0x10000, CRC(00b59e60) SHA1(545ab3eb9ef25c532dda5a9eec087665ba0cecc1) )
ROM_LOAD16_BYTE( "13", 0x20001, 0x10000, CRC(ff9e018a) SHA1(37048eecec799f29564517fae9525ef0e3d9d9e5) )
ROM_LOAD16_BYTE( "11", 0x40000, 0x10000, CRC(b626c439) SHA1(976e820edc4ba107c5b579edaaee1e354e85fb67) )
ROM_LOAD16_BYTE( "14", 0x40001, 0x10000, CRC(c928a516) SHA1(fe87fdf2d1b7ba93e1986460eb6af648b58f42e4) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "2", 0x00000, 0x10000, CRC(ee81fdd8) SHA1(fa59dac2583a7d2979550dffc6f9c6c2bd67bfd5) )
ROM_REGION( 0x080000, "pc080sn", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "8", 0x00000, 0x10000, CRC(6aac8f67) SHA1(6042dc936eaa22b0afb200c8306be4bbddaad4d7) )
ROM_LOAD16_BYTE( "5", 0x00001, 0x10000, CRC(8c184637) SHA1(fcabe034aa331d3c0b05854b9f504edb4f04f5b8) )
ROM_LOAD16_BYTE( "6", 0x20000, 0x10000, CRC(e8b64ced) SHA1(17c09a26ce0ee0f10f3cbaa166f38f9716e7e4ea) )
ROM_LOAD16_BYTE( "3", 0x20001, 0x10000, CRC(27f6c59b) SHA1(84697bd33ccd64914955f3cdb41684f0be428f54) )
ROM_LOAD16_BYTE( "7", 0x40000, 0x10000, CRC(225e19fa) SHA1(14dd2f8b7d81e5f39fcf07f9c4421815f1fefe22) )
ROM_LOAD16_BYTE( "4", 0x40001, 0x10000, CRC(aa3a2d5e) SHA1(1c6017e2c4604c315517e5acd7eced4e08515728) )
ROM_REGION( 0x080000, "pc090oj", ROMREGION_ERASEFF )
ROM_LOAD16_BYTE( "22", 0x00000, 0x08000, CRC(d9d09beb) SHA1(cddbda5a1af7564a63d00926891f5d8c75715a2f) )
ROM_LOAD16_BYTE( "18", 0x00001, 0x08000, CRC(d6fb44fe) SHA1(ac0ef2f8771bfd9b5bbbecfb81ba8b6de1bd290a) )
ROM_LOAD16_BYTE( "28", 0x10000, 0x08000, CRC(f19630f7) SHA1(c6bd015185e883be8a6df97fdcfcd229d01496f6) )
ROM_LOAD16_BYTE( "25", 0x10001, 0x08000, CRC(d778ceea) SHA1(398135f3dab4ff27d206e204fd49c06315788a3f) )
ROM_LOAD16_BYTE( "21", 0x20000, 0x08000, CRC(21453a7a) SHA1(d7b18ad96ce9fc85138521404359a95d00fe01ff) )
ROM_LOAD16_BYTE( "17", 0x20001, 0x08000, CRC(5cd5c7e9) SHA1(f50d595f5fa8eb59a8a50ce1968dd4e362d7ab04) )
ROM_LOAD16_BYTE( "27", 0x30000, 0x08000, CRC(2e66aa0b) SHA1(6ab10ddba5cd94f995f02425090fff1b7c08b08b) )
ROM_LOAD16_BYTE( "24", 0x30001, 0x08000, CRC(88217cbc) SHA1(149f54ae4ef00dacbc95a29f45b854efd53fc8a9) )
ROM_LOAD16_BYTE( "20", 0x40000, 0x08000, CRC(9cd627e1) SHA1(31481048e4fcec8c31c247e16953774e063189ec) )
ROM_LOAD16_BYTE( "16", 0x40001, 0x08000, CRC(93d64eef) SHA1(6faa76cb5bb8ffa77c7dce85678a0e6f1e1b9ba8) )
ROM_LOAD16_BYTE( "26", 0x50000, 0x08000, CRC(9bca4abc) SHA1(ae88e5c7b75bb9a9d80582f10c56cdd70bc86412) )
ROM_LOAD16_BYTE( "23", 0x50001, 0x08000, CRC(cde8891b) SHA1(8f52df3cfe585982bd1bb03c34b2de02b424490d) )
ROM_LOAD16_BYTE( "19", 0x60000, 0x08000, CRC(02ed3b16) SHA1(2f92ba8181a6391afa9ccd290ba13b69cf735e51) )
ROM_LOAD16_BYTE( "15", 0x60001, 0x08000, CRC(3e4c41d4) SHA1(4868ba2239d77659e63894898c81a0355214ea3b) )
ROM_REGION( 0x10000, "adpcm", 0 )
ROM_LOAD( "1", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
ROM_END
ROM_START( rastsagab ) ROM_START( rastsagab )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */ ROM_REGION( 0x60000, "maincpu", 0 ) // 6*64k for 68000 code
ROM_LOAD16_BYTE( "b04-14.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) ) /* Dumped as "RS19_38.BIN", corrected to B04-14 */ ROM_LOAD16_BYTE( "b04-14.19", 0x00000, 0x10000, CRC(a38ac909) SHA1(66d792fee03c6bd87d15060b9d5cae74137c5ebd) ) // Dumped as "RS19_38.BIN", corrected to B04-14
ROM_LOAD16_BYTE( "b04-13.7", 0x00001, 0x10000, CRC(bad60872) SHA1(e020f79b3ac3d2abccfcd5d135d2dc49e1335c7d) ) /* Dumped as "RS07_37.BIN", corrected to B04-13 */ ROM_LOAD16_BYTE( "b04-13.7", 0x00001, 0x10000, CRC(bad60872) SHA1(e020f79b3ac3d2abccfcd5d135d2dc49e1335c7d) ) // Dumped as "RS07_37.BIN", corrected to B04-13
ROM_LOAD16_BYTE( "b04-16.20", 0x20000, 0x10000, CRC(6bcf70dc) SHA1(3e369548ac01981c503150b44c2747e6c2cec12a) ) /* Dumped as "RS20_40.BIN", but is likely B04-16 - Need to verify */ ROM_LOAD16_BYTE( "b04-16.20", 0x20000, 0x10000, CRC(6bcf70dc) SHA1(3e369548ac01981c503150b44c2747e6c2cec12a) ) // Dumped as "RS20_40.BIN", but is likely B04-16 - Need to verify
ROM_LOAD16_BYTE( "b04-15.8", 0x20001, 0x10000, CRC(8838ecc5) SHA1(42b43ab77969bbacdf178fbe73a0a27652ccb297) ) /* Dumped as "RS08_39.BIN", but is likely B04-15 - Need to verify */ ROM_LOAD16_BYTE( "b04-15.8", 0x20001, 0x10000, CRC(8838ecc5) SHA1(42b43ab77969bbacdf178fbe73a0a27652ccb297) ) // Dumped as "RS08_39.BIN", but is likely B04-15 - Need to verify
ROM_LOAD16_BYTE( "b04-18-1.21", 0x40000, 0x10000, CRC(b626c439) SHA1(976e820edc4ba107c5b579edaaee1e354e85fb67) ) /* Dumped as "RS21_42.BIN", corrected to B04-18-1 */ ROM_LOAD16_BYTE( "b04-18-1.21", 0x40000, 0x10000, CRC(b626c439) SHA1(976e820edc4ba107c5b579edaaee1e354e85fb67) ) // Dumped as "RS21_42.BIN", corrected to B04-18-1
ROM_LOAD16_BYTE( "b04-17-1.9", 0x40001, 0x10000, CRC(c928a516) SHA1(fe87fdf2d1b7ba93e1986460eb6af648b58f42e4) ) /* Dumped as "RS09_43.BIN", corrected to B04-17-1 */ ROM_LOAD16_BYTE( "b04-17-1.9", 0x40001, 0x10000, CRC(c928a516) SHA1(fe87fdf2d1b7ba93e1986460eb6af648b58f42e4) ) // Dumped as "RS09_43.BIN", corrected to B04-17-1
ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "b04-19.49", 0x00000, 0x10000, CRC(ee81fdd8) SHA1(fa59dac2583a7d2979550dffc6f9c6c2bd67bfd5) ) ROM_LOAD( "b04-19.49", 0x00000, 0x10000, CRC(ee81fdd8) SHA1(fa59dac2583a7d2979550dffc6f9c6c2bd67bfd5) )
@ -673,19 +803,23 @@ ROM_START( rastsagab )
ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) ) ROM_LOAD16_BYTE( "b04-07.14", 0x40000, 0x20000, CRC(b5632a51) SHA1(da6ebe6afe245443a76b33714213549356c0c5c3) )
ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) ) ROM_LOAD16_BYTE( "b04-08.27", 0x40001, 0x20000, CRC(feafca05) SHA1(9de9ff1fcf037e5ab25c181b678245041238d6ae) )
ROM_REGION( 0x10000, "adpcm", 0 ) /* MSM5205 samples */ ROM_REGION( 0x10000, "adpcm", 0 ) // MSM5205 samples
ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) ) ROM_LOAD( "b04-20.76", 0x0000, 0x10000, CRC(fd1a34cc) SHA1(b1682959521fa295769207b75cf7d839e9ec95fd) )
ROM_END ROM_END
/* Newer revised code base */ } // Anonymous namespace
GAME( 1987, rastan, 0, rastan, rastan, rastan_state, empty_init, ROT0, "Taito Corporation Japan", "Rastan (World Rev 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastana, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation Japan", "Rastan (World)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastanu, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito America Corporation", "Rastan (US Rev 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastanua, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito America Corporation", "Rastan (US)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastsaga, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation", "Rastan Saga (Japan Rev 1)", MACHINE_SUPPORTS_SAVE )
/* Based on earliest code base */
GAME( 1987, rastanb, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation Japan", "Rastan (World, Earlier code base)", MACHINE_SUPPORTS_SAVE ) // Newer revised code base
GAME( 1987, rastanub, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito America Corporation", "Rastan (US, Earlier code base)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, rastan, 0, rastan, rastan, rastan_state, empty_init, ROT0, "Taito Corporation Japan", "Rastan (World Rev 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastsagaa, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation", "Rastan Saga (Japan Rev 1, Earlier code base)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, rastana, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation Japan", "Rastan (World)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastsagab, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation", "Rastan Saga (Japan, Earlier code base)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, rastanu, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito America Corporation", "Rastan (US Rev 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastanua, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito America Corporation", "Rastan (US)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastsaga, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation", "Rastan Saga (Japan Rev 1)", MACHINE_SUPPORTS_SAVE )
// Based on earliest code base
GAME( 1987, rastanb, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation Japan", "Rastan (World, earlier code base)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastanub, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito America Corporation", "Rastan (US, earlier code base)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastsagaa, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation", "Rastan Saga (Japan Rev 1, earlier code base)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastsagaabl, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation", "Rastan Saga (bootleg, Japan Rev 1, earlier code base)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, rastsagab, rastan, rastan, rastsaga, rastan_state, empty_init, ROT0, "Taito Corporation", "Rastan Saga (Japan, earlier code base)", MACHINE_SUPPORTS_SAVE )

View File

@ -609,7 +609,7 @@ ROM_START( spaceplta )
ROM_LOAD( "4", 0x0000, 0x1000, CRC(d66da813) SHA1(408fca4515e8af84211df3e204c8776b2f8adb23) ) ROM_LOAD( "4", 0x0000, 0x1000, CRC(d66da813) SHA1(408fca4515e8af84211df3e204c8776b2f8adb23) )
ROM_REGION( 0x2000, "gfx1", 0 ) ROM_REGION( 0x2000, "gfx1", 0 )
ROM_LOAD( "5", 0x0000, 0x2000, CRC(76caa8af) SHA1(f81bb73877d415a6587a32bddaad6db8a8fd4941) ) ROM_LOAD( "5", 0x0000, 0x2000, CRC(76caa8af) SHA1(f81bb73877d415a6587a32bddaad6db8a8fd4941) ) // also seen with an original ROM from tileplt (so that it shows the original title)
ROM_REGION( 0x4000, "gfx2", 0 ) ROM_REGION( 0x4000, "gfx2", 0 )
ROM_LOAD( "6", 0x0000, 0x2000, CRC(86ab1ae7) SHA1(8e3f84aa6b2c21e7e1383ea1811fd99a4d940a23) ) // difference to spaceplt: erased Konami ROM_LOAD( "6", 0x0000, 0x2000, CRC(86ab1ae7) SHA1(8e3f84aa6b2c21e7e1383ea1811fd99a4d940a23) ) // difference to spaceplt: erased Konami

View File

@ -1,71 +0,0 @@
// license:GPL-2.0+
// copyright-holders:Jarek Burczynski
/*************************************************************************
Rastan
*************************************************************************/
#ifndef MAME_INCLUDES_RASTAN_H
#define MAME_INCLUDES_RASTAN_H
#pragma once
#include "machine/74157.h"
#include "sound/msm5205.h"
#include "video/pc080sn.h"
#include "video/pc090oj.h"
class rastan_state : public driver_device
{
public:
rastan_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_audiobank(*this, "audiobank"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_msm(*this, "msm"),
m_adpcm_sel(*this, "adpcm_sel"),
m_adpcm_data(*this, "adpcm"),
m_pc080sn(*this, "pc080sn"),
m_pc090oj(*this, "pc090oj")
{ }
void rastan(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
private:
required_memory_bank m_audiobank;
/* video-related */
u16 m_sprite_ctrl;
u16 m_sprites_flipscreen;
/* misc */
u16 m_adpcm_pos;
bool m_adpcm_ff;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<msm5205_device> m_msm;
required_device<ls157_device> m_adpcm_sel;
required_region_ptr<u8> m_adpcm_data;
required_device<pc080sn_device> m_pc080sn;
required_device<pc090oj_device> m_pc090oj;
void msm5205_address_w(u8 data);
void spritectrl_w(u16 data);
void sound_bankswitch_w(u8 data);
void msm5205_start_w(u8 data);
void msm5205_stop_w(u8 data);
void rastan_colpri_cb(u32 &sprite_colbank, u32 &pri_mask, u16 sprite_ctrl);
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(msm5205_vck);
void main_map(address_map &map);
void sound_map(address_map &map);
};
#endif // MAME_INCLUDES_RASTAN_H

View File

@ -36197,6 +36197,7 @@ rastanua // B04 (c) 1987 Taito America Corporation (US)
rastanub // B04 (c) 1987 Taito America Corporation (US) rastanub // B04 (c) 1987 Taito America Corporation (US)
rastsaga // B04 (c) 1987 Taito Corporation (Japan) rastsaga // B04 (c) 1987 Taito Corporation (Japan)
rastsagaa // B04 (c) 1987 Taito Corporation (Japan) rastsagaa // B04 (c) 1987 Taito Corporation (Japan)
rastsagaabl // bootleg
rastsagab // B04 (c) 1987 Taito Corporation (Japan) rastsagab // B04 (c) 1987 Taito Corporation (Japan)
@source:rastersp.cpp @source:rastersp.cpp

View File

@ -1,56 +0,0 @@
// license:GPL-2.0+
// copyright-holders:Jarek Burczynski
/***************************************************************************
Functions to emulate video hardware on these Taito games:
- rastan
***************************************************************************/
#include "emu.h"
#include "includes/rastan.h"
#include "screen.h"
/***************************************************************************/
void rastan_state::rastan_colpri_cb(u32 &sprite_colbank, u32 &pri_mask, u16 sprite_ctrl)
{
/* bits 5-7 are the sprite palette bank */
sprite_colbank = (sprite_ctrl & 0xe0) >> 1;
pri_mask = 0; /* sprites over everything */
}
void rastan_state::spritectrl_w(u16 data)
{
m_pc090oj->sprite_ctrl_w(data);
/* bit 4 unused */
/* bits 0 and 1 are coin lockout */
machine().bookkeeping().coin_lockout_w(1, ~data & 0x01);
machine().bookkeeping().coin_lockout_w(0, ~data & 0x02);
/* bits 2 and 3 are the coin counters */
machine().bookkeeping().coin_counter_w(1, data & 0x04);
machine().bookkeeping().coin_counter_w(0, data & 0x08);
}
/***************************************************************************/
u32 rastan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int layer[2];
m_pc080sn->tilemap_update();
layer[0] = 0;
layer[1] = 1;
screen.priority().fill(0, cliprect);
m_pc080sn->tilemap_draw(screen, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
m_pc080sn->tilemap_draw(screen, bitmap, cliprect, layer[1], 0, 2);
m_pc090oj->draw_sprites(screen, bitmap, cliprect);
return 0;
}