From fe913a7bac824a2e3df9c0395ab0613619fadf7b Mon Sep 17 00:00:00 2001 From: Robbbert Date: Thu, 11 Jun 2020 01:15:08 +1000 Subject: [PATCH] eti660: New software list ---- Maze 2 (not working) Music Maker Pong Space Invaders (not working) Wipeout --- hash/eti660_quik.xml | 71 +++++++++++++++++++++++ scripts/target/mame/mess.lua | 1 - src/mame/drivers/eti660.cpp | 109 +++++++++++++++++++++++++++++------ src/mame/includes/eti660.h | 83 -------------------------- 4 files changed, 163 insertions(+), 101 deletions(-) create mode 100644 hash/eti660_quik.xml delete mode 100644 src/mame/includes/eti660.h diff --git a/hash/eti660_quik.xml b/hash/eti660_quik.xml new file mode 100644 index 00000000000..bf8de928b02 --- /dev/null +++ b/hash/eti660_quik.xml @@ -0,0 +1,71 @@ + + + + + + + Maze 2 + 198? + <unknown> + + + + + + + + + + Music Maker + 198? + <unknown> + + + + + + + + + + + Pong + 198? + <unknown> + + + + + + + + + + Space Invaders + 198? + <unknown> + + + + + + + + + + + Wipeout + 1982 + <unknown> + + + + + + + + + + diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 9b04c70c3ca..d31ada36c32 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -4318,7 +4318,6 @@ files { MAME_DIR .. "src/mame/drivers/epic14e.cpp", MAME_DIR .. "src/mame/drivers/esprit.cpp", MAME_DIR .. "src/mame/drivers/eti660.cpp", - MAME_DIR .. "src/mame/includes/eti660.h", MAME_DIR .. "src/mame/drivers/eurit.cpp", MAME_DIR .. "src/mame/drivers/eurocom2.cpp", MAME_DIR .. "src/mame/drivers/excali64.cpp", diff --git a/src/mame/drivers/eti660.cpp b/src/mame/drivers/eti660.cpp index 97cb1e9594e..9a4747ebed3 100644 --- a/src/mame/drivers/eti660.cpp +++ b/src/mame/drivers/eti660.cpp @@ -36,24 +36,96 @@ **************************************************************************************************/ #include "emu.h" -#include "includes/eti660.h" +#include "cpu/cosmac/cosmac.h" +#include "machine/ram.h" +#include "machine/6821pia.h" +#include "machine/rescap.h" +#include "sound/cdp1864.h" +#include "imagedev/cassette.h" +#include "imagedev/snapquik.h" #include "screen.h" #include "speaker.h" +#define CDP1802_TAG "ic3" +#define CDP1864_TAG "ic4" +#define MC6821_TAG "ic5" + +enum +{ + LED_POWER = 0, + LED_PULSE +}; + +class eti660_state : public driver_device +{ +public: + eti660_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_p_videoram(*this, "videoram") + , m_maincpu(*this, CDP1802_TAG) + , m_cti(*this, CDP1864_TAG) + , m_pia(*this, MC6821_TAG) + , m_cassette(*this, "cassette") + , m_io_keyboard(*this, "KEY.%u", 0U) + , m_special(*this, "SPECIAL") + , m_leds(*this, "led%u", 0U) + { } + + void eti660(machine_config &config); + +private: + u8 pia_r(); + void pia_w(u8 data); + void colorram_w(offs_t offset, u8 data); + DECLARE_READ_LINE_MEMBER( clear_r ); + DECLARE_READ_LINE_MEMBER( ef2_r ); + DECLARE_READ_LINE_MEMBER( ef4_r ); + DECLARE_WRITE_LINE_MEMBER( q_w ); + DECLARE_WRITE_LINE_MEMBER( ca2_w ); + void dma_w(offs_t offset, u8 data); + u8 pia_pa_r(); + void pia_pa_w(u8 data); + DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); + required_shared_ptr m_p_videoram; + + void io_map(address_map &map); + void mem_map(address_map &map); + + required_device m_maincpu; + required_device m_cti; + required_device m_pia; + required_device m_cassette; + required_ioport_array<4> m_io_keyboard; + required_ioport m_special; + output_finder<2> m_leds; + + virtual void machine_start() override; + virtual void machine_reset() override; + uint16_t m_resetcnt; + + /* keyboard state */ + u8 m_keylatch; + + /* video state */ + u8 m_color_ram[0xc0]; + u8 m_color; + bool m_color_on; +}; + /* Read/Write Handlers */ // Schematic is wrong, PCB layout is correct: D0-7 swapped around on PIA. // There's still a bug in the PIA: if ca2 is instructed to go low, nothing happens. -uint8_t eti660_state::pia_r() +u8 eti660_state::pia_r() { - uint8_t pia_offset = m_maincpu->get_memory_address() & 0x03; + u8 pia_offset = m_maincpu->get_memory_address() & 0x03; return bitswap<8>(m_pia->read(pia_offset), 0,1,2,3,4,5,6,7); } -void eti660_state::pia_w(uint8_t data) +void eti660_state::pia_w(u8 data) { - uint8_t pia_offset = m_maincpu->get_memory_address() & 0x03; + u8 pia_offset = m_maincpu->get_memory_address() & 0x03; data = bitswap<8>(data,0,1,2,3,4,5,6,7); m_pia->write(pia_offset, data); @@ -68,11 +140,11 @@ WRITE_LINE_MEMBER( eti660_state::ca2_w ) // test with Wipeout game - it should s m_cti->con_w(state); } - void eti660_state::colorram_w(offs_t offset, uint8_t data) + void eti660_state::colorram_w(offs_t offset, u8 data) { offset = m_maincpu->get_memory_address() - 0xc80; - uint8_t colorram_offset = (((offset & 0x1f0) >> 1) | (offset & 0x07)); + u8 colorram_offset = (((offset & 0x1f0) >> 1) | (offset & 0x07)); if (colorram_offset < 0xc0) m_color_ram[colorram_offset] = data; @@ -167,7 +239,7 @@ WRITE_LINE_MEMBER( eti660_state::q_w ) m_cassette->output(state ? 1.0 : -1.0); } -void eti660_state::dma_w(offs_t offset, uint8_t data) +void eti660_state::dma_w(offs_t offset, u8 data) { offset -= 0x480; @@ -175,7 +247,7 @@ void eti660_state::dma_w(offs_t offset, uint8_t data) if (m_color_on) { - uint8_t colorram_offset = ((offset & 0x1f0) >> 1) | (offset & 0x07); + u8 colorram_offset = ((offset & 0x1f0) >> 1) | (offset & 0x07); if (colorram_offset < 0xc0) m_color = m_color_ram[colorram_offset]; @@ -188,7 +260,7 @@ void eti660_state::dma_w(offs_t offset, uint8_t data) /* PIA6821 Interface */ -uint8_t eti660_state::pia_pa_r() +u8 eti660_state::pia_pa_r() { /* @@ -205,7 +277,7 @@ uint8_t eti660_state::pia_pa_r() */ - uint8_t i, data = 0xff; + u8 i, data = 0xff; for (i = 0; i < 4; i++) if (BIT(m_keylatch, i)) @@ -214,7 +286,7 @@ uint8_t eti660_state::pia_pa_r() return data; } -void eti660_state::pia_pa_w(uint8_t data) +void eti660_state::pia_pa_w(u8 data) { /* @@ -259,7 +331,7 @@ QUICKLOAD_LOAD_MEMBER(eti660_state::quickload_cb) int i; int quick_addr = 0x600; int quick_length; - std::vector quick_data; + std::vector quick_data; int read_; image_init_result result = image_init_result::FAIL; @@ -305,11 +377,11 @@ void eti660_state::eti660(machine_config &config) m_maincpu->dma_wr_cb().set(FUNC(eti660_state::dma_w)); /* video hardware */ - SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "mono").front_center(); - CDP1864(config, m_cti, XTAL(8'867'238)/5).set_screen(SCREEN_TAG); + CDP1864(config, m_cti, XTAL(8'867'238)/5).set_screen("screen"); m_cti->inlace_cb().set_constant(0); m_cti->int_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT); m_cti->dma_out_cb().set_inputline(m_maincpu, COSMAC_INPUT_LINE_DMAOUT); @@ -336,7 +408,10 @@ void eti660_state::eti660(machine_config &config) RAM(config, RAM_TAG).set_default_size("3K"); /* quickload */ - QUICKLOAD(config, "quickload", "bin,c8,ch8", attotime::from_seconds(2)).set_load_callback(FUNC(eti660_state::quickload_cb)); + quickload_image_device &quickload(QUICKLOAD(config, "quickload", "bin,c8,ch8", attotime::from_seconds(2))); + quickload.set_load_callback(FUNC(eti660_state::quickload_cb)); + quickload.set_interface("etiquik"); + SOFTWARE_LIST(config, "quik_list").set_original("eti660_quik"); } /* ROMs */ @@ -347,4 +422,4 @@ ROM_START( eti660 ) ROM_END // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1981, eti660, 0, 0, eti660, eti660, eti660_state, empty_init, "Electronics Today International", "ETI-660", 0 ) +COMP( 1981, eti660, 0, 0, eti660, eti660, eti660_state, empty_init, "Electronics Today International", "ETI-660 Learners' Microcomputer", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/eti660.h b/src/mame/includes/eti660.h deleted file mode 100644 index ad1ccba2e58..00000000000 --- a/src/mame/includes/eti660.h +++ /dev/null @@ -1,83 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Curt Coder -#ifndef MAME_INCLUDES_ETI660_H -#define MAME_INCLUDES_ETI660_H - -#pragma once - -#include "cpu/cosmac/cosmac.h" -#include "imagedev/cassette.h" -#include "imagedev/snapquik.h" -#include "machine/ram.h" -#include "machine/6821pia.h" -#include "machine/rescap.h" -#include "sound/cdp1864.h" - -#define SCREEN_TAG "screen" -#define CDP1802_TAG "ic3" -#define CDP1864_TAG "ic4" -#define MC6821_TAG "ic5" - -enum -{ - LED_POWER = 0, - LED_PULSE -}; - -class eti660_state : public driver_device -{ -public: - eti660_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_p_videoram(*this, "videoram") - , m_maincpu(*this, CDP1802_TAG) - , m_cti(*this, CDP1864_TAG) - , m_pia(*this, MC6821_TAG) - , m_cassette(*this, "cassette") - , m_io_keyboard(*this, "KEY.%u", 0) - , m_special(*this, "SPECIAL") - , m_leds(*this, "led%u", 0U) - { } - - void eti660(machine_config &config); - -private: - uint8_t pia_r(); - void pia_w(uint8_t data); - void colorram_w(offs_t offset, uint8_t data); - DECLARE_READ_LINE_MEMBER( clear_r ); - DECLARE_READ_LINE_MEMBER( ef2_r ); - DECLARE_READ_LINE_MEMBER( ef4_r ); - DECLARE_WRITE_LINE_MEMBER( q_w ); - DECLARE_WRITE_LINE_MEMBER( ca2_w ); - void dma_w(offs_t offset, uint8_t data); - uint8_t pia_pa_r(); - void pia_pa_w(uint8_t data); - DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); - required_shared_ptr m_p_videoram; - - void io_map(address_map &map); - void mem_map(address_map &map); - - required_device m_maincpu; - required_device m_cti; - required_device m_pia; - required_device m_cassette; - required_ioport_array<4> m_io_keyboard; - required_ioport m_special; - output_finder<2> m_leds; - - virtual void machine_start() override; - virtual void machine_reset() override; - uint16_t m_resetcnt; - - /* keyboard state */ - uint8_t m_keylatch; - - /* video state */ - uint8_t m_color_ram[0xc0]; - uint8_t m_color; - bool m_color_on; -}; - -#endif