diff --git a/src/mame/adp/stellafr.cpp b/src/mame/adp/stellafr.cpp index c7453c4f4f890..5a96275ce225b 100644 --- a/src/mame/adp/stellafr.cpp +++ b/src/mame/adp/stellafr.cpp @@ -94,12 +94,100 @@ Sound and I/O board: #include "machine/mc68681.h" #include "machine/nvram.h" #include "sound/ay8910.h" +#include "sound/dac.h" #include "speaker.h" +//#define VERBOSE 1 +#include "logmacro.h" + #include "stellafr.lh" namespace { +enum +{ + PORT_I_SDA, + PORT_I_COIN, + PORT_I_IP2, //bridged to IP5 + PORT_I_MISO, + PORT_I_DOOR, + PORT_I_IP5 +}; + +enum +{ + PORT_O_ALARM, + PORT_O_EN_COIN, + PORT_O_EN_SPK, + PORT_O_PROT_OD, + PORT_O_SCL, + PORT_O_LED0, + PORT_O_SDA, + PORT_O_SPZ +}; + +enum +{ + PORT_A_IO0, + PORT_A_IO1, + PORT_A_IO2, + PORT_A_IO3, + PORT_A_IO4, + PORT_A_IO5, + PORT_A_RESET, + PORT_A_DOOR_SIN +}; + +enum +{ + PORT_B_IO0, + PORT_B_IO1, + PORT_B_DAC, + PORT_B_COIN_AW, + PORT_B_RS485_OUT_EN, + PORT_B_RS485_IN_EN, + PORT_B_DOOR_SCK, + PORT_B_DOOR_SOUT +}; + +// outputs +enum +{ + U1_1MA, //shared with output to service keyboard + U1_2MA, + U1_ME, + U1_D3OUT, + U1_ANZ1, + U1_MUX1, + U1_ANZ2, + U1_MUX2 +}; + +enum +{ + U5_EN1MA, //shared with output to coin unit 1 + U5_EN2MA, + U5_AW1, + U5_AW2, + U5_ENANZ1, //shared with output to service keyboard + U5_ENMUX1, + U5_ENANZ2, //shared with output to coin unit 2 + U5_ENMUX2 +}; + +// inputs +enum +{ + U10_OUTLI, + U10_OUTEMP, + U10_OUTMA, + U10_OUTST, + U10_OUTT, + U10_OUTT2, + U10_EMP2, + U10_LI2 +}; + class stellafr_state : public driver_device { public: @@ -108,60 +196,157 @@ class stellafr_state : public driver_device m_maincpu(*this, "maincpu"), m_duart(*this, "duart"), m_nvram(*this, "nvram"), - m_digits(*this, "digit%u", 0U) + m_dac(*this, "dac"), + m_digits(*this, "digit%u", 0U), + m_lamps(*this, "lamp%u", 0U), + m_leds(*this, "led%u", 0U), + m_in0(*this, "IN0") { } void stellafr(machine_config &config); +protected: + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD; + private: - void write_8000c1(uint8_t data); - uint8_t read_800101(); - void write_800101(uint8_t data); + required_device m_maincpu; + required_device m_duart; + required_device m_nvram; + required_device m_dac; + output_finder<8> m_digits; + output_finder<128> m_lamps; + output_finder<2> m_leds; + required_ioport m_in0; + + uint8_t m_ma1; + uint8_t m_ma2; + uint8_t m_me; + uint8_t m_data3; + uint8_t m_anz1; + uint16_t m_mux1; + uint8_t m_anz2; + uint8_t m_mux2; + + uint8_t mux_r(); + void mux_w(uint8_t data); + void mux2_w(uint8_t data); void duart_output_w(uint8_t data); void ay8910_portb_w(uint8_t data); + void lamps_w(uint8_t row, uint16_t data); void mem_map(address_map &map) ATTR_COLD; void fc7_map(address_map &map) ATTR_COLD; - // devices - required_device m_maincpu; - required_device m_duart; - required_device m_nvram; - output_finder<8> m_digits; }; -void stellafr_state::write_8000c1(uint8_t data) +uint8_t stellafr_state::mux_r() +{ + bool li = false; + bool emp = false; + bool ma = false; + bool st = false; + bool t = false; // main buttons in + bool t2 = false; + bool emp2 = false; + bool li2 = false; + + uint8_t data = 0x00; + + if (li) data |= (1 << U10_OUTLI); + if (emp) data |= (1 << U10_OUTEMP); + if (ma) data |= (1 << U10_OUTMA); + if (st) data |= (1 << U10_OUTST); + if (t) data |= (1 << U10_OUTT); + if (t2) data |= (1 << U10_OUTT2); + if (emp2) data |= (1 << U10_EMP2); + if (li2) data |= (1 << U10_LI2); + + return data; +} + +void stellafr_state::lamps_w(uint8_t row, uint16_t data) { + LOG("Row %d\n",row); + for (int i = 0; i < 8; i++) + { + uint8_t lamp_index = (row * 10) + i; + bool lamp_value = BIT(data, i); + m_lamps[lamp_index] = lamp_value; + } } -uint8_t stellafr_state::read_800101() +void stellafr_state::mux_w(uint8_t data) { - return 0xff; + bool enma1 = BIT(data,U5_EN1MA); + bool enma2 = BIT(data,U5_EN2MA); + bool aw1 = BIT(data,U5_AW1); + bool aw2 = BIT(data,U5_AW2); + bool enanz1 = BIT(data,U5_ENANZ1); //enable 7seg + bool enmux1 = BIT(data,U5_ENMUX1); //enable lamps/buttons + bool enanz2 = BIT(data,U5_ENANZ2); + bool enmux2 = BIT(data,U5_ENMUX2); + + if (enma1) + ; // LOG("1MA %d\n",m_ma1); + if (enma1) + ; // LOG("ME %d\n",m_me); + if (enma2) + ; // LOG("2MA %d\n",m_ma2); + if (enanz1) + ; // LOG("ANZ1 %d\n",m_anz1); //main 7seg led out + if (enanz1) + ; // LOG("ST %d\n",m_ma1); + if (enmux1) + lamps_w((m_mux1 >> 12) & 0x07, m_mux1 & 0x0FFF); //main lamps out + if (enanz2) + ; // LOG("ANZ2 %d\n",m_anz2); + if (enmux2) + ; // LOG("MUX2 %d\n",m_mux2); + if (aw1) + ; + if (aw2) + ; } -void stellafr_state::write_800101(uint8_t data) +void stellafr_state::mux2_w(uint8_t data) { + // anz goes into one 74hc4094 + // mux has 2 chained for lamp cols 0 - 11, 3 bits for lz encoded and EnSDAp + m_ma1 = (m_ma1 << 1) | BIT(data,U1_1MA); + m_ma2 = (m_ma2 << 1) | BIT(data,U1_2MA); + m_me = (m_me << 1) | BIT(data,U1_ME); + m_data3 = (m_data3 << 1) | BIT(data,U1_D3OUT); + m_anz1 = (m_anz1 << 1) | BIT(data,U1_ANZ1); + m_mux1 = (m_mux1 << 1) | BIT(data,U1_MUX1); + m_anz2 = (m_anz2 << 1) | BIT(data,U1_ANZ2); + m_mux2 = (m_mux2 << 1) | BIT(data,U1_MUX2); } void stellafr_state::duart_output_w(uint8_t data) { + m_leds[0] = !BIT(data, PORT_O_LED0); + m_leds[1] = !BIT(data, PORT_O_SDA); } void stellafr_state::ay8910_portb_w(uint8_t data) { } - - void stellafr_state::mem_map(address_map &map) { map(0x000000, 0x01ffff).rom(); - map(0x8000c1, 0x8000c1).w(FUNC(stellafr_state::write_8000c1)); - map(0x800101, 0x800101).rw(FUNC(stellafr_state::read_800101), FUNC(stellafr_state::write_800101)); - map(0x800141, 0x800141).rw("aysnd", FUNC(ay8910_device::data_r), FUNC(ay8910_device::address_w)); - map(0x800143, 0x800143).w("aysnd", FUNC(ay8910_device::data_w)); - map(0x800180, 0x80019f).rw(m_duart, FUNC(mc68681_device::read), FUNC(mc68681_device::write)).umask16(0x00ff); + // controlled by U17 74HC138 + map(0x800001, 0x800001).w(m_dac, FUNC(dac_byte_interface::data_w)); // Y0 + // Y1 device on cpu board + // Y2 device on cpu board + map(0x8000c1, 0x8000c1).w(FUNC(stellafr_state::mux2_w)); // Y3 SP/ME II out + map(0x800100, 0x800101).rw(FUNC(stellafr_state::mux_r), FUNC(stellafr_state::mux_w)); // Y4 SP/ME I out / Inputs + map(0x800141, 0x800141).rw("aysnd", FUNC(ay8910_device::data_r), FUNC(ay8910_device::address_w)); // Y5 + map(0x800143, 0x800143).w("aysnd", FUNC(ay8910_device::data_w)); // Y5 + map(0x800180, 0x80019f).rw(m_duart, FUNC(mc68681_device::read), FUNC(mc68681_device::write)).umask16(0x00ff); // Y6 + // Y7 NC map(0xff0000, 0xffffff).ram().share("nvram"); } @@ -170,6 +355,18 @@ void stellafr_state::fc7_map(address_map &map) map(0xfffff5, 0xfffff5).r(m_duart, FUNC(mc68681_device::get_irq_vector)); } +void stellafr_state::machine_start() +{ + m_digits.resolve(); + m_lamps.resolve(); + m_leds.resolve(); + save_item(NAME(m_mux1)); +} + +void stellafr_state::machine_reset() +{ + m_mux1 = 0; +} static INPUT_PORTS_START( stellafr ) PORT_START("IN0") @@ -193,6 +390,8 @@ void stellafr_state::stellafr(machine_config &config) NVRAM(config, m_nvram, nvram_device::DEFAULT_NONE); + AD7224(config, m_dac, 0); + SPEAKER(config, "mono").front_center(); ay8910_device &aysnd(AY8910(config, "aysnd", 1000000)); aysnd.add_route(ALL_OUTPUTS, "mono", 0.85); @@ -212,12 +411,48 @@ ROM_START( allfred ) ROM_LOAD16_BYTE( "allfred_w3_ii.u6", 0x00001, 0x80000, CRC(2f216373) SHA1(71d713b267c21dc0a4e955f422e7102553d16d30) ) ROM_END +ROM_START( big_jackpot ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "big_jackpot_f1_pr_1.u2", 0x00000, 0x8000, CRC(94a14d8e) SHA1(3c4abdad8e38102278920b0f35a8ab3f7a4f2142) ) + ROM_LOAD16_BYTE( "big_jackpot_f1_pr_2.u6", 0x00001, 0x8000, CRC(51f8ab0b) SHA1(1cb2aa40922956d93605c77862f0fd6f38595eb8) ) +ROM_END + +ROM_START( disc_bonus ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "disc_bonus_f3_1.u2", 0x00000, 0x10000, CRC(6599babf) SHA1(4ba8844ecee15d299e00fff1c5f51d53ce2ccfde) ) + ROM_LOAD16_BYTE( "disc_bonus_f3_2.u6", 0x00001, 0x10000, CRC(6e7fa161) SHA1(7f0e695ede3ba198cc94f80e72c6cbe41468a970) ) +ROM_END + +ROM_START( disc_jackpot ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "disc_jackpot_f2_pr.1.u2", 0x00000, 0x8000, CRC(5af04926) SHA1(7e10ddd1f068565854c245e39f73faf0685e4bf3) ) + ROM_LOAD16_BYTE( "disc_jackpot_f2_pr.2.u6", 0x00001, 0x8000, CRC(95a7f938) SHA1(2d14da419d89fd26ea3245fbe24cafa346fecdca) ) +ROM_END + ROM_START( grandhand ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE( "grandhand_f2.u2", 0x00000, 0x10000, CRC(367c86f0) SHA1(c4a42887887614f0d4927b5a36a12b7d88a28e32) ) ROM_LOAD16_BYTE( "grandhand_f2.u6", 0x00001, 0x10000, CRC(b0f14dd4) SHA1(f6a713334ed85ecf52e0671aa15c6c43d32db4d2) ) ROM_END +ROM_START( jokerpoker ) + ROM_REGION( 0x300000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "joker_poker_f1.u2", 0x00000, 0x18000, CRC(9f8ef927) SHA1(9a894e7a9326c9846eabb7b22916244b51c16fd3) ) + ROM_LOAD16_BYTE( "joker_poker_f1.u6", 0x00001, 0x18000, CRC(f53973a1) SHA1(27dabe5e6df6ec03080635da5b68b5a8125e71d1) ) +ROM_END + +ROM_START( jumbojumbo ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "jumbo_jumbo_f2_pr1.u2", 0x00000, 0x10000, CRC(97a04942) SHA1(f512451376697e5d3fd18bfadbe6711b9bfeb74b) ) + ROM_LOAD16_BYTE( "jumbo_jumbo_f2_pr2.u6", 0x00001, 0x10000, CRC(35acb575) SHA1(88a7cb6397fe031bda0b7dddd1049fb04eba8b40) ) +ROM_END + +ROM_START( jumbojumbof ) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "jumbo_jumbo_fun_f1_pr1.u2", 0x00000, 0x20000, CRC(93c19377) SHA1(72a2455dc968b605c408cf0d5ed36e25ded55085) ) + ROM_LOAD16_BYTE( "jumbo_jumbo_fun_f1_pr2.u6", 0x00001, 0x20000, CRC(be428893) SHA1(273a5339201997b6043992e278f262db28fb3bf9) ) +ROM_END + ROM_START( kleopatra ) ROM_REGION( 0x100000, "maincpu", 0 ) ROM_LOAD16_BYTE( "kleopatra_w4_i.u2", 0x00000, 0x80000, CRC(2035d182) SHA1(683cab310445a6d31f080830a12c07d711119874) ) @@ -262,13 +497,19 @@ ROM_END } // anonymous namespace -GAMEL(1993, action, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "ADP", "Action", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) -GAMEL(1994, grandhand, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Grand Hand", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) -GAMEL(1994, st_vulkn, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Vulkan", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) -GAMEL(1995, multimulti,0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "ADP", "Multi Multi", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) -GAMEL(1995, sunny, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Mega", "Sunny", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) -GAMEL(1996, st_ohla, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Oh La La", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) -GAMEL(1998, allfred, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Allfred", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) -GAMEL(1998, taipan, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Nova", "Tai Pan Money", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) -GAMEL(199?, kleopatra, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Asterix und Kleopatra", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) -GAMEL(2001, turbosun, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Mega", "Turbo Sunny", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1993, action, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "ADP", "Action", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1994, disc_bonus, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "ADP", "Disc Bonus", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1994, grandhand, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Grand Hand", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1994, jumbojumbo, jumbojumbof, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Venus", "Jumbo Jumbo", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1994, st_vulkn, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Vulkan", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1995, multimulti, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "ADP", "Multi Multi", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1995, disc_jackpot, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "ADP", "Disc Jackpot", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1995, sunny, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Mega", "Sunny", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1996, big_jackpot, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "ADP", "Big Jackpot", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1994, jumbojumbof, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Venus", "Jumbo Jumbo Fun", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1996, st_ohla, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Oh La La", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1997, jokerpoker, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "ADP", "Joker Poker (Merkur)", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1998, allfred, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Allfred", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(1998, taipan, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Nova", "Tai Pan Money", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(199?, kleopatra, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Stella", "Asterix und Kleopatra", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) +GAMEL(2001, turbosun, 0, stellafr, stellafr, stellafr_state, empty_init, ROT0, "Mega", "Turbo Sunny", MACHINE_NOT_WORKING | MACHINE_MECHANICAL | MACHINE_REQUIRES_ARTWORK, layout_stellafr ) diff --git a/src/mame/layout/stellafr.lay b/src/mame/layout/stellafr.lay index 0ec827a70638a..69f1ed1ad9c67 100644 --- a/src/mame/layout/stellafr.lay +++ b/src/mame/layout/stellafr.lay @@ -4,6 +4,20 @@ license:CC0-1.0 --> + + + + + + + + + + + + + + @@ -18,39 +32,62 @@ license:CC0-1.0 - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index a8ba525610609..a9d412f48f985 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -476,7 +476,13 @@ supermultib @source:adp/stellafr.cpp action allfred +big_jackpot +disc_bonus +disc_jackpot grandhand +jokerpoker +jumbojumbo +jumbojumbof kleopatra multimulti st_ohla diff --git a/src/mame/pinball/gts1.cpp b/src/mame/pinball/gts1.cpp index f68d815cc4e9f..a9758ca2db92d 100644 --- a/src/mame/pinball/gts1.cpp +++ b/src/mame/pinball/gts1.cpp @@ -1078,7 +1078,7 @@ GAME(19??, sys1test, gts1, p0, gts1, gts1_state, empty_init, ROT0, "Gott GAME(1977, cleoptra, gts1, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Cleopatra", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1978, sinbad, gts1, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1978, sinbadn, sinbad, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad (Norway)", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE ) -GAME(1978, jokrpokr, gts1, p0, jokrpokr, gts1_state, empty_init, ROT0, "Gottlieb", "Joker Poker", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE ) +GAME(1978, jokrpokr, gts1, p0, jokrpokr, gts1_state, empty_init, ROT0, "Gottlieb", "Joker Poker (Gottlieb)", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE ) // NE555 beeper GAME(1978, dragon, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Dragon", MACHINE_MECHANICAL | MACHINE_SUPPORTS_SAVE )