mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
Merge branch 'master' of https://github.com/mamedev/mame.git
This commit is contained in:
commit
a7e6dbdef2
@ -1453,6 +1453,7 @@ BUSOBJS += $(BUSOBJ)/scsi/d9060hd.o
|
||||
BUSOBJS += $(BUSOBJ)/scsi/sa1403d.o
|
||||
BUSOBJS += $(BUSOBJ)/scsi/s1410.o
|
||||
BUSOBJS += $(BUSOBJ)/scsi/pc9801_sasi.o
|
||||
BUSOBJS += $(BUSOBJ)/scsi/omti5100.o
|
||||
endif
|
||||
|
||||
#-------------------------------------------------
|
||||
|
92
src/emu/bus/scsi/omti5100.c
Normal file
92
src/emu/bus/scsi/omti5100.c
Normal file
@ -0,0 +1,92 @@
|
||||
#include "omti5100.h"
|
||||
|
||||
#define OMTI_STATUS_NOT_READY 0x04
|
||||
#define OMTI_READ_DATA_BUFFER 0xec
|
||||
#define OMTI_ASSIGN_DISK_PARAM 0xc2
|
||||
|
||||
const device_type OMTI5100 = &device_creator<omti5100_device>;
|
||||
|
||||
#if 0
|
||||
ROM_START( omti5100 )
|
||||
ROM_REGION(0x1000, "mcu", 0) // Hitachi Z8
|
||||
ROM_LOAD("100240-N.7a", 0x0000, 0x1000, CRC(d227d6cb) SHA1(3d6140764d3d043428c941826370ebf1597c63bd))
|
||||
ROM_END
|
||||
|
||||
const rom_entry *omti5100_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( omti5100 );
|
||||
}
|
||||
#endif
|
||||
|
||||
omti5100_device::omti5100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: scsihd_device(mconfig, OMTI5100, "OMTI 5100", tag, owner, clock, "omti5100", __FILE__),
|
||||
m_image0(*this, "image0"),
|
||||
m_image1(*this, "image1")
|
||||
{
|
||||
}
|
||||
|
||||
void omti5100_device::device_start()
|
||||
{
|
||||
m_image = m_image0;
|
||||
scsihle_device::device_start();
|
||||
}
|
||||
|
||||
void omti5100_device::ExecCommand()
|
||||
{
|
||||
harddisk_image_device *image = ((command[1] >> 5) & 1) ? m_image1 : m_image0;
|
||||
switch(command[0])
|
||||
{
|
||||
case OMTI_READ_DATA_BUFFER:
|
||||
m_phase = SCSI_PHASE_DATAIN;
|
||||
m_status_code = SCSI_STATUS_CODE_GOOD;
|
||||
m_transfer_length = 512;
|
||||
break;
|
||||
case OMTI_ASSIGN_DISK_PARAM:
|
||||
m_phase = SCSI_PHASE_DATAOUT;
|
||||
m_status_code = SCSI_STATUS_CODE_GOOD;
|
||||
m_transfer_length = 10;
|
||||
break;
|
||||
default:
|
||||
if(!image)
|
||||
{
|
||||
m_phase = SCSI_PHASE_STATUS;
|
||||
m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION;
|
||||
m_sense_asc = OMTI_STATUS_NOT_READY;
|
||||
m_transfer_length = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
SetDevice(image);
|
||||
scsihd_device::ExecCommand();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void omti5100_device::ReadData( UINT8 *data, int dataLength )
|
||||
{
|
||||
switch( command[ 0 ] )
|
||||
{
|
||||
case OMTI_READ_DATA_BUFFER:
|
||||
data[0] = '5';
|
||||
data[1] = '1';
|
||||
data[2] = '0';
|
||||
data[3] = '0';
|
||||
break;
|
||||
|
||||
default:
|
||||
scsihd_device::ReadData( data, dataLength );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( omti5100 )
|
||||
MCFG_HARDDISK_ADD("image0")
|
||||
MCFG_HARDDISK_ADD("image1")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
machine_config_constructor omti5100_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( omti5100 );
|
||||
}
|
28
src/emu/bus/scsi/omti5100.h
Normal file
28
src/emu/bus/scsi/omti5100.h
Normal file
@ -0,0 +1,28 @@
|
||||
#ifndef OMTI5100_H_
|
||||
#define OMTI5100_H_
|
||||
|
||||
#include "emu.h"
|
||||
#include "scsi.h"
|
||||
#include "scsihd.h"
|
||||
#include "imagedev/harddriv.h"
|
||||
|
||||
class omti5100_device : public scsihd_device
|
||||
{
|
||||
public:
|
||||
omti5100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
//virtual const rom_entry *device_rom_region() const;
|
||||
|
||||
virtual void ExecCommand();
|
||||
virtual void ReadData( UINT8 *data, int dataLength );
|
||||
void device_start();
|
||||
|
||||
private:
|
||||
required_device<harddisk_image_device> m_image0;
|
||||
required_device<harddisk_image_device> m_image1;
|
||||
};
|
||||
|
||||
extern const device_type OMTI5100;
|
||||
|
||||
#endif /* OMTI5100_H_ */
|
@ -1219,15 +1219,6 @@ MACHINEOBJS += $(MACHINEOBJ)/nscsi_hd.o
|
||||
MACHINEOBJS += $(MACHINEOBJ)/nscsi_s1410.o
|
||||
endif
|
||||
|
||||
#-------------------------------------------------
|
||||
#
|
||||
#@src/emu/machine/omti5100.h,MACHINES += OMTI5100
|
||||
#-------------------------------------------------
|
||||
|
||||
ifneq ($(filter OMTI5100,$(MACHINES)),)
|
||||
MACHINEOBJS += $(MACHINEOBJ)/omti5100.o
|
||||
endif
|
||||
|
||||
#-------------------------------------------------
|
||||
#
|
||||
#@src/emu/machine/pcf8593.h,MACHINES += PCF8593
|
||||
|
@ -1,153 +0,0 @@
|
||||
/***************************************************************************
|
||||
|
||||
SMS OMTI 5100
|
||||
|
||||
license: MAME, GPL-2.0+
|
||||
copyright-holders: Dirk Best
|
||||
|
||||
SCSI/SASI Intelligent Data Controller
|
||||
|
||||
Note: - Skeleton device
|
||||
- Supports up to two ST-506/412 hard drives
|
||||
- Z8681 (Z8)
|
||||
- 8 KB RAM
|
||||
- 2 KB Buffer RAM
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "omti5100.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define VERBOSE 1
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type OMTI5100 = &device_creator<omti5100_device>;
|
||||
|
||||
//-------------------------------------------------
|
||||
// rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
ROM_START( omti5100_firmware )
|
||||
ROM_REGION(0x2000, "firmware", 0)
|
||||
ROM_LOAD("1002401-n.7a", 0x0000, 0x2000, CRC(d531e25c) SHA1(22e4762a70841b80e843a5d76175c1fdb6838e18))
|
||||
ROM_END
|
||||
|
||||
const rom_entry *omti5100_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( omti5100_firmware );
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// machine_config_additions - device-specific
|
||||
// machine configurations
|
||||
//-------------------------------------------------
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( omti5100_z8 )
|
||||
// MCFG_CPU_ADD("z8", Z8681, XTAL_20MHz / 3 /* ??? */)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor omti5100_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( omti5100_z8 );
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// omti5100_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
omti5100_device::omti5100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, OMTI5100, "OMTI 5100 SCSI/SASI Controller", tag, owner, clock, "omti5100", __FILE__),
|
||||
// m_cpu(*this, "z8"),
|
||||
m_bsy_w(*this),
|
||||
m_cd_w(*this),
|
||||
m_io_w(*this),
|
||||
m_req_w(*this),
|
||||
m_msg_w(*this)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void omti5100_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_bsy_w.resolve_safe();
|
||||
m_cd_w.resolve_safe();
|
||||
m_io_w.resolve_safe();
|
||||
m_req_w.resolve_safe();
|
||||
m_msg_w.resolve_safe();
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void omti5100_device::device_reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER( omti5100_device::data_r )
|
||||
{
|
||||
if (VERBOSE)
|
||||
logerror("%s: data_r\n", tag());
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( omti5100_device::data_w )
|
||||
{
|
||||
if (VERBOSE)
|
||||
logerror("%s: rst_w: %02x\n", tag(), data);
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( omti5100_device::parity_r )
|
||||
{
|
||||
if (VERBOSE)
|
||||
logerror("%s: parity_r\n", tag());
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( omti5100_device::parity_w )
|
||||
{
|
||||
if (VERBOSE)
|
||||
logerror("%s: parity_w: %d\n", tag(), state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( omti5100_device::rst_w )
|
||||
{
|
||||
if (VERBOSE)
|
||||
logerror("%s: rst_w: %d\n", tag(), state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( omti5100_device::sel_w )
|
||||
{
|
||||
if (VERBOSE)
|
||||
logerror("%s: sel_w: %d\n", tag(), state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( omti5100_device::ack_w )
|
||||
{
|
||||
if (VERBOSE)
|
||||
logerror("%s: ack_w: %d\n", tag(), state);
|
||||
}
|
@ -1,103 +0,0 @@
|
||||
/***************************************************************************
|
||||
|
||||
SMS OMTI 5100
|
||||
|
||||
license: MAME, GPL-2.0+
|
||||
copyright-holders: Dirk Best
|
||||
|
||||
SCSI/SASI Intelligent Data Controller
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __OMTI5100_H__
|
||||
#define __OMTI5100_H__
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z8/z8.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_OMTI5100_ADD(_tag) \
|
||||
MCFG_DEVICE_ADD(_tag, OMTI5100, 0)
|
||||
|
||||
#define MCFG_OMTI5100_BSY_HANDLER(_devcb) \
|
||||
devcb = &omti5100_device::set_bsy_handler(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_OMTI5100_CD_HANDLER(_devcb) \
|
||||
devcb = &omti5100_device::set_cd_handler(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_OMTI5100_IO_HANDLER(_devcb) \
|
||||
devcb = &omti5100_device::set_io_handler(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_OMTI5100_REQ_HANDLER(_devcb) \
|
||||
devcb = &omti5100_device::set_req_handler(*device, DEVCB_##_devcb);
|
||||
|
||||
#define MCFG_OMTI5100_MSG_HANDLER(_devcb) \
|
||||
devcb = &omti5100_device::set_msg_handler(*device, DEVCB_##_devcb);
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> omti5100_device
|
||||
|
||||
class omti5100_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
omti5100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// callbacks
|
||||
template<class _Object> static devcb_base &set_bsy_handler(device_t &device, _Object object)
|
||||
{ return downcast<omti5100_device &>(device).m_bsy_w.set_callback(object); }
|
||||
|
||||
template<class _Object> static devcb_base &set_cd_handler(device_t &device, _Object object)
|
||||
{ return downcast<omti5100_device &>(device).m_cd_w.set_callback(object); }
|
||||
|
||||
template<class _Object> static devcb_base &set_io_handler(device_t &device, _Object object)
|
||||
{ return downcast<omti5100_device &>(device).m_io_w.set_callback(object); }
|
||||
|
||||
template<class _Object> static devcb_base &set_req_handler(device_t &device, _Object object)
|
||||
{ return downcast<omti5100_device &>(device).m_req_w.set_callback(object); }
|
||||
|
||||
template<class _Object> static devcb_base &set_msg_handler(device_t &device, _Object object)
|
||||
{ return downcast<omti5100_device &>(device).m_msg_w.set_callback(object); }
|
||||
|
||||
// data
|
||||
DECLARE_READ8_MEMBER( data_r );
|
||||
DECLARE_WRITE8_MEMBER( data_w );
|
||||
DECLARE_READ_LINE_MEMBER( parity_r );
|
||||
DECLARE_WRITE_LINE_MEMBER( parity_w );
|
||||
|
||||
// control
|
||||
DECLARE_WRITE_LINE_MEMBER( rst_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( sel_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( ack_w );
|
||||
|
||||
protected:
|
||||
// device_t overrides
|
||||
virtual const rom_entry *device_rom_region() const;
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
private:
|
||||
// required_device<z8681_device> m_cpu;
|
||||
|
||||
devcb_write_line m_bsy_w;
|
||||
devcb_write_line m_cd_w;
|
||||
devcb_write_line m_io_w;
|
||||
devcb_write_line m_req_w;
|
||||
devcb_write_line m_msg_w;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
extern const device_type OMTI5100;
|
||||
|
||||
#endif // __OMTI5100_H__
|
@ -44,20 +44,14 @@ void pic8259_device::device_timer(emu_timer &timer, device_timer_id id, int para
|
||||
{
|
||||
logerror("pic8259_timerproc() %s: PIC triggering IRQ #%d\n", tag(), irq);
|
||||
}
|
||||
if (!BIT(m_ocw3, 2))
|
||||
{
|
||||
m_out_int_func(1);
|
||||
}
|
||||
m_out_int_func(1);
|
||||
return;
|
||||
}
|
||||
// if sfnm and in-service don't continue
|
||||
if((m_isr & mask) && m_master && m_cascade && m_nested && (m_slave & mask))
|
||||
break;
|
||||
}
|
||||
if (!BIT(m_ocw3, 2))
|
||||
{
|
||||
m_out_int_func(0);
|
||||
}
|
||||
m_out_int_func(0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -273,7 +273,8 @@ void wd_fdc_t::seek_continue()
|
||||
}
|
||||
|
||||
if(main_state == SEEK && track == data) {
|
||||
sub_state = SEEK_DONE;
|
||||
sub_state = SEEK_WAIT_STABILIZATION_TIME;
|
||||
delay_cycles(t_gen, 30000);
|
||||
}
|
||||
|
||||
if(sub_state == SPINUP_DONE) {
|
||||
|
@ -15,12 +15,13 @@
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/pic8259.h"
|
||||
#include "machine/mc2661.h"
|
||||
#include "machine/omti5100.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "machine/mc146818.h"
|
||||
#include "machine/pcd_kbd.h"
|
||||
#include "sound/speaker.h"
|
||||
#include "video/scn2674.h"
|
||||
#include "formats/pc_dsk.h"
|
||||
#include "bus/scsi/omti5100.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
@ -35,12 +36,14 @@ public:
|
||||
m_pic1(*this, "pic1"),
|
||||
m_pic2(*this, "pic2"),
|
||||
m_speaker(*this, "speaker"),
|
||||
m_sasi(*this, "sasi"),
|
||||
m_fdc(*this, "fdc"),
|
||||
m_rtc(*this, "rtc"),
|
||||
m_crtc(*this, "crtc"),
|
||||
m_palette(*this, "palette"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_scsi(*this, "scsi"),
|
||||
m_scsi_data_out(*this, "scsi_data_out"),
|
||||
m_scsi_data_in(*this, "scsi_data_in"),
|
||||
m_vram(*this, "vram"),
|
||||
m_charram(8*1024)
|
||||
{ }
|
||||
@ -59,35 +62,47 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( led_w );
|
||||
DECLARE_READ8_MEMBER( detect_r );
|
||||
DECLARE_WRITE8_MEMBER( detect_w );
|
||||
DECLARE_READ8_MEMBER( dskctl_r );
|
||||
DECLARE_WRITE8_MEMBER( dskctl_w );
|
||||
DECLARE_READ16_MEMBER( dskctl_r );
|
||||
DECLARE_WRITE16_MEMBER( dskctl_w );
|
||||
DECLARE_READ8_MEMBER( mcu_r );
|
||||
DECLARE_WRITE8_MEMBER( mcu_w );
|
||||
DECLARE_READ8_MEMBER( scsi_r );
|
||||
DECLARE_WRITE8_MEMBER( scsi_w );
|
||||
DECLARE_WRITE8_MEMBER( vram_sw_w );
|
||||
DECLARE_READ16_MEMBER( vram_r );
|
||||
DECLARE_WRITE16_MEMBER( vram_w );
|
||||
SCN2674_DRAW_CHARACTER_MEMBER(display_pixels);
|
||||
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
||||
DECLARE_WRITE_LINE_MEMBER(write_scsi_bsy);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_scsi_cd);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_scsi_io);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_scsi_msg);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_scsi_req);
|
||||
|
||||
protected:
|
||||
// driver_device overrides
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||
|
||||
private:
|
||||
required_device<i80186_cpu_device> m_maincpu;
|
||||
required_device<pic8259_device> m_pic1;
|
||||
required_device<pic8259_device> m_pic2;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
required_device<omti5100_device> m_sasi;
|
||||
required_device<wd2793_t> m_fdc;
|
||||
required_device<mc146818_device> m_rtc;
|
||||
required_device<scn2674_device> m_crtc;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<SCSI_PORT_DEVICE> m_scsi;
|
||||
required_device<output_latch_device> m_scsi_data_out;
|
||||
required_device<input_buffer_device> m_scsi_data_in;
|
||||
required_shared_ptr<UINT16> m_vram;
|
||||
dynamic_buffer m_charram;
|
||||
UINT8 m_stat, m_led, m_dskctl, m_vram_sw;
|
||||
UINT8 m_stat, m_led, m_vram_sw;
|
||||
int m_msg, m_bsy, m_io, m_cd, m_req, m_rst;
|
||||
emu_timer *m_req_hack;
|
||||
UINT16 m_dskctl;
|
||||
};
|
||||
|
||||
|
||||
@ -107,9 +122,18 @@ static const gfx_layout pcd_charlayout =
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8 },
|
||||
8*16
|
||||
};
|
||||
|
||||
void pcd_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
{
|
||||
// TODO: remove this hack
|
||||
if(m_req)
|
||||
m_maincpu->drq0_w(1);
|
||||
}
|
||||
|
||||
void pcd_state::machine_start()
|
||||
{
|
||||
m_gfxdecode->set_gfx(0, global_alloc(gfx_element(machine().device<palette_device>("palette"), pcd_charlayout, m_charram, 0, 1, 0)));
|
||||
m_req_hack = timer_alloc();
|
||||
}
|
||||
|
||||
void pcd_state::machine_reset()
|
||||
@ -118,6 +142,7 @@ void pcd_state::machine_reset()
|
||||
m_led = 0;
|
||||
m_dskctl = 0;
|
||||
m_vram_sw = 1;
|
||||
m_rst = 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER( pcd_state::irq_callback )
|
||||
@ -136,11 +161,6 @@ WRITE_LINE_MEMBER( pcd_state::i186_timer1_w )
|
||||
m_speaker->level_w(state);
|
||||
}
|
||||
|
||||
READ16_MEMBER( pcd_state::vram_r )
|
||||
{
|
||||
return m_vram[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( pcd_state::vram_w )
|
||||
{
|
||||
if(m_vram_sw)
|
||||
@ -216,30 +236,31 @@ WRITE8_MEMBER( pcd_state::mcu_w )
|
||||
{
|
||||
}
|
||||
|
||||
READ8_MEMBER( pcd_state::dskctl_r )
|
||||
READ16_MEMBER( pcd_state::dskctl_r )
|
||||
{
|
||||
return m_dskctl;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( pcd_state::dskctl_w )
|
||||
WRITE16_MEMBER( pcd_state::dskctl_w )
|
||||
{
|
||||
floppy_image_device *floppy0 = m_fdc->subdevice<floppy_connector>("0")->get_device();
|
||||
floppy_image_device *floppy1 = m_fdc->subdevice<floppy_connector>("1")->get_device();
|
||||
|
||||
if((data & 1) && floppy0)
|
||||
COMBINE_DATA(&m_dskctl);
|
||||
|
||||
if((m_dskctl & 1) && floppy0)
|
||||
m_fdc->set_floppy(floppy0);
|
||||
|
||||
if(floppy0)
|
||||
{
|
||||
floppy0->mon_w(!(data & 4));
|
||||
floppy0->ss_w((data & 8) != 0);
|
||||
floppy0->mon_w(!(m_dskctl & 4));
|
||||
floppy0->ss_w((m_dskctl & 8) != 0);
|
||||
}
|
||||
if(floppy1)
|
||||
{
|
||||
floppy1->mon_w(!(data & 4));
|
||||
floppy1->ss_w((data & 8) != 0);
|
||||
floppy1->mon_w(!(m_dskctl & 4));
|
||||
floppy1->ss_w((m_dskctl & 8) != 0);
|
||||
}
|
||||
m_dskctl = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER( pcd_state::led_r )
|
||||
@ -266,23 +287,118 @@ SCN2674_DRAW_CHARACTER_MEMBER(pcd_state::display_pixels)
|
||||
UINT16 data = m_vram[address];
|
||||
data = (data >> 8) | (data << 8);
|
||||
for(int i = 0; i < 16; i++)
|
||||
bitmap.pix32(y, x + i) = m_palette->pen((data & (1 << (16 - i))) ? 1 : 0);
|
||||
bitmap.pix32(y, x + i) = m_palette->pen((data & (1 << (15 - i))) ? 1 : 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
UINT8 data = m_charram[(m_vram[address] & 0xff) * 16 + linecount];
|
||||
for(int i = 0; i < 8; i++)
|
||||
bitmap.pix32(y, x + i) = m_palette->pen((data & (1 << (8 - i))) ? 1 : 0);
|
||||
bitmap.pix32(y, x + i) = m_palette->pen((data & (1 << (7 - i))) ? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(pcd_state::scsi_r)
|
||||
{
|
||||
UINT8 ret = 0;
|
||||
|
||||
switch(offset)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
ret = m_scsi_data_in->read();
|
||||
m_scsi->write_ack(1);
|
||||
if(!offset)
|
||||
m_maincpu->drq0_w(0);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
ret = (m_cd << 7) | (m_req << 5) | (m_bsy << 4);
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(pcd_state::scsi_w)
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
case 0:
|
||||
m_scsi_data_out->write(data);
|
||||
m_scsi->write_ack(1);
|
||||
if(m_cd)
|
||||
{
|
||||
m_maincpu->drq0_w(0);
|
||||
m_req_hack->adjust(attotime::never);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if(data & 4)
|
||||
{
|
||||
m_rst = 1;
|
||||
m_scsi->write_rst(1);
|
||||
break;
|
||||
}
|
||||
if(m_rst)
|
||||
{
|
||||
m_rst = 0;
|
||||
m_scsi->write_rst(0);
|
||||
break;
|
||||
}
|
||||
|
||||
if(!m_bsy)
|
||||
{
|
||||
m_scsi_data_out->write(0);
|
||||
m_scsi->write_sel(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(pcd_state::write_scsi_bsy)
|
||||
{
|
||||
m_bsy = state ? 1 : 0;
|
||||
m_scsi->write_sel(0);
|
||||
}
|
||||
WRITE_LINE_MEMBER(pcd_state::write_scsi_cd)
|
||||
{
|
||||
m_cd = state ? 1 : 0;
|
||||
}
|
||||
WRITE_LINE_MEMBER(pcd_state::write_scsi_io)
|
||||
{
|
||||
m_io = state ? 1 : 0;
|
||||
}
|
||||
WRITE_LINE_MEMBER(pcd_state::write_scsi_msg)
|
||||
{
|
||||
m_msg = state ? 1 : 0;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(pcd_state::write_scsi_req)
|
||||
{
|
||||
m_req = state ? 1 : 0;
|
||||
if(state)
|
||||
{
|
||||
if(!m_cd)
|
||||
{
|
||||
m_maincpu->drq0_w(1);
|
||||
m_req_hack->adjust(attotime::from_msec(10)); // poke the dmac
|
||||
}
|
||||
else if(m_msg)
|
||||
{
|
||||
m_scsi_data_in->read();
|
||||
m_scsi->write_ack(1);
|
||||
}
|
||||
}
|
||||
else
|
||||
m_scsi->write_ack(0);
|
||||
}
|
||||
//**************************************************************************
|
||||
// ADDRESS MAPS
|
||||
//**************************************************************************
|
||||
|
||||
static ADDRESS_MAP_START( pcd_map, AS_PROGRAM, 16, pcd_state )
|
||||
AM_RANGE(0x00000, 0x3ffff) AM_RAM // fixed 256k for now
|
||||
AM_RANGE(0xf0000, 0xf7fff) AM_READWRITE(vram_r, vram_w) AM_SHARE("vram")
|
||||
AM_RANGE(0xf0000, 0xf7fff) AM_READONLY AM_WRITE(vram_w) AM_SHARE("vram")
|
||||
AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("bios", 0)
|
||||
AM_RANGE(0x00000, 0xfffff) AM_READWRITE8(nmi_io_r, nmi_io_w, 0xffff)
|
||||
ADDRESS_MAP_END
|
||||
@ -297,8 +413,8 @@ static ADDRESS_MAP_START( pcd_io, AS_IO, 16, pcd_state )
|
||||
AM_RANGE(0xf840, 0xf841) AM_READWRITE8(led_r, led_w, 0xff00)
|
||||
AM_RANGE(0xf880, 0xf8bf) AM_READWRITE8(rtc_r, rtc_w, 0xffff)
|
||||
AM_RANGE(0xf900, 0xf903) AM_DEVREADWRITE8("fdc", wd2793_t, read, write, 0xffff)
|
||||
AM_RANGE(0xf904, 0xf905) AM_READWRITE8(dskctl_r, dskctl_w, 0x00ff)
|
||||
//AM_RANGE(0xf940, 0xf943) scsi
|
||||
AM_RANGE(0xf904, 0xf905) AM_READWRITE(dskctl_r, dskctl_w)
|
||||
AM_RANGE(0xf940, 0xf943) AM_READWRITE8(scsi_r, scsi_w, 0xffff)
|
||||
AM_RANGE(0xf980, 0xf98f) AM_DEVWRITE8("crtc", scn2674_device, write, 0x00ff)
|
||||
AM_RANGE(0xf980, 0xf98f) AM_DEVREAD8("crtc", scn2674_device, read, 0xff00)
|
||||
AM_RANGE(0xf9a0, 0xf9a1) AM_WRITE8(vram_sw_w, 0x00ff)
|
||||
@ -347,9 +463,6 @@ static MACHINE_CONFIG_START( pcd, pcd_state )
|
||||
// nvram
|
||||
MCFG_NVRAM_ADD_1FILL("nvram")
|
||||
|
||||
// sasi controller
|
||||
MCFG_OMTI5100_ADD("sasi")
|
||||
|
||||
// floppy disk controller
|
||||
MCFG_WD2793x_ADD("fdc", XTAL_16MHz/8/2)
|
||||
MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("pic1", pic8259_device, ir6_w))
|
||||
@ -361,11 +474,15 @@ static MACHINE_CONFIG_START( pcd, pcd_state )
|
||||
|
||||
// usart
|
||||
MCFG_DEVICE_ADD("usart1", MC2661, XTAL_4_9152MHz)
|
||||
MCFG_MC2661_TXEMT_DSCHG_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir2_w))
|
||||
MCFG_MC2661_RXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir3_w))
|
||||
MCFG_MC2661_TXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir3_w))
|
||||
MCFG_DEVICE_ADD("usart2", MC2661, XTAL_4_9152MHz)
|
||||
MCFG_MC2661_TXEMT_DSCHG_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir3_w))
|
||||
MCFG_MC2661_RXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir2_w))
|
||||
//MCFG_MC2661_TXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir2_w)) // this gets stuck high causing the keyboard to not work
|
||||
MCFG_MC2661_TXD_HANDLER(DEVWRITELINE("keyboard", pcd_keyboard_device, t0_w))
|
||||
MCFG_DEVICE_ADD("usart3", MC2661, XTAL_4_9152MHz)
|
||||
MCFG_MC2661_TXEMT_DSCHG_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir4_w))
|
||||
MCFG_MC2661_RXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir4_w))
|
||||
MCFG_MC2661_TXRDY_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir4_w))
|
||||
|
||||
// sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -390,6 +507,21 @@ static MACHINE_CONFIG_START( pcd, pcd_state )
|
||||
// rtc
|
||||
MCFG_MC146818_ADD("rtc", XTAL_32_768kHz)
|
||||
MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic1", pic8259_device, ir7_w))
|
||||
|
||||
MCFG_DEVICE_ADD("keyboard", PCD_KEYBOARD, 0)
|
||||
MCFG_PCD_KEYBOARD_OUT_TX_HANDLER(DEVWRITELINE("usart2", mc2661_device, rx_w))
|
||||
|
||||
MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0)
|
||||
MCFG_SCSI_DATA_INPUT_BUFFER("scsi_data_in")
|
||||
MCFG_SCSI_MSG_HANDLER(WRITELINE(pcd_state, write_scsi_msg))
|
||||
MCFG_SCSI_BSY_HANDLER(WRITELINE(pcd_state, write_scsi_bsy))
|
||||
MCFG_SCSI_IO_HANDLER(WRITELINE(pcd_state, write_scsi_io))
|
||||
MCFG_SCSI_CD_HANDLER(WRITELINE(pcd_state, write_scsi_cd))
|
||||
MCFG_SCSI_REQ_HANDLER(WRITELINE(pcd_state, write_scsi_req))
|
||||
|
||||
MCFG_SCSI_OUTPUT_LATCH_ADD("scsi_data_out", "scsi")
|
||||
MCFG_DEVICE_ADD("scsi_data_in", INPUT_BUFFER, 0)
|
||||
MCFG_SCSIDEV_ADD("scsi:1", "harddisk", OMTI5100, SCSI_ID_0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -411,10 +543,6 @@ ROM_START( pcd )
|
||||
// gfx card (scn2674 with 8741), to be moved
|
||||
ROM_REGION(0x400, "graphics", 0)
|
||||
ROM_LOAD("s36361-d321-v1.bin", 0x000, 0x400, CRC(69baeb2a) SHA1(98b9cd0f38c51b4988a3aed0efcf004bedd115ff))
|
||||
|
||||
// keyboard (8035), to be moved
|
||||
ROM_REGION(0x1000, "keyboard", 0)
|
||||
ROM_LOAD("pcd_keyboard.bin", 0x0000, 0x1000, CRC(d227d6cb) SHA1(3d6140764d3d043428c941826370ebf1597c63bd))
|
||||
ROM_END
|
||||
|
||||
|
||||
|
@ -68,26 +68,26 @@ above expectations. TI continued to manufacture many products for this line.
|
||||
- notes: this one has a dedicated voice actor
|
||||
|
||||
Speak & Spell (France) "La Dictee Magique", 1980
|
||||
- MCU: CD2702*
|
||||
- MCU: CD2702**
|
||||
- TMS51xx: 16KB CD2352
|
||||
|
||||
Speak & Spell (Germany) "Buddy", 1980
|
||||
- MCU: CD2702* (same as French 1980 version)
|
||||
- MCU: CD2702** (same as French 1980 version)
|
||||
- TMS51xx(1/2): 16KB CD2345*
|
||||
- TMS51xx(2/2): 16KB CD2346*
|
||||
|
||||
Speak & Spell (Italy) "Grillo Parlante", 1982
|
||||
- MCU: CD2702* (same as French 1980 version)
|
||||
- TMS51xx: 16KB? CD62190*
|
||||
- MCU: CD2702** (same as French 1980 version)
|
||||
- TMS51xx: 16KB? CD62190**
|
||||
|
||||
Speak & Spell Compact (US), 1981
|
||||
- MCU: CD8011*
|
||||
- MCU: CD8011**
|
||||
- TMS51xx: 16KB CD2354
|
||||
- TMS51xx: 16KB CD2354A (rev.A)
|
||||
- notes: no display, MCU is TMS1100 instead of TMS0270
|
||||
|
||||
Speak & Spell Compact (UK) "Speak & Write", 1981
|
||||
- MCU: CD8011* (same as US 1981 version)
|
||||
- MCU: CD8011** (same as US 1981 version)
|
||||
- TMS51xx: 16KB CD62174 (rev.A)
|
||||
- notes: anecdotes from the developer, the same person working on the original UK version:
|
||||
"We included a pencil and writing pad - it was now about 'writing'.",
|
||||
@ -169,7 +169,7 @@ Speak & Read modules:
|
||||
Touch & Tell:
|
||||
|
||||
Touch & Tell (US), 1981
|
||||
- MCU: CD8012*
|
||||
- MCU: CD8012**
|
||||
- TMS51xx: 4KB CD2610
|
||||
- notes: MCU is TMS1100 instead of TMS0270. CD8010 is seen in some devices
|
||||
too, maybe an earlier version?
|
||||
@ -242,7 +242,7 @@ Language Tutor modules:
|
||||
Other devices:
|
||||
|
||||
Vocaid (US), 1982
|
||||
- MCU: CD8012*
|
||||
- MCU: CD8012**
|
||||
- CD2802: 16KB CD2357
|
||||
- notes: MCU is the same as in Touch & Tell, but instead of a toddler's toy,
|
||||
you get a serious medical aid device for the voice-impaired.
|
||||
|
260
src/mess/machine/pcd_kbd.c
Normal file
260
src/mess/machine/pcd_kbd.c
Normal file
@ -0,0 +1,260 @@
|
||||
#include "pcd_kbd.h"
|
||||
|
||||
const device_type PCD_KEYBOARD = &device_creator<pcd_keyboard_device>;
|
||||
|
||||
ROM_START( pcd_keyboard )
|
||||
ROM_REGION(0x1000, "mcu", 0)
|
||||
ROM_LOAD("pcd_keyboard.bin", 0x0000, 0x1000, CRC(d227d6cb) SHA1(3d6140764d3d043428c941826370ebf1597c63bd))
|
||||
ROM_END
|
||||
|
||||
|
||||
const rom_entry *pcd_keyboard_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( pcd_keyboard );
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( pcd_keyboard_map, AS_PROGRAM, 8, pcd_keyboard_device )
|
||||
AM_RANGE(0x000, 0xfff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( pcd_keyboard_io, AS_IO, 8, pcd_keyboard_device )
|
||||
AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READ(bus_r)
|
||||
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(p1_r, p1_w)
|
||||
AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(t0_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( pcd_keyboard )
|
||||
MCFG_CPU_ADD("mcu", I8035, 5760000*2) // FIXME: the mc2661 baud rate calculation
|
||||
MCFG_CPU_PROGRAM_MAP(pcd_keyboard_map)
|
||||
MCFG_CPU_IO_MAP(pcd_keyboard_io)
|
||||
|
||||
// sound hardware
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
machine_config_constructor pcd_keyboard_device::device_mconfig_additions() const
|
||||
{
|
||||
return MACHINE_CONFIG_NAME( pcd_keyboard );
|
||||
}
|
||||
|
||||
INPUT_PORTS_START( pcd_keyboard )
|
||||
PORT_START("ROW.0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_CHAR('<') PORT_CHAR('>')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("ROW.1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x79")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("ROW.2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') // shifted is U+00A7 section sign
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad " UTF8_PLUSMINUS)
|
||||
|
||||
PORT_START("ROW.3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x7C")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad =") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
|
||||
|
||||
PORT_START("ROW.4")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x7A")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x60")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x1F")
|
||||
|
||||
PORT_START("ROW.5")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x65")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
|
||||
|
||||
PORT_START("ROW.6")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('/')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SEITE")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x06")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x1D")
|
||||
|
||||
PORT_START("ROW.7")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("DRUCK")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x18")
|
||||
|
||||
PORT_START("ROW.8")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR(';')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("L" O_UMLAUT "CHEN") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x05")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("EINF" U_UMLAUT "GEN") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
|
||||
|
||||
PORT_START("ROW.9")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("{") PORT_CODE(KEYCODE_COLON) PORT_CHAR('{') PORT_CHAR(0x00D6)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR(':')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x78")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad +") PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x11")
|
||||
|
||||
PORT_START("ROW.10")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x6A")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("?") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('?') PORT_CHAR('~')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR(0x00DC)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("}") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('}') PORT_CHAR(0x00C4)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('-') PORT_CHAR('_')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("D2")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
|
||||
|
||||
PORT_START("ROW.11")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x6F")
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad ,") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CE")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x70")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad -") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ZEILE")
|
||||
|
||||
PORT_START("ROW.12")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x10")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("HILFE")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x77")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad " UTF8_MULTIPLY) PORT_CODE(KEYCODE_ASTERISK)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RALT)
|
||||
|
||||
PORT_START("ROW.13")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("TABL")
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("UP/LEFT")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x12")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
|
||||
|
||||
PORT_START("ROW.14")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("TABR") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x71")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x04")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad " UTF8_DIVIDE) PORT_CODE(KEYCODE_SLASH_PAD)
|
||||
|
||||
PORT_START("ROW.15")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("'") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('\'') PORT_CHAR('`')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('*')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("#") PORT_CHAR('#') PORT_CHAR('^')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("D1")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x0C")
|
||||
|
||||
PORT_START("ROW.16")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PAUSE") PORT_CODE(KEYCODE_PAUSE)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LOCK") PORT_CODE(KEYCODE_CAPSLOCK)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x3C")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Unknown 0x7E")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
ioport_constructor pcd_keyboard_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME( pcd_keyboard );
|
||||
}
|
||||
|
||||
pcd_keyboard_device::pcd_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, PCD_KEYBOARD, "PC-D Keyboard", tag, owner, clock, "pcd_kbd", __FILE__),
|
||||
m_rows(*this, "ROW"),
|
||||
m_data(0),
|
||||
m_p1(0),
|
||||
m_out_tx_handler(*this)
|
||||
{
|
||||
}
|
||||
|
||||
void pcd_keyboard_device::device_start()
|
||||
{
|
||||
m_out_tx_handler.resolve_safe();
|
||||
m_out_tx_handler(1);
|
||||
}
|
||||
|
||||
READ8_MEMBER( pcd_keyboard_device::bus_r )
|
||||
{
|
||||
if(m_p1 & 0x10)
|
||||
return m_rows[16]->read();
|
||||
return m_rows[m_p1 & 0xf]->read();
|
||||
}
|
||||
|
||||
READ8_MEMBER( pcd_keyboard_device::p1_r )
|
||||
{
|
||||
return m_p1;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( pcd_keyboard_device::p1_w )
|
||||
{
|
||||
m_p1 = data;
|
||||
m_out_tx_handler(BIT(data, 5));
|
||||
}
|
||||
|
||||
READ8_MEMBER( pcd_keyboard_device::t0_r )
|
||||
{
|
||||
return m_t0;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( pcd_keyboard_device::t0_w )
|
||||
{
|
||||
m_t0 = state;
|
||||
}
|
38
src/mess/machine/pcd_kbd.h
Normal file
38
src/mess/machine/pcd_kbd.h
Normal file
@ -0,0 +1,38 @@
|
||||
#ifndef PCD_KBD_H_
|
||||
#define PCD_KBD_H_
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "sound/speaker.h"
|
||||
|
||||
#define MCFG_PCD_KEYBOARD_OUT_TX_HANDLER(_devcb) \
|
||||
devcb = &pcd_keyboard_device::set_out_tx_handler(*device, DEVCB_##_devcb);
|
||||
|
||||
class pcd_keyboard_device : public device_t
|
||||
{
|
||||
public:
|
||||
pcd_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
template<class _Object> static devcb_base &set_out_tx_handler(device_t &device, _Object object) { return downcast<pcd_keyboard_device &>(device).m_out_tx_handler.set_callback(object); }
|
||||
|
||||
virtual const rom_entry *device_rom_region() const;
|
||||
virtual machine_config_constructor device_mconfig_additions() const;
|
||||
virtual ioport_constructor device_input_ports() const;
|
||||
|
||||
void device_start();
|
||||
|
||||
DECLARE_READ8_MEMBER( bus_r );
|
||||
DECLARE_READ8_MEMBER( p1_r );
|
||||
DECLARE_WRITE8_MEMBER( p1_w );
|
||||
DECLARE_READ8_MEMBER( t0_r );
|
||||
DECLARE_WRITE_LINE_MEMBER( t0_w );
|
||||
private:
|
||||
required_ioport_array<17> m_rows;
|
||||
UINT8 m_data, m_p1;
|
||||
bool m_t0;
|
||||
devcb_write_line m_out_tx_handler;
|
||||
};
|
||||
|
||||
extern const device_type PCD_KEYBOARD;
|
||||
|
||||
#endif /* PCD_KBD_H_ */
|
@ -1661,6 +1661,7 @@ $(MESSOBJ)/sinclair.a: \
|
||||
|
||||
$(MESSOBJ)/siemens.a: \
|
||||
$(MESS_DRIVERS)/pcd.o \
|
||||
$(MESS_MACHINE)/pcd_kbd.o \
|
||||
|
||||
$(MESSOBJ)/slicer.a: \
|
||||
$(MESS_DRIVERS)/slicer.o \
|
||||
|
@ -477,24 +477,24 @@ $(OSDOBJ)/%.moc.c: $(OSDSRC)/%.h
|
||||
$(MOC) $(INCPATH) $< -o $@
|
||||
|
||||
OSDOBJS += \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtview.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtwindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtlogwindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtdasmwindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtmainwindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtmemorywindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtbreakpointswindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtdeviceswindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtdeviceinformationwindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtview.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtwindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtlogwindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtdasmwindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtmainwindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtmemorywindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtbreakpointswindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtdeviceswindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debugqtdeviceinformationwindow.moc.o
|
||||
$(OSDOBJ)/modules/debugger/qt/debuggerview.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/windowqt.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/logwindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/dasmwindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/mainwindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/memorywindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/breakpointswindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/deviceswindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/deviceinformationwindow.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/debuggerview.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/windowqt.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/logwindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/dasmwindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/mainwindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/memorywindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/breakpointswindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/deviceswindow.moc.o \
|
||||
$(OSDOBJ)/modules/debugger/qt/deviceinformationwindow.moc.o
|
||||
endif
|
||||
|
||||
#-------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user