From d4ab3c5549e54c58c6a0ba40453016572add8591 Mon Sep 17 00:00:00 2001 From: Nigel Barnes Date: Sat, 11 May 2019 17:11:38 +0100 Subject: [PATCH] coco12.cpp: Added handlers for CTS region $C000-$FEFF, allows cartridges to implement devices in this region. --- src/devices/bus/coco/cococart.cpp | 53 ++++++++++++++++++++++++++++++- src/devices/bus/coco/cococart.h | 6 ++++ src/mame/machine/coco12.cpp | 5 +-- 3 files changed, 61 insertions(+), 3 deletions(-) diff --git a/src/devices/bus/coco/cococart.cpp b/src/devices/bus/coco/cococart.cpp index 6bf6360d24b..6932629e746 100644 --- a/src/devices/bus/coco/cococart.cpp +++ b/src/devices/bus/coco/cococart.cpp @@ -151,6 +151,30 @@ void cococart_slot_device::device_timer(emu_timer &timer, device_timer_id id, in } +//------------------------------------------------- +// cts_read +//------------------------------------------------- + +READ8_MEMBER(cococart_slot_device::cts_read) +{ + uint8_t result = 0x00; + if (m_cart) + result = m_cart->cts_read(space, offset); + return result; +} + + +//------------------------------------------------- +// cts_write +//------------------------------------------------- + +WRITE8_MEMBER(cococart_slot_device::cts_write) +{ + if (m_cart) + m_cart->cts_write(space, offset, data); +} + + //------------------------------------------------- // scs_read //------------------------------------------------- @@ -412,7 +436,7 @@ image_init_result cococart_slot_device::call_load() { memory_region *cart_mem = m_cart->get_cart_memregion(); uint8_t *base = cart_mem->base(); - offs_t read_length, cart_length = cart_mem->bytes();; + offs_t read_length, cart_length = cart_mem->bytes(); if (!loaded_through_softlist()) { @@ -501,6 +525,33 @@ void device_cococart_interface::interface_pre_start() } +//------------------------------------------------- +// cts_read - Signifies a read where the CTS pin +// on the cartridge slot was asserted ($C000-FFEF) +//------------------------------------------------- + +READ8_MEMBER(device_cococart_interface::cts_read) +{ + memory_region *cart_mem = get_cart_memregion(); + offs_t cart_length = cart_mem->bytes(); + + if (cart_mem) + return cart_mem->base()[offset & (cart_length - 1)]; + else + return 0x00; +} + + +//------------------------------------------------- +// cts_write - Signifies a write where the CTS pin +// on the cartridge slot was asserted ($C000-FFEF) +//------------------------------------------------- + +WRITE8_MEMBER(device_cococart_interface::cts_write) +{ +} + + //------------------------------------------------- // scs_read - Signifies a read where the SCS pin // on the cartridge slot was asserted ($FF40-5F) diff --git a/src/devices/bus/coco/cococart.h b/src/devices/bus/coco/cococart.h index c559a2eea53..bcee3d2990a 100644 --- a/src/devices/bus/coco/cococart.h +++ b/src/devices/bus/coco/cococart.h @@ -88,6 +88,10 @@ public: // slot interface overrides virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override; + // reading and writing to $C000-$FFEF + DECLARE_READ8_MEMBER(cts_read); + DECLARE_WRITE8_MEMBER(cts_write); + // reading and writing to $FF40-$FF5F DECLARE_READ8_MEMBER(scs_read); DECLARE_WRITE8_MEMBER(scs_write); @@ -161,6 +165,8 @@ public: // construction/destruction virtual ~device_cococart_interface(); + virtual DECLARE_READ8_MEMBER(cts_read); + virtual DECLARE_WRITE8_MEMBER(cts_write); virtual DECLARE_READ8_MEMBER(scs_read); virtual DECLARE_WRITE8_MEMBER(scs_write); virtual void set_sound_enable(bool sound_enable); diff --git a/src/mame/machine/coco12.cpp b/src/mame/machine/coco12.cpp index da49aad2c2f..c6d858efbaf 100644 --- a/src/mame/machine/coco12.cpp +++ b/src/mame/machine/coco12.cpp @@ -30,12 +30,13 @@ void coco12_state::device_start() void coco12_state::configure_sam() { uint8_t *rom = memregion(MAINCPU_TAG)->base(); - uint8_t *cart_rom = cococart().get_cart_base(); m_sam->configure_bank(0, ram().pointer(), ram().size(), false); // $0000-$7FFF m_sam->configure_bank(1, &rom[0x0000], 0x2000, true); // $8000-$9FFF m_sam->configure_bank(2, &rom[0x2000], 0x2000, true); // $A000-$BFFF - m_sam->configure_bank(3, cart_rom, 0x4000, true); // $C000-$FEFF + + // $C000-$FEFF + m_sam->configure_bank(3, read8_delegate(FUNC(cococart_slot_device::cts_read), m_cococart.target()), write8_delegate(FUNC(cococart_slot_device::cts_write), m_cococart.target())); // $FF00-$FF1F m_sam->configure_bank(4, read8_delegate(FUNC(coco12_state::ff00_read), this), write8_delegate(FUNC(coco12_state::ff00_write), this));