mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
new working clone
------------------------------ '99: The Last War (bootleg) [ShouTime]
This commit is contained in:
parent
e8cd1e8131
commit
48edc4100c
@ -42,14 +42,14 @@
|
||||
|
||||
static ADDRESS_MAP_START( kyugo_main_map, AS_PROGRAM, 8, kyugo_state )
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(kyugo_bgvideoram_w) AM_SHARE("bgvideoram")
|
||||
AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(kyugo_bgattribram_w) AM_SHARE("bgattribram")
|
||||
AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(kyugo_fgvideoram_w) AM_SHARE("fgvideoram")
|
||||
AM_RANGE(0x9800, 0x9fff) AM_RAM_READ(kyugo_spriteram_2_r) AM_SHARE("spriteram_2")
|
||||
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram")
|
||||
AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(bgattribram_w) AM_SHARE("bgattribram")
|
||||
AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
|
||||
AM_RANGE(0x9800, 0x9fff) AM_RAM_READ(spriteram_2_r) AM_SHARE("spriteram_2")
|
||||
AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE("spriteram_1")
|
||||
AM_RANGE(0xa800, 0xa800) AM_WRITE(kyugo_scroll_x_lo_w)
|
||||
AM_RANGE(0xb000, 0xb000) AM_WRITE(kyugo_gfxctrl_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_WRITE(kyugo_scroll_y_w)
|
||||
AM_RANGE(0xa800, 0xa800) AM_WRITE(scroll_x_lo_w)
|
||||
AM_RANGE(0xb000, 0xb000) AM_WRITE(gfxctrl_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_WRITE(scroll_y_w)
|
||||
AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_SHARE("shared_ram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -137,7 +137,7 @@ ADDRESS_MAP_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(kyugo_state::kyugo_coin_counter_w)
|
||||
WRITE8_MEMBER(kyugo_state::coin_counter_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(offset, data & 1);
|
||||
}
|
||||
@ -155,7 +155,7 @@ static ADDRESS_MAP_START( repulse_sub_portmap, AS_IO, 8, kyugo_state )
|
||||
AM_RANGE(0x00, 0x01) AM_DEVWRITE("ay1", ay8910_device, address_data_w)
|
||||
AM_RANGE(0x02, 0x02) AM_DEVREAD("ay1", ay8910_device, data_r)
|
||||
AM_RANGE(0x40, 0x41) AM_DEVWRITE("ay2", ay8910_device, address_data_w)
|
||||
AM_RANGE(0xc0, 0xc1) AM_WRITE(kyugo_coin_counter_w)
|
||||
AM_RANGE(0xc0, 0xc1) AM_WRITE(coin_counter_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -164,7 +164,7 @@ static ADDRESS_MAP_START( flashgala_sub_portmap, AS_IO, 8, kyugo_state )
|
||||
AM_RANGE(0x40, 0x41) AM_DEVWRITE("ay1", ay8910_device, address_data_w)
|
||||
AM_RANGE(0x42, 0x42) AM_DEVREAD("ay1", ay8910_device, data_r)
|
||||
AM_RANGE(0x80, 0x81) AM_DEVWRITE("ay2", ay8910_device, address_data_w)
|
||||
AM_RANGE(0xc0, 0xc1) AM_WRITE(kyugo_coin_counter_w)
|
||||
AM_RANGE(0xc0, 0xc1) AM_WRITE(coin_counter_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -173,7 +173,7 @@ static ADDRESS_MAP_START( srdmissn_sub_portmap, AS_IO, 8, kyugo_state )
|
||||
AM_RANGE(0x80, 0x81) AM_DEVWRITE("ay1", ay8910_device, address_data_w)
|
||||
AM_RANGE(0x82, 0x82) AM_DEVREAD("ay1", ay8910_device, data_r)
|
||||
AM_RANGE(0x84, 0x85) AM_DEVWRITE("ay2", ay8910_device, address_data_w)
|
||||
AM_RANGE(0x90, 0x91) AM_WRITE(kyugo_coin_counter_w)
|
||||
AM_RANGE(0x90, 0x91) AM_WRITE(coin_counter_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -533,7 +533,7 @@ static MACHINE_CONFIG_START( kyugo_base )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
|
||||
MCFG_SCREEN_SIZE(64*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(kyugo_state, screen_update_kyugo)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(kyugo_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", kyugo)
|
||||
@ -864,6 +864,42 @@ ROM_START( 99lstwark )
|
||||
ROM_LOAD( "1999-00.rom", 0x0000, 0x0800, CRC(0c0c449f) SHA1(efa4a8ac4c341ca5cdc3b5d2803eda43daf1bc93) ) /* unknown */
|
||||
ROM_END
|
||||
|
||||
ROM_START( 99lstwarb ) // copyright blanked, seems based on 99lstwara, given it has a second shot type instead of the shields.
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "15.2764", 0x0000, 0x2000, CRC(f9367b9d) SHA1(08157add7a72208b273faec1dbb8cb2ef21f2438) )
|
||||
ROM_LOAD( "16.2764", 0x2000, 0x2000, CRC(04c3316a) SHA1(2db4ab98c8ac6c3eea1930c9dbbe6dd15b8e8a74) )
|
||||
ROM_LOAD( "17.2764", 0x4000, 0x2000, CRC(02aa4de5) SHA1(bab79e314764f4a1e05516e22bd1077476e53f5b) )
|
||||
|
||||
ROM_REGION( 0x10000, "sub", 0 )
|
||||
ROM_LOAD( "11.2764", 0x0000, 0x2000, CRC(aa3e0996) SHA1(8e92edfc933be0b9e23991dbad686fb0c0286321) )
|
||||
ROM_LOAD( "12.2764", 0x2000, 0x2000, CRC(a59d3d1b) SHA1(6f0eee9d89cbe667f02a787b0ce16563c3b48e3f) )
|
||||
ROM_LOAD( "13.2764", 0x4000, 0x2000, CRC(fe31975e) SHA1(904d3fb8bf3b31152c18095234b5f62589c5b18c) )
|
||||
ROM_LOAD( "14.2764", 0x6000, 0x2000, CRC(683481a5) SHA1(56d52194a4df3712fd9b16b2c0029d565e8c8bee) )
|
||||
|
||||
ROM_REGION( 0x01000, "gfx1", 0 )
|
||||
ROM_LOAD( "1.2732", 0x00000, 0x1000, CRC(8ed6855b) SHA1(9f3737162e63ba0e05e5b71b32802166ec39bf02) ) /* chars */
|
||||
|
||||
ROM_REGION( 0x06000, "gfx2", 0 )
|
||||
ROM_LOAD( "8.2764", 0x00000, 0x2000, CRC(b161c853) SHA1(26913524001415c7426c0d439e078335761d9e7a) ) /* tiles - plane 0 */
|
||||
ROM_LOAD( "9.2764", 0x02000, 0x2000, CRC(44fd4c31) SHA1(8f5da66eba4c8a1e3d00be201244b8039d8a5b76) ) /* tiles - plane 1 */
|
||||
ROM_LOAD( "10.2764", 0x04000, 0x2000, CRC(b3dbc16b) SHA1(df57836695aadf5c82df22ddeef65e60e025848a) ) /* tiles - plane 2 */
|
||||
|
||||
ROM_REGION( 0x18000, "gfx3", 0 )
|
||||
ROM_LOAD( "2.27128", 0x00000, 0x4000, CRC(34dba8f9) SHA1(7abd909856729f5dadcf8143505016a454ae6217) ) /* sprites - plane 0 */
|
||||
ROM_LOAD( "3.27128", 0x04000, 0x4000, CRC(8bd7d5b6) SHA1(73cf9828dbcb34e63c7cc70792f3dbab90bd7447) ) /* sprites - plane 0 */
|
||||
ROM_LOAD( "4.27128", 0x08000, 0x4000, CRC(64036ea0) SHA1(929794a0105fc5c064f95c75cfcc6ca25a3724ce) ) /* sprites - plane 1 */
|
||||
ROM_LOAD( "5.27128", 0x0c000, 0x4000, CRC(2f7352e4) SHA1(3e77c1a315fe082628cf69fede4063743a229055) ) /* sprites - plane 1 */
|
||||
ROM_LOAD( "6.27128", 0x10000, 0x4000, CRC(7d9e1e7e) SHA1(81dd8e933a1195e5f119a2b957828a4bf22bea35) ) /* sprites - plane 2 */
|
||||
ROM_LOAD( "7.27128", 0x14000, 0x4000, CRC(8b6fa1c4) SHA1(061ae1849e685dd838f61ea1d6e72a579f38ecc6) ) /* sprites - plane 2 */
|
||||
|
||||
ROM_REGION( 0x0340, "proms", 0 ) // not dumped for this PCB
|
||||
ROM_LOAD( "b.1j", 0x0000, 0x0100, CRC(3ea35431) SHA1(b45318ce898f03a338435a3f6109483d246ff914) ) /* blue */
|
||||
ROM_LOAD( "g.1h", 0x0100, 0x0100, CRC(acd7a69e) SHA1(b18eab8f669f0a8105a4bbffa346c4b19491c451) ) /* green */
|
||||
ROM_LOAD( "r.1f", 0x0200, 0x0100, CRC(b7f48b41) SHA1(2d84dc29c0ab43729014129e6392207db0f56e9e) ) /* red */
|
||||
/* 0x0300-0x031f empty - looks like there isn't a lookup table PROM */
|
||||
ROM_LOAD( "m1.2c", 0x0320, 0x0020, CRC(83a39201) SHA1(4fdc722c9e20ee152c890342ef0dce18e35e2ef8) ) /* timing? (not used) */
|
||||
ROM_END
|
||||
|
||||
ROM_START( sonofphx )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "5.f4", 0x0000, 0x2000, CRC(e0d2c6cf) SHA1(87befaefa3e4f07523e9c4db19f13ff9309a7dcc) )
|
||||
@ -1414,6 +1450,7 @@ GAME( 1985, repulse, 0, repulse, repulse, kyugo_state, 0, ROT
|
||||
GAME( 1985, 99lstwar, repulse, repulse, repulse, kyugo_state, 0, ROT90, "Crux / Proma", "'99: The Last War (set 1)", MACHINE_SUPPORTS_SAVE ) // Crux went bankrupt during Repulse development,
|
||||
GAME( 1985, 99lstwara, repulse, repulse, repulse, kyugo_state, 0, ROT90, "Crux / Proma", "'99: The Last War (set 2)", MACHINE_SUPPORTS_SAVE ) // some of their staff later worked on the newer games on this hardware,
|
||||
GAME( 1985, 99lstwark, repulse, repulse, repulse, kyugo_state, 0, ROT90, "Crux / Kyugo", "'99: The Last War (Kyugo)", MACHINE_SUPPORTS_SAVE ) // directly for Kyugo? (Flashgal, Legend, SRD Mission, Airwolf, Planet Probe)
|
||||
GAME( 1985, 99lstwarb, repulse, repulse, repulse, kyugo_state, 0, ROT90, "bootleg", "'99: The Last War (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // bg_tilemap is wrong in some levels
|
||||
GAME( 1985, sonofphx, repulse, repulse, repulse, kyugo_state, 0, ROT90, "bootleg (Associated Overseas MFR, Inc.)", "Son of Phoenix (bootleg of Repulse)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, flashgal, 0, repulse, flashgal, kyugo_state, 0, ROT0, "Kyugo / Sega", "Flashgal (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, flashgalk, flashgal, repulse, flashgal, kyugo_state, 0, ROT0, "Kyugo / Sega", "Flashgal (set 1, Kyugo logo)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -22,6 +22,28 @@ public:
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
|
||||
DECLARE_WRITE8_MEMBER(coin_counter_w);
|
||||
DECLARE_WRITE8_MEMBER(fgvideoram_w);
|
||||
DECLARE_WRITE8_MEMBER(bgvideoram_w);
|
||||
DECLARE_WRITE8_MEMBER(bgattribram_w);
|
||||
DECLARE_READ8_MEMBER(spriteram_2_r);
|
||||
DECLARE_WRITE8_MEMBER(scroll_x_lo_w);
|
||||
DECLARE_WRITE8_MEMBER(gfxctrl_w);
|
||||
DECLARE_WRITE8_MEMBER(scroll_y_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
|
||||
|
||||
DECLARE_DRIVER_INIT(srdmissn);
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(vblank_irq);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
/* memory pointers */
|
||||
required_shared_ptr<uint8_t> m_fgvideoram;
|
||||
required_shared_ptr<uint8_t> m_bgvideoram;
|
||||
@ -30,6 +52,8 @@ public:
|
||||
required_shared_ptr<uint8_t> m_spriteram_2;
|
||||
required_shared_ptr<uint8_t> m_shared_ram;
|
||||
|
||||
uint8_t m_nmi_mask;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
@ -46,24 +70,7 @@ public:
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
uint8_t m_nmi_mask;
|
||||
DECLARE_WRITE_LINE_MEMBER(nmi_mask_w);
|
||||
DECLARE_WRITE8_MEMBER(kyugo_coin_counter_w);
|
||||
DECLARE_WRITE8_MEMBER(kyugo_fgvideoram_w);
|
||||
DECLARE_WRITE8_MEMBER(kyugo_bgvideoram_w);
|
||||
DECLARE_WRITE8_MEMBER(kyugo_bgattribram_w);
|
||||
DECLARE_READ8_MEMBER(kyugo_spriteram_2_r);
|
||||
DECLARE_WRITE8_MEMBER(kyugo_scroll_x_lo_w);
|
||||
DECLARE_WRITE8_MEMBER(kyugo_gfxctrl_w);
|
||||
DECLARE_WRITE8_MEMBER(kyugo_scroll_y_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
|
||||
DECLARE_DRIVER_INIT(srdmissn);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
uint32_t screen_update_kyugo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
INTERRUPT_GEN_MEMBER(vblank_irq);
|
||||
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
@ -17483,6 +17483,7 @@ trsm100 //
|
||||
@source:kyugo.cpp
|
||||
99lstwar // (c) 1985 Proma
|
||||
99lstwara // (c) 1985 Proma
|
||||
99lstwarb // bootleg
|
||||
99lstwark // (c) 1985 Kyugo
|
||||
airwolf // (c) 1987 Kyugo
|
||||
airwolfa // (c) 1987 Kyugo
|
||||
|
@ -62,41 +62,41 @@ void kyugo_state::video_start()
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE8_MEMBER(kyugo_state::kyugo_fgvideoram_w)
|
||||
WRITE8_MEMBER(kyugo_state::fgvideoram_w)
|
||||
{
|
||||
m_fgvideoram[offset] = data;
|
||||
m_fg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(kyugo_state::kyugo_bgvideoram_w)
|
||||
WRITE8_MEMBER(kyugo_state::bgvideoram_w)
|
||||
{
|
||||
m_bgvideoram[offset] = data;
|
||||
m_bg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(kyugo_state::kyugo_bgattribram_w)
|
||||
WRITE8_MEMBER(kyugo_state::bgattribram_w)
|
||||
{
|
||||
m_bgattribram[offset] = data;
|
||||
m_bg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(kyugo_state::kyugo_spriteram_2_r)
|
||||
READ8_MEMBER(kyugo_state::spriteram_2_r)
|
||||
{
|
||||
// only the lower nibble is connected
|
||||
return m_spriteram_2[offset] | 0xf0;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(kyugo_state::kyugo_scroll_x_lo_w)
|
||||
WRITE8_MEMBER(kyugo_state::scroll_x_lo_w)
|
||||
{
|
||||
m_scroll_x_lo = data;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(kyugo_state::kyugo_gfxctrl_w)
|
||||
WRITE8_MEMBER(kyugo_state::gfxctrl_w)
|
||||
{
|
||||
/* bit 0 is scroll MSB */
|
||||
m_scroll_x_hi = data & 0x01;
|
||||
@ -121,7 +121,7 @@ WRITE8_MEMBER(kyugo_state::kyugo_gfxctrl_w)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(kyugo_state::kyugo_scroll_y_w)
|
||||
WRITE8_MEMBER(kyugo_state::scroll_y_w)
|
||||
{
|
||||
m_scroll_y = data;
|
||||
}
|
||||
@ -139,7 +139,7 @@ WRITE_LINE_MEMBER(kyugo_state::flipscreen_w)
|
||||
*
|
||||
*************************************/
|
||||
|
||||
void kyugo_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
void kyugo_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
/* sprite information is scattered through memory */
|
||||
/* and uses a portion of the text layer memory (outside the visible area) */
|
||||
@ -197,7 +197,7 @@ void kyugo_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
}
|
||||
|
||||
|
||||
uint32_t kyugo_state::screen_update_kyugo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t kyugo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
if (flip_screen())
|
||||
m_bg_tilemap->set_scrollx(0, -(m_scroll_x_lo + (m_scroll_x_hi * 256)));
|
||||
|
Loading…
Reference in New Issue
Block a user