mirror of
https://github.com/holub/mame
synced 2025-07-02 16:49:22 +03:00
New working clones
------------------ Chouji Meikyuu Legion (Japan ver 1.05, set 2) [system11] - taito_o.cpp: merged everything in the driver file
This commit is contained in:
parent
f02e37489f
commit
ed67a79f37
@ -4163,8 +4163,6 @@ files {
|
||||
MAME_DIR .. "src/mame/includes/taito_z.h",
|
||||
MAME_DIR .. "src/mame/video/taito_z.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/taito_o.cpp",
|
||||
MAME_DIR .. "src/mame/includes/taito_o.h",
|
||||
MAME_DIR .. "src/mame/video/taito_o.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/taitoair.cpp",
|
||||
MAME_DIR .. "src/mame/includes/taitoair.h",
|
||||
MAME_DIR .. "src/mame/video/taitoair.cpp",
|
||||
|
@ -27,7 +27,7 @@ actually bootlegs.
|
||||
|
||||
TODO:
|
||||
- identify and decap the NB1414M4 chip, it could be either a MCU or a fancy blitter chip;
|
||||
- Fix Armed F and Tatakae Big Fighter text tilemap usage, they both doesn't use the NB1414M4
|
||||
- Fix Armed F and Tatakae Big Fighter text tilemap usage, they both don't use the NB1414M4
|
||||
(as shown by the per-game kludge)
|
||||
- kozure: time over doesn't kill the player, check (1) note for further details (kludged to work for now);
|
||||
- kozure: POST screen should have green as backdrop, this is actually drawn by the text layer but not seen
|
||||
@ -309,7 +309,7 @@ Notes:
|
||||
YM3014B - Yamaha YM3014B Serial Input Floating D/A Converter
|
||||
2018 - 2kx8 SRAM
|
||||
LM324 - Texas Instruments LM324 Quad Operational Amplifier with True Differential Inputs
|
||||
MB3730 - Fujitsi MB3730 12W BTL Single Channel Amplifier
|
||||
MB3730 - Fujitsu MB3730 12W BTL Single Channel Amplifier
|
||||
|
||||
|
||||
***********************************************************************/
|
||||
@ -318,8 +318,8 @@ Notes:
|
||||
#include "includes/armedf.h"
|
||||
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/mcs51/mcs51.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/ymopl.h"
|
||||
#include "speaker.h"
|
||||
@ -1344,7 +1344,7 @@ ROM_START( legion )
|
||||
ROM_LOAD ( "lg7.bin", 0x0000, 0x4000, CRC(533e2b58) SHA1(a13ea4a530038760ffa87713903c59a932452717) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( legionj )
|
||||
ROM_START( legionj ) // this has the ROM checksum test circumvented like the bootlegs? Or maybe just a bug that was later fixed?
|
||||
ROM_REGION( 0x60000, "maincpu", ROMREGION_ERASEFF ) /* 64K*8 for 68000 code */
|
||||
ROM_LOAD16_BYTE( "legion.e1", 0x000001, 0x010000, CRC(977fa324) SHA1(04432ecb0cab61731e17bcf665ca66fe34b2d75c) )
|
||||
ROM_LOAD16_BYTE( "legion.e5", 0x000000, 0x010000, CRC(49e8e1b7) SHA1(ed0b38aae3f46f689fe9d2c96c383d375716e77e) )
|
||||
@ -1373,6 +1373,35 @@ ROM_START( legionj )
|
||||
ROM_LOAD ( "lg7.bin", 0x0000, 0x4000, CRC(533e2b58) SHA1(a13ea4a530038760ffa87713903c59a932452717) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( legionj2 ) // this has the ROM checksum test working
|
||||
ROM_REGION( 0x60000, "maincpu", ROMREGION_ERASEFF ) /* 64K*8 for 68000 code */
|
||||
ROM_LOAD16_BYTE( "legion.e1", 0x000001, 0x010000, CRC(b890da35) SHA1(3c12b80aca7e4389c8e98f8891a9e620419d613f) )
|
||||
ROM_LOAD16_BYTE( "legion.e5", 0x000000, 0x010000, CRC(d7efe310) SHA1(664e6f2b92670e9a32a56b4df3a7c99a99e4515d) )
|
||||
ROM_LOAD16_BYTE( "legion.1b", 0x020001, 0x010000, CRC(c306660a) SHA1(31c6b868ba07677b5110c577335873354bff596f) )
|
||||
ROM_LOAD16_BYTE( "legion.1d", 0x020000, 0x010000, CRC(c2e45e1e) SHA1(95cc359145b1b03123262891feed358407ba105a) )
|
||||
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound) */
|
||||
ROM_LOAD( "legion.1h", 0x00000, 0x04000, CRC(2ca4f7f0) SHA1(7cf997af9dd74ced9d28c047069ccfb67d72e257) )
|
||||
ROM_LOAD( "legion.1i", 0x04000, 0x08000, CRC(79f4a827) SHA1(25e4c1b5b8466627244b7226310e67e4261333b6) )
|
||||
|
||||
ROM_REGION( 0x08000, "text", 0 )
|
||||
ROM_LOAD( "legion.1g", 0x00000, 0x08000, CRC(c50b0125) SHA1(83b5e9707152d97777fb65fa8820ba34ec2fac8d) )
|
||||
|
||||
ROM_REGION( 0x20000, "foreground", 0 )
|
||||
ROM_LOAD( "legion.1e", 0x00000, 0x10000, CRC(a9d70faf) SHA1(8b8b60ae49c55e931d6838e863463f6b2bf7adb0) )
|
||||
ROM_LOAD( "legion.1f", 0x18000, 0x08000, CRC(f018313b) SHA1(860bc9937202dc3a40c9fa7caad11c2c2aa19f5c) )
|
||||
|
||||
ROM_REGION( 0x20000, "background", 0 )
|
||||
ROM_LOAD( "legion.1l", 0x00000, 0x10000, CRC(29b8adaa) SHA1(10338ebe7324960683de1f796dd311ed662e42b4) )
|
||||
|
||||
ROM_REGION( 0x20000, "sprite", 0 )
|
||||
ROM_LOAD16_BYTE( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) )
|
||||
ROM_LOAD16_BYTE( "legion.1j", 0x000001, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) )
|
||||
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
|
||||
ROM_LOAD ( "lg7.bin", 0x0000, 0x4000, CRC(533e2b58) SHA1(a13ea4a530038760ffa87713903c59a932452717) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( legionjb )
|
||||
ROM_REGION( 0x60000, "maincpu", ROMREGION_ERASEFF ) /* 64K*8 for 68000 code */
|
||||
ROM_LOAD16_BYTE( "legion.1a", 0x000001, 0x010000, CRC(8c0cda1d) SHA1(14b93d4fb4381ebc6a4ccdb480089bf69c6f474b) )
|
||||
@ -1926,7 +1955,8 @@ void armedf_state::init_cclimbr2()
|
||||
|
||||
/* YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR,COMPANY, FULLNAME, FLAGS */
|
||||
GAME( 1987, legion, 0, legion, legion, armedf_state, init_legion, ROT270, "Nichibutsu", "Legion - Spinner-87 (World ver 2.03)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, legionj, legion, legion, legion, armedf_state, init_legion, ROT270, "Nichibutsu", "Chouji Meikyuu Legion (Japan ver 1.05)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, legionj, legion, legion, legion, armedf_state, init_legion, ROT270, "Nichibutsu", "Chouji Meikyuu Legion (Japan ver 1.05, set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, legionj2, legion, legion, legion, armedf_state, init_legion, ROT270, "Nichibutsu", "Chouji Meikyuu Legion (Japan ver 1.05, set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, legionjb, legion, legionjb, legion, armedf_state, init_legionjb, ROT270, "bootleg", "Chouji Meikyuu Legion (Japan ver 1.05, bootleg set 1)", MACHINE_SUPPORTS_SAVE) /* blitter protection removed */
|
||||
GAME( 1987, legionjb2, legion, legionjb2, legion, armedf_state, init_legionjb, ROT270, "bootleg", "Chouji Meikyuu Legion (Japan ver 1.05, bootleg set 2)", MACHINE_SUPPORTS_SAVE)
|
||||
|
||||
|
@ -31,15 +31,92 @@ TODO:
|
||||
*****************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/taito_o.h"
|
||||
|
||||
#include "video/tc0080vco.h"
|
||||
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/timer.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ymopn.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class taitoo_state : public driver_device
|
||||
{
|
||||
public:
|
||||
taitoo_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_watchdog(*this, "watchdog"),
|
||||
m_tc0080vco(*this, "tc0080vco"),
|
||||
m_palette(*this, "palette"),
|
||||
m_io_in(*this, "IN%u", 0U)
|
||||
{ }
|
||||
|
||||
void parentj(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<watchdog_timer_device> m_watchdog;
|
||||
required_device<tc0080vco_device> m_tc0080vco;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_ioport_array<2> m_io_in;
|
||||
|
||||
void io_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 io_r(offs_t offset, u16 mem_mask = ~0);
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority);
|
||||
void prg_map(address_map &map);
|
||||
};
|
||||
|
||||
|
||||
void taitoo_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority)
|
||||
{
|
||||
for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
|
||||
{
|
||||
if (offs < 0x01b0 && priority == 0) continue;
|
||||
if (offs >= 0x01b0 && priority == 1) continue;
|
||||
|
||||
m_tc0080vco->get_sprite_params(offs, true);
|
||||
|
||||
if (m_tc0080vco->get_sprite_tile_offs())
|
||||
{
|
||||
m_tc0080vco->draw_single_sprite(bitmap, cliprect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
u32 taitoo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_tc0080vco->tilemap_update();
|
||||
|
||||
bitmap.fill(0, cliprect);
|
||||
|
||||
m_tc0080vco->tilemap_draw(screen, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
|
||||
|
||||
draw_sprites(bitmap, cliprect, 0);
|
||||
draw_sprites(bitmap, cliprect, 1);
|
||||
|
||||
m_tc0080vco->tilemap_draw(screen, bitmap, cliprect, 1, 0, 0);
|
||||
m_tc0080vco->tilemap_draw(screen, bitmap, cliprect, 2, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static const int clear_hack = 1;
|
||||
|
||||
void taitoo_state::io_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
@ -65,11 +142,11 @@ u16 taitoo_state::io_r(offs_t offset, u16 mem_mask)
|
||||
return retval;
|
||||
}
|
||||
|
||||
void taitoo_state::parentj_map(address_map &map)
|
||||
void taitoo_state::prg_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x01ffff).rom();
|
||||
map(0x100000, 0x10ffff).mirror(0x010000).ram();
|
||||
map(0x200000, 0x20000f).rw(FUNC(taitoo_state::io_r), FUNC(taitoo_state::io_w)); /* TC0220IOC ? */
|
||||
map(0x200000, 0x20000f).rw(FUNC(taitoo_state::io_r), FUNC(taitoo_state::io_w)); // TC0220IOC ?
|
||||
map(0x300000, 0x300003).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write)).umask16(0x00ff);
|
||||
map(0x400000, 0x420fff).rw(m_tc0080vco, FUNC(tc0080vco_device::word_r), FUNC(tc0080vco_device::word_w));
|
||||
map(0x500800, 0x500fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
|
||||
@ -193,8 +270,8 @@ static INPUT_PORTS_START( parentj )
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
/* unknown sources ... */
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(taitoo_state::parentj_interrupt)
|
||||
// unknown sources ...
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(taitoo_state::interrupt)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
@ -211,9 +288,9 @@ void taitoo_state::machine_start()
|
||||
|
||||
void taitoo_state::parentj(machine_config &config)
|
||||
{
|
||||
M68000(config, m_maincpu, 12000000); /*?? MHz */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &taitoo_state::parentj_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(taitoo_state::parentj_interrupt), "screen", 0, 1);
|
||||
M68000(config, m_maincpu, 12000000); //?? MHz
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &taitoo_state::prg_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(taitoo_state::interrupt), "screen", 0, 1);
|
||||
|
||||
WATCHDOG_TIMER(config, m_watchdog);
|
||||
|
||||
@ -234,14 +311,14 @@ void taitoo_state::parentj(machine_config &config)
|
||||
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
ym2203_device &ymsnd(YM2203(config, "ymsnd", 2000000)); /* ?? MHz */
|
||||
ym2203_device &ymsnd(YM2203(config, "ymsnd", 2000000)); // ?? MHz
|
||||
ymsnd.port_a_read_callback().set_ioport("DSWA");
|
||||
ymsnd.port_b_read_callback().set_ioport("DSWB");
|
||||
ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
}
|
||||
|
||||
ROM_START( parentj )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 Code */
|
||||
ROM_REGION( 0x20000, "maincpu", 0 ) // 68000 Code
|
||||
ROM_LOAD16_BYTE( "c42-13.21", 0x00000, 0x10000, CRC(823623eb) SHA1(7302cc0ac532f6190ae35218ea05bf8cf11fd687) )
|
||||
ROM_LOAD16_BYTE( "c42-12.20", 0x00001, 0x10000, CRC(8654b0ab) SHA1(edd23a731c1c60cab353e51ef5e66d33bc3fde61) )
|
||||
|
||||
@ -259,4 +336,7 @@ ROM_START( parentj )
|
||||
ROM_LOAD( "ampal22v10a-0233.c42", 0x000, 0x2dd, CRC(0c030a81) SHA1(0f8198df2cb046683d2db9ac8e609cdff53083ed) )
|
||||
ROM_END
|
||||
|
||||
} // Anonymous namespace
|
||||
|
||||
|
||||
GAME( 1989, parentj, 0, parentj, parentj, taitoo_state, driver_init, ROT0, "Taito", "Parent Jack (Japan)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -1,52 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Tomasz Slanina
|
||||
/*************************************************************************
|
||||
|
||||
Taito O system
|
||||
|
||||
*************************************************************************/
|
||||
#ifndef MAME_INCLUDES_TAITO_O_H
|
||||
#define MAME_INCLUDES_TAITO_O_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "machine/timer.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "video/tc0080vco.h"
|
||||
#include "emupal.h"
|
||||
|
||||
class taitoo_state : public driver_device
|
||||
{
|
||||
public:
|
||||
taitoo_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_watchdog(*this, "watchdog"),
|
||||
m_tc0080vco(*this, "tc0080vco"),
|
||||
m_palette(*this, "palette"),
|
||||
m_io_in(*this, "IN%u", 0U)
|
||||
{ }
|
||||
|
||||
void parentj(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
/* devices */
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<watchdog_timer_device> m_watchdog;
|
||||
required_device<tc0080vco_device> m_tc0080vco;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
required_ioport_array<2> m_io_in;
|
||||
|
||||
void io_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 io_r(offs_t offset, u16 mem_mask = ~0);
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(parentj_interrupt);
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority);
|
||||
void parentj_map(address_map &map);
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_TAITO_O_H
|
@ -2151,6 +2151,7 @@ cclimbr2a // (c) 1988 (Japan)
|
||||
kozure // (c) 1987 (Japan)
|
||||
legion // (c) 1986
|
||||
legionj // (c) 1986
|
||||
legionj2 // (c) 1986
|
||||
legionjb // (c) 1986
|
||||
legionjb2 // (c) 1986
|
||||
skyrobo // (c) 1989
|
||||
|
@ -1,45 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Tomasz Slanina
|
||||
/***************************************************************************
|
||||
|
||||
Based on taito_h.cpp
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/taito_o.h"
|
||||
|
||||
|
||||
void taitoo_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority)
|
||||
{
|
||||
for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
|
||||
{
|
||||
if (offs < 0x01b0 && priority == 0) continue;
|
||||
if (offs >= 0x01b0 && priority == 1) continue;
|
||||
|
||||
m_tc0080vco->get_sprite_params(offs, true);
|
||||
|
||||
if (m_tc0080vco->get_sprite_tile_offs())
|
||||
{
|
||||
m_tc0080vco->draw_single_sprite(bitmap, cliprect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
u32 taitoo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_tc0080vco->tilemap_update();
|
||||
|
||||
bitmap.fill(0, cliprect);
|
||||
|
||||
m_tc0080vco->tilemap_draw(screen, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
|
||||
|
||||
draw_sprites(bitmap, cliprect, 0);
|
||||
draw_sprites(bitmap, cliprect, 1);
|
||||
|
||||
m_tc0080vco->tilemap_draw(screen, bitmap, cliprect, 1, 0, 0);
|
||||
m_tc0080vco->tilemap_draw(screen, bitmap, cliprect, 2, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user