summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2020-07-02 22:55:16 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2020-07-02 22:55:16 +0200
commit51e4edf8c24fb83516da348883c2050424ef1492 (patch)
treecc9f3859269d4f0308e216f55dcb636b039bce7b /src
parentcd14ef8e6c56b35b4ce9d8467d83892dcc068140 (diff)
big10.cpp, kas89.cpp, kurukuru.cpp, tonton.cpp: enabled save state support.
luckybal.cpp, rulechan.cpp: fixed save state support.
Diffstat (limited to 'src')
-rw-r--r--src/devices/video/v9938.cpp49
-rw-r--r--src/devices/video/v9938.h1
-rw-r--r--src/mame/drivers/big10.cpp24
-rw-r--r--src/mame/drivers/kas89.cpp201
-rw-r--r--src/mame/drivers/kurukuru.cpp30
-rw-r--r--src/mame/drivers/luckybal.cpp31
-rw-r--r--src/mame/drivers/rulechan.cpp33
-rw-r--r--src/mame/drivers/tonton.cpp41
8 files changed, 234 insertions, 176 deletions
diff --git a/src/devices/video/v9938.cpp b/src/devices/video/v9938.cpp
index 4549dae9e6e..0876a3b9923 100644
--- a/src/devices/video/v9938.cpp
+++ b/src/devices/video/v9938.cpp
@@ -33,7 +33,6 @@ todo:
- vdp engine -- make run at correct speed
- vr/hr/fh flags: double-check all of that
- make vdp engine work in exp. ram
-- fix save state support
*/
#include "emu.h"
@@ -643,9 +642,8 @@ void v99x8_device::device_start()
save_item(NAME(m_stat_reg));
save_item(NAME(m_cont_reg));
save_item(NAME(m_read_ahead));
- // save_item(NAME(m_vram));
- // if ( m_vram_exp != nullptr )
- // save_pointer(NAME(m_vram_exp), 0x10000);
+ save_item(NAME(m_v9958_sp_mode));
+ save_item(NAME(m_address_latch));
save_item(NAME(m_int_state));
save_item(NAME(m_scanline));
save_item(NAME(m_blink));
@@ -716,7 +714,6 @@ void v99x8_device::device_reset()
set_screen_parameters();
}
-
void v99x8_device::reset_palette()
{
// taken from V9938 Technical Data book, page 148. it's in G-R-B format
@@ -3059,3 +3056,45 @@ void v99x8_device::update_command()
if(m_vdp_engine) (this->*m_vdp_engine)();
}
}
+
+void v99x8_device::device_post_load() // TODO: is there a better way to restore this?
+{
+ switch(m_mmc.CM)
+ {
+ case CM_ABRT:
+ case CM_POINT:
+ case CM_PSET:
+ m_vdp_engine=nullptr;
+ break;
+ case CM_SRCH:
+ m_vdp_engine=&v99x8_device::srch_engine;
+ break;
+ case CM_LINE:
+ m_vdp_engine=&v99x8_device::line_engine;
+ break;
+ case CM_LMMV:
+ m_vdp_engine=&v99x8_device::lmmv_engine;
+ break;
+ case CM_LMMM:
+ m_vdp_engine=&v99x8_device::lmmm_engine;
+ break;
+ case CM_LMCM:
+ m_vdp_engine=&v99x8_device::lmcm_engine;
+ break;
+ case CM_LMMC:
+ m_vdp_engine=&v99x8_device::lmmc_engine;
+ break;
+ case CM_HMMV:
+ m_vdp_engine=&v99x8_device::hmmv_engine;
+ break;
+ case CM_HMMM:
+ m_vdp_engine=&v99x8_device::hmmm_engine;
+ break;
+ case CM_YMMM:
+ m_vdp_engine=&v99x8_device::ymmm_engine;
+ break;
+ case CM_HMMC:
+ m_vdp_engine=&v99x8_device::hmmc_engine;
+ break;
+ }
+}
diff --git a/src/devices/video/v9938.h b/src/devices/video/v9938.h
index 3eaf27b4140..3d3b06f8771 100644
--- a/src/devices/video/v9938.h
+++ b/src/devices/video/v9938.h
@@ -101,6 +101,7 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+ virtual void device_post_load() override;
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;
diff --git a/src/mame/drivers/big10.cpp b/src/mame/drivers/big10.cpp
index 5a1a602c000..4054ff3be05 100644
--- a/src/mame/drivers/big10.cpp
+++ b/src/mame/drivers/big10.cpp
@@ -51,7 +51,7 @@
***************************************************************************/
-#define MASTER_CLOCK XTAL(21'477'272) /* Dumper notes poorly refers to a 21.?727 Xtal. */
+#define MASTER_CLOCK XTAL(21'477'272) // Dumper notes poorly refers to a 21.?727 Xtal.
#include "emu.h"
@@ -136,11 +136,11 @@ void big10_state::main_map(address_map &map)
void big10_state::main_io(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).r(FUNC(big10_state::mux_r)); /* present in test mode */
- map(0x02, 0x02).portr("SYSTEM"); /* coins and service */
+ map(0x00, 0x00).r(FUNC(big10_state::mux_r)); // present in test mode
+ map(0x02, 0x02).portr("SYSTEM"); // coins and service
map(0x98, 0x9b).rw("v9938", FUNC(v9938_device::read), FUNC(v9938_device::write));
map(0xa0, 0xa1).w("aysnd", FUNC(ay8910_device::address_data_w));
- map(0xa2, 0xa2).r("aysnd", FUNC(ay8910_device::data_r)); /* Dip-Switches routes here. */
+ map(0xa2, 0xa2).r("aysnd", FUNC(ay8910_device::data_r)); // Dip-Switches routes here.
}
@@ -219,7 +219,7 @@ static INPUT_PORTS_START( big10 )
PORT_DIPSETTING( 0x80, "x5" )
PORT_DIPSETTING( 0xC0, "x10" )
- /* Unconnected, probably missing from the board */
+ // Unconnected, probably missing from the board
PORT_START("DSW2")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
@@ -231,23 +231,23 @@ INPUT_PORTS_END
void big10_state::big10(machine_config &config)
{
- /* basic machine hardware */
- Z80(config, m_maincpu, MASTER_CLOCK/6); /* guess */
+ // basic machine hardware
+ Z80(config, m_maincpu, MASTER_CLOCK/6); // guess
m_maincpu->set_addrmap(AS_PROGRAM, &big10_state::main_map);
m_maincpu->set_addrmap(AS_IO, &big10_state::main_io);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* video hardware */
+ // video hardware
v9938_device &v9938(V9938(config, "v9938", MASTER_CLOCK));
v9938.set_screen_ntsc("screen");
v9938.set_vram_size(VDP_MEM);
v9938.int_cb().set_inputline("maincpu", 0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
- ym2149_device &aysnd(YM2149(config, "aysnd", MASTER_CLOCK/12)); /* guess */
+ ym2149_device &aysnd(YM2149(config, "aysnd", MASTER_CLOCK/12)); // guess
aysnd.port_a_read_callback().set_ioport("DSW2");
aysnd.port_b_read_callback().set_ioport("DSW1");
aysnd.port_a_write_callback().set(FUNC(big10_state::mux_w));
@@ -273,5 +273,5 @@ ROM_END
* Game Driver(s) *
**************************************/
-/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
-GAME( 1985, big10, 0, big10, big10, big10_state, empty_init, ROT0, "Success", "Big 10", 0 )
+/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
+GAME( 1985, big10, 0, big10, big10, big10_state, empty_init, ROT0, "Success", "Big 10", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/kas89.cpp b/src/mame/drivers/kas89.cpp
index 2660c3d8454..1d3739ce375 100644
--- a/src/mame/drivers/kas89.cpp
+++ b/src/mame/drivers/kas89.cpp
@@ -125,7 +125,7 @@
| |-D7--- Audit/Test.
'-'
- Whilest in Audit/Test mode, pressing the ADVANCE button, you can enter into
+ Whilst in Audit/Test mode, pressing the ADVANCE button, you can enter into
screen and inputs test mode.
This ADVANCE button, is routed into a latch with D0, sharing with BET button.
@@ -213,12 +213,7 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_soundlatch(*this, "soundlatch"),
- m_pl1(*this, "PL1"),
- m_pl2(*this, "PL2"),
- m_pl3(*this, "PL3"),
- m_pl4(*this, "PL4"),
- m_pl5(*this, "PL5"),
- m_pl6(*this, "PL6"),
+ m_pl(*this, "PL%u", 1),
m_svc(*this, "SVC"),
m_dsw(*this, "DSW"),
m_unk(*this, "UNK"),
@@ -229,6 +224,10 @@ public:
void init_kas89();
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
private:
void mux_w(uint8_t data);
uint8_t mux_r();
@@ -237,32 +236,24 @@ private:
void int_ack_w(uint8_t data);
void led_mux_data_w(uint8_t data);
void led_mux_select_w(uint8_t data);
- TIMER_DEVICE_CALLBACK_MEMBER(kas89_nmi_cb);
- TIMER_DEVICE_CALLBACK_MEMBER(kas89_sound_nmi_cb);
+ TIMER_DEVICE_CALLBACK_MEMBER(nmi_cb);
+ TIMER_DEVICE_CALLBACK_MEMBER(sound_nmi_cb);
void audio_io(address_map &map);
void audio_map(address_map &map);
void kas89_io(address_map &map);
void kas89_map(address_map &map);
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
uint8_t m_mux_data;
uint8_t m_main_nmi_enable;
uint8_t m_leds_mux_selector;
uint8_t m_leds_mux_data;
- uint8_t m_outdata; /* Muxed with the sound latch. Output to a sign? */
+ uint8_t m_outdata; // Muxed with the sound latch. Output to a sign?
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<generic_latch_8_device> m_soundlatch;
- required_ioport m_pl1;
- required_ioport m_pl2;
- required_ioport m_pl3;
- required_ioport m_pl4;
- required_ioport m_pl5;
- required_ioport m_pl6;
+ required_ioport_array<6> m_pl;
required_ioport m_svc;
required_ioport m_dsw;
required_ioport m_unk;
@@ -277,7 +268,13 @@ private:
void kas89_state::machine_start()
{
m_lamps.resolve();
- m_lamps[37] = 0; /* turning off the operator led */
+ m_lamps[37] = 0; // turning off the operator led
+
+ save_item(NAME(m_mux_data));
+ save_item(NAME(m_main_nmi_enable));
+ save_item(NAME(m_leds_mux_selector));
+ save_item(NAME(m_leds_mux_data));
+ save_item(NAME(m_outdata));
}
void kas89_state::machine_reset()
@@ -306,18 +303,18 @@ uint8_t kas89_state::mux_r()
{
switch(m_mux_data)
{
- case 0x01: return m_pl1->read();
- case 0x02: return m_pl2->read();
- case 0x04: return m_pl3->read();
- case 0x08: return m_pl4->read();
- case 0x10: return m_pl5->read();
- case 0x20: return m_pl6->read();
+ case 0x01: return m_pl[0]->read();
+ case 0x02: return m_pl[1]->read();
+ case 0x04: return m_pl[2]->read();
+ case 0x08: return m_pl[3]->read();
+ case 0x10: return m_pl[4]->read();
+ case 0x20: return m_pl[5]->read();
case 0x40:
{
- m_lamps[37] = BIT(~m_svc->read(), 5); /* Operator Key LAMP */
+ m_lamps[37] = BIT(~m_svc->read(), 5); // Operator Key LAMP
return m_svc->read();
}
- case 0x80: return m_dsw->read(); /* Polled at $162a through NMI routine */
+ case 0x80: return m_dsw->read(); // Polled at $162a through NMI routine
case 0x3f: return m_unk->read();
}
@@ -325,13 +322,13 @@ uint8_t kas89_state::mux_r()
return m_mux_data;
}
-TIMER_DEVICE_CALLBACK_MEMBER(kas89_state::kas89_nmi_cb)
+TIMER_DEVICE_CALLBACK_MEMBER(kas89_state::nmi_cb)
{
if (m_main_nmi_enable)
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
-TIMER_DEVICE_CALLBACK_MEMBER(kas89_state::kas89_sound_nmi_cb)
+TIMER_DEVICE_CALLBACK_MEMBER(kas89_state::sound_nmi_cb)
{
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
@@ -350,8 +347,8 @@ void kas89_state::control_w(uint8_t data)
m_main_nmi_enable = data & 0x40;
- machine().bookkeeping().coin_counter_w(0, (data ^ 0xff) & 0x01); /* Credits In counter */
- machine().bookkeeping().coin_counter_w(1, (data ^ 0xff) & 0x02); /* Credits Out counter */
+ machine().bookkeeping().coin_counter_w(0, (data ^ 0xff) & 0x01); // Credits In counter
+ machine().bookkeeping().coin_counter_w(1, (data ^ 0xff) & 0x02); // Credits Out counter
}
void kas89_state::sound_comm_w(uint8_t data)
@@ -373,14 +370,14 @@ void kas89_state::sound_comm_w(uint8_t data)
if (data & 0x40)
{
- m_outdata = (data ^ 0x40); /* Pure data. Without the activator bit */
+ m_outdata = (data ^ 0x40); // Pure data. Without the activator bit
if (m_outdata == 0x3f)
{
uint8_t i;
for ( i = 0; i < 37; i++ )
{
- m_lamps[i] = 0; /* All roulette LEDs OFF */
+ m_lamps[i] = 0; // All roulette LEDs OFF
}
}
@@ -424,9 +421,9 @@ void kas89_state::led_mux_select_w(uint8_t data)
m_leds_mux_selector = data;
uint8_t i;
- for ( i = 0; i < 37; i++ )
+ for ( uint8_t i = 0; i < 37; i++ )
{
- m_lamps[i] = 0; /* All LEDs OFF */
+ m_lamps[i] = 0; // All LEDs OFF
}
switch(data)
@@ -435,69 +432,69 @@ void kas89_state::led_mux_select_w(uint8_t data)
{
for ( i = 0; i < 37; i++ )
{
- m_lamps[i] = 0; /* All LEDs OFF */
+ m_lamps[i] = 0; // All LEDs OFF
}
}
case 0x01:
{
- m_lamps[11] = BIT(m_leds_mux_data, 0); /* Number 11 LED */
- m_lamps[36] = BIT(m_leds_mux_data, 1); /* Number 36 LED */
- m_lamps[13] = BIT(m_leds_mux_data, 2); /* Number 13 LED */
- m_lamps[27] = BIT(m_leds_mux_data, 3); /* Number 27 LED */
- m_lamps[06] = BIT(m_leds_mux_data, 4); /* Number 6 LED */
- m_lamps[34] = BIT(m_leds_mux_data, 5); /* Number 34 LED */
- m_lamps[17] = BIT(m_leds_mux_data, 6); /* Number 17 LED */
- m_lamps[25] = BIT(m_leds_mux_data, 7); /* Number 25 LED */
+ m_lamps[11] = BIT(m_leds_mux_data, 0); // Number 11 LED
+ m_lamps[36] = BIT(m_leds_mux_data, 1); // Number 36 LED
+ m_lamps[13] = BIT(m_leds_mux_data, 2); // Number 13 LED
+ m_lamps[27] = BIT(m_leds_mux_data, 3); // Number 27 LED
+ m_lamps[06] = BIT(m_leds_mux_data, 4); // Number 6 LED
+ m_lamps[34] = BIT(m_leds_mux_data, 5); // Number 34 LED
+ m_lamps[17] = BIT(m_leds_mux_data, 6); // Number 17 LED
+ m_lamps[25] = BIT(m_leds_mux_data, 7); // Number 25 LED
break;
}
case 0x02:
{
- m_lamps[ 2] = BIT(m_leds_mux_data, 0); /* Number 2 LED */
- m_lamps[21] = BIT(m_leds_mux_data, 1); /* Number 21 LED */
- m_lamps[ 4] = BIT(m_leds_mux_data, 2); /* Number 4 LED */
- m_lamps[19] = BIT(m_leds_mux_data, 3); /* Number 19 LED */
- m_lamps[15] = BIT(m_leds_mux_data, 4); /* Number 15 LED */
- m_lamps[32] = BIT(m_leds_mux_data, 5); /* Number 32 LED */
- m_lamps[ 0] = BIT(m_leds_mux_data, 6); /* Number 0 LED */
- m_lamps[26] = BIT(m_leds_mux_data, 7); /* Number 26 LED */
+ m_lamps[ 2] = BIT(m_leds_mux_data, 0); // Number 2 LED
+ m_lamps[21] = BIT(m_leds_mux_data, 1); // Number 21 LED
+ m_lamps[ 4] = BIT(m_leds_mux_data, 2); // Number 4 LED
+ m_lamps[19] = BIT(m_leds_mux_data, 3); // Number 19 LED
+ m_lamps[15] = BIT(m_leds_mux_data, 4); // Number 15 LED
+ m_lamps[32] = BIT(m_leds_mux_data, 5); // Number 32 LED
+ m_lamps[ 0] = BIT(m_leds_mux_data, 6); // Number 0 LED
+ m_lamps[26] = BIT(m_leds_mux_data, 7); // Number 26 LED
break;
}
case 0x04:
{
- m_lamps[ 3] = BIT(m_leds_mux_data, 0); /* Number 3 LED */
- m_lamps[35] = BIT(m_leds_mux_data, 1); /* Number 35 LED */
- m_lamps[12] = BIT(m_leds_mux_data, 2); /* Number 12 LED */
- m_lamps[28] = BIT(m_leds_mux_data, 3); /* Number 28 LED */
- m_lamps[ 7] = BIT(m_leds_mux_data, 4); /* Number 7 LED */
- m_lamps[29] = BIT(m_leds_mux_data, 5); /* Number 29 LED */
- m_lamps[18] = BIT(m_leds_mux_data, 6); /* Number 18 LED */
+ m_lamps[ 3] = BIT(m_leds_mux_data, 0); // Number 3 LED
+ m_lamps[35] = BIT(m_leds_mux_data, 1); // Number 35 LED
+ m_lamps[12] = BIT(m_leds_mux_data, 2); // Number 12 LED
+ m_lamps[28] = BIT(m_leds_mux_data, 3); // Number 28 LED
+ m_lamps[ 7] = BIT(m_leds_mux_data, 4); // Number 7 LED
+ m_lamps[29] = BIT(m_leds_mux_data, 5); // Number 29 LED
+ m_lamps[18] = BIT(m_leds_mux_data, 6); // Number 18 LED
break;
}
case 0x08:
{
- m_lamps[22] = BIT(m_leds_mux_data, 0); /* Number 22 LED */
- m_lamps[ 9] = BIT(m_leds_mux_data, 1); /* Number 9 LED */
- m_lamps[31] = BIT(m_leds_mux_data, 2); /* Number 31 LED */
- m_lamps[14] = BIT(m_leds_mux_data, 3); /* Number 14 LED */
- m_lamps[20] = BIT(m_leds_mux_data, 4); /* Number 20 LED */
- m_lamps[ 1] = BIT(m_leds_mux_data, 5); /* Number 1 LED */
- m_lamps[33] = BIT(m_leds_mux_data, 6); /* Number 33 LED */
+ m_lamps[22] = BIT(m_leds_mux_data, 0); // Number 22 LED
+ m_lamps[ 9] = BIT(m_leds_mux_data, 1); // Number 9 LED
+ m_lamps[31] = BIT(m_leds_mux_data, 2); // Number 31 LED
+ m_lamps[14] = BIT(m_leds_mux_data, 3); // Number 14 LED
+ m_lamps[20] = BIT(m_leds_mux_data, 4); // Number 20 LED
+ m_lamps[ 1] = BIT(m_leds_mux_data, 5); // Number 1 LED
+ m_lamps[33] = BIT(m_leds_mux_data, 6); // Number 33 LED
break;
}
case 0x10:
{
- m_lamps[16] = BIT(m_leds_mux_data, 0); /* Number 16 LED */
- m_lamps[24] = BIT(m_leds_mux_data, 1); /* Number 24 LED */
- m_lamps[ 5] = BIT(m_leds_mux_data, 2); /* Number 5 LED */
- m_lamps[10] = BIT(m_leds_mux_data, 3); /* Number 10 LED */
- m_lamps[23] = BIT(m_leds_mux_data, 4); /* Number 23 LED */
- m_lamps[ 8] = BIT(m_leds_mux_data, 5); /* Number 8 LED */
- m_lamps[30] = BIT(m_leds_mux_data, 6); /* Number 30 LED */
+ m_lamps[16] = BIT(m_leds_mux_data, 0); // Number 16 LED
+ m_lamps[24] = BIT(m_leds_mux_data, 1); // Number 24 LED
+ m_lamps[ 5] = BIT(m_leds_mux_data, 2); // Number 5 LED
+ m_lamps[10] = BIT(m_leds_mux_data, 3); // Number 10 LED
+ m_lamps[23] = BIT(m_leds_mux_data, 4); // Number 23 LED
+ m_lamps[ 8] = BIT(m_leds_mux_data, 5); // Number 8 LED
+ m_lamps[30] = BIT(m_leds_mux_data, 6); // Number 30 LED
break;
}
@@ -505,7 +502,7 @@ void kas89_state::led_mux_select_w(uint8_t data)
{
for ( i = 0; i < 37; i++ )
{
- m_lamps[i] = 1; /* All LEDs ON */
+ m_lamps[i] = 1; // All LEDs ON
}
}
}
@@ -519,15 +516,15 @@ void kas89_state::led_mux_select_w(uint8_t data)
void kas89_state::kas89_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x0037, 0x0037).nopw(); /* WTF? */
- map(0x8000, 0x81ff).ram(); /* empty */
- map(0x8200, 0x83ff).ram(); /* 8200-83ff (PL1) */
- map(0x8400, 0x85ff).ram(); /* 8400-85ff (PL2) */
- map(0x8600, 0x87ff).ram(); /* 8600-87ff (PL3) */
- map(0x8800, 0x89ff).ram(); /* 8800-89ff (PL4) */
- map(0x8a00, 0x8bff).ram(); /* 8a00-8bff (PL5) */
- map(0x8c00, 0x8dff).ram(); /* 8c00-8dff (PL6) */
- map(0x8e00, 0x8fff).ram(); /* empty */
+ map(0x0037, 0x0037).nopw(); // WTF?
+ map(0x8000, 0x81ff).ram(); // empty
+ map(0x8200, 0x83ff).ram(); // 8200-83ff (PL1)
+ map(0x8400, 0x85ff).ram(); // 8400-85ff (PL2)
+ map(0x8600, 0x87ff).ram(); // 8600-87ff (PL3)
+ map(0x8800, 0x89ff).ram(); // 8800-89ff (PL4)
+ map(0x8a00, 0x8bff).ram(); // 8a00-8bff (PL5)
+ map(0x8c00, 0x8dff).ram(); // 8c00-8dff (PL6)
+ map(0x8e00, 0x8fff).ram(); // empty
map(0x9000, 0x97ff).ram();
map(0x9800, 0x9fff).ram().share("nvram");
}
@@ -538,7 +535,7 @@ void kas89_state::kas89_io(address_map &map)
map(0x40, 0x43).rw("v9938", FUNC(v9938_device::read), FUNC(v9938_device::write));
map(0x80, 0x80).w(FUNC(kas89_state::mux_w));
map(0x81, 0x81).r(FUNC(kas89_state::mux_r));
- map(0x82, 0x82).w(FUNC(kas89_state::control_w)); /* Bit6 trigger the 138Hz osc. tied to main Z80's NMI.*/
+ map(0x82, 0x82).w(FUNC(kas89_state::control_w)); // Bit6 trigger the 138Hz osc. tied to main Z80's NMI.
map(0x83, 0x83).w(FUNC(kas89_state::led_mux_data_w));
map(0x84, 0x84).w(FUNC(kas89_state::led_mux_select_w));
map(0x85, 0x85).w(FUNC(kas89_state::sound_comm_w));
@@ -668,8 +665,8 @@ static INPUT_PORTS_START( kas89 )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Avance Pantalla (Advance)")
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Blank the screen. Disclaimer isn't shown.*/
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Otherwise hang the game when insert credits.*/
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Blank the screen. Disclaimer isn't shown.
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // Otherwise hang the game when insert credits.
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_8) PORT_TOGGLE PORT_NAME("Operator/Habilitation Key")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_TOGGLE PORT_NAME("Audit/Test Mode Switch")
@@ -685,7 +682,7 @@ static INPUT_PORTS_START( kas89 )
| Normal | ON | OFF | | Normal
| Dura | OFF | ON | | Hard
| Muy Dura | ON | ON | | Very Hard
- +-------------------------------+-----+-----+-----+-----+-----------------------+ [Heart Appeareance]
+ +-------------------------------+-----+-----+-----+-----+-----------------------+ [Heart Appearance]
| Aparicion No | | OFF | OFF | | No
| del Poco | | ON | OFF | | Few
| Corazon (n/c) | | OFF | ON | | n/c
@@ -729,7 +726,7 @@ static INPUT_PORTS_START( kas89 )
PORT_DIPSETTING( 0x08, "Dura (Hard)" )
PORT_DIPSETTING( 0x00, "Muy Dura (Very Hard)" )
- PORT_DIPNAME( 0x21, 0x21, "Aparicion del Corazon (Heart Appeareance)" ) PORT_DIPLOCATION("DSW1:3,4")
+ PORT_DIPNAME( 0x21, 0x21, "Aparicion del Corazon (Heart Appearance)" ) PORT_DIPLOCATION("DSW1:3,4")
PORT_DIPSETTING( 0x01, "n/c" )
PORT_DIPSETTING( 0x21, "No (No)" )
PORT_DIPSETTING( 0x20, "Poco (Few)" )
@@ -750,7 +747,7 @@ static INPUT_PORTS_START( kas89 )
PORT_DIPSETTING( 0x50, "Alto (High)" )
- PORT_START("UNK") /* Unknown input set */
+ PORT_START("UNK") // Unknown input set
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -758,7 +755,7 @@ static INPUT_PORTS_START( kas89 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Should be active for Audit/Test Mode, also for boot...*/
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // Should be active for Audit/Test Mode, also for boot...
INPUT_PORTS_END
@@ -769,32 +766,32 @@ INPUT_PORTS_END
void kas89_state::kas89(machine_config &config)
{
- /* basic machine hardware */
- Z80(config, m_maincpu, MASTER_CLOCK/6); /* Confirmed */
+ // basic machine hardware
+ Z80(config, m_maincpu, MASTER_CLOCK/6); // Confirmed
m_maincpu->set_addrmap(AS_PROGRAM, &kas89_state::kas89_map);
m_maincpu->set_addrmap(AS_IO, &kas89_state::kas89_io);
- TIMER(config, "kas89_nmi").configure_periodic(FUNC(kas89_state::kas89_nmi_cb), attotime::from_hz(138));
+ TIMER(config, "kas89_nmi").configure_periodic(FUNC(kas89_state::nmi_cb), attotime::from_hz(138));
- Z80(config, m_audiocpu, MASTER_CLOCK/6); /* Confirmed */
+ Z80(config, m_audiocpu, MASTER_CLOCK/6); // Confirmed
m_audiocpu->set_addrmap(AS_PROGRAM, &kas89_state::audio_map);
m_audiocpu->set_addrmap(AS_IO, &kas89_state::audio_io);
- TIMER(config, "kas89_snmi").configure_periodic(FUNC(kas89_state::kas89_sound_nmi_cb), attotime::from_hz(138));
+ TIMER(config, "kas89_snmi").configure_periodic(FUNC(kas89_state::sound_nmi_cb), attotime::from_hz(138));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* video hardware */
+ // video hardware
v9938_device &v9938(V9938(config, "v9938", MASTER_CLOCK));
v9938.set_screen_ntsc("screen");
v9938.set_vram_size(VDP_MEM);
v9938.int_cb().set_inputline("maincpu", 0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, m_soundlatch);
- AY8910(config, "aysnd", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 1.0); /* Confirmed */
+ AY8910(config, "aysnd", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 1.0); // Confirmed
}
@@ -853,13 +850,13 @@ void kas89_state::init_kas89()
int memsize = memregion("maincpu")->bytes();
std::vector<uint8_t> buf;
- /* Unscrambling data lines */
+ // Unscrambling data lines
for (int i = 0; i < memsize; i++)
{
buf.push_back(bitswap<8>(mem[i], 3, 1, 0, 5, 6, 4, 7, 2));
}
- /* Unscrambling address lines */
+ // Unscrambling address lines
for (int i = 0; i < memsize; i++)
{
mem[bitswap<16>(i, 15, 14, 5, 6, 3, 0, 12, 1, 9, 13, 4, 7, 10, 8, 2, 11)] = buf[i];
@@ -872,4 +869,4 @@ void kas89_state::init_kas89()
**************************************/
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT
-GAMEL( 1989, kas89, 0, kas89, kas89, kas89_state, init_kas89, ROT90, "SFC S.R.L.", "Kasino '89", MACHINE_IMPERFECT_SOUND, layout_kas89 )
+GAMEL( 1989, kas89, 0, kas89, kas89, kas89_state, init_kas89, ROT90, "SFC S.R.L.", "Kasino '89", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_kas89 )
diff --git a/src/mame/drivers/kurukuru.cpp b/src/mame/drivers/kurukuru.cpp
index b288301492b..5f40df35c4e 100644
--- a/src/mame/drivers/kurukuru.cpp
+++ b/src/mame/drivers/kurukuru.cpp
@@ -412,6 +412,10 @@ public:
void ppj(machine_config &config);
void kurukuru(machine_config &config);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
private:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
@@ -430,8 +434,6 @@ private:
void ym2149_aout_w(uint8_t data);
void ym2149_bout_w(uint8_t data);
- virtual void machine_start() override;
- virtual void machine_reset() override;
DECLARE_WRITE_LINE_MEMBER(kurukuru_msm5205_vck);
void kurukuru_audio_io(address_map &map);
void kurukuru_audio_map(address_map &map);
@@ -540,7 +542,7 @@ void kurukuru_state::kurukuru_io(address_map &map)
void kurukuru_state::ppj_map(address_map &map)
{
map(0x0000, 0x5fff).rom();
- map(0x6000, 0xdfff).bankr("bank1");
+ map(0x6000, 0xdfff).bankr(m_bank1);
map(0xe000, 0xffff).ram().share("nvram");
}
@@ -567,7 +569,7 @@ void kurukuru_state::ppj_io(address_map &map)
13h W --> /
30h W --> soundlatch...
- 40h R --> (very begining) seems DSW1
+ 40h R --> (very beginning) seems DSW1
50h W --> Output port (counters)
60h R --> Input port
70h R --> Input port
@@ -645,7 +647,7 @@ void kurukuru_state::ppj_audio_io(address_map &map)
50h R- --> adpcm irq ack
*/
-/* YM2149 ports */
+// YM2149 ports
void kurukuru_state::ym2149_aout_w(uint8_t data)
{
logerror("YM2149: Port A out: %02X\n", data);
@@ -830,6 +832,8 @@ INPUT_PORTS_END
void kurukuru_state::machine_start()
{
m_bank1->configure_entries(0, 8, memregion("user1")->base(), 0x8000);
+
+ save_item(NAME(m_adpcm_data));
}
void kurukuru_state::machine_reset()
@@ -842,7 +846,7 @@ void kurukuru_state::machine_reset()
void kurukuru_state::kurukuru(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
Z80(config, m_maincpu, CPU_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &kurukuru_state::kurukuru_map);
m_maincpu->set_addrmap(AS_IO, &kurukuru_state::kurukuru_io);
@@ -854,7 +858,7 @@ void kurukuru_state::kurukuru(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* video hardware */
+ // video hardware
v9938_device &v9938(V9938(config, "v9938", MAIN_CLOCK));
v9938.set_screen_ntsc("screen");
v9938.set_vram_size(VDP_MEM);
@@ -863,7 +867,7 @@ void kurukuru_state::kurukuru(machine_config &config)
TICKET_DISPENSER(config, "hopper", attotime::from_msec(HOPPER_PULSE), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set(m_soundirq, FUNC(rst_neg_buffer_device::rst28_w));
@@ -881,7 +885,7 @@ void kurukuru_state::kurukuru(machine_config &config)
MSM5205(config, m_adpcm, M5205_CLOCK);
m_adpcm->vck_legacy_callback().set(FUNC(kurukuru_state::kurukuru_msm5205_vck));
- m_adpcm->set_prescaler_selector(msm5205_device::S48_4B); /* changed on the fly */
+ m_adpcm->set_prescaler_selector(msm5205_device::S48_4B); // changed on the fly
m_adpcm->add_route(ALL_OUTPUTS, "mono", 0.80);
}
@@ -889,7 +893,7 @@ void kurukuru_state::ppj(machine_config &config)
{
kurukuru(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_addrmap(AS_PROGRAM, &kurukuru_state::ppj_map);
m_maincpu->set_addrmap(AS_IO, &kurukuru_state::ppj_io);
@@ -958,9 +962,9 @@ ROM_END
* Game Drivers *
***************************************************************************/
-// YEAR NAME PARENT MACHINE INPUT STATE INIT dROT COMPANY FULLNAME FLAGS
-GAME( 1990, kurukuru, 0, kurukuru, kurukuru, kurukuru_state, empty_init, ROT0, "Success / Taiyo Jidoki", "Kuru Kuru Pyon Pyon (Japan)", 0 )
-GAME( 1991, ppj, 0, ppj, ppj, kurukuru_state, empty_init, ROT0, "Success / Taiyo Jidoki", "Pyon Pyon Jump (V1.40, Japan)", 0 )
+// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS
+GAME( 1990, kurukuru, 0, kurukuru, kurukuru, kurukuru_state, empty_init, ROT0, "Success / Taiyo Jidoki", "Kuru Kuru Pyon Pyon (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1991, ppj, 0, ppj, ppj, kurukuru_state, empty_init, ROT0, "Success / Taiyo Jidoki", "Pyon Pyon Jump (V1.40, Japan)", MACHINE_SUPPORTS_SAVE )
// unemulated....
diff --git a/src/mame/drivers/luckybal.cpp b/src/mame/drivers/luckybal.cpp
index e00e1c347d6..32fc0a45429 100644
--- a/src/mame/drivers/luckybal.cpp
+++ b/src/mame/drivers/luckybal.cpp
@@ -32,10 +32,10 @@
PCB specs:
- Sikscreened: 'PCB Ver 1.5'
- Sikscreened: 'SIELCON GAMES'
- Sikscreened: 'Copyright 1996'
- Sikscreened: 'MADE IN ARGENTINA'
+ Silkscreened: 'PCB Ver 1.5'
+ Silkscreened: 'SIELCON GAMES'
+ Silkscreened: 'Copyright 1996'
+ Silkscreened: 'MADE IN ARGENTINA'
1x Unknown sanded PLCC68 IC (identified as Zilog Z180).
1x unknown sanded DIL24 IC labeled PLD-01.
@@ -244,7 +244,7 @@
'---------' '---------' '---------'
- TOUCH = For iButton inplementation. Not present in the current PCBs.
+ TOUCH = For iButton implementation. Not present in the current PCBs.
*********************************************************************
@@ -304,6 +304,9 @@ public:
void init_luckybala();
void init_luckybald();
+protected:
+ virtual void machine_start() override;
+
private:
void z180_trdr_w(uint8_t data);
void port90_bitswap_w(uint8_t data);
@@ -329,11 +332,19 @@ private:
void main_io(address_map &map);
void main_map(address_map &map);
- virtual void machine_start() override { m_lamps.resolve(); }
output_finder<38> m_lamps;
};
+void luckybal_state::machine_start()
+{
+ m_lamps.resolve();
+
+ save_item(NAME(m_trdr));
+ save_item(NAME(m_led_on));
+}
+
+
/**************************************
* Memory Map *
**************************************/
@@ -567,7 +578,7 @@ INPUT_PORTS_END
void luckybal_state::luckybal(machine_config &config)
{
- /* basic machine hardware */
+ // basic machine hardware
Z80180(config, m_maincpu, CPU_CLOCK);
m_maincpu->set_addrmap(AS_PROGRAM, &luckybal_state::main_map);
m_maincpu->set_addrmap(AS_IO, &luckybal_state::main_io);
@@ -584,17 +595,17 @@ void luckybal_state::luckybal(machine_config &config)
CD4099(config, "latch3", 0);
- /* nvram */
+ // nvram
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* video hardware */
+ // video hardware
v9938_device &v9938(V9938(config, "v9938", VID_CLOCK));
v9938.set_screen_ntsc("screen");
v9938.set_vram_size(VDP_MEM);
v9938.int_cb().set_inputline("maincpu", 0);
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "speaker").front_center();
DAC08(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.5);
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref"));
diff --git a/src/mame/drivers/rulechan.cpp b/src/mame/drivers/rulechan.cpp
index 4753c8e8da4..56478fe5258 100644
--- a/src/mame/drivers/rulechan.cpp
+++ b/src/mame/drivers/rulechan.cpp
@@ -113,14 +113,14 @@
must type a password. At this time, in the layout, under the
roulette leds will appear the password we need (six numeric digits).
- 4.- Enter the required paswword using the credits in (IN1....IN6)
+ 4.- Enter the required password using the credits in (IN1....IN6)
and credits out (OUT1...OUT6) buttons following the key assignment
indications located under the password field.
Use the "E" button to finish once all numbers were typed.
Use the "B" button clear last digit typed, in case of mistake.
5.- Once finished that, the game will reboot and will be ready
- to play. Also, password showed on layout will dissapear.
+ to play. Also, password showed on layout will disappear.
In case that (by unknown reason) the game asks for
"CONTROL ADMINISTRATIVO" again, follow the instructions starting
@@ -140,13 +140,13 @@
roulettes like Lucky Ball, Lucky Roulette, Corona, Re900, etc...
The most exciting part of this work was discover that this game runs
- with an electromechanical roulette, not a tipical LED roulette. It
- added an extra challenge to the work, wich implies a full develop
+ with an electromechanical roulette, not a typical LED roulette. It
+ added an extra challenge to the work, which implies a full develop
of an electromechanical part simulation, objective that finally
could be reached.
Surprisingly, this game firmware includes a full communications
- module, accesible via RS232 serial interface, that let the users
+ module, accessible via RS232 serial interface, that let the users
some useful things like reconfigure hardware and game options or
get different kinds of reports, like accounting, statistics and
many other technical items. All this tasks are performed from a
@@ -216,7 +216,7 @@ public:
void rulechan_init();
protected:
- virtual void machine_start() override { m_lamps.resolve(); m_digits.resolve(); }
+ virtual void machine_start() override;
private:
void port0_w(uint8_t data);
@@ -265,6 +265,27 @@ private:
constexpr uint8_t rulechan_state::s_sndsrt[10];
+void rulechan_state::machine_start()
+{
+ m_lamps.resolve();
+ m_digits.resolve();
+
+ save_item(NAME(m_sline));
+ save_item(NAME(m_p30));
+ save_item(NAME(m_p31));
+ save_item(NAME(m_p32));
+ save_item(NAME(m_step));
+ save_item(NAME(m_updn2));
+ save_item(NAME(m_updn3));
+ save_item(NAME(m_updn4));
+ save_item(NAME(m_num));
+ save_item(NAME(m_spin));
+ save_item(NAME(m_tspin));
+ save_item(NAME(d_spin));
+ save_item(NAME(m_ballin));
+ save_item(NAME(m_led));
+ save_item(NAME(m_pass));
+}
/* BCD to Seven Segment Decoder */
diff --git a/src/mame/drivers/tonton.cpp b/src/mame/drivers/tonton.cpp
index 4cff6999519..6a1f2cabdae 100644
--- a/src/mame/drivers/tonton.cpp
+++ b/src/mame/drivers/tonton.cpp
@@ -45,12 +45,10 @@ public:
private:
required_device<v9938_device> m_v9938;
- void tonton_outport_w(offs_t offset, uint8_t data);
+ void outport_w(offs_t offset, uint8_t data);
void hopper_w(uint8_t data);
void ay_aout_w(uint8_t data);
void ay_bout_w(uint8_t data);
- virtual void machine_start() override;
- virtual void machine_reset() override;
required_device<cpu_device> m_maincpu;
required_device<ticket_dispenser_device> m_hopper;
void tonton_io(address_map &map);
@@ -69,10 +67,10 @@ private:
* Multi-Purpose Output Port *
*************************************************/
-void tonton_state::tonton_outport_w(offs_t offset, uint8_t data)
+void tonton_state::outport_w(offs_t offset, uint8_t data)
{
machine().bookkeeping().coin_counter_w(offset, data & 0x01);
- machine().bookkeeping().coin_lockout_global_w(data & 0x02); /* Coin Lock */
+ machine().bookkeeping().coin_lockout_global_w(data & 0x02); // Coin Lock
// if(data & 0xfe)
// logerror("%02x %02x\n",data,offset);
@@ -101,7 +99,7 @@ void tonton_state::tonton_io(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).portr("IN0");
- map(0x00, 0x00).w(FUNC(tonton_state::tonton_outport_w));
+ map(0x00, 0x00).w(FUNC(tonton_state::outport_w));
map(0x01, 0x01).portr("IN1");
map(0x01, 0x01).w(FUNC(tonton_state::hopper_w));
map(0x02, 0x02).portr("DSW1");
@@ -192,19 +190,6 @@ INPUT_PORTS_END
/*************************************************
-* Machine Start & Reset Routines *
-*************************************************/
-
-void tonton_state::machine_start()
-{
-}
-
-void tonton_state::machine_reset()
-{
-}
-
-
-/*************************************************
* R/W Handlers and Interrupt Routines *
*************************************************/
@@ -224,14 +209,14 @@ void tonton_state::ay_bout_w(uint8_t data)
void tonton_state::tonton(machine_config &config)
{
- /* basic machine hardware */
- Z80(config, m_maincpu, CPU_CLOCK); /* Guess. According to other MSX2 based gambling games */
+ // basic machine hardware
+ Z80(config, m_maincpu, CPU_CLOCK); // Guess. According to other MSX2 based gambling games
m_maincpu->set_addrmap(AS_PROGRAM, &tonton_state::tonton_map);
m_maincpu->set_addrmap(AS_IO, &tonton_state::tonton_io);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* video hardware */
+ // video hardware
V9938(config, m_v9938, MAIN_CLOCK);
m_v9938->set_screen_ntsc("screen");
m_v9938->set_vram_size(0x20000);
@@ -240,9 +225,9 @@ void tonton_state::tonton(machine_config &config)
TICKET_DISPENSER(config, m_hopper, attotime::from_msec(HOPPER_PULSE), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW );
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
- ym2149_device &aysnd(YM2149(config, "aysnd", YM2149_CLOCK)); /* Guess. According to other MSX2 based gambling games */
+ ym2149_device &aysnd(YM2149(config, "aysnd", YM2149_CLOCK)); // Guess. According to other MSX2 based gambling games
/*
AY8910: Port A out: FF
AY8910: Port B out: FF
@@ -251,8 +236,8 @@ void tonton_state::tonton(machine_config &config)
AY8910: Port A out: 00
AY8910: Port B out: 00
*/
- aysnd.port_a_write_callback().set(FUNC(tonton_state::ay_aout_w)); /* Write all bits twice, and then reset them at boot */
- aysnd.port_b_write_callback().set(FUNC(tonton_state::ay_bout_w)); /* Write all bits twice, and then reset them at boot */
+ aysnd.port_a_write_callback().set(FUNC(tonton_state::ay_aout_w)); // Write all bits twice, and then reset them at boot
+ aysnd.port_b_write_callback().set(FUNC(tonton_state::ay_bout_w)); // Write all bits twice, and then reset them at boot
aysnd.add_route(ALL_OUTPUTS, "mono", 0.70);
}
@@ -269,5 +254,5 @@ ROM_START( tonton )
ROM_END
-// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS
-GAME( 1987, tonton, 0, tonton, tonton, tonton_state, empty_init, ROT0, "Success / Taiyo Jidoki", "Waku Waku Doubutsu Land TonTon (Japan)", 0 )
+// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS
+GAME( 1987, tonton, 0, tonton, tonton, tonton_state, empty_init, ROT0, "Success / Taiyo Jidoki", "Waku Waku Doubutsu Land TonTon (Japan)", MACHINE_SUPPORTS_SAVE )