From 709559b75416bef2ff72a28b263cd6cac7727118 Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 22 Jan 2019 20:46:52 -0500 Subject: concept: Add master oscillator and some derivved clocks; hook up slot interrupts (nw) --- src/emu/xtal.cpp | 1 + src/mame/drivers/concept.cpp | 27 ++++++++++++++++----------- src/mame/includes/concept.h | 10 +++++++--- src/mame/machine/concept.cpp | 19 ++++++++----------- 4 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index 0eee1d4963f..0f8c329bda1 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -220,6 +220,7 @@ const double XTAL::known_xtals[] = { 16'000'000, /* 16_MHz_XTAL Extremely common, used on 100's of PCBs */ 16'097'280, /* 16.09728_MHz_XTAL DEC VT240 (1024 * 262 * 60) */ 16'128'000, /* 16.128_MHz_XTAL Fujitsu FM-7 */ + 16'364'000, /* 16.364_MHz_XTAL Corvus Concept */ 16'384'000, /* 16.384_MHz_XTAL - */ 16'400'000, /* 16.4_MHz_XTAL MS 6102 */ 16'572'000, /* 16.572_MHz_XTAL Micro-Term ACT-5A */ diff --git a/src/mame/drivers/concept.cpp b/src/mame/drivers/concept.cpp index 4ead16faab6..4fcba27ad13 100644 --- a/src/mame/drivers/concept.cpp +++ b/src/mame/drivers/concept.cpp @@ -13,7 +13,7 @@ LAN port (seems more or less similar to AppleTalk) * 4 expansion ports enable to add expansion cards, namely floppy disk and hard disk controllers (the expansion ports are partially compatible - with Apple 2 expansion ports) + with Apple 2 expansion ports; DMA is not supported) Video: monochrome bitmapped display, 720*560 visible area (bitmaps are 768 pixels wide in memory). One interesting feature is the fact that the @@ -39,6 +39,7 @@ #include "bus/a2bus/corvfdc01.h" #include "bus/a2bus/corvfdc02.h" #include "bus/rs232/rs232.h" +#include "machine/input_merger.h" #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -49,7 +50,7 @@ void concept_state::concept_memmap(address_map &map) map(0x000008, 0x000fff).ram(); /* static RAM */ map(0x010000, 0x011fff).rom().region("maincpu", 0x010000); /* boot ROM */ map(0x020000, 0x021fff).rom().region("macsbug", 0x0); /* macsbugs ROM (optional) */ - map(0x030000, 0x03ffff).rw(FUNC(concept_state::concept_io_r), FUNC(concept_state::concept_io_w)); /* I/O space */ + map(0x030000, 0x03ffff).rw(FUNC(concept_state::io_r), FUNC(concept_state::io_w)).umask16(0x00ff); /* I/O space */ map(0x080000, 0x0fffff).ram().share("videoram");/* AM_RAMBANK(2) */ /* DRAM */ } @@ -209,7 +210,7 @@ void concept_a2_cards(device_slot_interface &device) void concept_state::concept(machine_config &config) { /* basic machine hardware */ - M68000(config, m_maincpu, 8182000); /* 16.364 MHz / 2 */ + M68000(config, m_maincpu, 16.364_MHz_XTAL / 2); m_maincpu->set_addrmap(AS_PROGRAM, &concept_state::concept_memmap); config.m_minimum_quantum = attotime::from_hz(60); @@ -232,12 +233,12 @@ void concept_state::concept(machine_config &config) SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00); /* rtc */ - MM58274C(config, m_mm58274, 0); + MM58274C(config, m_mm58274, 32.768_kHz_XTAL); m_mm58274->set_mode24(0); // 12 hour m_mm58274->set_day1(1); // monday /* via */ - VIA6522(config, m_via0, 1022750); + VIA6522(config, m_via0, 16.364_MHz_XTAL / 16); m_via0->readpa_handler().set(FUNC(concept_state::via_in_a)); m_via0->readpb_handler().set(FUNC(concept_state::via_in_b)); m_via0->writepa_handler().set(FUNC(concept_state::via_out_a)); @@ -246,24 +247,28 @@ void concept_state::concept(machine_config &config) m_via0->irq_handler().set(FUNC(concept_state::via_irq_func)); /* ACIAs */ - MOS6551(config, m_acia0, 0); - m_acia0->set_xtal(XTAL(1'843'200)); + MOS6551(config, m_acia0, 16.364_MHz_XTAL / 16); + m_acia0->set_xtal(16.364_MHz_XTAL / 9); m_acia0->txd_handler().set("rs232a", FUNC(rs232_port_device::write_txd)); - MOS6551(config, m_acia1, 0); - m_acia1->set_xtal(XTAL(1'843'200)); + MOS6551(config, m_acia1, 16.364_MHz_XTAL / 16); + m_acia1->set_xtal(16.364_MHz_XTAL / 9); m_acia1->txd_handler().set("rs232b", FUNC(rs232_port_device::write_txd)); - MOS6551(config, m_kbdacia, 0); - m_kbdacia->set_xtal(XTAL(1'843'200)); + MOS6551(config, m_kbdacia, 16.364_MHz_XTAL / 16); + m_kbdacia->set_xtal(16.364_MHz_XTAL / 9); /* Apple II bus */ A2BUS(config, m_a2bus, 0).set_space(m_maincpu, AS_PROGRAM); + m_a2bus->nmi_w().set("iocint", FUNC(input_merger_device::in_w<0>)); + m_a2bus->irq_w().set("iocint", FUNC(input_merger_device::in_w<1>)); A2BUS_SLOT(config, "sl1", m_a2bus, concept_a2_cards, nullptr); A2BUS_SLOT(config, "sl2", m_a2bus, concept_a2_cards, nullptr); A2BUS_SLOT(config, "sl3", m_a2bus, concept_a2_cards, nullptr); A2BUS_SLOT(config, "sl4", m_a2bus, concept_a2_cards, "fdc01"); + INPUT_MERGER_ANY_HIGH(config, "iocint").output_handler().set(FUNC(concept_state::ioc_interrupt)); + /* 2x RS232 ports */ rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, nullptr)); rs232a.rxd_handler().set(m_acia0, FUNC(mos6551_device::write_rxd)); diff --git a/src/mame/includes/concept.h b/src/mame/includes/concept.h index e9f90eeba2c..8471f0c7eb6 100644 --- a/src/mame/includes/concept.h +++ b/src/mame/includes/concept.h @@ -41,6 +41,9 @@ public: m_videoram(*this,"videoram") { } + void concept(machine_config &config); + +private: required_device m_maincpu; required_device m_acia0; required_device m_acia1; @@ -54,8 +57,8 @@ public: uint8_t m_pending_interrupts; bool m_clock_enable; uint8_t m_clock_address; - DECLARE_READ16_MEMBER(concept_io_r); - DECLARE_WRITE16_MEMBER(concept_io_w); + DECLARE_READ8_MEMBER(io_r); + DECLARE_WRITE8_MEMBER(io_w); virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; @@ -67,8 +70,9 @@ public: DECLARE_WRITE8_MEMBER(via_out_b); DECLARE_WRITE_LINE_MEMBER(via_out_cb2); DECLARE_WRITE_LINE_MEMBER(via_irq_func); + DECLARE_WRITE_LINE_MEMBER(ioc_interrupt); void concept_set_interrupt(int level, int state); - void concept(machine_config &config); + void concept_memmap(address_map &map); }; diff --git a/src/mame/machine/concept.cpp b/src/mame/machine/concept.cpp index 655d98dd03d..9074639b23d 100644 --- a/src/mame/machine/concept.cpp +++ b/src/mame/machine/concept.cpp @@ -73,6 +73,11 @@ uint32_t concept_state::screen_update(screen_device &screen, bitmap_ind16 &bitma return 0; } +WRITE_LINE_MEMBER(concept_state::ioc_interrupt) +{ + concept_set_interrupt(IOCINT_level, state); +} + void concept_state::concept_set_interrupt(int level, int state) { int interrupt_mask; @@ -164,11 +169,8 @@ WRITE_LINE_MEMBER(concept_state::via_irq_func) concept_set_interrupt(TIMINT_level, state); } -READ16_MEMBER(concept_state::concept_io_r) +READ8_MEMBER(concept_state::io_r) { - if (! ACCESSING_BITS_0_7) - return 0; - switch ((offset >> 8) & 7) { case 0: @@ -216,7 +218,7 @@ READ16_MEMBER(concept_state::concept_io_r) case 5: /* slot status */ LOG(("concept_io_r: Slot status read at address 0x03%4.4x\n", offset << 1)); - break; + return (~m_a2bus->get_a2bus_nmi_mask() & 0x0f) | (~m_a2bus->get_a2bus_irq_mask() & 0x0f) << 4; case 6: /* calendar R/W */ @@ -275,13 +277,8 @@ READ16_MEMBER(concept_state::concept_io_r) return 0; } -WRITE16_MEMBER(concept_state::concept_io_w) +WRITE8_MEMBER(concept_state::io_w) { - if (! ACCESSING_BITS_0_7) - return; - - data &= 0xff; - switch ((offset >> 8) & 7) { case 0: -- cgit v1.2.3