trunk/src/mess/machine/s100_wunderbus.c
| r19388 | r19389 | |
| 51 | 51 | |
| 52 | 52 | WRITE_LINE_MEMBER( s100_wunderbus_device::pic_int_w ) |
| 53 | 53 | { |
| 54 | | m_s100->int_w(state); |
| 54 | m_bus->int_w(state); |
| 55 | 55 | } |
| 56 | 56 | |
| 57 | 57 | static struct pic8259_interface pic_intf = |
| r19388 | r19389 | |
| 70 | 70 | { |
| 71 | 71 | s100_wunderbus_device *wunderbus = downcast<s100_wunderbus_device *>(device->owner()); |
| 72 | 72 | |
| 73 | | wunderbus->m_s100->terminal_transmit_w(data); |
| 73 | wunderbus->m_bus->terminal_transmit_w(data); |
| 74 | 74 | } |
| 75 | 75 | */ |
| 76 | 76 | //------------------------------------------------- |
| r19388 | r19389 | |
| 270 | 270 | m_ace1(*this, INS8250_1_TAG), |
| 271 | 271 | m_ace2(*this, INS8250_2_TAG), |
| 272 | 272 | m_ace3(*this, INS8250_3_TAG), |
| 273 | | m_rtc(*this, UPD1990C_TAG) |
| 273 | m_rtc(*this, UPD1990C_TAG), |
| 274 | m_7c(*this, "7C"), |
| 275 | m_10a(*this, "10A") |
| 274 | 276 | { |
| 275 | 277 | } |
| 276 | 278 | |
| r19388 | r19389 | |
| 281 | 283 | |
| 282 | 284 | void s100_wunderbus_device::device_start() |
| 283 | 285 | { |
| 284 | | m_s100 = machine().device<s100_device>("s100"); |
| 285 | 286 | } |
| 286 | 287 | |
| 287 | 288 | |
| r19388 | r19389 | |
| 293 | 294 | { |
| 294 | 295 | } |
| 295 | 296 | |
| 297 | |
| 296 | 298 | //------------------------------------------------- |
| 297 | 299 | // s100_vi0_w - vectored interrupt 0 |
| 298 | 300 | //------------------------------------------------- |
| r19388 | r19389 | |
| 329 | 331 | |
| 330 | 332 | UINT8 s100_wunderbus_device::s100_sinp_r(address_space &space, offs_t offset) |
| 331 | 333 | { |
| 332 | | UINT8 address = (ioport("7C")->read() & 0x3e) << 2; |
| 334 | UINT8 address = (m_7c->read() & 0x3e) << 2; |
| 333 | 335 | if ((offset & 0xf8) != address) return 0; |
| 334 | 336 | |
| 335 | 337 | UINT8 data = 0; |
| r19388 | r19389 | |
| 374 | 376 | |
| 375 | 377 | */ |
| 376 | 378 | |
| 377 | | data = BITSWAP8(ioport("10A")->read(),0,1,2,3,4,5,6,7) & 0xfc; |
| 379 | data = BITSWAP8(m_10a->read(),0,1,2,3,4,5,6,7) & 0xfc; |
| 378 | 380 | break; |
| 379 | 381 | |
| 380 | 382 | case 2: // R.T. Clock IN/RESET CLK. Int. |
| r19388 | r19389 | |
| 415 | 417 | break; |
| 416 | 418 | |
| 417 | 419 | case 1: |
| 418 | | data = m_ace1->ins8250_r(machine().driver_data()->generic_space(), offset & 0x07); |
| 420 | data = m_ace1->ins8250_r(space, offset & 0x07); |
| 419 | 421 | break; |
| 420 | 422 | |
| 421 | 423 | case 2: |
| 422 | | data = m_ace2->ins8250_r(machine().driver_data()->generic_space(), offset & 0x07); |
| 424 | data = m_ace2->ins8250_r(space, offset & 0x07); |
| 423 | 425 | break; |
| 424 | 426 | |
| 425 | 427 | case 3: |
| 426 | | data = m_ace3->ins8250_r(machine().driver_data()->generic_space(), offset & 0x07); |
| 428 | data = m_ace3->ins8250_r(space, offset & 0x07); |
| 427 | 429 | break; |
| 428 | 430 | } |
| 429 | 431 | } |
| r19388 | r19389 | |
| 438 | 440 | |
| 439 | 441 | void s100_wunderbus_device::s100_sout_w(address_space &space, offs_t offset, UINT8 data) |
| 440 | 442 | { |
| 441 | | UINT8 address = (ioport("7C")->read() & 0x3e) << 2; |
| 443 | UINT8 address = (m_7c->read() & 0x3e) << 2; |
| 442 | 444 | if ((offset & 0xf8) != address) return; |
| 443 | 445 | |
| 444 | 446 | if ((offset & 0x07) == 7) |
| r19388 | r19389 | |
| 503 | 505 | */ |
| 504 | 506 | |
| 505 | 507 | m_rtc->data_in_w(BIT(data, 0)); |
| 506 | | m_rtc->clk_w(BIT(data, 0)); |
| 507 | | m_rtc->c0_w(BIT(data, 0)); |
| 508 | | m_rtc->c1_w(BIT(data, 0)); |
| 509 | | m_rtc->c2_w(BIT(data, 0)); |
| 510 | | m_rtc->stb_w(BIT(data, 0)); |
| 508 | m_rtc->clk_w(BIT(data, 1)); |
| 509 | m_rtc->c0_w(BIT(data, 2)); |
| 510 | m_rtc->c1_w(BIT(data, 3)); |
| 511 | m_rtc->c2_w(BIT(data, 4)); |
| 512 | m_rtc->stb_w(BIT(data, 5)); |
| 511 | 513 | break; |
| 512 | 514 | |
| 513 | 515 | case 3: // Par. data OUT |
| r19388 | r19389 | |
| 538 | 540 | break; |
| 539 | 541 | |
| 540 | 542 | case 1: |
| 541 | | m_ace1->ins8250_w(machine().driver_data()->generic_space(), offset & 0x07, data); |
| 543 | m_ace1->ins8250_w(space, offset & 0x07, data); |
| 542 | 544 | break; |
| 543 | 545 | |
| 544 | 546 | case 2: |
| 545 | | m_ace2->ins8250_w(machine().driver_data()->generic_space(), offset & 0x07, data); |
| 547 | m_ace2->ins8250_w(space, offset & 0x07, data); |
| 546 | 548 | break; |
| 547 | 549 | |
| 548 | 550 | case 3: |
| 549 | | m_ace3->ins8250_w(machine().driver_data()->generic_space(), offset & 0x07, data); |
| 551 | m_ace3->ins8250_w(space, offset & 0x07, data); |
| 550 | 552 | break; |
| 551 | 553 | } |
| 552 | 554 | } |
trunk/src/mess/machine/s100_dj2db.c
| r19388 | r19389 | |
| 84 | 84 | |
| 85 | 85 | void s100_dj2db_device::fdc_intrq_w(bool state) |
| 86 | 86 | { |
| 87 | | if (state) m_s100->rdy_w(CLEAR_LINE); |
| 87 | if (state) m_bus->rdy_w(CLEAR_LINE); |
| 88 | 88 | |
| 89 | | switch (ioport("J1A")->read()) |
| 89 | switch (m_j1a->read()) |
| 90 | 90 | { |
| 91 | | case 0: m_s100->vi0_w(state); break; |
| 92 | | case 1: m_s100->vi1_w(state); break; |
| 93 | | case 2: m_s100->vi2_w(state); break; |
| 94 | | case 3: m_s100->vi3_w(state); break; |
| 95 | | case 4: m_s100->vi4_w(state); break; |
| 96 | | case 5: m_s100->vi5_w(state); break; |
| 97 | | case 6: m_s100->vi6_w(state); break; |
| 98 | | case 7: m_s100->vi7_w(state); break; |
| 99 | | case 8: m_s100->int_w(state); break; |
| 91 | case 0: m_bus->vi0_w(state); break; |
| 92 | case 1: m_bus->vi1_w(state); break; |
| 93 | case 2: m_bus->vi2_w(state); break; |
| 94 | case 3: m_bus->vi3_w(state); break; |
| 95 | case 4: m_bus->vi4_w(state); break; |
| 96 | case 5: m_bus->vi5_w(state); break; |
| 97 | case 6: m_bus->vi6_w(state); break; |
| 98 | case 7: m_bus->vi7_w(state); break; |
| 99 | case 8: m_bus->int_w(state); break; |
| 100 | 100 | } |
| 101 | 101 | } |
| 102 | 102 | |
| 103 | 103 | void s100_dj2db_device::fdc_drq_w(bool state) |
| 104 | 104 | { |
| 105 | | if (state) m_s100->rdy_w(CLEAR_LINE); |
| 105 | if (state) m_bus->rdy_w(CLEAR_LINE); |
| 106 | 106 | } |
| 107 | 107 | |
| 108 | 108 | |
| r19388 | r19389 | |
| 265 | 265 | m_floppy1(*this, MB8866_TAG":1"), |
| 266 | 266 | m_floppy2(*this, MB8866_TAG":2"), |
| 267 | 267 | m_floppy3(*this, MB8866_TAG":3"), |
| 268 | m_floppy(NULL), |
| 269 | m_j1a(*this, "J1A"), |
| 270 | m_ram(*this, "ram"), |
| 268 | 271 | m_drive(0), |
| 269 | 272 | m_head(1), |
| 270 | 273 | m_int_enbl(0), |
| r19388 | r19389 | |
| 281 | 284 | |
| 282 | 285 | void s100_dj2db_device::device_start() |
| 283 | 286 | { |
| 284 | | m_s100 = machine().device<s100_device>("s100"); |
| 285 | | |
| 287 | // find memory regions |
| 286 | 288 | m_rom = memregion("dj2db")->base(); |
| 287 | | m_ram = auto_alloc_array(machine(), UINT8, 0x400); |
| 288 | 289 | |
| 290 | // allocate memory |
| 291 | m_ram.allocate(0x400); |
| 292 | |
| 289 | 293 | // floppy callbacks |
| 290 | | m_fdc->setup_intrq_cb(fd1791_t::line_cb(FUNC(s100_dj2db_device::fdc_intrq_w), this)); |
| 291 | | m_fdc->setup_drq_cb(fd1791_t::line_cb(FUNC(s100_dj2db_device::fdc_drq_w), this)); |
| 294 | m_fdc->setup_intrq_cb(wd_fdc_t::line_cb(FUNC(s100_dj2db_device::fdc_intrq_w), this)); |
| 295 | m_fdc->setup_drq_cb(wd_fdc_t::line_cb(FUNC(s100_dj2db_device::fdc_drq_w), this)); |
| 292 | 296 | |
| 293 | 297 | // state saving |
| 294 | | //save_item(NAME()); |
| 298 | save_item(NAME(m_drive)); |
| 299 | save_item(NAME(m_head)); |
| 300 | save_item(NAME(m_int_enbl)); |
| 301 | save_item(NAME(m_access_enbl)); |
| 302 | save_item(NAME(m_board_enbl)); |
| 303 | save_item(NAME(m_phantom)); |
| 295 | 304 | } |
| 296 | 305 | |
| 297 | 306 | |
| r19388 | r19389 | |
| 366 | 375 | } |
| 367 | 376 | else if ((offset >= 0xfbfc) && (offset < 0xfc00)) |
| 368 | 377 | { |
| 369 | | m_s100->rdy_w(ASSERT_LINE); |
| 378 | m_bus->rdy_w(ASSERT_LINE); |
| 370 | 379 | |
| 371 | 380 | data = m_fdc->gen_r(offset & 0x03); |
| 372 | 381 | } |
| r19388 | r19389 | |
| 464 | 473 | } |
| 465 | 474 | else if (offset == 0xfbfb) // WAIT ENBL |
| 466 | 475 | { |
| 476 | fatalerror("Z80 WAIT not supported by MAME core\n"); |
| 467 | 477 | } |
| 468 | 478 | else if ((offset >= 0xfbfc) && (offset < 0xfc00)) |
| 469 | 479 | { |