coco12.cpp: Added handlers for CTS region $C000-$FEFF, allows cartridges to implement devices in this region.

This commit is contained in:
Nigel Barnes 2019-05-11 17:11:38 +01:00
parent 7255f87b9e
commit d4ab3c5549
3 changed files with 61 additions and 3 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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));