(MESS) compclr2: WIP. (nw)

This commit is contained in:
Curt Coder 2014-01-14 18:49:55 +00:00
parent 6c8616c1c7
commit f3813ffd76

View File

@ -8,14 +8,27 @@
*/
/*
TODO:
- keyboard
- cursor
- floppy
- option ROM
*/
#define I8080_TAG "ua2"
#define TMS5501_TAG "uf1"
#define TMS5501_TAG "ud2"
#define CRT5027_TAG "uf9"
#define RS232_TAG "rs232"
#include "emu.h"
#include "cpu/i8085/i8085.h"
#include "imagedev/floppy.h"
#include "machine/ram.h"
#include "machine/serial.h"
#include "machine/tms5501.h"
#include "video/tms9927.h"
@ -25,17 +38,57 @@ public:
compucolor2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, I8080_TAG),
//m_mioc(*this, TMS5501_TAG),
m_mioc(*this, TMS5501_TAG),
m_vtac(*this, CRT5027_TAG),
m_floppy0(*this, TMS5501_TAG":0"),
m_floppy1(*this, TMS5501_TAG":1"),
m_rs232(*this, RS232_TAG),
m_char_rom(*this, "chargen"),
m_video_ram(*this, "videoram")
m_video_ram(*this, "videoram"),
m_y0(*this, "Y0"),
m_y1(*this, "Y1"),
m_y2(*this, "Y2"),
m_y3(*this, "Y3"),
m_y4(*this, "Y4"),
m_y5(*this, "Y5"),
m_y6(*this, "Y6"),
m_y7(*this, "Y7"),
m_y8(*this, "Y8"),
m_y9(*this, "Y9"),
m_y10(*this, "Y10"),
m_y11(*this, "Y11"),
m_y12(*this, "Y12"),
m_y13(*this, "Y13"),
m_y14(*this, "Y14"),
m_y15(*this, "Y15"),
m_y128(*this, "Y128")
{ }
required_device<cpu_device> m_maincpu;
//required_device<tms5501_device> m_mioc;
required_device<tms5501_device> m_mioc;
required_device<crt5027_device> m_vtac;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<rs232_port_device> m_rs232;
required_memory_region m_char_rom;
required_shared_ptr<UINT8> m_video_ram;
required_ioport m_y0;
required_ioport m_y1;
required_ioport m_y2;
required_ioport m_y3;
required_ioport m_y4;
required_ioport m_y5;
required_ioport m_y6;
required_ioport m_y7;
required_ioport m_y8;
required_ioport m_y9;
required_ioport m_y10;
required_ioport m_y11;
required_ioport m_y12;
required_ioport m_y13;
required_ioport m_y14;
required_ioport m_y15;
required_ioport m_y128;
virtual void machine_start();
virtual void palette_init();
@ -44,10 +97,14 @@ public:
DECLARE_READ8_MEMBER( xi_r );
DECLARE_WRITE8_MEMBER( xo_w );
DECLARE_WRITE_LINE_MEMBER( xmt_w );
IRQ_CALLBACK_MEMBER( int_ack );
rgb_t m_palette[8];
UINT8 m_xo;
UINT8 m_xo_kbd;
};
static ADDRESS_MAP_START( compucolor2_mem, AS_PROGRAM, 8, compucolor2_state )
@ -57,14 +114,14 @@ static ADDRESS_MAP_START( compucolor2_mem, AS_PROGRAM, 8, compucolor2_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( compucolor2_io, AS_IO, 8, compucolor2_state )
//AM_RANGE(0x00, 0x0f) AM_MIRROR(0x10) AM_DEVREADWRITE(TMS5501_TAG, tms5501_device, read, write)
//AM_RANGE(0x00, 0x0f) AM_MIRROR(0x10) AM_DEVICE(TMS5501_TAG, tms5501_device, io_map)
AM_RANGE(0x60, 0x6f) AM_MIRROR(0x10) AM_DEVREADWRITE(CRT5027_TAG, crt5027_device, read, write)
AM_RANGE(0x80, 0x9f) AM_MIRROR(0x60) AM_ROM AM_REGION("crt", 0)
AM_RANGE(0x80, 0x9f) AM_MIRROR(0x60) AM_ROM AM_REGION("ua1", 0)
ADDRESS_MAP_END
static INPUT_PORTS_START( compucolor2 )
PORT_START("Y0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=')
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
@ -232,6 +289,13 @@ static INPUT_PORTS_START( compucolor2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
PORT_START("Y128")
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) // COMMAND, CONTROL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) // SHIFT, SHIFT, COMMAND
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) // REPEAT
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
INPUT_PORTS_END
UINT32 compucolor2_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
@ -279,17 +343,109 @@ static struct tms9927_interface crtc_intf =
READ8_MEMBER( compucolor2_state::xi_r )
{
return 0;
UINT8 data = 0xff;
switch (m_xo_kbd & 0x0f)
{
case 0: data &= m_y0->read(); break;
case 1: data &= m_y1->read(); break;
case 2: data &= m_y2->read(); break;
case 3: data &= m_y3->read(); break;
case 4: data &= m_y4->read(); break;
case 5: data &= m_y5->read(); break;
case 6: data &= m_y6->read(); break;
case 7: data &= m_y7->read(); break;
case 8: data &= m_y8->read(); break;
case 9: data &= m_y9->read(); break;
case 10: data &= m_y10->read(); break;
case 11: data &= m_y11->read(); break;
case 12: data &= m_y12->read(); break;
case 13: data &= m_y13->read(); break;
case 14: data &= m_y14->read(); break;
case 15: data &= m_y15->read(); break;
}
if (BIT(m_xo_kbd, 7))
{
data = m_y128->read() | (data & 0x0f);
}
return data;
}
WRITE8_MEMBER( compucolor2_state::xo_w )
{
/*
bit description
0 Keyboard A0, Stepper Phase 0
1 Keyboard A1, Stepper Phase 1
2 Keyboard A2, Stepper Phase 2
3 Keyboard A3, Disk _R/W
4 00=Keyboard/Modem, 01=Internal Drive (CD0), 10=External Drive (CD1)
5 ^
6 LED
7 0=Normal Keyboard, 1=SHIFT/CONTROL/REPEAT/CAPS LOCK
*/
m_xo = data;
floppy_image_device *floppy = NULL;
switch ((m_xo >> 4) & 0x03)
{
case 0:
// keyboard
m_xo_kbd = m_xo;
logerror("keyboard Y%u\n", m_xo_kbd&0x0f);
break;
case 1:
// floppy 0
floppy = m_floppy0->get_device();
logerror("internal floppy");
break;
case 2:
// floppy 1
floppy = m_floppy1->get_device();
logerror("external floppy");
break;
}
if (floppy)
{
logerror(" stp %u rw %u\n", data&0x07,BIT(data,3));
// TODO stepper
// motor
floppy->mon_w(0);
}
}
WRITE_LINE_MEMBER( compucolor2_state::xmt_w )
{
switch ((m_xo >> 4) & 0x03)
{
case 0:
m_rs232->tx(state);
break;
case 1:
// TODO floppy 0
break;
case 2:
// TODO floppy 1
break;
}
}
IRQ_CALLBACK_MEMBER( compucolor2_state::int_ack )
{
return 0;//m_mioc->get_vector();
return 0;// m_mioc->get_vector();
}
void compucolor2_state::machine_start()
@ -324,14 +480,18 @@ static MACHINE_CONFIG_START( compucolor2, compucolor2_state )
MCFG_SCREEN_VISIBLE_AREA(0, 64*8-1, 0, 32*8-1)
MCFG_DEVICE_ADD(CRT5027_TAG, CRT5027, XTAL_17_9712MHz/12)
MCFG_DEVICE_CONFIG(crtc_intf)
//MCFG_TMS9927_VSYN_CALLBACK(DEVWRITELINE(TMS5501_TAG, tms5501_device, sens_w))
// devices
MCFG_DEVICE_ADD(TMS5501_TAG, TMS5501, XTAL_17_9712MHz/9)
/*MCFG_TMS5501_IRQ_CALLBACK(INPUTLINE(I8080_TAG, I8085_INTR_LINE))
MCFG_TMS5501_XI_CALLBACK(READ8(compucolor2_state, xi_r))
MCFG_TMS5501_XO_CALLBACK(WRITE8(compucolor2_state, xo_w))*/
//MCFG_TMS5501_IRQ_CALLBACK(INPUTLINE(I8080_TAG, I8085_INTR_LINE))
//MCFG_TMS5501_XMT_CALLBACK(WRITELINE(compucolor2_state, xmt_w))
//MCFG_TMS5501_XI_CALLBACK(READ8(compucolor2_state, xi_r))
//MCFG_TMS5501_XO_CALLBACK(WRITE8(compucolor2_state, xo_w))
MCFG_FLOPPY_DRIVE_ADD(TMS5501_TAG":0", compucolor2_floppies, "525sssd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(TMS5501_TAG":1", compucolor2_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
//MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE(TMS5501_TAG, tms5501_device, rcv_w))
// internal ram
MCFG_RAM_ADD(RAM_TAG)
@ -353,7 +513,7 @@ ROM_START( compclr2 )
ROM_LOAD( "chargen.uf6", 0x000, 0x400, BAD_DUMP CRC(7eef135a) SHA1(be488ef32f54c6e5f551fb84ab12b881aef72dd9) )
ROM_LOAD( "chargen.uf7", 0x400, 0x400, BAD_DUMP CRC(2bee7cf6) SHA1(808e0fc6f2332b4297de190eafcf84668703e2f4) )
ROM_REGION( 0x20, "crt", 0 )
ROM_REGION( 0x20, "ua1", 0 )
ROM_LOAD( "82s123.ua1", 0x00, 0x20, BAD_DUMP CRC(27ae54bc) SHA1(ccb056fbc1ec2132f2602217af64d77237494afb) ) // I/O PROM
ROM_REGION( 0x20, "proms", 0 )