trunk/src/mess/drivers/nanos.c
| r20817 | r20818 | |
| 31 | 31 | m_ctc_0(*this, "z80ctc_0"), |
| 32 | 32 | m_ctc_1(*this, "z80ctc_1"), |
| 33 | 33 | m_fdc(*this, "upd765"), |
| 34 | | m_key_t(*this, "keyboard_timer") |
| 34 | m_key_t(*this, "keyboard_timer"), |
| 35 | m_ram(*this, RAM_TAG), |
| 36 | m_region_maincpu(*this, "maincpu"), |
| 37 | m_bank1(*this, "bank1"), |
| 38 | m_bank2(*this, "bank2"), |
| 39 | m_bank3(*this, "bank3"), |
| 40 | m_line0(*this, "LINE0"), |
| 41 | m_line1(*this, "LINE1"), |
| 42 | m_line2(*this, "LINE2"), |
| 43 | m_line3(*this, "LINE3"), |
| 44 | m_line4(*this, "LINE4"), |
| 45 | m_line5(*this, "LINE5"), |
| 46 | m_line6(*this, "LINE6"), |
| 47 | m_linec(*this, "LINEC") |
| 35 | 48 | { } |
| 36 | 49 | |
| 37 | 50 | required_device<cpu_device> m_maincpu; |
| r20817 | r20818 | |
| 44 | 57 | required_device<z80ctc_device> m_ctc_1; |
| 45 | 58 | required_device<upd765a_device> m_fdc; |
| 46 | 59 | required_device<timer_device> m_key_t; |
| 60 | required_device<ram_device> m_ram; |
| 47 | 61 | const UINT8 *m_p_chargen; |
| 48 | 62 | UINT8 m_key_command; |
| 49 | 63 | UINT8 m_last_code; |
| r20817 | r20818 | |
| 62 | 76 | DECLARE_READ8_MEMBER(nanos_port_b_r); |
| 63 | 77 | DECLARE_WRITE8_MEMBER(nanos_port_b_w); |
| 64 | 78 | DECLARE_FLOPPY_FORMATS( floppy_formats ); |
| 79 | |
| 80 | protected: |
| 81 | required_memory_region m_region_maincpu; |
| 82 | required_memory_bank m_bank1; |
| 83 | required_memory_bank m_bank2; |
| 84 | required_memory_bank m_bank3; |
| 85 | required_ioport m_line0; |
| 86 | required_ioport m_line1; |
| 87 | required_ioport m_line2; |
| 88 | required_ioport m_line3; |
| 89 | required_ioport m_line4; |
| 90 | required_ioport m_line5; |
| 91 | required_ioport m_line6; |
| 92 | required_ioport m_linec; |
| 65 | 93 | }; |
| 66 | 94 | |
| 67 | 95 | |
| r20817 | r20818 | |
| 127 | 155 | |
| 128 | 156 | WRITE_LINE_MEMBER(nanos_state::z80daisy_interrupt) |
| 129 | 157 | { |
| 130 | | machine().device("maincpu")->execute().set_input_line(INPUT_LINE_IRQ0, state); |
| 158 | m_maincpu->set_input_line(INPUT_LINE_IRQ0, state); |
| 131 | 159 | } |
| 132 | 160 | |
| 133 | 161 | static const z80sio_interface sio_intf = |
| r20817 | r20818 | |
| 286 | 314 | { |
| 287 | 315 | if (ra < 8) |
| 288 | 316 | { |
| 289 | | chr = machine().device<ram_device>(RAM_TAG)->pointer()[0xf800+ x]; |
| 317 | chr = m_ram->pointer()[0xf800+ x]; |
| 290 | 318 | |
| 291 | 319 | /* get pattern of pixels for that character scanline */ |
| 292 | 320 | gfx = m_p_chargen[(chr<<3) | ra ]; |
| r20817 | r20818 | |
| 332 | 360 | { |
| 333 | 361 | m_key_command = BIT(data,1); |
| 334 | 362 | if (BIT(data,7)) { |
| 335 | | membank("bank1")->set_base(memregion("maincpu")->base()); |
| 363 | m_bank1->set_base(m_region_maincpu->base()); |
| 336 | 364 | } else { |
| 337 | | membank("bank1")->set_base(machine().device<ram_device>(RAM_TAG)->pointer()); |
| 365 | m_bank1->set_base(m_ram->pointer()); |
| 338 | 366 | } |
| 339 | 367 | } |
| 340 | 368 | |
| r20817 | r20818 | |
| 352 | 380 | |
| 353 | 381 | TIMER_DEVICE_CALLBACK_MEMBER(nanos_state::keyboard_callback) |
| 354 | 382 | { |
| 355 | | static const char *const keynames[] = { "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6" }; |
| 383 | ioport_port *io_ports[] = { m_line0, m_line1, m_line2, m_line3, m_line4, m_line5, m_line6 }; |
| 356 | 384 | |
| 357 | 385 | int i; |
| 358 | 386 | UINT8 code; |
| 359 | 387 | UINT8 key_code = 0; |
| 360 | | UINT8 shift = machine().root_device().ioport("LINEC")->read() & 0x02 ? 1 : 0; |
| 361 | | UINT8 ctrl = machine().root_device().ioport("LINEC")->read() & 0x01 ? 1 : 0; |
| 388 | UINT8 shift = m_linec->read() & 0x02 ? 1 : 0; |
| 389 | UINT8 ctrl = m_linec->read() & 0x01 ? 1 : 0; |
| 362 | 390 | m_key_pressed = 0xff; |
| 363 | 391 | for(i = 0; i < 7; i++) |
| 364 | 392 | { |
| 365 | | code = machine().root_device().ioport(keynames[i])->read(); |
| 393 | code = io_ports[i]->read(); |
| 366 | 394 | if (code != 0) |
| 367 | 395 | { |
| 368 | 396 | if (i==0 && shift==0) { |
| r20817 | r20818 | |
| 439 | 467 | |
| 440 | 468 | void nanos_state::machine_reset() |
| 441 | 469 | { |
| 442 | | address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); |
| 470 | address_space &space = m_maincpu->space(AS_PROGRAM); |
| 443 | 471 | |
| 444 | 472 | space.install_write_bank(0x0000, 0x0fff, "bank3"); |
| 445 | 473 | space.install_write_bank(0x1000, 0xffff, "bank2"); |
| 446 | 474 | |
| 447 | | membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base()); |
| 448 | | membank("bank2")->set_base(machine().device<ram_device>(RAM_TAG)->pointer() + 0x1000); |
| 449 | | membank("bank3")->set_base(machine().device<ram_device>(RAM_TAG)->pointer()); |
| 475 | m_bank1->set_base(m_region_maincpu->base()); |
| 476 | m_bank2->set_base(m_ram->pointer() + 0x1000); |
| 477 | m_bank3->set_base(m_ram->pointer()); |
| 450 | 478 | |
| 451 | 479 | machine().device<floppy_connector>("upd765:0")->get_device()->mon_w(false); |
| 452 | 480 | } |