mirror of
https://github.com/holub/mame
synced 2025-06-01 02:21:48 +03:00
Added PC-9801-86 device for PC-9801 (OPNA)
This commit is contained in:
parent
4a807320a9
commit
2f5449614c
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -7175,8 +7175,10 @@ src/mess/machine/pc1512kb.c svneol=native#text/plain
|
|||||||
src/mess/machine/pc1512kb.h svneol=native#text/plain
|
src/mess/machine/pc1512kb.h svneol=native#text/plain
|
||||||
src/mess/machine/pc9801_26.c svneol=native#text/plain
|
src/mess/machine/pc9801_26.c svneol=native#text/plain
|
||||||
src/mess/machine/pc9801_26.h svneol=native#text/plain
|
src/mess/machine/pc9801_26.h svneol=native#text/plain
|
||||||
src/mess/machine/pc9801_slot.c svneol=native#text/plain
|
src/mess/machine/pc9801_86.c svneol=native#text/plain
|
||||||
src/mess/machine/pc9801_slot.h svneol=native#text/plain
|
src/mess/machine/pc9801_86.h svneol=native#text/plain
|
||||||
|
src/mess/machine/pc9801_cbus.c svneol=native#text/plain
|
||||||
|
src/mess/machine/pc9801_cbus.h svneol=native#text/plain
|
||||||
src/mess/machine/pc_fdc.c svneol=native#text/plain
|
src/mess/machine/pc_fdc.c svneol=native#text/plain
|
||||||
src/mess/machine/pc_fdc.h svneol=native#text/plain
|
src/mess/machine/pc_fdc.h svneol=native#text/plain
|
||||||
src/mess/machine/pc_joy.c svneol=native#text/plain
|
src/mess/machine/pc_joy.c svneol=native#text/plain
|
||||||
|
@ -328,7 +328,8 @@
|
|||||||
#include "machine/ram.h"
|
#include "machine/ram.h"
|
||||||
#include "formats/pc98fdi_dsk.h"
|
#include "formats/pc98fdi_dsk.h"
|
||||||
#include "machine/pc9801_26.h"
|
#include "machine/pc9801_26.h"
|
||||||
#include "machine/pc9801_slot.h"
|
#include "machine/pc9801_86.h"
|
||||||
|
#include "machine/pc9801_cbus.h"
|
||||||
|
|
||||||
|
|
||||||
#define UPD1990A_TAG "upd1990a"
|
#define UPD1990A_TAG "upd1990a"
|
||||||
@ -507,8 +508,8 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER(pc9821_vram256_w);
|
DECLARE_WRITE8_MEMBER(pc9821_vram256_w);
|
||||||
DECLARE_READ8_MEMBER(opn_porta_r);
|
DECLARE_READ8_MEMBER(opn_porta_r);
|
||||||
DECLARE_WRITE8_MEMBER(opn_portb_w);
|
DECLARE_WRITE8_MEMBER(opn_portb_w);
|
||||||
DECLARE_READ8_MEMBER(pc9801_ext_opna_r);
|
// DECLARE_READ8_MEMBER(pc9801_ext_opna_r);
|
||||||
DECLARE_WRITE8_MEMBER(pc9801_ext_opna_w);
|
// DECLARE_WRITE8_MEMBER(pc9801_ext_opna_w);
|
||||||
DECLARE_WRITE8_MEMBER(pc9801rs_nmi_w);
|
DECLARE_WRITE8_MEMBER(pc9801rs_nmi_w);
|
||||||
DECLARE_READ8_MEMBER(pc9801rs_midi_r);
|
DECLARE_READ8_MEMBER(pc9801rs_midi_r);
|
||||||
|
|
||||||
@ -2028,29 +2029,6 @@ WRITE8_MEMBER( pc9801_state::pc9801rs_mouse_freq_w )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER( pc9801_state::pc9801_ext_opna_r )
|
|
||||||
{
|
|
||||||
if(offset == 0)
|
|
||||||
{
|
|
||||||
printf("OPNA EXT read ID [%02x]\n",offset);
|
|
||||||
return 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("OPNA EXT read unk [%02x]\n",offset);
|
|
||||||
return 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER( pc9801_state::pc9801_ext_opna_w )
|
|
||||||
{
|
|
||||||
if(offset == 0)
|
|
||||||
{
|
|
||||||
printf("OPNA EXT write mask %02x -> [%02x]\n",data,offset);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("OPNA EXT write unk %02x -> [%02x]\n",data,offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WRITE8_MEMBER( pc9801_state::pc9801rs_nmi_w )
|
WRITE8_MEMBER( pc9801_state::pc9801rs_nmi_w )
|
||||||
{
|
{
|
||||||
@ -2094,7 +2072,7 @@ static ADDRESS_MAP_START( pc9801rs_io, AS_IO, 32, pc9801_state )
|
|||||||
AM_RANGE(0x0438, 0x043b) AM_READWRITE8(pc9801rs_access_ctrl_r,pc9801rs_access_ctrl_w,0xffffffff)
|
AM_RANGE(0x0438, 0x043b) AM_READWRITE8(pc9801rs_access_ctrl_r,pc9801rs_access_ctrl_w,0xffffffff)
|
||||||
AM_RANGE(0x043c, 0x043f) AM_WRITE8(pc9801rs_bank_w, 0xffffffff) //ROM/RAM bank
|
AM_RANGE(0x043c, 0x043f) AM_WRITE8(pc9801rs_bank_w, 0xffffffff) //ROM/RAM bank
|
||||||
AM_RANGE(0x7fd8, 0x7fdf) AM_READWRITE8(pc9801_mouse_r, pc9801_mouse_w, 0xffffffff) // <undefined> / mouse ppi8255 ports
|
AM_RANGE(0x7fd8, 0x7fdf) AM_READWRITE8(pc9801_mouse_r, pc9801_mouse_w, 0xffffffff) // <undefined> / mouse ppi8255 ports
|
||||||
AM_RANGE(0xa460, 0xa463) AM_READWRITE8(pc9801_ext_opna_r, pc9801_ext_opna_w, 0xffffffff)
|
// AM_RANGE(0xa460, 0xa463) AM_READWRITE8(pc9801_ext_opna_r, pc9801_ext_opna_w, 0xffffffff)
|
||||||
AM_RANGE(0xbfd8, 0xbfdf) AM_WRITE8(pc9801rs_mouse_freq_w, 0xffffffff)
|
AM_RANGE(0xbfd8, 0xbfdf) AM_WRITE8(pc9801rs_mouse_freq_w, 0xffffffff)
|
||||||
AM_RANGE(0xe0d0, 0xe0d3) AM_READ8(pc9801rs_midi_r, 0xffffffff)
|
AM_RANGE(0xe0d0, 0xe0d3) AM_READ8(pc9801rs_midi_r, 0xffffffff)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
@ -2157,7 +2135,7 @@ static ADDRESS_MAP_START( pc9801ux_io, AS_IO, 16, pc9801_state )
|
|||||||
AM_RANGE(0x0438, 0x043b) AM_READWRITE8(pc9801rs_access_ctrl_r,pc9801rs_access_ctrl_w,0xffff)
|
AM_RANGE(0x0438, 0x043b) AM_READWRITE8(pc9801rs_access_ctrl_r,pc9801rs_access_ctrl_w,0xffff)
|
||||||
AM_RANGE(0x043c, 0x043f) AM_WRITE8(pc9801rs_bank_w, 0xffff) //ROM/RAM bank
|
AM_RANGE(0x043c, 0x043f) AM_WRITE8(pc9801rs_bank_w, 0xffff) //ROM/RAM bank
|
||||||
AM_RANGE(0x7fd8, 0x7fdf) AM_READWRITE8(pc9801_mouse_r, pc9801_mouse_w, 0xffff) // <undefined> / mouse ppi8255 ports
|
AM_RANGE(0x7fd8, 0x7fdf) AM_READWRITE8(pc9801_mouse_r, pc9801_mouse_w, 0xffff) // <undefined> / mouse ppi8255 ports
|
||||||
AM_RANGE(0xa460, 0xa463) AM_READWRITE8(pc9801_ext_opna_r, pc9801_ext_opna_w, 0xffff)
|
// AM_RANGE(0xa460, 0xa463) AM_READWRITE8(pc9801_ext_opna_r, pc9801_ext_opna_w, 0xffff)
|
||||||
|
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -2497,7 +2475,7 @@ static ADDRESS_MAP_START( pc9821_io, AS_IO, 32, pc9801_state )
|
|||||||
AM_RANGE(0x8d1c, 0x8d1f) AM_READWRITE8(sdip_9_r,sdip_9_w,0xffffffff)
|
AM_RANGE(0x8d1c, 0x8d1f) AM_READWRITE8(sdip_9_r,sdip_9_w,0xffffffff)
|
||||||
AM_RANGE(0x8e1c, 0x8e1f) AM_READWRITE8(sdip_a_r,sdip_a_w,0xffffffff)
|
AM_RANGE(0x8e1c, 0x8e1f) AM_READWRITE8(sdip_a_r,sdip_a_w,0xffffffff)
|
||||||
AM_RANGE(0x8f1c, 0x8f1f) AM_READWRITE8(sdip_b_r,sdip_b_w,0xffffffff)
|
AM_RANGE(0x8f1c, 0x8f1f) AM_READWRITE8(sdip_b_r,sdip_b_w,0xffffffff)
|
||||||
AM_RANGE(0xa460, 0xa463) AM_READWRITE8(pc9801_ext_opna_r, pc9801_ext_opna_w, 0xffffffff)
|
// AM_RANGE(0xa460, 0xa463) AM_READWRITE8(pc9801_ext_opna_r, pc9801_ext_opna_w, 0xffffffff)
|
||||||
// AM_RANGE(0xa460, 0xa46f) cs4231 PCM extended port / <undefined>
|
// AM_RANGE(0xa460, 0xa46f) cs4231 PCM extended port / <undefined>
|
||||||
// AM_RANGE(0xbfdb, 0xbfdb) mouse timing port
|
// AM_RANGE(0xbfdb, 0xbfdb) mouse timing port
|
||||||
// AM_RANGE(0xc0d0, 0xc0d3) MIDI port, option 0 / <undefined>
|
// AM_RANGE(0xc0d0, 0xc0d3) MIDI port, option 0 / <undefined>
|
||||||
@ -3298,9 +3276,10 @@ static SLOT_INTERFACE_START( pc9801_floppies )
|
|||||||
SLOT_INTERFACE( "525hd", FLOPPY_525_HD )
|
SLOT_INTERFACE( "525hd", FLOPPY_525_HD )
|
||||||
SLOT_INTERFACE_END
|
SLOT_INTERFACE_END
|
||||||
|
|
||||||
static SLOT_INTERFACE_START( pc9801_sound )
|
static SLOT_INTERFACE_START( pc9801_cbus )
|
||||||
// PC-9801-14
|
// PC-9801-14
|
||||||
SLOT_INTERFACE( "pc9801_26", PC9801_26 )
|
SLOT_INTERFACE( "pc9801_26", PC9801_26 )
|
||||||
|
SLOT_INTERFACE( "pc9801_86", PC9801_86 )
|
||||||
// PC-9801-86
|
// PC-9801-86
|
||||||
// PC-9801-26 + PC-9801-86 (?)
|
// PC-9801-26 + PC-9801-86 (?)
|
||||||
// PC-9801-86 + Chibi-Oto
|
// PC-9801-86 + Chibi-Oto
|
||||||
@ -3609,6 +3588,10 @@ static MACHINE_CONFIG_FRAGMENT( pc9801_mouse )
|
|||||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("mouse_timer", pc9801_state, mouse_irq_cb, attotime::from_hz(120))
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("mouse_timer", pc9801_state, mouse_irq_cb, attotime::from_hz(120))
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
static MACHINE_CONFIG_FRAGMENT( pc9801_cbus )
|
||||||
|
MCFG_PC9801CBUS_SLOT_ADD("cbus0", pc9801_cbus, NULL, NULL)
|
||||||
|
// TODO: six max slots
|
||||||
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( pc9801, pc9801_state )
|
static MACHINE_CONFIG_START( pc9801, pc9801_state )
|
||||||
MCFG_CPU_ADD("maincpu", I8086, 5000000) //unknown clock
|
MCFG_CPU_ADD("maincpu", I8086, 5000000) //unknown clock
|
||||||
@ -3627,6 +3610,7 @@ static MACHINE_CONFIG_START( pc9801, pc9801_state )
|
|||||||
MCFG_I8255_ADD( "ppi8255_prn", ppi_printer_intf )
|
MCFG_I8255_ADD( "ppi8255_prn", ppi_printer_intf )
|
||||||
MCFG_I8255_ADD( "ppi8255_fdd", ppi_fdd_intf )
|
MCFG_I8255_ADD( "ppi8255_fdd", ppi_fdd_intf )
|
||||||
MCFG_FRAGMENT_ADD(pc9801_mouse)
|
MCFG_FRAGMENT_ADD(pc9801_mouse)
|
||||||
|
MCFG_FRAGMENT_ADD(pc9801_cbus)
|
||||||
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, pc9801_upd1990a_intf)
|
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, pc9801_upd1990a_intf)
|
||||||
MCFG_I8251_ADD(UPD8251_TAG, pc9801_uart_interface)
|
MCFG_I8251_ADD(UPD8251_TAG, pc9801_uart_interface)
|
||||||
|
|
||||||
@ -3639,7 +3623,6 @@ static MACHINE_CONFIG_START( pc9801, pc9801_state )
|
|||||||
|
|
||||||
MCFG_SOFTWARE_LIST_ADD("disk_list","pc98")
|
MCFG_SOFTWARE_LIST_ADD("disk_list","pc98")
|
||||||
|
|
||||||
MCFG_PC9801BUS_SLOT_ADD("sound_bus", pc9801_sound, NULL, NULL)
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
MCFG_RAM_ADD(RAM_TAG)
|
MCFG_RAM_ADD(RAM_TAG)
|
||||||
@ -3702,7 +3685,7 @@ static MACHINE_CONFIG_START( pc9801rs, pc9801_state )
|
|||||||
MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:0", pc9801_floppies, "525hd", 0, pc9801_state::floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:0", pc9801_floppies, "525hd", 0, pc9801_state::floppy_formats)
|
||||||
MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:1", pc9801_floppies, "525hd", 0, pc9801_state::floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:1", pc9801_floppies, "525hd", 0, pc9801_state::floppy_formats)
|
||||||
|
|
||||||
MCFG_PC9801BUS_SLOT_ADD("sound_bus", pc9801_sound, NULL, NULL)
|
MCFG_FRAGMENT_ADD(pc9801_cbus)
|
||||||
|
|
||||||
MCFG_RAM_ADD(RAM_TAG)
|
MCFG_RAM_ADD(RAM_TAG)
|
||||||
MCFG_RAM_DEFAULT_SIZE("1664K")
|
MCFG_RAM_DEFAULT_SIZE("1664K")
|
||||||
@ -3767,7 +3750,7 @@ static MACHINE_CONFIG_START( pc9821, pc9801_state )
|
|||||||
MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:0", pc9801_floppies, "525hd", 0, pc9801_state::floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:0", pc9801_floppies, "525hd", 0, pc9801_state::floppy_formats)
|
||||||
MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:1", pc9801_floppies, "525hd", 0, pc9801_state::floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD("upd765_2hd:1", pc9801_floppies, "525hd", 0, pc9801_state::floppy_formats)
|
||||||
|
|
||||||
MCFG_PC9801BUS_SLOT_ADD("sound_bus", pc9801_sound, NULL, NULL)
|
MCFG_FRAGMENT_ADD(pc9801_cbus)
|
||||||
|
|
||||||
MCFG_RAM_ADD(RAM_TAG)
|
MCFG_RAM_ADD(RAM_TAG)
|
||||||
MCFG_RAM_DEFAULT_SIZE("1664K")
|
MCFG_RAM_DEFAULT_SIZE("1664K")
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
NEC PC-9801-26 sound card
|
NEC PC-9801-26 sound card
|
||||||
|
|
||||||
The legacy sound card, composed by a single YM2203
|
Legacy sound card for PC-98xx family, composed by a single YM2203
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -149,7 +149,7 @@ void pc9801_26_device::install_device(offs_t start, offs_t end, offs_t mask, off
|
|||||||
machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff);
|
machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fatalerror("IBM5160_MOTHERBOARD: Bus width %d not supported\n", buswidth);
|
fatalerror("PC-9801-26: Bus width %d not supported\n", buswidth);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -179,9 +179,6 @@ READ8_MEMBER(pc9801_26_device::pc9801_26_r)
|
|||||||
{
|
{
|
||||||
if((offset & 1) == 0)
|
if((offset & 1) == 0)
|
||||||
{
|
{
|
||||||
//if(m_has_opna)
|
|
||||||
// return ym2608_r(m_opna, space, offset >> 1);
|
|
||||||
|
|
||||||
return offset & 4 ? 0xff : ym2203_r(m_opn,space, offset >> 1);
|
return offset & 4 ? 0xff : ym2203_r(m_opn,space, offset >> 1);
|
||||||
}
|
}
|
||||||
else // odd
|
else // odd
|
||||||
@ -194,16 +191,8 @@ READ8_MEMBER(pc9801_26_device::pc9801_26_r)
|
|||||||
|
|
||||||
WRITE8_MEMBER(pc9801_26_device::pc9801_26_w)
|
WRITE8_MEMBER(pc9801_26_device::pc9801_26_w)
|
||||||
{
|
{
|
||||||
if((offset & 1) == 0)
|
if((offset & 5) == 0)
|
||||||
{
|
|
||||||
/*if(m_has_opna)
|
|
||||||
ym2608_w(m_opna,space, offset >> 1,data);
|
|
||||||
else */
|
|
||||||
if((offset & 4) == 0)
|
|
||||||
ym2203_w(m_opn,space, offset >> 1,data);
|
ym2203_w(m_opn,space, offset >> 1,data);
|
||||||
}
|
|
||||||
else // odd
|
else // odd
|
||||||
{
|
|
||||||
printf("PC9801-26: Write to undefined port [%02x] %02x\n",offset+0x188,data);
|
printf("PC9801-26: Write to undefined port [%02x] %02x\n",offset+0x188,data);
|
||||||
}
|
|
||||||
}
|
}
|
223
src/mess/machine/pc9801_86.c
Normal file
223
src/mess/machine/pc9801_86.c
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
NEC PC-9801-86 sound card
|
||||||
|
|
||||||
|
Almost the same thing as PC-9801-86, but this one has YM2608 instead of
|
||||||
|
YM2203
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "machine/pc9801_86.h"
|
||||||
|
#include "machine/pic8259.h"
|
||||||
|
#include "sound/2608intf.h"
|
||||||
|
|
||||||
|
#define MAIN_CLOCK_X1 XTAL_1_9968MHz
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// GLOBAL VARIABLES
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// device type definition
|
||||||
|
const device_type PC9801_86 = &device_creator<pc9801_86_device>;
|
||||||
|
|
||||||
|
|
||||||
|
READ8_MEMBER(pc9801_86_device::opn_porta_r)
|
||||||
|
{
|
||||||
|
if(m_joy_sel == 0x80)
|
||||||
|
return ioport("OPNA_PA1")->read();
|
||||||
|
|
||||||
|
if(m_joy_sel == 0xc0)
|
||||||
|
return ioport("OPNA_PA2")->read();
|
||||||
|
|
||||||
|
// 0x81?
|
||||||
|
// printf("%02x\n",m_joy_sel);
|
||||||
|
return 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(pc9801_86_device::opn_portb_w){ m_joy_sel = data; }
|
||||||
|
|
||||||
|
static void pc9801_sound_irq( device_t *device, int irq )
|
||||||
|
{
|
||||||
|
// pc9801_state *state = device->machine().driver_data<pc9801_state>();
|
||||||
|
|
||||||
|
/* TODO: seems to die very often */
|
||||||
|
pic8259_ir4_w(device->machine().device("pic8259_slave"), irq);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const ym2608_interface pc98_ym2608_intf =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
AY8910_LEGACY_OUTPUT,
|
||||||
|
AY8910_DEFAULT_LOADS,
|
||||||
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, pc9801_86_device,opn_porta_r),
|
||||||
|
DEVCB_NULL,//(pc9801_state,opn_portb_r),
|
||||||
|
DEVCB_NULL,//(pc9801_state,opn_porta_w),
|
||||||
|
DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, pc9801_86_device,opn_portb_w),
|
||||||
|
},
|
||||||
|
pc9801_sound_irq
|
||||||
|
};
|
||||||
|
|
||||||
|
static MACHINE_CONFIG_FRAGMENT( pc9801_86_config )
|
||||||
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
|
MCFG_SOUND_ADD("opna", YM2608, MAIN_CLOCK_X1*4) // unknown clock / divider
|
||||||
|
MCFG_SOUND_CONFIG(pc98_ym2608_intf)
|
||||||
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// machine_config_additions - device-specific
|
||||||
|
// machine configurations
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
machine_config_constructor pc9801_86_device::device_mconfig_additions() const
|
||||||
|
{
|
||||||
|
return MACHINE_CONFIG_NAME( pc9801_86_config );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// input_ports - device-specific input ports
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
static INPUT_PORTS_START( pc9801_86 )
|
||||||
|
PORT_START("OPNA_PA1")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("P1 Joystick Up")
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("P1 Joystick Down")
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("P1 Joystick Left")
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) PORT_NAME("P1 Joystick Right")
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Joystick Button 1")
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Joystick Button 2")
|
||||||
|
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
|
|
||||||
|
PORT_START("OPNA_PA2")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("P2 Joystick Up")
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("P2 Joystick Down")
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("P2 Joystick Left")
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_NAME("P2 Joystick Right")
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Joystick Button 1")
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Joystick Button 2")
|
||||||
|
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
ioport_constructor pc9801_86_device::device_input_ports() const
|
||||||
|
{
|
||||||
|
return INPUT_PORTS_NAME( pc9801_86 );
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// LIVE DEVICE
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// pc9801_86_device - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
pc9801_86_device::pc9801_86_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||||
|
: device_t(mconfig, PC9801_86, "pc9801_86", tag, owner, clock),
|
||||||
|
// m_maincpu(*owner, "maincpu"),
|
||||||
|
m_opna(*this, "opna")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_validity_check - perform validity checks
|
||||||
|
// on this device
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void pc9801_86_device::device_validity_check(validity_checker &valid) const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_start - device-specific startup
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void pc9801_86_device::install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler)
|
||||||
|
{
|
||||||
|
int buswidth = machine().firstcpu->space_config(AS_IO)->m_databus_width;
|
||||||
|
switch(buswidth)
|
||||||
|
{
|
||||||
|
case 8:
|
||||||
|
machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffff);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
machine().firstcpu->space(AS_IO).install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fatalerror("PC-9801-86: Bus width %d not supported\n", buswidth);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void pc9801_86_device::device_start()
|
||||||
|
{
|
||||||
|
install_device(0x0188, 0x018f, 0, 0, read8_delegate(FUNC(pc9801_86_device::pc9801_86_r), this), write8_delegate(FUNC(pc9801_86_device::pc9801_86_w), this) );
|
||||||
|
// install_device(0xa460, 0xa463, 0, 0, read8_delegate(FUNC(pc9801_86_device::pc9801_86_ext_r), this), write8_delegate(FUNC(pc9801_86_device::pc9801_86_ext_w), this) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_reset - device-specific reset
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void pc9801_86_device::device_reset()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// READ/WRITE HANDLERS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
READ8_MEMBER(pc9801_86_device::pc9801_86_r)
|
||||||
|
{
|
||||||
|
if((offset & 1) == 0)
|
||||||
|
return ym2608_r(m_opna, space, offset >> 1);
|
||||||
|
else // odd
|
||||||
|
{
|
||||||
|
printf("PC9801-86: Read to undefined port [%02x]\n",offset+0x188);
|
||||||
|
return 0xff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_MEMBER(pc9801_86_device::pc9801_86_w)
|
||||||
|
{
|
||||||
|
if((offset & 1) == 0)
|
||||||
|
ym2608_w(m_opna,space, offset >> 1,data);
|
||||||
|
else // odd
|
||||||
|
printf("PC9801-86: Write to undefined port [%02x] %02x\n",offset+0x188,data);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
READ8_MEMBER( pc9801_86_device::pc9801_86_ext_r )
|
||||||
|
{
|
||||||
|
if(offset == 0)
|
||||||
|
{
|
||||||
|
printf("OPNA EXT read ID [%02x]\n",offset);
|
||||||
|
return 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("OPNA EXT read unk [%02x]\n",offset);
|
||||||
|
return 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER( pc9801_86_device::pc9801_86_ext_w )
|
||||||
|
{
|
||||||
|
if(offset == 0)
|
||||||
|
{
|
||||||
|
printf("OPNA EXT write mask %02x -> [%02x]\n",data,offset);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("OPNA EXT write unk %02x -> [%02x]\n",data,offset);
|
||||||
|
}
|
||||||
|
#endif
|
71
src/mess/machine/pc9801_86.h
Normal file
71
src/mess/machine/pc9801_86.h
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Template for skeleton device
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef __PC9801_86DEV_H__
|
||||||
|
#define __PC9801_86DEV_H__
|
||||||
|
|
||||||
|
#include "machine/pic8259.h"
|
||||||
|
#include "sound/2608intf.h"
|
||||||
|
|
||||||
|
#define MCFG_PC9801_86_SLOT_ADD(_tag, _slot_intf, _def_slot, _def_inp) \
|
||||||
|
MCFG_DEVICE_ADD(_tag, PC9801_86, 0) \
|
||||||
|
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// ======================> pc9801_86_device
|
||||||
|
|
||||||
|
class pc9801_86_device : public device_t
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
pc9801_86_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
// optional information overrides
|
||||||
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
|
virtual ioport_constructor device_input_ports() const;
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER(opn_porta_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(opn_portb_w);
|
||||||
|
DECLARE_READ8_MEMBER(pc9801_86_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(pc9801_86_w);
|
||||||
|
// DECLARE_READ8_MEMBER(pc9801_86_ext_r);
|
||||||
|
// DECLARE_WRITE8_MEMBER(pc9801_86_ext_w);
|
||||||
|
|
||||||
|
// required_device<cpu_device> m_maincpu;
|
||||||
|
required_device<ym2608_device> m_opna;
|
||||||
|
protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual void device_validity_check(validity_checker &valid) const;
|
||||||
|
virtual void device_start();
|
||||||
|
virtual void device_reset();
|
||||||
|
virtual void device_config_complete() { m_shortname = "pc9801_86"; }
|
||||||
|
void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler);
|
||||||
|
|
||||||
|
private:
|
||||||
|
UINT8 m_joy_sel;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// device type definition
|
||||||
|
extern const device_type PC9801_86;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// GLOBAL VARIABLES
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -1,10 +1,10 @@
|
|||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
|
||||||
Slot interface for PC-98xx family
|
CCBUS Slot interface for PC-98xx family
|
||||||
|
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
#include "pc9801_slot.h"
|
#include "pc9801_cbus.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -12,7 +12,7 @@
|
|||||||
// GLOBAL VARIABLES
|
// GLOBAL VARIABLES
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
const device_type PC9801BUS_SLOT = &device_creator<pc9801_slot_device>;
|
const device_type PC9801CBUS_SLOT = &device_creator<pc9801_slot_device>;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -22,20 +22,20 @@ const device_type PC9801BUS_SLOT = &device_creator<pc9801_slot_device>;
|
|||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// device_abc1600bus_card_interface - constructor
|
// device_pc9801cbus_card_interface - constructor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
device_pc9801bus_card_interface::device_pc9801bus_card_interface(const machine_config &mconfig, device_t &device)
|
device_pc9801cbus_card_interface::device_pc9801cbus_card_interface(const machine_config &mconfig, device_t &device)
|
||||||
: device_slot_card_interface(mconfig, device)
|
: device_slot_card_interface(mconfig, device)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// ~device_abc1600bus_card_interface - destructor
|
// ~device_pc9801cbus_card_interface - destructor
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
device_pc9801bus_card_interface::~device_pc9801bus_card_interface()
|
device_pc9801cbus_card_interface::~device_pc9801cbus_card_interface()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -50,7 +50,7 @@ device_pc9801bus_card_interface::~device_pc9801bus_card_interface()
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
pc9801_slot_device::pc9801_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
pc9801_slot_device::pc9801_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||||
device_t(mconfig, PC9801BUS_SLOT, "PC-9801 sound bus slot", tag, owner, clock),
|
device_t(mconfig, PC9801CBUS_SLOT, "PC-9801 sound cbus slot", tag, owner, clock),
|
||||||
device_slot_interface(mconfig, *this)
|
device_slot_interface(mconfig, *this)
|
||||||
{
|
{
|
||||||
}
|
}
|
@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef __PC9801_SLOTBUS__
|
#ifndef __PC9801_SLOTCBUS__
|
||||||
#define __PC9801_SLOTBUS__
|
#define __PC9801_SLOTCBUS__
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
|
||||||
@ -22,8 +22,8 @@
|
|||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
|
||||||
|
|
||||||
#define MCFG_PC9801BUS_SLOT_ADD(_tag, _slot_intf, _def_slot, _def_inp) \
|
#define MCFG_PC9801CBUS_SLOT_ADD(_tag, _slot_intf, _def_slot, _def_inp) \
|
||||||
MCFG_DEVICE_ADD(_tag, PC9801BUS_SLOT, 0) \
|
MCFG_DEVICE_ADD(_tag, PC9801CBUS_SLOT, 0) \
|
||||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
|
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
|
||||||
|
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
// device type definition
|
// device type definition
|
||||||
extern const device_type PC9801BUS_SLOT;
|
extern const device_type PC9801CBUS_SLOT;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1472,7 +1472,8 @@ $(MESSOBJ)/pc.a: \
|
|||||||
|
|
||||||
$(MESSOBJ)/pc9801.a: \
|
$(MESSOBJ)/pc9801.a: \
|
||||||
$(MESS_MACHINE)/pc9801_26.o \
|
$(MESS_MACHINE)/pc9801_26.o \
|
||||||
$(MESS_MACHINE)/pc9801_slot.o \
|
$(MESS_MACHINE)/pc9801_86.o \
|
||||||
|
$(MESS_MACHINE)/pc9801_cbus.o \
|
||||||
|
|
||||||
$(MESSOBJ)/pcshare.a: \
|
$(MESSOBJ)/pcshare.a: \
|
||||||
$(MESS_MACHINE)/pc_turbo.o \
|
$(MESS_MACHINE)/pc_turbo.o \
|
||||||
|
Loading…
Reference in New Issue
Block a user