diff options
-rw-r--r-- | scripts/target/mame/arcade.lua | 2 | ||||
-rw-r--r-- | src/mame/drivers/armedf.cpp | 40 | ||||
-rw-r--r-- | src/mame/drivers/taito_o.cpp | 100 | ||||
-rw-r--r-- | src/mame/includes/taito_o.h | 52 | ||||
-rw-r--r-- | src/mame/mame.lst | 1 | ||||
-rw-r--r-- | src/mame/video/taito_o.cpp | 45 |
6 files changed, 126 insertions, 114 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 7eea5036039..3c26b80871c 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -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", diff --git a/src/mame/drivers/armedf.cpp b/src/mame/drivers/armedf.cpp index dd21af451e8..914c5cdf180 100644 --- a/src/mame/drivers/armedf.cpp +++ b/src/mame/drivers/armedf.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) diff --git a/src/mame/drivers/taito_o.cpp b/src/mame/drivers/taito_o.cpp index 8245f412187..1e7cd943853 100644 --- a/src/mame/drivers/taito_o.cpp +++ b/src/mame/drivers/taito_o.cpp @@ -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 ) diff --git a/src/mame/includes/taito_o.h b/src/mame/includes/taito_o.h deleted file mode 100644 index 5870c575c0d..00000000000 --- a/src/mame/includes/taito_o.h +++ /dev/null @@ -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 diff --git a/src/mame/mame.lst b/src/mame/mame.lst index f6442de654a..e4867a1137f 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -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 diff --git a/src/mame/video/taito_o.cpp b/src/mame/video/taito_o.cpp deleted file mode 100644 index aa97db1028a..00000000000 --- a/src/mame/video/taito_o.cpp +++ /dev/null @@ -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; -} |