summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/serflash.cpp
diff options
context:
space:
mode:
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);