mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
(nw) merged ccs300 into ccs2810, as fdc is the same.
This commit is contained in:
parent
5d4dc265bc
commit
363773c099
@ -1999,7 +1999,6 @@ files {
|
||||
createMESSProjects(_target, _subtarget, "ccs")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/ccs2810.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/ccs300.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "chessking")
|
||||
|
@ -60,6 +60,28 @@ ToDo:
|
||||
- the one disk that exists fails the test:
|
||||
Incorrect layout on track 0 head 0, expected_size=41666, current_size=68144
|
||||
|
||||
*****************************************************************************
|
||||
|
||||
CCS Model 300 / 400
|
||||
|
||||
2009-12-11 Skeleton driver.
|
||||
|
||||
It requires a floppy disk to boot from.
|
||||
|
||||
Early on, it does a read from port F2. If bit 3 is low, the system becomes
|
||||
a Model 400.
|
||||
|
||||
The CPU board appears to be similar to the 2820 System Processor, which has
|
||||
Z80A CTC, Z80A PIO, Z80A SIO/0 and Z80A DMA peripherals on board. Several
|
||||
features, including IEI/IEO daisy chain priority, are jumper-configurable.
|
||||
|
||||
However, the 2820 has the i/o ports rearranged slightly (even though the
|
||||
manual says it should work!), and no fdc support.
|
||||
|
||||
ToDo:
|
||||
- Using the 2422's FDC, since the ports are the same
|
||||
- As before, the only disks that exist cause an unexpected exit.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
@ -70,6 +92,12 @@ ToDo:
|
||||
#include "machine/ins8250.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "machine/z80daisy.h"
|
||||
#include "machine/z80ctc.h"
|
||||
#include "machine/z80dma.h"
|
||||
#include "machine/z80pio.h"
|
||||
#include "machine/z80sio.h"
|
||||
|
||||
|
||||
class ccs_state : public driver_device
|
||||
{
|
||||
@ -89,51 +117,70 @@ public:
|
||||
, m_ser_en(*this, "SEREN")
|
||||
{ }
|
||||
|
||||
void init_ccs2810();
|
||||
void init_ccs2422();
|
||||
|
||||
void ccs2810(machine_config &config);
|
||||
void ccs2422(machine_config &config);
|
||||
|
||||
protected:
|
||||
u8 port04_r();
|
||||
u8 port34_r();
|
||||
void port04_w(u8 data);
|
||||
void port34_w(u8 data);
|
||||
|
||||
bool m_ss;
|
||||
bool m_dden;
|
||||
bool m_dsize;
|
||||
u8 m_ds;
|
||||
floppy_image_device *m_floppy;
|
||||
|
||||
required_device<z80_device> m_maincpu;
|
||||
optional_device<ram_device> m_ram;
|
||||
required_region_ptr<u8> m_rom;
|
||||
optional_device<ins8250_device> m_ins8250;
|
||||
optional_device<mb8877_device> m_fdc;
|
||||
optional_device<floppy_connector> m_floppy0;
|
||||
|
||||
private:
|
||||
u8 memory_read(offs_t offset);
|
||||
void memory_write(offs_t offset, u8 data);
|
||||
u8 io_read(offs_t offset);
|
||||
void io_write(offs_t offset, u8 data);
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
void machine_start() override;
|
||||
void machine_reset() override;
|
||||
|
||||
u8 port04_r();
|
||||
u8 port34_r();
|
||||
void port04_w(u8 data);
|
||||
void port34_w(u8 data);
|
||||
void port40_w(u8 data);
|
||||
|
||||
void ccs2422_io(address_map &map);
|
||||
void ccs2810_io(address_map &map);
|
||||
void ccs2810_mem(address_map &map);
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<ram_device> m_ram;
|
||||
required_region_ptr<u8> m_rom;
|
||||
required_device<ins8250_device> m_ins8250;
|
||||
optional_device<mb8877_device> m_fdc;
|
||||
optional_device<floppy_connector> m_floppy0;
|
||||
|
||||
required_ioport_array<2> m_jump_addr_sel;
|
||||
required_ioport m_ser_addr_sel;
|
||||
required_ioport m_jump_en;
|
||||
required_ioport m_rom_en;
|
||||
required_ioport m_ser_en;
|
||||
optional_ioport_array<2> m_jump_addr_sel;
|
||||
optional_ioport m_ser_addr_sel;
|
||||
optional_ioport m_jump_en;
|
||||
optional_ioport m_rom_en;
|
||||
optional_ioport m_ser_en;
|
||||
|
||||
u8 m_power_on_status;
|
||||
};
|
||||
|
||||
bool m_ss;
|
||||
bool m_dden;
|
||||
bool m_dsize;
|
||||
u8 m_ds;
|
||||
floppy_image_device *m_floppy;
|
||||
class ccs300_state : public ccs_state
|
||||
{
|
||||
public:
|
||||
ccs300_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: ccs_state(mconfig, type, tag)
|
||||
, m_ram1(*this, "mainram")
|
||||
{ }
|
||||
|
||||
void ccs300(machine_config &config);
|
||||
|
||||
private:
|
||||
void machine_start() override;
|
||||
void machine_reset() override;
|
||||
void ccs300_io(address_map &map);
|
||||
void ccs300_mem(address_map &map);
|
||||
void port40_w(u8 data);
|
||||
bool m_rom_in_map;
|
||||
required_shared_ptr<u8> m_ram1;
|
||||
};
|
||||
|
||||
u8 ccs_state::memory_read(offs_t offset)
|
||||
@ -202,6 +249,28 @@ void ccs_state::ccs2422_io(address_map &map)
|
||||
map(0x40, 0x40).mirror(0xff00).w(FUNC(ccs_state::port40_w));
|
||||
}
|
||||
|
||||
void ccs300_state::ccs300_mem(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xffff).ram().share("mainram");
|
||||
map(0x0000, 0x07ff).lr8(NAME([this] (offs_t offset) { if (m_rom_in_map) return m_rom[offset]; else return m_ram1[offset]; } ));
|
||||
}
|
||||
|
||||
void ccs300_state::ccs300_io(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0xff);
|
||||
map(0x04, 0x04).rw(FUNC(ccs300_state::port04_r), FUNC(ccs300_state::port04_w));
|
||||
map(0x10, 0x13).rw("sio", FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w));
|
||||
map(0x14, 0x17).rw("pio", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
|
||||
map(0x18, 0x1b).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
|
||||
map(0x30, 0x33).rw(m_fdc, FUNC(mb8877_device::read), FUNC(mb8877_device::write));
|
||||
map(0x34, 0x34).rw(FUNC(ccs300_state::port34_r), FUNC(ccs300_state::port34_w));
|
||||
map(0x40, 0x40).w(FUNC(ccs300_state::port40_w));
|
||||
map(0xf0, 0xf0).rw("dma", FUNC(z80dma_device::read), FUNC(z80dma_device::write));
|
||||
map(0xf2, 0xf2); // dip or jumper? only used by CCS-400
|
||||
}
|
||||
|
||||
|
||||
/* Input ports */
|
||||
static INPUT_PORTS_START( ccs2810 )
|
||||
PORT_START("ROMEN")
|
||||
@ -773,6 +842,10 @@ static INPUT_PORTS_START( ccs2810 )
|
||||
PORT_DIPSETTING(0xf8, "F8h-FFh")
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( ccs300 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
//*************************************
|
||||
//
|
||||
// Status / Control ports
|
||||
@ -873,12 +946,16 @@ void ccs_state::port04_w(u8 data)
|
||||
//*************************************
|
||||
void ccs_state::port40_w(u8 data)
|
||||
{
|
||||
//membank("bankr0")->set_entry( (data) ? 1 : 0);
|
||||
//possibly a banking control, like ccs300 ?
|
||||
}
|
||||
|
||||
void ccs_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_power_on_status));
|
||||
save_item(NAME(m_ss));
|
||||
save_item(NAME(m_dden));
|
||||
save_item(NAME(m_dsize));
|
||||
save_item(NAME(m_ds));
|
||||
}
|
||||
|
||||
void ccs_state::machine_reset()
|
||||
@ -887,26 +964,55 @@ void ccs_state::machine_reset()
|
||||
m_power_on_status = m_jump_en->read() | 8;
|
||||
}
|
||||
|
||||
void ccs_state::init_ccs2810()
|
||||
void ccs300_state::port40_w(u8 data)
|
||||
{
|
||||
m_rom_in_map = !BIT(data, 0);
|
||||
}
|
||||
|
||||
void ccs_state::init_ccs2422()
|
||||
void ccs300_state::machine_reset()
|
||||
{
|
||||
m_rom_in_map = true;
|
||||
}
|
||||
|
||||
void ccs300_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_rom_in_map));
|
||||
save_item(NAME(m_ss));
|
||||
save_item(NAME(m_dden));
|
||||
save_item(NAME(m_dsize));
|
||||
save_item(NAME(m_ds));
|
||||
}
|
||||
|
||||
//*************************************
|
||||
//
|
||||
// Disk
|
||||
// Config
|
||||
//
|
||||
//*************************************
|
||||
|
||||
static const z80_daisy_config daisy_chain[] =
|
||||
{
|
||||
{ "ctc" },
|
||||
{ "sio" },
|
||||
{ "pio" },
|
||||
{ "dma" },
|
||||
{ nullptr }
|
||||
};
|
||||
|
||||
static DEVICE_INPUT_DEFAULTS_START( terminal )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 )
|
||||
DEVICE_INPUT_DEFAULTS_END
|
||||
|
||||
static void ccs_floppies(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("8sssd", FLOPPY_8_SSSD);
|
||||
//device.option_add("8sssd", FLOPPY_525_DD);
|
||||
}
|
||||
|
||||
//device.option_add("525dd", FLOPPY_525_DD);
|
||||
|
||||
void ccs_state::ccs2810(machine_config &config)
|
||||
{
|
||||
@ -959,6 +1065,56 @@ void ccs_state::ccs2422(machine_config &config)
|
||||
FLOPPY_CONNECTOR(config, "fdc:0", ccs_floppies, "8sssd", floppy_image_device::default_floppy_formats).enable_sound(true);
|
||||
}
|
||||
|
||||
void ccs300_state::ccs300(machine_config & config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 16_MHz_XTAL / 4);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ccs300_state::ccs300_mem);
|
||||
m_maincpu->set_addrmap(AS_IO, &ccs300_state::ccs300_io);
|
||||
m_maincpu->set_daisy_config(daisy_chain);
|
||||
|
||||
/* Devices */
|
||||
z80sio_device &sio(Z80SIO(config, "sio", 16_MHz_XTAL / 4));
|
||||
sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
sio.out_txda_callback().set("rs232a", FUNC(rs232_port_device::write_txd));
|
||||
sio.out_dtra_callback().set("rs232a", FUNC(rs232_port_device::write_dtr));
|
||||
sio.out_rtsa_callback().set("rs232a", FUNC(rs232_port_device::write_rts));
|
||||
sio.out_txdb_callback().set("rs232b", FUNC(rs232_port_device::write_txd));
|
||||
sio.out_dtrb_callback().set("rs232b", FUNC(rs232_port_device::write_dtr));
|
||||
sio.out_rtsb_callback().set("rs232b", FUNC(rs232_port_device::write_rts));
|
||||
|
||||
rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal"));
|
||||
rs232a.rxd_handler().set("sio", FUNC(z80sio_device::rxa_w));
|
||||
rs232a.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w));
|
||||
rs232a.dcd_handler().set("sio", FUNC(z80sio_device::dcda_w));
|
||||
rs232a.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); // must be exactly here
|
||||
|
||||
rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr));
|
||||
rs232b.rxd_handler().set("sio", FUNC(z80sio_device::rxb_w));
|
||||
rs232b.cts_handler().set("sio", FUNC(z80sio_device::ctsb_w));
|
||||
rs232b.dcd_handler().set("sio", FUNC(z80sio_device::dcdb_w));
|
||||
|
||||
z80ctc_device &ctc(Z80CTC(config, "ctc", 16_MHz_XTAL / 4));
|
||||
ctc.set_clk<0>(16_MHz_XTAL / 8); // 153'846
|
||||
//ctc.set_clk<1>(16_MHz_XTAL / 8); // not used
|
||||
ctc.set_clk<2>(16_MHz_XTAL / 8); // 9'615
|
||||
//ctc.set_clk<3>(16_MHz_XTAL / 8); // 2'000'000 - this causes an IRQ storm, hanging the machine
|
||||
ctc.zc_callback<0>().set("sio", FUNC(z80sio_device::txca_w));
|
||||
ctc.zc_callback<0>().append("sio", FUNC(z80sio_device::rxca_w));
|
||||
ctc.zc_callback<2>().append("sio", FUNC(z80sio_device::rxtxcb_w));
|
||||
ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
|
||||
z80pio_device &pio(Z80PIO(config, "pio", 16_MHz_XTAL / 4));
|
||||
pio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
|
||||
z80dma_device &dma(Z80DMA(config, "dma", 16_MHz_XTAL / 4));
|
||||
dma.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
|
||||
MB8877(config, m_fdc, 16_MHz_XTAL / 8); // UB1793 or MB8877
|
||||
FLOPPY_CONNECTOR(config, "fdc:0", ccs_floppies, "8sssd", floppy_image_device::default_floppy_formats).enable_sound(true);
|
||||
}
|
||||
|
||||
|
||||
/* ROM definition */
|
||||
ROM_START( ccs2810 )
|
||||
ROM_REGION( 0x800, "maincpu", 0 )
|
||||
@ -978,8 +1134,14 @@ ROM_START( ccs2422 )
|
||||
ROM_LOAD_OPTIONAL( "2422.u21", 0x0200, 0x0100, NO_DUMP )
|
||||
ROM_END
|
||||
|
||||
ROM_START( ccs300 )
|
||||
ROM_REGION( 0x0800, "maincpu", 0 )
|
||||
ROM_LOAD( "ccs300.rom", 0x0000, 0x0800, CRC(6cf22e31) SHA1(9aa3327cd8c23d0eab82cb6519891aff13ebe1d0))
|
||||
ROM_END
|
||||
|
||||
/* Driver */
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1980, ccs2810, 0, 0, ccs2810, ccs2810, ccs_state, init_ccs2810, "California Computer Systems", "CCS Model 2810 CPU card", MACHINE_NO_SOUND_HW)
|
||||
COMP( 1980, ccs2422, ccs2810, 0, ccs2422, ccs2810, ccs_state, init_ccs2422, "California Computer Systems", "CCS Model 2422B FDC card", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1980, ccs2810, 0, 0, ccs2810, ccs2810, ccs_state, empty_init, "California Computer Systems", "CCS Model 2810 CPU card", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
|
||||
COMP( 1980, ccs2422, ccs2810, 0, ccs2422, ccs2810, ccs_state, empty_init, "California Computer Systems", "CCS Model 2422B FDC card", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
|
||||
COMP( 1981, ccs300, ccs2810, 0, ccs300, ccs300, ccs300_state, empty_init, "California Computer Systems", "CCS Model 300", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -1,178 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Robbbert
|
||||
/***************************************************************************
|
||||
|
||||
CCS Model 300 / 400
|
||||
|
||||
2009-12-11 Skeleton driver.
|
||||
|
||||
It requires a floppy disk to boot from.
|
||||
|
||||
The bankswitching appears to be the same as CCS's other systems.
|
||||
|
||||
Early on, it does a read from port F2. If bit 3 is low, the system becomes
|
||||
a Model 400.
|
||||
|
||||
The CPU board appears to be similar to the 2820 System Processor, which has
|
||||
Z80A CTC, Z80A PIO, Z80A SIO/0 and Z80A DMA peripherals on board. Several
|
||||
features, including IEI/IEO daisy chain priority, are jumper-configurable.
|
||||
|
||||
However, the 2820 has the i/o ports rearranged slightly (even though the
|
||||
manual says it should work!), and no fdc support.
|
||||
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/z80daisy.h"
|
||||
#include "machine/z80ctc.h"
|
||||
#include "machine/z80dma.h"
|
||||
#include "machine/z80pio.h"
|
||||
#include "machine/z80sio.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
//#include "bus/s100/s100.h"
|
||||
|
||||
class ccs300_state : public driver_device
|
||||
{
|
||||
public:
|
||||
ccs300_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_rom(*this, "maincpu")
|
||||
, m_ram(*this, "mainram")
|
||||
{ }
|
||||
|
||||
void ccs300(machine_config &config);
|
||||
|
||||
private:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
void ccs300_io(address_map &map);
|
||||
void ccs300_mem(address_map &map);
|
||||
void port40_w(u8 data);
|
||||
bool m_rom_in_map;
|
||||
required_device<z80_device> m_maincpu;
|
||||
required_region_ptr<u8> m_rom;
|
||||
required_shared_ptr<u8> m_ram;
|
||||
};
|
||||
|
||||
void ccs300_state::ccs300_mem(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xffff).ram().share("mainram");
|
||||
map(0x0000, 0x07ff).lr8(NAME([this] (offs_t offset) { if (m_rom_in_map) return m_rom[offset]; else return m_ram[offset]; } ));
|
||||
}
|
||||
|
||||
void ccs300_state::ccs300_io(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0xff);
|
||||
map(0x04, 0x04); // fdc related
|
||||
map(0x10, 0x13).rw("sio", FUNC(z80sio_device::ba_cd_r), FUNC(z80sio_device::ba_cd_w));
|
||||
map(0x14, 0x17).rw("pio", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
|
||||
map(0x18, 0x1b).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
|
||||
map(0x30, 0x33); // fdc?
|
||||
map(0x34, 0x34); // motor control?
|
||||
map(0x40, 0x40).w(FUNC(ccs300_state::port40_w));
|
||||
map(0xf0, 0xf0).rw("dma", FUNC(z80dma_device::read), FUNC(z80dma_device::write));
|
||||
map(0xf2, 0xf2); // dip or jumper? only used by CCS-400
|
||||
}
|
||||
|
||||
/* Input ports */
|
||||
static INPUT_PORTS_START( ccs300 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static const z80_daisy_config daisy_chain[] =
|
||||
{
|
||||
{ "ctc" },
|
||||
{ "sio" },
|
||||
{ "pio" },
|
||||
{ "dma" },
|
||||
{ nullptr }
|
||||
};
|
||||
|
||||
//*************************************
|
||||
//
|
||||
// Machine
|
||||
//
|
||||
//*************************************
|
||||
void ccs300_state::port40_w(u8 data)
|
||||
{
|
||||
m_rom_in_map = !BIT(data, 0);
|
||||
}
|
||||
|
||||
void ccs300_state::machine_reset()
|
||||
{
|
||||
m_rom_in_map = true;
|
||||
}
|
||||
|
||||
void ccs300_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_rom_in_map));
|
||||
}
|
||||
|
||||
static DEVICE_INPUT_DEFAULTS_START( terminal )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_9600 )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_9600 )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_7 )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE )
|
||||
DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_2 )
|
||||
DEVICE_INPUT_DEFAULTS_END
|
||||
|
||||
void ccs300_state::ccs300(machine_config & config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 16_MHz_XTAL / 4);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ccs300_state::ccs300_mem);
|
||||
m_maincpu->set_addrmap(AS_IO, &ccs300_state::ccs300_io);
|
||||
m_maincpu->set_daisy_config(daisy_chain);
|
||||
|
||||
/* Devices */
|
||||
z80sio_device &sio(Z80SIO(config, "sio", 16_MHz_XTAL / 4));
|
||||
sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
sio.out_txda_callback().set("rs232a", FUNC(rs232_port_device::write_txd));
|
||||
sio.out_dtra_callback().set("rs232a", FUNC(rs232_port_device::write_dtr));
|
||||
sio.out_rtsa_callback().set("rs232a", FUNC(rs232_port_device::write_rts));
|
||||
sio.out_txdb_callback().set("rs232b", FUNC(rs232_port_device::write_txd));
|
||||
sio.out_dtrb_callback().set("rs232b", FUNC(rs232_port_device::write_dtr));
|
||||
sio.out_rtsb_callback().set("rs232b", FUNC(rs232_port_device::write_rts));
|
||||
|
||||
rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal"));
|
||||
rs232a.rxd_handler().set("sio", FUNC(z80sio_device::rxa_w));
|
||||
rs232a.cts_handler().set("sio", FUNC(z80sio_device::ctsa_w));
|
||||
rs232a.dcd_handler().set("sio", FUNC(z80sio_device::dcda_w));
|
||||
rs232a.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); // must be exactly here
|
||||
|
||||
rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, nullptr));
|
||||
rs232b.rxd_handler().set("sio", FUNC(z80sio_device::rxb_w));
|
||||
rs232b.cts_handler().set("sio", FUNC(z80sio_device::ctsb_w));
|
||||
rs232b.dcd_handler().set("sio", FUNC(z80sio_device::dcdb_w));
|
||||
|
||||
z80ctc_device &ctc(Z80CTC(config, "ctc", 16_MHz_XTAL / 4));
|
||||
ctc.set_clk<0>(16_MHz_XTAL / 8); // 153'846
|
||||
//ctc.set_clk<1>(16_MHz_XTAL / 8); // not used
|
||||
ctc.set_clk<2>(16_MHz_XTAL / 8); // 9'615
|
||||
//ctc.set_clk<3>(16_MHz_XTAL / 8); // 2'000'000 - this causes an IRQ storm, hanging the machine
|
||||
ctc.zc_callback<0>().set("sio", FUNC(z80sio_device::txca_w));
|
||||
ctc.zc_callback<0>().append("sio", FUNC(z80sio_device::rxca_w));
|
||||
ctc.zc_callback<2>().append("sio", FUNC(z80sio_device::rxtxcb_w));
|
||||
ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
|
||||
z80pio_device &pio(Z80PIO(config, "pio", 16_MHz_XTAL / 4));
|
||||
pio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
|
||||
z80dma_device &dma(Z80DMA(config, "dma", 16_MHz_XTAL / 4));
|
||||
dma.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
|
||||
}
|
||||
|
||||
/* ROM definition */
|
||||
ROM_START( ccs300 )
|
||||
ROM_REGION( 0x0800, "maincpu", 0 )
|
||||
ROM_LOAD( "ccs300.rom", 0x0000, 0x0800, CRC(6cf22e31) SHA1(9aa3327cd8c23d0eab82cb6519891aff13ebe1d0))
|
||||
ROM_END
|
||||
|
||||
/* Driver */
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1981, ccs300, ccs2810, 0, ccs300, ccs300, ccs300_state, empty_init, "California Computer Systems", "CCS Model 300", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
|
@ -10048,8 +10048,6 @@ yamato2 // (c) 1983 Sega
|
||||
@source:ccs2810.cpp
|
||||
ccs2422 //
|
||||
ccs2810 //
|
||||
|
||||
@source:ccs300.cpp
|
||||
ccs300 //
|
||||
|
||||
@source:cd100.cpp
|
||||
|
@ -148,7 +148,6 @@ cbm2.cpp
|
||||
cbnt2039.cpp
|
||||
cc40.cpp
|
||||
ccs2810.cpp
|
||||
ccs300.cpp
|
||||
cd100.cpp
|
||||
cd2650.cpp
|
||||
cdc721.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user