trunk/src/mame/drivers/zac_proto.c
| r32064 | r32065 | |
| 8 | 8 | These use the INS8060 (SC/MP) processor, and are Zaccaria's first |
| 9 | 9 | digital machines. |
| 10 | 10 | |
| 11 | | The inputs work with 'strike' and 'skijump'. |
| 12 | | The playboard inputs are unknown. |
| 11 | After starting a game, press X, wait for the sound of the ball |
| 12 | being ejected, then press Z. Now you can get a score. |
| 13 | 13 | |
| 14 | The ball number is how many balls are left. 1 = last ball. |
| 15 | |
| 16 | |
| 14 | 17 | ToDo: |
| 15 | | - Mirrors of ram and switches |
| 16 | | - battery backup of ram |
| 17 | | - Inputs |
| 18 | | - Outputs |
| 19 | | - Sound |
| 18 | - Mechanical |
| 19 | - Sound board, no info available. Also knocker output not known. |
| 20 | 20 | |
| 21 | 21 | **********************************************************************/ |
| 22 | 22 | |
| r32064 | r32065 | |
| 24 | 24 | #include "cpu/scmp/scmp.h" |
| 25 | 25 | #include "zac_proto.lh" |
| 26 | 26 | |
| 27 | | class zac_proto_state : public driver_device |
| 27 | class zac_proto_state : public genpin_class |
| 28 | 28 | { |
| 29 | 29 | public: |
| 30 | 30 | zac_proto_state(const machine_config &mconfig, device_type type, const char *tag) |
| 31 | | : driver_device(mconfig, type, tag) |
| 31 | : genpin_class(mconfig, type, tag) |
| 32 | 32 | , m_maincpu(*this, "maincpu") |
| 33 | 33 | { } |
| 34 | 34 | |
| r32064 | r32065 | |
| 63 | 63 | static INPUT_PORTS_START( zac_proto ) |
| 64 | 64 | // playfield inputs |
| 65 | 65 | PORT_START("PL0") |
| 66 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 67 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 68 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_START ) |
| 69 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) |
| 70 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) |
| 71 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) |
| 72 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) |
| 73 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) |
| 66 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) |
| 67 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) |
| 68 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_START ) |
| 69 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_TILT) |
| 70 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_Z) |
| 71 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole") |
| 72 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_COLON) |
| 73 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_QUOTE) |
| 74 | 74 | PORT_START("PL1") |
| 75 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) |
| 76 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) |
| 77 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) |
| 78 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) |
| 79 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) |
| 80 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) |
| 81 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) |
| 82 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) |
| 75 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_Q) |
| 76 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_W) |
| 77 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_E) |
| 78 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_R) |
| 79 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_Y) |
| 80 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_U) |
| 81 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_I) |
| 82 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_O) |
| 83 | 83 | PORT_START("PL2") |
| 84 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) |
| 85 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) |
| 86 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) |
| 87 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) |
| 88 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) |
| 89 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) |
| 90 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) |
| 91 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) |
| 84 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_A) |
| 85 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_S) |
| 86 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_D) |
| 87 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F) |
| 88 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_G) |
| 89 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_H) |
| 90 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_J) |
| 91 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_K) |
| 92 | 92 | PORT_START("PL3") |
| 93 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) |
| 94 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) |
| 95 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) |
| 96 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) |
| 97 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) |
| 98 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) |
| 99 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) |
| 100 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) |
| 93 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_L) |
| 94 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_C) |
| 95 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_V) |
| 96 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_B) |
| 97 | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_N) |
| 98 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_M) |
| 99 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_COMMA) |
| 100 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_STOP) |
| 101 | 101 | PORT_START("PL4") |
| 102 | | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) |
| 103 | | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) |
| 104 | | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) |
| 105 | | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) |
| 106 | | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) |
| 107 | | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) |
| 108 | | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER) |
| 109 | | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER) |
| 102 | PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 110 | 103 | |
| 111 | 104 | // dipswitches |
| 112 | 105 | PORT_START("PL5") |
| r32064 | r32065 | |
| 191 | 184 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 192 | 185 | INPUT_PORTS_END |
| 193 | 186 | |
| 187 | // solenoids (not knocker) |
| 194 | 188 | WRITE8_MEMBER( zac_proto_state::out0_w ) |
| 195 | 189 | { |
| 196 | | // solenoids |
| 190 | UINT16 t = data | (offset << 8); |
| 191 | |
| 192 | switch (t) |
| 193 | { |
| 194 | case 1: |
| 195 | m_samples->start(0, 5); // outhole |
| 196 | break; |
| 197 | case 2: |
| 198 | case 4: |
| 199 | m_samples->start(4, 7); // slings |
| 200 | break; |
| 201 | case 8: |
| 202 | case 16: |
| 203 | case 32: |
| 204 | m_samples->start(5, 0); // bumpers |
| 205 | break; |
| 206 | } |
| 197 | 207 | } |
| 198 | 208 | |
| 199 | 209 | WRITE8_MEMBER( zac_proto_state::out1_w ) |
| r32064 | r32065 | |
| 204 | 214 | // need to implement blanking of leading zeroes |
| 205 | 215 | WRITE8_MEMBER( zac_proto_state::digit_w ) |
| 206 | 216 | { |
| 207 | | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0, 0, 0, 0, 0, 0 }; |
| 217 | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; // 9368 (outputs 0-9,A-F) |
| 208 | 218 | static const UINT8 decimals[10] = { 0, 0, 0x80, 0, 0, 0x80, 0, 0, 0, 0 }; |
| 209 | 219 | offset<<=1; |
| 210 | 220 | output_set_digit_value(offset, patterns[data&15] | decimals[offset]); |
| r32064 | r32065 | |
| 214 | 224 | |
| 215 | 225 | WRITE8_MEMBER( zac_proto_state::sound_w ) |
| 216 | 226 | { |
| 227 | // to unknown sound board |
| 217 | 228 | } |
| 218 | 229 | |
| 219 | 230 | void zac_proto_state::machine_reset() |
| r32064 | r32065 | |
| 223 | 234 | |
| 224 | 235 | static MACHINE_CONFIG_START( zac_proto, zac_proto_state ) |
| 225 | 236 | /* basic machine hardware */ |
| 226 | | MCFG_CPU_ADD("maincpu", SCMP, 1000000) |
| 237 | MCFG_CPU_ADD("maincpu", INS8060, XTAL_4MHz / 2) // Using SC/MP II chip which has an internal /2 circuit. |
| 227 | 238 | MCFG_CPU_PROGRAM_MAP(zac_proto_map) |
| 228 | 239 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 229 | 240 | |
| 230 | 241 | /* Video */ |
| 231 | 242 | MCFG_DEFAULT_LAYOUT(layout_zac_proto) |
| 243 | |
| 244 | /* Sound */ |
| 245 | MCFG_FRAGMENT_ADD( genpin_audio ) |
| 232 | 246 | MACHINE_CONFIG_END |
| 233 | 247 | |
| 234 | 248 | /*-------------------------------- |
| r32064 | r32065 | |
| 264 | 278 | ROM_LOAD("zsc4.dat", 0x1400, 0x0400, CRC(69e0bb95) SHA1(d9a1d0159bf49445b0ece0f9d7806ed80657c2b2)) |
| 265 | 279 | ROM_END |
| 266 | 280 | |
| 267 | | GAME(1978, skijump, 0, zac_proto, zac_proto, driver_device, 0, ROT0, "Zaccaria", "Ski Jump", GAME_IS_SKELETON_MECHANICAL) |
| 268 | | GAME(1979, spacecty, 0, zac_proto, zac_proto, driver_device, 0, ROT0, "Zaccaria", "Space City", GAME_IS_SKELETON_MECHANICAL) |
| 269 | | GAME(1978, strike, 0, zac_proto, zac_proto, driver_device, 0, ROT0, "Zaccaria", "Strike", GAME_IS_SKELETON_MECHANICAL) |
| 281 | GAME(1978, skijump, 0, zac_proto, zac_proto, driver_device, 0, ROT0, "Zaccaria", "Ski Jump", GAME_MECHANICAL | GAME_IMPERFECT_SOUND ) |
| 282 | GAME(1979, spacecty, 0, zac_proto, zac_proto, driver_device, 0, ROT0, "Zaccaria", "Space City", GAME_MECHANICAL | GAME_IMPERFECT_SOUND ) |
| 283 | GAME(1978, strike, 0, zac_proto, zac_proto, driver_device, 0, ROT0, "Zaccaria", "Strike", GAME_MECHANICAL | GAME_IMPERFECT_SOUND ) |