trunk/src/mess/drivers/esq1.c
| r20293 | r20294 | |
| 114 | 114 | #include "emu.h" |
| 115 | 115 | #include "cpu/m6809/m6809.h" |
| 116 | 116 | #include "sound/es5503.h" |
| 117 | | #include "machine/68681.h" |
| 117 | #include "machine/n68681.h" |
| 118 | 118 | #include "machine/wd_fdc.h" |
| 119 | 119 | |
| 120 | | #include "machine/esqvfd.h" |
| 120 | #include "machine/esqpanel.h" |
| 121 | #include "machine/serial.h" |
| 122 | #include "machine/midiinport.h" |
| 123 | #include "machine/midioutport.h" |
| 121 | 124 | |
| 122 | 125 | #define WD1772_TAG "wd1772" |
| 123 | 126 | |
| 124 | 127 | // QWERTYU = a few keys |
| 125 | 128 | // top row 1-0 = the soft keys above and below the display (patch select) |
| 126 | | #define KEYBOARD_HACK (1) |
| 127 | 129 | |
| 128 | 130 | class esq1_state : public driver_device |
| 129 | 131 | { |
| r20293 | r20294 | |
| 133 | 135 | m_maincpu(*this, "maincpu"), |
| 134 | 136 | m_duart(*this, "duart"), |
| 135 | 137 | m_fdc(*this, WD1772_TAG), |
| 136 | | m_vfd(*this, "vfd") |
| 138 | m_panel(*this, "panel"), |
| 139 | m_mdout(*this, "mdout") |
| 137 | 140 | { } |
| 138 | 141 | |
| 139 | 142 | required_device<cpu_device> m_maincpu; |
| 140 | | required_device<duart68681_device> m_duart; |
| 143 | required_device<duartn68681_device> m_duart; |
| 141 | 144 | optional_device<wd1772_t> m_fdc; |
| 142 | | optional_device<esq2x40_t> m_vfd; |
| 145 | optional_device<esqpanel2x40_device> m_panel; |
| 146 | optional_device<serial_port_device> m_mdout; |
| 143 | 147 | |
| 144 | 148 | DECLARE_READ8_MEMBER(wd1772_r); |
| 145 | 149 | DECLARE_WRITE8_MEMBER(wd1772_w); |
| r20293 | r20294 | |
| 147 | 151 | DECLARE_WRITE8_MEMBER(seqdosram_w); |
| 148 | 152 | DECLARE_WRITE8_MEMBER(mapper_w); |
| 149 | 153 | |
| 154 | DECLARE_WRITE_LINE_MEMBER(duart_irq_handler); |
| 155 | DECLARE_WRITE_LINE_MEMBER(duart_tx_a); |
| 156 | DECLARE_WRITE_LINE_MEMBER(duart_tx_b); |
| 157 | DECLARE_READ8_MEMBER(duart_input); |
| 158 | DECLARE_WRITE8_MEMBER(duart_output); |
| 159 | |
| 150 | 160 | int m_mapper_state; |
| 151 | 161 | int m_seq_bank; |
| 152 | 162 | UINT8 m_seqram[0x10000]; |
| 153 | 163 | UINT8 m_dosram[0x2000]; |
| 154 | 164 | virtual void machine_reset(); |
| 155 | 165 | DECLARE_INPUT_CHANGED_MEMBER(key_stroke); |
| 166 | |
| 167 | void send_through_panel(UINT8 data); |
| 156 | 168 | }; |
| 157 | 169 | |
| 158 | 170 | |
| r20293 | r20294 | |
| 219 | 231 | AM_RANGE(0x0000, 0x1fff) AM_RAM // OSRAM |
| 220 | 232 | AM_RANGE(0x4000, 0x5fff) AM_RAM // SEQRAM |
| 221 | 233 | AM_RANGE(0x6000, 0x63ff) AM_DEVREADWRITE("es5503", es5503_device, read, write) |
| 222 | | AM_RANGE(0x6400, 0x640f) AM_DEVREADWRITE_LEGACY("duart", duart68681_r, duart68681_w) |
| 234 | AM_RANGE(0x6400, 0x640f) AM_DEVREADWRITE("duart", duartn68681_device, read, write) |
| 223 | 235 | AM_RANGE(0x6800, 0x68ff) AM_NOP |
| 224 | 236 | |
| 225 | 237 | AM_RANGE(0x7000, 0x7fff) AM_ROMBANK("osbank") |
| r20293 | r20294 | |
| 231 | 243 | AM_RANGE(0x4000, 0x5fff) AM_RAM // SEQRAM |
| 232 | 244 | // AM_RANGE(0x4000, 0x5fff) AM_READWRITE(seqdosram_r, seqdosram_w) |
| 233 | 245 | AM_RANGE(0x6000, 0x63ff) AM_DEVREADWRITE("es5503", es5503_device, read, write) |
| 234 | | AM_RANGE(0x6400, 0x640f) AM_DEVREADWRITE_LEGACY("duart", duart68681_r, duart68681_w) |
| 246 | AM_RANGE(0x6400, 0x640f) AM_DEVREADWRITE("duart", duartn68681_device, read, write) |
| 235 | 247 | AM_RANGE(0x6c00, 0x6dff) AM_WRITE(mapper_w) |
| 236 | 248 | AM_RANGE(0x6e00, 0x6fff) AM_READWRITE(wd1772_r, wd1772_w) |
| 237 | 249 | AM_RANGE(0x7000, 0x7fff) AM_ROMBANK("osbank") |
| r20293 | r20294 | |
| 253 | 265 | // OP5 = metronome hi |
| 254 | 266 | // OP6/7 = tape out |
| 255 | 267 | |
| 256 | | static void duart_irq_handler(device_t *device, int state, UINT8 vector) |
| 268 | WRITE_LINE_MEMBER(esq1_state::duart_irq_handler) |
| 257 | 269 | { |
| 258 | | device->machine().device("maincpu")->execute().set_input_line(0, state); |
| 270 | m_maincpu->set_input_line(0, state); |
| 259 | 271 | }; |
| 260 | 272 | |
| 261 | | static UINT8 duart_input(device_t *device) |
| 273 | READ8_MEMBER(esq1_state::duart_input) |
| 262 | 274 | { |
| 263 | 275 | return 0; |
| 264 | 276 | } |
| 265 | 277 | |
| 266 | | static void duart_output(device_t *device, UINT8 data) |
| 278 | WRITE8_MEMBER(esq1_state::duart_output) |
| 267 | 279 | { |
| 268 | 280 | int bank = ((data >> 1) & 0x7); |
| 269 | | esq1_state *state = device->machine().driver_data<esq1_state>(); |
| 270 | 281 | // printf("DP [%02x]: %d mlo %d mhi %d tape %d\n", data, data&1, (data>>4)&1, (data>>5)&1, (data>>6)&3); |
| 271 | 282 | // printf("[%02x] bank %d => offset %x (PC=%x)\n", data, bank, bank * 0x1000, device->machine().firstcpu->safe_pc()); |
| 272 | | state->membank("osbank")->set_base(state->memregion("osrom")->base() + (bank * 0x1000) ); |
| 283 | membank("osbank")->set_base(memregion("osrom")->base() + (bank * 0x1000) ); |
| 273 | 284 | |
| 274 | | state->m_seq_bank = (data & 0x8) ? 0x8000 : 0x0000; |
| 275 | | state->m_seq_bank += ((data>>1) & 3) * 0x2000; |
| 285 | m_seq_bank = (data & 0x8) ? 0x8000 : 0x0000; |
| 286 | m_seq_bank += ((data>>1) & 3) * 0x2000; |
| 276 | 287 | // printf("seqram_bank = %x\n", state->m_seq_bank); |
| 277 | 288 | } |
| 278 | 289 | |
| 279 | | static void duart_tx(device_t *device, int channel, UINT8 data) |
| 290 | // MIDI send |
| 291 | WRITE_LINE_MEMBER(esq1_state::duart_tx_a) |
| 280 | 292 | { |
| 281 | | esq1_state *state = device->machine().driver_data<esq1_state>(); |
| 293 | m_mdout->tx(state); |
| 294 | } |
| 282 | 295 | |
| 283 | | if (channel == 1) |
| 284 | | { |
| 285 | | #if 0 |
| 286 | | if ((data >= 0x20) && (data < 0x80)) |
| 287 | | { |
| 288 | | printf("%c", data); |
| 289 | | } |
| 290 | | else |
| 291 | | { |
| 292 | | printf("[%02x]", data); |
| 293 | | } |
| 294 | | #endif |
| 295 | | state->m_vfd->write_char(data); |
| 296 | | } |
| 296 | WRITE_LINE_MEMBER(esq1_state::duart_tx_b) |
| 297 | { |
| 298 | m_panel->rx_w(state); |
| 297 | 299 | } |
| 298 | 300 | |
| 299 | | #if KEYBOARD_HACK |
| 301 | void esq1_state::send_through_panel(UINT8 data) |
| 302 | { |
| 303 | m_panel->xmit_char(data); |
| 304 | } |
| 305 | |
| 300 | 306 | INPUT_CHANGED_MEMBER(esq1_state::key_stroke) |
| 301 | 307 | { |
| 302 | 308 | if (oldval == 0 && newval == 1) |
| 303 | 309 | { |
| 304 | | duart68681_rx_data(m_duart, 1, (UINT8)(FPTR)param); |
| 305 | | if ((UINT8)(FPTR)param >= 0x90) |
| 306 | | { |
| 307 | | duart68681_rx_data(m_duart, 1, (UINT8)(FPTR)0x00); |
| 308 | | } |
| 309 | | else |
| 310 | | { |
| 311 | | duart68681_rx_data(m_duart, 1, (UINT8)(FPTR)0x01); |
| 312 | | } |
| 310 | send_through_panel((UINT8)(FPTR)param); |
| 311 | send_through_panel((UINT8)(FPTR)0x00); |
| 313 | 312 | } |
| 314 | 313 | else if (oldval == 1 && newval == 0) |
| 315 | 314 | { |
| 316 | | duart68681_rx_data(m_duart, 1, (UINT8)(FPTR)param&0x7f); |
| 317 | | if ((UINT8)(FPTR)param >= 0x90) |
| 318 | | { |
| 319 | | duart68681_rx_data(m_duart, 1, (UINT8)(FPTR)0x00); |
| 320 | | } |
| 321 | | else |
| 322 | | { |
| 323 | | duart68681_rx_data(m_duart, 1, (UINT8)(FPTR)0x01); |
| 324 | | } |
| 315 | send_through_panel((UINT8)(FPTR)param&0x7f); |
| 316 | send_through_panel((UINT8)(FPTR)0x00); |
| 325 | 317 | } |
| 326 | 318 | } |
| 327 | | #endif |
| 328 | 319 | |
| 329 | | static const duart68681_config duart_config = |
| 320 | static SLOT_INTERFACE_START(midiin_slot) |
| 321 | SLOT_INTERFACE("midiin", MIDIIN_PORT) |
| 322 | SLOT_INTERFACE_END |
| 323 | |
| 324 | static const serial_port_interface midiin_intf = |
| 330 | 325 | { |
| 331 | | duart_irq_handler, |
| 332 | | duart_tx, |
| 333 | | duart_input, |
| 334 | | duart_output, |
| 326 | DEVCB_DEVICE_LINE_MEMBER("duart", duartn68681_device, rx_a_w) // route MIDI Tx send directly to 68681 channel A Rx |
| 327 | }; |
| 335 | 328 | |
| 329 | static SLOT_INTERFACE_START(midiout_slot) |
| 330 | SLOT_INTERFACE("midiout", MIDIOUT_PORT) |
| 331 | SLOT_INTERFACE_END |
| 332 | |
| 333 | static const serial_port_interface midiout_intf = |
| 334 | { |
| 335 | DEVCB_NULL // midi out ports don't transmit inward |
| 336 | }; |
| 337 | |
| 338 | static const duartn68681_config duart_config = |
| 339 | { |
| 340 | DEVCB_DRIVER_LINE_MEMBER(esq1_state, duart_irq_handler), |
| 341 | DEVCB_DRIVER_LINE_MEMBER(esq1_state, duart_tx_a), |
| 342 | DEVCB_DRIVER_LINE_MEMBER(esq1_state, duart_tx_b), |
| 343 | DEVCB_DRIVER_MEMBER(esq1_state, duart_input), |
| 344 | DEVCB_DRIVER_MEMBER(esq1_state, duart_output), |
| 345 | |
| 336 | 346 | 500000, 500000, // IP3, IP4 |
| 337 | 347 | 1000000, 1000000, // IP5, IP6 |
| 338 | 348 | }; |
| 339 | 349 | |
| 350 | static const esqpanel_interface esqpanel_config = |
| 351 | { |
| 352 | DEVCB_DEVICE_LINE_MEMBER("duart", duartn68681_device, rx_b_w) |
| 353 | }; |
| 354 | |
| 340 | 355 | static MACHINE_CONFIG_START( esq1, esq1_state ) |
| 341 | 356 | MCFG_CPU_ADD("maincpu", M6809E, 4000000) // how fast is it? |
| 342 | 357 | MCFG_CPU_PROGRAM_MAP(esq1_map) |
| 343 | 358 | |
| 359 | MCFG_DUARTN68681_ADD("duart", 4000000, duart_config) |
| 360 | MCFG_ESQPANEL2x40_ADD("panel", esqpanel_config) |
| 361 | MCFG_SERIAL_PORT_ADD("mdin", midiin_intf, midiin_slot, "midiin", NULL) |
| 362 | MCFG_SERIAL_PORT_ADD("mdout", midiout_intf, midiout_slot, "midiout", NULL) |
| 344 | 363 | |
| 345 | | MCFG_DUART68681_ADD("duart", 4000000, duart_config) |
| 346 | | |
| 347 | | MCFG_ESQ2x40_ADD("vfd") |
| 348 | | |
| 349 | 364 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 350 | 365 | MCFG_ES5503_ADD("es5503", 7000000, 8, esq1_doc_irq, esq1_adc_read) |
| 351 | 366 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| r20293 | r20294 | |
| 366 | 381 | MACHINE_CONFIG_END |
| 367 | 382 | |
| 368 | 383 | static INPUT_PORTS_START( esq1 ) |
| 369 | | #if KEYBOARD_HACK |
| 370 | 384 | PORT_START("KEY0") |
| 371 | | PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x80) |
| 372 | | PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x81) |
| 373 | | PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x82) |
| 374 | | PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x83) |
| 375 | | PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x84) |
| 376 | | PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x85) |
| 377 | | PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x86) |
| 378 | | PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x87) |
| 379 | | PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x88) |
| 380 | | PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x89) |
| 381 | | PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8a) |
| 382 | | PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8b) |
| 383 | | PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8c) |
| 384 | | PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8d) |
| 385 | | PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8e) |
| 386 | | PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8f) |
| 385 | PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x84) PORT_NAME("SEQ") |
| 386 | PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x85) PORT_NAME("CART A") |
| 387 | PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x86) PORT_NAME("CART B") |
| 388 | PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x87) PORT_NAME("INT") |
| 389 | PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x88) PORT_NAME("1 / SEQ 1") |
| 390 | PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x89) PORT_NAME("2 / SEQ 2") |
| 391 | PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8a) PORT_NAME("3 / SEQ 3") |
| 392 | PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8b) PORT_NAME("4 / SONG") |
| 393 | PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('Z') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8c) PORT_NAME("COMPARE") |
| 394 | PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8e) PORT_NAME("DATA DOWN") |
| 395 | PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8d) PORT_NAME("DATA UP") |
| 396 | PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR('\r') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x8f) PORT_NAME("WRITE") |
| 387 | 397 | |
| 388 | 398 | PORT_START("KEY1") |
| 389 | | PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x90) |
| 390 | | PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x91) |
| 391 | | PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x92) |
| 392 | | PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x93) |
| 393 | | PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x99) |
| 394 | | PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x94) |
| 395 | | PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x95) |
| 396 | | PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x96) |
| 397 | | PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x97) |
| 398 | | PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x98) |
| 399 | | #endif |
| 399 | PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x90) PORT_NAME("UPPER 1") |
| 400 | PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x91) PORT_NAME("UPPER 2") |
| 401 | PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x92) PORT_NAME("UPPER 3") |
| 402 | PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x93) PORT_NAME("UPPER 4") |
| 403 | PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x99) PORT_NAME("UPPER 5") |
| 404 | PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x94) PORT_NAME("LOWER 1") |
| 405 | PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x95) PORT_NAME("LOWER 2") |
| 406 | PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x96) PORT_NAME("LOWER 3") |
| 407 | PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x97) PORT_NAME("LOWER 4") |
| 408 | PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHANGED_MEMBER(DEVICE_SELF, esq1_state, key_stroke, 0x98) PORT_NAME("LOWER 5") |
| 409 | |
| 410 | |
| 400 | 411 | INPUT_PORTS_END |
| 401 | 412 | |
| 402 | 413 | ROM_START( esq1 ) |