mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
New skeleton drivers added: Convergent NGEN CP-001, B28/38, 386i [Al Kossow, Barry Rodewald]
This commit is contained in:
parent
4e34b36e02
commit
94db9be215
251
src/mess/drivers/ngen.c
Normal file
251
src/mess/drivers/ngen.c
Normal file
@ -0,0 +1,251 @@
|
||||
/*
|
||||
|
||||
Convergent NGen series
|
||||
|
||||
10-11-14 - Skeleton driver
|
||||
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/i86/i186.h"
|
||||
#include "cpu/i386/i386.h"
|
||||
#include "video/mc6845.h"
|
||||
#include "machine/i8251.h"
|
||||
#include "machine/am9517a.h"
|
||||
#include "machine/pic8259.h"
|
||||
#include "machine/pit8253.h"
|
||||
|
||||
class ngen_state : public driver_device
|
||||
{
|
||||
public:
|
||||
ngen_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this,"maincpu"),
|
||||
m_crtc(*this,"crtc"),
|
||||
m_viduart(*this,"videouart"),
|
||||
m_dmac(*this,"dmac"),
|
||||
m_pic(*this,"pic"),
|
||||
m_pit(*this,"pit")
|
||||
{}
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(pit_out0_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pit_out1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pit_out2_w);
|
||||
DECLARE_WRITE16_MEMBER(cpu_peripheral_cb);
|
||||
DECLARE_WRITE16_MEMBER(peripheral_w);
|
||||
DECLARE_READ16_MEMBER(peripheral_r);
|
||||
DECLARE_WRITE16_MEMBER(port00_w);
|
||||
DECLARE_READ16_MEMBER(port00_r);
|
||||
MC6845_UPDATE_ROW(crtc_update_row);
|
||||
|
||||
protected:
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<mc6845_device> m_crtc;
|
||||
required_device<i8251_device> m_viduart;
|
||||
required_device<am9517a_device> m_dmac;
|
||||
required_device<pic8259_device> m_pic;
|
||||
required_device<pit8254_device> m_pit;
|
||||
|
||||
UINT16 m_peripheral;
|
||||
UINT16 m_upper;
|
||||
UINT16 m_middle;
|
||||
UINT16 m_port00;
|
||||
};
|
||||
|
||||
WRITE_LINE_MEMBER(ngen_state::pit_out0_w)
|
||||
{
|
||||
m_pic->ir0_w(state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ngen_state::pit_out1_w)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(ngen_state::pit_out2_w)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(ngen_state::cpu_peripheral_cb)
|
||||
{
|
||||
UINT32 addr;
|
||||
|
||||
switch(offset)
|
||||
{
|
||||
case 0: // upper memory
|
||||
m_upper = data;
|
||||
break;
|
||||
case 2: // peripheral
|
||||
m_peripheral = data;
|
||||
addr = (m_peripheral & 0xffc0) << 4;
|
||||
if(m_middle & 0x0040)
|
||||
{
|
||||
m_maincpu->device_t::memory().space(AS_PROGRAM).install_readwrite_handler(addr, addr + 0x3ff, read16_delegate(FUNC(ngen_state::peripheral_r), this), write16_delegate(FUNC(ngen_state::peripheral_w), this));
|
||||
logerror("Mapped peripherals to memory 0x%08x\n",addr);
|
||||
}
|
||||
else
|
||||
{
|
||||
addr &= 0xffff;
|
||||
m_maincpu->device_t::memory().space(AS_IO).install_readwrite_handler(addr, addr + 0x3ff, read16_delegate(FUNC(ngen_state::peripheral_r), this), write16_delegate(FUNC(ngen_state::peripheral_w), this));
|
||||
logerror("Mapped peripherals to I/O 0x%04x\n",addr);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
m_middle = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 80186 peripheral space
|
||||
WRITE16_MEMBER(ngen_state::peripheral_w)
|
||||
{
|
||||
switch(offset)
|
||||
{
|
||||
case 0x147:
|
||||
if(mem_mask & 0xff00)
|
||||
m_pic->write(space,0,(data >> 8) & 0xff);
|
||||
if(mem_mask & 0x00ff)
|
||||
m_pic->write(space,1,data & 0xff);
|
||||
break;
|
||||
}
|
||||
logerror("Peripheral write offset %04x data %04x mask %04x\n",offset,data,mem_mask);
|
||||
}
|
||||
|
||||
READ16_MEMBER(ngen_state::peripheral_r)
|
||||
{
|
||||
UINT16 ret = 0xff;
|
||||
switch(offset)
|
||||
{
|
||||
case 0x146:
|
||||
if(mem_mask & 0x00ff)
|
||||
ret = m_pic->read(space,0);
|
||||
break;
|
||||
case 0x147:
|
||||
if(mem_mask & 0x00ff)
|
||||
ret = m_pic->read(space,1);
|
||||
break;
|
||||
}
|
||||
logerror("Peripheral read offset %04x mask %04x\n",offset,mem_mask);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// A sequencial number is written to this port, and keeps on going until an NMI is triggered.
|
||||
// Maybe this is a RAM test of some kind, and this would be a bank switch register?
|
||||
// Even though the system supports 1MB at the most, which would fit in the CPU's whole address space...
|
||||
WRITE16_MEMBER(ngen_state::port00_w)
|
||||
{
|
||||
m_port00 = data;
|
||||
if(data > 0)
|
||||
m_maincpu->set_input_line(INPUT_LINE_NMI,PULSE_LINE);
|
||||
logerror("SYS: Port 0 write %04x\n",data);
|
||||
}
|
||||
|
||||
READ16_MEMBER(ngen_state::port00_r)
|
||||
{
|
||||
return m_port00;
|
||||
}
|
||||
|
||||
MC6845_UPDATE_ROW( ngen_state::crtc_update_row )
|
||||
{
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( ngen_mem, AS_PROGRAM, 16, ngen_state )
|
||||
AM_RANGE(0x00000, 0xfdfff) AM_RAM
|
||||
AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_REGION("bios",0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( ngen_io, AS_IO, 16, ngen_state )
|
||||
AM_RANGE(0x0000, 0x0001) AM_READWRITE(port00_r,port00_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( ngen386_mem, AS_PROGRAM, 32, ngen_state )
|
||||
AM_RANGE(0x00000000, 0x000fdfff) AM_RAM
|
||||
AM_RANGE(0x000fe000, 0x000fffff) AM_ROM AM_REGION("bios",0)
|
||||
AM_RANGE(0xffffe000, 0xffffffff) AM_ROM AM_REGION("bios",0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( ngen386i_mem, AS_PROGRAM, 32, ngen_state )
|
||||
AM_RANGE(0x00000000, 0x000fbfff) AM_RAM
|
||||
AM_RANGE(0x000fc000, 0x000fffff) AM_ROM AM_REGION("bios",0)
|
||||
AM_RANGE(0xffffc000, 0xffffffff) AM_ROM AM_REGION("bios",0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( ngen386_io, AS_IO, 32, ngen_state )
|
||||
AM_RANGE(0xfd0c, 0xfd0f) AM_DEVREADWRITE8("pic",pic8259_device,read,write,0xffffffff)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( ngen )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static MACHINE_CONFIG_START( ngen, ngen_state )
|
||||
// basic machine hardware
|
||||
MCFG_CPU_ADD("maincpu", I80186, XTAL_16MHz / 2)
|
||||
MCFG_CPU_PROGRAM_MAP(ngen_mem)
|
||||
MCFG_CPU_IO_MAP(ngen_io)
|
||||
MCFG_80186_CHIP_SELECT_CB(WRITE16(ngen_state, cpu_peripheral_cb))
|
||||
MCFG_80186_TMROUT1_HANDLER(WRITELINE(ngen_state, pit_out0_w))
|
||||
|
||||
MCFG_PIC8259_ADD( "pic", INPUTLINE("maincpu", 0), VCC, NULL )
|
||||
|
||||
MCFG_DEVICE_ADD("pit", PIT8254, 0)
|
||||
MCFG_PIT8253_CLK0(4772720/4) // correct?
|
||||
MCFG_PIT8253_OUT0_HANDLER(WRITELINE(ngen_state, pit_out0_w))
|
||||
MCFG_PIT8253_CLK0(4772720/4)
|
||||
MCFG_PIT8253_OUT0_HANDLER(WRITELINE(ngen_state, pit_out1_w))
|
||||
MCFG_PIT8253_CLK0(4772720/4)
|
||||
MCFG_PIT8253_OUT0_HANDLER(WRITELINE(ngen_state, pit_out2_w))
|
||||
|
||||
MCFG_DEVICE_ADD("dmac", AM9517A, XTAL_14_7456MHz / 3) // NEC D8237A, divisor unknown
|
||||
|
||||
// video board
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_SIZE(720,348)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_UPDATE_DEVICE("crtc",mc6845_device, screen_update)
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, NULL, 19980000 / 16) // divisor unknown
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(false)
|
||||
MCFG_MC6845_CHAR_WIDTH(9)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(ngen_state, crtc_update_row)
|
||||
|
||||
MCFG_DEVICE_ADD("videouart", I8251, 19980000 / 16) // divisor unknown
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( ngen386, ngen )
|
||||
MCFG_CPU_REPLACE("maincpu", I386, XTAL_50MHz / 2)
|
||||
MCFG_CPU_PROGRAM_MAP(ngen386_mem)
|
||||
MCFG_CPU_IO_MAP(ngen386_io)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( 386i, ngen386 )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(ngen386i_mem)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( ngen )
|
||||
ROM_REGION( 0x2000, "bios", 0)
|
||||
ROM_LOAD16_BYTE( "72-00414_80186_cpu.bin", 0x000000, 0x001000, CRC(e1387a03) SHA1(ddca4eba67fbf8b731a8009c14f6b40edcbc3279) )
|
||||
ROM_LOAD16_BYTE( "72-00415_80186_cpu.bin", 0x000001, 0x001000, CRC(a6dde7d9) SHA1(b4d15c1bce31460ab5b92ff43a68c15ac5485816) )
|
||||
ROM_END
|
||||
|
||||
// not sure just how similar these systems are to the 80186 model, but are here at the moment to document the dumps
|
||||
ROM_START( ngenb38 )
|
||||
ROM_REGION( 0x2000, "bios", 0)
|
||||
ROM_LOAD16_BYTE( "72-168_fpc_386_cpu.bin", 0x000000, 0x001000, CRC(250a3b68) SHA1(49c070514bac264fa4892f284f7d2c852ae6605d) )
|
||||
ROM_LOAD16_BYTE( "72-167_fpc_386_cpu.bin", 0x000001, 0x001000, CRC(4010cc4e) SHA1(74a3024d605569056484d08b63f19fbf8eaf31c6) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( 386i )
|
||||
ROM_REGION( 0x4000, "bios", 0)
|
||||
ROM_LOAD16_BYTE( "72-1561o_386i_cpu.bin", 0x000000, 0x002000, CRC(b5efd768) SHA1(8b250d47d9c6eb82e1afaeb2244d8c4134ecbc47) )
|
||||
ROM_LOAD16_BYTE( "72-1562e_386i_cpu.bin", 0x000001, 0x002000, CRC(002d0d3a) SHA1(31de8592999377db9251acbeff348390a2d2602a) )
|
||||
|
||||
ROM_REGION( 0x2000, "video", 0)
|
||||
ROM_LOAD( "72-1630_gc-104_vga.bin", 0x000000, 0x002000, CRC(4e4d8ebe) SHA1(50c96ccb4d0bd1beb2d1aee0d18b2c462d25fc8f) )
|
||||
ROM_END
|
||||
|
||||
|
||||
COMP( 1983, ngen, 0, 0, ngen, ngen, driver_device, 0, "Convergent Technologies", "NGEN CP-001", GAME_IS_SKELETON | GAME_NOT_WORKING | GAME_NO_SOUND )
|
||||
COMP( 1991, ngenb38, ngen, 0, ngen386, ngen, driver_device, 0, "Financial Products Corp.", "B28/38", GAME_IS_SKELETON | GAME_NOT_WORKING | GAME_NO_SOUND )
|
||||
COMP( 1990, 386i, ngen, 0, 386i, ngen, driver_device, 0, "Convergent Technologies", "386i", GAME_IS_SKELETON | GAME_NOT_WORKING | GAME_NO_SOUND )
|
@ -2133,6 +2133,11 @@ fanucspg // 1983
|
||||
fanucspgm // 1983
|
||||
fanucs15 // 1990
|
||||
|
||||
// Convergent
|
||||
ngen // 1983
|
||||
ngenb38 // 1991
|
||||
386i // 199?
|
||||
|
||||
//********** Misc **********************************************************
|
||||
|
||||
ssem // Manchester Small-Scale Experimental Machine, "Baby"
|
||||
|
@ -1941,6 +1941,7 @@ $(MESSOBJ)/skeleton.a: \
|
||||
$(MESS_DRIVERS)/mx2178.o \
|
||||
$(MESS_DRIVERS)/mycom.o \
|
||||
$(MESS_DRIVERS)/myvision.o \
|
||||
$(MESS_DRIVERS)/ngen.o \
|
||||
$(MESS_DRIVERS)/octopus.o \
|
||||
$(MESS_DRIVERS)/onyx.o \
|
||||
$(MESS_DRIVERS)/okean240.o \
|
||||
|
Loading…
Reference in New Issue
Block a user