This commit is contained in:
David Haywood 2015-10-12 22:21:21 +01:00
commit 3b785a1ffe
11 changed files with 596 additions and 25 deletions

View File

@ -1099,6 +1099,21 @@ if (BUSES["SPC1000"]~=null) then
end
---------------------------------------------------
--
--@src/devices/bus/tiki100/exp.h,BUSES["TIKI100"] = true
---------------------------------------------------
if (BUSES["TIKI100"]~=null) then
files {
MAME_DIR .. "src/devices/bus/tiki100/exp.c",
MAME_DIR .. "src/devices/bus/tiki100/exp.h",
MAME_DIR .. "src/devices/bus/tiki100/8088.c",
MAME_DIR .. "src/devices/bus/tiki100/8088.h",
}
end
---------------------------------------------------
--
--@src/devices/bus/tvc/tvc.h,BUSES["TVC"] = true
@ -2018,10 +2033,10 @@ if (BUSES["TI99X"]~=null) then
MAME_DIR .. "src/devices/bus/ti99x/mecmouse.h",
MAME_DIR .. "src/devices/bus/ti99x/ti99defs.h",
MAME_DIR .. "src/devices/bus/ti99x/videowrp.c",
MAME_DIR .. "src/devices/bus/ti99x/videowrp.h",
MAME_DIR .. "src/devices/bus/ti99x/videowrp.h",
}
end
---------------------------------------------------
--
--@src/devices/bus/ti99_peb/peribox.h,BUSES["TI99PEB"] = true

View File

@ -645,6 +645,7 @@ BUSES["SNES_CTRL"] = true
BUSES["SPC1000"] = true
BUSES["TI99PEB"] = true
BUSES["TI99X"] = true
BUSES["TIKI100"] = true
BUSES["TVC"] = true
BUSES["VBOY"] = true
BUSES["VC4000"] = true
@ -1231,9 +1232,9 @@ files {
}
createMESSProjects(_target, _subtarget, "canon")
files {
MAME_DIR .. "src/mame/drivers/cat.c",
MAME_DIR .. "src/mame/drivers/x07.c",
files {
MAME_DIR .. "src/mame/drivers/cat.c",
MAME_DIR .. "src/mame/drivers/x07.c",
MAME_DIR .. "src/mame/drivers/canon_s80.c",
}
@ -1640,8 +1641,8 @@ files {
}
createMESSProjects(_target, _subtarget, "heurikon")
files {
MAME_DIR .. "src/mame/drivers/hk68v10.c",
files {
MAME_DIR .. "src/mame/drivers/hk68v10.c",
}
createMESSProjects(_target, _subtarget, "intel")
@ -1803,8 +1804,8 @@ files {
}
createMESSProjects(_target, _subtarget, "mizar")
files {
MAME_DIR .. "src/mame/drivers/mzr8105.c",
files {
MAME_DIR .. "src/mame/drivers/mzr8105.c",
}
createMESSProjects(_target, _subtarget, "morrow")

View File

@ -0,0 +1,152 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************
TIKI-100 8/16 8088/8087 expansion card emulation
**********************************************************************/
#include "8088.h"
//**************************************************************************
// MACROS/CONSTANTS
//**************************************************************************
#define I8088_TAG "u3"
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
const device_type TIKI100_8088 = &device_creator<tiki100_8088_t>;
//-------------------------------------------------
// ROM( tiki100_8088 )
//-------------------------------------------------
ROM_START( tiki100_8088 )
ROM_REGION( 0x1000, I8088_TAG, 0 )
ROM_LOAD( "boot 1.0.u3", 0x0000, 0x1000, CRC(436974aa) SHA1(837087b3ab982d047e4f15799fef3daa37dd6c01) )
ROM_REGION( 0x100, "u26", 0 )
ROM_LOAD( "53ls140.u26", 0x000, 0x100, CRC(fc5902e1) SHA1(afb9cb54ab6fc449e7544ddb3cbebc3770c4f937) )
ROM_END
//-------------------------------------------------
// rom_region - device-specific ROM region
//-------------------------------------------------
const rom_entry *tiki100_8088_t::device_rom_region() const
{
return ROM_NAME( tiki100_8088 );
}
static ADDRESS_MAP_START( i8088_mem, AS_PROGRAM, 8, tiki100_8088_t )
AM_RANGE(0xff000, 0xfffff) AM_ROM AM_REGION(I8088_TAG, 0)
ADDRESS_MAP_END
static ADDRESS_MAP_START( i8088_io, AS_IO, 8, tiki100_8088_t )
AM_RANGE(0x7f, 0x7f) AM_READWRITE(read, write)
ADDRESS_MAP_END
//-------------------------------------------------
// MACHINE_CONFIG_FRAGMENT( tiki100_8088 )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( tiki100_8088 )
MCFG_CPU_ADD("maincpu", I8088, 4000000)
MCFG_CPU_PROGRAM_MAP(i8088_mem)
MCFG_CPU_IO_MAP(i8088_io)
MACHINE_CONFIG_END
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
//-------------------------------------------------
machine_config_constructor tiki100_8088_t::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( tiki100_8088 );
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// tiki100_8088_t - constructor
//-------------------------------------------------
tiki100_8088_t::tiki100_8088_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, TIKI100_8088, "TIKI-100 8/16", tag, owner, clock, "tiki100_8088", __FILE__),
device_tiki100bus_card_interface(mconfig, *this)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void tiki100_8088_t::device_start()
{
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void tiki100_8088_t::device_reset()
{
}
//-------------------------------------------------
// tiki100bus_iorq_r - I/O read
//-------------------------------------------------
UINT8 tiki100_8088_t::tiki100_iorq_r(address_space &space, offs_t offset, UINT8 data)
{
return data;
}
//-------------------------------------------------
// tiki100bus_iorq_w - I/O write
//-------------------------------------------------
void tiki100_8088_t::tiki100_iorq_w(address_space &space, offs_t offset, UINT8 data)
{
}
//-------------------------------------------------
// read -
//-------------------------------------------------
READ8_MEMBER( tiki100_8088_t::read )
{
return 0xff;
}
//-------------------------------------------------
// write -
//-------------------------------------------------
WRITE8_MEMBER( tiki100_8088_t::write )
{
}

View File

@ -0,0 +1,55 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************
TIKI-100 8/16 8088/8087 expansion card emulation
**********************************************************************/
#pragma once
#ifndef __TIKI100_8088__
#define __TIKI100_8088__
#include "emu.h"
#include "bus/tiki100/exp.h"
#include "cpu/i86/i86.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> tiki100_8088_t
class tiki100_8088_t : public device_t,
public device_tiki100bus_card_interface
{
public:
// construction/destruction
tiki100_8088_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual const rom_entry *device_rom_region() const;
virtual machine_config_constructor device_mconfig_additions() const;
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
// device_tiki100bus_card_interface overrides
virtual UINT8 tiki100_iorq_r(address_space &space, offs_t offset, UINT8 data);
virtual void tiki100_iorq_w(address_space &space, offs_t offset, UINT8 data);
};
// device type definition
extern const device_type TIKI100_8088;
#endif

View File

@ -0,0 +1,177 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************
TIKI-100 expansion bus emulation
**********************************************************************/
#include "exp.h"
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
const device_type TIKI100_BUS = &device_creator<tiki100_bus_t>;
const device_type TIKI100_BUS_SLOT = &device_creator<tiki100_bus_slot_t>;
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// tiki100_bus_slot_t - constructor
//-------------------------------------------------
tiki100_bus_slot_t::tiki100_bus_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, TIKI100_BUS_SLOT, "TIKI-100 expansion bus slot", tag, owner, clock, "tiki100bus_slot", __FILE__),
device_slot_interface(mconfig, *this)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void tiki100_bus_slot_t::device_start()
{
m_bus = machine().device<tiki100_bus_t>(TIKI100_BUS_TAG);
device_tiki100bus_card_interface *dev = dynamic_cast<device_tiki100bus_card_interface *>(get_card_device());
if (dev) m_bus->add_card(dev);
}
//-------------------------------------------------
// tiki100_bus_t - constructor
//-------------------------------------------------
tiki100_bus_t::tiki100_bus_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, TIKI100_BUS, "TIKI-100 expansion bus", tag, owner, clock, "tiki100bus", __FILE__),
m_irq_cb(*this),
m_nmi_cb(*this)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void tiki100_bus_t::device_start()
{
// resolve callbacks
m_irq_cb.resolve_safe();
m_nmi_cb.resolve_safe();
}
//-------------------------------------------------
// add_card - add card
//-------------------------------------------------
void tiki100_bus_t::add_card(device_tiki100bus_card_interface *card)
{
m_device_list.append(*card);
card->m_bus = this;
}
//-------------------------------------------------
// mrq_r - memory read
//-------------------------------------------------
UINT8 tiki100_bus_t::mrq_r(address_space &space, offs_t offset, UINT8 data, bool &mdis)
{
device_tiki100bus_card_interface *entry = m_device_list.first();
while (entry)
{
data &= entry->tiki100_mrq_r(space, offset, data, mdis);
entry = entry->next();
}
return data;
}
//-------------------------------------------------
// mrq_w - memory write
//-------------------------------------------------
WRITE8_MEMBER( tiki100_bus_t::mrq_w )
{
device_tiki100bus_card_interface *entry = m_device_list.first();
while (entry)
{
entry->tiki100_mrq_w(space, offset, data);
entry = entry->next();
}
}
//-------------------------------------------------
// iorq_r - I/O read
//-------------------------------------------------
UINT8 tiki100_bus_t::iorq_r(address_space &space, offs_t offset, UINT8 data)
{
device_tiki100bus_card_interface *entry = m_device_list.first();
while (entry)
{
data &= entry->tiki100_iorq_r(space, offset, data);
entry = entry->next();
}
return data;
}
//-------------------------------------------------
// iorq_w - I/O write
//-------------------------------------------------
WRITE8_MEMBER( tiki100_bus_t::iorq_w )
{
device_tiki100bus_card_interface *entry = m_device_list.first();
while (entry)
{
entry->tiki100_iorq_w(space, offset, data);
entry = entry->next();
}
}
//**************************************************************************
// DEVICE TIKI-100 BUS CARD INTERFACE
//**************************************************************************
//-------------------------------------------------
// device_tiki100bus_card_interface - constructor
//-------------------------------------------------
device_tiki100bus_card_interface::device_tiki100bus_card_interface(const machine_config &mconfig, device_t &device) :
device_slot_card_interface(mconfig, device)
{
m_slot = dynamic_cast<tiki100_bus_slot_t *>(device.owner());
}
//-------------------------------------------------
// SLOT_INTERFACE( tiki100_cards )
//-------------------------------------------------
// slot devices
#include "8088.h"
SLOT_INTERFACE_START( tiki100_cards )
SLOT_INTERFACE("8088", TIKI100_8088)
SLOT_INTERFACE_END

View File

@ -0,0 +1,154 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************
TIKI-100 expansion bus emulation
**********************************************************************
**********************************************************************/
#pragma once
#ifndef __TIKI100_BUS__
#define __TIKI100_BUS__
#include "emu.h"
//**************************************************************************
// CONSTANTS
//**************************************************************************
#define TIKI100_BUS_TAG "tiki100bus"
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_TIKI100_BUS_ADD() \
MCFG_DEVICE_ADD(TIKI100_BUS_TAG, TIKI100_BUS, 0)
#define MCFG_TIKI100_BUS_SLOT_ADD(_tag, _def_slot) \
MCFG_DEVICE_ADD(_tag, TIKI100_BUS_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(tiki100_cards, _def_slot, false)
#define MCFG_TIKI100_BUS_IRQ_CALLBACK(_write) \
devcb = &tiki100_bus_t::set_irq_wr_callback(*device, DEVCB_##_write);
#define MCFG_TIKI100_BUS_NMI_CALLBACK(_write) \
devcb = &tiki100_bus_t::set_nmi_wr_callback(*device, DEVCB_##_write);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> tiki100_bus_slot_t
class tiki100_bus_t;
class tiki100_bus_slot_t : public device_t,
public device_slot_interface
{
public:
// construction/destruction
tiki100_bus_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
private:
// configuration
tiki100_bus_t *m_bus;
};
// device type definition
extern const device_type TIKI100_BUS_SLOT;
class device_tiki100bus_card_interface;
// ======================> tiki100_bus_t
class tiki100_bus_t : public device_t
{
public:
// construction/destruction
tiki100_bus_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
~tiki100_bus_t() { m_device_list.detach_all(); }
template<class _Object> static devcb_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<tiki100_bus_t &>(device).m_irq_cb.set_callback(object); }
template<class _Object> static devcb_base &set_nmi_wr_callback(device_t &device, _Object object) { return downcast<tiki100_bus_t &>(device).m_nmi_cb.set_callback(object); }
void add_card(device_tiki100bus_card_interface *card);
// computer interface
UINT8 mrq_r(address_space &space, offs_t offset, UINT8 data, bool &mdis);
DECLARE_WRITE8_MEMBER( mrq_w );
UINT8 iorq_r(address_space &space, offs_t offset, UINT8 data);
DECLARE_WRITE8_MEMBER( iorq_w );
// peripheral interface
DECLARE_WRITE_LINE_MEMBER( irq_w ) { m_irq_cb(state); }
DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_nmi_cb(state); }
protected:
// device-level overrides
virtual void device_start();
private:
devcb_write_line m_irq_cb;
devcb_write_line m_nmi_cb;
simple_list<device_tiki100bus_card_interface> m_device_list;
};
// device type definition
extern const device_type TIKI100_BUS;
// ======================> device_tiki100bus_card_interface
// class representing interface-specific live tiki100bus card
class device_tiki100bus_card_interface : public device_slot_card_interface
{
friend class tiki100_bus_t;
public:
// construction/destruction
device_tiki100bus_card_interface(const machine_config &mconfig, device_t &device);
virtual ~device_tiki100bus_card_interface() { }
device_tiki100bus_card_interface *next() const { return m_next; }
// memory access
virtual UINT8 tiki100_mrq_r(address_space &space, offs_t offset, UINT8 data, bool &mdis) { mdis = 1; return data; };
virtual void tiki100_mrq_w(address_space &space, offs_t offset, UINT8 data) { };
// I/O access
virtual UINT8 tiki100_iorq_r(address_space &space, offs_t offset, UINT8 data) { return data; };
virtual void tiki100_iorq_w(address_space &space, offs_t offset, UINT8 data) { };
tiki100_bus_t *m_bus;
tiki100_bus_slot_t *m_slot;
device_tiki100bus_card_interface *m_next;
};
SLOT_INTERFACE_EXTERN( tiki100_cards );
#endif

View File

@ -346,16 +346,19 @@ int ata_hle_device::bit_to_mode(UINT16 word)
return -1;
}
// Return the currently selected single word dma mode, -1 if none selected
int ata_hle_device::single_word_dma_mode()
{
return bit_to_mode(m_identify_buffer[62]);
}
// Return the currently selected multi word dma mode, -1 if none selected
int ata_hle_device::multi_word_dma_mode()
{
return bit_to_mode(m_identify_buffer[63]);
}
// Return the currently selected ultra dma mode, -1 if none selected
int ata_hle_device::ultra_dma_mode()
{
return bit_to_mode(m_identify_buffer[88]);
@ -459,7 +462,7 @@ void ata_hle_device::read_buffer_empty()
m_status &= ~IDE_STATUS_DRQ;
if (multi_word_dma_mode() >= 0)
if ((multi_word_dma_mode() >= 0) || (ultra_dma_mode() >= 0))
set_dmarq(CLEAR_LINE);
fill_buffer();
@ -471,7 +474,7 @@ void ata_hle_device::write_buffer_full()
m_status &= ~IDE_STATUS_DRQ;
if (multi_word_dma_mode() >= 0)
if ((multi_word_dma_mode() >= 0) || (ultra_dma_mode() >= 0))
set_dmarq(CLEAR_LINE);
process_buffer();
@ -547,6 +550,10 @@ UINT16 ata_hle_device::read_dma()
{
logerror( "%s: %s dev %d read_dma ignored (!DMARQ)\n", machine().describe_context(), tag(), dev() );
}
else if (!m_dmarq && ultra_dma_mode() >= 0)
{
logerror("%s: %s dev %d read_dma ignored (!DMARQ)\n", machine().describe_context(), tag(), dev());
}
else if (m_status & IDE_STATUS_BSY)
{
logerror( "%s: %s dev %d read_dma ignored (BSY)\n", machine().describe_context(), tag(), dev() );
@ -767,6 +774,10 @@ void ata_hle_device::write_dma( UINT16 data )
{
logerror( "%s: %s dev %d write_dma %04x ignored (!DMARQ)\n", machine().describe_context(), tag(), dev(), data );
}
else if (!m_dmarq && ultra_dma_mode() >= 0)
{
logerror("%s: %s dev %d write_dma %04x ignored (!DMARQ)\n", machine().describe_context(), tag(), dev(), data);
}
else if (m_status & IDE_STATUS_BSY)
{
logerror( "%s: %s dev %d write_dma %04x ignored (BSY)\n", machine().describe_context(), tag(), dev(), data );

View File

@ -149,7 +149,7 @@ void ata_mass_storage_device::ide_build_identify_device()
m_identify_buffer[85] = 0x00; /* 85: command set/feature enabled */
m_identify_buffer[86] = 0x00; /* 86: command set/feature enabled */
m_identify_buffer[87] = 0x00; /* 87: command set/feature default */
m_identify_buffer[88] = 0x00; /* 88: additional DMA modes */
m_identify_buffer[88] = 0x00; /* 88: additional DMA modes (ultra dma) */
m_identify_buffer[89] = 0x00; /* 89: time required for security erase unit completion */
m_identify_buffer[90] = 0x00; /* 90: time required for enhanced security erase unit completion */
m_identify_buffer[91] = 0x00; /* 91: current advanced power management value */

View File

@ -516,6 +516,7 @@ void digitalker_device::digitalker_step()
return;
}
} else if(m_stop_after == 1) {
digitalker_set_intr(1);
m_bpos = 0xffff;
m_zero_count = 81920;
m_stop_after = 2;
@ -525,7 +526,6 @@ void digitalker_device::digitalker_step()
m_repeats = 0;
} else {
m_stop_after = 0;
digitalker_set_intr(1);
}
}

View File

@ -26,18 +26,18 @@
*/
#include "includes/tiki100.h"
#include "bus/rs232/rs232.h"
/* Memory Banking */
READ8_MEMBER( tiki100_state::read )
{
int mdis = 1;
bool mdis = 1;
UINT8 data = m_exp->mrq_r(space, offset, 0xff, mdis);
offs_t prom_addr = mdis << 5 | m_vire << 4 | m_rome << 3 | (offset >> 13);
UINT8 prom = m_prom->base()[prom_addr] ^ 0xff;
UINT8 data = 0xff;
if (prom & ROM0)
{
data = m_rom->base()[offset & 0x3fff];
@ -65,7 +65,7 @@ READ8_MEMBER( tiki100_state::read )
WRITE8_MEMBER( tiki100_state::write )
{
int mdis = 1;
bool mdis = 1;
offs_t prom_addr = mdis << 5 | m_vire << 4 | m_rome << 3 | (offset >> 13);
UINT8 prom = m_prom->base()[prom_addr] ^ 0xff;
@ -80,6 +80,8 @@ WRITE8_MEMBER( tiki100_state::write )
{
m_ram->pointer()[offset] = data;
}
m_exp->mrq_w(space, offset, data);
}
/* Read/Write Handlers */
@ -621,6 +623,13 @@ static MACHINE_CONFIG_START( tiki100, tiki100_state )
MCFG_PALETTE_ADD("palette", 16)
// pixel clock 20.01782 MHz
MCFG_TIKI100_BUS_ADD()
//MCFG_TIKI100_BUS_IRQ_CALLBACK()
//MCFG_TIKI100_BUS_NMI_CALLBACK()
MCFG_TIKI100_BUS_SLOT_ADD("slot1", "8088")
MCFG_TIKI100_BUS_SLOT_ADD("slot2", NULL)
MCFG_TIKI100_BUS_SLOT_ADD("slot3", NULL)
/* devices */
MCFG_Z80DART_ADD(Z80DART_TAG, XTAL_8MHz/4, 0, 0, 0, 0 )
MCFG_Z80DART_OUT_TXDA_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_txd))
@ -706,12 +715,6 @@ ROM_START( tiki100 )
ROM_REGION( 0x100, "u4", 0 )
ROM_LOAD( "53ls140.u4", 0x000, 0x100, CRC(894b756f) SHA1(429e10de0e0e749246895801b18186ff514c12bc) )
ROM_REGION( 0x1000, "8088", 0 )
ROM_LOAD( "boot 1.0.u3", 0x0000, 0x1000, CRC(436974aa) SHA1(837087b3ab982d047e4f15799fef3daa37dd6c01) )
ROM_REGION( 0x100, "8088_proms", 0 )
ROM_LOAD( "53ls140.u26", 0x000, 0x100, CRC(fc5902e1) SHA1(afb9cb54ab6fc449e7544ddb3cbebc3770c4f937) )
ROM_END
/* System Drivers */

View File

@ -5,9 +5,10 @@
#ifndef __TIKI100__
#define __TIKI100__
#include "emu.h"
#include "bus/centronics/ctronics.h"
#include "bus/rs232/rs232.h"
#include "bus/tiki100/exp.h"
#include "cpu/z80/z80.h"
#include "cpu/z80/z80daisy.h"
#include "formats/tiki100_dsk.h"
@ -53,6 +54,7 @@ public:
m_floppy1(*this, FD1797_TAG":1"),
m_cassette(*this, CASSETTE_TAG),
m_centronics(*this, CENTRONICS_TAG),
m_exp(*this, TIKI100_BUS_TAG),
m_rom(*this, Z80_TAG),
m_prom(*this, "u4"),
m_video_ram(*this, "video_ram"),
@ -83,6 +85,7 @@ public:
required_device<floppy_connector> m_floppy1;
required_device<cassette_image_device> m_cassette;
required_device<centronics_device> m_centronics;
required_device<tiki100_bus_t> m_exp;
required_memory_region m_rom;
required_memory_region m_prom;
optional_shared_ptr<UINT8> m_video_ram;