mirror of
https://github.com/holub/mame
synced 2025-04-16 05:24:54 +03:00
c80: merged c80h into c80.cpp. Fixed random crash. Removed bogus 9th digit. Documented how to use the cassette.
This commit is contained in:
parent
2775aca725
commit
89ee397622
@ -2252,7 +2252,6 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/ac1.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/bcs3.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/c80.cpp",
|
||||
MAME_DIR .. "src/mame/includes/c80.h",
|
||||
MAME_DIR .. "src/mame/drivers/huebler.cpp",
|
||||
MAME_DIR .. "src/mame/includes/huebler.h",
|
||||
MAME_DIR .. "src/mame/drivers/jtc.cpp",
|
||||
|
@ -50,15 +50,76 @@ or press 0 thru C to choose one directly:
|
||||
When MEM is chosen, enter the address, press UP, enter data, press UP, enter
|
||||
data of next byte, and so on.
|
||||
|
||||
Cassette SAVE: Press F1 1 aaaa DOWN bbbb UP
|
||||
Cassette LOAD: Press F1 2 aaaa DOWN bbbb UP
|
||||
(where aaaa = 4-digit beginning address, bbbb = 4-digit ending address)
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/c80.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/z80daisy.h"
|
||||
#include "machine/z80pio.h"
|
||||
#include "imagedev/cassette.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#include "c80.lh"
|
||||
|
||||
namespace {
|
||||
|
||||
#define Z80_TAG "d2"
|
||||
#define Z80PIO1_TAG "d11"
|
||||
#define Z80PIO2_TAG "d12"
|
||||
// You could use a piezo at 455 kHz, or a crystal 500 to 2500 kHz.
|
||||
// Cassette successfully tested at 455 kHz
|
||||
#define MASTER_CLOCK 455000
|
||||
|
||||
class c80_state : public driver_device
|
||||
{
|
||||
public:
|
||||
c80_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, Z80_TAG)
|
||||
, m_pio1(*this, Z80PIO1_TAG)
|
||||
, m_pio2(*this, Z80PIO2_TAG)
|
||||
, m_cassette(*this, "cassette")
|
||||
, m_row0(*this, "ROW0")
|
||||
, m_row1(*this, "ROW1")
|
||||
, m_row2(*this, "ROW2")
|
||||
, m_digits(*this, "digit%d", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
|
||||
DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
|
||||
void c80(machine_config &config);
|
||||
|
||||
private:
|
||||
required_device<z80_device> m_maincpu;
|
||||
required_device<z80pio_device> m_pio1;
|
||||
required_device<z80pio_device> m_pio2;
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
required_ioport m_row0;
|
||||
required_ioport m_row1;
|
||||
required_ioport m_row2;
|
||||
output_finder<8> m_digits;
|
||||
|
||||
virtual void machine_start() override;
|
||||
|
||||
uint8_t pio1_pa_r();
|
||||
void pio1_pa_w(uint8_t data);
|
||||
void pio1_pb_w(uint8_t data);
|
||||
DECLARE_WRITE_LINE_MEMBER( pio1_brdy_w );
|
||||
|
||||
/* keyboard state */
|
||||
u8 m_keylatch = 0;
|
||||
|
||||
/* display state */
|
||||
u8 m_digit = 0;
|
||||
bool m_pio1_a5 = false;
|
||||
u8 m_pio1_brdy = 0;
|
||||
void c80_io(address_map &map);
|
||||
void c80_mem(address_map &map);
|
||||
};
|
||||
|
||||
|
||||
/* Memory Maps */
|
||||
|
||||
@ -72,7 +133,7 @@ void c80_state::c80_mem(address_map &map)
|
||||
void c80_state::c80_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x7c, 0x7f).rw(Z80PIO2_TAG, FUNC(z80pio_device::read), FUNC(z80pio_device::write));
|
||||
map(0x7c, 0x7f).rw(m_pio2, FUNC(z80pio_device::read), FUNC(z80pio_device::write));
|
||||
map(0xbc, 0xbf).rw(m_pio1, FUNC(z80pio_device::read), FUNC(z80pio_device::write));
|
||||
}
|
||||
|
||||
@ -143,11 +204,9 @@ uint8_t c80_state::pio1_pa_r()
|
||||
|
||||
*/
|
||||
|
||||
uint8_t data = !m_pio1_brdy << 4 | 0x07;
|
||||
uint8_t data = m_pio1_brdy | 0x07;
|
||||
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (u8 i = 0; i < 8; i++)
|
||||
{
|
||||
if (!BIT(m_keylatch, i))
|
||||
{
|
||||
@ -206,7 +265,7 @@ void c80_state::pio1_pb_w(uint8_t data)
|
||||
|
||||
*/
|
||||
|
||||
if (!m_pio1_a5)
|
||||
if (!m_pio1_a5 && (m_digit < 8))
|
||||
{
|
||||
m_digits[m_digit] = data;
|
||||
}
|
||||
@ -216,7 +275,7 @@ void c80_state::pio1_pb_w(uint8_t data)
|
||||
|
||||
WRITE_LINE_MEMBER( c80_state::pio1_brdy_w )
|
||||
{
|
||||
m_pio1_brdy = state;
|
||||
m_pio1_brdy = state ? 0 : 0x10;
|
||||
|
||||
if (state)
|
||||
{
|
||||
@ -255,34 +314,31 @@ void c80_state::machine_start()
|
||||
|
||||
void c80_state::c80(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 2500000); /* U880D */
|
||||
// CPU
|
||||
Z80(config, m_maincpu, MASTER_CLOCK); // U880D
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &c80_state::c80_mem);
|
||||
m_maincpu->set_addrmap(AS_IO, &c80_state::c80_io);
|
||||
m_maincpu->set_daisy_config(c80_daisy_chain);
|
||||
|
||||
/* video hardware */
|
||||
// video
|
||||
config.set_default_layout(layout_c80);
|
||||
|
||||
/* devices */
|
||||
Z80PIO(config, m_pio1, 2500000);
|
||||
// devices
|
||||
Z80PIO(config, m_pio1, MASTER_CLOCK); // U855D
|
||||
m_pio1->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
m_pio1->in_pa_callback().set(FUNC(c80_state::pio1_pa_r));
|
||||
m_pio1->out_pa_callback().set(FUNC(c80_state::pio1_pa_w));
|
||||
m_pio1->out_pb_callback().set(FUNC(c80_state::pio1_pb_w));
|
||||
m_pio1->out_brdy_callback().set(FUNC(c80_state::pio1_brdy_w));
|
||||
|
||||
z80pio_device& pio2(Z80PIO(config, Z80PIO2_TAG, XTAL(2500000)));
|
||||
pio2.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
Z80PIO(config, m_pio2, MASTER_CLOCK); // U855D
|
||||
m_pio2->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
|
||||
// cassette
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
CASSETTE(config, m_cassette);
|
||||
m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
|
||||
m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
|
||||
|
||||
/* internal ram */
|
||||
RAM(config, RAM_TAG).set_default_size("1K");
|
||||
}
|
||||
|
||||
/* ROMs */
|
||||
@ -292,8 +348,7 @@ ROM_START( c80 )
|
||||
ROM_LOAD( "c80.d3", 0x0000, 0x0400, CRC(ad2b3296) SHA1(14f72cb73a4068b7a5d763cc0e254639c251ce2e) )
|
||||
ROM_END
|
||||
|
||||
|
||||
/* System Drivers */
|
||||
} // Anonymous namespace
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1986, c80, 0, 0, c80, c80, c80_state, empty_init, "Joachim Czepa", "C-80", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -1,63 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
|
||||
#ifndef MAME_INCLUDES_C80_H
|
||||
#define MAME_INCLUDES_C80_H
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/z80daisy.h"
|
||||
#include "machine/z80pio.h"
|
||||
#include "imagedev/cassette.h"
|
||||
#include "machine/ram.h"
|
||||
|
||||
#define SCREEN_TAG "screen"
|
||||
#define Z80_TAG "d2"
|
||||
#define Z80PIO1_TAG "d11"
|
||||
#define Z80PIO2_TAG "d12"
|
||||
|
||||
class c80_state : public driver_device
|
||||
{
|
||||
public:
|
||||
c80_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, Z80_TAG)
|
||||
, m_pio1(*this, Z80PIO1_TAG)
|
||||
, m_cassette(*this, "cassette")
|
||||
, m_row0(*this, "ROW0")
|
||||
, m_row1(*this, "ROW1")
|
||||
, m_row2(*this, "ROW2")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
|
||||
DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
|
||||
void c80(machine_config &config);
|
||||
|
||||
private:
|
||||
required_device<z80_device> m_maincpu;
|
||||
required_device<z80pio_device> m_pio1;
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
required_ioport m_row0;
|
||||
required_ioport m_row1;
|
||||
required_ioport m_row2;
|
||||
output_finder<9> m_digits;
|
||||
|
||||
virtual void machine_start() override;
|
||||
|
||||
uint8_t pio1_pa_r();
|
||||
void pio1_pa_w(uint8_t data);
|
||||
void pio1_pb_w(uint8_t data);
|
||||
DECLARE_WRITE_LINE_MEMBER( pio1_brdy_w );
|
||||
|
||||
/* keyboard state */
|
||||
int m_keylatch = 0;
|
||||
|
||||
/* display state */
|
||||
int m_digit = 0;
|
||||
int m_pio1_a5 = 0;
|
||||
int m_pio1_brdy = 0;
|
||||
void c80_io(address_map &map);
|
||||
void c80_mem(address_map &map);
|
||||
};
|
||||
|
||||
#endif
|
@ -10,33 +10,32 @@ license:CC0
|
||||
</element>
|
||||
|
||||
<view name="Default Layout">
|
||||
<bounds left="5" top="5" right="159" bottom="39" />
|
||||
|
||||
<!-- Led address display -->
|
||||
<element name="digit0" ref="digit">
|
||||
<bounds x="0" y="0" width="18" height="24" />
|
||||
<bounds x="10" y="10" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit1" ref="digit">
|
||||
<bounds x="18" y="0" width="18" height="24" />
|
||||
<bounds x="28" y="10" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit2" ref="digit">
|
||||
<bounds x="36" y="0" width="18" height="24" />
|
||||
<bounds x="46" y="10" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit3" ref="digit">
|
||||
<bounds x="54" y="0" width="18" height="24" />
|
||||
<bounds x="64" y="10" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit4" ref="digit">
|
||||
<bounds x="82" y="10" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit5" ref="digit">
|
||||
<bounds x="100" y="10" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit6" ref="digit">
|
||||
<bounds x="118" y="10" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit7" ref="digit">
|
||||
<bounds x="136" y="10" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit4" ref="digit">
|
||||
<bounds x="72" y="0" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit5" ref="digit">
|
||||
<bounds x="90" y="0" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit6" ref="digit">
|
||||
<bounds x="108" y="0" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit7" ref="digit">
|
||||
<bounds x="126" y="0" width="18" height="24" />
|
||||
</element>
|
||||
<element name="digit8" ref="digit">
|
||||
<bounds x="144" y="0" width="18" height="24" />
|
||||
</element>
|
||||
</view>
|
||||
</mamelayout>
|
||||
|
Loading…
Reference in New Issue
Block a user