diff options
Diffstat (limited to 'src/mame/misc/gi6809.cpp')
-rw-r--r-- | src/mame/misc/gi6809.cpp | 562 |
1 files changed, 254 insertions, 308 deletions
diff --git a/src/mame/misc/gi6809.cpp b/src/mame/misc/gi6809.cpp index 378bdd60b5d..96324b8bdde 100644 --- a/src/mame/misc/gi6809.cpp +++ b/src/mame/misc/gi6809.cpp @@ -71,16 +71,10 @@ - Discover the proper way to tie PIA's signals to Microprocessor's IRQs. - Coin In device support. - - Discrete sound. ****************************************************************************************/ -// Debug Notes: -// good luck credits vars 6Bh - 1ABh - 501Bh(nvram) - bin -// jester ch credits vars 34h - 179h - 5018h(nvram) - bin -// castaway credits vars 1Eh - 14Ah - 5025h(nvram) - bin - #include "emu.h" #include "emupal.h" #include "screen.h" @@ -89,10 +83,13 @@ #include "cpu/m6809/m6809.h" #include "machine/6821pia.h" +#include "machine/netlist.h" #include "machine/nvram.h" #include "machine/ticket.h" #include "video/mc6845.h" +#include "nl_gi6809.h" + namespace { #define MASTER_CLOCK XTAL(10'000'000) @@ -100,7 +97,6 @@ namespace { #define CPU_CLOCK (MASTER_CLOCK / 2) #define PIXEL_CLOCK (MASTER_CLOCK / 16) - class gi6809_state : public driver_device { public: @@ -108,6 +104,7 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_slavecpu(*this, "slavecpu"), + m_crtc(*this, "crtc"), m_pia(*this, "pia%u", 0U), m_screen(*this, "screen"), m_gfxdecode(*this, "gfxdecode"), @@ -115,8 +112,11 @@ public: m_colorram(*this, "colorram"), m_input(*this, "IN0-%u", 0U), m_hopper(*this, "hopper"), - m_coin_key(*this, "CoinKey"), - m_lamps(*this, "lamp%u", 0U) + m_lamps(*this, "lamp%u", 0U), + m_sound_bit0(*this, "sound_nl:bit0"), + m_sound_bit1(*this, "sound_nl:bit1"), + m_sound_bit2(*this, "sound_nl:bit2"), + m_sound_bit3(*this, "sound_nl:bit3") { } void castawayt(machine_config &config); @@ -125,124 +125,212 @@ public: void init_cast(); protected: - virtual void machine_start() override; - virtual void machine_reset() override; + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD; void gi6809_base(machine_config &config); private: + // Address Maps - void glckmain_map(address_map &map); - void glckslave_map(address_map &map); - void castmain_map(address_map &map); - void castslave_map(address_map &map); - void jestmain_map(address_map &map); - void jestslave_map(address_map &map); + void glckmain_map(address_map &map) ATTR_COLD; + void glckslave_map(address_map &map) ATTR_COLD; + void castmain_map(address_map &map) ATTR_COLD; + void castslave_map(address_map &map) ATTR_COLD; + void jestmain_map(address_map &map) ATTR_COLD; + void jestslave_map(address_map &map) ATTR_COLD; // Devices required_device<cpu_device> m_maincpu; required_device<cpu_device> m_slavecpu; + required_device<mc6845_device> m_crtc; required_device_array<pia6821_device, 2> m_pia; required_device<screen_device> m_screen; required_device<gfxdecode_device> m_gfxdecode; - required_shared_ptr<uint8_t> m_videoram; - required_shared_ptr<uint8_t> m_colorram; + required_shared_ptr<u8> m_videoram; + required_shared_ptr<u8> m_colorram; required_ioport_array<4> m_input; required_device<ticket_dispenser_device> m_hopper; - optional_ioport m_coin_key; output_finder<8> m_lamps; - // Video Hardware + // Audio triggers + required_device<netlist_mame_logic_input_device> m_sound_bit0; + required_device<netlist_mame_logic_input_device> m_sound_bit1; + required_device<netlist_mame_logic_input_device> m_sound_bit2; + required_device<netlist_mame_logic_input_device> m_sound_bit3; + // Video Hardware TILE_GET_INFO_MEMBER(get_bg_tile_info); - void gi6809_videoram_w(offs_t offset, uint8_t data); - void gi6809_colorram_w(offs_t offset, uint8_t data); + void gi6809_videoram_w(offs_t offset, u8 data); + void gi6809_colorram_w(offs_t offset, u8 data); void gi6809_palette(palette_device &palette) const; - void castawayt_palette(palette_device &palette) const; uint32_t screen_update_gi6809(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); // Input ports - uint8_t gi6809_mux_port_r(); - uint8_t cast_mux_port_r(); + u8 gi6809_mux_port_r(); // Output ports - void lamps3_w(uint8_t data); - void lamps3h_w(uint8_t data); - void lamps5_w(uint8_t data); - void lamps8_w(uint8_t data); - void snd_mux_w(uint8_t data); - - // Input-Output lines - int pia0_ca1_r(); - int ret_vsync_r(); - - void crtc_vs_gl_w(int state); - void crtc_vs_ca_w(int state); - void crtc_vs_je_w(int state); + void lamps3_w(u8 data); + void lamps3h_w(u8 data); + void lamps5_w(u8 data); + void lamps8_w(u8 data); + void snd_mux_w(u8 data); // internal - uint8_t sn_read1_r() { return m_sernum1[(m_ser_ptr++) & 0x0f]; } - uint8_t sn_read2_r() { return m_sernum2[(m_ser_ptr++) & 0x0f]; } - uint8_t cast_sens_r() { return 0xff; } + u8 sn_read1_r() { return m_sernum1[(m_ser_ptr++) & 0x0f]; } + u8 sn_read2_r() { return m_sernum2[(m_ser_ptr++) & 0x0f]; } + u8 cast_sens_r() { return 0xff; } + // vars tilemap_t *m_bg_tilemap; + u8 m_mux_data = 0xff; + u8 m_ser_ptr = 0; + u8 m_sernum1[0x10] = { 3, 0, 3, 4, 4, 1, 4, 1, 0, 0, 0, 0, 0, 0, 2, 6 }; + u8 m_sernum2[0x10] = { 4, 7, 4, 9, 2, 13, 4, 3, 0, 0, 0, 0, 0, 0, 0, 1 }; +}; - // Latches - uint8_t m_mux_data = 0xff; - - // states - bool m_vsync = 0; - // internal - uint8_t m_ser_ptr = 0; - uint8_t m_sernum1[0x10] = { 3, 0, 3, 4, 4, 1, 4, 1, 0, 0, 0, 0, 0, 0, 2, 6 }; - uint8_t m_sernum2[0x10] = { 4, 7, 4, 9, 2, 13, 4, 3, 0, 0, 0, 0, 0, 0, 0, 1 }; +/********************************************* +* Memory Map Information * +*********************************************/ -}; +void gi6809_state::glckmain_map(address_map &map) +{ + map(0x0000, 0x03ff).ram().share("ram"); + map(0x1000, 0x13ff).ram().w(FUNC(gi6809_state::gi6809_videoram_w)).share("videoram"); + map(0x2000, 0x23ff).ram().w(FUNC(gi6809_state::gi6809_colorram_w)).share("colorram"); + map(0x3000, 0x3000).w("crtc", FUNC(mc6845_device::address_w)); + map(0x3001, 0x3001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); + map(0x4000, 0x4003).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x5000, 0x5fff).ram().share("nvram"); + map(0x8000, 0xffff).rom(); +} +void gi6809_state::glckslave_map(address_map &map) +{ + map(0x0000, 0x03ff).ram().share("ram"); + map(0x1004, 0x1007).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x4000, 0x400f).nopw().r(FUNC(gi6809_state::sn_read1_r)); // unknown device + map(0x5000, 0x5fff).ram().share("nvram"); + map(0xe000, 0xffff).rom(); +} -void gi6809_state::machine_start() +void gi6809_state::castmain_map(address_map &map) { - m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(gi6809_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); - m_lamps.resolve(); + map(0x0000, 0x00ff).ram().share("ram"); + map(0x0100, 0x07ff).ram(); + map(0x1000, 0x13ff).ram().w(FUNC(gi6809_state::gi6809_videoram_w)).share("videoram"); + map(0x2000, 0x23ff).ram().w(FUNC(gi6809_state::gi6809_colorram_w)).share("colorram"); + map(0x3000, 0x3000).w("crtc", FUNC(mc6845_device::address_w)); + map(0x3001, 0x3001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); + map(0x4000, 0x4003).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x5000, 0x5fff).ram().share("nvram"); + map(0x7000, 0x7000).r(FUNC(gi6809_state::cast_sens_r)); + map(0x8000, 0xffff).rom(); } +void gi6809_state::castslave_map(address_map &map) +{ + map(0x0000, 0x00ff).ram().share("ram"); + map(0x0100, 0x07ff).ram(); + map(0x1004, 0x1007).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x4000, 0x400f).noprw(); + map(0x5000, 0x5fff).ram().share("nvram"); + map(0xe000, 0xffff).rom(); +} -/******************************** -* Interrupt Control * -********************************/ +void gi6809_state::jestmain_map(address_map &map) +{ + map(0x0000, 0x00ff).ram().share("ram"); + map(0x0100, 0x07ff).ram(); + map(0x1000, 0x13ff).ram().w(FUNC(gi6809_state::gi6809_videoram_w)).share("videoram"); + map(0x2000, 0x23ff).ram().w(FUNC(gi6809_state::gi6809_colorram_w)).share("colorram"); + map(0x3000, 0x3000).w("crtc", FUNC(mc6845_device::address_w)); + map(0x3001, 0x3001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); + map(0x4000, 0x4003).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x5000, 0x5000).portr("SENSB").w(FUNC(gi6809_state::lamps8_w)); + map(0x5001, 0x5003).noprw(); // unknown device + map(0x8000, 0xffff).rom(); +} -void gi6809_state::crtc_vs_gl_w(int state) +void gi6809_state::jestslave_map(address_map &map) { - m_vsync = state; + map(0x0000, 0x00ff).ram().share("ram"); + map(0x0100, 0x07ff).ram(); + map(0x1004, 0x1007).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); + map(0x4000, 0x400f).nopw().r(FUNC(gi6809_state::sn_read2_r)); // unknown device + map(0x5000, 0x5fff).ram().share("nvram"); + map(0xe000, 0xffff).rom(); } -void gi6809_state::crtc_vs_ca_w(int state) +/******************************************* +* Write Handlers * +*******************************************/ + +void gi6809_state::lamps3_w(u8 data) { - m_vsync = state; -} + // glck6809 - no lamps activity + m_lamps[5] = BIT(data, 5); // lamp 5 Coin lockout + m_lamps[6] = BIT(data, 6); // lamp 6 Hopper Motor + m_lamps[7] = BIT(data, 7); // lamp 7 Attendant Lamp +} -void gi6809_state::crtc_vs_je_w(int state) +void gi6809_state::lamps3h_w(uint8_t data) { - m_vsync = state; - m_pia[1]->cb1_w(state); // IRQB-> IRQ Master - m_pia[1]->ca1_w(!state); // IRQA-> FIRQ Master - m_pia[0]->ca1_w(state); // IRQA-> IRQ Slave + m_lamps[5] = BIT(data, 5); // lamp 5 Coin lockout + m_lamps[6] = BIT(data, 6); // lamp 6 Hopper Motor + m_lamps[7] = BIT(data, 7); // lamp 7 Attendant Lamp + m_hopper->motor_w(!BIT(data, 6)); } +void gi6809_state::lamps5_w(u8 data) +{ + // glck6809 - no lamps activity + + m_lamps[0] = BIT(data, 0); + m_lamps[1] = BIT(data, 1); + m_lamps[2] = BIT(data, 2); + m_lamps[3] = BIT(data, 3); + m_lamps[4] = BIT(data, 4); +} -int gi6809_state::ret_vsync_r() +void gi6809_state::lamps8_w(u8 data) { - return m_vsync; + m_lamps[0] = BIT(data, 0); + m_lamps[1] = BIT(data, 1); + m_lamps[2] = BIT(data, 2); + m_lamps[3] = BIT(data, 3); + m_lamps[4] = BIT(data, 4); + m_lamps[5] = BIT(data, 5); + m_lamps[6] = BIT(data, 6); + m_lamps[7] = BIT(data, 7); } -int gi6809_state::pia0_ca1_r() +/******************************************* +* Read Handlers * +*******************************************/ + +u8 gi6809_state::gi6809_mux_port_r() +{ + u8 data = 0xff; + + for (int i = 0; i < 4 ; i++) + if (BIT(~m_mux_data, i + 4)) + data &= m_input[i]->read(); + return data; +} + +void gi6809_state::snd_mux_w(u8 data) { - m_pia[1]->read(1); - return m_vsync; + m_mux_data = data; + m_sound_bit0->write(BIT(data,0)); + m_sound_bit1->write(BIT(data,1)); + m_sound_bit2->write(BIT(data,2)); + m_sound_bit3->write(BIT(data,3)); + logerror("Sound Code:%02x\n", data & 0x0f); } @@ -250,18 +338,23 @@ int gi6809_state::pia0_ca1_r() * Video Hardware * *********************************************/ -void gi6809_state::gi6809_videoram_w(offs_t offset, uint8_t data) +void gi6809_state::gi6809_videoram_w(offs_t offset, u8 data) { m_videoram[offset] = data; m_bg_tilemap->mark_tile_dirty(offset); } -void gi6809_state::gi6809_colorram_w(offs_t offset, uint8_t data) +void gi6809_state::gi6809_colorram_w(offs_t offset, u8 data) { m_colorram[offset] = data; m_bg_tilemap->mark_tile_dirty(offset); } +uint32_t gi6809_state::screen_update_gi6809(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); + return 0; +} TILE_GET_INFO_MEMBER(gi6809_state::get_bg_tile_info) { @@ -281,14 +374,6 @@ TILE_GET_INFO_MEMBER(gi6809_state::get_bg_tile_info) tileinfo.set(bank, code, color, 0); } - -uint32_t gi6809_state::screen_update_gi6809(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - return 0; -} - - void gi6809_state::gi6809_palette(palette_device &palette) const { /* @@ -308,7 +393,7 @@ void gi6809_state::gi6809_palette(palette_device &palette) const */ // 0000KBGR - uint8_t const *const color_prom = memregion("proms")->base(); + u8 const *const color_prom = memregion("proms")->base(); if (!color_prom) return; @@ -331,173 +416,6 @@ void gi6809_state::gi6809_palette(palette_device &palette) const } -/******************************************* -* Read Handlers * -*******************************************/ - -uint8_t gi6809_state::gi6809_mux_port_r() -{ - uint8_t data = 0xff; - - for (int i = 0; i < 4 ; i++) - if (BIT(~m_mux_data, i + 4)) - { - data &= m_input[i]->read(); -/* - ToDo: three stages coin in system -*/ - } - return data; -} - - -uint8_t gi6809_state::cast_mux_port_r() -{ - uint8_t data = 0xff; - - for (int i = 0; i < 4 ; i++) - if (BIT(~m_mux_data, i + 4)) - { - data &= m_input[i]->read(); - } - return data; -} - - -/******************************************* -* Write Handlers * -*******************************************/ - -void gi6809_state::lamps3_w(uint8_t data) -{ - // glck6809 - No lamps action - data = data ^ 0xff; - - m_lamps[5] = BIT(data, 5); // lamp 5 Coin lockout - m_lamps[6] = BIT(data, 6); // lamp 6 Hopper Motor - m_lamps[7] = BIT(data, 7); // lamp 7 Attendant Lamp -} - - -void gi6809_state::lamps3h_w(uint8_t data) -{ - data = data ^ 0xff; - - m_lamps[5] = BIT(data, 5); // lamp 5 Coin lockout - m_lamps[6] = BIT(data, 6); // lamp 6 Hopper Motor - m_lamps[7] = BIT(data, 7); // lamp 7 Attendant Lamp - m_hopper->motor_w(BIT(data, 6)); -} - - -void gi6809_state::lamps5_w(uint8_t data) -{ - // glck6809 - No lamps action - data = data ^ 0xff; - - m_lamps[0] = BIT(data, 0); - m_lamps[1] = BIT(data, 1); - m_lamps[2] = BIT(data, 2); - m_lamps[3] = BIT(data, 3); - m_lamps[4] = BIT(data, 4); -} - - -void gi6809_state::lamps8_w(uint8_t data) -{ - data = data ^ 0xff; - - m_lamps[0] = BIT(data, 0); - m_lamps[1] = BIT(data, 1); - m_lamps[2] = BIT(data, 2); - m_lamps[3] = BIT(data, 3); - m_lamps[4] = BIT(data, 4); - m_lamps[5] = BIT(data, 5); - m_lamps[6] = BIT(data, 6); - m_lamps[7] = BIT(data, 7); -} - - -void gi6809_state::snd_mux_w(uint8_t data) -{ - m_mux_data = data; -} - - -/********************************************* -* Memory Map Information * -*********************************************/ - -void gi6809_state::glckmain_map(address_map &map) -{ - map(0x0000, 0x03ff).ram().share("ram"); - map(0x1000, 0x13ff).ram().w(FUNC(gi6809_state::gi6809_videoram_w)).share("videoram"); - map(0x2000, 0x23ff).ram().w(FUNC(gi6809_state::gi6809_colorram_w)).share("colorram"); - map(0x3000, 0x3000).w("crtc", FUNC(mc6845_device::address_w)); - map(0x3001, 0x3001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); - map(0x4000, 0x4003).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x5000, 0x5fff).ram().share("nvram"); - map(0x8000, 0xffff).rom(); -} - -void gi6809_state::glckslave_map(address_map &map) -{ - map(0x0000, 0x03ff).ram().share("ram"); - map(0x1004, 0x1007).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x4000, 0x400f).r(FUNC(gi6809_state::sn_read1_r)); // unknown device - map(0x5000, 0x5fff).ram().share("nvram"); - map(0xe000, 0xffff).rom(); -} - -void gi6809_state::castmain_map(address_map &map) -{ - map(0x0000, 0x00ff).ram().share("ram"); - map(0x0100, 0x07ff).ram(); - map(0x1000, 0x13ff).ram().w(FUNC(gi6809_state::gi6809_videoram_w)).share("videoram"); - map(0x2000, 0x23ff).ram().w(FUNC(gi6809_state::gi6809_colorram_w)).share("colorram"); - map(0x3000, 0x3000).w("crtc", FUNC(mc6845_device::address_w)); - map(0x3001, 0x3001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); - map(0x4000, 0x4003).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x5000, 0x5fff).ram().share("nvram"); - map(0x7000, 0x7000).r(FUNC(gi6809_state::cast_sens_r)); - map(0x8000, 0xffff).rom(); -} - -void gi6809_state::castslave_map(address_map &map) -{ - map(0x0000, 0x00ff).ram().share("ram"); - map(0x0100, 0x07ff).ram(); - map(0x1004, 0x1007).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x4000, 0x400f).noprw(); - map(0x5000, 0x5fff).ram().share("nvram"); - map(0xe000, 0xffff).rom(); -} - -void gi6809_state::jestmain_map(address_map &map) -{ - map(0x0000, 0x00ff).ram().share("ram"); - map(0x0100, 0x07ff).ram(); - map(0x1000, 0x13ff).ram().w(FUNC(gi6809_state::gi6809_videoram_w)).share("videoram"); - map(0x2000, 0x23ff).ram().w(FUNC(gi6809_state::gi6809_colorram_w)).share("colorram"); - map(0x3000, 0x3000).w("crtc", FUNC(mc6845_device::address_w)); - map(0x3001, 0x3001).rw("crtc", FUNC(mc6845_device::register_r), FUNC(mc6845_device::register_w)); - map(0x4000, 0x4003).rw("pia1", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x5000, 0x5000).portr("SENSB").w(FUNC(gi6809_state::lamps8_w)); - map(0x5001, 0x5003).noprw(); // unknown device - map(0x8000, 0xffff).rom(); -} - -void gi6809_state::jestslave_map(address_map &map) -{ - map(0x0000, 0x00ff).ram().share("ram"); - map(0x0100, 0x07ff).ram(); - map(0x1004, 0x1007).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); - map(0x4000, 0x400f).nopw().r(FUNC(gi6809_state::sn_read2_r)); // unknown device - map(0x5000, 0x5fff).ram().share("nvram"); - map(0xe000, 0xffff).rom(); -} - - /********************************************* * Input Ports * *********************************************/ @@ -516,10 +434,10 @@ void gi6809_state::jestslave_map(address_map &map) static INPUT_PORTS_START( glck6809 ) // Multiplexed - 4x5bits PORT_START("IN0-0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Supervisor Key") PORT_TOGGLE // Full Menu. - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Attendant Key") PORT_TOGGLE // Partial Menu. - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reserve Machine") PORT_CODE(KEYCODE_8) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_GAMBLE_DOOR ) PORT_NAME("Door - Att Menu") PORT_TOGGLE + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Supervisor Key") PORT_TOGGLE // Full Menu. + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Attendant Key") PORT_TOGGLE // Partial Menu. + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reserve Machine") PORT_CODE(KEYCODE_8) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_GAMBLE_DOOR ) PORT_NAME("Door - Att Menu") PORT_TOGGLE PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -528,9 +446,9 @@ static INPUT_PORTS_START( glck6809 ) PORT_START("IN0-1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME("D-UP - Menu Back") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) // Coin Upper Sensor, polled from matrix scan. + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Coin Upper Sensor - to be implemented PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) // Coin Lower Sensor, polled from matrix scan. + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Coin Lower Sensor - to be implemented PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -556,18 +474,15 @@ static INPUT_PORTS_START( glck6809 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("PIA0_A") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) // Meter Sensor 1 (PIA0_A 01) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) // Meter Sensor 2 (PIA0_A 02) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) // Meter Sensor 3 (PIA0_A 04) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) // Meter Sensor 4 (PIA0_A 08) - PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) // Meter Sensor 5 (PIA0_A 10) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Meter Sensor 1 (PIA0_A 01)") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Meter Sensor 2 (PIA0_A 02)") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Meter Sensor 3 (PIA0_A 04)") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Meter Sensor 4 (PIA0_A 08)") + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Meter Sensor 5 (PIA0_A 10)") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("CoinKey") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) - INPUT_PORTS_END @@ -576,15 +491,15 @@ static INPUT_PORTS_START( castawayt ) PORT_INCLUDE( glck6809 ) PORT_MODIFY("IN0-0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Accountancy Key") PORT_TOGGLE - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reserve / Test Menu (Accountancy) / Back (Test Menu)") PORT_CODE(KEYCODE_8) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Accountancy Key") PORT_TOGGLE + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Reserve / Test Menu (Accountancy) / Back (Test Menu)") PORT_CODE(KEYCODE_8) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_GAMBLE_DOOR ) PORT_NAME("Door - Test Menu") PORT_TOGGLE PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_MODIFY("IN0-1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hopper Weight") PORT_CODE(KEYCODE_T) @@ -637,11 +552,11 @@ static INPUT_PORTS_START( jesterch ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Coin Mech") PORT_CODE(KEYCODE_H) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hopper Sensor") PORT_CODE(KEYCODE_J) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Cashbox Switch") PORT_CODE(KEYCODE_K) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END @@ -672,6 +587,17 @@ static GFXDECODE_START( gfx_gi6809 ) GFXDECODE_END + +/********************************************* +* Machine Start * +*********************************************/ + +void gi6809_state::machine_start() +{ + m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(gi6809_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); + m_lamps.resolve(); +} + /********************************************* * Machine Reset * *********************************************/ @@ -683,7 +609,7 @@ void gi6809_state::machine_reset() /********************************************* -* Machine Drivers * +* Machine Config * *********************************************/ void gi6809_state::gi6809_base(machine_config &config) @@ -700,8 +626,16 @@ void gi6809_state::gi6809_base(machine_config &config) // sound hardware SPEAKER(config, "mono").front_center(); - - TICKET_DISPENSER(config, m_hopper, attotime::from_msec(50), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); + NETLIST_SOUND(config, "sound_nl", 48000) + .set_source(NETLIST_NAME(gi6809)) + .add_route(ALL_OUTPUTS, "mono", 1.0); + NETLIST_LOGIC_INPUT(config, "sound_nl:bit0", "PA0.IN", 0); + NETLIST_LOGIC_INPUT(config, "sound_nl:bit1", "PA1.IN", 0); + NETLIST_LOGIC_INPUT(config, "sound_nl:bit2", "PA2.IN", 0); + NETLIST_LOGIC_INPUT(config, "sound_nl:bit3", "PA3.IN", 0); + NETLIST_STREAM_OUTPUT(config, "sound_nl:cout0", 0, "OUTPUT").set_mult_offset(1.0, 0.0); + + TICKET_DISPENSER(config, m_hopper, attotime::from_msec(50)); } @@ -715,22 +649,25 @@ void gi6809_state::glck6809(machine_config &config) MC6809E(config, m_slavecpu, CPU_CLOCK_GL); m_slavecpu->set_addrmap(AS_PROGRAM, &gi6809_state::glckslave_map); - mc6845_device &crtc(MC6845(config, "crtc", PIXEL_CLOCK)); - crtc.set_screen("screen"); - crtc.set_show_border_area(false); - crtc.set_char_width(8); - crtc.out_vsync_callback().set(FUNC(gi6809_state::crtc_vs_gl_w)); + MC6845(config, m_crtc, PIXEL_CLOCK); + m_crtc->set_screen("screen"); + m_crtc->set_show_border_area(false); + m_crtc->set_char_width(8); PIA6821(config, m_pia[0], 0); // controlled by slave m_pia[0]->readpa_handler().set_ioport("PIA0_A"); m_pia[0]->writepb_handler().set(FUNC(gi6809_state::lamps5_w)); + m_pia[0]->ca2_handler().set_nop(); + m_pia[0]->cb2_handler().set_nop(); PIA6821(config, m_pia[1], 0); // controlled by master m_pia[1]->writepa_handler().set(FUNC(gi6809_state::snd_mux_w)); m_pia[1]->readpb_handler().set(FUNC(gi6809_state::gi6809_mux_port_r)); m_pia[1]->writepb_handler().set(FUNC(gi6809_state::lamps3_w)); - m_pia[1]->readcb1_handler().set(FUNC(gi6809_state::ret_vsync_r)); + m_pia[1]->readcb1_handler().set(m_crtc, FUNC(mc6845_device::vsync_r)); m_pia[1]->irqb_handler().set_inputline(m_maincpu, M6809_IRQ_LINE); + m_pia[1]->ca2_handler().set_nop(); + m_pia[1]->cb2_handler().set_nop(); } @@ -744,24 +681,29 @@ void gi6809_state::castawayt(machine_config &config) MC6809(config, m_slavecpu, CPU_CLOCK); m_slavecpu->set_addrmap(AS_PROGRAM, &gi6809_state::castslave_map); - mc6845_device &crtc(MC6845(config, "crtc", PIXEL_CLOCK)); - crtc.set_screen("screen"); - crtc.set_show_border_area(false); - crtc.set_char_width(8); - crtc.out_vsync_callback().set(FUNC(gi6809_state::crtc_vs_ca_w)); + MC6845(config, m_crtc, PIXEL_CLOCK); + m_crtc->set_screen("screen"); + m_crtc->set_show_border_area(false); + m_crtc->set_char_width(8); + m_crtc->out_vsync_callback().set(m_pia[1], FUNC(pia6821_device::cb1_w)); + m_crtc->out_vsync_callback().append([this](u8 state) { m_pia[1]->read(1); }); PIA6821(config, m_pia[0], 0); // DDRA:00 (All In) - DDRB:FF (All Out) m_pia[0]->readpa_handler().set_ioport("PIA0_A"); m_pia[0]->writepb_handler().set(FUNC(gi6809_state::lamps8_w)); - m_pia[0]->readca1_handler().set(FUNC(gi6809_state::pia0_ca1_r)); - m_pia[0]->ca2_handler().set([](bool state) {}); + m_pia[0]->readca1_handler().set(m_crtc, FUNC(mc6845_device::vsync_r)); + m_pia[0]->ca2_handler().set_nop(); PIA6821(config, m_pia[1], 0); // DDRA:FF (All Out) - DDRB:EO (OOOI-IIII) m_pia[1]->writepa_handler().set(FUNC(gi6809_state::snd_mux_w)); - m_pia[1]->readpb_handler().set(FUNC(gi6809_state::cast_mux_port_r)); + m_pia[1]->readpb_handler().set(FUNC(gi6809_state::gi6809_mux_port_r)); m_pia[1]->writepb_handler().set(FUNC(gi6809_state::lamps3h_w)); - m_pia[1]->readcb1_handler().set(FUNC(gi6809_state::ret_vsync_r)); - m_pia[1]->cb2_handler().set([](bool state) {}); + + //m_pia[1]->readca1_handler() coin in upper opto to be implemented + //m_pia[1]->readca2_handler() coin in lower opto to be implemented + + m_pia[1]->readcb1_handler().set(m_crtc, FUNC(mc6845_device::vsync_r)); + m_pia[1]->cb2_handler().set_nop(); m_pia[1]->irqa_handler().set_inputline(m_maincpu, M6809_FIRQ_LINE); m_pia[1]->irqb_handler().set_inputline(m_maincpu, M6809_IRQ_LINE); } @@ -777,25 +719,31 @@ void gi6809_state::jesterch(machine_config &config) MC6809E(config, m_slavecpu, CPU_CLOCK/2); m_slavecpu->set_addrmap(AS_PROGRAM, &gi6809_state::jestslave_map); - mc6845_device &crtc(MC6845(config, "crtc", PIXEL_CLOCK)); - crtc.set_screen("screen"); - crtc.set_show_border_area(false); - crtc.set_char_width(8); - crtc.out_vsync_callback().set(FUNC(gi6809_state::crtc_vs_je_w)); + MC6845(config, m_crtc, PIXEL_CLOCK); + m_crtc->set_screen("screen"); + m_crtc->set_show_border_area(false); + m_crtc->set_char_width(8); + m_crtc->out_vsync_callback().set(m_pia[1], FUNC(pia6821_device::cb1_w)); + m_crtc->out_vsync_callback().append(m_pia[0], FUNC(pia6821_device::ca1_w)); + m_crtc->out_vsync_callback().append([this](u8 state) { m_pia[1]->ca1_w(!state); }); PIA6821(config, m_pia[0], 0); // DDRA:00 (All In) - DDRB:1F (IIIO-OOOO) m_pia[0]->readpa_handler().set_ioport("PIA0_A"); m_pia[0]->writepb_handler().set(FUNC(gi6809_state::lamps5_w)); m_pia[0]->irqa_handler().set_inputline(m_slavecpu, M6809_IRQ_LINE); - m_pia[0]->ca2_handler().set([](bool state) {}); - m_pia[0]->cb2_handler().set([](bool state) {}); + m_pia[0]->ca2_handler().set_nop(); + m_pia[0]->cb2_handler().set_nop(); PIA6821(config, m_pia[1], 0); // DDRA:FF (All Out) - DDRB:EO (OOOI-IIII) m_pia[1]->writepa_handler().set(FUNC(gi6809_state::snd_mux_w)); - m_pia[1]->readpb_handler().set(FUNC(gi6809_state::cast_mux_port_r)); + m_pia[1]->readpb_handler().set(FUNC(gi6809_state::gi6809_mux_port_r)); m_pia[1]->writepb_handler().set(FUNC(gi6809_state::lamps3_w)); - m_pia[1]->ca2_handler().set([](bool state) {}); - m_pia[1]->cb2_handler().set([](bool state) {}); + + //m_pia[1]->readca1_handler() coin in upper opto to be implemented + //m_pia[1]->readca2_handler() coin in lower opto to be implemented + + m_pia[1]->ca2_handler().set_nop(); + m_pia[1]->cb2_handler().set_nop(); m_pia[1]->irqb_handler().set_inputline(m_maincpu, M6809_IRQ_LINE); m_pia[1]->irqa_handler().set_inputline(m_maincpu, M6809_FIRQ_LINE); } @@ -826,7 +774,6 @@ ROM_START( castawayt ) ROM_LOAD( "ca_bp.u31", 0x0100, 0x0100, CRC(4d233808) SHA1(ac864bc5fe23e76786c78119b052eb68fa923ad4) ) ROM_END - ROM_START( jesterch ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "27512.u8", 0x0000, 0x10000, CRC(64045d54) SHA1(6a48e868f854153dad2e28043ceeabf3e028cc6b) ) @@ -848,7 +795,6 @@ ROM_START( jesterch ) ROM_LOAD( "jc_bp.u31", 0x0100, 0x0100, CRC(4d233808) SHA1(ac864bc5fe23e76786c78119b052eb68fa923ad4) ) // from CA ROM_END - ROM_START( glck6809 ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "27c128.u8", 0xc000, 0x4000, CRC(867d84c2) SHA1(44c2f94559aa5d11b42363d0a9b2fb7612b945c3) ) @@ -896,7 +842,7 @@ void gi6809_state::init_cast() * Game Drivers * *********************************************/ -// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS -GAME( 1987, castawayt, 0, castawayt, castawayt, gi6809_state, init_cast, ROT0, "Tranex Australia Pty Ltd.", "Cast Away (dual 6809 GI Australasia PCB)", MACHINE_NOT_WORKING ) -GAME( 1987, jesterch, 0, jesterch, jesterch, gi6809_state, empty_init, ROT0, "Tranex Australia Pty Ltd.", "Jester Chance (dual 6809 GI Australasia PCB)", MACHINE_NOT_WORKING ) -GAME( 198?, glck6809, 0, glck6809, glck6809, gi6809_state, empty_init, ROT0, "General Instrument?", "Good Luck! (dual 6809 GI Australasia PCB)", MACHINE_NOT_WORKING ) +// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS +GAME( 1987, castawayt, 0, castawayt, castawayt, gi6809_state, init_cast, ROT0, "Tranex Australia Pty Ltd.", "Cast Away (dual 6809 GI Australasia PCB)", MACHINE_NOT_WORKING ) +GAME( 1987, jesterch, 0, jesterch, jesterch, gi6809_state, empty_init, ROT0, "Tranex Australia Pty Ltd.", "Jester Chance (dual 6809 GI Australasia PCB)", MACHINE_NOT_WORKING ) +GAME( 198?, glck6809, 0, glck6809, glck6809, gi6809_state, empty_init, ROT0, "General Instrument?", "Good Luck! (dual 6809 GI Australasia PCB)", MACHINE_NOT_WORKING ) |