summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Osso13 <mesgnet@yahoo.it>2015-01-16 18:17:05 +0100
committer Osso13 <mesgnet@yahoo.it>2015-01-16 18:17:05 +0100
commitcf8eb6fe0ce6d0fd7e1da159c29ae16aa8494752 (patch)
treee4cb3efa2947715446bc46ca08a4170d2d44f3ab
parent8fc526c463c23794dde611702561a3de0b5f637e (diff)
tia_video_device: added save_state support (nw)
bus/vcs/dcp.c: added save_state support (nw) a2600.c and tourtabl.c; added save state support (nw)
-rw-r--r--src/emu/bus/vcs/dpc.c17
-rw-r--r--src/mame/drivers/tourtabl.c7
-rw-r--r--src/mame/video/tia.c99
-rw-r--r--src/mame/video/tia.h2
-rw-r--r--src/mess/drivers/a2600.c10
5 files changed, 123 insertions, 12 deletions
diff --git a/src/emu/bus/vcs/dpc.c b/src/emu/bus/vcs/dpc.c
index 7387c6dbb34..f701a531ebe 100644
--- a/src/emu/bus/vcs/dpc.c
+++ b/src/emu/bus/vcs/dpc.c
@@ -26,6 +26,23 @@ void dpc_device::device_start()
{
m_oscillator = timer_alloc(TIMER_OSC);
m_oscillator->reset();
+
+ for (int i = 0; i < 8; i++)
+ {
+ save_item(NAME(m_df[i].top), i);
+ save_item(NAME(m_df[i].bottom), i);
+ save_item(NAME(m_df[i].low), i);
+ save_item(NAME(m_df[i].high), i);
+ save_item(NAME(m_df[i].flag), i);
+ save_item(NAME(m_df[i].music_mode), i);
+ save_item(NAME(m_df[i].osc_clk), i);
+ }
+
+ save_item(NAME(m_movamt));
+ save_item(NAME(m_latch_62));
+ save_item(NAME(m_latch_64));
+ save_item(NAME(m_dlc));
+ save_item(NAME(m_shift_reg));
}
void dpc_device::device_reset()
diff --git a/src/mame/drivers/tourtabl.c b/src/mame/drivers/tourtabl.c
index e1aa9487644..bc74e8d2a05 100644
--- a/src/mame/drivers/tourtabl.c
+++ b/src/mame/drivers/tourtabl.c
@@ -20,11 +20,12 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu") { }
+ required_device<cpu_device> m_maincpu;
+
DECLARE_WRITE8_MEMBER(tourtabl_led_w);
DECLARE_READ16_MEMBER(tourtabl_read_input_port);
DECLARE_READ8_MEMBER(tourtabl_get_databus_contents);
DECLARE_WRITE8_MEMBER(watchdog_w);
- required_device<cpu_device> m_maincpu;
};
@@ -201,5 +202,5 @@ ROM_START( tourtab2 )
ROM_END
-GAME( 1978, tourtabl, 0, tourtabl, tourtabl, driver_device, 0, ROT0, "Atari", "Tournament Table (set 1)", 0 )
-GAME( 1978, tourtab2, tourtabl, tourtabl, tourtabl, driver_device, 0, ROT0, "Atari", "Tournament Table (set 2)", 0 )
+GAME( 1978, tourtabl, 0, tourtabl, tourtabl, driver_device, 0, ROT0, "Atari", "Tournament Table (set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1978, tourtab2, tourtabl, tourtabl, tourtabl, driver_device, 0, ROT0, "Atari", "Tournament Table (set 2)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/video/tia.c b/src/mame/video/tia.c
index 384a3773ddc..70f246ea999 100644
--- a/src/mame/video/tia.c
+++ b/src/mame/video/tia.c
@@ -430,6 +430,8 @@ void tia_video_device::device_start()
helper[0] = auto_bitmap_ind16_alloc(machine(), cx, TIA_MAX_SCREEN_HEIGHT);
helper[1] = auto_bitmap_ind16_alloc(machine(), cx, TIA_MAX_SCREEN_HEIGHT);
helper[2] = auto_bitmap_ind16_alloc(machine(), cx, TIA_MAX_SCREEN_HEIGHT);
+
+ register_save_state();
}
@@ -665,13 +667,13 @@ int tia_video_device::collision_check(UINT8* p1, UINT8* p2, int x1, int x2)
int tia_video_device::current_x()
{
- return 3 * ((machine().firstcpu->total_cycles() - frame_cycles) % 76) - 68;
+ return 3 * ((machine().device<cpu_device>("maincpu")->total_cycles() - frame_cycles) % 76) - 68;
}
int tia_video_device::current_y()
{
- return (machine().firstcpu->total_cycles() - frame_cycles) / 76;
+ return (machine().device<cpu_device>("maincpu")->total_cycles() - frame_cycles) / 76;
}
@@ -1010,7 +1012,7 @@ void tia_video_device::update_bitmap(int next_x, int next_y)
WRITE8_MEMBER( tia_video_device::WSYNC_w )
{
- int cycles = machine().firstcpu->total_cycles() - frame_cycles;
+ int cycles = machine().device<cpu_device>("maincpu")->total_cycles() - frame_cycles;
if (cycles % 76)
{
@@ -1051,7 +1053,7 @@ WRITE8_MEMBER( tia_video_device::VBLANK_w )
{
if (data & 0x80)
{
- paddle_start = machine().firstcpu->total_cycles();
+ paddle_start = machine().device<cpu_device>("maincpu")->total_cycles();
}
if ( ! ( VBLANK & 0x40 ) ) {
INPT4 = 0x80;
@@ -1804,7 +1806,7 @@ WRITE8_MEMBER( tia_video_device::GRP1_w )
READ8_MEMBER( tia_video_device::INPT_r )
{
- UINT64 elapsed = machine().firstcpu->total_cycles() - paddle_start;
+ UINT64 elapsed = machine().device<cpu_device>("maincpu")->total_cycles() - paddle_start;
UINT16 input = TIA_INPUT_PORT_ALWAYS_ON;
if ( !m_read_input_port_cb.isnull() )
{
@@ -2177,3 +2179,90 @@ void tia_video_device::device_reset()
COLUBK = 0;
COLUPF = 0;
}
+
+
+void tia_video_device::register_save_state()
+{
+ save_item(NAME(p0gfx.start_pixel));
+ save_item(NAME(p0gfx.start_drawing));
+ save_item(NAME(p0gfx.size));
+ save_item(NAME(p0gfx.skipclip));
+ save_item(NAME(p1gfx.start_pixel));
+ save_item(NAME(p1gfx.start_drawing));
+ save_item(NAME(p1gfx.size));
+ save_item(NAME(p1gfx.skipclip));
+ save_item(NAME(frame_cycles));
+ save_item(NAME(paddle_start));
+ save_item(NAME(horzP0));
+ save_item(NAME(horzP1));
+ save_item(NAME(horzM0));
+ save_item(NAME(horzM1));
+ save_item(NAME(horzBL));
+ save_item(NAME(motclkP0));
+ save_item(NAME(motclkP1));
+ save_item(NAME(motclkM0));
+ save_item(NAME(motclkM1));
+ save_item(NAME(motclkBL));
+ save_item(NAME(startP0));
+ save_item(NAME(startP1));
+ save_item(NAME(startM0));
+ save_item(NAME(startM1));
+ save_item(NAME(skipclipP0));
+ save_item(NAME(skipclipP1));
+ save_item(NAME(skipM0delay));
+ save_item(NAME(skipM1delay));
+ save_item(NAME(current_bitmap));
+ save_item(NAME(prev_x));
+ save_item(NAME(prev_y));
+ save_item(NAME(VSYNC));
+ save_item(NAME(VBLANK));
+ save_item(NAME(COLUP0));
+ save_item(NAME(COLUP1));
+ save_item(NAME(COLUBK));
+ save_item(NAME(COLUPF));
+ save_item(NAME(CTRLPF));
+ save_item(NAME(GRP0));
+ save_item(NAME(GRP1));
+ save_item(NAME(REFP0));
+ save_item(NAME(REFP1));
+ save_item(NAME(HMP0));
+ save_item(NAME(HMP1));
+ save_item(NAME(HMM0));
+ save_item(NAME(HMM1));
+ save_item(NAME(HMBL));
+ save_item(NAME(VDELP0));
+ save_item(NAME(VDELP1));
+ save_item(NAME(VDELBL));
+ save_item(NAME(NUSIZ0));
+ save_item(NAME(NUSIZ1));
+ save_item(NAME(ENAM0));
+ save_item(NAME(ENAM1));
+ save_item(NAME(ENABL));
+ save_item(NAME(CXM0P));
+ save_item(NAME(CXM1P));
+ save_item(NAME(CXP0FB));
+ save_item(NAME(CXP1FB));
+ save_item(NAME(CXM0FB));
+ save_item(NAME(CXM1FB));
+ save_item(NAME(CXBLPF));
+ save_item(NAME(CXPPMM));
+ save_item(NAME(RESMP0));
+ save_item(NAME(RESMP1));
+ save_item(NAME(PF0));
+ save_item(NAME(PF1));
+ save_item(NAME(PF2));
+ save_item(NAME(INPT4));
+ save_item(NAME(INPT5));
+ save_item(NAME(prevGRP0));
+ save_item(NAME(prevGRP1));
+ save_item(NAME(prevENABL));
+ save_item(NAME(HMOVE_started));
+ save_item(NAME(HMOVE_started_previous));
+ save_item(NAME(HMP0_latch));
+ save_item(NAME(HMP1_latch));
+ save_item(NAME(HMM0_latch));
+ save_item(NAME(HMM1_latch));
+ save_item(NAME(HMBL_latch));
+ save_item(NAME(REFLECT));
+ save_item(NAME(NUSIZx_changed));
+}
diff --git a/src/mame/video/tia.h b/src/mame/video/tia.h
index cc321f5bd7a..4dcf107977d 100644
--- a/src/mame/video/tia.h
+++ b/src/mame/video/tia.h
@@ -199,6 +199,8 @@ private:
bitmap_ind16 *helper[3];
UINT16 screen_height;
+
+ void register_save_state();
};
class tia_pal_video_device : public tia_video_device
diff --git a/src/mess/drivers/a2600.c b/src/mess/drivers/a2600.c
index 1d0d6a47d5d..44a94ebd043 100644
--- a/src/mess/drivers/a2600.c
+++ b/src/mess/drivers/a2600.c
@@ -209,7 +209,7 @@ WRITE16_MEMBER(a2600_state::a2600_tia_vsync_callback)
if ( supported_screen_heights[i] != m_current_screen_height )
{
m_current_screen_height = supported_screen_heights[i];
-// machine.first_screen()->configure(228, m_current_screen_height, &visarea[i], HZ_TO_ATTOSECONDS( MASTER_CLOCK_NTSC ) * 228 * m_current_screen_height );
+// m_screen->configure(228, m_current_screen_height, &visarea[i], HZ_TO_ATTOSECONDS( MASTER_CLOCK_NTSC ) * 228 * m_current_screen_height );
}
}
}
@@ -226,7 +226,7 @@ WRITE16_MEMBER(a2600_state::a2600_tia_vsync_callback_pal)
if ( supported_screen_heights[i] != m_current_screen_height )
{
m_current_screen_height = supported_screen_heights[i];
-// machine.first_screen()->configure(228, m_current_screen_height, &visarea[i], HZ_TO_ATTOSECONDS( MASTER_CLOCK_PAL ) * 228 * m_current_screen_height );
+// m_screen->configure(228, m_current_screen_height, &visarea[i], HZ_TO_ATTOSECONDS( MASTER_CLOCK_PAL ) * 228 * m_current_screen_height );
}
}
}
@@ -316,6 +316,8 @@ MACHINE_START_MEMBER(a2600_state,a2600)
/* Banks may have changed, reset the cpu so it uses the correct reset vector */
m_maincpu->reset();
+
+ save_item(NAME(m_current_screen_height));
}
@@ -541,5 +543,5 @@ ROM_END
#define rom_a2600p rom_a2600
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-CONS( 1977, a2600, 0, 0, a2600, a2600, driver_device, 0, "Atari", "Atari 2600 (NTSC)" , 0)
-CONS( 1978, a2600p, a2600, 0, a2600p, a2600, driver_device, 0, "Atari", "Atari 2600 (PAL)", 0)
+CONS( 1977, a2600, 0, 0, a2600, a2600, driver_device, 0, "Atari", "Atari 2600 (NTSC)" , GAME_SUPPORTS_SAVE )
+CONS( 1978, a2600p, a2600, 0, a2600p, a2600, driver_device, 0, "Atari", "Atari 2600 (PAL)", GAME_SUPPORTS_SAVE )