eti660: New software list ----

Maze 2 (not working)
Music Maker
Pong
Space Invaders (not working)
Wipeout
This commit is contained in:
Robbbert 2020-06-11 01:15:08 +10:00
parent 53c62de131
commit fe913a7bac
4 changed files with 163 additions and 101 deletions

71
hash/eti660_quik.xml Normal file
View File

@ -0,0 +1,71 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0
-->
<softwarelist name="eti660_quik" description="ETI-660 quickload">
<software name="maze" supported="no"><!-- maze is garbage (works in Emma02 v1.21) -->
<description>Maze 2</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="8 to start"/>
<part name="quik" interface="etiquik">
<dataarea name="quik" size="38">
<rom name="maze.ch8" size="38" crc="002ca8c4" sha1="ec617d44bd64e5decc7dce3d8e9797b5852c015c"/>
</dataarea>
</part>
</software>
<software name="musicm">
<description>Music Maker</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="developer" value="Peter Collins"/>
<info name="usage" value="8 to start, then one of 0,1,2,4,5,6"/>
<part name="quik" interface="etiquik">
<dataarea name="quik" size="510">
<rom name="musicm.ch8" size="510" crc="c84e7543" sha1="d813e28e122faa3aad99357da37ae0df8fff9b7c"/>
</dataarea>
</part>
</software>
<software name="pong"><!-- game never ends -->
<description>Pong</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="8 to start, then 1=up, 4=down"/>
<part name="quik" interface="etiquik">
<dataarea name="quik" size="246">
<rom name="pong.ch8" size="246" crc="9d86b621" sha1="551faa5787451200838be0a3a0a8e4114e5aaa48"/>
</dataarea>
</part>
</software>
<software name="spaceinv" supported="no"><!-- cannnot shoot aliens -->
<description>Space Invaders</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="developer" value="P Easdown"/>
<info name="usage" value="8 to start, then 4=left, 6=right, 5=fire"/>
<part name="quik" interface="etiquik">
<dataarea name="quik" size="400">
<rom name="spaceinv.ch8" size="400" crc="4cda1787" sha1="1133f02166486a7ed973dc635e4f7a222735ab29"/>
</dataarea>
</part>
</software>
<software name="wipeout">
<description>Wipeout</description>
<year>1982</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="developer" value="W F Kreykes"/>
<info name="usage" value="8 to start, then A=left, D=right"/>
<part name="quik" interface="etiquik">
<dataarea name="quik" size="606">
<rom name="wipeout.c8" size="606" crc="cf30e8eb" sha1="2fb4c14104b58b0df28368393b3fc0aaabe9e8ae"/>
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -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",

View File

@ -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<u8> m_p_videoram;
void io_map(address_map &map);
void mem_map(address_map &map);
required_device<cosmac_device> m_maincpu;
required_device<cdp1864_device> m_cti;
required_device<pia6821_device> m_pia;
required_device<cassette_image_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<uint8_t> quick_data;
std::vector<u8> 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 )

View File

@ -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<uint8_t> m_p_videoram;
void io_map(address_map &map);
void mem_map(address_map &map);
required_device<cosmac_device> m_maincpu;
required_device<cdp1864_device> m_cti;
required_device<pia6821_device> m_pia;
required_device<cassette_image_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