summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/serflash.cpp
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2016-04-01 19:25:57 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2016-04-01 19:25:57 +0200
commitbfbcdac2a61eed3f26edcbabe07947b5d19e7ec7 (patch)
tree1a6da805d69656be0acc2b367e5da84177af866c /src/devices/machine/serflash.cpp
parentdaadbc5fd5e9cb702a4bce1da28025487c0f94c8 (diff)
cv1k.cpp: some work towards save state support. Should work but it would be better not to save the bitmap, so for the time being it is disabled by default (nw)
Diffstat (limited to 'src/devices/machine/serflash.cpp')
-rw-r--r--src/devices/machine/serflash.cpp34
1 files changed, 25 insertions, 9 deletions
diff --git a/src/devices/machine/serflash.cpp b/src/devices/machine/serflash.cpp
index f5a002ae929..1746b4583eb 100644
--- a/src/devices/machine/serflash.cpp
+++ b/src/devices/machine/serflash.cpp
@@ -9,6 +9,7 @@
#include "machine/serflash.h"
+ALLOW_SAVE_TYPE(flash_state_t);
//**************************************************************************
// LIVE DEVICE
@@ -42,12 +43,27 @@ void serflash_device::device_start()
m_flashwritemap.resize(m_length / FLASH_PAGE_SIZE);
memset(&m_flashwritemap[0], 0, m_length / FLASH_PAGE_SIZE);
+
+ save_item(NAME(m_flash_state));
+ save_item(NAME(m_flash_enab));
+ save_item(NAME(m_flash_cmd_seq));
+ save_item(NAME(m_flash_cmd_prev));
+ save_item(NAME(m_flash_addr_seq));
+ save_item(NAME(m_flash_read_seq));
+ save_item(NAME(m_flash_row));
+ save_item(NAME(m_flash_col));
+ save_item(NAME(m_flash_page_addr));
+ save_item(NAME(m_flash_page_index));
+ save_item(NAME(m_flashwritemap));
+ save_item(NAME(m_last_flash_cmd));
+ save_item(NAME(m_flash_addr));
+ save_item(NAME(m_flash_page_data));
}
void serflash_device::device_reset()
{
m_flash_enab = 0;
- flash_hard_reset(machine());
+ flash_hard_reset();
m_last_flash_cmd = 0x00;
m_flash_addr_seq = 0;
@@ -115,7 +131,7 @@ void serflash_device::nvram_write(emu_file &file)
file.write(&page, 4);
}
-void serflash_device::flash_hard_reset(running_machine &machine)
+void serflash_device::flash_hard_reset()
{
// logerror("%08x FLASH: RESET\n", cpuexec_describe_context(machine));
@@ -141,7 +157,7 @@ WRITE8_MEMBER( serflash_device::flash_enab_w )
m_flash_enab = data;
}
-void serflash_device::flash_change_state(running_machine &machine, flash_state_t state)
+void serflash_device::flash_change_state(flash_state_t state)
{
m_flash_state = state;
@@ -176,7 +192,7 @@ WRITE8_MEMBER( serflash_device::flash_cmd_w )
break;
case 0x70: // READ STATUS
- flash_change_state( space.machine(), STATE_READ_STATUS );
+ flash_change_state( STATE_READ_STATUS );
break;
case 0x80: // PAGE / CACHE PROGRAM
@@ -186,11 +202,11 @@ WRITE8_MEMBER( serflash_device::flash_cmd_w )
break;
case 0x90: // READ ID
- flash_change_state( space.machine(), STATE_READ_ID );
+ flash_change_state( STATE_READ_ID );
break;
case 0xff: // RESET
- flash_change_state( space.machine(), STATE_IDLE );
+ flash_change_state( STATE_IDLE );
break;
default:
@@ -210,7 +226,7 @@ WRITE8_MEMBER( serflash_device::flash_cmd_w )
m_flash_page_addr = m_flash_col;
m_flash_page_index = m_flash_row;
- flash_change_state( space.machine(), STATE_READ );
+ flash_change_state( STATE_READ );
//logerror("%08x FLASH: caching page = %04X\n", m_maincpu->pc(), m_flash_row);
}
@@ -219,7 +235,7 @@ WRITE8_MEMBER( serflash_device::flash_cmd_w )
case 0x60: // BLOCK ERASE
if (data==0xd0)
{
- flash_change_state( space.machine(), STATE_BLOCK_ERASE );
+ flash_change_state( STATE_BLOCK_ERASE );
m_flashwritemap[m_flash_col] |= 1;
memset(m_region + m_flash_col * FLASH_PAGE_SIZE, 0xff, FLASH_PAGE_SIZE);
//logerror("erased block %04x (%08x - %08x)\n", m_flash_col, m_flash_col * FLASH_PAGE_SIZE, ((m_flash_col+1) * FLASH_PAGE_SIZE)-1);
@@ -232,7 +248,7 @@ WRITE8_MEMBER( serflash_device::flash_cmd_w )
case 0x80:
if (data==0x10)
{
- flash_change_state( space.machine(), STATE_PAGE_PROGRAM );
+ flash_change_state( STATE_PAGE_PROGRAM );
m_flashwritemap[m_flash_row] |= (memcmp(m_region + m_flash_row * FLASH_PAGE_SIZE, m_flash_page_data, FLASH_PAGE_SIZE) != 0);
memcpy(m_region + m_flash_row * FLASH_PAGE_SIZE, m_flash_page_data, FLASH_PAGE_SIZE);
//logerror("re-written block %04x (%08x - %08x)\n", m_flash_row, m_flash_row * FLASH_PAGE_SIZE, ((m_flash_row+1) * FLASH_PAGE_SIZE)-1);