summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/mame/drivers/astrocorp.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mame/drivers/astrocorp.c')
-rw-r--r--trunk/src/mame/drivers/astrocorp.c1044
1 files changed, 1044 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/astrocorp.c b/trunk/src/mame/drivers/astrocorp.c
new file mode 100644
index 00000000000..b318f5f7a3c
--- /dev/null
+++ b/trunk/src/mame/drivers/astrocorp.c
@@ -0,0 +1,1044 @@
+/*************************************************************************************************************
+
+ -= Astro Corp. CGA Hardware =-
+
+ driver by Luca Elia (l.elia@tin.it)
+
+CPU: 68000
+GFX: ASTRO V0x (x = 1,2,5,6 or 7)
+SOUND: OKI M6295 (AD-65)
+OTHER: EEPROM, Battery
+
+ 512 sprites, each made of N x M tiles. Tiles are 16x16x8
+
+-------------------------------------------------------------------------------------------------------------------
+Year + Game PCB ID CPU Video Chips Notes
+-------------------------------------------------------------------------------------------------------------------
+00 Show Hand CHE-B50-4002A 68000 ASTRO V01 ASTRO 0001B (28 pins), pLSI1016-60LJ
+00 Wang Pai Dui J. CHE-B50-4002A 68000 ASTRO V01 MDT2020AP MCU (28 pins), pLSI1016
+02 Skill Drop GA None JX-1689F1028N ASTRO V02 pLSI1016-60LJ
+03 Speed Drop None JX-1689HP ASTRO V05 pLSI1016-60LJ
+05? Zoo M1.1 ASTRO V102PX-005? ASTRO V06 ASTRO F02 2005-02-18 Encrypted
+05? Win Win Bingo M1.2 ASTRO V102PX-006? ASTRO V06 ASTRO F02 2005-09-17 Encrypted
+07? Western Venture CS350P032 ASTRO V102? ASTRO V07 ASTRO F01 2007-06-03 Encrypted
+-------------------------------------------------------------------------------------------------------------------
+
+To do:
+
+- Find source of level 2 interrupt
+
+*************************************************************************************************************/
+
+#include "emu.h"
+#include "cpu/m68000/m68000.h"
+#include "machine/eeprom.h"
+#include "machine/ticket.h"
+#include "machine/nvram.h"
+#include "sound/okim6295.h"
+
+class astrocorp_state : public driver_device
+{
+public:
+ astrocorp_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag) ,
+ m_spriteram(*this, "spriteram"),
+ m_paletteram(*this, "paletteram"){ }
+
+ /* memory pointers */
+ required_shared_ptr<UINT16> m_spriteram;
+ required_shared_ptr<UINT16> m_paletteram;
+
+ /* video-related */
+ bitmap_ind16 m_bitmap;
+ UINT16 m_screen_enable;
+ UINT16 m_draw_sprites;
+ DECLARE_WRITE16_MEMBER(astrocorp_draw_sprites_w);
+ DECLARE_WRITE16_MEMBER(astrocorp_eeprom_w);
+ DECLARE_WRITE16_MEMBER(showhand_outputs_w);
+ DECLARE_WRITE16_MEMBER(skilldrp_outputs_w);
+ DECLARE_WRITE16_MEMBER(astrocorp_screen_enable_w);
+ DECLARE_READ16_MEMBER(astrocorp_unk_r);
+ DECLARE_WRITE16_MEMBER(astrocorp_palette_w);
+};
+
+/***************************************************************************
+ Video
+***************************************************************************/
+
+static VIDEO_START( astrocorp )
+{
+ astrocorp_state *state = machine.driver_data<astrocorp_state>();
+
+ machine.primary_screen->register_screen_bitmap(state->m_bitmap);
+
+ state->save_item(NAME(state->m_bitmap));
+ state->save_item (NAME(state->m_screen_enable));
+ state->save_item (NAME(state->m_draw_sprites));
+}
+
+/***************************************************************************
+ Sprites Format
+
+ Offset: Bits: Value:
+
+ 0 f--- ---- ---- ---- Show This Sprite
+ -e-- ---- ---- ---- ? set to 0
+ --dc ba9- ---- ---- ignored?
+ ---- ---8 7654 3210 X
+
+ 1 Code
+
+ 2 fedc ba98 ---- ---- ignored?
+ ---- ---- 7654 3210 Y
+
+ 3 fedc ba98 ---- ---- X Size
+ ---- ---- 7654 3210 Y Size
+
+ If the first two words are zero, the sprite list ends
+
+***************************************************************************/
+
+static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect )
+{
+ astrocorp_state *state = machine.driver_data<astrocorp_state>();
+ UINT16 *source = state->m_spriteram;
+ UINT16 *finish = state->m_spriteram + state->m_spriteram.bytes() / 2;
+
+ for ( ; source < finish; source += 8 / 2 )
+ {
+ int x, y;
+ int xwrap, ywrap;
+
+ int sx = source[ 0x0/2 ];
+ int code = source[ 0x2/2 ];
+ int sy = source[ 0x4/2 ];
+ int attr = source[ 0x6/2 ];
+
+ int dimx = (attr >> 8) & 0xff;
+ int dimy = (attr >> 0) & 0xff;
+
+ if (!sx && !code)
+ return;
+
+ if (!(sx & 0x8000))
+ continue;
+
+ sx &= 0x01ff;
+ sy &= 0x00ff;
+
+ for (y = 0 ; y < dimy ; y++)
+ {
+ for (x = 0 ; x < dimx ; x++)
+ {
+ for (ywrap = 0 ; ywrap <= 0x100 ; ywrap += 0x100)
+ {
+ for (xwrap = 0 ; xwrap <= 0x200 ; xwrap += 0x200)
+ {
+ drawgfx_transpen(bitmap,cliprect, machine.gfx[0],
+ code, 0,
+ 0, 0,
+ sx + x * 16 - xwrap, sy + y * 16 - ywrap, 0xff);
+ }
+ }
+ code++;
+ }
+ }
+ }
+}
+
+static SCREEN_UPDATE_IND16(astrocorp)
+{
+ astrocorp_state *state = screen.machine().driver_data<astrocorp_state>();
+
+ if (state->m_screen_enable & 1)
+ copybitmap(bitmap, state->m_bitmap, 0,0,0,0, cliprect);
+ else
+ bitmap.fill(get_black_pen(screen.machine()), cliprect);
+
+ return 0;
+}
+
+
+/***************************************************************************
+ Memory Maps
+***************************************************************************/
+
+WRITE16_MEMBER(astrocorp_state::astrocorp_draw_sprites_w)
+{
+
+ UINT16 old = m_draw_sprites;
+ UINT16 now = COMBINE_DATA(&m_draw_sprites);
+
+ if (!old && now)
+ draw_sprites(machine(), m_bitmap, machine().primary_screen->visible_area());
+}
+
+WRITE16_MEMBER(astrocorp_state::astrocorp_eeprom_w)
+{
+ if (ACCESSING_BITS_0_7)
+ {
+ ioport("EEPROMOUT")->write(data, 0xff);
+ }
+}
+
+static WRITE16_DEVICE_HANDLER( astrocorp_sound_bank_w )
+{
+ if (ACCESSING_BITS_8_15)
+ {
+ okim6295_device *oki = downcast<okim6295_device *>(device);
+ oki->set_bank_base(0x40000 * ((data >> 8) & 1));
+// logerror("CPU #0 PC %06X: OKI bank %08X\n", cpu_get_pc(&space->device()), data);
+ }
+}
+
+static WRITE16_DEVICE_HANDLER( skilldrp_sound_bank_w )
+{
+ if (ACCESSING_BITS_0_7)
+ {
+ okim6295_device *oki = downcast<okim6295_device *>(device);
+ oki->set_bank_base(0x40000 * (data & 1));
+// logerror("CPU #0 PC %06X: OKI bank %08X\n", cpu_get_pc(&space->device()), data);
+ }
+}
+
+WRITE16_MEMBER(astrocorp_state::showhand_outputs_w)
+{
+ if (ACCESSING_BITS_0_7)
+ {
+ coin_counter_w(machine(), 0, (data & 0x0004)); // coin counter
+ set_led_status(machine(), 0, (data & 0x0008)); // you win
+ if ((data & 0x0010)) increment_dispensed_tickets(machine(), 1); // coin out
+ set_led_status(machine(), 1, (data & 0x0020)); // coin/hopper jam
+ }
+ if (ACCESSING_BITS_8_15)
+ {
+ set_led_status(machine(), 2, (data & 0x0100)); // bet
+ set_led_status(machine(), 3, (data & 0x0800)); // start
+ set_led_status(machine(), 4, (data & 0x1000)); // ? select/choose
+ set_led_status(machine(), 5, (data & 0x2000)); // ? select/choose
+ set_led_status(machine(), 6, (data & 0x4000)); // look
+ }
+// popmessage("%04X",data);
+}
+
+WRITE16_MEMBER(astrocorp_state::skilldrp_outputs_w)
+{
+ // key in (0001)
+ // coin in (0002)
+ // key out (0004)
+ // coin out (0008)
+ // hopper? (0010)
+ // error lamp (0020)
+ // ticket motor? (0080)
+ // select lamp (0100)
+ // take lamp (0400)
+ // bet lamp (0800)
+ // start lamp (1000)
+ // win / test lamp (4000)
+ // ticket? (8000)
+
+ // account (5d20 4d20 4520 4420 4020 4000)
+
+ if (ACCESSING_BITS_0_7)
+ {
+ coin_counter_w(machine(), 0, (data & 0x0001)); // key in |
+ coin_counter_w(machine(), 0, (data & 0x0002)); // coin in |- manual shows 1 in- and 1 out- counter
+ coin_counter_w(machine(), 1, (data & 0x0004)); // key out |
+ machine().device<ticket_dispenser_device>("hopper")->write(space, 0, (data & 0x0008)<<4); // hopper motor?
+ // (data & 0x0010) // hopper?
+ set_led_status(machine(), 0, (data & 0x0020)); // error lamp (coin/hopper jam: "call attendant")
+ machine().device<ticket_dispenser_device>("ticket")->write(space, 0, data & 0x0080); // ticket motor?
+ }
+ if (ACCESSING_BITS_8_15)
+ {
+ // lamps:
+ set_led_status(machine(), 1, (data & 0x0100)); // select
+ set_led_status(machine(), 2, (data & 0x0400)); // take
+ set_led_status(machine(), 3, (data & 0x0800)); // bet
+ set_led_status(machine(), 4, (data & 0x1000)); // start
+ set_led_status(machine(), 5, (data & 0x4000)); // win / test
+ set_led_status(machine(), 6, (data & 0x8000)); // ticket?
+ }
+
+// popmessage("%04X",data);
+}
+
+WRITE16_MEMBER(astrocorp_state::astrocorp_screen_enable_w)
+{
+ COMBINE_DATA(&m_screen_enable);
+// popmessage("%04X",data);
+ if (m_screen_enable & (~1))
+ logerror("CPU #0 PC %06X: screen enable = %04X\n", cpu_get_pc(&space.device()), m_screen_enable);
+}
+
+READ16_MEMBER(astrocorp_state::astrocorp_unk_r)
+{
+ return 0xffff; // bit 3?
+}
+
+// 5-6-5 Palette: BBBBB-GGGGGG-RRRRR
+WRITE16_MEMBER(astrocorp_state::astrocorp_palette_w)
+{
+ COMBINE_DATA(&m_paletteram[offset]);
+ palette_set_color_rgb(machine(), offset,
+ pal5bit((m_paletteram[offset] >> 0) & 0x1f),
+ pal6bit((m_paletteram[offset] >> 5) & 0x3f),
+ pal5bit((m_paletteram[offset] >> 11) & 0x1f)
+ );
+}
+
+static ADDRESS_MAP_START( showhand_map, AS_PROGRAM, 16, astrocorp_state )
+ AM_RANGE( 0x000000, 0x01ffff ) AM_ROM
+ AM_RANGE( 0x050000, 0x050fff ) AM_RAM AM_SHARE("spriteram")
+ AM_RANGE( 0x052000, 0x052001 ) AM_WRITE(astrocorp_draw_sprites_w)
+ AM_RANGE( 0x054000, 0x054001 ) AM_READ_PORT("INPUTS")
+ AM_RANGE( 0x058000, 0x058001 ) AM_WRITE(astrocorp_eeprom_w)
+ AM_RANGE( 0x05a000, 0x05a001 ) AM_WRITE(showhand_outputs_w)
+ AM_RANGE( 0x05e000, 0x05e001 ) AM_READ_PORT("EEPROMIN")
+ AM_RANGE( 0x060000, 0x0601ff ) AM_RAM_WRITE(astrocorp_palette_w) AM_SHARE("paletteram")
+ AM_RANGE( 0x070000, 0x073fff ) AM_RAM AM_SHARE("nvram") // battery
+ AM_RANGE( 0x080000, 0x080001 ) AM_DEVWRITE_LEGACY("oki", astrocorp_sound_bank_w)
+ AM_RANGE( 0x0a0000, 0x0a0001 ) AM_WRITE(astrocorp_screen_enable_w)
+ AM_RANGE( 0x0d0000, 0x0d0001 ) AM_READ(astrocorp_unk_r) AM_DEVWRITE8("oki", okim6295_device, write, 0xff00)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( showhanc_map, AS_PROGRAM, 16, astrocorp_state )
+ AM_RANGE( 0x000000, 0x01ffff ) AM_ROM
+ AM_RANGE( 0x060000, 0x0601ff ) AM_RAM_WRITE(astrocorp_palette_w) AM_SHARE("paletteram")
+ AM_RANGE( 0x070000, 0x070001 ) AM_DEVWRITE_LEGACY("oki", astrocorp_sound_bank_w)
+ AM_RANGE( 0x080000, 0x080fff ) AM_RAM AM_SHARE("spriteram")
+ AM_RANGE( 0x082000, 0x082001 ) AM_WRITE(astrocorp_draw_sprites_w)
+ AM_RANGE( 0x084000, 0x084001 ) AM_READ_PORT("INPUTS")
+ AM_RANGE( 0x088000, 0x088001 ) AM_WRITE(astrocorp_eeprom_w)
+ AM_RANGE( 0x08a000, 0x08a001 ) AM_WRITE(showhand_outputs_w)
+ AM_RANGE( 0x08e000, 0x08e001 ) AM_READ_PORT("EEPROMIN")
+ AM_RANGE( 0x090000, 0x093fff ) AM_RAM AM_SHARE("nvram") // battery
+ AM_RANGE( 0x0a0000, 0x0a0001 ) AM_WRITE(astrocorp_screen_enable_w)
+ AM_RANGE( 0x0e0000, 0x0e0001 ) AM_READ(astrocorp_unk_r) AM_DEVWRITE8("oki", okim6295_device, write, 0xff00)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( skilldrp_map, AS_PROGRAM, 16, astrocorp_state )
+ AM_RANGE( 0x000000, 0x03ffff ) AM_ROM
+ AM_RANGE( 0x200000, 0x200fff ) AM_RAM AM_SHARE("spriteram")
+ AM_RANGE( 0x202000, 0x202001 ) AM_WRITE(astrocorp_draw_sprites_w)
+ AM_RANGE( 0x204000, 0x204001 ) AM_READ_PORT("INPUTS")
+ AM_RANGE( 0x208000, 0x208001 ) AM_WRITE(astrocorp_eeprom_w)
+ AM_RANGE( 0x20a000, 0x20a001 ) AM_WRITE(skilldrp_outputs_w)
+ AM_RANGE( 0x20e000, 0x20e001 ) AM_READ_PORT("EEPROMIN")
+ AM_RANGE( 0x380000, 0x3801ff ) AM_RAM_WRITE(astrocorp_palette_w) AM_SHARE("paletteram")
+ AM_RANGE( 0x400000, 0x400001 ) AM_WRITE(astrocorp_screen_enable_w)
+ AM_RANGE( 0x500000, 0x507fff ) AM_RAM AM_SHARE("nvram") // battery
+ AM_RANGE( 0x580000, 0x580001 ) AM_DEVWRITE_LEGACY("oki", skilldrp_sound_bank_w)
+ AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( speeddrp_map, AS_PROGRAM, 16, astrocorp_state )
+ AM_RANGE( 0x000000, 0x01ffff ) AM_ROM
+ AM_RANGE( 0x280000, 0x283fff ) AM_RAM AM_SHARE("nvram") // battery
+ AM_RANGE( 0x380000, 0x380fff ) AM_RAM AM_SHARE("spriteram")
+ AM_RANGE( 0x382000, 0x382001 ) AM_WRITE(astrocorp_draw_sprites_w)
+ AM_RANGE( 0x384000, 0x384001 ) AM_READ_PORT("INPUTS")
+ AM_RANGE( 0x388000, 0x388001 ) AM_WRITE(astrocorp_eeprom_w)
+ AM_RANGE( 0x38a000, 0x38a001 ) AM_WRITE(skilldrp_outputs_w)
+ AM_RANGE( 0x38e000, 0x38e001 ) AM_READ_PORT("EEPROMIN")
+ AM_RANGE( 0x480000, 0x4801ff ) AM_RAM_WRITE(astrocorp_palette_w) AM_SHARE("paletteram")
+ AM_RANGE( 0x500000, 0x500001 ) AM_WRITE(astrocorp_screen_enable_w)
+ AM_RANGE( 0x580000, 0x580001 ) AM_DEVWRITE_LEGACY("oki", skilldrp_sound_bank_w)
+ AM_RANGE( 0x600000, 0x600001 ) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
+ADDRESS_MAP_END
+
+/***************************************************************************
+ Input Ports
+***************************************************************************/
+
+static INPUT_PORTS_START( showhand )
+ PORT_START("INPUTS") // 54000
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) // coin
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Payout") PORT_CODE(KEYCODE_F1) // payout (must be 0 on startup)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ?
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Bet / Double")
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Look / Small")
+ PORT_SERVICE_NO_TOGGLE( 0x0020, IP_ACTIVE_LOW ) // settings
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ?
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) // coin sensor
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Yes / Big")
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Hold1") // HOLD1 in test mode
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Select")
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Take")
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Reset Settings") // when 1 in test mode: reset settings (must be 0 on startup)
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ?
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN2 ) // key in
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SPECIAL ) // coin sensor
+
+ PORT_START( "EEPROMIN" )
+ PORT_BIT( 0xfff7, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_device, read_bit)
+
+ PORT_START( "EEPROMOUT" )
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit)
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( showhanc )
+ PORT_START("INPUTS") // 84000
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) // coin
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Payout") PORT_CODE(KEYCODE_F1) // payout (must be 0 on startup)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Bet / Double")
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Select")
+ PORT_SERVICE_NO_TOGGLE( 0x0020, IP_ACTIVE_LOW ) // settings
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Take") // HOLD1 in test mode
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Look / Small / Exit") // HOLD5 in test mode
+ PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Hold2") // HOLD2 in test mode
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Yes / Big") // HOLD4 in test mode
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Reset Settings") // when 1 in test mode: reset settings (must be 0 on startup)
+ PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_SPECIAL ) // must be 0 for inputs to work
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) // key in (shows an error)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START( "EEPROMIN" )
+ PORT_BIT( 0xfff7, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_device, read_bit)
+
+ PORT_START( "EEPROMOUT" )
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit)
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line)
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( skilldrp )
+ PORT_START("INPUTS")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START3 ) PORT_NAME("Select / Double")
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_SERVICE_NO_TOGGLE( 0x0020, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_T) PORT_NAME("Ticket Out")
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Bet")
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("ticket", ticket_dispenser_device, line_r) // ticket sw
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
+ PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // hopper sw
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
+
+ PORT_START( "EEPROMIN" )
+ PORT_BIT( 0xfff7, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_device, read_bit)
+
+ PORT_START( "EEPROMOUT" )
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, write_bit)
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_clock_line)
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_device, set_cs_line)
+INPUT_PORTS_END
+
+/***************************************************************************
+ Graphics Layout
+***************************************************************************/
+
+static const gfx_layout layout_16x16x8 =
+{
+ 16, 16,
+ RGN_FRAC(1, 1),
+ 8,
+ { STEP8(0,1) },
+ { STEP16(0,8) },
+ { STEP16(0,16*8) },
+ 16*16*8
+};
+
+static GFXDECODE_START( astrocorp )
+ GFXDECODE_ENTRY("sprites", 0, layout_16x16x8, 0, 1)
+GFXDECODE_END
+
+
+/***************************************************************************
+ Machine Drivers
+***************************************************************************/
+
+static const UINT16 showhand_default_eeprom[15] = {0x0001,0x0007,0x000a,0x0003,0x0000,0x0009,0x0003,0x0000,0x0002,0x0001,0x0000,0x0000,0x0000,0x0000,0x0000};
+
+static MACHINE_CONFIG_START( showhand, astrocorp_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz / 2)
+ MCFG_CPU_PROGRAM_MAP(showhand_map)
+ MCFG_CPU_VBLANK_INT("screen", irq4_line_hold)
+
+ MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_EEPROM_93C46_ADD("eeprom")
+ MCFG_EEPROM_DATA(showhand_default_eeprom, sizeof(showhand_default_eeprom))
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(58.846) // measured on pcb
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
+ MCFG_SCREEN_SIZE(320, 240)
+ MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1)
+ MCFG_SCREEN_UPDATE_STATIC(astrocorp)
+
+ MCFG_GFXDECODE(astrocorp)
+ MCFG_PALETTE_LENGTH(0x100)
+
+ MCFG_VIDEO_START(astrocorp)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_OKIM6295_ADD("oki", XTAL_20MHz/20, OKIM6295_PIN7_HIGH)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( showhanc, showhand )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(showhanc_map)
+MACHINE_CONFIG_END
+
+
+static TIMER_DEVICE_CALLBACK( skilldrp_scanline )
+{
+ int scanline = param;
+
+ if(scanline == 240) // vblank-out irq. controls sprites, sound, i/o
+ cputag_set_input_line(timer.machine(), "maincpu", 4, HOLD_LINE);
+
+ if(scanline == 0) // vblank-in? controls palette
+ cputag_set_input_line(timer.machine(), "maincpu", 2, HOLD_LINE);
+}
+
+static MACHINE_CONFIG_START( skilldrp, astrocorp_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz / 2) // JX-1689F1028N GRX586.V5
+ MCFG_CPU_PROGRAM_MAP(skilldrp_map)
+ MCFG_TIMER_ADD_SCANLINE("scantimer", skilldrp_scanline, "screen", 0, 1)
+
+ MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_EEPROM_93C46_ADD("eeprom")
+
+ MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW )
+ MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW )
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(58.846)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
+ MCFG_SCREEN_SIZE(0x200, 0x100)
+ MCFG_SCREEN_VISIBLE_AREA(0, 0x200-1, 0, 0xf0-1)
+ MCFG_SCREEN_UPDATE_STATIC(astrocorp)
+
+ MCFG_GFXDECODE(astrocorp)
+ MCFG_PALETTE_LENGTH(0x100)
+
+ MCFG_VIDEO_START(astrocorp)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_OKIM6295_ADD("oki", XTAL_24MHz/24, OKIM6295_PIN7_HIGH)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( speeddrp, skilldrp )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(speeddrp_map)
+MACHINE_CONFIG_END
+
+
+/***************************************************************************
+ ROMs Loading
+***************************************************************************/
+
+/***************************************************************************
+
+Show Hand
+(C) 2000? Astro Corp.
+
+PCB CHE-B50-4002A 88 94V-0 0002
+
+CPU 1x MC68HC000FN12 (main)
+ 1x pLSI1016-60LJ (main)
+ 1x ASTRO V01 0005 (custom)
+ 1x AD-65 (equivalent to OKI6295)(sound)
+ 1x ASTRO 0001B (custom)
+ 1x oscillator 20.000MHz
+ 1x oscillator 25.601712MHz
+
+ROMs 2x 27C512 (1,2)
+ 2x M27C801 (3,4)
+ 1x M27C4001 (5)
+ 1x 93C46 (not dumped)
+
+Note 1x 28x2 JAMMA edge connector
+ 1x 18x2 edge connector
+ 1x 10x2 edge connector
+ 1x pushbutton
+ 1x trimmer (volume)
+ 1x 2x2 switches dip
+
+Hardware info by f205v
+
+***************************************************************************/
+
+ROM_START( showhand )
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "1-8.even.u16", 0x00000, 0x10000, CRC(cf34bf0d) SHA1(72ad7ca63ef89451b2572d64cccfa764b9d9b353) )
+ ROM_LOAD16_BYTE( "2-8.odd.u17", 0x00001, 0x10000, CRC(dd031c36) SHA1(198d0e685dd2d824a04c787f8a17c173efa272d9) )
+
+ ROM_REGION( 0x200000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "4.even.u26", 0x000000, 0x100000, CRC(8a706e42) SHA1(989688ee3a5e4fc11fb502e43c9d6012488982ee) )
+ ROM_LOAD16_BYTE( "3.odd.u26", 0x000001, 0x100000, CRC(a624b750) SHA1(fc5b09f8a10cba5fb2474e1edd62a0400177a5ad) )
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "5", 0x00000, 0x80000, CRC(e6987122) SHA1(fb3e7c2399057c64b5c496a393f6f22a1e54c844) )
+ROM_END
+
+/***************************************************************************
+
+Show Hand
+Astro Corp, 199?
+
+PCB Layout
+----------
+CHE-B50-4002A
+|----------------------------------------|
+| LATTICE JAMMA SW VOL UPC1242|
+| PLSI1016 U26 |
+| 6264 U43|
+| U25 M6295 |
+| 68000 |
+| U17 |-----| |
+| |ASTRO| |
+| U16 |V01 | |
+| |-----|MDT2020AP/3V
+| 6264 20MHz |
+|DSW(2) 26.601712MHz|
+|93C46 6116 6116 KM681000 |
+|BATTERY 6116 6116 KM681000 |
+|----------------------------------------|
+Notes:
+ 68000 clock - 10.000MHz [20/2]
+ M6295 clock - 1.000MHz [20/20], pin 7 HIGH
+ VSync - 58.846Hz
+ HSync - 15.354kHz
+
+Hardware info by Guru
+
+***************************************************************************/
+
+ROM_START( showhanc )
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "1even.u16", 0x00000, 0x10000, CRC(d1295bdb) SHA1(bb035ee89b21368fb11c3b9cd23164b68feb84bd) )
+ ROM_LOAD16_BYTE( "2odd.u17", 0x00001, 0x10000, CRC(bbca78e7) SHA1(a163569acad8d6b8821602ce24013fc46887aba9) )
+
+ ROM_REGION( 0x200000, "sprites", 0 )
+ ROM_LOAD16_BYTE( "4even.u26", 0x00000, 0x100000, CRC(285375e0) SHA1(63b47105f0751c65e528139074f5b342450495ba) )
+ ROM_LOAD16_BYTE( "3odd.u25", 0x00001, 0x100000, CRC(b93e3a91) SHA1(5192375c32518532e08bddfe000efdee587e1ecc) )
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "5.u43", 0x00000, 0x80000, CRC(d6b70f02) SHA1(5a94680594c1f06196fe3bcf7faf56e2ed576f01) )
+ROM_END
+
+/***************************************************************************
+
+Skill Drop Georgia
+
+"Sep 13 2002 09:17:54" in code rom and AAI276832 on sticker.
+
+No specific PCB model or numer....
+
+ Astro V02 0022 160pin PQFP ("ASTRO02" silkscreened under chip)
+ JX-1689F1028N GRC586.V5 (68K core, has direct connection to program roms)
+ Lattice IspLSI 1016 60LJ socketted FPGA
+ OKI 6295 clone chip (AD-65 or U6295)
+
+EEPROM Atmel 93C46
+Battery 3.6V
+OSC 24.000MHz
+
+PC1 is a push button for test mode
+VR1 is for sound volume
+
+ +---------+ +----------------------------+ +----+
+ +---+Connector+---+ 28 Pin Edge Connector +-+ |
+ | VR1|
+ | |
++-+ +------+ |
+| ULN2003A |IspLSI| UT6264CPC ROM#4* |
+| ULN2003A | 1016 | +---------+ |
+|8 +------++----------+ |ROM#6 U26| |
+| |ROM#2 U20| +---------+ +----+|
+|L +-------+ +----------+ ROM#3* |6295||
+|i | JX- | +----+|
+|n | 1689F | +--------------+ |
+|e | 1028N | | ROM#7 U100 | |
+|r +-------+ +--------------+ |
+| +----------+ +---+
+|C +----------+ | | | |
+|o |ROM#1 U21| | Astro | | R |
+|n +----------+ | V02 | | O |
+|n | 0022 | | M |
+|e +----------+ | # |
+|c UT6264CPC | 5 |
+|t | |
+|o +---+
+|r 93C46 6116 6116 RAM1 |
+| 24MHz|
++-+ BAT1 PC1 6116 6116 RAM1 |
+ +-----------------------------------------------------+
+
+ROM#1 & ROM#2 are 32pin sockets
+ROM#7 is a 40pin socket
+ROM#3 & ROM#4 at U27 & U25 are optional unpopulated 32pin sockets and overlap with ROM#6
+ROM#6 is 29F1610MC flash rom
+
+RAM1 are SEC KM681000BLG-7L RAM chips
+
+***************************************************************************/
+
+ROM_START( skilldrp )
+ ROM_REGION( 0x40000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "7-skill_drop_g1.0s.u100", 0x00000, 0x40000, CRC(f968b783) SHA1(1d693b1d460e659ca94aae8625ea26e120053f84) )
+
+ ROM_REGION( 0x200000, "sprites", 0 )
+ ROM_LOAD( "mx29f1610amc.u26", 0x000000, 0x200000, CRC(4fdac800) SHA1(bcafceb6c34866c474714347e23f9e819b5fcfa6) )
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "5-skill_drop", 0x00000, 0x80000, CRC(a479e06d) SHA1(ee690d39188b8a43652c4aa5bf8267c1f6632d2f) ) // No chip location just "ROM#5" silkscreened under socket
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD( "skilldrp.u6", 0x00, 0x80, CRC(57886a3d) SHA1(bad8fa2ec2262ccb5ef8ec50959aec3f3bf8b90b) )
+ROM_END
+
+/***************************************************************************
+
+Speed Drop
+
+"16:01:26 Sep 3 2003" in code
+
+No specific PCB model or numer, same as used for Skill Drop but with newer video chip
+
+ Astro V05 0206 160pin PQFP ("ASTRO02" silkscreened under chip)
+ JX-1689HP TA5265188 (68K core, has direct connection to program roms)
+ Lattice IspLSI 1016 60LJ socketted FPGA
+ OKI 6295 clone chip (AD-65 or U6295)
+
+EEPROM Atmel 93C46
+Battery 3.6V
+OSC 24.000MHz
+
+PC1 is a push button for test mode
+VR1 is for sound volume
+
+ +---------+ +----------------------------+ +----+
+ +---+Connector+---+ 28 Pin Edge Connector +-+ |
+ | VR1|
+ | |
++-+ +------+ |
+| ULN2003A |IspLSI| UT6264CPC ROM#4* |
+| ULN2003A | 1016 | +---------+ |
+|8 +------++----------+ |ROM#6 U26| |
+| |ROM#2 U20| +---------+ +----+|
+|L +-------+ +----------+ ROM#3* |6295||
+|i | JX- | +----+|
+|n | 1689HP| +--------------+ |
+|e | | | ROM#7 U100 | |
+|r +-------+ +--------------+ |
+| +----------+ +---+
+|C +----------+ | | | |
+|o |ROM#1 U21| | Astro | | R |
+|n +----------+ | V05 | | O |
+|n | 0206 | | M |
+|e +----------+ | # |
+|c UT6264CPC | 5 |
+|t | |
+|o +---+
+|r 93C46 6116 6116 RAM1 |
+| 24MHz|
++-+ BAT1 PC1 6116 6116 RAM1 |
+ +-----------------------------------------------------+
+
+ROM#1 & ROM#2 are 32pin sockets
+ROM#7 is a 40pin socket
+ROM#3 & ROM#4 at U27 & U25 are optional unpopulated 32pin sockets and overlap with ROM#6
+ROM#6 is 29F1610MC flash rom
+
+RAM1 are SEC KM681000BLG-7L RAM chips
+
+1 SPEED DROP 1.06 is a WinBond W27C512
+2 SPEED DROP 1.06 is a WinBond W27C512
+5 SPEED DROP is ST 27C4001
+
+***************************************************************************/
+
+ROM_START( speeddrp )
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "1_speed_drop_1.06.u21", 0x00000, 0x10000, CRC(ff4d0859) SHA1(abdb90d3498f64a9ac779f5fd66d313c1df3425b) )
+ ROM_LOAD16_BYTE( "2_speed_drop_1.06.u20", 0x00001, 0x10000, CRC(a00cc120) SHA1(eb1e9a084aca18e71901ed599f4621c301bab43e) )
+
+ ROM_REGION( 0x200000, "sprites", 0 )
+ ROM_LOAD( "mx29f1610amc.u26", 0x000000, 0x200000, CRC(baa0f728) SHA1(12f0e7689eb6555f86ac9a7272e8e119faa968e0) )
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "5_speed_drop", 0x00000, 0x80000, CRC(684bb8b5) SHA1(65276ce03da7be7275646f5a0d9d163eecb78190) ) // No chip location just "ROM#5" silkscreened under socket
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD16_WORD_SWAP( "93c46.u6", 0x00, 0x80, CRC(6890534e) SHA1(a62893015e53c02551d57d0e1cce436b6df8d289) )
+ROM_END
+
+/***************************************************************************
+
+Western Venture
+(c) ASTRO
+
+ASTRO V07 0709
+ASTRO F01 2007-06-03
+ASTRO ??? (V102?)
+AD-65?
+93C46 EEPROM
+
+XTAL 24 MHz (near F01)
+XTAL 18.432 MHz (near empty 44 pin PLCC socket and RS232?)
+
+Push Button
+
+ROM types:
+
+EV29001TSC-70R
+MX29F1610MC-10
+
+***************************************************************************/
+
+ROM_START( westvent )
+ ROM_REGION( 0x40000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "1_w.v.aa.02.d.bin", 0x00000, 0x20000, CRC(5e208192) SHA1(5a35a419fe95513b68423d4eb6c77fdd375667f3) ) // good?
+ ROM_LOAD16_BYTE( "2_w.v.aa.02.d.bin", 0x00001, 0x20000, BAD_DUMP CRC(f56d3ead) SHA1(2cf8960eab221cfce1c7ac6a20d002c4b05d8cc6) ) // FIXED BITS (xxxxxx0xxxxxxxxx)
+
+ ROM_REGION( 0x600000, "sprites", 0 )
+ ROM_LOAD( "top.bin", 0x000000, 0x200000, CRC(75bbaae0) SHA1(ef35775dd481ff343df1ee071ccd52b024d084b7) )
+ ROM_LOAD( "bottom.bin", 0x200000, 0x200000, CRC(e2dd58d5) SHA1(9ab881cfb2ee6cbc48aa28ba28529adb00803e44) )
+ ROM_LOAD( "middle.bin", 0x400000, 0x200000, CRC(7348fd37) SHA1(b5ec0994afb5bceae5627c37f1b35c7abcfd2f0a) )
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "5.bin", 0x00000, 0x80000, CRC(92dc09d1) SHA1(6b448b3372e78047d054c5e42fcfcff7f75ff9b9) )
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD( "at93c46.bin", 0x00, 0x80, CRC(fd961d46) SHA1(e238da65e8769575f17b4464fb00f5c4813bafab) )
+ROM_END
+
+/***************************************************************************
+
+Win Win Bingo
+
+ASTRO M1.2 PCB:
+ Astro V06 0430 160pin PQFP ("ASTRO02" silkscreened under chip)
+ Boards are known to have either Astro V06 0430 or Astro V07 0610
+ Astro V102PX-006 at U10 (68K core, has direct connection to program roms)
+ Astro F02 2005-09-17 socketted FPGA type chip (used for encryption?)
+ OKI 6295 clone chip (AD-65 or U6295)
+
+RAM:
+ 2 x HMI HM62C64P-70
+ 4 x HMI HM6116P-70
+ 2 x BSI BS62LV1023SC-70
+
+EEPROM 93C46
+Battery 3.6V
+OSC 24MHz
+
+PC1 is a push button for test mode
+VR1 is for sound volume
+
+ +---------+ +----------------------------+ +----+
+ +---+Connector+---+ 28 Pin Edge Connector +-+ |
+ | VR1|
+ | 24MHz +---------+ |
++-+ +-------+ |ROM#4 U30| |
+| | Astro | HM62C64P +---------+ |
+| | F2 | +----------+ +---------+ |
+|8 | | |ROM#2 U25| |ROM#3 U26| |
+| ULN2003A +-------+ +----------+ +---------+ |
+|L |
+|i ULN2003A +------+ |
+|n |Astro | ROM#7* +----+|
+|e |V102PX| |6295||
+|r +------+ +----+|
+| +----------+ |
+|C +----------+ | | +---+
+|o |ROM#1 U26| | Astro | | |
+|n +----------+ | V06 | | R |
+|n | 0430 | | O |
+|e +----------+ | M |
+|c HM62C64P | # |
+|t J1 | 5 |
+|o 93C46 | |
+|r 6116 6116 RAM1 +---+
+| |
++-+ BAT1 PC1 6116 6116 RAM1 |
+ +-----------------------------------------------------+
+
+ROM#7 at U16 is an unpopulated 40pin socket
+ROM#1 & ROM#2 are SYNCMOS F29C51001T
+ROM#3 is a 29F1610MC flash rom
+ROM#4 is a 29F1610MC flash rom (optionally populated based on game)
+ROM#5 is a MX 27C4000PC-12
+
+RAM1 are BSI BS62LV1023SC-70 RAM chips
+
+J1 is an 2 pin connector, unknown purpose
+
+***************************************************************************/
+
+ROM_START( winbingo )
+ ROM_REGION( 0x40000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "f29c51001t.u31", 0x00000, 0x20000, CRC(964cfdb5) SHA1(01109466e07f5e906be300bc69310171d34f2e6c) )
+ ROM_LOAD16_BYTE( "f29c51001t.u25", 0x00001, 0x20000, CRC(4ebeec72) SHA1(c603265e6319cff94a0c75017a12c6d86787f906) )
+
+ ROM_REGION( 0x400000, "sprites", ROMREGION_ERASE )
+ ROM_LOAD( "mxf291610mc.u26", 0x000000, 0x200000, CRC(ad1f61e7) SHA1(845aa01d49c50bcadaed16d76c0dd9131a425b46) )
+ ROM_LOAD( "mx29f1610mc.u30.bad.dump", 0x200000, 0x0a0000, BAD_DUMP CRC(6da439c5) SHA1(6afc0c800fe57b9b34ca317f4d1c040b11d3d988) ) /* Should be same as U30 below?? */
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "mx27c4000pc.u35", 0x00000, 0x80000, CRC(445d81c0) SHA1(cacb9c262740c31ea42f406e9f960a1edd1b3ead) )
+ROM_END
+
+ROM_START( winbingoa )
+ ROM_REGION( 0x40000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "f29c51001t(__alt).u31", 0x00000, 0x20000, CRC(c33676c3) SHA1(9f5b7d05d187cf59948a572f80c55cb8fa1f656f) )
+ ROM_LOAD16_BYTE( "f29c51001t(__alt).u25", 0x00001, 0x20000, CRC(43c7b2d8) SHA1(16ee79c34b7c485dfccecdf3e0ae9f18f8a20150) )
+
+ ROM_REGION( 0x400000, "sprites", 0 )
+ ROM_LOAD( "mx29f1610mc.u26", 0x000000, 0x200000, CRC(ad1f61e7) SHA1(845aa01d49c50bcadaed16d76c0dd9131a425b46) )
+ ROM_LOAD( "mx29f1610mc.u30", 0x200000, 0x200000, CRC(31613d99) SHA1(1c720f8d981c3e9cb9d9b3b27eb95e7f72ccfc93) )
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "mx27c4000pc(__alt).u35", 0x00000, 0x80000, CRC(e48ed57d) SHA1(11995b90e70e010b292ba9db2da0af4ebf795c1a) )
+ROM_END
+
+/***************************************************************************
+
+Zoo by Astro
+
+ASTRO M1.1 PCB:
+ Astro V06 0430 160pin PQFP ("ASTRO02" silkscreened under chip)
+ Astro V102PX-005 T042652846 at U10 (68K core, has direct connection to program roms)
+ Astro F02 2005-02-18 socketted FPGA type chip (used for encryption?)
+ OKI 6295 clone chip (AD-65 or U6295)
+
+RAM:
+ 2 x KTC KT76C88-70LL
+ 4 x HM6116L-70
+ 2 x BSI BS62LV1025SC-70
+
+EEPROM 93C46
+Battery 3.6V
+OSC 26.824MHz
+
+PC1 is a push button for test mode
+VR1 is for sound volume
+
+
+ZOO Z0.02.D at both U25 & U26 are Winbond W27C512 roms and are program code
+5 ZOO is a MX 27C4000 rom and is the sample rom
+29F1610mc at U26 (yes "U26" is present twice on the PCB) are the graphics
+
+ +---------+ +----------------------------+ +----+
+ +---+Connector+---+ 28 Pin Edge Connector +-+ |
+ | VR1|
+ | 26.824MHz +---------+ |
++-+ +-------+ |ROM#4 U30| |
+| | Astro | KT76C88 +---------+ |
+| | F2 | +----------+ +---------+ |
+|8 | | |ROM#2 U25| |ROM#3 U26| |
+| ULN2003A +-------+ +----------+ +---------+ |
+|L |
+|i ULN2003A +------+ |
+|n |Astro | ROM#7* +----+|
+|e |V102PX| |6295||
+|r +------+ +----+|
+| +----------+ |
+|C +----------+ | | +---+
+|o |ROM#1 U26| | Astro | | |
+|n +----------+ | V06 | | R |
+|n | 0430 | | O |
+|e +----------+ | M |
+|c KT76C88 | # |
+|t J1 | 5 |
+|o 93C46 | |
+|r 6116 6116 RAM1 +---+
+| |
++-+ BAT1 PC1 6116 6116 RAM1 |
+ +-----------------------------------------------------+
+
+ROM#7 at U16 is an unpopulated 40pin socket
+ROM#3 is a 29F1610MC flash rom
+ROM#4 is a 29F1610MC flash rom (optionally populated based on game)
+
+RAM1 are BSI BS62LV1025SC-70 RAM chips
+
+J1 is an 2 pin connector, unknown purpose
+
+***************************************************************************/
+
+ROM_START( zoo )
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "zoo_zo.02.d.u25", 0x00000, 0x10000, CRC(8566aa21) SHA1(319192e2074f3bdda6001d8e9a4b97e98826d7ce) )
+ ROM_LOAD16_BYTE( "zoo_zo.02.d.u26", 0x00001, 0x10000, CRC(1a3be45a) SHA1(877be4c9e8d5e7c4644e7bcb9a6729443ed772a4) )
+
+ ROM_REGION( 0x200000, "sprites", 0 )
+ ROM_LOAD( "29f1610mc.u26", 0x000000, 0x200000, CRC(f5cfd915) SHA1(ec869b47d0762102509dcfc1349d94340037fad5) )
+
+ ROM_REGION( 0x80000, "oki", 0 )
+ ROM_LOAD( "5_zoo", 0x00000, 0x80000, CRC(b0c9f7aa) SHA1(99345ba0f8da3907f26c9bd29d70135f3ab7cd60) )
+
+ ROM_REGION16_BE( 0x80, "eeprom", 0 )
+ ROM_LOAD( "zoo_93c46", 0x00, 0x80, CRC(0053fcc4) SHA1(e67a495f9586dd3946f79d50506fba1ae913f6ec) )
+ROM_END
+
+
+
+static DRIVER_INIT( showhand )
+{
+#if 0
+ UINT16 *rom = (UINT16*)machine.root_device().memregion("maincpu")->base();
+
+ rom[0x0a1a/2] = 0x6000; // hopper jam
+
+ rom[0x1494/2] = 0x4e71; // enable full test mode
+ rom[0x1496/2] = 0x4e71; // ""
+ rom[0x1498/2] = 0x4e71; // ""
+
+ rom[0x12f6/2] = 0x6000; // rom error
+ rom[0x4916/2] = 0x6000; // rom error
+#endif
+}
+
+static DRIVER_INIT( showhanc )
+{
+#if 0
+ UINT16 *rom = (UINT16*)machine.root_device().memregion("maincpu")->base();
+
+ rom[0x14d4/2] = 0x4e71; // enable full test mode
+ rom[0x14d6/2] = 0x4e71; // ""
+ rom[0x14d8/2] = 0x4e71; // ""
+
+ rom[0x139c/2] = 0x6000; // rom error
+#endif
+}
+
+GAME( 2000, showhand, 0, showhand, showhand, showhand, ROT0, "Astro Corp.", "Show Hand (Italy)", GAME_SUPPORTS_SAVE )
+GAME( 2000, showhanc, showhand, showhanc, showhanc, showhanc, ROT0, "Astro Corp.", "Wang Pai Dui Jue (China)", GAME_SUPPORTS_SAVE )
+GAME( 2002, skilldrp, 0, skilldrp, skilldrp, 0, ROT0, "Astro Corp.", "Skill Drop Georgia (Ver. G1.0S)", GAME_SUPPORTS_SAVE )
+GAME( 2003, speeddrp, 0, speeddrp, skilldrp, 0, ROT0, "Astro Corp.", "Speed Drop (Ver. 1.06)", GAME_SUPPORTS_SAVE )
+GAME( 2005?, winbingo, 0, showhand, showhand, 0, ROT0, "Astro Corp.", "Win Win Bingo (set 1)", GAME_NOT_WORKING )
+GAME( 2005?, winbingoa, winbingo, showhand, showhand, 0, ROT0, "Astro Corp.", "Win Win Bingo (set 2)", GAME_NOT_WORKING )
+GAME( 2005?, zoo, 0, showhand, showhand, 0, ROT0, "Astro Corp.", "Zoo (Ver. ZO.02.D)", GAME_NOT_WORKING )
+GAME( 2007?, westvent, 0, showhand, showhand, 0, ROT0, "Astro Corp.", "Western Venture (Ver. AA.02.D)", GAME_NOT_WORKING )