trunk/src/mame/drivers/cops.c
| r18612 | r18613 | |
| 15 | 15 | |
| 16 | 16 | #include "cops.lh" |
| 17 | 17 | |
| 18 | #define LOG_CDROM 1 |
| 19 | #define LOG_DACIA 0 |
| 20 | |
| 18 | 21 | #define MAIN_CLOCK XTAL_4MHz |
| 19 | 22 | |
| 20 | 23 | class cops_state : public driver_device |
| r18612 | r18613 | |
| 47 | 50 | DECLARE_WRITE8_MEMBER(via1_irq); |
| 48 | 51 | DECLARE_WRITE8_MEMBER(via2_irq); |
| 49 | 52 | void dacia_receive(UINT8 data); |
| 50 | | void laserdisc_w(UINT8 data); |
| 51 | 53 | DECLARE_WRITE8_MEMBER(dacia_w); |
| 52 | 54 | DECLARE_READ8_MEMBER(dacia_r); |
| 53 | 55 | DECLARE_WRITE8_MEMBER(cdrom_data_w); |
| r18612 | r18613 | |
| 64 | 66 | |
| 65 | 67 | UINT8 m_cdrom_ctrl; |
| 66 | 68 | UINT8 m_cdrom_data; |
| 69 | |
| 70 | // LDP-1450 |
| 71 | UINT8 m_ld_command_to_send[5]; |
| 72 | UINT8 m_ld_command_total_bytes; |
| 73 | UINT8 m_ld_command_current_byte; |
| 74 | UINT8 m_ld_frame[5]; |
| 75 | UINT8 m_ld_frame_index; |
| 76 | emu_timer *m_ld_timer; |
| 77 | TIMER_CALLBACK_MEMBER(ld_timer_callback); |
| 78 | enum LD_INPUT_STATE |
| 79 | { |
| 80 | LD_INPUT_GET_COMMAND = 0, |
| 81 | LD_INPUT_TEXT_COMMAND, |
| 82 | LD_INPUT_TEXT_GET_X, |
| 83 | LD_INPUT_TEXT_GET_Y, |
| 84 | LD_INPUT_TEXT_GET_MODE, |
| 85 | LD_INPUT_TEXT_GET_STRING, |
| 86 | LD_INPUT_TEXT_GET_SET_WINDOW |
| 87 | } m_ld_input_state; |
| 88 | |
| 89 | void laserdisc_w(UINT8 data); |
| 90 | void laserdisc_response_w(UINT8 data); |
| 67 | 91 | }; |
| 68 | 92 | |
| 69 | 93 | void cops_state::video_start() |
| r18612 | r18613 | |
| 73 | 97 | |
| 74 | 98 | UINT32 cops_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ) |
| 75 | 99 | { |
| 100 | char ledtext[16 + 1]; |
| 101 | for ( int i = 0; i < 16; i++ ) |
| 102 | { |
| 103 | ledtext[i] = m_maincpu->space(AS_PROGRAM).read_byte(0x64 + i); |
| 104 | } |
| 105 | ledtext[16] = 0; |
| 106 | popmessage(ledtext); |
| 76 | 107 | return 0; |
| 77 | 108 | } |
| 78 | 109 | |
| r18612 | r18613 | |
| 87 | 118 | const char *regs[4] = { "CMD", "PARAM", "WRITE", "CTRL" }; |
| 88 | 119 | m_cdrom_data = BITSWAP8(data,0,1,2,3,4,5,6,7); |
| 89 | 120 | UINT8 reg = ((m_cdrom_ctrl & 4) >> 1) | ((m_cdrom_ctrl & 8) >> 3); |
| 90 | | logerror("%s:cdrom_data_w(reg = %s, data = %02x)\n", machine().describe_context(), regs[reg & 0x03], m_cdrom_data); |
| 121 | if (LOG_CDROM) logerror("%s:cdrom_data_w(reg = %s, data = %02x)\n", machine().describe_context(), regs[reg & 0x03], m_cdrom_data); |
| 91 | 122 | } |
| 92 | 123 | |
| 93 | 124 | WRITE8_MEMBER(cops_state::cdrom_ctrl_w) |
| 94 | 125 | { |
| 95 | | logerror("%s:cdrom_ctrl_w(%02x)\n", machine().describe_context(), data); |
| 126 | if (LOG_CDROM) logerror("%s:cdrom_ctrl_w(%02x)\n", machine().describe_context(), data); |
| 96 | 127 | m_cdrom_ctrl = data; |
| 97 | 128 | } |
| 98 | 129 | |
| 99 | 130 | READ8_MEMBER(cops_state::cdrom_data_r) |
| 100 | 131 | { |
| 101 | | logerror("%s:cdrom_data_r\n", machine().describe_context()); |
| 132 | const char *regs[4] = { "STATUS", "RESULT", "READ", "FIFOST" }; |
| 133 | UINT8 reg = ((m_cdrom_ctrl & 4) >> 1) | ((m_cdrom_ctrl & 8) >> 3); |
| 134 | if (LOG_CDROM) logerror("%s:cdrom_data_r(reg = %s)\n", machine().describe_context(), regs[reg & 0x03]); |
| 102 | 135 | return machine().rand()&0xff; |
| 103 | 136 | } |
| 104 | 137 | /************************************* |
| 105 | 138 | * |
| 106 | | * 6552 DACIA & LDP-1450 Laserdisc |
| 139 | * LDP-1450 Laserdisc |
| 107 | 140 | * |
| 108 | 141 | *************************************/ |
| 109 | 142 | |
| 143 | TIMER_CALLBACK_MEMBER(cops_state::ld_timer_callback) |
| 144 | { |
| 145 | if ( m_ld_command_current_byte < m_ld_command_total_bytes ) |
| 146 | { |
| 147 | dacia_receive(m_ld_command_to_send[m_ld_command_current_byte]); |
| 148 | m_ld_command_current_byte++; |
| 149 | if ( m_ld_command_current_byte == m_ld_command_total_bytes ) |
| 150 | { |
| 151 | m_ld_command_current_byte = m_ld_command_total_bytes = 0; |
| 152 | } |
| 153 | } |
| 154 | } |
| 155 | |
| 156 | void cops_state::laserdisc_response_w(UINT8 data) |
| 157 | { |
| 158 | if ( m_ld_command_total_bytes >= 5 ) |
| 159 | { |
| 160 | logerror( "LD Overflow!\n" ); |
| 161 | } |
| 162 | m_ld_command_to_send[m_ld_command_total_bytes++] = data; |
| 163 | } |
| 164 | |
| 110 | 165 | void cops_state::laserdisc_w(UINT8 data) |
| 111 | 166 | { |
| 112 | | switch( data ) |
| 167 | switch( m_ld_input_state ) |
| 113 | 168 | { |
| 114 | | case 0x26: /* Video off */ |
| 115 | | dacia_receive(0x0a); |
| 169 | case LD_INPUT_TEXT_GET_X: |
| 170 | m_ld_input_state = LD_INPUT_TEXT_GET_Y; |
| 116 | 171 | break; |
| 117 | | case 0x27: /* Video on */ |
| 118 | | dacia_receive(0x0a); |
| 172 | case LD_INPUT_TEXT_GET_Y: |
| 173 | m_ld_input_state = LD_INPUT_TEXT_GET_MODE; |
| 119 | 174 | break; |
| 120 | | case 0x30: /* Digit */ |
| 121 | | case 0x31: |
| 122 | | case 0x32: |
| 123 | | case 0x33: |
| 124 | | case 0x34: |
| 125 | | case 0x35: |
| 126 | | case 0x36: |
| 127 | | case 0x37: |
| 128 | | case 0x38: |
| 129 | | case 0x39: |
| 130 | | dacia_receive(0x0a); |
| 175 | case LD_INPUT_TEXT_GET_MODE: |
| 176 | m_ld_input_state = LD_INPUT_GET_COMMAND; |
| 131 | 177 | break; |
| 132 | | case 0x3f: /* Stop */ |
| 133 | | dacia_receive(0x0a); |
| 178 | case LD_INPUT_TEXT_GET_SET_WINDOW: |
| 179 | m_ld_input_state = LD_INPUT_GET_COMMAND; |
| 134 | 180 | break; |
| 135 | | case 0x40: /* Enter */ |
| 136 | | dacia_receive(0x0a); |
| 181 | case LD_INPUT_TEXT_GET_STRING: |
| 182 | if ( data == 0x1a ) |
| 183 | { |
| 184 | m_ld_input_state = LD_INPUT_GET_COMMAND; |
| 185 | } |
| 137 | 186 | break; |
| 138 | | case 0x43: /* Search */ |
| 139 | | dacia_receive(0x0a); |
| 187 | case LD_INPUT_TEXT_COMMAND: |
| 188 | case LD_INPUT_GET_COMMAND: |
| 189 | { |
| 190 | switch( data ) |
| 191 | { |
| 192 | case 0x00: /* text handling (start gotoxy) */ |
| 193 | if ( m_ld_input_state == LD_INPUT_TEXT_COMMAND ) |
| 194 | { |
| 195 | m_ld_input_state = LD_INPUT_TEXT_GET_X; |
| 196 | } |
| 197 | break; |
| 198 | case 0x01: /* text handling (end of text)*/ |
| 199 | if ( m_ld_input_state == LD_INPUT_TEXT_COMMAND ) |
| 200 | { |
| 201 | m_ld_input_state = LD_INPUT_TEXT_GET_STRING; |
| 202 | } |
| 203 | break; |
| 204 | case 0x02: /* text 'set window' command */ |
| 205 | if ( m_ld_input_state == LD_INPUT_TEXT_COMMAND ) |
| 206 | { |
| 207 | m_ld_input_state = LD_INPUT_TEXT_GET_SET_WINDOW; |
| 208 | } |
| 209 | break; |
| 210 | case 0x1a: /* text sent */ |
| 211 | break; |
| 212 | case 0x24: /* Audio On */ |
| 213 | laserdisc_response_w(0x0a); |
| 214 | break; |
| 215 | case 0x26: /* Video off */ |
| 216 | laserdisc_response_w(0x0a); |
| 217 | break; |
| 218 | case 0x27: /* Video on */ |
| 219 | laserdisc_response_w(0x0a); |
| 220 | break; |
| 221 | case 0x30: /* Digit */ |
| 222 | case 0x31: |
| 223 | case 0x32: |
| 224 | case 0x33: |
| 225 | case 0x34: |
| 226 | case 0x35: |
| 227 | case 0x36: |
| 228 | case 0x37: |
| 229 | case 0x38: |
| 230 | case 0x39: |
| 231 | if ( m_ld_frame_index >= 5 ) |
| 232 | { |
| 233 | m_ld_frame_index = 0; |
| 234 | } |
| 235 | m_ld_frame[m_ld_frame_index++] = data; |
| 236 | laserdisc_response_w(0x0a); |
| 237 | break; |
| 238 | case 0x3a: /* Play (answer should have delay) */ |
| 239 | laserdisc_response_w(0x0a); |
| 240 | break; |
| 241 | case 0x3f: /* Stop */ |
| 242 | laserdisc_response_w(0x0a); |
| 243 | break; |
| 244 | case 0x40: /* Enter */ |
| 245 | laserdisc_response_w(0x0a); |
| 246 | break; |
| 247 | case 0x43: /* Search */ |
| 248 | laserdisc_response_w(0x0a); |
| 249 | break; |
| 250 | case 0x46: /* Channel 1 on */ |
| 251 | laserdisc_response_w(0x0a); |
| 252 | break; |
| 253 | case 0x47: /* Channel 1 off */ |
| 254 | laserdisc_response_w(0x0a); |
| 255 | break; |
| 256 | case 0x48: /* Channel 2 on */ |
| 257 | laserdisc_response_w(0x0a); |
| 258 | break; |
| 259 | case 0x49: /* Channel 2 off */ |
| 260 | laserdisc_response_w(0x0a); |
| 261 | break; |
| 262 | case 0x4f: /* Still */ |
| 263 | laserdisc_response_w(0x0a); |
| 264 | break; |
| 265 | case 0x55: /* 'frame mode' (unknown function) */ |
| 266 | break; |
| 267 | case 0x56: /* C. L. (Reset) */ |
| 268 | m_ld_input_state = LD_INPUT_GET_COMMAND; |
| 269 | laserdisc_response_w(0x0a); |
| 270 | break; |
| 271 | case 0x60: /* Addr Inq (get current frame number) */ |
| 272 | for ( int i = 0; i < 5; i++ ) |
| 273 | { |
| 274 | laserdisc_response_w(m_ld_frame[i]); |
| 275 | } |
| 276 | break; |
| 277 | case 0x80: /* text start */ |
| 278 | m_ld_input_state = LD_INPUT_TEXT_COMMAND; |
| 279 | break; |
| 280 | case 0x81: /* Turn on text */ |
| 281 | break; |
| 282 | case 0x82: /* Turn off text */ |
| 283 | break; |
| 284 | default: |
| 285 | logerror("Laserdisc command %02x\n", data); |
| 286 | break; |
| 287 | } |
| 288 | } |
| 140 | 289 | break; |
| 141 | | case 0x56: /* C. L. (Reset) */ |
| 142 | | dacia_receive(0x0a); |
| 143 | | break; |
| 144 | | default: |
| 145 | | logerror("Laserdisc command %02x\n", data); |
| 146 | | break; |
| 147 | 290 | } |
| 148 | 291 | } |
| 149 | 292 | |
| 293 | /************************************* |
| 294 | * |
| 295 | * 6552 DACIA |
| 296 | * |
| 297 | *************************************/ |
| 298 | |
| 150 | 299 | void cops_state::dacia_receive(UINT8 data) |
| 151 | 300 | { |
| 152 | 301 | m_dacia_receiver_data = data; |
| r18612 | r18613 | |
| 165 | 314 | m_dacia_receiver_full = 0; |
| 166 | 315 | return m_dacia_receiver_data; |
| 167 | 316 | default: |
| 168 | | logerror("%s:dacia_r(%02x)\n", machine().describe_context(), offset); |
| 317 | if (LOG_DACIA) logerror("%s:dacia_r(%02x)\n", machine().describe_context(), offset); |
| 169 | 318 | return 0; |
| 170 | 319 | } |
| 171 | 320 | } |
| r18612 | r18613 | |
| 179 | 328 | laserdisc_w(data); |
| 180 | 329 | break; |
| 181 | 330 | default: |
| 182 | | logerror("%s:dacia_w(%02x,%02x)\n", machine().describe_context(), offset, data); |
| 331 | if (LOG_DACIA) logerror("%s:dacia_w(%02x,%02x)\n", machine().describe_context(), offset, data); |
| 183 | 332 | break; |
| 184 | 333 | } |
| 185 | 334 | } |
| r18612 | r18613 | |
| 249 | 398 | m_lcd_data_h = data; |
| 250 | 399 | break; |
| 251 | 400 | case 0x04: /* WOP4 */ |
| 401 | output_set_value("Offroad Right 4 Lamp", data & 0x80); |
| 402 | output_set_value("Offroad Right 3 Lamp", data & 0x40); |
| 403 | output_set_value("Offroad Right 2 Lamp", data & 0x20); |
| 404 | output_set_value("Offroad Right 1 Lamp", data & 0x10); |
| 405 | output_set_value("Offroad Left 4 Lamp", data & 0x08); |
| 406 | output_set_value("Offroad Left 3 Lamp", data & 0x04); |
| 407 | output_set_value("Offroad Left 2 Lamp", data & 0x02); |
| 408 | output_set_value("Offroad Left 1 Lamp", data & 0x01); |
| 252 | 409 | break; |
| 253 | 410 | case 0x05: /* WOP5 */ |
| 411 | output_set_value("Damage Lamp", data & 0x80); |
| 412 | output_set_value("Stop Lamp", data & 0x40); |
| 413 | output_set_value("Gun Active Right Lamp", data & 0x20); |
| 414 | output_set_value("Vest Hit 2 Lamp", data & 0x10); |
| 415 | output_set_value("Vest Hit 3 Lamp", data & 0x04); |
| 416 | output_set_value("Gun Active Left Lamp", data & 0x02); |
| 417 | output_set_value("Vest Hit 1 Lamp", data & 0x01); |
| 254 | 418 | break; |
| 255 | 419 | case 0x06: /* WOP6 */ |
| 420 | logerror("WOP6: data = %02x\n", data); |
| 256 | 421 | break; |
| 257 | 422 | case 0x07: /* WOP? */ |
| 423 | logerror("WOP7: data = %02x\n", data); |
| 258 | 424 | break; |
| 259 | 425 | case 0x08: /* WOP0 */ |
| 426 | logerror("WOP8: data = %02x\n", data); |
| 260 | 427 | break; |
| 261 | 428 | default: |
| 262 | 429 | logerror("Unknown io1_w, offset = %03x, data = %02x\n", offset, data); |
| r18612 | r18613 | |
| 266 | 433 | |
| 267 | 434 | READ8_MEMBER(cops_state::io2_r) |
| 268 | 435 | { |
| 269 | | return 0; |
| 436 | switch( offset & 0x0f ) |
| 437 | { |
| 438 | case 0x03: |
| 439 | return ioport("STEER")->read(); |
| 440 | default: |
| 441 | logerror("Unknown io2_r, offset = %02x\n", offset); |
| 442 | return 0; |
| 443 | } |
| 270 | 444 | } |
| 271 | 445 | |
| 272 | 446 | WRITE8_MEMBER(cops_state::io2_w) |
| 273 | 447 | { |
| 448 | switch( offset & 0x0f ) |
| 449 | { |
| 450 | case 0x02: |
| 451 | output_set_value("Flash Red Lamp", data & 0x01); |
| 452 | output_set_value("Flash Blue Lamp", data & 0x80); |
| 453 | if ( data & ~0x91 ) logerror("Unknown io2_w, offset = %02x, data = %02x\n", offset, data); |
| 454 | break; |
| 455 | case 0x04: |
| 456 | output_set_value("Bullet Lamp 6", data & 0x20); |
| 457 | output_set_value("Bullet Lamp 5", data & 0x10); |
| 458 | output_set_value("Bullet Lamp 4", data & 0x08); |
| 459 | output_set_value("Bullet Lamp 3", data & 0x04); |
| 460 | output_set_value("Bullet Lamp 2", data & 0x02); |
| 461 | output_set_value("Bullet Lamp 1", data & 0x01); |
| 462 | if ( data & ~0x3f ) logerror("Unknown io2_w, offset = %02x, data = %02x\n", offset, data); |
| 463 | break; |
| 464 | default: |
| 465 | logerror("Unknown io2_w, offset = %02x, data = %02x\n", offset, data); |
| 466 | break; |
| 467 | } |
| 274 | 468 | } |
| 275 | 469 | |
| 276 | 470 | /************************************* |
| r18612 | r18613 | |
| 381 | 575 | |
| 382 | 576 | static INPUT_PORTS_START( cops ) |
| 383 | 577 | PORT_START("SW0") |
| 384 | | PORT_DIPNAME( 0x01, 0x00, "SW0" ) |
| 385 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 386 | | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| 387 | | PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) |
| 388 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 389 | | PORT_DIPSETTING( 0x02, DEF_STR( On ) ) |
| 390 | | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) |
| 391 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 392 | | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) |
| 393 | | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) |
| 394 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 395 | | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) |
| 396 | | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 397 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 398 | | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 399 | | PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) |
| 400 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 401 | | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 402 | | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) |
| 403 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 404 | | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 405 | | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) |
| 406 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 407 | | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 578 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Switch A") PORT_CODE(KEYCODE_A) PORT_IMPULSE(1) |
| 579 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Switch C") PORT_CODE(KEYCODE_C) PORT_IMPULSE(1) |
| 580 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("PROGRAM") PORT_CODE(KEYCODE_P) |
| 581 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 582 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_IMPULSE(1) |
| 583 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 584 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START ) |
| 585 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Switch B") PORT_CODE(KEYCODE_B) PORT_IMPULSE(1) |
| 408 | 586 | |
| 409 | 587 | PORT_START("SW1") |
| 410 | | PORT_DIPNAME( 0x01, 0x00, "SW1" ) |
| 411 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 412 | | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| 413 | | PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) |
| 414 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 415 | | PORT_DIPSETTING( 0x02, DEF_STR( On ) ) |
| 416 | | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) |
| 417 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 418 | | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) |
| 419 | | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) |
| 420 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 421 | | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) |
| 422 | | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 423 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 424 | | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 425 | | PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) |
| 426 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 427 | | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 428 | | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) |
| 429 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 430 | | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 431 | | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) |
| 432 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 433 | | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 588 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // N.C. |
| 589 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) // Gas pedal |
| 590 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("20P LEVEL") PORT_CODE(KEYCODE_Q) |
| 591 | PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 592 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) |
| 593 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("100P LEVEL") PORT_CODE(KEYCODE_W) |
| 434 | 594 | |
| 435 | 595 | PORT_START("SW2") |
| 436 | | PORT_DIPNAME( 0x01, 0x00, "SW2" ) |
| 437 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 438 | | PORT_DIPSETTING( 0x01, DEF_STR( On ) ) |
| 439 | | PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) |
| 440 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 441 | | PORT_DIPSETTING( 0x02, DEF_STR( On ) ) |
| 442 | | PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) |
| 443 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 444 | | PORT_DIPSETTING( 0x04, DEF_STR( On ) ) |
| 445 | | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) |
| 446 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 447 | | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) |
| 448 | | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 449 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 450 | | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 451 | | PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) |
| 452 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 453 | | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 454 | | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) |
| 455 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 456 | | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| 457 | | PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) |
| 458 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 459 | | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 596 | PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 597 | |
| 598 | PORT_START("STEER") |
| 599 | PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) |
| 460 | 600 | INPUT_PORTS_END |
| 461 | 601 | |
| 462 | 602 | void cops_state::machine_start() |
| 463 | 603 | { |
| 604 | m_ld_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(cops_state::ld_timer_callback),this)); |
| 605 | m_ld_timer->adjust(attotime::from_hz(167*5), 0, attotime::from_hz(167*5)); |
| 464 | 606 | } |
| 465 | 607 | |
| 466 | 608 | void cops_state::machine_reset() |
| r18612 | r18613 | |
| 470 | 612 | m_lcd_data_l = m_lcd_data_h = 0; |
| 471 | 613 | |
| 472 | 614 | m_dacia_receiver_full = 0; |
| 615 | m_ld_input_state = LD_INPUT_GET_COMMAND; |
| 616 | m_ld_command_current_byte = m_ld_command_total_bytes = 0; |
| 617 | m_ld_frame_index = 0; |
| 473 | 618 | } |
| 474 | 619 | |
| 475 | 620 | |