summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/cp1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/cp1.cpp')
-rw-r--r--src/mame/drivers/cp1.cpp319
1 files changed, 0 insertions, 319 deletions
diff --git a/src/mame/drivers/cp1.cpp b/src/mame/drivers/cp1.cpp
deleted file mode 100644
index 97f50ef2fe7..00000000000
--- a/src/mame/drivers/cp1.cpp
+++ /dev/null
@@ -1,319 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Sandro Ronco
-/***************************************************************************
-
- Kosmos CP-1
-
- 06/03/2012 Skeleton driver.
-
- on board there is also 8155
- KEYBOARD Membrane keyboard, 57 keys
- 6 * 7 seg led display
-
-****************************************************************************/
-
-#include "emu.h"
-#include "cpu/mcs48/mcs48.h"
-#include "machine/i8155.h"
-#include "imagedev/cassette.h"
-#include "imagedev/snapquik.h"
-#include "speaker.h"
-#include "cp1.lh"
-
-class cp1_state : public driver_device
-{
-public:
- cp1_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_i8155(*this, "i8155"),
- m_i8155_cp3(*this, "i8155_cp3"),
- m_cassette(*this, "cassette"),
- m_io_lines(*this, "LINE%u", 0U),
- m_io_config(*this, "CONFIG"),
- m_digits(*this, "digit%u", 0U)
- { }
-
- void cp1(machine_config &config);
-private:
- void cp1_io(address_map &map);
-
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
- DECLARE_READ8_MEMBER(port1_r);
- DECLARE_READ8_MEMBER(port2_r);
- DECLARE_WRITE8_MEMBER(port1_w);
- DECLARE_WRITE8_MEMBER(port2_w);
- DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
-
- DECLARE_READ8_MEMBER(i8155_read);
- DECLARE_WRITE8_MEMBER(i8155_write);
- DECLARE_WRITE8_MEMBER(i8155_porta_w);
- DECLARE_READ8_MEMBER(i8155_portb_r);
- DECLARE_WRITE8_MEMBER(i8155_portb_w);
- DECLARE_WRITE8_MEMBER(i8155_portc_w);
-
- required_device<cpu_device> m_maincpu;
- required_device<i8155_device> m_i8155;
- required_device<i8155_device> m_i8155_cp3;
- required_device<cassette_image_device> m_cassette;
- required_ioport_array<5> m_io_lines;
- required_ioport m_io_config;
- output_finder<6> m_digits;
-
- uint8_t m_7seg;
- uint8_t m_port2;
- uint8_t m_matrix;
-};
-
-READ8_MEMBER(cp1_state::port1_r)
-{
- logerror("Read from expansion port 1\n");
-
- uint8_t data = 0;
-
- if (m_io_config->read() & 0x01)
- data |= (m_cassette->input() > 0.03) ? 0x80 : 0x00;
-
- return data;
-}
-
-WRITE8_MEMBER(cp1_state::port1_w)
-{
- logerror("Write to expansion port 1 %x\n", data);
-
- if (m_io_config->read() & 0x01)
- m_cassette->output(data & 0x80 ? +1.0 : -1.0);
-}
-
-READ8_MEMBER(cp1_state::port2_r)
-{
- // x--- ---- I8155 IO/M
- // -x-- ---- I8155 RESET
- // --x- ---- expansion port CE
- // ---x ---- I8155 CE
- // ---- xxxx keyboard input
-
- uint8_t data = 0;
-
- for(int i=0; i<5; i++)
- if (!(m_matrix & (1<<i)))
- data |= m_io_lines[i]->read();
-
- return (data & 0x0f) | (m_port2 & 0xf0);
-}
-
-WRITE8_MEMBER(cp1_state::port2_w)
-{
- if (data & 0x40)
- {
- m_i8155->reset();
-
- if (m_io_config->read() & 0x02)
- m_i8155_cp3->reset();
- }
-
- m_port2 = data;
-}
-
-READ8_MEMBER(cp1_state::i8155_read)
-{
- uint8_t data = 0;
-
- if (!(m_port2 & 0x10))
- {
- m_i8155->ale_w(BIT(m_port2, 7), offset);
- data |= m_i8155->data_r();
- }
- if ((m_io_config->read() & 0x02) && !(m_port2 & 0x20))
- {
- // CP3 RAM expansion
- m_i8155_cp3->ale_w(BIT(m_port2, 7), offset);
- data |= m_i8155_cp3->data_r();
- }
-
- return data;
-}
-
-WRITE8_MEMBER(cp1_state::i8155_write)
-{
- if (!(m_port2 & 0x10))
- {
- m_i8155->ale_w(BIT(m_port2, 7), offset);
- m_i8155->data_w(data);
- }
- if ((m_io_config->read() & 0x02) && !(m_port2 & 0x20))
- {
- // CP3 RAM expansion
- m_i8155_cp3->ale_w(BIT(m_port2, 7), offset);
- m_i8155_cp3->data_w(data);
- }
-}
-
-WRITE8_MEMBER(cp1_state::i8155_porta_w)
-{
- data &= 0x7f; // PA7 is not connected
-
- if (m_7seg)
- {
- if (!(m_matrix & 0x01)) m_digits[5] = data;
- if (!(m_matrix & 0x02)) m_digits[4] = data;
- if (!(m_matrix & 0x04)) m_digits[3] = data;
- if (!(m_matrix & 0x08)) m_digits[2] = data | 0x80; // this digit has always the dot active
- if (!(m_matrix & 0x10)) m_digits[1] = data;
- if (!(m_matrix & 0x20)) m_digits[0] = data;
- }
-
- m_7seg ^= 0x01;
-}
-
-READ8_MEMBER(cp1_state::i8155_portb_r)
-{
- logerror("read from expansion port 2\n");
- return 0;
-}
-
-WRITE8_MEMBER(cp1_state::i8155_portb_w)
-{
- logerror("Write to expansion port 2 %x\n", data);
-}
-
-WRITE8_MEMBER(cp1_state::i8155_portc_w)
-{
- // --xx xxxx keyboard matrix
-
- m_matrix = data & 0x3f;
-}
-
-
-void cp1_state::cp1_io(address_map &map)
-{
- map.unmap_value_high();
- map(0x00, 0xff).rw(FUNC(cp1_state::i8155_read), FUNC(cp1_state::i8155_write));
-}
-
-/* Input ports */
-INPUT_PORTS_START( cp1 )
- PORT_START("LINE0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) PORT_NAME("CAS [Cass. speichern]")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CLR [Irrtum]")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("PC [Programmzahler]")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("ACC [Akku]")
- PORT_START("LINE1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("CAL [Cass. lesen]")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("STEP [Schritt]")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("STP [Stopp]")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RUN [Lauf]")
- PORT_START("LINE2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("8")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_NAME("9")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("OUT [Auslesen]")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("INP [Eingeben]")
- PORT_START("LINE3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("4")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("5")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("6")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("7")
- PORT_START("LINE4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_NAME("0")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("1")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("2")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("3")
-
- PORT_START("CONFIG")
- PORT_CONFNAME( 0x01, 0x01, "CP2 Cassette Interface" )
- PORT_CONFSETTING( 0x00, DEF_STR( No ) )
- PORT_CONFSETTING( 0x01, DEF_STR( Yes ) )
- PORT_CONFNAME( 0x02, 0x00, "CP3 RAM Expansion" )
- PORT_CONFSETTING( 0x00, DEF_STR( No ) )
- PORT_CONFSETTING( 0x02, DEF_STR( Yes ) )
-INPUT_PORTS_END
-
-void cp1_state::machine_start()
-{
- m_digits.resolve();
-}
-
-void cp1_state::machine_reset()
-{
- m_port2 = 0;
- m_matrix = 0;
- m_7seg = 0;
- m_cassette->change_state(CASSETTE_STOPPED, CASSETTE_MASK_UISTATE);
-}
-
-QUICKLOAD_LOAD_MEMBER(cp1_state::quickload_cb)
-{
- char line[0x10];
- int addr = 0;
- while (image.fgets(line, 10) && addr < 0x100)
- {
- int op = 0, arg = 0;
- if (sscanf(line, "%d.%d", &op, &arg) == 2)
- {
- m_i8155->memory_w(addr++, op);
- m_i8155->memory_w(addr++, arg);
- }
- else
- {
- return image_init_result::FAIL;
- }
- }
-
- return image_init_result::PASS;
-}
-
-void cp1_state::cp1(machine_config &config)
-{
- /* basic machine hardware */
- i8049_device &maincpu(I8049(config, m_maincpu, 6_MHz_XTAL));
- maincpu.set_addrmap(AS_IO, &cp1_state::cp1_io);
- maincpu.p1_in_cb().set(FUNC(cp1_state::port1_r));
- maincpu.p1_out_cb().set(FUNC(cp1_state::port1_w));
- maincpu.p2_in_cb().set(FUNC(cp1_state::port2_r));
- maincpu.p2_out_cb().set(FUNC(cp1_state::port2_w));
- maincpu.bus_in_cb().set_log("getbus");
- maincpu.bus_out_cb().set_log("putbus");
- maincpu.t0_in_cb().set_log("t0_r");
- maincpu.t1_in_cb().set_log("t1_r");
-
- i8155_device &i8155(I8155(config, "i8155", 0));
- i8155.out_pa_callback().set(FUNC(cp1_state::i8155_porta_w));
- i8155.in_pb_callback().set(FUNC(cp1_state::i8155_portb_r));
- i8155.out_pb_callback().set(FUNC(cp1_state::i8155_portb_w));
- i8155.out_pc_callback().set(FUNC(cp1_state::i8155_portc_w));
-
- I8155(config, "i8155_cp3", 0);
-
- config.set_default_layout(layout_cp1);
-
- SPEAKER(config, "mono").front_center();
-
- CASSETTE(config, m_cassette);
- m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
- m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
-
- QUICKLOAD(config, "quickload", "obj", attotime::from_seconds(1)).set_load_callback(FUNC(cp1_state::quickload_cb));
-}
-
-/* ROM definition */
-/*
- KOSMOS B
- <Mitsubishi Logo> M5L8049-136P-6
- JAPAN 83F301
-*/
-
-ROM_START( cp1 )
- ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASEFF )
- ROM_SYSTEM_BIOS( 0, "b", "b" )
- ROMX_LOAD( "cp1-kosmos-b.rom", 0x0000, 0x0800, CRC(fea8a2b2) SHA1(c987b79a7b90fcbd58b66a69e95913f2655a1f0d), ROM_BIOS(0))
- // This is from 2716 eprom that was on board with I8039 instead of I8049
- ROM_SYSTEM_BIOS( 1, "2716", "2716" )
- ROMX_LOAD( "cp1-2716.bin", 0x0000, 0x0800, CRC(3a2caf0e) SHA1(ff4befcf82a664950186d3af1843fdef70d2209f), ROM_BIOS(1))
-ROM_END
-
-/* Driver */
-
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1980, cp1, 0, 0, cp1, cp1, cp1_state, empty_init, "Kosmos", "CP1 / Computer Praxis", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )