trunk/src/mess/drivers/dmv.c
| r31174 | r31175 | |
| 14 | 14 | #include "cpu/mcs48/mcs48.h" |
| 15 | 15 | #include "machine/upd765.h" |
| 16 | 16 | #include "machine/am9517a.h" |
| 17 | #include "machine/pit8253.h" |
| 18 | #include "machine/dmv_keyb.h" |
| 19 | #include "sound/speaker.h" |
| 17 | 20 | #include "video/upd7220.h" |
| 18 | 21 | #include "dmv.lh" |
| 19 | 22 | |
| r31174 | r31175 | |
| 25 | 28 | m_maincpu(*this, "maincpu"), |
| 26 | 29 | m_hgdc(*this, "upd7220"), |
| 27 | 30 | m_dmac(*this, "dma8237"), |
| 28 | | m_fdc(*this, "upd765"), |
| 29 | | m_floppy0(*this, "upd765:0:525dd"), |
| 30 | | m_floppy1(*this, "upd765:1:525dd"), |
| 31 | m_pit(*this, "pit8253"), |
| 32 | m_fdc(*this, "i8272"), |
| 33 | m_floppy0(*this, "i8272:0"), |
| 34 | m_floppy1(*this, "i8272:1"), |
| 35 | m_keyboard(*this, "keyboard"), |
| 36 | m_speaker(*this, "speaker"), |
| 31 | 37 | m_video_ram(*this, "video_ram"), |
| 32 | 38 | m_palette(*this, "palette") |
| 33 | 39 | { } |
| r31174 | r31175 | |
| 35 | 41 | required_device<cpu_device> m_maincpu; |
| 36 | 42 | required_device<upd7220_device> m_hgdc; |
| 37 | 43 | required_device<am9517a_device> m_dmac; |
| 38 | | required_device<upd765a_device> m_fdc; |
| 39 | | required_device<floppy_image_device> m_floppy0; |
| 40 | | required_device<floppy_image_device> m_floppy1; |
| 44 | required_device<pit8253_device> m_pit; |
| 45 | required_device<i8272a_device> m_fdc; |
| 46 | required_device<floppy_connector> m_floppy0; |
| 47 | required_device<floppy_connector> m_floppy1; |
| 48 | required_device<dmv_keyboard_device> m_keyboard; |
| 49 | required_device<speaker_sound_device> m_speaker; |
| 41 | 50 | |
| 42 | 51 | virtual void video_start(); |
| 43 | 52 | virtual void machine_start(); |
| r31174 | r31175 | |
| 45 | 54 | |
| 46 | 55 | DECLARE_WRITE8_MEMBER(leds_w); |
| 47 | 56 | DECLARE_WRITE_LINE_MEMBER(dma_hrq_changed); |
| 57 | DECLARE_WRITE_LINE_MEMBER(dmac_eop); |
| 58 | DECLARE_WRITE_LINE_MEMBER(dmac_dack3); |
| 59 | DECLARE_WRITE_LINE_MEMBER(fdc_irq); |
| 60 | DECLARE_WRITE_LINE_MEMBER(pit_out0); |
| 48 | 61 | DECLARE_WRITE8_MEMBER(fdd_motor_w); |
| 49 | 62 | DECLARE_READ8_MEMBER(sys_status_r); |
| 50 | | DECLARE_READ8_MEMBER(kb_ctrl_mcu_r); |
| 51 | | DECLARE_WRITE8_MEMBER(kb_ctrl_mcu_w); |
| 52 | | DECLARE_READ8_MEMBER(fdc_dma_r); |
| 53 | | DECLARE_WRITE8_MEMBER(fdc_dma_w); |
| 63 | DECLARE_WRITE8_MEMBER(tc_set_w); |
| 54 | 64 | DECLARE_READ8_MEMBER(memory_read_byte); |
| 55 | 65 | DECLARE_WRITE8_MEMBER(memory_write_byte); |
| 66 | DECLARE_WRITE8_MEMBER(ramsel_w); |
| 67 | DECLARE_WRITE8_MEMBER(romsel_w); |
| 68 | DECLARE_READ8_MEMBER(kb_mcu_port1_r); |
| 69 | DECLARE_WRITE8_MEMBER(kb_mcu_port1_w); |
| 70 | DECLARE_WRITE8_MEMBER(kb_mcu_port2_w); |
| 56 | 71 | |
| 57 | 72 | required_shared_ptr<UINT8> m_video_ram; |
| 58 | 73 | required_device<palette_device> m_palette; |
| 59 | 74 | |
| 60 | 75 | UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels ); |
| 61 | 76 | UPD7220_DRAW_TEXT_LINE_MEMBER( hgdc_draw_text ); |
| 77 | |
| 78 | int m_eop_line; |
| 79 | int m_dack3_line; |
| 80 | int m_sd_poll_state; |
| 81 | int m_floppy_motor; |
| 82 | UINT8 m_ram[0x2000]; |
| 62 | 83 | }; |
| 63 | 84 | |
| 85 | WRITE8_MEMBER(dmv_state::tc_set_w) |
| 86 | { |
| 87 | m_fdc->tc_w(true); |
| 88 | } |
| 64 | 89 | |
| 65 | 90 | WRITE8_MEMBER(dmv_state::leds_w) |
| 66 | 91 | { |
| r31174 | r31175 | |
| 82 | 107 | output_set_led_value(8-i, BIT(data, i)); |
| 83 | 108 | } |
| 84 | 109 | |
| 85 | | READ8_MEMBER(dmv_state::fdc_dma_r) |
| 110 | WRITE8_MEMBER(dmv_state::ramsel_w) |
| 86 | 111 | { |
| 87 | | return m_fdc->dma_r(); |
| 112 | m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x1fff, m_ram); |
| 88 | 113 | } |
| 89 | 114 | |
| 90 | | WRITE8_MEMBER(dmv_state::fdc_dma_w) |
| 115 | WRITE8_MEMBER(dmv_state::romsel_w) |
| 91 | 116 | { |
| 92 | | m_fdc->dma_w(data); |
| 117 | m_maincpu->space(AS_PROGRAM).install_rom(0x0000, 0x1fff, memregion("maincpu")->base()); |
| 93 | 118 | } |
| 94 | 119 | |
| 95 | 120 | WRITE8_MEMBER(dmv_state::fdd_motor_w) |
| 96 | 121 | { |
| 97 | | // bit 0 defines the state of the FDD motor |
| 122 | m_pit->write_gate0(1); |
| 123 | m_pit->write_gate0(0); |
| 98 | 124 | |
| 99 | | m_floppy0->mon_w(!BIT(data, 0)); |
| 100 | | m_floppy1->mon_w(!BIT(data, 0)); |
| 125 | m_floppy_motor = 0; |
| 126 | m_floppy0->get_device()->mon_w(m_floppy_motor); |
| 127 | m_floppy1->get_device()->mon_w(m_floppy_motor); |
| 101 | 128 | } |
| 102 | 129 | |
| 103 | 130 | READ8_MEMBER(dmv_state::sys_status_r) |
| r31174 | r31175 | |
| 115 | 142 | */ |
| 116 | 143 | UINT8 data = 0x00; |
| 117 | 144 | |
| 145 | if (m_floppy_motor) |
| 146 | data |= 0x01; |
| 147 | |
| 118 | 148 | // 16-bit CPU not available |
| 119 | 149 | data |= 0x02; |
| 120 | 150 | |
| 151 | if (!m_floppy0->get_device()->ready_r()) |
| 152 | data |= 0x04; |
| 153 | |
| 121 | 154 | if (m_fdc->get_irq()) |
| 122 | 155 | data |= 0x08; |
| 123 | 156 | |
| 124 | 157 | return data; |
| 125 | 158 | } |
| 126 | 159 | |
| 127 | | READ8_MEMBER(dmv_state::kb_ctrl_mcu_r) |
| 128 | | { |
| 129 | | return machine().device<upi41_cpu_device>("kb_ctrl_mcu")->upi41_master_r(space, offset); |
| 130 | | } |
| 131 | | |
| 132 | | WRITE8_MEMBER(dmv_state::kb_ctrl_mcu_w) |
| 133 | | { |
| 134 | | machine().device<upi41_cpu_device>("kb_ctrl_mcu")->upi41_master_w(space, offset, data); |
| 135 | | } |
| 136 | | |
| 137 | 160 | UPD7220_DISPLAY_PIXELS_MEMBER( dmv_state::hgdc_display_pixels ) |
| 138 | 161 | { |
| 139 | 162 | //TODO |
| r31174 | r31175 | |
| 188 | 211 | ADDRESS_MAP_UNMAP_HIGH |
| 189 | 212 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 190 | 213 | AM_RANGE(0x00, 0x00) AM_WRITE(leds_w) |
| 214 | AM_RANGE(0x10, 0x10) AM_WRITE(ramsel_w) |
| 215 | AM_RANGE(0x11, 0x11) AM_WRITE(romsel_w) |
| 216 | AM_RANGE(0x12, 0x12) AM_WRITE(tc_set_w) |
| 191 | 217 | AM_RANGE(0x13, 0x13) AM_READ(sys_status_r) |
| 192 | 218 | AM_RANGE(0x14, 0x14) AM_WRITE(fdd_motor_w) |
| 193 | 219 | AM_RANGE(0x20, 0x2f) AM_DEVREADWRITE("dma8237", am9517a_device, read, write) |
| 194 | | AM_RANGE(0x40, 0x41) AM_READWRITE(kb_ctrl_mcu_r, kb_ctrl_mcu_w) |
| 195 | | AM_RANGE(0x50, 0x51) AM_DEVICE("upd765", upd765a_device, map) |
| 220 | AM_RANGE(0x40, 0x41) AM_DEVREADWRITE("kb_ctrl_mcu", upi41_cpu_device, upi41_master_r, upi41_master_w) |
| 221 | AM_RANGE(0x50, 0x51) AM_DEVICE("i8272", i8272a_device, map) |
| 222 | AM_RANGE(0x80, 0x83) AM_DEVREADWRITE("pit8253", pit8253_device, read, write) |
| 196 | 223 | AM_RANGE(0xa0, 0xa1) AM_DEVREADWRITE("upd7220", upd7220_device, read, write) |
| 197 | 224 | |
| 198 | | //AM_RANGE(0x10, 0x11) boot ROM bankswitch (0x0000-0x1fff) |
| 199 | | //AM_RANGE(0x12, 0x12) pulse FDC TC line |
| 200 | | //AM_RANGE(0x80, 0x83) PIT8253 |
| 201 | 225 | //AM_RANGE(0xe0, 0xe7) RAM bankswitch |
| 202 | 226 | ADDRESS_MAP_END |
| 203 | 227 | |
| 204 | | static ADDRESS_MAP_START( dmv_keyboard_io, AS_IO, 8, dmv_state ) |
| 205 | | //AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) keyboard rows input |
| 206 | | //AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) bits 0-3 kb cols out |
| 207 | | ADDRESS_MAP_END |
| 228 | READ8_MEMBER(dmv_state::kb_mcu_port1_r) |
| 229 | { |
| 230 | return !(m_keyboard->sd_poll_r() & !m_sd_poll_state); |
| 231 | } |
| 208 | 232 | |
| 233 | WRITE8_MEMBER(dmv_state::kb_mcu_port1_w) |
| 234 | { |
| 235 | m_sd_poll_state = BIT(data, 1); |
| 236 | m_keyboard->sd_poll_w(!m_sd_poll_state); |
| 237 | } |
| 238 | |
| 239 | WRITE8_MEMBER(dmv_state::kb_mcu_port2_w) |
| 240 | { |
| 241 | m_speaker->level_w(BIT(data, 0)); |
| 242 | } |
| 243 | |
| 209 | 244 | static ADDRESS_MAP_START( dmv_kb_ctrl_io, AS_IO, 8, dmv_state ) |
| 210 | | ADDRESS_MAP_UNMAP_HIGH |
| 211 | | AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_NOP // bit 0 data from kb, bit 1 data to kb |
| 212 | | AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_NOP |
| 245 | AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(kb_mcu_port1_r, kb_mcu_port1_w) // bit 0 data from kb, bit 1 data to kb |
| 246 | AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(kb_mcu_port2_w) |
| 213 | 247 | ADDRESS_MAP_END |
| 214 | 248 | |
| 215 | 249 | static ADDRESS_MAP_START( upd7220_map, AS_0, 8, dmv_state ) |
| r31174 | r31175 | |
| 227 | 261 | |
| 228 | 262 | void dmv_state::machine_reset() |
| 229 | 263 | { |
| 264 | m_eop_line = 0; |
| 265 | m_dack3_line = 0; |
| 266 | m_sd_poll_state = 0; |
| 267 | m_floppy_motor = 1; |
| 268 | m_maincpu->space(AS_PROGRAM).install_rom(0x0000, 0x1fff, memregion("maincpu")->base()); |
| 230 | 269 | } |
| 231 | 270 | |
| 232 | 271 | void dmv_state::video_start() |
| r31174 | r31175 | |
| 264 | 303 | m_dmac->hack_w(state); |
| 265 | 304 | } |
| 266 | 305 | |
| 306 | WRITE_LINE_MEMBER( dmv_state::dmac_eop ) |
| 307 | { |
| 308 | if (!(m_dack3_line || m_eop_line) && (m_dack3_line || state)) |
| 309 | m_fdc->tc_w(true); |
| 310 | |
| 311 | m_eop_line = state; |
| 312 | } |
| 313 | |
| 314 | WRITE_LINE_MEMBER( dmv_state::dmac_dack3 ) |
| 315 | { |
| 316 | if (!(m_dack3_line || m_eop_line) && (state || m_eop_line)) |
| 317 | m_fdc->tc_w(true); |
| 318 | |
| 319 | m_dack3_line = state; |
| 320 | } |
| 321 | |
| 322 | WRITE_LINE_MEMBER( dmv_state::pit_out0 ) |
| 323 | { |
| 324 | if (!state) |
| 325 | { |
| 326 | m_floppy_motor = 1; |
| 327 | m_floppy0->get_device()->mon_w(m_floppy_motor); |
| 328 | m_floppy1->get_device()->mon_w(m_floppy_motor); |
| 329 | } |
| 330 | } |
| 331 | |
| 332 | WRITE_LINE_MEMBER( dmv_state::fdc_irq ) |
| 333 | { |
| 334 | if (state) |
| 335 | m_fdc->tc_w(false); |
| 336 | } |
| 337 | |
| 267 | 338 | READ8_MEMBER(dmv_state::memory_read_byte) |
| 268 | 339 | { |
| 269 | 340 | address_space& prog_space = m_maincpu->space(AS_PROGRAM); |
| r31174 | r31175 | |
| 273 | 344 | WRITE8_MEMBER(dmv_state::memory_write_byte) |
| 274 | 345 | { |
| 275 | 346 | address_space& prog_space = m_maincpu->space(AS_PROGRAM); |
| 276 | | return prog_space.write_byte(offset, data); |
| 347 | prog_space.write_byte(offset, data); |
| 277 | 348 | } |
| 278 | 349 | |
| 279 | 350 | |
| 280 | 351 | static MACHINE_CONFIG_START( dmv, dmv_state ) |
| 281 | 352 | /* basic machine hardware */ |
| 282 | | MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz) |
| 353 | MCFG_CPU_ADD("maincpu",Z80, XTAL_24MHz / 6) |
| 283 | 354 | MCFG_CPU_PROGRAM_MAP(dmv_mem) |
| 284 | 355 | MCFG_CPU_IO_MAP(dmv_io) |
| 285 | 356 | |
| 286 | 357 | MCFG_CPU_ADD("kb_ctrl_mcu", I8741, XTAL_6MHz) |
| 287 | 358 | MCFG_CPU_IO_MAP(dmv_kb_ctrl_io) |
| 288 | 359 | |
| 289 | | MCFG_CPU_ADD("keyboard_mcu", I8741, XTAL_6MHz) |
| 290 | | MCFG_CPU_IO_MAP(dmv_keyboard_io) |
| 291 | | MCFG_DEVICE_DISABLE() |
| 360 | MCFG_QUANTUM_PERFECT_CPU("maincpu") |
| 292 | 361 | |
| 362 | MCFG_DMV_KEYBOARD_ADD("keyboard") |
| 363 | |
| 293 | 364 | /* video hardware */ |
| 294 | 365 | MCFG_SCREEN_ADD("screen", RASTER) |
| 295 | 366 | MCFG_SCREEN_REFRESH_RATE(50) |
| r31174 | r31175 | |
| 310 | 381 | |
| 311 | 382 | MCFG_DEVICE_ADD( "dma8237", AM9517A, XTAL_4MHz ) |
| 312 | 383 | MCFG_I8237_OUT_HREQ_CB(WRITELINE(dmv_state, dma_hrq_changed)) |
| 384 | MCFG_I8237_OUT_EOP_CB(WRITELINE(dmv_state, dmac_eop)) |
| 313 | 385 | MCFG_I8237_IN_MEMR_CB(READ8(dmv_state, memory_read_byte)) |
| 314 | 386 | MCFG_I8237_OUT_MEMW_CB(WRITE8(dmv_state, memory_write_byte)) |
| 315 | | MCFG_I8237_IN_IOR_3_CB(READ8(dmv_state, fdc_dma_r)) |
| 316 | | MCFG_I8237_OUT_IOW_3_CB(WRITE8(dmv_state, fdc_dma_w)) |
| 317 | | MCFG_UPD765A_ADD( "upd765", true, true ) |
| 387 | MCFG_I8237_IN_IOR_3_CB(DEVREAD8("i8272", i8272a_device, mdma_r)) |
| 388 | MCFG_I8237_OUT_IOW_3_CB(DEVWRITE8("i8272", i8272a_device, mdma_w)) |
| 389 | MCFG_I8237_OUT_DACK_3_CB(WRITELINE(dmv_state, dmac_dack3)) |
| 390 | |
| 391 | MCFG_I8272A_ADD( "i8272", true ) |
| 392 | MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(dmv_state, fdc_irq)) |
| 318 | 393 | MCFG_UPD765_DRQ_CALLBACK(DEVWRITELINE("dma8237", am9517a_device, dreq3_w)) |
| 319 | | MCFG_FLOPPY_DRIVE_ADD("upd765:0", dmv_floppies, "525dd", floppy_image_device::default_floppy_formats) |
| 320 | | MCFG_FLOPPY_DRIVE_ADD("upd765:1", dmv_floppies, "525dd", floppy_image_device::default_floppy_formats) |
| 394 | MCFG_FLOPPY_DRIVE_ADD("i8272:0", dmv_floppies, "525dd", floppy_image_device::default_floppy_formats) |
| 395 | MCFG_FLOPPY_DRIVE_ADD("i8272:1", dmv_floppies, "525dd", floppy_image_device::default_floppy_formats) |
| 396 | |
| 397 | MCFG_DEVICE_ADD("pit8253", PIT8253, 0) |
| 398 | MCFG_PIT8253_CLK0(50) |
| 399 | MCFG_PIT8253_OUT0_HANDLER(WRITELINE(dmv_state, pit_out0)) |
| 400 | //MCFG_PIT8253_CLK2(XTAL_24MHz / 3 / 16) |
| 401 | //MCFG_PIT8253_OUT2_HANDLER(WRITELINE(dmv_state, timint_w)) |
| 402 | |
| 403 | /* sound hardware */ |
| 404 | MCFG_SPEAKER_STANDARD_MONO( "mono" ) |
| 405 | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 406 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 321 | 407 | MACHINE_CONFIG_END |
| 322 | 408 | |
| 323 | 409 | /* ROM definition */ |
| r31174 | r31175 | |
| 325 | 411 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 326 | 412 | ROM_LOAD( "dmv_norm.bin", 0x0000, 0x2000, CRC(bf25f3f0) SHA1(0c7dd37704db4799e340cc836f887cd543e5c964)) |
| 327 | 413 | |
| 328 | | ROM_REGION(0x400, "kb_ctrl_mcu", ROMREGION_ERASEFF) |
| 414 | ROM_REGION(0x400, "kb_ctrl_mcu", 0) |
| 329 | 415 | ROM_LOAD( "dmv_kb_ctrl_mcu.bin", 0x0000, 0x0400, CRC(a03af298) SHA1(144cba41294c46f5ca79b7ad8ced0e4408168775)) |
| 330 | | |
| 331 | | // i8741/8041 microcontroller inside the Keyboard |
| 332 | | ROM_REGION(0x400, "keyboard_mcu", ROMREGION_ERASEFF) |
| 333 | | ROM_LOAD( "dmv_kbmcu.bin", 0x0000, 0x0400, CRC(14e376de) SHA1 (ed09048ef03c602dba17ad6fcfe125c082c9bb17)) |
| 334 | 416 | ROM_END |
| 335 | 417 | |
| 336 | 418 | /* Driver */ |
trunk/src/mess/machine/dmv_keyb.c
| r0 | r31175 | |
| 1 | // license:BSD-3-Clause |
| 2 | // copyright-holders:Sandro Ronco |
| 3 | /********************************************************************** |
| 4 | |
| 5 | Decision Mate V keyboard emulation |
| 6 | |
| 7 | *********************************************************************/ |
| 8 | |
| 9 | #include "dmv_keyb.h" |
| 10 | |
| 11 | |
| 12 | //************************************************************************** |
| 13 | // DEVICE DEFINITIONS |
| 14 | //************************************************************************** |
| 15 | |
| 16 | const device_type DMV_KEYBOARD = &device_creator<dmv_keyboard_device>; |
| 17 | |
| 18 | |
| 19 | //*************************************************************************** |
| 20 | // IMPLEMENTATION |
| 21 | //*************************************************************************** |
| 22 | |
| 23 | ROM_START( dmv_keyboard ) |
| 24 | ROM_REGION( 0x400, "mcu", 0 ) |
| 25 | ROM_LOAD( "dmv_kbmcu.bin", 0x0000, 0x0400, CRC(14e376de) SHA1 (ed09048ef03c602dba17ad6fcfe125c082c9bb17)) |
| 26 | ROM_END |
| 27 | |
| 28 | |
| 29 | static ADDRESS_MAP_START( dmv_keyboard_io, AS_IO, 8, dmv_keyboard_device ) |
| 30 | AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(port1_r) |
| 31 | AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(port2_r, port2_w) |
| 32 | ADDRESS_MAP_END |
| 33 | |
| 34 | |
| 35 | static MACHINE_CONFIG_FRAGMENT( dmv_keyboard ) |
| 36 | MCFG_CPU_ADD("mcu", I8741, XTAL_6MHz) |
| 37 | MCFG_CPU_IO_MAP(dmv_keyboard_io) |
| 38 | MACHINE_CONFIG_END |
| 39 | |
| 40 | |
| 41 | INPUT_PORTS_START( dmv_keyboard ) |
| 42 | PORT_START("COL.0") |
| 43 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL)) |
| 44 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F') |
| 45 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V') |
| 46 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) |
| 47 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) |
| 48 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r') |
| 49 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$') |
| 50 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) |
| 51 | |
| 52 | PORT_START("COL.1") |
| 53 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) |
| 54 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) |
| 55 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(UCHAR_MAMEKEY(BACKSLASH)) |
| 56 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("00") |
| 57 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) |
| 58 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) |
| 59 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) |
| 60 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) |
| 61 | |
| 62 | PORT_START("COL.2") |
| 63 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_NAME("CLR") |
| 64 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D') |
| 65 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C') |
| 66 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) |
| 67 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) |
| 68 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') |
| 69 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#') |
| 70 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) |
| 71 | |
| 72 | PORT_START("COL.3") |
| 73 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') |
| 74 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') |
| 75 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B') |
| 76 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) |
| 77 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) |
| 78 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') |
| 79 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%') |
| 80 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) |
| 81 | |
| 82 | PORT_START("COL.4") |
| 83 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1) |
| 84 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') |
| 85 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') |
| 86 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) |
| 87 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13) |
| 88 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') |
| 89 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@') |
| 90 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) |
| 91 | |
| 92 | PORT_START("COL.5") |
| 93 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('+') |
| 94 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') |
| 95 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') |
| 96 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) |
| 97 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) |
| 98 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') |
| 99 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!') |
| 100 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) |
| 101 | |
| 102 | PORT_START("COL.6") |
| 103 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(BACKSPACE)) PORT_NAME("Backspace") |
| 104 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L') |
| 105 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>') |
| 106 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 107 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 108 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('0') PORT_CHAR(')') |
| 109 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(') |
| 110 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10)) |
| 111 | |
| 112 | PORT_START("COL.7") |
| 113 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F14") |
| 114 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2) PORT_CHAR('`') PORT_CHAR('~') |
| 115 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(UCHAR_MAMEKEY(ENTER)) |
| 116 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 117 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 118 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}') |
| 119 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+') |
| 120 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F13") |
| 121 | |
| 122 | PORT_START("COL.8") |
| 123 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) |
| 124 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') |
| 125 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') |
| 126 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) |
| 127 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('*') |
| 128 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') |
| 129 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^') |
| 130 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) |
| 131 | |
| 132 | PORT_START("COL.9") |
| 133 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F16") |
| 134 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') |
| 135 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') |
| 136 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F18") |
| 137 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) |
| 138 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') |
| 139 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')') |
| 140 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F11) PORT_CHAR(UCHAR_MAMEKEY(F11)) |
| 141 | |
| 142 | PORT_START("COL.10") |
| 143 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') |
| 144 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') |
| 145 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') |
| 146 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F19") |
| 147 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) |
| 148 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') |
| 149 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&') |
| 150 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) |
| 151 | |
| 152 | PORT_START("COL.11") |
| 153 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F15") |
| 154 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') |
| 155 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT)) |
| 156 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F17") |
| 157 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) |
| 158 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') |
| 159 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_') |
| 160 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12)) |
| 161 | |
| 162 | PORT_START("COL.12") |
| 163 | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) |
| 164 | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('e') PORT_CHAR('E') |
| 165 | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<') |
| 166 | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F20") |
| 167 | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) |
| 168 | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') |
| 169 | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*') |
| 170 | PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9)) |
| 171 | |
| 172 | PORT_START("COL.13") |
| 173 | PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 174 | |
| 175 | PORT_START("COL.14") |
| 176 | PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 177 | |
| 178 | PORT_START("COL.15") |
| 179 | PORT_DIPNAME( 0x07, 0x00, "Lanuguage Code" ) |
| 180 | PORT_DIPSETTING( 0x00, "US English" ) |
| 181 | PORT_DIPSETTING( 0x01, "UK/Int. English" ) |
| 182 | PORT_DIPSETTING( 0x02, "Danish" ) |
| 183 | PORT_DIPSETTING( 0x03, "German" ) |
| 184 | PORT_DIPSETTING( 0x04, "Swedish/Finnish" ) |
| 185 | PORT_DIPSETTING( 0x05, "Norwegian" ) |
| 186 | PORT_DIPSETTING( 0x06, "Spanish" ) |
| 187 | PORT_DIPSETTING( 0x07, "Italian" ) |
| 188 | PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 189 | INPUT_PORTS_END |
| 190 | |
| 191 | |
| 192 | //------------------------------------------------- |
| 193 | // input_ports - device-specific input ports |
| 194 | //------------------------------------------------- |
| 195 | |
| 196 | ioport_constructor dmv_keyboard_device::device_input_ports() const |
| 197 | { |
| 198 | return INPUT_PORTS_NAME( dmv_keyboard ); |
| 199 | } |
| 200 | |
| 201 | |
| 202 | //************************************************************************** |
| 203 | // LIVE DEVICE |
| 204 | //************************************************************************** |
| 205 | |
| 206 | //------------------------------------------------- |
| 207 | // dmv_keyboard_device - constructor |
| 208 | //------------------------------------------------- |
| 209 | |
| 210 | dmv_keyboard_device::dmv_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 211 | : device_t(mconfig, DMV_KEYBOARD, "Decision Mate V Keyboard", tag, owner, clock, "dmv_keyboard", __FILE__), |
| 212 | m_maincpu(*this, "mcu"), |
| 213 | m_keyboard(*this, "COL") |
| 214 | { |
| 215 | } |
| 216 | |
| 217 | //------------------------------------------------- |
| 218 | // device_start - device-specific startup |
| 219 | //------------------------------------------------- |
| 220 | |
| 221 | void dmv_keyboard_device::device_start() |
| 222 | { |
| 223 | } |
| 224 | |
| 225 | |
| 226 | //------------------------------------------------- |
| 227 | // device_reset - device-specific reset |
| 228 | //------------------------------------------------- |
| 229 | |
| 230 | void dmv_keyboard_device::device_reset() |
| 231 | { |
| 232 | m_col = 0; |
| 233 | m_sd_data_state = 1; |
| 234 | m_sd_poll_state = 1; |
| 235 | } |
| 236 | |
| 237 | //------------------------------------------------- |
| 238 | // machine_config_additions - device-specific |
| 239 | // machine configurations |
| 240 | //------------------------------------------------- |
| 241 | |
| 242 | machine_config_constructor dmv_keyboard_device::device_mconfig_additions() const |
| 243 | { |
| 244 | return MACHINE_CONFIG_NAME( dmv_keyboard ); |
| 245 | } |
| 246 | |
| 247 | |
| 248 | //------------------------------------------------- |
| 249 | // rom_region - device-specific ROM region |
| 250 | //------------------------------------------------- |
| 251 | |
| 252 | const rom_entry *dmv_keyboard_device::device_rom_region() const |
| 253 | { |
| 254 | return ROM_NAME( dmv_keyboard ); |
| 255 | } |
| 256 | |
| 257 | |
| 258 | //------------------------------------------------- |
| 259 | // port1_r - |
| 260 | //------------------------------------------------- |
| 261 | |
| 262 | READ8_MEMBER( dmv_keyboard_device::port1_r ) |
| 263 | { |
| 264 | return m_keyboard[m_col]->read(); |
| 265 | } |
| 266 | |
| 267 | //------------------------------------------------- |
| 268 | // port2_r |
| 269 | //------------------------------------------------- |
| 270 | |
| 271 | READ8_MEMBER( dmv_keyboard_device::port2_r ) |
| 272 | { |
| 273 | return ((m_sd_data_state | m_sd_poll_state) << 7) | m_col; |
| 274 | } |
| 275 | |
| 276 | //------------------------------------------------- |
| 277 | // port2_w |
| 278 | //------------------------------------------------- |
| 279 | |
| 280 | WRITE8_MEMBER( dmv_keyboard_device::port2_w ) |
| 281 | { |
| 282 | /* |
| 283 | P2.0 col 0 |
| 284 | P2.1 col 1 |
| 285 | P2.2 col 2 |
| 286 | P2.3 col 3 |
| 287 | P2.7 SDATA |
| 288 | */ |
| 289 | |
| 290 | m_col = data & 0x0f; |
| 291 | m_sd_data_state = BIT(data, 7); |
| 292 | } |
| 293 | |
| 294 | //------------------------------------------------- |
| 295 | // sd_poll_w |
| 296 | //------------------------------------------------- |
| 297 | |
| 298 | DECLARE_WRITE_LINE_MEMBER(dmv_keyboard_device::sd_poll_w) |
| 299 | { |
| 300 | if (m_sd_poll_state && !state) |
| 301 | m_maincpu->upi41_master_w(m_maincpu->space(), 0, 0); |
| 302 | |
| 303 | m_sd_poll_state = state; |
| 304 | } |
| 305 | |
| 306 | //------------------------------------------------- |
| 307 | // sd_poll_r |
| 308 | //------------------------------------------------- |
| 309 | |
| 310 | DECLARE_READ_LINE_MEMBER(dmv_keyboard_device::sd_poll_r) |
| 311 | { |
| 312 | return m_sd_data_state; |
| 313 | } |