trunk/src/emu/bus/abcbus/lux21056.c
| r26108 | r26109 | |
| 200 | 200 | { |
| 201 | 201 | m_sasibus->scsi_data_w(m_sasi_data); |
| 202 | 202 | } |
| 203 | else |
| 204 | { |
| 205 | m_sasibus->scsi_data_w(0); |
| 206 | } |
| 203 | 207 | } |
| 204 | 208 | |
| 205 | 209 | WRITE_LINE_MEMBER( luxor_55_21056_device::sasi_req_w ) |
| r26108 | r26109 | |
| 338 | 342 | |
| 339 | 343 | void luxor_55_21056_device::device_reset() |
| 340 | 344 | { |
| 345 | m_maincpu->reset(); |
| 346 | |
| 341 | 347 | m_cs = false; |
| 342 | 348 | m_stat = 0; |
| 343 | 349 | m_sasi_data = 0; |
| 350 | |
| 351 | set_rdy(m_rdy); |
| 344 | 352 | } |
| 345 | 353 | |
| 346 | 354 | |
| r26108 | r26109 | |
| 370 | 378 | if (m_cs) |
| 371 | 379 | { |
| 372 | 380 | data = m_stat & 0xfe; |
| 373 | | data |= m_rdy; |
| 381 | data |= m_rdy ^ STAT_DIR; |
| 374 | 382 | } |
| 375 | 383 | |
| 376 | 384 | return data; |
| r26108 | r26109 | |
| 389 | 397 | { |
| 390 | 398 | data = m_inp; |
| 391 | 399 | |
| 392 | | set_rdy(!m_rdy); |
| 400 | if (m_rdy) set_rdy(!m_rdy); |
| 393 | 401 | } |
| 394 | 402 | |
| 395 | 403 | return data; |
| r26108 | r26109 | |
| 406 | 414 | { |
| 407 | 415 | m_out = data; |
| 408 | 416 | |
| 409 | | set_rdy(!m_rdy); |
| 417 | if (STAT_DIR && !m_rdy) set_rdy(!m_rdy); |
| 410 | 418 | } |
| 411 | 419 | } |
| 412 | 420 | |
| r26108 | r26109 | |
| 433 | 441 | { |
| 434 | 442 | if (m_cs) |
| 435 | 443 | { |
| 436 | | m_maincpu->reset(); |
| 444 | device_reset(); |
| 437 | 445 | } |
| 438 | 446 | } |
| 439 | 447 | |
| r26108 | r26109 | |
| 461 | 469 | |
| 462 | 470 | UINT8 data = 0; |
| 463 | 471 | |
| 464 | | data |= m_rdy; |
| 472 | data |= m_rdy ^ STAT_DIR; |
| 465 | 473 | |
| 466 | 474 | data |= (m_req || m_sasibus->scsi_req_r()) << 1; |
| 467 | 475 | data |= m_sasibus->scsi_io_r() << 2; |
| r26108 | r26109 | |
| 480 | 488 | WRITE8_MEMBER( luxor_55_21056_device::stat_w ) |
| 481 | 489 | { |
| 482 | 490 | m_stat = data; |
| 491 | |
| 492 | set_rdy(m_rdy); |
| 483 | 493 | } |
| 484 | 494 | |
| 485 | 495 | |
| r26108 | r26109 | |
| 491 | 501 | { |
| 492 | 502 | UINT8 data = m_out; |
| 493 | 503 | |
| 494 | | set_rdy(!m_rdy); |
| 504 | if (STAT_DIR && m_rdy) set_rdy(!m_rdy); |
| 495 | 505 | |
| 496 | 506 | return data; |
| 497 | 507 | } |
| r26108 | r26109 | |
| 505 | 515 | { |
| 506 | 516 | m_inp = data; |
| 507 | 517 | |
| 508 | | set_rdy(!m_rdy); |
| 518 | if (!STAT_DIR && !m_rdy) set_rdy(!m_rdy); |
| 509 | 519 | } |
| 510 | 520 | |
| 511 | 521 | |
| r26108 | r26109 | |
| 560 | 570 | |
| 561 | 571 | WRITE8_MEMBER( luxor_55_21056_device::rdy_reset_w ) |
| 562 | 572 | { |
| 563 | | set_rdy(STAT_DIR); |
| 573 | set_rdy(0); |
| 564 | 574 | } |
| 565 | 575 | |
| 566 | 576 | |
| r26108 | r26109 | |
| 617 | 627 | { |
| 618 | 628 | m_rdy = state; |
| 619 | 629 | |
| 620 | | m_dma->rdy_w(m_rdy); |
| 630 | m_dma->rdy_w(m_rdy ^ STAT_DIR); |
| 621 | 631 | } |