diff options
Diffstat (limited to 'src/mame/drivers/tickee.c')
-rw-r--r-- | src/mame/drivers/tickee.c | 444 |
1 files changed, 444 insertions, 0 deletions
diff --git a/src/mame/drivers/tickee.c b/src/mame/drivers/tickee.c new file mode 100644 index 00000000000..7b399d54bb6 --- /dev/null +++ b/src/mame/drivers/tickee.c @@ -0,0 +1,444 @@ +/*************************************************************************** + + Raster Elite Tickee Tickats hardware + + driver by Aaron Giles + + Games supported: + * Tickee Tickats + * Ghost Hunter + * Tuts Tomb + + Known bugs: + * (Tickee) gun sometimes misfires + +***************************************************************************/ + +#include "driver.h" +#include "cpu/tms34010/tms34010.h" +#include "machine/ticket.h" +#include "video/tlc34076.h" +#include "tickee.h" +#include "sound/ay8910.h" + + +UINT16 *tickee_control; + + + +/************************************* + * + * Machine init + * + *************************************/ + +static MACHINE_RESET( tickee ) +{ + ticket_dispenser_init(100, 0, 1); + tlc34076_reset(6); +} + + + +/************************************* + * + * Miscellaneous control bits + * + *************************************/ + +static READ8_HANDLER( port1_r ) +{ + return input_port_1_r(offset) | (ticket_dispenser_0_r(0) >> 5) | (ticket_dispenser_1_r(0) >> 6); +} + +static READ8_HANDLER( port2_r ) +{ + return input_port_3_r(offset) | (ticket_dispenser_0_r(0) >> 5) | (ticket_dispenser_1_r(0) >> 6); +} + + + +/************************************* + * + * Miscellaneous control bits + * + *************************************/ + +static WRITE16_HANDLER( tickee_control_w ) +{ + UINT16 olddata = tickee_control[offset]; + + /* offsets: + + 2 = palette flash (0 normally, 1 when trigger is pressed) + 3 = ticket motor (bit 3 = 0 for left motor, bit 2 = 0 for right motor) + 6 = lamps? (changing all the time) + */ + + COMBINE_DATA(&tickee_control[offset]); + + if (offset == 3) + { + ticket_dispenser_0_w(0, (data & 8) << 4); + ticket_dispenser_1_w(0, (data & 4) << 5); + } + + if (olddata != tickee_control[offset]) + logerror("%08X:tickee_control_w(%d) = %04X (was %04X)\n", activecpu_get_pc(), offset, tickee_control[offset], olddata); +} + + + +/************************************* + * + * Memory maps + * + *************************************/ + +static ADDRESS_MAP_START( tickee_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_BASE(&tickee_vram) + AM_RANGE(0x02000000, 0x02ffffff) AM_ROM AM_REGION(REGION_USER1, 0) + AM_RANGE(0x04000000, 0x04003fff) AM_RAM AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size) + AM_RANGE(0x04100000, 0x041000ff) AM_READWRITE(tlc34076_lsb_r, tlc34076_lsb_w) + AM_RANGE(0x04200000, 0x0420000f) AM_READWRITE(AY8910_read_port_0_lsb_r, AY8910_control_port_0_lsb_w) + AM_RANGE(0x04200010, 0x0420001f) AM_WRITE(AY8910_write_port_0_lsb_w) + AM_RANGE(0x04200100, 0x0420010f) AM_READWRITE(AY8910_read_port_1_lsb_r, AY8910_control_port_1_lsb_w) + AM_RANGE(0x04200110, 0x0420011f) AM_WRITE(AY8910_write_port_1_lsb_w) + AM_RANGE(0x04400000, 0x0440007f) AM_WRITE(tickee_control_w) AM_BASE(&tickee_control) + AM_RANGE(0x04400040, 0x0440004f) AM_READ(input_port_3_word_r) + AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE(tms34010_io_register_r, tms34010_io_register_w) + AM_RANGE(0xc0000240, 0xc000025f) AM_WRITENOP /* seems to be a bug in their code */ + AM_RANGE(0xff000000, 0xffffffff) AM_ROM AM_REGION(REGION_USER1, 0) +ADDRESS_MAP_END + + +/* addreses in the 04x range shifted slightly...*/ +static ADDRESS_MAP_START( ghoshunt_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_BASE(&tickee_vram) + AM_RANGE(0x02000000, 0x02ffffff) AM_ROM AM_REGION(REGION_USER1, 0) + AM_RANGE(0x04100000, 0x04103fff) AM_RAM AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size) + AM_RANGE(0x04200000, 0x042000ff) AM_READWRITE(tlc34076_lsb_r, tlc34076_lsb_w) + AM_RANGE(0x04300000, 0x0430000f) AM_READWRITE(AY8910_read_port_0_lsb_r, AY8910_control_port_0_lsb_w) + AM_RANGE(0x04300010, 0x0430001f) AM_WRITE(AY8910_write_port_0_lsb_w) + AM_RANGE(0x04300100, 0x0430010f) AM_READWRITE(AY8910_read_port_1_lsb_r, AY8910_control_port_1_lsb_w) + AM_RANGE(0x04300110, 0x0430011f) AM_WRITE(AY8910_write_port_1_lsb_w) + AM_RANGE(0x04500000, 0x0450007f) AM_WRITE(tickee_control_w) AM_BASE(&tickee_control) + AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE(tms34010_io_register_r, tms34010_io_register_w) + AM_RANGE(0xc0000240, 0xc000025f) AM_WRITENOP /* seems to be a bug in their code */ + AM_RANGE(0xff000000, 0xffffffff) AM_ROM AM_REGION(REGION_USER1, 0) +ADDRESS_MAP_END + + + +/************************************* + * + * Input ports + * + *************************************/ + +static INPUT_PORTS_START( tickee ) + PORT_START + PORT_DIPNAME( 0x03, 0x01, "Game Time/Diff" ) + PORT_DIPSETTING( 0x03, "Very Fast/Very Easy" ) + PORT_DIPSETTING( 0x02, "Fast/Easy" ) + PORT_DIPSETTING( 0x01, "Average/Hard" ) + PORT_DIPSETTING( 0x00, "Slow/Very Hard" ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown )) + PORT_DIPSETTING( 0x04, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPNAME( 0x08, 0x00, "Last Box Tickets" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x08, "25" ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Unknown )) + PORT_DIPSETTING( 0x30, "0" ) + PORT_DIPSETTING( 0x20, "1" ) + PORT_DIPSETTING( 0x10, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coinage )) + PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C )) + PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C )) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C )) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C )) + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* right ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* left ticket status */ + PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START + PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) + PORT_BIT( 0xfffe, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* fake analog X */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) + + PORT_START /* fake analog Y */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) + + PORT_START /* fake analog X */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2) + + PORT_START /* fake analog Y */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2) +INPUT_PORTS_END + +static INPUT_PORTS_START( ghoshunt ) + PORT_START + PORT_DIPNAME( 0x01, 0x01, "Messages in Play") + PORT_DIPSETTING( 0x01, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPNAME( 0x02, 0x02, "Fixed Ticketing") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x02, DEF_STR( On )) + PORT_DIPNAME( 0x04, 0x04, "Setting") + PORT_DIPSETTING( 0x04, "Custom") + PORT_DIPSETTING( 0x00, DEF_STR( Standard )) + PORT_DIPNAME( 0x08, 0x08, "Messages") + PORT_DIPSETTING( 0x08, DEF_STR( Off )) + PORT_DIPSETTING( 0x00, DEF_STR( On )) + PORT_DIPNAME( 0x30, 0x00, "Tickets") + PORT_DIPSETTING( 0x30, "5") + PORT_DIPSETTING( 0x20, "10") + PORT_DIPSETTING( 0x10, "15") + PORT_DIPSETTING( 0x00, "20") + PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coinage )) + PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C )) + PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C )) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C )) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C )) + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* right ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* left ticket status */ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0xd8, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* right ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* left ticket status */ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0xd8, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* fake analog X */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) + + PORT_START /* fake analog Y */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) + + PORT_START /* fake analog X */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_PLAYER(2) + + PORT_START /* fake analog Y */ + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2) +INPUT_PORTS_END + + + +/************************************* + * + * Sound interfaces + * + *************************************/ + +static struct AY8910interface ay8910_interface_1 = +{ + input_port_0_r, + input_port_2_r +}; + +static struct AY8910interface ay8910_interface_2 = +{ + port1_r, + port2_r +}; + + + +/************************************* + * + * 34010 configuration + * + *************************************/ + +static tms34010_config tms_config = +{ + FALSE, /* halt on reset */ + 0, /* the screen operated on */ + 14318180/2, /* pixel clock */ + 1, /* pixels per clock */ + tickee_scanline_update, /* scanline callback */ + NULL, /* generate interrupt */ + NULL, /* write to shiftreg function */ + NULL /* read from shiftreg function */ +}; + + + +/************************************* + * + * Machine drivers + * + *************************************/ + +static MACHINE_DRIVER_START( tickee ) + + /* basic machine hardware */ + MDRV_CPU_ADD_TAG("main", TMS34010, 40000000/TMS34010_CLOCK_DIVIDER) + MDRV_CPU_CONFIG(tms_config) + MDRV_CPU_PROGRAM_MAP(tickee_map,0) + + MDRV_MACHINE_RESET(tickee) + MDRV_NVRAM_HANDLER(generic_1fill) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_PALETTE_LENGTH(256) + + MDRV_SCREEN_ADD("main", 0) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_RAW_PARAMS(14318180/2, 444, 0, 320, 233, 0, 200) + + MDRV_VIDEO_START(tickee) + MDRV_VIDEO_UPDATE(tms340x0) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(AY8910, 14318180/8) + MDRV_SOUND_CONFIG(ay8910_interface_1) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + + MDRV_SOUND_ADD(AY8910, 14318180/8) + MDRV_SOUND_CONFIG(ay8910_interface_2) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( ghoshunt ) + MDRV_IMPORT_FROM(tickee) + + /* basic machine hardware */ + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(ghoshunt_map,0) +MACHINE_DRIVER_END + + + +/************************************* + * + * ROM definitions + * + *************************************/ + +ROM_START( tickee ) + ROM_REGION16_LE( 0x200000, REGION_USER1, 0 ) /* 34010 code */ + ROM_LOAD16_BYTE( "3.ic4", 0x000000, 0x80000, CRC(5b1e399c) SHA1(681608f06bbaf3d258e9f4768a8a6c5047ad08ec) ) + ROM_LOAD16_BYTE( "2.ic3", 0x000001, 0x80000, CRC(1b26d4bb) SHA1(40266ec0fe5897eba85072e5bb39973d34f97546) ) + ROM_LOAD16_BYTE( "1.ic2", 0x100000, 0x80000, CRC(f7f0309e) SHA1(4a93e0e203f5a340a56b770a40b9ab00e131644d) ) + ROM_LOAD16_BYTE( "4.ic5", 0x100001, 0x80000, CRC(ceb0f559) SHA1(61923fe09e1dfde1eaae297ccbc672bc74a70397) ) +ROM_END + + +/* + +Ghost Hunter +Hanaho Games, 1996 + + and + +Tut's Tomb +Island Design Inc., 1996 + +PCB Layout +---------- + +|-----------------------------------------------| +|VOL CN106 CN103 | +| NTE1423 ADV476KN50E 74LS175 | +| | +| YM2149 V52C4258Z80 74LS138 | +| | +| YM2149 V52C4258Z80 74LS373 | +| | +| DIPSW(8) V52C4258Z80 74LS373 | +|J | +|A 74LS161 V52C4258Z80 GHOSTHUN.7K| +|M 74LS74 | +|M 74LS273 |------| GHOSTHUN.7J| +|A |TMS | | +| 74LS74 |34010 | GHOSTHUN.7H| +| |------| | +| 74LS14 GHOSTHUN.7G| +| ULN2803 |---| | +| TIP122 TIP122 |110| DS1220Y | +| TIP122 TIP122 |---| 40MHz 14.31818MHz| +| TIP122 TIP122 74LS273 | +| 74LS245 74LS374 | +|-------------------------------------|--CN2--|-| +(All IC's shown) |-------| + +Notes: + 34010 clocks - INCLK: 40.000MHz, VCLK: 7.15909MHz, HSYNC: 16.1kHz, VSYNC: 69Hz, BLANK: 69Hz + YM2149 clock - 1.7897725MHz [14.31818/8] + VSync - 69Hz + HSync - 15.78kHz + 110 - AMD MACH110 High Density Electrically-Erasable CMOS Programmable Logic (PLCC44) + ADV476KN50E - Analog Devices ADV476KN50E CMOS Monolithic 256x18 Color Palette RAM-DAC (DIP28) + DS1220Y - Dallas Semiconductor DS1220Y 16K Nonvolatile SRAM (DIP24) + V52C4258Z80 - Vitelic V52C4258Z80 ?? possibly 256K x8 SRAM (ZIP28) + NTE1423 - NTE1423 5.7W Power Amplifier (SIP8) + CN2 - DB25 connector + CN103/106 - 4-pin connector for gun hookup + ULN2803 - Motorola ULN2803 Octal High Voltage, High Current Darlington Transistor Arrays (DIP18) + TIP122 - Motorola TIP122 General-Purpose NPN Darlington Transistor (TO-220) +*/ + +ROM_START( ghoshunt ) + ROM_REGION16_LE( 0x200000, REGION_USER1, 0 ) /* 34010 code */ + ROM_LOAD16_BYTE( "ghosthun.7g", 0x000001, 0x80000, CRC(d59716c2) SHA1(717a1a1c5c559569f9e7bc4ae4356d112f0cf4eb) ) + ROM_LOAD16_BYTE( "ghosthun.7h", 0x000000, 0x80000, CRC(ef38bfc8) SHA1(12b8f29f4da120f14126cbcdf4019bedd97063c3) ) + ROM_LOAD16_BYTE( "ghosthun.7j", 0x100001, 0x80000, CRC(763d7c79) SHA1(f0dec99feeeefeddda6a88276dc306a30a58f4e4) ) + ROM_LOAD16_BYTE( "ghosthun.7k", 0x100000, 0x80000, CRC(71e6099e) SHA1(2af6f1aa304eed849c90d95d17643cb12b05baab) ) +ROM_END + + +ROM_START( tutstomb ) + ROM_REGION16_LE( 0x200000, REGION_USER1, 0 ) /* 34010 code */ + ROM_LOAD16_BYTE( "tutstomb.7g", 0x000001, 0x80000, CRC(b74d3cf2) SHA1(2221b565362183a97a959389e8a0a026ca89e0ce) ) + ROM_LOAD16_BYTE( "tutstomb.7h", 0x000000, 0x80000, CRC(177f3afb) SHA1(845f982a66a8b69b0ea0045399102e8bb33f7fbf) ) + ROM_LOAD16_BYTE( "tutstomb.7j", 0x100001, 0x80000, CRC(69094f31) SHA1(eadae8847d0ff1568e63f71bf09a84dc443fdc1c)) + ROM_LOAD16_BYTE( "tutstomb.7k", 0x100000, 0x80000, CRC(bc362df8) SHA1(7b15c646e99c916d850629e4e758b1dbb329639a) ) +ROM_END + + + +/************************************* + * + * Game drivers + * + *************************************/ + +GAME( 1994, tickee, 0, tickee, tickee, 0, ROT0, "Raster Elite", "Tickee Tickats", 0 ) +GAME( 1996, ghoshunt, 0, ghoshunt, ghoshunt, 0, ROT0, "Hanaho Games", "Ghost Hunter", 0 ) +GAME( 1996, tutstomb, 0, ghoshunt, ghoshunt, 0, ROT0, "Island Design", "Tut's Tomb", 0 ) |