// license:BSD-3-Clause // copyright-holders:Nathan Woods /*************************************************************************** coco12.c TRS-80 Radio Shack Color Computer 1/2 Family ***************************************************************************/ #include "includes/coco12.h" //------------------------------------------------- // device_start //------------------------------------------------- void coco12_state::device_start() { coco_state::device_start(); configure_sam(); } //------------------------------------------------- // configure_sam //------------------------------------------------- void coco12_state::configure_sam() { cococart_slot_device *cart = m_cococart; uint8_t *ram = m_ram->pointer(); uint32_t ram_size = m_ram->size(); uint8_t *rom = memregion(MAINCPU_TAG)->base(); uint8_t *cart_rom = cart->get_cart_base(); m_sam->configure_bank(0, ram, 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 // $FF00-$FF1F m_sam->configure_bank(4, read8_delegate(FUNC(coco12_state::ff00_read), this), write8_delegate(FUNC(coco12_state::ff00_write), this)); // $FF20-$FF3F m_sam->configure_bank(5, read8_delegate(FUNC(coco12_state::ff20_read), this), write8_delegate(FUNC(coco12_state::ff20_write), this)); // $FF40-$FF5F m_sam->configure_bank(6, read8_delegate(FUNC(coco12_state::ff40_read), this), write8_delegate(FUNC(coco12_state::ff40_write), this)); // $FF60-$FFBF m_sam->configure_bank(7, read8_delegate(FUNC(coco12_state::ff60_read), this), write8_delegate(FUNC(coco12_state::ff60_write), this)); } //------------------------------------------------- // horizontal_sync //------------------------------------------------- WRITE_LINE_MEMBER( coco12_state::horizontal_sync ) { m_pia_0->ca1_w(state); m_sam->hs_w(state); } //------------------------------------------------- // field_sync //------------------------------------------------- WRITE_LINE_MEMBER( coco12_state::field_sync ) { m_pia_0->cb1_w(state); } //------------------------------------------------- // sam_read //------------------------------------------------- READ8_MEMBER( coco12_state::sam_read ) { uint8_t data = m_ram->read(offset); m_vdg->as_w(data & 0x80 ? ASSERT_LINE : CLEAR_LINE); m_vdg->inv_w(data & 0x40 ? ASSERT_LINE : CLEAR_LINE); return data; } //------------------------------------------------- // pia1_pb_changed //------------------------------------------------- void coco12_state::pia1_pb_changed(uint8_t data) { /* call inherited function */ coco_state::pia1_pb_changed(data); m_vdg->css_w(data & 0x08); m_vdg->intext_w(data & 0x10); m_vdg->gm0_w(data & 0x10); m_vdg->gm1_w(data & 0x20); m_vdg->gm2_w(data & 0x40); m_vdg->ag_w(data & 0x80); } //------------------------------------------------- // update_cart_base //------------------------------------------------- void coco12_state::update_cart_base(uint8_t *cart_base) { m_sam->configure_bank(3, cart_base, 0x4000, true); // $C000-$FEFF }