summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <lordkale4@gmail.com>2025-10-19 17:46:18 +0200
committer angelosa <lordkale4@gmail.com>2025-10-19 18:51:49 +0200
commitaf1aa9321ca3236890e50797c8d907016f09faef (patch)
tree09a965da37d732ea957fdfd168d72547b4343055
parent47d47ba596c5d267a9b1d8bfb777b3556bcf5380 (diff)
sega/stvcd.cpp: register variables to save states
-rw-r--r--src/mame/sega/stvcd.cpp174
1 files changed, 107 insertions, 67 deletions
diff --git a/src/mame/sega/stvcd.cpp b/src/mame/sega/stvcd.cpp
index ad6dc32e767..719bce8ebd8 100644
--- a/src/mame/sega/stvcd.cpp
+++ b/src/mame/sega/stvcd.cpp
@@ -127,8 +127,115 @@ void stvcd_device::device_add_mconfig(machine_config &config)
void stvcd_device::device_start()
{
+ save_item(NAME(sectlenin));
+ save_item(NAME(sectlenout));
+ save_item(NAME(lastbuf));
+ save_item(NAME(playtype));
+ save_item(NAME(xfercount));
+ save_item(NAME(calcsize));
+ save_item(NAME(xferoffs));
+ save_item(NAME(xfersect));
+ save_item(NAME(xfersectpos));
+ save_item(NAME(xfersectnum));
+ save_item(NAME(xferdnum));
+ save_item(NAME(cddevicenum));
+ save_item(NAME(cr1));
+ save_item(NAME(cr2));
+ save_item(NAME(cr3));
+ save_item(NAME(cr4));
+ save_item(NAME(prev_cr1));
+ save_item(NAME(prev_cr2));
+ save_item(NAME(prev_cr3));
+ save_item(NAME(prev_cr4));
+ save_item(NAME(status_type));
+ save_item(NAME(hirqmask));
+ save_item(NAME(hirqreg));
+ save_item(NAME(cd_stat));
+ save_item(NAME(cd_curfad));
+ save_item(NAME(cd_fad_seek));
+ save_item(NAME(fadstoplay));
+ save_item(NAME(in_buffer));
+ save_item(NAME(oddframe));
+ save_item(NAME(buffull));
+ save_item(NAME(sectorstore));
+ save_item(NAME(freeblocks));
+ save_item(NAME(cur_track));
+ save_item(NAME(cmd_pending));
+ save_item(NAME(cd_speed));
+ save_item(NAME(cdda_maxrepeat));
+ save_item(NAME(cdda_repeat_count));
+ save_item(NAME(tray_is_closed));
+ save_item(NAME(numfiles));
+ save_item(NAME(firstfile));
}
+void stvcd_device::device_reset()
+{
+ int32_t i, j;
+
+ hirqmask = 0xffff;
+ hirqreg = 0xffff;
+ cr1 = 'C';
+ cr2 = ('D'<<8) | 'B';
+ cr3 = ('L'<<8) | 'O';
+ cr4 = ('C'<<8) | 'K';
+ cd_stat = CD_STAT_PAUSE;
+ cd_stat |= CD_STAT_PERI;
+ cur_track = 0xff;
+
+ curdir.clear();
+
+ xfertype = XFERTYPE_INVALID;
+ xfertype32 = XFERTYPE32_INVALID;
+
+ // reset flag vars
+ buffull = sectorstore = 0;
+
+ freeblocks = 200;
+
+ sectlenin = sectlenout = 2048;
+
+ lastbuf = 0xff;
+
+ // reset buffer partitions
+ for (i = 0; i < MAX_FILTERS; i++)
+ {
+ partitions[i].size = -1;
+ partitions[i].numblks = 0;
+
+ for (j = 0; j < MAX_BLOCKS; j++)
+ {
+ partitions[i].blocks[j] = (blockT *)nullptr;
+ partitions[i].bnum[j] = 0xff;
+ }
+ }
+
+ // reset blocks
+ for (i = 0; i < MAX_BLOCKS; i++)
+ {
+ blocks[i].size = -1;
+ memset(&blocks[i].data, 0, cdrom_file::MAX_SECTOR_DATA);
+ }
+
+ // open device
+ if (m_cdrom_image->exists())
+ {
+ LOG("Opened CD-ROM successfully, reading root directory\n");
+ read_new_dir(0xffffff); // read root directory
+ }
+ else
+ {
+ cd_stat = CD_STAT_NODISC;
+ }
+
+ cd_speed = 2;
+ cdda_repeat_count = 0;
+ tray_is_closed = 1;
+
+ m_sector_timer->adjust(attotime::from_hz(150)); // 150 sectors / second = 300kBytes/second
+}
+
+
device_memory_interface::space_config_vector stvcd_device::memory_space_config() const
{
return space_config_vector {
@@ -2036,73 +2143,6 @@ TIMER_DEVICE_CALLBACK_MEMBER( stvcd_device::stv_sector_cb )
}
}
-// global functions
-void stvcd_device::device_reset()
-{
- int32_t i, j;
-
- hirqmask = 0xffff;
- hirqreg = 0xffff;
- cr1 = 'C';
- cr2 = ('D'<<8) | 'B';
- cr3 = ('L'<<8) | 'O';
- cr4 = ('C'<<8) | 'K';
- cd_stat = CD_STAT_PAUSE;
- cd_stat |= CD_STAT_PERI;
- cur_track = 0xff;
-
- curdir.clear();
-
- xfertype = XFERTYPE_INVALID;
- xfertype32 = XFERTYPE32_INVALID;
-
- // reset flag vars
- buffull = sectorstore = 0;
-
- freeblocks = 200;
-
- sectlenin = sectlenout = 2048;
-
- lastbuf = 0xff;
-
- // reset buffer partitions
- for (i = 0; i < MAX_FILTERS; i++)
- {
- partitions[i].size = -1;
- partitions[i].numblks = 0;
-
- for (j = 0; j < MAX_BLOCKS; j++)
- {
- partitions[i].blocks[j] = (blockT *)nullptr;
- partitions[i].bnum[j] = 0xff;
- }
- }
-
- // reset blocks
- for (i = 0; i < MAX_BLOCKS; i++)
- {
- blocks[i].size = -1;
- memset(&blocks[i].data, 0, cdrom_file::MAX_SECTOR_DATA);
- }
-
- // open device
- if (m_cdrom_image->exists())
- {
- LOG("Opened CD-ROM successfully, reading root directory\n");
- read_new_dir(0xffffff); // read root directory
- }
- else
- {
- cd_stat = CD_STAT_NODISC;
- }
-
- cd_speed = 2;
- cdda_repeat_count = 0;
- tray_is_closed = 1;
-
- m_sector_timer->adjust(attotime::from_hz(150)); // 150 sectors / second = 300kBytes/second
-}
-
stvcd_device::blockT *stvcd_device::cd_alloc_block(uint8_t *blknum)
{
int32_t i;