From 0c0f349b0ca335bc1b1a0c09b001e021ee0b6e64 Mon Sep 17 00:00:00 2001 From: wilbertpol Date: Tue, 10 Sep 2024 19:53:04 +0100 Subject: bus/msx/slot: Use std::unique_ptr instead of std::vector. (#12746) --- src/devices/bus/msx/slot/fs4600.cpp | 5 +++-- src/devices/bus/msx/slot/fs4600.h | 2 +- src/devices/bus/msx/slot/fsa1fm.cpp | 22 ++++++++++++---------- src/devices/bus/msx/slot/fsa1fm.h | 6 +++--- src/devices/bus/msx/slot/msx_rs232.cpp | 19 ++++++++++--------- src/devices/bus/msx/slot/msx_rs232.h | 4 ++-- src/devices/bus/msx/slot/panasonic08.cpp | 11 ++++++----- src/devices/bus/msx/slot/panasonic08.h | 2 +- src/devices/bus/msx/slot/panasonic08r.cpp | 5 +++-- src/devices/bus/msx/slot/ram.cpp | 9 ++++++--- src/devices/bus/msx/slot/ram.h | 2 +- src/devices/bus/msx/slot/ram_mm.cpp | 7 +++---- src/devices/bus/msx/slot/ram_mm.h | 5 +++-- src/devices/bus/msx/slot/sony08.cpp | 8 +++++--- src/devices/bus/msx/slot/sony08.h | 2 +- 15 files changed, 60 insertions(+), 49 deletions(-) diff --git a/src/devices/bus/msx/slot/fs4600.cpp b/src/devices/bus/msx/slot/fs4600.cpp index 7f947b5b7fd..abb599d4c42 100644 --- a/src/devices/bus/msx/slot/fs4600.cpp +++ b/src/devices/bus/msx/slot/fs4600.cpp @@ -36,10 +36,11 @@ void msx_slot_fs4600_device::device_start() fatalerror("Memory region '%s' is too small for the FS4600 firmware\n", m_rom_region.finder_tag()); } - m_sram.resize(SRAM_SIZE); - m_nvram->set_base(m_sram.data(), SRAM_SIZE); + m_sram = std::make_unique(SRAM_SIZE); + m_nvram->set_base(&m_sram[0], SRAM_SIZE); save_item(NAME(m_sram_address)); + save_pointer(NAME(m_sram), SRAM_SIZE); for (int i = 0; i < 3; i++) m_rombank[i]->configure_entries(0, 0x40, m_rom_region->base() + m_region_offset, 0x4000); diff --git a/src/devices/bus/msx/slot/fs4600.h b/src/devices/bus/msx/slot/fs4600.h index 5061e9186bf..dacf5be14c2 100644 --- a/src/devices/bus/msx/slot/fs4600.h +++ b/src/devices/bus/msx/slot/fs4600.h @@ -41,7 +41,7 @@ private: memory_view m_view[3]; u32 m_region_offset; u32 m_sram_address; - std::vector m_sram; + std::unique_ptr m_sram; }; diff --git a/src/devices/bus/msx/slot/fsa1fm.cpp b/src/devices/bus/msx/slot/fsa1fm.cpp index 93e55d5b78d..6b59c516bbe 100644 --- a/src/devices/bus/msx/slot/fsa1fm.cpp +++ b/src/devices/bus/msx/slot/fsa1fm.cpp @@ -32,15 +32,15 @@ void msx_slot_fsa1fm2_device::device_start() fatalerror("Memory region '%s' is not the correct size for the FS-A1FM firmware\n", m_rom_region.finder_tag()); } - m_ram.resize(RAM_SIZE); - m_empty_bank.resize(8 * 1024); + m_ram = std::make_unique(RAM_SIZE); + m_empty_bank = std::make_unique(8 * 1024); for (int i = 0; i < 8 * 1024; i++) m_empty_bank[i] = 0xff; save_item(NAME(m_selected_bank)); save_item(NAME(m_control)); save_item(NAME(m_ram_active)); - save_pointer(m_ram.data(), "ram", RAM_SIZE); + save_pointer(NAME(m_ram), m_size); for (int i = 0; i < 6; i++) { @@ -48,10 +48,10 @@ void msx_slot_fsa1fm2_device::device_start() m_bank[i]->configure_entries(0x80, 0x80, m_rom_region->base() + m_region_offset, 0x2000); for (int j = 0; j < 4; j++) { - m_bank[i]->configure_entry(0x80 + j, m_empty_bank.data()); // 0x80-0x83 empty - m_bank[i]->configure_entry(0x84 + j, m_ram.data()); // 0x84-0x87 ram - m_bank[i]->configure_entry(0x88 + j, m_empty_bank.data()); // 0x88-0x8b empty - m_bank[i]->configure_entry(0x8c + j, m_ram.data()); // 0x8c-0x8f ram + m_bank[i]->configure_entry(0x80 + j, &m_empty_bank[0]); // 0x80-0x83 empty + m_bank[i]->configure_entry(0x84 + j, &m_ram[0]); // 0x84-0x87 ram + m_bank[i]->configure_entry(0x88 + j, &m_empty_bank[0]); // 0x88-0x8b empty + m_bank[i]->configure_entry(0x8c + j, &m_ram[0]); // 0x8c-0x8f ram } } @@ -182,14 +182,16 @@ void msx_slot_fsa1fm_device::device_start() fatalerror("Memory region '%s' is not the correct size for the FS-A1FM firmware\n", m_rom_region.finder_tag()); } - m_sram.resize(SRAM_SIZE); - m_nvram->set_base(m_sram.data(), SRAM_SIZE); + m_sram = std::make_unique(SRAM_SIZE); + m_nvram->set_base(&m_sram[0], SRAM_SIZE); + + save_pointer(NAME(m_sram), SRAM_SIZE); m_rombank->configure_entries(0, 16, m_rom_region->base(), 0x2000); page(1)->install_read_bank(0x4000, 0x5fff, m_rombank); // SRAM is always visible? - page(1)->install_ram(0x6000, 0x7fff, m_sram.data()); + page(1)->install_ram(0x6000, 0x7fff, &m_sram[0]); page(1)->install_write_handler(0x7fc0, 0x7fc0, emu::rw_delegate(*m_i8251, FUNC(i8251_device::data_w))); page(1)->install_read_handler(0x7fc0, 0x7fc0, emu::rw_delegate(*m_i8251, FUNC(i8251_device::data_r))); page(1)->install_write_handler(0x7fc1, 0x7fc1, emu::rw_delegate(*m_i8251, FUNC(i8251_device::control_w))); diff --git a/src/devices/bus/msx/slot/fsa1fm.h b/src/devices/bus/msx/slot/fsa1fm.h index 660baa43e99..e0d2bac0bcd 100644 --- a/src/devices/bus/msx/slot/fsa1fm.h +++ b/src/devices/bus/msx/slot/fsa1fm.h @@ -42,8 +42,8 @@ private: uint8_t m_selected_bank[6]; bool m_ram_active[6]; uint8_t m_control; - std::vector m_ram; - std::vector m_empty_bank; + std::unique_ptr m_ram; + std::unique_ptr m_empty_bank; }; @@ -76,7 +76,7 @@ private: required_memory_region m_rom_region; memory_bank_creator m_rombank; u32 m_region_offset; - std::vector m_sram; + std::unique_ptr m_sram; }; diff --git a/src/devices/bus/msx/slot/msx_rs232.cpp b/src/devices/bus/msx/slot/msx_rs232.cpp index 0750abf7c9a..3848b8e5ff4 100644 --- a/src/devices/bus/msx/slot/msx_rs232.cpp +++ b/src/devices/bus/msx/slot/msx_rs232.cpp @@ -255,21 +255,21 @@ void msx_slot_rs232_sony_device::device_start() { msx_slot_rs232_base_device::device_start(); - m_ram.resize(RAM_SIZE); - save_item(NAME(m_ram)); + m_ram = std::make_unique(RAM_SIZE); + save_pointer(NAME(m_ram), RAM_SIZE); // TODO unmap rom from page 0 - page(0)->install_ram(0x2000, 0x27ff, m_ram.data()); + page(0)->install_ram(0x2000, 0x27ff, &m_ram[0]); page(1)->install_rom(0x4000, 0x5fff, m_rom_region->base() + m_region_offset); - page(1)->install_ram(0x6000, 0x67ff, m_ram.data()); - page(2)->install_ram(0xa000, 0xa7ff, m_ram.data()); + page(1)->install_ram(0x6000, 0x67ff, &m_ram[0]); + page(2)->install_ram(0xa000, 0xa7ff, &m_ram[0]); page(2)->install_read_handler(0xbff8, 0xbff9, emu::rw_delegate(*m_i8251, FUNC(i8251_device::read))); page(2)->install_write_handler(0xbff8, 0xbff9, emu::rw_delegate(*m_i8251, FUNC(i8251_device::write))); page(2)->install_read_handler(0xbffa, 0xbffa, emu::rw_delegate(*this, FUNC(msx_slot_rs232_sony_device::status_r))); page(2)->install_write_handler(0xbffa, 0xbffa, emu::rw_delegate(*this, FUNC(msx_slot_rs232_sony_device::irq_mask_w))); page(2)->install_read_handler(0xbffc, 0xbfff, emu::rw_delegate(*m_i8253, FUNC(pit8253_device::read))); page(2)->install_write_handler(0xbffc, 0xbfff, emu::rw_delegate(*m_i8253, FUNC(pit8253_device::write))); - page(3)->install_ram(0xe000, 0xe7ff, m_ram.data()); + page(3)->install_ram(0xe000, 0xe7ff, &m_ram[0]); } u8 msx_slot_rs232_sony_device::status_r(offs_t offset) @@ -454,10 +454,11 @@ void msx_slot_rs232_toshiba_hx3x_device::device_start() io_space().install_readwrite_handler(0x82, 0x82, emu::rw_delegate(*this, FUNC(msx_slot_rs232_toshiba_hx3x_device::status_r)), emu::rw_delegate(*this, FUNC(msx_slot_rs232_toshiba_hx3x_device::irq_mask_w))); io_space().install_readwrite_handler(0x84, 0x87, emu::rw_delegate(*m_i8253, FUNC(pit8253_device::read)), emu::rw_delegate(*m_i8253, FUNC(pit8253_device::write))); - m_sram.resize(SRAM_SIZE); - m_nvram->set_base(m_sram.data(), SRAM_SIZE); + m_sram = std::make_unique(SRAM_SIZE); + m_nvram->set_base(&m_sram[0], SRAM_SIZE); save_item(NAME(m_bank_reg)); + save_pointer(NAME(m_sram), SRAM_SIZE); m_rombank->configure_entries(0, 4, m_rom_region->base() + m_region_offset + 0x4000, 0x4000); @@ -465,7 +466,7 @@ void msx_slot_rs232_toshiba_hx3x_device::device_start() page(1)->install_read_handler(0x7fff, 0x7fff, emu::rw_delegate(*this, FUNC(msx_slot_rs232_toshiba_hx3x_device::bank_r))); page(2)->install_view(0x8000, 0xbfff, m_view); m_view[0].install_read_bank(0x8000, 0xbfff, m_rombank); - m_view[1].install_ram(0x8000, 0x87ff, 0x3800, m_sram.data()); + m_view[1].install_ram(0x8000, 0x87ff, 0x3800, &m_sram[0]); } void msx_slot_rs232_toshiba_hx3x_device::device_reset() diff --git a/src/devices/bus/msx/slot/msx_rs232.h b/src/devices/bus/msx/slot/msx_rs232.h index 6aa6ba52ffa..e22221bbe9b 100644 --- a/src/devices/bus/msx/slot/msx_rs232.h +++ b/src/devices/bus/msx/slot/msx_rs232.h @@ -95,7 +95,7 @@ protected: static constexpr size_t RAM_SIZE = 0x800; required_ioport m_switch_port; - std::vector m_ram; + std::unique_ptr m_ram; }; @@ -152,7 +152,7 @@ protected: required_device m_nvram; memory_bank_creator m_rombank; memory_view m_view; - std::vector m_sram; + std::unique_ptr m_sram; u8 m_bank_reg; }; diff --git a/src/devices/bus/msx/slot/panasonic08.cpp b/src/devices/bus/msx/slot/panasonic08.cpp index 5de4c1d1913..a0a644c46a9 100644 --- a/src/devices/bus/msx/slot/panasonic08.cpp +++ b/src/devices/bus/msx/slot/panasonic08.cpp @@ -41,20 +41,21 @@ void msx_slot_panasonic08_device::device_start() fatalerror("Memory region '%s' is too small for the panasonic08 firmware\n", m_rom_region.finder_tag()); } - m_sram.resize(SRAM_SIZE); + m_sram = std::make_unique(SRAM_SIZE); m_nvram->set_base(&m_sram[0], SRAM_SIZE); save_item(NAME(m_selected_bank)); save_item(NAME(m_control)); + save_pointer(NAME(m_sram), SRAM_SIZE); for (int i = 0; i < 6; i++) { m_bank[i]->configure_entries(0, 0x100, m_rom_region->base() + m_region_offset, 0x2000); - m_bank[i]->configure_entry(0x80, m_sram.data()); - m_bank[i]->configure_entry(0x81, m_sram.data() + 0x2000); - m_bank[i]->configure_entry(0x82, m_sram.data()); - m_bank[i]->configure_entry(0x83, m_sram.data() + 0x2000); + m_bank[i]->configure_entry(0x80, &m_sram[0]); + m_bank[i]->configure_entry(0x81, &m_sram[0x2000]); + m_bank[i]->configure_entry(0x82, &m_sram[0]); + m_bank[i]->configure_entry(0x83, &m_sram[0x2000]); } page(0)->install_view(0x0000, 0x1fff, m_view[0]); diff --git a/src/devices/bus/msx/slot/panasonic08.h b/src/devices/bus/msx/slot/panasonic08.h index 6fd7ace83f4..5602dfd20dd 100644 --- a/src/devices/bus/msx/slot/panasonic08.h +++ b/src/devices/bus/msx/slot/panasonic08.h @@ -41,7 +41,7 @@ private: u32 m_region_offset; u8 m_selected_bank[6]; u8 m_control; - std::vector m_sram; + std::unique_ptr m_sram; }; diff --git a/src/devices/bus/msx/slot/panasonic08r.cpp b/src/devices/bus/msx/slot/panasonic08r.cpp index 82c57ede439..c274cf951f4 100644 --- a/src/devices/bus/msx/slot/panasonic08r.cpp +++ b/src/devices/bus/msx/slot/panasonic08r.cpp @@ -52,6 +52,7 @@ void msx_slot_panasonic08r_device::device_start() save_item(NAME(m_selected_bank)); save_item(NAME(m_control)); save_item(NAME(m_bank9)); + save_pointer(NAME(m_sram), m_sram_size); for (int i = 0; i < 8; i++) { @@ -65,13 +66,13 @@ void msx_slot_panasonic08r_device::device_start() } // Assuming smaller internal RAM is mirrored. - int internal_ram_banks = m_mm->get_ram().size() / 0x2000; + int internal_ram_banks = m_mm->get_ram_size() / 0x2000; int start_bank = 0x180; do { int nr_banks = internal_ram_banks; if (start_bank + nr_banks > 0x200) nr_banks = 0x200 - start_bank; - m_bank[i]->configure_entries(start_bank, nr_banks, m_mm->get_ram().data(), 0x2000); + m_bank[i]->configure_entries(start_bank, nr_banks, m_mm->get_ram_base(), 0x2000); start_bank += internal_ram_banks; } while (start_bank < 0x200); diff --git a/src/devices/bus/msx/slot/ram.cpp b/src/devices/bus/msx/slot/ram.cpp index 92f9a57929d..03219dbf824 100644 --- a/src/devices/bus/msx/slot/ram.cpp +++ b/src/devices/bus/msx/slot/ram.cpp @@ -14,10 +14,13 @@ msx_slot_ram_device::msx_slot_ram_device(const machine_config &mconfig, const ch void msx_slot_ram_device::device_start() { - m_ram.resize(m_size); - save_item(NAME(m_ram)); + if (m_size < m_end_address - m_start_address) + fatalerror("Invalid size %04x for address range %004x - %04x\n", m_start_address, m_end_address); - u8 *ram = m_ram.data(); + m_ram = std::make_unique(m_size); + save_pointer(NAME(m_ram), m_size); + + u8 *ram = &m_ram[0]; u32 start_address = m_start_address; for (int i = m_start_address >> 14; i < 4 && i * 0x4000 < m_end_address; i++) { diff --git a/src/devices/bus/msx/slot/ram.h b/src/devices/bus/msx/slot/ram.h index 9e8f08bc373..c1a5e78e9e8 100644 --- a/src/devices/bus/msx/slot/ram.h +++ b/src/devices/bus/msx/slot/ram.h @@ -20,7 +20,7 @@ protected: virtual void device_start() override; private: - std::vector m_ram; + std::unique_ptr m_ram; }; diff --git a/src/devices/bus/msx/slot/ram_mm.cpp b/src/devices/bus/msx/slot/ram_mm.cpp index b32264a02eb..bd0de812474 100644 --- a/src/devices/bus/msx/slot/ram_mm.cpp +++ b/src/devices/bus/msx/slot/ram_mm.cpp @@ -30,9 +30,8 @@ void msx_slot_ram_mm_device::device_start() default: fatalerror("Invalid memory mapper size specified\n"); } - m_ram.resize(m_total_size); - - save_item(NAME(m_ram)); + m_ram = std::make_unique(m_total_size); + save_pointer(NAME(m_ram), m_total_size); // Install IO read/write handlers using taps to prevent overwriting taps // installed by other (external) memory mapper devices. @@ -41,7 +40,7 @@ void msx_slot_ram_mm_device::device_start() for (int i = 0; i < 4; i++) { - m_rambank[i]->configure_entries(0, u32(m_bank_mask) + 1, m_ram.data(), 0x4000); + m_rambank[i]->configure_entries(0, u32(m_bank_mask) + 1, &m_ram[0], 0x4000); page(i)->install_readwrite_bank(0x4000 * i, (0x4000 * i) + 0x3fff, m_rambank[i]); } } diff --git a/src/devices/bus/msx/slot/ram_mm.h b/src/devices/bus/msx/slot/ram_mm.h index a6015fe095e..8c4c1426264 100644 --- a/src/devices/bus/msx/slot/ram_mm.h +++ b/src/devices/bus/msx/slot/ram_mm.h @@ -16,7 +16,8 @@ public: msx_slot_ram_mm_device &set_unused_bits(u8 unused_bits) { m_unused_bits = unused_bits; return *this; } // Backdoor for the Turbo-R firmware/internal mapper to access internal RAM. - std::vector &get_ram() { return m_ram; } + u32 get_ram_size() { return m_total_size; } + u8 *get_ram_base() { return &m_ram[0]; } protected: virtual void device_start() override; @@ -25,7 +26,7 @@ private: u8 read_mapper_bank(offs_t offset); void write_mapper_bank(offs_t offset, u8 data); - std::vector m_ram; + std::unique_ptr m_ram; u32 m_total_size; u8 m_bank_mask; u8 m_unused_bits; diff --git a/src/devices/bus/msx/slot/sony08.cpp b/src/devices/bus/msx/slot/sony08.cpp index bf13f091ee1..29fd07cca93 100644 --- a/src/devices/bus/msx/slot/sony08.cpp +++ b/src/devices/bus/msx/slot/sony08.cpp @@ -38,8 +38,10 @@ void msx_slot_sony08_device::device_start() fatalerror("Memory region '%s' is too small for the SONY08 firmware\n", m_rom_region.finder_tag()); } - m_sram.resize(SRAM_SIZE); - m_nvram->set_base(m_sram.data(), SRAM_SIZE); + m_sram= std::make_unique(SRAM_SIZE); + m_nvram->set_base(&m_sram[0], SRAM_SIZE); + + save_pointer(NAME(m_sram), SRAM_SIZE); for (int i = 0; i < 4; i++) m_rombank[i]->configure_entries(0, 0x80, m_rom_region->base() + m_region_offset, 0x2000); @@ -48,7 +50,7 @@ void msx_slot_sony08_device::device_start() page(0)->install_view(0x0000, 0x3fff, m_view[0]); m_view[0][0]; - m_view[0][1].install_ram(0x0000, 0x3fff, m_sram.data()); + m_view[0][1].install_ram(0x0000, 0x3fff, &m_sram[0]); page(1)->install_read_bank(0x4000, 0x5fff, m_rombank[0]); page(1)->install_write_handler(0x4fff, 0x4fff, emu::rw_delegate(*this, FUNC(msx_slot_sony08_device::bank_w<0>))); diff --git a/src/devices/bus/msx/slot/sony08.h b/src/devices/bus/msx/slot/sony08.h index 2fa9d9e89ca..c8e364612d0 100644 --- a/src/devices/bus/msx/slot/sony08.h +++ b/src/devices/bus/msx/slot/sony08.h @@ -36,7 +36,7 @@ private: memory_bank_array_creator<6> m_rombank; memory_view m_view[2]; u32 m_region_offset; - std::vector m_sram; + std::unique_ptr m_sram; }; -- cgit v1.2.3