summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2021-06-22 19:13:01 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2021-06-22 19:13:01 +0200
commit8d6be45eb7fec49b5819ddb6e6d66f3f933b1be7 (patch)
tree68c6b79dbe3e63a8bf6d835852899ce8d0f67f4f /src
parenta8c17dc44ff5596c6efe16fc3bfe43c379c6cecd (diff)
- suna8.cpp: dumped PROM for starfigh [system11]
- tattack.cpp: added save state support
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/suna16.cpp2
-rw-r--r--src/mame/drivers/suna8.cpp3
-rw-r--r--src/mame/drivers/tattack.cpp72
3 files changed, 41 insertions, 36 deletions
diff --git a/src/mame/drivers/suna16.cpp b/src/mame/drivers/suna16.cpp
index fbbd9e963ab..ca6d988a863 100644
--- a/src/mame/drivers/suna16.cpp
+++ b/src/mame/drivers/suna16.cpp
@@ -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
diff --git a/src/mame/drivers/suna8.cpp b/src/mame/drivers/suna8.cpp
index 18a42183dc4..fefa3bad73d 100644
--- a/src/mame/drivers/suna8.cpp
+++ b/src/mame/drivers/suna8.cpp
@@ -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
diff --git a/src/mame/drivers/tattack.cpp b/src/mame/drivers/tattack.cpp
index cee3c8b9b35..87d9586e3b1 100644
--- a/src/mame/drivers/tattack.cpp
+++ b/src/mame/drivers/tattack.cpp
@@ -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