diff options
author | 2018-04-27 19:31:31 +0200 | |
---|---|---|
committer | 2018-04-27 19:31:31 +0200 | |
commit | 6cac80efa498904aa5fc87f042ea790621f9ebf8 (patch) | |
tree | 589ae4051a2b9e4081f2f2dc50d9b76b75416d35 | |
parent | 5ec49fc340171b3e7275232f4c0812b9cbe46fe9 (diff) |
30test.cpp, fortecar.cpp, funtech.cpp: output_finder (nw)
-rw-r--r-- | src/mame/drivers/30test.cpp | 28 | ||||
-rw-r--r-- | src/mame/drivers/fortecar.cpp | 71 | ||||
-rw-r--r-- | src/mame/drivers/funtech.cpp | 88 |
3 files changed, 95 insertions, 92 deletions
diff --git a/src/mame/drivers/30test.cpp b/src/mame/drivers/30test.cpp index d0b6b0265bc..b849bcdff16 100644 --- a/src/mame/drivers/30test.cpp +++ b/src/mame/drivers/30test.cpp @@ -60,10 +60,23 @@ public: , m_maincpu(*this, "maincpu") , m_oki(*this, "oki") , m_digits(*this, "digit%u", 0U) + , m_lamps(*this, "lamp%u", 0U) { } + void _30test(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + required_device<cpu_device> m_maincpu; + required_device<okim6295_device> m_oki; + output_finder<72> m_digits; + output_finder<8> m_lamps; + uint8_t m_mux_data; uint8_t m_oki_bank; + DECLARE_WRITE8_MEMBER(namco_30test_led_w); DECLARE_WRITE8_MEMBER(namco_30test_led_rank_w); DECLARE_WRITE8_MEMBER(namco_30test_lamps_w); @@ -72,14 +85,9 @@ public: DECLARE_WRITE8_MEMBER(hc11_mux_w); DECLARE_READ8_MEMBER(hc11_okibank_r); DECLARE_WRITE8_MEMBER(hc11_okibank_w); - virtual void machine_start() override; - virtual void machine_reset() override; - required_device<cpu_device> m_maincpu; - required_device<okim6295_device> m_oki; - void _30test(machine_config &config); + void namco_30test_io(address_map &map); void namco_30test_map(address_map &map); - output_finder<72> m_digits; }; @@ -105,7 +113,7 @@ WRITE8_MEMBER(namco_30test_state::namco_30test_lamps_w) { // d0-d5: ranking, d6: game over, d7: assume marquee lamp for (int i = 0; i < 8; i++) - output().set_lamp_value(i, data >> i & 1); + m_lamps[i] = BIT(data, i); } READ8_MEMBER(namco_30test_state::namco_30test_mux_r) @@ -240,15 +248,11 @@ INPUT_PORTS_END void namco_30test_state::machine_start() { m_digits.resolve(); + m_lamps.resolve(); save_item(NAME(m_mux_data)); save_item(NAME(m_oki_bank)); } -void namco_30test_state::machine_reset() -{ -} - - MACHINE_CONFIG_START(namco_30test_state::_30test) /* basic machine hardware */ diff --git a/src/mame/drivers/fortecar.cpp b/src/mame/drivers/fortecar.cpp index c76b5a33070..2c11341325d 100644 --- a/src/mame/drivers/fortecar.cpp +++ b/src/mame/drivers/fortecar.cpp @@ -26,7 +26,7 @@ with the Bulgarian players. Improved versions were developed and were sold in Russia, Austria, Brazil, Argentina and the Balkan peninsular. - In 1995, Fortex, first of all Bulgarian games manufacturers, exibited at the Plovdiv Fair a com- + In 1995, Fortex, first of all Bulgarian games manufacturers, exhibited at the Plovdiv Fair a com- puter based version of Forte Card. The following years were times of hard teamwork, which resul- ted in a variety of products: centralized cash desk, on-line jackpot and a network control and management system for game centers. @@ -340,24 +340,34 @@ public: m_vram(*this, "vram"), m_eeprom(*this, "eeprom"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_lamps(*this, "lamp%u", 0U) { } + void fortecar(machine_config &config); + + DECLARE_DRIVER_INIT(fortecar); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + +private: required_device<cpu_device> m_maincpu; required_device<watchdog_timer_device> m_watchdog; required_shared_ptr<uint8_t> m_vram; + required_device<eeprom_serial_93cxx_device> m_eeprom; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + output_finder<8> m_lamps; + DECLARE_WRITE8_MEMBER(ppi0_portc_w); DECLARE_READ8_MEMBER(ppi0_portc_r); DECLARE_WRITE8_MEMBER(ayporta_w); DECLARE_WRITE8_MEMBER(ayportb_w); - DECLARE_DRIVER_INIT(fortecar); - virtual void machine_reset() override; - virtual void video_start() override; + DECLARE_PALETTE_INIT(fortecar); - uint32_t screen_update_fortecar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - required_device<eeprom_serial_93cxx_device> m_eeprom; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; - void fortecar(machine_config &config); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void fortecar_map(address_map &map); void fortecar_ports(address_map &map); }; @@ -367,24 +377,22 @@ public: * Video Hardware * ***********************************/ -void fortecar_state::video_start() +void fortecar_state::machine_start() { + m_lamps.resolve(); } -uint32_t fortecar_state::screen_update_fortecar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t fortecar_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - int x, y, count; - count = 0; + int count = 0; - for (y = 0; y < 0x1e; y++) + for (int y = 0; y < 0x1e; y++) { - for(x = 0; x < 0x4b; x++) + for(int x = 0; x < 0x4b; x++) { - int tile, color, bpp; - - tile = (m_vram[(count*4)+1] | (m_vram[(count*4)+2]<<8)) & 0xfff; - color = m_vram[(count*4)+3] & 0x1f; - bpp = (m_vram[(count*4)+3] & 0x20) >> 5; + int tile = (m_vram[(count*4)+1] | (m_vram[(count*4)+2]<<8)) & 0xfff; + int color = m_vram[(count*4)+3] & 0x1f; + int bpp = (m_vram[(count*4)+3] & 0x20) >> 5; if(bpp) color &= 0x3; @@ -414,7 +422,6 @@ O8 (LS374) R220 BLUE R = 82 Ohms Pull Down. */ - int i; static const int resistances_rg[3] = { 1000, 510, 220 }; static const int resistances_b [2] = { 510, 220 }; double weights_r[3], weights_g[3], weights_b[2]; @@ -424,7 +431,7 @@ R = 82 Ohms Pull Down. 3, resistances_rg, weights_g, 82, 0, 2, resistances_b, weights_b, 82, 0); - for (i = 0; i < 512; i++) + for (int i = 0; i < 512; i++) { int bit0, bit1, bit2, r, g, b; @@ -500,10 +507,8 @@ WRITE8_MEMBER(fortecar_state::ayporta_w) 0x20 (hold1): IRQ test 0x40 (black): Stack RAM check */ - int i; - - for(i = 0; i < 8; i++) - output().set_lamp_value(i, (data >> i) & 1); + for (int i = 0; i < 8; i++) + m_lamps[i] = BIT(data, i); } @@ -516,7 +521,7 @@ Bit7 of port B is a watchdog. A square wave is fed to through resistor R to capacitor C, with a constant charge/discharge time relative to the value of resistor R and value of capacitor C. If the square wave halts, -capacitor C will charge beyond the hysteresis threshhold of the TL7705 (leg 6), causing it to +capacitor C will charge beyond the hysteresis threshold of the TL7705 (leg 6), causing it to trigger a reset. Seems to work properly, but must be checked closely... @@ -665,10 +670,8 @@ GFXDECODE_END void fortecar_state::machine_reset() { - int i; - - /* apparently there's a random fill in there (checked thru trojan TODO: extract proper algorythm) */ - for(i = 0; i < m_vram.bytes(); i++) + /* apparently there's a random fill in there (checked thru trojan TODO: extract proper algorithm) */ + for (int i = 0; i < m_vram.bytes(); i++) m_vram[i] = machine().rand(); } @@ -694,7 +697,7 @@ MACHINE_CONFIG_START(fortecar_state::fortecar) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(640, 256) MCFG_SCREEN_VISIBLE_AREA(0, 600-1, 0, 240-1) /* driven by CRTC */ - MCFG_SCREEN_UPDATE_DRIVER(fortecar_state, screen_update_fortecar) + MCFG_SCREEN_UPDATE_DRIVER(fortecar_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_EEPROM_SERIAL_93C56_ADD("eeprom") @@ -760,7 +763,7 @@ ROM_START( fortecar ) ROM_LOAD( "fortecar.u39", 0x10000, 0x10000, CRC(fc3ddf4f) SHA1(4a95b24c4edb67f6d59f795f86dfbd12899e01b0) ) ROM_LOAD( "fortecar.u40", 0x20000, 0x10000, CRC(9693bb83) SHA1(e3e3bc750c89a1edd1072ce3890b2ce498dec633) ) - /* took from the Spanish version, these are likely to be identical anyway */ + /* taken from the Spanish version, these are likely to be identical anyway */ ROM_REGION( 0x0800, "nvram", 0 ) /* default NVRAM */ ROM_LOAD( "fortecrd_nvram.u6", 0x0000, 0x0800, BAD_DUMP CRC(7d3e7eb5) SHA1(788fe7adc381bcc6eaefed33f5aa1081340608a0) ) diff --git a/src/mame/drivers/funtech.cpp b/src/mame/drivers/funtech.cpp index acbc4a19a0c..71ad35418fb 100644 --- a/src/mame/drivers/funtech.cpp +++ b/src/mame/drivers/funtech.cpp @@ -13,7 +13,7 @@ PROGRAM-VERSION:1.0 PROGRAM-DATE:09/23/1993 8x8 tiles and 8x32 reels, likely going to be very similar to skylncr.cpp or goldstar.cpp (which are both very similar anyway) -palette addresses are the same as unkch in goldtar.cpp, but the io stuff is definitely different here +palette addresses are the same as unkch in goldstar.cpp, but the io stuff is definitely different here board has an M5255 for sound and an unpopulated position for a YM2413 or UM3567 @@ -48,8 +48,16 @@ public: m_reel1_alt_scroll(*this, "reel1_alt_scroll"), m_maincpu(*this, "maincpu"), m_hopper(*this, "hopper"), - m_gfxdecode(*this, "gfxdecode") { } + m_gfxdecode(*this, "gfxdecode"), + m_lamps(*this, "lamp%u", 0U) { } + void funtech(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + +private: required_shared_ptr<uint8_t> m_fgram; required_shared_ptr<uint8_t> m_reel1_ram; required_shared_ptr<uint8_t> m_reel2_ram; @@ -58,19 +66,21 @@ public: required_shared_ptr<uint8_t> m_reel2_scroll; required_shared_ptr<uint8_t> m_reel3_scroll; required_shared_ptr<uint8_t> m_reel1_alt_scroll; - - - INTERRUPT_GEN_MEMBER(funtech_vblank_interrupt); - - DECLARE_WRITE8_MEMBER(funtech_lamps_w); - DECLARE_WRITE8_MEMBER(funtech_coins_w); - DECLARE_WRITE8_MEMBER(funtech_vreg_w); - + required_device<cpu_device> m_maincpu; + required_device<ticket_dispenser_device> m_hopper; + required_device<gfxdecode_device> m_gfxdecode; + output_finder<8> m_lamps; uint8_t m_vreg; tilemap_t *m_fg_tilemap; + INTERRUPT_GEN_MEMBER(vblank_interrupt); + + DECLARE_WRITE8_MEMBER(lamps_w); + DECLARE_WRITE8_MEMBER(coins_w); + DECLARE_WRITE8_MEMBER(vreg_w); + DECLARE_WRITE8_MEMBER(fgram_w); TILE_GET_INFO_MEMBER(get_fg_tile_info); @@ -87,14 +97,8 @@ public: TILE_GET_INFO_MEMBER(get_reel2_tile_info); TILE_GET_INFO_MEMBER(get_reel3_tile_info); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - uint32_t screen_update_funtech(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - required_device<cpu_device> m_maincpu; - required_device<ticket_dispenser_device> m_hopper; - required_device<gfxdecode_device> m_gfxdecode; - void funtech(machine_config &config); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void funtech_io_map(address_map &map); void funtech_map(address_map &map); }; @@ -175,12 +179,12 @@ WRITE8_MEMBER(fun_tech_corp_state::reel3_ram_w) void fun_tech_corp_state::video_start() { - m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(fun_tech_corp_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); + m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(fun_tech_corp_state::get_fg_tile_info), this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); m_fg_tilemap->set_transparent_pen(0); - m_reel1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(fun_tech_corp_state::get_reel1_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); - m_reel2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(fun_tech_corp_state::get_reel2_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); - m_reel3_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(fun_tech_corp_state::get_reel3_tile_info),this),TILEMAP_SCAN_ROWS,8,32, 64, 8); + m_reel1_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(fun_tech_corp_state::get_reel1_tile_info), this), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(fun_tech_corp_state::get_reel2_tile_info), this), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); + m_reel3_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(fun_tech_corp_state::get_reel3_tile_info), this), TILEMAP_SCAN_ROWS, 8, 32, 64, 8); m_reel1_tilemap->set_scroll_cols(64); m_reel2_tilemap->set_scroll_cols(64); @@ -195,7 +199,7 @@ WRITE8_MEMBER(fun_tech_corp_state::fgram_w) } -uint32_t fun_tech_corp_state::screen_update_funtech(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t fun_tech_corp_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { bitmap.fill(0, cliprect); @@ -234,7 +238,7 @@ uint32_t fun_tech_corp_state::screen_update_funtech(screen_device &screen, bitma -INTERRUPT_GEN_MEMBER(fun_tech_corp_state::funtech_vblank_interrupt) +INTERRUPT_GEN_MEMBER(fun_tech_corp_state::vblank_interrupt) { // if (m_nmi_enable) device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); @@ -267,21 +271,15 @@ void fun_tech_corp_state::funtech_map(address_map &map) } -WRITE8_MEMBER(fun_tech_corp_state::funtech_lamps_w) +WRITE8_MEMBER(fun_tech_corp_state::lamps_w) { - output().set_lamp_value(0, (data >> 0) & 1); - output().set_lamp_value(1, (data >> 1) & 1); - output().set_lamp_value(2, (data >> 2) & 1); - output().set_lamp_value(3, (data >> 3) & 1); - output().set_lamp_value(4, (data >> 4) & 1); - output().set_lamp_value(5, (data >> 5) & 1); - output().set_lamp_value(6, (data >> 6) & 1); - output().set_lamp_value(7, (data >> 7) & 1); + for (int i = 0; i < 8; i++) + m_lamps[i] = BIT(data, i); } -WRITE8_MEMBER(fun_tech_corp_state::funtech_coins_w) +WRITE8_MEMBER(fun_tech_corp_state::coins_w) { - if (data & 0x01) printf("funtech_coins_w %02x\n", data); + if (data & 0x01) printf("coins_w %02x\n", data); // 80 = hopper motor? m_hopper->motor_w(BIT(data, 7)); @@ -303,9 +301,9 @@ WRITE8_MEMBER(fun_tech_corp_state::funtech_coins_w) // 02 = used when hopper is used (coin out counter?) } -WRITE8_MEMBER(fun_tech_corp_state::funtech_vreg_w) +WRITE8_MEMBER(fun_tech_corp_state::vreg_w) { - if (data & 0xb2) printf("funtech_vreg_w %02x\n", data); + if (data & 0xb2) printf("vreg_w %02x\n", data); // -x-- rr-t // t = text tile bank @@ -323,10 +321,10 @@ void fun_tech_corp_state::funtech_io_map(address_map &map) { map.global_mask(0xff); // lamps? - map(0x00, 0x00).w(this, FUNC(fun_tech_corp_state::funtech_lamps_w)); - map(0x01, 0x01).w(this, FUNC(fun_tech_corp_state::funtech_coins_w)); + map(0x00, 0x00).w(this, FUNC(fun_tech_corp_state::lamps_w)); + map(0x01, 0x01).w(this, FUNC(fun_tech_corp_state::coins_w)); - map(0x03, 0x03).w(this, FUNC(fun_tech_corp_state::funtech_vreg_w)); + map(0x03, 0x03).w(this, FUNC(fun_tech_corp_state::vreg_w)); map(0x04, 0x04).portr("IN0"); map(0x05, 0x05).portr("IN1"); @@ -483,19 +481,17 @@ GFXDECODE_END void fun_tech_corp_state::machine_start() { + m_lamps.resolve(); } -void fun_tech_corp_state::machine_reset() -{ -} MACHINE_CONFIG_START(fun_tech_corp_state::funtech) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", Z80,4000000) /* ? MHz */ + MCFG_CPU_ADD("maincpu", Z80, 4000000) /* ? MHz */ MCFG_CPU_PROGRAM_MAP(funtech_map) MCFG_CPU_IO_MAP(funtech_io_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", fun_tech_corp_state, funtech_vblank_interrupt) + MCFG_CPU_VBLANK_INT_DRIVER("screen", fun_tech_corp_state, vblank_interrupt) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -503,7 +499,7 @@ MACHINE_CONFIG_START(fun_tech_corp_state::funtech) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(512, 256) MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 8, 256-8-1) - MCFG_SCREEN_UPDATE_DRIVER(fun_tech_corp_state, screen_update_funtech) + MCFG_SCREEN_UPDATE_DRIVER(fun_tech_corp_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", funtech) |