diff options
Diffstat (limited to 'src/devices/bus/ti99/gromport/gkracker.cpp')
-rw-r--r-- | src/devices/bus/ti99/gromport/gkracker.cpp | 80 |
1 files changed, 32 insertions, 48 deletions
diff --git a/src/devices/bus/ti99/gromport/gkracker.cpp b/src/devices/bus/ti99/gromport/gkracker.cpp index 37f13623575..c39a3cae806 100644 --- a/src/devices/bus/ti99/gromport/gkracker.cpp +++ b/src/devices/bus/ti99/gromport/gkracker.cpp @@ -97,11 +97,11 @@ #include "emu.h" #include "gkracker.h" -#define LOG_WARN (1U<<1) // Warnings -#define LOG_CHANGE (1U<<2) // Cartridge change -#define LOG_GKRACKER (1U<<3) // Gram Kracker operation +#define LOG_WARN (1U << 1) // Warnings +#define LOG_CHANGE (1U << 2) // Cartridge change +#define LOG_GKRACKER (1U << 3) // Gram Kracker operation -#define VERBOSE ( LOG_WARN ) +#define VERBOSE (LOG_GENERAL | LOG_WARN) #include "logmacro.h" DEFINE_DEVICE_TYPE(TI99_GROMPORT_GK, bus::ti99::gromport::ti99_gkracker_device, "ti99_gkracker", "Miller's Graphics GRAM Kracker") @@ -141,15 +141,15 @@ ti99_gkracker_device::ti99_gkracker_device(const machine_config &mconfig, const m_ram_ptr(nullptr), m_grom_ptr(nullptr), m_waddr_LSB(false), - m_cartridge(nullptr) + m_cartridge(*this, "cartridge") { } -WRITE_LINE_MEMBER(ti99_gkracker_device::romgq_line) +void ti99_gkracker_device::romgq_line(int state) { m_romspace_selected = (state==ASSERT_LINE); - // Propagate to the guest - if (m_cartridge != nullptr) m_cartridge->romgq_line(state); + // Propagate to the guest (if available) + m_cartridge->romgq_line(state); } /* @@ -158,12 +158,12 @@ WRITE_LINE_MEMBER(ti99_gkracker_device::romgq_line) void ti99_gkracker_device::set_gromlines(line_state mline, line_state moline, line_state gsq) { m_grom_selected = (gsq==ASSERT_LINE); - if (m_cartridge != nullptr) m_cartridge->set_gromlines(mline, moline, gsq); + m_cartridge->set_gromlines(mline, moline, gsq); } -WRITE_LINE_MEMBER(ti99_gkracker_device::gclock_in) +void ti99_gkracker_device::gclock_in(int state) { - if (m_cartridge != nullptr) m_cartridge->gclock_in(state); + m_cartridge->gclock_in(state); } /* @@ -171,7 +171,7 @@ WRITE_LINE_MEMBER(ti99_gkracker_device::gclock_in) */ bool ti99_gkracker_device::is_grom_idle() { - return (m_cartridge != nullptr)? m_cartridge->is_grom_idle() : false; + return m_cartridge->is_grom_idle(); } void ti99_gkracker_device::readz(offs_t offset, uint8_t *value) @@ -221,25 +221,19 @@ void ti99_gkracker_device::readz(offs_t offset, uint8_t *value) } // If the guest has GROMs or ROMs they will override the GK contents - if (m_cartridge != nullptr) - { - // For debugging - uint8_t val1 = *value; + // For debugging + uint8_t val1 = *value; - // Read from the guest cartridge. - m_cartridge->readz(offset, value); - if (val1 != *value) - LOGMASKED(LOG_GKRACKER, "Read (from guest) %04x -> %02x\n", offset, *value); - } + // Read from the guest cartridge. + m_cartridge->readz(offset, value); + if (val1 != *value) + LOGMASKED(LOG_GKRACKER, "Read (from guest) %04x -> %02x\n", offset, *value); } void ti99_gkracker_device::write(offs_t offset, uint8_t data) { // write to the guest cartridge if present - if (m_cartridge != nullptr) - { - m_cartridge->write(offset, data); - } + m_cartridge->write(offset, data); if (m_grom_selected) { @@ -307,12 +301,12 @@ void ti99_gkracker_device::write(offs_t offset, uint8_t data) void ti99_gkracker_device::crureadz(offs_t offset, uint8_t *value) { - if (m_cartridge != nullptr) m_cartridge->crureadz(offset, value); + m_cartridge->crureadz(offset, value); } void ti99_gkracker_device::cruwrite(offs_t offset, uint8_t data) { - if (m_cartridge != nullptr) m_cartridge->cruwrite(offset, data); + m_cartridge->cruwrite(offset, data); } INPUT_CHANGED_MEMBER( ti99_gkracker_device::gk_changed ) @@ -321,21 +315,6 @@ INPUT_CHANGED_MEMBER( ti99_gkracker_device::gk_changed ) m_gk_switch[param & 0x07] = newval; } -void ti99_gkracker_device::insert(int index, ti99_cartridge_device* cart) -{ - LOGMASKED(LOG_CHANGE, "Insert cartridge\n"); - m_cartridge = cart; - // Switch 1 has a third location for resetting. We do the reset by default - // here. It can be turned off in the configuration. - m_gromport->cartridge_inserted(); -} - -void ti99_gkracker_device::remove(int index) -{ - LOGMASKED(LOG_CHANGE, "Remove cartridge\n"); - m_cartridge = nullptr; -} - void ti99_gkracker_device::gk_install_menu(const char* menutext, int len, int ptr, int next, int start) { const int base = 0x0000; @@ -376,28 +355,33 @@ void ti99_gkracker_device::nvram_default() m_ram_ptr[0x6100] = 0x0b; // GPL EXIT } -void ti99_gkracker_device::nvram_read(emu_file &file) +bool ti99_gkracker_device::nvram_read(util::read_stream &file) { - int readsize = file.read(m_ram_ptr, 81920); + auto const [err, readsize] = util::read(file, m_ram_ptr, 81920); + if (err) + return false; LOGMASKED(LOG_GKRACKER, "Reading NVRAM\n"); // If we increased the size, fill the remaining parts with 0 if (readsize < 81920) { memset(m_ram_ptr + readsize, 0, 81920-readsize); } + return true; } -void ti99_gkracker_device::nvram_write(emu_file &file) +bool ti99_gkracker_device::nvram_write(util::write_stream &file) { LOGMASKED(LOG_GKRACKER, "Writing NVRAM\n"); - file.write(m_ram_ptr, 81920); + auto const [err, writesize] = util::write(file, m_ram_ptr, 81920); + return !err; } void ti99_gkracker_device::device_start() { m_ram_ptr = memregion(GKRACKER_NVRAM_TAG)->base(); m_grom_ptr = memregion(GKRACKER_ROM_TAG)->base(); - m_cartridge = nullptr; + m_cartridge->set_connector(this); + for (int i=1; i < 6; i++) m_gk_switch[i] = 0; save_pointer(NAME(m_gk_switch),6); save_item(NAME(m_romspace_selected)); @@ -435,7 +419,7 @@ const tiny_rom_entry *ti99_gkracker_device::device_rom_region() const void ti99_gkracker_device::device_add_mconfig(machine_config &config) { - TI99_CART(config, "cartridge", 0); + TI99_CART(config, m_cartridge, 0); } INPUT_PORTS_START(gkracker) |