mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
nvram: don't save 0byte file (nw)
This commit is contained in:
parent
11723fc8a3
commit
994f468b22
@ -57,6 +57,7 @@ protected:
|
||||
virtual void nvram_default() override;
|
||||
virtual void nvram_read(emu_file &file) override;
|
||||
virtual void nvram_write(emu_file &file) override;
|
||||
virtual bool nvram_pre_write() override { return m_base && m_length; }
|
||||
|
||||
// internal helpers
|
||||
void determine_final_base();
|
||||
|
@ -65,6 +65,7 @@ protected:
|
||||
virtual void nvram_default() override;
|
||||
virtual void nvram_read(emu_file &file) override;
|
||||
virtual void nvram_write(emu_file &file) override;
|
||||
virtual bool nvram_pre_write() override { return m_battery_backed; }
|
||||
|
||||
private:
|
||||
inline void set_alarm_line();
|
||||
|
@ -67,7 +67,7 @@ DEFINE_DEVICE_TYPE(SENSORBOARD, sensorboard_device, "sensorboard", "Sensorboard"
|
||||
|
||||
sensorboard_device::sensorboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, SENSORBOARD, tag, owner, clock),
|
||||
m_nvram(*this, "position"),
|
||||
device_nvram_interface(mconfig, *this),
|
||||
m_out_piece(*this, "piece_%c%u", 0U + 'a', 1U),
|
||||
m_out_pui(*this, "piece_ui%u", 0U),
|
||||
m_out_count(*this, "count_ui%u", 0U),
|
||||
@ -127,8 +127,6 @@ void sensorboard_device::device_start()
|
||||
m_ulast = 0;
|
||||
m_usize = ARRAY_LENGTH(m_history);
|
||||
|
||||
m_nvram->set_base(m_curstate, sizeof(m_curstate));
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_magnets));
|
||||
save_item(NAME(m_inductive));
|
||||
@ -155,18 +153,6 @@ void sensorboard_device::device_start()
|
||||
save_item(NAME(m_sensordelay));
|
||||
}
|
||||
|
||||
void sensorboard_device::nvram_init(nvram_device &nvram, void *data, size_t size)
|
||||
{
|
||||
clear_board();
|
||||
m_custom_init_cb(1);
|
||||
}
|
||||
|
||||
void sensorboard_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
// 'nvram' is the last board position (m_curstate)
|
||||
NVRAM(config, m_nvram).set_custom_handler(FUNC(sensorboard_device::nvram_init));
|
||||
}
|
||||
|
||||
void sensorboard_device::preset_chess(int state)
|
||||
{
|
||||
// set chessboard start position
|
||||
@ -214,6 +200,32 @@ void sensorboard_device::device_reset()
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_nvram_interface overrides
|
||||
//-------------------------------------------------
|
||||
|
||||
void sensorboard_device::nvram_default()
|
||||
{
|
||||
clear_board();
|
||||
m_custom_init_cb(1);
|
||||
}
|
||||
|
||||
void sensorboard_device::nvram_read(emu_file &file)
|
||||
{
|
||||
file.read(m_curstate, sizeof(m_curstate));
|
||||
}
|
||||
|
||||
void sensorboard_device::nvram_write(emu_file &file)
|
||||
{
|
||||
file.write(m_curstate, sizeof(m_curstate));
|
||||
}
|
||||
|
||||
bool sensorboard_device::nvram_pre_write()
|
||||
{
|
||||
return m_nvram_on;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// public handlers
|
||||
|
@ -11,10 +11,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "machine/nvram.h"
|
||||
|
||||
|
||||
class sensorboard_device : public device_t
|
||||
class sensorboard_device : public device_t, public device_nvram_interface
|
||||
{
|
||||
public:
|
||||
sensorboard_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
|
||||
@ -81,13 +78,17 @@ protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual void device_post_load() override { refresh(); }
|
||||
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
// device_nvram_interface overrides
|
||||
virtual void nvram_default() override;
|
||||
virtual void nvram_read(emu_file &file) override;
|
||||
virtual void nvram_write(emu_file &file) override;
|
||||
virtual bool nvram_pre_write() override;
|
||||
|
||||
private:
|
||||
required_device<nvram_device> m_nvram;
|
||||
output_finder<0x10, 0x10> m_out_piece;
|
||||
output_finder<0x20+1> m_out_pui;
|
||||
output_finder<2> m_out_count;
|
||||
@ -114,6 +115,7 @@ private:
|
||||
int m_droppos;
|
||||
int m_sensorpos;
|
||||
u8 m_ui_enabled;
|
||||
bool m_nvram_on;
|
||||
|
||||
u8 m_curstate[0x100];
|
||||
u8 m_history[1000][0x100];
|
||||
@ -124,9 +126,6 @@ private:
|
||||
u32 m_ulast;
|
||||
u32 m_usize;
|
||||
|
||||
void nvram_init(nvram_device &nvram, void *data, size_t size);
|
||||
bool m_nvram_on;
|
||||
|
||||
emu_timer *m_undotimer;
|
||||
TIMER_CALLBACK_MEMBER(undo_tick);
|
||||
void undo_reset();
|
||||
|
@ -37,12 +37,14 @@ public:
|
||||
void nvram_reset() { nvram_default(); }
|
||||
void nvram_load(emu_file &file) { nvram_read(file); }
|
||||
void nvram_save(emu_file &file) { nvram_write(file); }
|
||||
bool nvram_pre_save() { return nvram_pre_write(); }
|
||||
|
||||
protected:
|
||||
// derived class overrides
|
||||
virtual void nvram_default() = 0;
|
||||
virtual void nvram_read(emu_file &file) = 0;
|
||||
virtual void nvram_write(emu_file &file) = 0;
|
||||
virtual bool nvram_pre_write() { return true; }
|
||||
};
|
||||
|
||||
// iterator
|
||||
|
@ -1203,11 +1203,14 @@ void running_machine::nvram_save()
|
||||
{
|
||||
for (device_nvram_interface &nvram : nvram_interface_iterator(root_device()))
|
||||
{
|
||||
emu_file file(options().nvram_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
|
||||
if (file.open(nvram_filename(nvram.device())) == osd_file::error::NONE)
|
||||
if (nvram.nvram_pre_save())
|
||||
{
|
||||
nvram.nvram_save(file);
|
||||
file.close();
|
||||
emu_file file(options().nvram_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
|
||||
if (file.open(nvram_filename(nvram.device())) == osd_file::error::NONE)
|
||||
{
|
||||
nvram.nvram_save(file);
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user