poly880: get rid of x_TAG defines

This commit is contained in:
hap 2021-04-28 14:19:25 +02:00
parent 61eb493d4e
commit f4d1d643ae
3 changed files with 106 additions and 113 deletions

View File

@ -212,7 +212,7 @@ static INPUT_PORTS_START( lc80 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("DAT") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ADR") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')
PORT_START("RESET")
PORT_START("SPECIAL")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RES") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, lc80_state, trigger_reset, 0)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NMI") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, lc80_state, trigger_nmi, 0)
INPUT_PORTS_END
@ -263,21 +263,7 @@ void lc80_state::pio1_pa_w(u8 data)
u8 lc80_state::pio1_pb_r()
{
/*
bit description
PB0 tape input
PB1 tape output
PB2 digit 0
PB3 digit 1
PB4 digit 2
PB5 digit 3
PB6 digit 4
PB7 digit 5
*/
// PB0: tape input
return (m_cassette->input() < +0.0);
}
@ -287,7 +273,7 @@ void lc80_state::pio1_pb_w(u8 data)
bit description
PB0 tape input
PB0 tape input (pio1_pb_r)
PB1 tape output, speaker output, OUT led
PB2 digit 0
PB3 digit 1

View File

@ -4,23 +4,21 @@
Poly-Computer 880
2009-05-12 Skeleton driver.
http://www.kc85-museum.de/books/poly880/index.html
Initially the screen is blank. The CTC causes a NMI, this autoboots the system,
and then the PIO releases the NMI line.
Pasting:
0-F : as is
EXEC : ^
BACK : V
MEM : -
GO : X
0-F : as is
EXEC : ^
BACK : V
MEM : -
GO : X
Test Paste:
-4000^11^22^33^44^55^66^77^88^99^-4000
Now press up-arrow to confirm the data has been entered.
-4000^11^22^33^44^55^66^77^88^99^-4000
Now press up-arrow to confirm the data has been entered.
The SC1 version is a modification that turns it into a chesscomputer.
@ -32,8 +30,9 @@ TODO:
- MCYCL (activate single stepping)
- CYCL (single step)
- layout LEDs (address bus, data bus, command bus, MCYCL)
- RAM expansion
- 32KB RAM expansion @ 0x8000
- who made poly880s? slc1 is very similar, it's by the same person?
- poly880s 7segs flicker
****************************************************************************/
@ -49,61 +48,64 @@ TODO:
#include "speaker.h"
// internal artwork
#include "poly880.lh"
#define SCREEN_TAG "screen"
#define Z80_TAG "i1"
#define Z80CTC_TAG "i4"
#define Z80PIO1_TAG "i2"
#define Z80PIO2_TAG "i3"
namespace {
class poly880_state : public driver_device
{
public:
poly880_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, Z80_TAG)
, m_maincpu(*this, "maincpu")
, m_pio(*this, "pio%u", 0)
, m_ctc(*this, "ctc")
, m_cassette(*this, "cassette")
, m_ki(*this, "KI%u", 1U)
, m_speaker(*this, "speaker")
, m_inputs(*this, "IN.%u", 0U)
, m_digits(*this, "digit%u", 0U)
, m_nmi(false)
{ }
void poly880(machine_config &config);
void poly880s(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
DECLARE_INPUT_CHANGED_MEMBER(trigger_nmi);
protected:
virtual void machine_start() override;
private:
required_device<z80_device> m_maincpu;
required_device_array<z80pio_device, 2> m_pio;
required_device<z80ctc_device> m_ctc;
required_device<cassette_image_device> m_cassette;
required_ioport_array<3> m_ki;
required_device<speaker_sound_device> m_speaker;
required_ioport_array<3> m_inputs;
output_finder<8> m_digits;
virtual void machine_start() override;
void cldig_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER( ctc_z0_w );
DECLARE_WRITE_LINE_MEMBER( ctc_z1_w );
void pio1_pa_w(uint8_t data);
uint8_t pio1_pb_r();
void pio1_pb_w(uint8_t data);
void update_display();
/* display state */
uint8_t m_digit;
uint8_t m_segment;
bool m_nmi;
void poly880_io(address_map &map);
void poly880_mem(address_map &map);
void poly880s_mem(address_map &map);
void cldig_w(u8 data);
DECLARE_WRITE_LINE_MEMBER(ctc_z0_w);
DECLARE_WRITE_LINE_MEMBER(ctc_z1_w);
void pio1_pa_w(u8 data);
u8 pio1_pb_r();
void pio1_pb_w(u8 data);
void update_display();
u8 m_digit = 0;
u8 m_segment = 0;
bool m_nmi = false;
};
/* Read/Write Handlers */
// Read/Write Handlers
void poly880_state::update_display()
{
@ -112,14 +114,14 @@ void poly880_state::update_display()
m_digits[7 - i] = m_segment;
}
void poly880_state::cldig_w(uint8_t data)
void poly880_state::cldig_w(u8 data)
{
m_digit = data;
update_display();
}
/* Memory Maps */
// Memory Maps
void poly880_state::poly880_mem(address_map &map)
{
@ -128,39 +130,38 @@ void poly880_state::poly880_mem(address_map &map)
map(0x2000, 0x23ff).mirror(0x0c00).rom();
map(0x3000, 0x33ff).mirror(0x0c00).rom();
map(0x4000, 0x43ff).mirror(0x3c00).ram();
map(0x8000, 0xffff).bankrw("bank1");
}
void poly880_state::poly880s_mem(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0x4000, 0x43ff).mirror(0x3c00).ram();
map(0x8000, 0xffff).bankrw("bank1");
}
void poly880_state::poly880_io(address_map &map)
{
map.global_mask(0xaf);
map(0x80, 0x83).rw(Z80PIO1_TAG, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
map(0x84, 0x87).rw(Z80PIO2_TAG, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
map(0x88, 0x8b).rw(Z80CTC_TAG, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0x80, 0x83).rw(m_pio[0], FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
map(0x84, 0x87).rw(m_pio[1], FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
map(0x88, 0x8b).rw(m_ctc, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0xa0, 0xa0).mirror(0x0f).w(FUNC(poly880_state::cldig_w));
}
/* Input Ports */
INPUT_CHANGED_MEMBER( poly880_state::trigger_reset )
// Input Ports
INPUT_CHANGED_MEMBER(poly880_state::trigger_reset)
{
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE);
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
}
INPUT_CHANGED_MEMBER( poly880_state::trigger_nmi )
INPUT_CHANGED_MEMBER(poly880_state::trigger_nmi)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? CLEAR_LINE : ASSERT_LINE);
m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? ASSERT_LINE : CLEAR_LINE);
}
static INPUT_PORTS_START( poly880 )
PORT_START("KI1")
PORT_START("IN.0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("GO") PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("EXEC") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_UP) PORT_CHAR('^')
@ -170,7 +171,7 @@ static INPUT_PORTS_START( poly880 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("STEP") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("MEM") PORT_CODE(KEYCODE_M) PORT_CHAR('-')
PORT_START("KI2")
PORT_START("IN.1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3')
@ -180,7 +181,7 @@ static INPUT_PORTS_START( poly880 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
PORT_START("KI3")
PORT_START("IN.2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
@ -191,15 +192,16 @@ static INPUT_PORTS_START( poly880 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
PORT_START("SPECIAL")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RES") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, poly880_state, trigger_reset, 0)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("MON") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, poly880_state, trigger_nmi, 0)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("MCYCL") PORT_CODE(KEYCODE_F3)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CYCL") PORT_CODE(KEYCODE_F4)
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RES") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, poly880_state, trigger_reset, 0)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("MON") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, poly880_state, trigger_nmi, 0)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("MCYCL") PORT_CODE(KEYCODE_F3)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CYCL") PORT_CODE(KEYCODE_F4)
INPUT_PORTS_END
/* Z80-CTC Interface */
WRITE_LINE_MEMBER( poly880_state::ctc_z0_w )
// Z80-CTC Interface
WRITE_LINE_MEMBER(poly880_state::ctc_z0_w)
{
// SEND
if (!m_nmi && state)
@ -209,13 +211,14 @@ WRITE_LINE_MEMBER( poly880_state::ctc_z0_w )
}
}
WRITE_LINE_MEMBER( poly880_state::ctc_z1_w )
WRITE_LINE_MEMBER(poly880_state::ctc_z1_w)
{
}
/* Z80-PIO Interface */
void poly880_state::pio1_pa_w(uint8_t data)
// Z80-PIO Interface
void poly880_state::pio1_pa_w(u8 data)
{
/*
@ -233,11 +236,10 @@ void poly880_state::pio1_pa_w(uint8_t data)
*/
m_segment = bitswap<8>(data, 3, 4, 6, 0, 1, 2, 7, 5);
update_display();
}
uint8_t poly880_state::pio1_pb_r()
u8 poly880_state::pio1_pb_r()
{
/*
@ -254,23 +256,22 @@ uint8_t poly880_state::pio1_pb_r()
*/
uint8_t data = 0x4c | ((m_cassette->input() < +0.0) << 1);
int i;
u8 data = 0x4c | ((m_cassette->input() < +0.0) << 1);
for (i = 0; i < 8; i++)
for (int i = 0; i < 8; i++)
{
if (BIT(m_digit, i))
{
if (BIT(m_ki[0]->read(), i)) data |= 0x10;
if (BIT(m_ki[1]->read(), i)) data |= 0x20;
if (BIT(m_ki[2]->read(), i)) data |= 0x80;
if (BIT(m_inputs[0]->read(), i)) data |= 0x10;
if (BIT(m_inputs[1]->read(), i)) data |= 0x20;
if (BIT(m_inputs[2]->read(), i)) data |= 0x80;
}
}
return data;
}
void poly880_state::pio1_pb_w(uint8_t data)
void poly880_state::pio1_pb_w(u8 data)
{
/*
@ -288,7 +289,8 @@ void poly880_state::pio1_pb_w(uint8_t data)
*/
m_speaker->level_w( BIT(data, 0));
/* tape output */
// tape output
m_cassette->output( BIT(data, 2) ? +1.0 : -1.0);
if (m_nmi && BIT(data, 6))
@ -299,18 +301,18 @@ void poly880_state::pio1_pb_w(uint8_t data)
}
/* Z80 Daisy Chain */
// Z80 Daisy Chain
static const z80_daisy_config poly880_daisy_chain[] =
{
{ Z80PIO1_TAG },
{ Z80PIO2_TAG },
{ Z80CTC_TAG },
{ "pio0" },
{ "pio1" },
{ "ctc" },
{ nullptr }
};
/* Machine Initialization */
// Machine Initialization
void poly880_state::machine_start()
{
@ -321,7 +323,8 @@ void poly880_state::machine_start()
save_item(NAME(m_segment));
}
/* Machine Driver */
// Machine Driver
void poly880_state::poly880(machine_config &config)
{
@ -335,20 +338,20 @@ void poly880_state::poly880(machine_config &config)
config.set_default_layout(layout_poly880);
/* devices */
z80ctc_device& ctc(Z80CTC(config, Z80CTC_TAG, XTAL(7'372'800)/16));
ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
ctc.zc_callback<0>().set(FUNC(poly880_state::ctc_z0_w));
ctc.zc_callback<1>().set(FUNC(poly880_state::ctc_z1_w));
ctc.zc_callback<2>().set(Z80CTC_TAG, FUNC(z80ctc_device::trg3));
Z80CTC(config, m_ctc, XTAL(7'372'800)/16);
m_ctc->intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_ctc->zc_callback<0>().set(FUNC(poly880_state::ctc_z0_w));
m_ctc->zc_callback<1>().set(FUNC(poly880_state::ctc_z1_w));
m_ctc->zc_callback<2>().set(m_ctc, FUNC(z80ctc_device::trg3));
z80pio_device& pio1(Z80PIO(config, Z80PIO1_TAG, XTAL(7'372'800)/16));
pio1.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
pio1.out_pa_callback().set(FUNC(poly880_state::pio1_pa_w));
pio1.in_pb_callback().set(FUNC(poly880_state::pio1_pb_r));
pio1.out_pb_callback().set(FUNC(poly880_state::pio1_pb_w));
Z80PIO(config, m_pio[0], XTAL(7'372'800)/16);
m_pio[0]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_pio[0]->out_pa_callback().set(FUNC(poly880_state::pio1_pa_w));
m_pio[0]->in_pb_callback().set(FUNC(poly880_state::pio1_pb_r));
m_pio[0]->out_pb_callback().set(FUNC(poly880_state::pio1_pb_w));
z80pio_device& pio2(Z80PIO(config, Z80PIO2_TAG, XTAL(7'372'800)/16));
pio2.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
Z80PIO(config, m_pio[1], XTAL(7'372'800)/16);
m_pio[1]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@ -368,20 +371,24 @@ void poly880_state::poly880s(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &poly880_state::poly880s_mem);
}
/* ROMs */
// ROMs
ROM_START( poly880 )
ROM_REGION( 0x10000, Z80_TAG, 0 )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "poly880.i5", 0x0000, 0x0400, CRC(b1c571e8) SHA1(85bfe53d39d6690e79999a1e1240789497e72db0) )
ROM_LOAD( "poly880.i6", 0x1000, 0x0400, CRC(9efddf5b) SHA1(6ffa2f80b2c6f8ec9e22834f739c82f9754272b8) )
ROM_END
ROM_START( poly880s )
ROM_REGION( 0x10000, Z80_TAG, 0 )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "sc1.rom", 0x0000, 0x1000, CRC(26965b23) SHA1(01568911446eda9f05ec136df53da147b7c6f2bf) )
ROM_END
/* System Drivers */
} // anonymous namespace
// System Drivers
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
COMP( 1983, poly880, 0, 0, poly880, poly880, poly880_state, empty_init, "VEB Polytechnik", "Poly-Computer 880", MACHINE_SUPPORTS_SAVE )

View File

@ -58,8 +58,8 @@ HD44780_PIXEL_UPDATE(ymtx81z_state::lcd_pixel_update)
void ymtx81z_state::palette_init(palette_device &palette)
{
palette.set_pen_color(0, rgb_t(0x00, 0x00, 0x00)); // background
palette.set_pen_color(1, rgb_t(0xd8, 0xf0, 0x18)); // lcd pixel on
palette.set_pen_color(2, rgb_t(0xd8/10, 0xf0/10, 0x18/10)); // lcd pixel off
palette.set_pen_color(1, rgb_t(0xd8, 0xff, 0x18)); // lcd pixel on
palette.set_pen_color(2, rgb_t(0xd8/10, 0xff/10, 0x18/10)); // lcd pixel off
}
void ymtx81z_state::machine_start()