summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/laserbas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/laserbas.cpp')
-rw-r--r--src/mame/drivers/laserbas.cpp514
1 files changed, 0 insertions, 514 deletions
diff --git a/src/mame/drivers/laserbas.cpp b/src/mame/drivers/laserbas.cpp
deleted file mode 100644
index 38409cf90f1..00000000000
--- a/src/mame/drivers/laserbas.cpp
+++ /dev/null
@@ -1,514 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders: Tomasz Slanina, Morten Shearman Kirkegaard, Samuel Neves, Peter Wilhelmsen
-
-/********************************************
- Laser Base / Future Flash driver
-
-============================================
-TODO:
-- Video: weird palette changes, Laserbase colors, missing bg scrolling between stages (CRT address lines + m_hset ( or m_vset ?))
-- Sound: sound related i/o writes ( out_w handler )
-- Interrupts - NMI/Int timing is wrong, it's based on measures of broken PCB
-TS 20.01.2017
-
-There's incomplete schematics available. It's missing a couple of important elements (analog sound, interrupts).
-PCB contains big analog sound section, currently only partially emulated ( timers + counters + xors + dacs). There's many capacitors,
-resistors and few ICs, including:
-
-7B LM2902N - Op Amps
-4B LM2902N
-2B LM2902N
-1B LM2902N
-6B LM1496N - Balanced Modulator-Demodulator
-3B CA3080E - Op Amp
-6C NE555P - Timer
-4A NE555P - Timer
-6A SN94560AN - ? a tone generator (similar to SN76477 ?)
-3A MB84013B - Dual D flip-flop
-2A MN3008 - 2048-stage long delay low noise BBD (reverb effect generator)
-1C MB3712 - Power Amp.
-
-DASM notes:
-
-0x100: check if test mode bit is active.
-0x3ae8: ?
-0x3aec: tests 0xfc00 work ram ONLY, resets if fails
-0x3afe: fill 0xfc00-0xffff to zero
-0x20dc: writes ROM 0x3146 to prot RAM 0xf800-0xfbff
-0x20e9: reads from 0xfa47, A = (n & 0x8) | 0x80 then HL = 0x0200 | A
-0x2cef: unknown, reads from 0x02** to 0x2d00, fancy ROM checksum?
-...
-0x0577
-
-NOTE: None of the current sets passes the ROM check
-
-laserbas 1) 2) 3) 4) 5) 6) 7) 8) Z1)
-measured: 16 62 9F AD D4 BE 6C 01 AB
-expected: 17 5B CC 62 D4 23 6C 01 3E <- From ROM 4
- 1 1 1 1 0 1 0 0 1 <- 1 = BAD
-
-laserbasa 1) 2) 3) 4) 5) 6) 7) 8) Z1)
-measured: 0A 62 F6 AD D4 BE 6C 01 AB
-expected: 17 5B CC 62 D4 23 6C 01 3E <- From ROM 4
- 1 1 1 1 0 1 0 0 1 <- 1 = BAD
-
-futflash 1) 2) 3) 4) 5) 6) 7) 8) Z1)
-measured: 43 5B CC 9A D4 23 6C 01 AB
-expected: 43 FB CC 9A D4 23 6C 01 3E <- From ROM 4
- 0 1 0 0 0 0 0 0 1 <- 1 = BAD
-
-********************************************/
-
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "machine/pit8253.h"
-#include "machine/timer.h"
-#include "sound/dac.h"
-#include "sound/volt_reg.h"
-#include "video/mc6845.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-
-class laserbas_state : public driver_device
-{
-public:
- laserbas_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_palette(*this, "palette"),
- m_dac(*this, "dac%u", 1U)
- { }
-
- void laserbas(machine_config &config);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
-private:
- /* misc */
- int m_dac_data;
- int m_counter[6];
- int m_cnt_out[6];
- int m_nmi;
- /* video-related */
- int m_vrambank;
- uint8_t m_vram[0x10000];
- int m_hset, m_vset;
- int m_bset;
- int m_scl;
- bool m_flipscreen;
- uint64_t m_z1data;
-
- required_device<cpu_device> m_maincpu;
- required_device<palette_device> m_palette;
- required_device_array<dac_byte_interface, 6> m_dac;
-
- DECLARE_READ8_MEMBER(vram_r);
- DECLARE_WRITE8_MEMBER(vram_w);
- DECLARE_WRITE8_MEMBER(videoctrl_w);
- DECLARE_READ8_MEMBER(z1_r);
- DECLARE_READ8_MEMBER(track_lo_r);
- DECLARE_READ8_MEMBER(track_hi_r);
- DECLARE_WRITE8_MEMBER(out_w);
- template<uint8_t Which> DECLARE_WRITE_LINE_MEMBER(pit_out_w);
- TIMER_DEVICE_CALLBACK_MEMBER(laserbas_scanline);
- MC6845_UPDATE_ROW(crtc_update_row);
-
- void laserbas_io(address_map &map);
- void laserbas_memory(address_map &map);
-};
-
-TIMER_DEVICE_CALLBACK_MEMBER( laserbas_state::laserbas_scanline )
-{
- int scanline = param;
-
- if(scanline == 0 || scanline == 135)
- {
- m_maincpu->set_input_line(0, HOLD_LINE );
- }
-
- if(scanline == 240 && m_nmi)
- {
- m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
- }
-}
-
-MC6845_UPDATE_ROW( laserbas_state::crtc_update_row )
-{
- int x = 0;
- int x_max = 0x100;
- int dx = 1;
-
- if (m_flipscreen)
- {
- y = 0xdf - y;
- x = 0xff;
- x_max = -1;
- dx = -1;
- }
-
- int pixaddr = y << 8;
- const rgb_t *palette = m_palette->palette()->entry_list_raw();
- uint32_t *b = &bitmap.pix32(y);
-
- while (x != x_max)
- {
- int offset = (pixaddr >> 1) & 0x7fff;
- int shift = (pixaddr & 1) * 4; // two 4 bit pixels in one byte
- int p1 = (m_vram[offset] >> shift) & 0xf;
- int p2 = (m_vram[offset + 0x8000] >> shift) & 0xf; // 0x10000 VRAM, two 4 bit layers 0x8000 bytes each
- int p;
-
- if (p2)
- p = p2;
- else if (p1)
- p = p1 + 16;
- else
- p = m_bset;
-
- b[x] = palette[p];
-
- pixaddr++;
- x += dx;
- }
-}
-
-READ8_MEMBER(laserbas_state::vram_r)
-{
- return m_vram[offset+(m_vrambank?0x8000:0)];
-}
-
-WRITE8_MEMBER(laserbas_state::vram_w)
-{
- m_vram[offset+(m_vrambank?0x8000:0)] = data;
-}
-
-WRITE8_MEMBER(laserbas_state::videoctrl_w)
-{
- if (!(offset&1))
- {
- m_vrambank = data & 0x40; // layer select
- m_flipscreen = !(data & 0x80);
- m_vset = (data>>3)&7; // inc-ed on interrupts ( 8 ints / frame ?)
- m_hset = data&7;
- }
- else
- {
- data^=0xff;
- m_bset = data>>4; // bg pen
- m_scl = (data&8)>>3; // unknown
- m_nmi=data&1; // nmi enable (not on schematics, traced)
- }
-}
-
-READ8_MEMBER(laserbas_state::z1_r)
-{
- m_z1data = (m_z1data >> 10) | (uint64_t(offset & 0x03ff) << 30);
-
- auto const x = [this] (unsigned b) { return BIT(m_z1data, b); };
- auto const nx = [this] (unsigned b) { return BIT(~m_z1data, b); };
- auto const MUX2 = [] (bool s, uint16_t a, uint16_t b) { return s ? a : b; };
-
- uint8_t const bit7 = MUX2(x(36) & x(33), x(31) ^ x(35), (nx(33) & (nx(20) | nx(36))) | (nx(36) & x(24)));
- uint8_t const bit6 = MUX2(x(36), MUX2(x(33), x(29), nx(23) | x(30)), x(33) & x(15));
- uint8_t const bit5 = MUX2(x(36), nx(33) & x(27), x(32) | x(33));
- uint8_t const bit4 = MUX2(x(36), MUX2(x(33), nx(24), nx(35)), MUX2(nx(33), x(4), MUX2(nx(26), x(5) & x(23), MUX2(x(23), x(19), nx(13) | x(20)))));
- uint8_t const bit3 = MUX2(x(36), x(33) & x(11), MUX2(x(33), x(25) | nx(31), x(24)));
- uint8_t const bit2 = MUX2(x(33), MUX2(x(36), x(28), x(20)), MUX2(x(36), nx(11), nx(39)));
- uint8_t const bit1 = MUX2(x(36), MUX2(x(23), MUX2(x(26), nx(18), nx(10)) | x(33), MUX2(x(26), x(1), x(29)) & nx(33)), MUX2(x(33), x(7), x(17)));
- uint8_t const bit0 = MUX2(x(33), MUX2(x(36), x(22), nx(26)), MUX2(x(36), x(14), x(21)));
-
- return (bit7 << 7) | (bit6 << 6) | (bit5 << 5) | (bit4 << 4) | (bit3 << 3) | (bit2 << 2) | (bit1 << 1) | (bit0 << 0);
-}
-
-READ8_MEMBER(laserbas_state::track_lo_r)
-{
- uint8_t dx = ioport("TRACK_X")->read();
- uint8_t dy = ioport("TRACK_Y")->read();
- if (dx & 0x10)
- dx ^= 0xf;
- if (dy & 0x10)
- dy ^= 0x0f;
- int data = (dx & 0x0f) | ((dy & 0x0f) << 4);
- return data;
-}
-
-READ8_MEMBER(laserbas_state::track_hi_r)
-{
- int data = ((ioport("TRACK_X")->read() & 0x10) >> 4) | ((ioport("TRACK_Y")->read() & 0x10) >> 3);
- return data;
-}
-
-WRITE8_MEMBER(laserbas_state::out_w)
-{
- /* sound related , maybe also lamps */
-}
-
-void laserbas_state::machine_start()
-{
- save_item(NAME(m_vram));
- save_item(NAME(m_flipscreen));
- save_item(NAME(m_vrambank));
- save_item(NAME(m_hset));
- save_item(NAME(m_vset));
- save_item(NAME(m_bset));
- save_item(NAME(m_scl));
- save_item(NAME(m_nmi));
- save_item(NAME(m_dac_data));
- save_item(NAME(m_counter));
- save_item(NAME(m_cnt_out));
- save_item(NAME(m_z1data));
-}
-
-void laserbas_state::machine_reset()
-{
- m_vrambank = 0;
- m_flipscreen = false;
- m_nmi=0;
- m_bset = 0;
- m_hset = 0;
- m_vset = 0;
- m_scl = 0;
-}
-
-template<uint8_t Which>
-WRITE_LINE_MEMBER(laserbas_state::pit_out_w)
-{
- state^=1; // 7404 (6G)
- if((!state)& m_cnt_out[Which]){ // 0->1 rising edge CLK
- m_counter[Which] = (m_counter[Which]+1)&0x0f; // 4 bit counters 74393
- }
- int data =(state) | ((m_counter[Which]&7)<<1); // combine output from 8253 with counter bits 0-3
- data<<=4;
- if(m_counter[Which]&8) data^=0x0f; // counter bit 4 xors the data ( 7486 x 6)
- m_dac[Which]->write(data); // 4 resistor packs : 47k, 100k, 220k, 470k
-
- m_cnt_out[Which]=state;
-}
-
-void laserbas_state::laserbas_memory(address_map &map)
-{
- map(0x0000, 0x3fff).rom();
- map(0x4000, 0xbfff).rw(FUNC(laserbas_state::vram_r), FUNC(laserbas_state::vram_w));
- map(0xc000, 0xf7ff).rom().nopw();
- map(0xf800, 0xfbff).r(FUNC(laserbas_state::z1_r)).nopw(); /* protection device */
- map(0xfc00, 0xffff).ram();
-}
-
-void laserbas_state::laserbas_io(address_map &map)
-{
- map.global_mask(0xff);
- map(0x00, 0x00).w("crtc", FUNC(mc6845_device::address_w));
- map(0x01, 0x01).w("crtc", FUNC(mc6845_device::register_w));
- map(0x10, 0x11).w(FUNC(laserbas_state::videoctrl_w));
- map(0x20, 0x20).portr("DSW");
- map(0x21, 0x21).portr("INPUTS");
- map(0x22, 0x22).r(FUNC(laserbas_state::track_hi_r));
- map(0x23, 0x23).r(FUNC(laserbas_state::track_lo_r));
- map(0x20, 0x23).w(FUNC(laserbas_state::out_w));
- map(0x40, 0x43).rw("pit0", FUNC(pit8253_device::read), FUNC(pit8253_device::write));
- map(0x44, 0x47).rw("pit1", FUNC(pit8253_device::read), FUNC(pit8253_device::write));
- map(0x80, 0x9f).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
-}
-
-static INPUT_PORTS_START( laserbas )
- PORT_START("DSW") // $20
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Difficulty ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x04, "10k" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x00, "30k" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_B ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_A ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_6C ) ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x20)
- // To do: split into separate switches (easier to debug as it is now though)
- PORT_DIPNAME( 0xff, 0xfe, "Service Mode Test" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x00)
- PORT_DIPSETTING( 0xfe, "S RAM CHECK" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x00)
- PORT_DIPSETTING( 0xfd, "D RAM CHECK F" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x00)
- PORT_DIPSETTING( 0xfb, "D RAM CHECK B" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x00)
- PORT_DIPSETTING( 0xf7, "ROM CHECK" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x00)
- PORT_DIPSETTING( 0xef, "CRT INVERT CHECK" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x00) // press start 2
- PORT_DIPSETTING( 0xdf, "SWITCH CHECK" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x00)
- PORT_DIPSETTING( 0xbf, "COLOR CHECK" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x00)
- PORT_DIPSETTING( 0x7f, "SOUND CHECK" ) PORT_CONDITION("INPUTS", 0x20, EQUALS, 0x00)
-
- PORT_START("INPUTS") // $21
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service coin
-
- PORT_START("TRACK_X")
- PORT_BIT( 0x01f, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_RESET
-
- PORT_START("TRACK_Y")
- PORT_BIT( 0x01f, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(30) PORT_KEYDELTA(20) PORT_RESET PORT_REVERSE
-INPUT_PORTS_END
-
-#define CLOCK 16680000
-#define PIT_CLOCK (CLOCK/16) // 12 divider ?
-
-void laserbas_state::laserbas(machine_config &config)
-{
- Z80(config, m_maincpu, CLOCK / 4);
- m_maincpu->set_addrmap(AS_PROGRAM, &laserbas_state::laserbas_memory);
- m_maincpu->set_addrmap(AS_IO, &laserbas_state::laserbas_io);
- TIMER(config, "scantimer").configure_scanline(FUNC(laserbas_state::laserbas_scanline), "screen", 0, 1);
-
- /* TODO: clocks aren't known */
- pit8253_device &pit0(PIT8253(config, "pit0", 0));
- pit0.set_clk<0>(PIT_CLOCK);
- pit0.set_clk<1>(PIT_CLOCK);
- pit0.set_clk<2>(PIT_CLOCK);
- pit0.out_handler<0>().set(FUNC(laserbas_state::pit_out_w<0>));
- pit0.out_handler<1>().set(FUNC(laserbas_state::pit_out_w<1>));
- pit0.out_handler<2>().set(FUNC(laserbas_state::pit_out_w<2>));
-
- pit8253_device &pit1(PIT8253(config, "pit1", 0));
- pit1.set_clk<0>(PIT_CLOCK);
- pit1.set_clk<1>(PIT_CLOCK);
- pit1.set_clk<2>(PIT_CLOCK);
- pit1.out_handler<0>().set(FUNC(laserbas_state::pit_out_w<3>));
- pit1.out_handler<1>().set(FUNC(laserbas_state::pit_out_w<4>));
- pit1.out_handler<2>().set(FUNC(laserbas_state::pit_out_w<5>));
-
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_raw(4000000, 256, 0, 256, 256, 0, 256); /* temporary, CRTC will configure screen */
- screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
-
- mc6845_device &crtc(MC6845(config, "crtc", 3000000/4)); /* unknown clock, hand tuned to get ~60 fps */
- crtc.set_screen("screen");
- crtc.set_show_border_area(false);
- crtc.set_char_width(8);
- crtc.set_update_row_callback(FUNC(laserbas_state::crtc_update_row));
-
- PALETTE(config, m_palette).set_format(palette_device::RGB_332, 32);
-
- /* sound hardware */
- SPEAKER(config, "speaker").front_center();
- DAC_4BIT_R2R(config, m_dac[0], 0).add_route(ALL_OUTPUTS, "speaker", 0.16);
- DAC_4BIT_R2R(config, m_dac[1], 0).add_route(ALL_OUTPUTS, "speaker", 0.16);
- DAC_4BIT_R2R(config, m_dac[2], 0).add_route(ALL_OUTPUTS, "speaker", 0.16);
- DAC_4BIT_R2R(config, m_dac[3], 0).add_route(ALL_OUTPUTS, "speaker", 0.16);
- DAC_4BIT_R2R(config, m_dac[4], 0).add_route(ALL_OUTPUTS, "speaker", 0.16);
- DAC_4BIT_R2R(config, m_dac[5], 0).add_route(ALL_OUTPUTS, "speaker", 0.16);
- voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
- vref.add_route(0, "dac1", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac1", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "dac2", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac2", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "dac3", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac3", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "dac4", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac4", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "dac5", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac5", -1.0, DAC_VREF_NEG_INPUT);
- vref.add_route(0, "dac6", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac6", -1.0, DAC_VREF_NEG_INPUT);
-}
-
-/*
-Amstar LaserBase 1981 (Hoei)
-
-XBC-101-00-1 - CPU board
- Z80A (D780C-1)
- 2 NB5K8253
- 2 2114 Rams
- 8 Dipswitches
-
-XBC-102-01-1 - RAM board?
- HD46505R
- 32 MB8118 Rams
-
-------------------------------------
-
-Filename Label Type CSum Description
---------- ----- ------ ---- -----------------------------
-MB8532.1 1 2532 9316
-MB8532.2 2 2532 5662
-MB8532.3 3 2532 7E9F
-MB8532.4 4 2532 7CAD
-MB8532.5 5 2532 C7D4 (Marked F.F.)
-MB8532.6 6 2532 16BE
-MB8532.7 7 2532 CF6C (Marked F.F.)
-MB8716.8 8 2716 9601 (Marked F.F.)
-TI2716.Z1 Z1 TI2716 D925
---------- ----- ------ ---- -----------------------------
-
-I believe the F.F. markings on these chips show that
-these roms have been changed to Future Flash.
-
-It is unknown what the Z1 chip is, but the label screened
-on the board under the socket says 2716. All the identifying
-numbers have been scratched off and has Z1 stamped on it.
-It appears that each one was then numbered by hand in red
-marker and stamped with white ink with Z1.
-
-The Z1 chip was read from 3 different boards, it is Valid.
-The chips were numbered 69, 82 & 624, all three read the same.
-Turns out it was a TI2716. The TI chip has A10 on a different
-pin than a standard 2716.
-
-*/
-
-ROM_START( laserbas )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "mb8532.1", 0x0000, 0x1000, CRC(ef85e0c5) SHA1(c26da919c206a23eb6e53ffe39acd5a5dfd47c18) )
- ROM_LOAD( "mb8532.2", 0x1000, 0x1000, CRC(0ba2236c) SHA1(416e4be957c395b05537d2e513e0c4561d8ca7c5) )
- ROM_LOAD( "mb8532.3", 0x2000, 0x1000, CRC(83998e0b) SHA1(ac435fb8dd67aec0737d6c750c527841b2b91a5b) )
- ROM_LOAD( "mb8532.4", 0x3000, 0x1000, CRC(00f9d909) SHA1(90b800cc5fcea53454584f8ad93eebbd193bdd21) )
- ROM_LOAD( "lb2532.5", 0xc000, 0x1000, CRC(6459073e) SHA1(78b8a23534826dd2d3b3c6c5d5708c8a78a4b6bf) )
- ROM_LOAD( "lb2532.6", 0xd000, 0x1000, CRC(a2dc1e7e) SHA1(78643a3aa852c73dab12e09a6cfc53141c936d12) )
- ROM_LOAD( "mb8532.7", 0xe000, 0x1000, CRC(9d2148d7) SHA1(24954d82a09d9fcfdc61e91b7c824daa5dd701c3) )
- ROM_LOAD( "mb8516.8", 0xf000, 0x0800, CRC(623f558f) SHA1(be6c6565df658555f21c43a8c2459cf399794a84) )
-ROM_END
-
-ROM_START( laserbasa )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "2732.u1", 0x0000, 0x1000, CRC(f3ab00dc) SHA1(4730b13b55c93c71ed483463e180e71e506cfbd6) )
- ROM_LOAD( "2732.u2", 0x1000, 0x1000, CRC(0ba2236c) SHA1(416e4be957c395b05537d2e513e0c4561d8ca7c5) )
- ROM_LOAD( "mb8532.u3", 0x2000, 0x1000, CRC(c58a7745) SHA1(382e2235d89520860335c1c2760339e116c0466f) )
- ROM_LOAD( "mbm2732.u4", 0x3000, 0x1000, CRC(00f9d909) SHA1(90b800cc5fcea53454584f8ad93eebbd193bdd21) )
- ROM_LOAD( "2732.u5", 0xc000, 0x1000, CRC(6459073e) SHA1(78b8a23534826dd2d3b3c6c5d5708c8a78a4b6bf) )
- ROM_LOAD( "2732.u6", 0xd000, 0x1000, CRC(a2dc1e7e) SHA1(78643a3aa852c73dab12e09a6cfc53141c936d12) )
- ROM_LOAD( "2732.u7", 0xe000, 0x1000, CRC(9d2148d7) SHA1(24954d82a09d9fcfdc61e91b7c824daa5dd701c3) )
- ROM_LOAD( "mb8516.u8", 0xf000, 0x0800, CRC(623f558f) SHA1(be6c6565df658555f21c43a8c2459cf399794a84) )
-ROM_END
-
-/*
-It was unclear what type of device FF.9 was. The silkscreen on the PCB said
-2716,
-but the device is a masked ROM with its identifying marks rubbed off.
-I dumped it
-as a 2716 (FF.9), a 2532 like the others (FF.9A) and a 2732 (FF.9B).
-*/
-
-ROM_START( futflash )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "ff.1", 0x0000, 0x1000, CRC(bcd6b998) SHA1(4a210c40ce6015e2b921558b7571b7f2a27e1815) )
- ROM_LOAD( "ff.2", 0x1000, 0x1000, CRC(1b1f6953) SHA1(8cd7b7e2236700ce63c60b4d2286099c8091bdbd) )
- ROM_LOAD( "ff.3", 0x2000, 0x1000, CRC(30008f04) SHA1(e03b2dbcb6d2615650cdd47ecf1d587906ce149b) )
- ROM_LOAD( "ff.4", 0x3000, 0x1000, CRC(e559aa12) SHA1(0fecfb60b0147e8060c640f684f69503478200ff) )
- ROM_LOAD( "ff.5", 0xc000, 0x1000, CRC(6459073e) SHA1(78b8a23534826dd2d3b3c6c5d5708c8a78a4b6bf) )
- ROM_LOAD( "ff.6", 0xd000, 0x1000, CRC(a8b17f49) SHA1(aea349bd19d001233bfb1805e586c950275010b4) )
- ROM_LOAD( "ff.7", 0xe000, 0x1000, CRC(9d2148d7) SHA1(24954d82a09d9fcfdc61e91b7c824daa5dd701c3) )
- ROM_LOAD( "ff.8", 0xf000, 0x0800, CRC(623f558f) SHA1(be6c6565df658555f21c43a8c2459cf399794a84) )
-ROM_END
-
-GAME( 1980, futflash, 0, laserbas, laserbas, laserbas_state, empty_init, ROT270, "Hoei", "Future Flash", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1981, laserbas, futflash, laserbas, laserbas, laserbas_state, empty_init, ROT270, "Hoei (Amstar license)", "Laser Base (set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1981, laserbasa, futflash, laserbas, laserbas, laserbas_state, empty_init, ROT270, "Hoei (Amstar license)", "Laser Base (set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )