mirror of
https://github.com/holub/mame
synced 2025-06-12 15:45:52 +03:00
- suna8.cpp: dumped PROM for starfigh [system11]
- tattack.cpp: added save state support
This commit is contained in:
parent
a8c17dc44f
commit
8d6be45eb7
@ -1355,7 +1355,7 @@ ROM_START( bestbest )
|
|||||||
ROM_LOAD16_BYTE( "12.bin", 0x300001, 0x80000, CRC(ca7c8176) SHA1(1ec99db3e0840b4647d6ccdf6fda118fa9ad4f42) )
|
ROM_LOAD16_BYTE( "12.bin", 0x300001, 0x80000, CRC(ca7c8176) SHA1(1ec99db3e0840b4647d6ccdf6fda118fa9ad4f42) )
|
||||||
|
|
||||||
ROM_REGION( 0x200, "proms", 0 ) // ?
|
ROM_REGION( 0x200, "proms", 0 ) // ?
|
||||||
ROM_LOAD( "82s129.5", 0x000, 0x100, CRC(10bfcebb) SHA1(ae8708db7d3a8984f16e876867ecdbb4445e3378) ) // FIXED BITS (0000xx0x0000xxxx)
|
ROM_LOAD( "82s129.5", 0x000, 0x100, CRC(10bfcebb) SHA1(ae8708db7d3a8984f16e876867ecdbb4445e3378) ) // FIXED BITS (0000xx0x0000xxxx), same as the one for starfigh in suna8.cpp
|
||||||
ROM_LOAD( "82s129.6", 0x100, 0x100, CRC(10bfcebb) SHA1(ae8708db7d3a8984f16e876867ecdbb4445e3378) ) // identical to 82s129.5
|
ROM_LOAD( "82s129.6", 0x100, 0x100, CRC(10bfcebb) SHA1(ae8708db7d3a8984f16e876867ecdbb4445e3378) ) // identical to 82s129.5
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
@ -2985,6 +2985,9 @@ ROM_START( starfigh )
|
|||||||
ROM_LOAD( "starfgtr.b6", 0xc0000, 0x10000, CRC(47d6049c) SHA1(cae0795a19cb6bb8bdabc10c200aa6f8d78dd347) )
|
ROM_LOAD( "starfgtr.b6", 0xc0000, 0x10000, CRC(47d6049c) SHA1(cae0795a19cb6bb8bdabc10c200aa6f8d78dd347) )
|
||||||
ROM_LOAD( "starfgtr.a6", 0xd0000, 0x10000, CRC(4a33f6f3) SHA1(daa0a1a43b1b60e2f05b9934fdd6b5f285a0b93a) )
|
ROM_LOAD( "starfgtr.a6", 0xd0000, 0x10000, CRC(4a33f6f3) SHA1(daa0a1a43b1b60e2f05b9934fdd6b5f285a0b93a) )
|
||||||
ROM_COPY( "gfx1", 0xc0000, 0xe0000, 0x20000 )
|
ROM_COPY( "gfx1", 0xc0000, 0xe0000, 0x20000 )
|
||||||
|
|
||||||
|
ROM_REGION( 0x100, "proms", 0 )
|
||||||
|
ROM_LOAD( "82s129.5q", 0x000, 0x100, CRC(10bfcebb) SHA1(ae8708db7d3a8984f16e876867ecdbb4445e3378) ) // ??, same as the ones for bestbest in suna16.cpp
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,9 +9,15 @@
|
|||||||
Z80A,
|
Z80A,
|
||||||
xtal 8MHz,
|
xtal 8MHz,
|
||||||
dipsw 8-position x2,
|
dipsw 8-position x2,
|
||||||
volume pots x6,
|
volume pots x6: (descriptions from DIP switch sheet)
|
||||||
|
VR1: Adjust Bat Position
|
||||||
|
VR2: Sound Volume
|
||||||
|
VR3: Screen Flip (?)
|
||||||
|
VR4: Anti Short-Circuit Crimes (?)
|
||||||
|
VR5: Screen Vertical Position
|
||||||
|
VR6: Ball Shape
|
||||||
2114 ram x5,
|
2114 ram x5,
|
||||||
7910CQ + NE555P sound section,
|
7910CQ (EPSON melody IC) + NE555P sound section,
|
||||||
SN74198N shifter
|
SN74198N shifter
|
||||||
no proms
|
no proms
|
||||||
|
|
||||||
@ -19,8 +25,10 @@
|
|||||||
- non-tilemap video offsets/sizes are guessed;
|
- non-tilemap video offsets/sizes are guessed;
|
||||||
- random brick flickering effect is guessed too, leave MACHINE_IMPERFECT_COLORS in until is tested on HW.
|
- random brick flickering effect is guessed too, leave MACHINE_IMPERFECT_COLORS in until is tested on HW.
|
||||||
- outputs (coin counter port same as sound writes?);
|
- outputs (coin counter port same as sound writes?);
|
||||||
- some dipswitches;
|
- hook up pots, some are useful for in-game adjustments such as paddle adjust and ball shape (ball is currently a rectangle).
|
||||||
- sound (requires Epson 7910 Multi-Melody emulation?)
|
- hook up background color jumper (can be changed to black or blue)
|
||||||
|
- player bat moves in steps. It this correct compared to real PCB?
|
||||||
|
- sound (Music requires Epson 7910CQ Multi-Melody ROM & emulation)
|
||||||
\- victory BGM cuts off too late?
|
\- victory BGM cuts off too late?
|
||||||
|
|
||||||
Connector pinout from manual
|
Connector pinout from manual
|
||||||
@ -86,10 +94,10 @@ private:
|
|||||||
void sound_w(uint8_t data);
|
void sound_w(uint8_t data);
|
||||||
|
|
||||||
TILE_GET_INFO_MEMBER(get_tile_info);
|
TILE_GET_INFO_MEMBER(get_tile_info);
|
||||||
void tattack_palette(palette_device &palette) const;
|
void palette(palette_device &palette) const;
|
||||||
|
|
||||||
uint32_t screen_update_tattack(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
void tattack_map(address_map &map);
|
void prg_map(address_map &map);
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_shared_ptr<uint8_t> m_ram;
|
required_shared_ptr<uint8_t> m_ram;
|
||||||
@ -100,7 +108,7 @@ private:
|
|||||||
tilemap_t *m_tmap;
|
tilemap_t *m_tmap;
|
||||||
uint8_t m_ball_regs[2];
|
uint8_t m_ball_regs[2];
|
||||||
uint8_t m_paddle_reg;
|
uint8_t m_paddle_reg;
|
||||||
int m_paddle_ysize;
|
uint8_t m_paddle_ysize;
|
||||||
bool m_bottom_edge_enable;
|
bool m_bottom_edge_enable;
|
||||||
bool m_bricks_color_bank;
|
bool m_bricks_color_bank;
|
||||||
|
|
||||||
@ -214,7 +222,7 @@ void tattack_state::draw_gameplay_bitmap(bitmap_ind16 &bitmap, const rectangle &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t tattack_state::screen_update_tattack(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
uint32_t tattack_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
{
|
{
|
||||||
m_tmap->mark_all_dirty();
|
m_tmap->mark_all_dirty();
|
||||||
m_tmap->draw(screen, bitmap, cliprect, 0,0);
|
m_tmap->draw(screen, bitmap, cliprect, 0,0);
|
||||||
@ -231,6 +239,12 @@ uint32_t tattack_state::screen_update_tattack(screen_device &screen, bitmap_ind1
|
|||||||
void tattack_state::video_start()
|
void tattack_state::video_start()
|
||||||
{
|
{
|
||||||
m_tmap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tattack_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8,8, 32,32);
|
m_tmap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tattack_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8,8, 32,32);
|
||||||
|
|
||||||
|
save_item(NAME(m_ball_regs));
|
||||||
|
save_item(NAME(m_paddle_reg));
|
||||||
|
save_item(NAME(m_paddle_ysize));
|
||||||
|
save_item(NAME(m_bottom_edge_enable));
|
||||||
|
save_item(NAME(m_bricks_color_bank));
|
||||||
}
|
}
|
||||||
|
|
||||||
void tattack_state::paddle_w(uint8_t data)
|
void tattack_state::paddle_w(uint8_t data)
|
||||||
@ -271,20 +285,20 @@ void tattack_state::sound_w(uint8_t data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tattack_state::tattack_map(address_map &map)
|
void tattack_state::prg_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0000, 0x0fff).rom();
|
map(0x0000, 0x0fff).rom();
|
||||||
map(0x4000, 0x4000).portr("AN_PADDLE"); // $315, checks again with same memory, loops if different (?)
|
map(0x4000, 0x4000).portr("AN_PADDLE"); // $315, checks again with same memory, loops if different (?)
|
||||||
map(0x5000, 0x53ff).ram().share("videoram");
|
map(0x5000, 0x53ff).ram().share(m_videoram);
|
||||||
map(0x6000, 0x6000).portr("DSW1");
|
map(0x6000, 0x6000).portr("DSW1");
|
||||||
map(0x7000, 0x73ff).ram().share("colorram"); // color map ? something else .. only bits 1-3 are used
|
map(0x7000, 0x73ff).ram().share(m_colorram); // color map ? something else .. only bits 1-3 are used
|
||||||
map(0xa000, 0xa000).portr("DSW2");
|
map(0xa000, 0xa000).portr("DSW2");
|
||||||
map(0xc000, 0xc000).portr("INPUTS").w(FUNC(tattack_state::sound_w)); // sound
|
map(0xc000, 0xc000).portr("INPUTS").w(FUNC(tattack_state::sound_w));
|
||||||
map(0xc001, 0xc001).w(FUNC(tattack_state::brick_dma_w)); // bit 7 = strobe ($302)
|
map(0xc001, 0xc001).w(FUNC(tattack_state::brick_dma_w)); // bit 7 = strobe ($302)
|
||||||
map(0xc002, 0xc002).nopw(); // same as sound port, outputs?
|
map(0xc002, 0xc002).nopw(); // same as sound port, outputs?
|
||||||
map(0xc005, 0xc005).w(FUNC(tattack_state::paddle_w));
|
map(0xc005, 0xc005).w(FUNC(tattack_state::paddle_w));
|
||||||
map(0xc006, 0xc007).w(FUNC(tattack_state::ball_w));
|
map(0xc006, 0xc007).w(FUNC(tattack_state::ball_w));
|
||||||
map(0xe000, 0xe3ff).ram().share("ram");
|
map(0xe000, 0xe3ff).ram().share(m_ram);
|
||||||
}
|
}
|
||||||
|
|
||||||
static INPUT_PORTS_START( tattack )
|
static INPUT_PORTS_START( tattack )
|
||||||
@ -324,8 +338,8 @@ static INPUT_PORTS_START( tattack )
|
|||||||
PORT_DIPSETTING( 0x0d, "3:05" )
|
PORT_DIPSETTING( 0x0d, "3:05" )
|
||||||
PORT_DIPSETTING( 0x0e, "3:10" )
|
PORT_DIPSETTING( 0x0e, "3:10" )
|
||||||
PORT_DIPSETTING( 0x0f, "3:15" )
|
PORT_DIPSETTING( 0x0f, "3:15" )
|
||||||
PORT_DIPNAME( 0x10, 0x10, "Bonus Block" ) PORT_DIPLOCATION( "SW1:5" )
|
PORT_DIPNAME( 0x10, 0x10, "Blinking Brick Awards 30 Seconds" ) PORT_DIPLOCATION( "SW1:5" )
|
||||||
PORT_DIPSETTING( 0x00, "Once" ) // how is the 'bonus' achieved?
|
PORT_DIPSETTING( 0x00, "Once Only" ) // extra 30 seconds of time awarded if the blinking brick is hit
|
||||||
PORT_DIPSETTING( 0x10, "No Limit" )
|
PORT_DIPSETTING( 0x10, "No Limit" )
|
||||||
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION( "SW1:6" )
|
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION( "SW1:6" )
|
||||||
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
|
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
|
||||||
@ -364,24 +378,12 @@ static INPUT_PORTS_START( tattack )
|
|||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
static const gfx_layout charlayout =
|
|
||||||
{
|
|
||||||
8,8,
|
|
||||||
RGN_FRAC(1,1),
|
|
||||||
1,
|
|
||||||
{ 0 },
|
|
||||||
{ 0, 1, 2, 3, 4, 5, 6, 7},
|
|
||||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
|
||||||
8*8
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_tattack )
|
static GFXDECODE_START( gfx_tattack )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0 , charlayout, 0, 8 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x1, 0, 8 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
void tattack_state::tattack_palette(palette_device &palette) const
|
void tattack_state::palette(palette_device &palette) const
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
@ -414,7 +416,7 @@ void tattack_state::tattack(machine_config &config)
|
|||||||
{
|
{
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
Z80(config, m_maincpu, 8000000 / 2); /* 4 MHz ? */
|
Z80(config, m_maincpu, 8000000 / 2); /* 4 MHz ? */
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &tattack_state::tattack_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &tattack_state::prg_map);
|
||||||
m_maincpu->set_vblank_int("screen", FUNC(tattack_state::irq0_line_hold));
|
m_maincpu->set_vblank_int("screen", FUNC(tattack_state::irq0_line_hold));
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
@ -423,11 +425,11 @@ void tattack_state::tattack(machine_config &config)
|
|||||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
|
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
|
||||||
screen.set_size(32*8, 32*8);
|
screen.set_size(32*8, 32*8);
|
||||||
screen.set_visarea(24, 256-32-1, 13, 256-11-1);
|
screen.set_visarea(24, 256-32-1, 13, 256-11-1);
|
||||||
screen.set_screen_update(FUNC(tattack_state::screen_update_tattack));
|
screen.set_screen_update(FUNC(tattack_state::screen_update));
|
||||||
screen.set_palette("palette");
|
screen.set_palette("palette");
|
||||||
|
|
||||||
GFXDECODE(config, m_gfxdecode, "palette", gfx_tattack);
|
GFXDECODE(config, m_gfxdecode, "palette", gfx_tattack);
|
||||||
PALETTE(config, "palette", FUNC(tattack_state::tattack_palette), 16);
|
PALETTE(config, "palette", FUNC(tattack_state::palette), 16);
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
@ -498,5 +500,5 @@ void tattack_state::init_tattack()
|
|||||||
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
GAME( 1983?, tattack, 0, tattack, tattack, tattack_state, init_tattack, ROT270, "Shonan", "Time Attacker", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL )
|
GAME( 1983?, tattack, 0, tattack, tattack, tattack_state, init_tattack, ROT270, "Shonan", "Time Attacker", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||||
// there is another undumped version with katakana Shonan logo and black background
|
// there is another undumped version with katakana Shonan logo and black background
|
||||||
|
Loading…
Reference in New Issue
Block a user