trunk/src/mame/layout/ltd.lay
| r31703 | r31704 | |
| 30 | 30 | |
| 31 | 31 | <!-- Background --> |
| 32 | 32 | <backdrop element="background"> |
| 33 | | <bounds left="0" top="20" right="318" bottom="394" /> |
| 33 | <bounds left="0" top="20" right="274" bottom="394" /> |
| 34 | 34 | </backdrop> |
| 35 | 35 | |
| 36 | 36 | <!-- LEDs --> |
| 37 | 37 | |
| 38 | 38 | <!-- Player 1 Score --> |
| 39 | 39 | |
| 40 | | <bezel name="digit6" element="digit"> |
| 40 | <bezel name="digit5" element="digit"> |
| 41 | 41 | <bounds left="10" top="45" right="44" bottom="84" /> |
| 42 | 42 | </bezel> |
| 43 | | <bezel name="digit5" element="digit"> |
| 43 | <bezel name="digit4" element="digit"> |
| 44 | 44 | <bounds left="54" top="45" right="88" bottom="84" /> |
| 45 | 45 | </bezel> |
| 46 | | <bezel name="digit4" element="digit"> |
| 46 | <bezel name="digit3" element="digit"> |
| 47 | 47 | <bounds left="98" top="45" right="132" bottom="84" /> |
| 48 | 48 | </bezel> |
| 49 | | <bezel name="digit3" element="digit"> |
| 49 | <bezel name="digit2" element="digit"> |
| 50 | 50 | <bounds left="142" top="45" right="176" bottom="84" /> |
| 51 | 51 | </bezel> |
| 52 | | <bezel name="digit2" element="digit"> |
| 52 | <bezel name="digit1" element="digit"> |
| 53 | 53 | <bounds left="186" top="45" right="220" bottom="84" /> |
| 54 | 54 | </bezel> |
| 55 | | <bezel name="digit1" element="digit"> |
| 55 | <bezel name="digit0" element="digit"> |
| 56 | 56 | <bounds left="230" top="45" right="264" bottom="84" /> |
| 57 | 57 | </bezel> |
| 58 | | <bezel name="digit0" element="digit"> |
| 59 | | <bounds left="274" top="45" right="308" bottom="84" /> |
| 60 | | </bezel> |
| 61 | 58 | |
| 62 | 59 | <!-- Player 2 Score --> |
| 63 | | <bezel name="digit16" element="digit"> |
| 60 | <bezel name="digit15" element="digit"> |
| 64 | 61 | <bounds left="10" top="105" right="44" bottom="144" /> |
| 65 | 62 | </bezel> |
| 66 | | <bezel name="digit15" element="digit"> |
| 63 | <bezel name="digit14" element="digit"> |
| 67 | 64 | <bounds left="54" top="105" right="88" bottom="144" /> |
| 68 | 65 | </bezel> |
| 69 | | <bezel name="digit14" element="digit"> |
| 66 | <bezel name="digit13" element="digit"> |
| 70 | 67 | <bounds left="98" top="105" right="132" bottom="144" /> |
| 71 | 68 | </bezel> |
| 72 | | <bezel name="digit13" element="digit"> |
| 69 | <bezel name="digit12" element="digit"> |
| 73 | 70 | <bounds left="142" top="105" right="176" bottom="144" /> |
| 74 | 71 | </bezel> |
| 75 | | <bezel name="digit12" element="digit"> |
| 72 | <bezel name="digit11" element="digit"> |
| 76 | 73 | <bounds left="186" top="105" right="220" bottom="144" /> |
| 77 | 74 | </bezel> |
| 78 | | <bezel name="digit11" element="digit"> |
| 75 | <bezel name="digit10" element="digit"> |
| 79 | 76 | <bounds left="230" top="105" right="264" bottom="144" /> |
| 80 | 77 | </bezel> |
| 81 | | <bezel name="digit10" element="digit"> |
| 82 | | <bounds left="274" top="105" right="308" bottom="144" /> |
| 83 | | </bezel> |
| 84 | 78 | |
| 85 | 79 | <!-- Player 3 Score --> |
| 86 | | <bezel name="digit26" element="digit"> |
| 80 | <bezel name="digit25" element="digit"> |
| 87 | 81 | <bounds left="10" top="165" right="44" bottom="204" /> |
| 88 | 82 | </bezel> |
| 89 | | <bezel name="digit25" element="digit"> |
| 83 | <bezel name="digit24" element="digit"> |
| 90 | 84 | <bounds left="54" top="165" right="88" bottom="204" /> |
| 91 | 85 | </bezel> |
| 92 | | <bezel name="digit24" element="digit"> |
| 86 | <bezel name="digit23" element="digit"> |
| 93 | 87 | <bounds left="98" top="165" right="132" bottom="204" /> |
| 94 | 88 | </bezel> |
| 95 | | <bezel name="digit23" element="digit"> |
| 89 | <bezel name="digit22" element="digit"> |
| 96 | 90 | <bounds left="142" top="165" right="176" bottom="204" /> |
| 97 | 91 | </bezel> |
| 98 | | <bezel name="digit22" element="digit"> |
| 92 | <bezel name="digit21" element="digit"> |
| 99 | 93 | <bounds left="186" top="165" right="220" bottom="204" /> |
| 100 | 94 | </bezel> |
| 101 | | <bezel name="digit21" element="digit"> |
| 95 | <bezel name="digit20" element="digit"> |
| 102 | 96 | <bounds left="230" top="165" right="264" bottom="204" /> |
| 103 | 97 | </bezel> |
| 104 | | <bezel name="digit20" element="digit"> |
| 105 | | <bounds left="274" top="165" right="308" bottom="204" /> |
| 106 | | </bezel> |
| 107 | 98 | |
| 108 | 99 | <!-- Player 4 Score --> |
| 109 | | <bezel name="digit36" element="digit"> |
| 100 | <bezel name="digit35" element="digit"> |
| 110 | 101 | <bounds left="10" top="225" right="44" bottom="264" /> |
| 111 | 102 | </bezel> |
| 112 | | <bezel name="digit35" element="digit"> |
| 103 | <bezel name="digit34" element="digit"> |
| 113 | 104 | <bounds left="54" top="225" right="88" bottom="264" /> |
| 114 | 105 | </bezel> |
| 115 | | <bezel name="digit34" element="digit"> |
| 106 | <bezel name="digit33" element="digit"> |
| 116 | 107 | <bounds left="98" top="225" right="132" bottom="264" /> |
| 117 | 108 | </bezel> |
| 118 | | <bezel name="digit33" element="digit"> |
| 109 | <bezel name="digit32" element="digit"> |
| 119 | 110 | <bounds left="142" top="225" right="176" bottom="264" /> |
| 120 | 111 | </bezel> |
| 121 | | <bezel name="digit32" element="digit"> |
| 112 | <bezel name="digit31" element="digit"> |
| 122 | 113 | <bounds left="186" top="225" right="220" bottom="264" /> |
| 123 | 114 | </bezel> |
| 124 | | <bezel name="digit31" element="digit"> |
| 115 | <bezel name="digit30" element="digit"> |
| 125 | 116 | <bounds left="230" top="225" right="264" bottom="264" /> |
| 126 | 117 | </bezel> |
| 127 | | <bezel name="digit30" element="digit"> |
| 128 | | <bounds left="274" top="225" right="308" bottom="264" /> |
| 129 | | </bezel> |
| 130 | 118 | |
| 131 | 119 | <!-- Credits and Balls --> |
| 132 | | <bezel name="digit44" element="digit"> |
| 133 | | <bounds left="10" top="345" right="44" bottom="384" /> |
| 134 | | </bezel> |
| 135 | | <bezel name="digit43" element="digit"> |
| 120 | <bezel name="digit41" element="digit"> |
| 136 | 121 | <bounds left="54" top="345" right="88" bottom="384" /> |
| 137 | 122 | </bezel> |
| 138 | | <bezel name="digit41" element="digit"> |
| 139 | | <bounds left="186" top="345" right="220" bottom="384" /> |
| 140 | | </bezel> |
| 141 | 123 | <bezel name="digit40" element="digit"> |
| 142 | 124 | <bounds left="230" top="345" right="264" bottom="384" /> |
| 143 | 125 | </bezel> |
| r31703 | r31704 | |
| 148 | 130 | <bezel name="text2" element="P4"><bounds left="100" right="180" top="90" bottom="102" /></bezel> |
| 149 | 131 | <bezel name="text1" element="P5"><bounds left="100" right="180" top="150" bottom="162" /></bezel> |
| 150 | 132 | <bezel name="text0" element="P6"><bounds left="100" right="180" top="210" bottom="222" /></bezel> |
| 151 | | <bezel name="led0" element="red_led"> |
| 152 | | <bounds left="110" right="125" top="360" bottom="375" /></bezel> |
| 153 | 133 | </view> |
| 154 | 134 | </mamelayout> |
trunk/src/mame/drivers/ltd.c
| r31703 | r31704 | |
| 3 | 3 | PINBALL |
| 4 | 4 | LTD (Brazil) |
| 5 | 5 | |
| 6 | | Not much info available for these machines. |
| 6 | Not much info available for these machines. System 3 has a homebrew partial |
| 7 | schematic available (with some obvious mistakes). There's also a manual |
| 8 | (looks like Portuguese?), but no schematic. No info on system 4 has been found. |
| 9 | |
| 7 | 10 | Used PinMAME as a reference. |
| 8 | 11 | |
| 12 | System 3: NMI is connected "FICHA" (coin slot). RST is connected to "TILT". |
| 13 | |
| 14 | The manual mentions these machines: |
| 15 | Arizona, Atlantis, Galaxia, Hustler, Martian Queen. |
| 16 | |
| 17 | PinMAME has a large list of games, these are: |
| 18 | 1977: O Gaucho, Samba |
| 19 | 1978: Grand Prix |
| 20 | 1981: Al Capone, Amazon, Arizona, Atlantis, Black Hole, Carnaval no Rio, |
| 21 | Cowboy Eight Ball, Disco Dancing, Force, Galaxia, Haunted Hotel, |
| 22 | Hustler, King Kong, Kung Fu, Mr. & Mrs. Pec-Men, Martian Queen, |
| 23 | Space Poker, Time Machine, Zephy |
| 24 | 1982: Alien Warrior, Columbia, Cowboy 2, Trick Shooter |
| 25 | (unknown year): Viking King |
| 26 | |
| 9 | 27 | ToDo: |
| 10 | | - Everything |
| 28 | - System 4, everything |
| 29 | - System 3, sound |
| 30 | - Zephy, no playfield inputs |
| 31 | - Outputs |
| 32 | - Mechanical |
| 11 | 33 | |
| 12 | | |
| 13 | 34 | ********************************************************************************/ |
| 14 | 35 | |
| 15 | 36 | #include "machine/genpin.h" |
| 16 | 37 | #include "cpu/m6800/m6800.h" |
| 38 | #include "sound/ay8910.h" |
| 17 | 39 | #include "ltd.lh" |
| 18 | 40 | |
| 19 | 41 | class ltd_state : public genpin_class |
| r31703 | r31704 | |
| 25 | 47 | , m_p_ram(*this, "nvram") |
| 26 | 48 | { } |
| 27 | 49 | |
| 50 | DECLARE_DRIVER_INIT(atla_ltd); |
| 51 | DECLARE_DRIVER_INIT(bhol_ltd); |
| 52 | DECLARE_DRIVER_INIT(zephy); |
| 28 | 53 | DECLARE_DRIVER_INIT(ltd); |
| 29 | 54 | DECLARE_READ8_MEMBER(io_r); |
| 30 | 55 | DECLARE_WRITE8_MEMBER(io_w); |
| 56 | DECLARE_INPUT_CHANGED_MEMBER(ficha); |
| 31 | 57 | TIMER_DEVICE_CALLBACK_MEMBER(timer_r); |
| 32 | 58 | private: |
| 59 | bool m_timer_r; |
| 60 | UINT8 m_game; |
| 33 | 61 | UINT8 m_out_offs; |
| 34 | 62 | virtual void machine_reset(); |
| 35 | 63 | required_device<cpu_device> m_maincpu; |
| r31703 | r31704 | |
| 39 | 67 | |
| 40 | 68 | static ADDRESS_MAP_START( ltd3_map, AS_PROGRAM, 8, ltd_state ) |
| 41 | 69 | AM_RANGE(0x0000, 0x007f) AM_RAM AM_SHARE("nvram") // internal to the cpu |
| 42 | | AM_RANGE(0x0080, 0x00ff) AM_READ(io_r) |
| 70 | AM_RANGE(0x0080, 0x0087) AM_MIRROR(0x78) AM_READ(io_r) |
| 43 | 71 | AM_RANGE(0x0800, 0x2fff) AM_WRITE(io_w) |
| 44 | 72 | AM_RANGE(0xc000, 0xcfff) AM_ROM AM_MIRROR(0x3000) AM_REGION("roms", 0) |
| 45 | 73 | ADDRESS_MAP_END |
| 46 | 74 | |
| 47 | 75 | static ADDRESS_MAP_START( ltd4_map, AS_PROGRAM, 8, ltd_state ) |
| 48 | | AM_RANGE(0x0000, 0x01ff) AM_RAM |
| 76 | AM_RANGE(0x0000, 0x001f) AM_RAM // internal to the cpu |
| 77 | AM_RANGE(0x0080, 0x00ff) AM_RAM |
| 78 | AM_RANGE(0x0100, 0x01ff) AM_RAM AM_SHARE("nvram") |
| 49 | 79 | //AM_RANGE(0x0800, 0x0800) AM_WRITE(cycle_reset_w) |
| 50 | | //AM_RANGE(0x0c00, 0x0c00) AM_WRITE(ay8910_1_reset) |
| 51 | | //AM_RANGE(0x1000, 0x1000) AM_WRITE(ay8910_0_ctrl_w) |
| 52 | | //AM_RANGE(0x1400, 0x1400) AM_WRITE(ay8910_0_reset) |
| 53 | | //AM_RANGE(0x1800, 0x1800) AM_WRITE(ay8910_1_ctrl_w) |
| 80 | AM_RANGE(0x0c00, 0x0c00) AM_DEVWRITE("aysnd_1", ay8910_device, reset_w) |
| 81 | AM_RANGE(0x1000, 0x1000) AM_DEVWRITE("aysnd_0", ay8910_device, address_w) |
| 82 | AM_RANGE(0x1400, 0x1400) AM_DEVWRITE("aysnd_0", ay8910_device, reset_w) |
| 83 | AM_RANGE(0x1800, 0x1800) AM_DEVWRITE("aysnd_1", ay8910_device, address_w) |
| 54 | 84 | //AM_RANGE(0x2800, 0x2800) AM_WRITE(auxlamps_w) |
| 55 | | //AM_RANGE(0x3000, 0x3000) AM_WRITE(ay8910_0_data_w) |
| 56 | | //AM_RANGE(0x3800, 0x3800) AM_WRITE(ay8910_1_data_w) |
| 85 | AM_RANGE(0x3000, 0x3000) AM_DEVWRITE("aysnd_0", ay8910_device, data_w) |
| 86 | AM_RANGE(0x3800, 0x3800) AM_DEVWRITE("aysnd_1", ay8910_device, data_w) |
| 57 | 87 | AM_RANGE(0xc000, 0xdfff) AM_ROM AM_MIRROR(0x2000) AM_REGION("roms", 0) |
| 58 | 88 | ADDRESS_MAP_END |
| 59 | 89 | |
| r31703 | r31704 | |
| 62 | 92 | //AM_RANGE(0x0101, 0x0101) AM_WRITE( |
| 63 | 93 | ADDRESS_MAP_END |
| 64 | 94 | |
| 65 | | static INPUT_PORTS_START( ltd ) |
| 95 | static INPUT_PORTS_START( ltd3 ) |
| 96 | PORT_START("FICHA") |
| 97 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, ltd_state, ficha, 0) |
| 98 | |
| 99 | PORT_START("X0") |
| 100 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_0_PAD) //tilt |
| 101 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) //1,2 |
| 102 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) //1,2 |
| 103 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) //1,2 |
| 104 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) //1,2 |
| 105 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD) //1,2 |
| 106 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 107 | |
| 108 | PORT_START("X1") |
| 109 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH) //2 |
| 110 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COLON) //1,2 |
| 111 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE) //1,2 |
| 112 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH) //1,2 |
| 113 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE) //1,2 |
| 114 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE) //1 |
| 115 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 116 | |
| 117 | PORT_START("X2") |
| 118 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_A) //1,2 |
| 119 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S) //1,2 |
| 120 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) //1,2 |
| 121 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) //1,2 |
| 122 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G) //2 |
| 123 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H) //2 |
| 124 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 125 | |
| 126 | PORT_START("X3") |
| 127 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Q) //2 |
| 128 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_W) //2 |
| 129 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_E) //2 |
| 130 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_R) |
| 131 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y) |
| 132 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START ) |
| 133 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 134 | |
| 135 | PORT_START("X4") |
| 136 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z) |
| 137 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_C) |
| 138 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_V) |
| 139 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_B) |
| 140 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_N) |
| 141 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_M) |
| 142 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 143 | |
| 144 | PORT_START("X5") |
| 145 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE) |
| 146 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER) |
| 147 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) |
| 148 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K) |
| 149 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I) |
| 150 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_O) |
| 151 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 152 | |
| 153 | PORT_START("X6") |
| 154 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA) |
| 155 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_STOP) |
| 156 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD) |
| 157 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD) |
| 158 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD) |
| 159 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_9_PAD) |
| 160 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 161 | |
| 162 | PORT_START("X7") |
| 163 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole") // 1,2 |
| 164 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_ASTERISK) |
| 165 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH_PAD) |
| 166 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS_PAD) |
| 167 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_PLUS_PAD) |
| 168 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER_PAD) |
| 169 | PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 66 | 170 | INPUT_PORTS_END |
| 67 | 171 | |
| 172 | static INPUT_PORTS_START( ltd4 ) |
| 173 | INPUT_PORTS_END |
| 174 | |
| 175 | INPUT_CHANGED_MEMBER( ltd_state::ficha ) |
| 176 | { |
| 177 | if(newval) |
| 178 | m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 179 | } |
| 180 | |
| 68 | 181 | // switches |
| 69 | 182 | READ8_MEMBER( ltd_state::io_r ) |
| 70 | 183 | { |
| 71 | | return 0; |
| 184 | if (offset==0) return ioport("X0")->read(); |
| 185 | if (offset==1) return ioport("X1")->read(); |
| 186 | if (offset==2) return ioport("X2")->read(); |
| 187 | if (offset==3) return ioport("X3")->read(); |
| 188 | if (offset==7) return ioport("X7")->read(); |
| 189 | return 0xff; |
| 72 | 190 | } |
| 73 | 191 | |
| 74 | | // Lamps |
| 192 | // Lamps only used by Zephy |
| 75 | 193 | WRITE8_MEMBER( ltd_state::io_w ) |
| 76 | 194 | { |
| 77 | 195 | offset >>= 10; // reduces offsets to 1 per bank |
| r31703 | r31704 | |
| 80 | 198 | void ltd_state::machine_reset() |
| 81 | 199 | { |
| 82 | 200 | m_out_offs = 0; |
| 201 | m_timer_r = 0; |
| 83 | 202 | } |
| 84 | 203 | |
| 85 | 204 | DRIVER_INIT_MEMBER( ltd_state, ltd ) |
| 86 | 205 | { |
| 206 | m_game = 0; |
| 87 | 207 | } |
| 88 | 208 | |
| 209 | DRIVER_INIT_MEMBER( ltd_state, atla_ltd ) |
| 210 | { |
| 211 | m_game = 1; |
| 212 | output_set_digit_value(0, 0x3f); |
| 213 | output_set_digit_value(10, 0x3f); |
| 214 | } |
| 215 | |
| 216 | DRIVER_INIT_MEMBER( ltd_state, bhol_ltd ) |
| 217 | { |
| 218 | m_game = 2; |
| 219 | } |
| 220 | |
| 221 | DRIVER_INIT_MEMBER( ltd_state, zephy ) |
| 222 | { |
| 223 | m_game = 3; |
| 224 | } |
| 225 | |
| 89 | 226 | TIMER_DEVICE_CALLBACK_MEMBER( ltd_state::timer_r ) |
| 90 | 227 | { |
| 228 | m_timer_r ^= 1; |
| 229 | m_maincpu->set_input_line(M6800_IRQ_LINE, (m_timer_r) ? CLEAR_LINE : ASSERT_LINE); |
| 91 | 230 | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447 |
| 92 | 231 | m_out_offs++; |
| 232 | if (m_out_offs > 0x7f) m_out_offs = 0x60; |
| 93 | 233 | |
| 94 | | if (m_out_offs < 0x40) |
| 234 | if ((m_out_offs > 0x5f) && (m_out_offs < 0x6a)) |
| 95 | 235 | { |
| 96 | | UINT8 display = (m_out_offs >> 3) & 7; |
| 97 | | UINT8 digit = m_out_offs & 7; |
| 98 | | output_set_digit_value(display * 10 + digit, patterns[m_p_ram[m_out_offs]&15]); |
| 236 | switch(m_game) |
| 237 | { |
| 238 | case 1: // atlantis (2-player, 5-digit) |
| 239 | { |
| 240 | switch(m_out_offs-0x60) |
| 241 | { |
| 242 | case 0: |
| 243 | output_set_digit_value(1, patterns[m_p_ram[m_out_offs]&15]); |
| 244 | output_set_digit_value(2, patterns[m_p_ram[m_out_offs]>>4]); |
| 245 | break; |
| 246 | case 1: |
| 247 | output_set_digit_value(11, patterns[m_p_ram[m_out_offs]&15]); |
| 248 | output_set_digit_value(12, patterns[m_p_ram[m_out_offs]>>4]); |
| 249 | break; |
| 250 | case 2: |
| 251 | output_set_digit_value(3, patterns[m_p_ram[m_out_offs]&15]); |
| 252 | output_set_digit_value(4, patterns[m_p_ram[m_out_offs]>>4]); |
| 253 | break; |
| 254 | case 3: |
| 255 | output_set_digit_value(13, patterns[m_p_ram[m_out_offs]&15]); |
| 256 | output_set_digit_value(14, patterns[m_p_ram[m_out_offs]>>4]); |
| 257 | break; |
| 258 | case 8: |
| 259 | output_set_digit_value(41, patterns[m_p_ram[m_out_offs]&15]); |
| 260 | output_set_digit_value(40, patterns[m_p_ram[m_out_offs]>>4]); |
| 261 | break; |
| 262 | } |
| 263 | break; |
| 264 | } |
| 265 | case 2: // black hole (2-player, 6-digit) |
| 266 | { |
| 267 | switch(m_out_offs-0x60) |
| 268 | { |
| 269 | case 0: |
| 270 | output_set_digit_value(0, patterns[m_p_ram[m_out_offs]&15]); |
| 271 | output_set_digit_value(1, patterns[m_p_ram[m_out_offs]>>4]); |
| 272 | break; |
| 273 | case 1: |
| 274 | output_set_digit_value(10, patterns[m_p_ram[m_out_offs]&15]); |
| 275 | output_set_digit_value(11, patterns[m_p_ram[m_out_offs]>>4]); |
| 276 | break; |
| 277 | case 2: |
| 278 | output_set_digit_value(2, patterns[m_p_ram[m_out_offs]&15]); |
| 279 | output_set_digit_value(3, patterns[m_p_ram[m_out_offs]>>4]); |
| 280 | break; |
| 281 | case 3: |
| 282 | output_set_digit_value(12, patterns[m_p_ram[m_out_offs]&15]); |
| 283 | output_set_digit_value(13, patterns[m_p_ram[m_out_offs]>>4]); |
| 284 | break; |
| 285 | case 4: |
| 286 | output_set_digit_value(4, patterns[m_p_ram[m_out_offs]&15]); |
| 287 | output_set_digit_value(5, patterns[m_p_ram[m_out_offs]>>4]); |
| 288 | break; |
| 289 | case 5: |
| 290 | output_set_digit_value(14, patterns[m_p_ram[m_out_offs]&15]); |
| 291 | output_set_digit_value(15, patterns[m_p_ram[m_out_offs]>>4]); |
| 292 | break; |
| 293 | case 8: |
| 294 | output_set_digit_value(41, patterns[m_p_ram[m_out_offs]&15]); |
| 295 | output_set_digit_value(40, patterns[m_p_ram[m_out_offs]>>4]); |
| 296 | break; |
| 297 | } |
| 298 | break; |
| 299 | } |
| 300 | case 3: // zephy (3-player, 6-digit) |
| 301 | { |
| 302 | switch(m_out_offs-0x60) |
| 303 | { |
| 304 | case 0: |
| 305 | output_set_digit_value(0, patterns[m_p_ram[m_out_offs]&15]); |
| 306 | output_set_digit_value(1, patterns[m_p_ram[m_out_offs]>>4]); |
| 307 | break; |
| 308 | case 1: |
| 309 | output_set_digit_value(2, patterns[m_p_ram[m_out_offs]&15]); |
| 310 | output_set_digit_value(3, patterns[m_p_ram[m_out_offs]>>4]); |
| 311 | break; |
| 312 | case 2: |
| 313 | output_set_digit_value(4, patterns[m_p_ram[m_out_offs]&15]); |
| 314 | output_set_digit_value(5, patterns[m_p_ram[m_out_offs]>>4]); |
| 315 | break; |
| 316 | case 3: |
| 317 | output_set_digit_value(10, patterns[m_p_ram[m_out_offs]&15]); |
| 318 | output_set_digit_value(11, patterns[m_p_ram[m_out_offs]>>4]); |
| 319 | break; |
| 320 | case 4: |
| 321 | output_set_digit_value(12, patterns[m_p_ram[m_out_offs]&15]); |
| 322 | output_set_digit_value(13, patterns[m_p_ram[m_out_offs]>>4]); |
| 323 | break; |
| 324 | case 5: |
| 325 | output_set_digit_value(14, patterns[m_p_ram[m_out_offs]&15]); |
| 326 | output_set_digit_value(15, patterns[m_p_ram[m_out_offs]>>4]); |
| 327 | break; |
| 328 | case 6: |
| 329 | output_set_digit_value(20, patterns[m_p_ram[m_out_offs]&15]); |
| 330 | output_set_digit_value(21, patterns[m_p_ram[m_out_offs]>>4]); |
| 331 | break; |
| 332 | case 7: |
| 333 | output_set_digit_value(22, patterns[m_p_ram[m_out_offs]&15]); |
| 334 | output_set_digit_value(23, patterns[m_p_ram[m_out_offs]>>4]); |
| 335 | break; |
| 336 | case 8: |
| 337 | output_set_digit_value(24, patterns[m_p_ram[m_out_offs]&15]); |
| 338 | output_set_digit_value(25, patterns[m_p_ram[m_out_offs]>>4]); |
| 339 | break; |
| 340 | case 9: |
| 341 | output_set_digit_value(40, patterns[m_p_ram[m_out_offs]&15]); |
| 342 | output_set_digit_value(41, patterns[m_p_ram[m_out_offs]>>4]); |
| 343 | break; |
| 344 | } |
| 345 | break; |
| 346 | } |
| 347 | |
| 348 | } |
| 99 | 349 | } |
| 100 | | else |
| 101 | | if (m_out_offs == 0x4a) // outhole |
| 102 | | { |
| 103 | | if (BIT(m_p_ram[m_out_offs], 0)) |
| 104 | | m_samples->start(0, 5); |
| 105 | | } |
| 106 | | else |
| 107 | | if (m_out_offs == 0x4b) // knocker (not strapids) |
| 108 | | { |
| 109 | | if (BIT(m_p_ram[m_out_offs], 0)) |
| 110 | | m_samples->start(0, 6); |
| 111 | | } |
| 350 | // else |
| 351 | // if (m_out_offs == 0x4a) // outhole |
| 352 | // { |
| 353 | // if (BIT(m_p_ram[m_out_offs], 0)) |
| 354 | // m_samples->start(0, 5); |
| 355 | // } |
| 356 | // else |
| 357 | // if (m_out_offs == 0x4b) // knocker |
| 358 | // { |
| 359 | // if (BIT(m_p_ram[m_out_offs], 0)) |
| 360 | // m_samples->start(0, 6); |
| 361 | // } |
| 112 | 362 | } |
| 113 | 363 | |
| 114 | 364 | static MACHINE_CONFIG_START( ltd3, ltd_state ) |
| r31703 | r31704 | |
| 133 | 383 | MCFG_CPU_PROGRAM_MAP(ltd4_map) |
| 134 | 384 | MCFG_CPU_IO_MAP(ltd4_io) |
| 135 | 385 | |
| 386 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 387 | |
| 136 | 388 | /* Video */ |
| 137 | 389 | MCFG_DEFAULT_LAYOUT(layout_ltd) |
| 138 | 390 | |
| 139 | 391 | /* Sound */ |
| 140 | 392 | MCFG_FRAGMENT_ADD( genpin_audio ) |
| 393 | |
| 394 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 395 | MCFG_SOUND_ADD("aysnd_0", AY8910, XTAL_3_579545MHz/2) /* guess */ |
| 396 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.3) |
| 397 | MCFG_SOUND_ADD("aysnd_1", AY8910, XTAL_3_579545MHz/2) /* guess */ |
| 398 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.3) |
| 141 | 399 | MACHINE_CONFIG_END |
| 142 | 400 | |
| 143 | 401 | /*------------------------------------------------------------------- |
| r31703 | r31704 | |
| 203 | 461 | ROM_END |
| 204 | 462 | |
| 205 | 463 | // system 3 |
| 206 | | GAME(1981, atla_ltd, 0, ltd3, ltd, ltd_state, ltd, ROT0, "LTD", "Atlantis (LTD)", GAME_IS_SKELETON_MECHANICAL) |
| 207 | | GAME(1981, bhol_ltd, 0, ltd3, ltd, ltd_state, ltd, ROT0, "LTD", "Black Hole (LTD)", GAME_IS_SKELETON_MECHANICAL) |
| 208 | | GAME(1981, zephy, 0, ltd3, ltd, ltd_state, ltd, ROT0, "LTD", "Zephy", GAME_IS_SKELETON_MECHANICAL) |
| 464 | GAME(1981, atla_ltd, 0, ltd3, ltd3, ltd_state, atla_ltd, ROT0, "LTD", "Atlantis (LTD)", GAME_MECHANICAL | GAME_NO_SOUND ) |
| 465 | GAME(1981, bhol_ltd, 0, ltd3, ltd3, ltd_state, bhol_ltd, ROT0, "LTD", "Black Hole (LTD)", GAME_MECHANICAL | GAME_NO_SOUND ) |
| 466 | GAME(1981, zephy, 0, ltd3, ltd3, ltd_state, zephy, ROT0, "LTD", "Zephy", GAME_IS_SKELETON_MECHANICAL) |
| 209 | 467 | |
| 210 | 468 | // system 4 |
| 211 | | GAME(1981, cowboy, 0, ltd4, ltd, ltd_state, ltd, ROT0, "LTD", "Cowboy Eight Ball", GAME_IS_SKELETON_MECHANICAL) |
| 212 | | GAME(1981, pecmen, 0, ltd4, ltd, ltd_state, ltd, ROT0, "LTD", "Mr. & Mrs. Pec-Men", GAME_IS_SKELETON_MECHANICAL) |
| 213 | | GAME(1981, alcapone, 0, ltd4, ltd, ltd_state, ltd, ROT0, "LTD", "Al Capone", GAME_IS_SKELETON_MECHANICAL) |
| 214 | | GAME(1982, columbia, 0, ltd4, ltd, ltd_state, ltd, ROT0, "LTD", "Columbia", GAME_IS_SKELETON_MECHANICAL) |
| 469 | GAME(1981, cowboy, 0, ltd4, ltd4, ltd_state, ltd, ROT0, "LTD", "Cowboy Eight Ball", GAME_IS_SKELETON_MECHANICAL) |
| 470 | GAME(1981, pecmen, 0, ltd4, ltd4, ltd_state, ltd, ROT0, "LTD", "Mr. & Mrs. Pec-Men", GAME_IS_SKELETON_MECHANICAL) |
| 471 | GAME(1981, alcapone, 0, ltd4, ltd4, ltd_state, ltd, ROT0, "LTD", "Al Capone", GAME_IS_SKELETON_MECHANICAL) |
| 472 | GAME(1982, columbia, 0, ltd4, ltd4, ltd_state, ltd, ROT0, "LTD", "Columbia", GAME_IS_SKELETON_MECHANICAL) |