/*************************************************************************************************

(Hologram) Time Traveler (c) 1991 Virtual Image Productions / Sega

preliminary driver by Angelo Salese

TODO:
- unemulated Pioneer LDV-4200 and Sony LDP-1450 players, needs a dump of the BIOSes and proper
  hook-up;

==================================================================================================

Time Traveler ROM image

warren@dragons-lair-project.com
6/25/01


ROM is a 27C020 (256kbit x 8 = 256 KB)
ROM sticker says 6/18/91

CPU is an Intel 80188

*************************************************************************************************/

#include "emu.h"
#include "cpu/i86/i86.h"


class timetrv_state : public driver_device
{
public:
	timetrv_state(const machine_config &mconfig, device_type type, const char *tag)
		: driver_device(mconfig, type, tag) { }

	UINT8 *m_led_vram_lo;
	UINT8 *m_led_vram_hi;
};



static VIDEO_START( timetrv )
{

}

static SCREEN_UPDATE_IND16( timetrv )
{
	timetrv_state *state = screen.machine().driver_data<timetrv_state>();
	popmessage("%s%s",state->m_led_vram_lo,state->m_led_vram_hi);
	return 0;
}

static READ8_HANDLER( test1_r )
{
	return input_port_read(space->machine(), "IN0");//space->machine().rand();
}

static READ8_HANDLER( test2_r )
{
	/*bit 7,eeprom read bit*/
	return (input_port_read(space->machine(), "IN1") & 0x7f);//space->machine().rand();
}


static READ8_HANDLER( in_r )
{
	return 0xff;
}

static READ8_HANDLER( ld_r )
{
	return space->machine().rand();
}

static ADDRESS_MAP_START( timetrv_map, AS_PROGRAM, 8 )
	AM_RANGE(0x00000, 0x0ffff) AM_RAM //irq vectors + work ram
	AM_RANGE(0x10000, 0x107ff) AM_RAM
	AM_RANGE(0xc0000, 0xfffff) AM_ROM
ADDRESS_MAP_END

static ADDRESS_MAP_START( timetrv_io, AS_IO, 8 )
	AM_RANGE(0x0122, 0x0123) AM_WRITENOP //eeprom write bits
	AM_RANGE(0x1000, 0x1000) AM_READ(test1_r) //inputs
	AM_RANGE(0x1001, 0x1001) AM_READ(test2_r) //eeprom read bit + inputs

	AM_RANGE(0x1080, 0x1082) AM_READ(in_r) //dsw
	AM_RANGE(0x1100, 0x1105) AM_WRITENOP //laserdisc write area
	AM_RANGE(0x1100, 0x1105) AM_READ(ld_r) //5 -> laserdisc read status
	AM_RANGE(0x1180, 0x1187) AM_RAM AM_BASE_MEMBER(timetrv_state, m_led_vram_lo)//led string,part 1
	AM_RANGE(0x1200, 0x1207) AM_RAM AM_BASE_MEMBER(timetrv_state, m_led_vram_hi)//led string,part 2
	AM_RANGE(0xff80, 0xffff) AM_RAM //am80188-em-like cpu internal regs?
ADDRESS_MAP_END


static INPUT_PORTS_START( timetrv )
    PORT_START("IN0")
	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )

    PORT_START("IN1")
	PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
	PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
	PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
    PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
    PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
    PORT_DIPSETTING(    0x00, DEF_STR( On ) )
	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Service_Mode ) )
	PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
	// 0x80 eeprom read bit
INPUT_PORTS_END

static INTERRUPT_GEN( vblank_irq )
{
	device_set_input_line_and_vector(device,0,HOLD_LINE,0x20/4); //vblank bit flag clear
}

static INTERRUPT_GEN( ld_irq )
{
	device_set_input_line_and_vector(device,0,HOLD_LINE,0x48/4); //ld irq
}

static MACHINE_CONFIG_START( timetrv, timetrv_state )

	/* basic machine hardware */
	MCFG_CPU_ADD("maincpu",I80188,20000000) //???
	MCFG_CPU_PROGRAM_MAP(timetrv_map)
	MCFG_CPU_IO_MAP(timetrv_io)
	MCFG_CPU_VBLANK_INT("screen",vblank_irq)
	MCFG_CPU_PERIODIC_INT(ld_irq,60) //remove from here

	/* video hardware */
	MCFG_SCREEN_ADD("screen", RASTER)
	MCFG_SCREEN_REFRESH_RATE(60)
	MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
	MCFG_SCREEN_SIZE(512, 512)
	MCFG_SCREEN_VISIBLE_AREA(0*8, 512-1, 0*8, 512-1)
	MCFG_SCREEN_UPDATE_STATIC(timetrv)

	MCFG_PALETTE_LENGTH(512)

	MCFG_VIDEO_START(timetrv)
	/* sound hardware */
MACHINE_CONFIG_END

/***************************************************************************

  Game driver(s)

***************************************************************************/

ROM_START( timetrv )
	ROM_REGION( 0x100000, "maincpu", 0 )
	ROM_LOAD( "tt061891.bin",   0xc0000, 0x40000, CRC(a3d44219) SHA1(7c5003b6d3df1e472db45abd725e7d3d43f0dfb4) )

	DISK_REGION( "laserdisc" )
	DISK_IMAGE_READONLY( "timetrv", 0, NO_DUMP )
ROM_END

GAME( 1991, timetrv,  0,       timetrv,  timetrv,  0, ROT0, "Virtual Image Productions (Sega license)", "Time Traveler", GAME_NO_SOUND | GAME_NOT_WORKING )
