/***************************************************************************
System 2900
12/05/2009 Skeleton driver.
The system contains 4 S100 boards, 2 8" floppies, enormous power supply,
1/4" thick mother board, 4 RS232 I/F boards, and an Australian made
"Computer Patch Board".
The S100 boards that make up the unit are:
CPU board - Model CPC2810 Rev D
The board has a Z80A CPU, CTC, PIO, DART and SIO.
U16 (24 pin) is missing (boot EPROM?).
It has a lot of jumpers and an 8 way DIP switch.
Memory board - Model HDM2800 Rev B
This contains 18 4164's and a lot of logic.
Again, a lot of jumpers, and several banks of links.
Also contains 2 Motorola chips I cannot identify,
MC3480P (24 pin) and MC3242AP (28 pin).
(I have searched the Motorola site and the Chip
Directory; nothing even close.)
Disk Controller board - Model FDC2800 Rev D
This board is damaged. The small voltage regulators
for +/- 12V have been fried.
Also, 3 sockets are empty - U1 and U38 (16 pin)
appear to be spares, and U10 (14 pin).
8 port Serial I/O board - Model INO2808 Rev C
Room for 8 8251 USART's.
I have traced out this board and managed to get it
working in another S100 system.
The "Computer Patch Board" seems to provide some sort of watch dog
facility.
****************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
class sys2900_state : public driver_device
{
public:
enum
{
TIMER_BOOT
};
sys2900_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) ,
m_maincpu(*this, "maincpu") { }
DECLARE_DRIVER_INIT(sys2900);
virtual void machine_reset();
virtual void video_start();
UINT32 screen_update_sys2900(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
};
static ADDRESS_MAP_START(sys2900_mem, AS_PROGRAM, 8, sys2900_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE( 0x0000, 0x07ff ) AM_RAMBANK("boot")
AM_RANGE( 0x0800, 0xefff ) AM_RAM
AM_RANGE( 0xf000, 0xf7ff ) AM_ROM
AM_RANGE( 0xf800, 0xffff ) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START(sys2900_io, AS_IO, 8, sys2900_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
ADDRESS_MAP_END
/* Input ports */
static INPUT_PORTS_START( sys2900 )
INPUT_PORTS_END
void sys2900_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
{
case TIMER_BOOT:
/* after the first 4 bytes have been read from ROM, switch the ram back in */
membank("boot")->set_entry(0);
break;
default:
assert_always(FALSE, "Unknown id in sys2900_state::device_timer");
}
}
void sys2900_state::machine_reset()
{
membank("boot")->set_entry(1);
timer_set(attotime::from_usec(5), TIMER_BOOT);
}
DRIVER_INIT_MEMBER(sys2900_state,sys2900)
{
UINT8 *RAM = memregion("maincpu")->base();
membank("boot")->configure_entries(0, 2, &RAM[0x0000], 0xf000);
}
void sys2900_state::video_start()
{
}
UINT32 sys2900_state::screen_update_sys2900(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
return 0;
}
static MACHINE_CONFIG_START( sys2900, sys2900_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz)
MCFG_CPU_PROGRAM_MAP(sys2900_mem)
MCFG_CPU_IO_MAP(sys2900_io)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
MCFG_SCREEN_UPDATE_DRIVER(sys2900_state, screen_update_sys2900)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
MACHINE_CONFIG_END
/* ROM definition */
ROM_START( sys2900 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "104401cpc.bin", 0xf000, 0x0800, CRC(6c8848bc) SHA1(890e0578e5cb0e3433b4b173e5ed71d72a92af26))
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
COMP( 1981, sys2900, 0, 0, sys2900, sys2900, sys2900_state, sys2900, "Systems Group", "System 2900", GAME_NOT_WORKING | GAME_NO_SOUND)