mirror of
https://github.com/holub/mame
synced 2025-06-06 12:53:46 +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_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_END
|
||||
|
||||
|
@ -2985,6 +2985,9 @@ ROM_START( starfigh )
|
||||
ROM_LOAD( "starfgtr.b6", 0xc0000, 0x10000, CRC(47d6049c) SHA1(cae0795a19cb6bb8bdabc10c200aa6f8d78dd347) )
|
||||
ROM_LOAD( "starfgtr.a6", 0xd0000, 0x10000, CRC(4a33f6f3) SHA1(daa0a1a43b1b60e2f05b9934fdd6b5f285a0b93a) )
|
||||
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
|
||||
|
||||
|
||||
|
@ -9,9 +9,15 @@
|
||||
Z80A,
|
||||
xtal 8MHz,
|
||||
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,
|
||||
7910CQ + NE555P sound section,
|
||||
7910CQ (EPSON melody IC) + NE555P sound section,
|
||||
SN74198N shifter
|
||||
no proms
|
||||
|
||||
@ -19,8 +25,10 @@
|
||||
- non-tilemap video offsets/sizes are guessed;
|
||||
- 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?);
|
||||
- some dipswitches;
|
||||
- sound (requires Epson 7910 Multi-Melody emulation?)
|
||||
- hook up pots, some are useful for in-game adjustments such as paddle adjust and ball shape (ball is currently a rectangle).
|
||||
- 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?
|
||||
|
||||
Connector pinout from manual
|
||||
@ -69,7 +77,7 @@ public:
|
||||
m_videoram(*this, "videoram"),
|
||||
m_colorram(*this, "colorram"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_samples(*this,"samples")
|
||||
m_samples(*this, "samples")
|
||||
{ }
|
||||
|
||||
void tattack(machine_config &config);
|
||||
@ -86,10 +94,10 @@ private:
|
||||
void sound_w(uint8_t data);
|
||||
|
||||
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);
|
||||
void tattack_map(address_map &map);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void prg_map(address_map &map);
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_shared_ptr<uint8_t> m_ram;
|
||||
@ -100,7 +108,7 @@ private:
|
||||
tilemap_t *m_tmap;
|
||||
uint8_t m_ball_regs[2];
|
||||
uint8_t m_paddle_reg;
|
||||
int m_paddle_ysize;
|
||||
uint8_t m_paddle_ysize;
|
||||
bool m_bottom_edge_enable;
|
||||
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->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()
|
||||
{
|
||||
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)
|
||||
@ -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(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(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(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(0xc002, 0xc002).nopw(); // same as sound port, outputs?
|
||||
map(0xc005, 0xc005).w(FUNC(tattack_state::paddle_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 )
|
||||
@ -324,8 +338,8 @@ static INPUT_PORTS_START( tattack )
|
||||
PORT_DIPSETTING( 0x0d, "3:05" )
|
||||
PORT_DIPSETTING( 0x0e, "3:10" )
|
||||
PORT_DIPSETTING( 0x0f, "3:15" )
|
||||
PORT_DIPNAME( 0x10, 0x10, "Bonus Block" ) PORT_DIPLOCATION( "SW1:5" )
|
||||
PORT_DIPSETTING( 0x00, "Once" ) // how is the 'bonus' achieved?
|
||||
PORT_DIPNAME( 0x10, 0x10, "Blinking Brick Awards 30 Seconds" ) PORT_DIPLOCATION( "SW1:5" )
|
||||
PORT_DIPSETTING( 0x00, "Once Only" ) // extra 30 seconds of time awarded if the blinking brick is hit
|
||||
PORT_DIPSETTING( 0x10, "No Limit" )
|
||||
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION( "SW1:6" )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
|
||||
@ -364,24 +378,12 @@ static INPUT_PORTS_START( tattack )
|
||||
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 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0 , charlayout, 0, 8 )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x1, 0, 8 )
|
||||
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++)
|
||||
{
|
||||
@ -414,7 +416,7 @@ void tattack_state::tattack(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
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));
|
||||
|
||||
/* 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_size(32*8, 32*8);
|
||||
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");
|
||||
|
||||
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 */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
@ -498,5 +500,5 @@ void tattack_state::init_tattack()
|
||||
|
||||
} // 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
|
||||
|
Loading…
Reference in New Issue
Block a user