mirror of
https://github.com/holub/mame
synced 2025-07-07 02:50:50 +03:00
bus/msx/slot: Use std::unique_ptr instead of std::vector. (#12746)
This commit is contained in:
parent
d75b6cd0cb
commit
0c0f349b0c
@ -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<u8[]>(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);
|
||||
|
@ -41,7 +41,7 @@ private:
|
||||
memory_view m_view[3];
|
||||
u32 m_region_offset;
|
||||
u32 m_sram_address;
|
||||
std::vector<u8> m_sram;
|
||||
std::unique_ptr<u8[]> m_sram;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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<u8[]>(RAM_SIZE);
|
||||
m_empty_bank = std::make_unique<u8[]>(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<u8[]>(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)));
|
||||
|
@ -42,8 +42,8 @@ private:
|
||||
uint8_t m_selected_bank[6];
|
||||
bool m_ram_active[6];
|
||||
uint8_t m_control;
|
||||
std::vector<uint8_t> m_ram;
|
||||
std::vector<uint8_t> m_empty_bank;
|
||||
std::unique_ptr<u8[]> m_ram;
|
||||
std::unique_ptr<u8[]> 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<u8> m_sram;
|
||||
std::unique_ptr<u8[]> m_sram;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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<u8[]>(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<u8[]>(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()
|
||||
|
@ -95,7 +95,7 @@ protected:
|
||||
static constexpr size_t RAM_SIZE = 0x800;
|
||||
|
||||
required_ioport m_switch_port;
|
||||
std::vector<u8> m_ram;
|
||||
std::unique_ptr<u8[]> m_ram;
|
||||
};
|
||||
|
||||
|
||||
@ -152,7 +152,7 @@ protected:
|
||||
required_device<nvram_device> m_nvram;
|
||||
memory_bank_creator m_rombank;
|
||||
memory_view m_view;
|
||||
std::vector<u8> m_sram;
|
||||
std::unique_ptr<u8[]> m_sram;
|
||||
u8 m_bank_reg;
|
||||
};
|
||||
|
||||
|
@ -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<u8[]>(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]);
|
||||
|
@ -41,7 +41,7 @@ private:
|
||||
u32 m_region_offset;
|
||||
u8 m_selected_bank[6];
|
||||
u8 m_control;
|
||||
std::vector<uint8_t> m_sram;
|
||||
std::unique_ptr<u8[]> m_sram;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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<u8[]>(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++)
|
||||
{
|
||||
|
@ -20,7 +20,7 @@ protected:
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
std::vector<u8> m_ram;
|
||||
std::unique_ptr<u8[]> m_ram;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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<u8[]>(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]);
|
||||
}
|
||||
}
|
||||
|
@ -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<u8> &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<u8> m_ram;
|
||||
std::unique_ptr<u8[]> m_ram;
|
||||
u32 m_total_size;
|
||||
u8 m_bank_mask;
|
||||
u8 m_unused_bits;
|
||||
|
@ -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<u8[]>(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>)));
|
||||
|
@ -36,7 +36,7 @@ private:
|
||||
memory_bank_array_creator<6> m_rombank;
|
||||
memory_view m_view[2];
|
||||
u32 m_region_offset;
|
||||
std::vector<u8> m_sram;
|
||||
std::unique_ptr<u8[]> m_sram;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user