trunk/src/mess/drivers/cbm2.c
| r18087 | r18088 | |
| 82 | 82 | int *diskromcs, int *csbank1, int *csbank2, int *csbank3, int *basiccs, int *knbcs, int *kernalcs, |
| 83 | 83 | int *crtccs, int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs) |
| 84 | 84 | { |
| 85 | | //this->read_pla(offset, busy2, eras, ecas, refen, cas, ras, casseg1, casseg2, casseg3, casseg4); |
| 85 | this->read_pla(offset, busy2, eras, ecas, refen, cas, ras, casseg1, casseg2, casseg3, casseg4); |
| 86 | 86 | |
| 87 | | switch (offset >> 16) |
| 88 | | { |
| 89 | | case 1: *casseg1 = 0; break; |
| 90 | | case 2: *casseg2 = 0; break; |
| 91 | | case 3: *casseg3 = 0; break; |
| 92 | | case 4: *casseg4 = 0; break; |
| 93 | | } |
| 94 | | |
| 95 | 87 | int busen1 = m_dramon; |
| 96 | 88 | int decoden = 0; // TODO |
| 97 | 89 | *sysioen = !(P0 && P1 && P2 && P3) && busen1; |
| r18087 | r18088 | |
| 148 | 140 | |
| 149 | 141 | READ8_MEMBER( cbm2_state::read ) |
| 150 | 142 | { |
| 151 | | int busy2 = 1, eras = 1, ecas = 1, refen = 1, cas = 1, ras = 1, sysioen = 1, dramen = 1; |
| 143 | int busy2 = 1, eras = 1, ecas = 1, refen = 0, cas = 0, ras = 1, sysioen = 1, dramen = 1; |
| 152 | 144 | int casseg1 = 1, casseg2 = 1, casseg3 = 1, casseg4 = 1, buframcs = 1, extbufcs = 1, vidramcs = 1; |
| 153 | 145 | int diskromcs = 1, csbank1 = 1, csbank2 = 1, csbank3 = 1, basiccs = 1, knbcs = 1, kernalcs = 1; |
| 154 | 146 | int crtccs = 1, cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1; |
| r18087 | r18088 | |
| 159 | 151 | &crtccs, &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs); |
| 160 | 152 | /* |
| 161 | 153 | if (!space.debugger_access()) |
| 162 | | logerror("%05x %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u %u %u\n", offset, sysioen, dramen, |
| 154 | logerror("r %05x %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u %u %u\n", offset, sysioen, dramen, |
| 163 | 155 | casseg1, casseg2, casseg3, casseg4, buframcs, extbufcs, vidramcs, |
| 164 | 156 | diskromcs, csbank1, csbank2, csbank3, basiccs, knbcs, kernalcs, |
| 165 | 157 | crtccs, cs1, sidcs, extprtcs, ciacs, aciacs, tript1cs, tript2cs); |
| r18087 | r18088 | |
| 249 | 241 | |
| 250 | 242 | WRITE8_MEMBER( cbm2_state::write ) |
| 251 | 243 | { |
| 252 | | int busy2 = 1, eras = 1, ecas = 1, refen = 1, cas = 1, ras = 1, sysioen = 1, dramen = 1; |
| 244 | int busy2 = 1, eras = 1, ecas = 1, refen = 0, cas = 0, ras = 1, sysioen = 1, dramen = 1; |
| 253 | 245 | int casseg1 = 1, casseg2 = 1, casseg3 = 1, casseg4 = 1, buframcs = 1, extbufcs = 1, vidramcs = 1; |
| 254 | 246 | int diskromcs = 1, csbank1 = 1, csbank2 = 1, csbank3 = 1, basiccs = 1, knbcs = 1, kernalcs = 1; |
| 255 | 247 | int crtccs = 1, cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1; |
| r18087 | r18088 | |
| 258 | 250 | &casseg1, &casseg2, &casseg3, &casseg4, &buframcs, &extbufcs, &vidramcs, |
| 259 | 251 | &diskromcs, &csbank1, &csbank2, &csbank3, &basiccs, &knbcs, &kernalcs, |
| 260 | 252 | &crtccs, &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs); |
| 261 | | |
| 253 | /* |
| 254 | if (!space.debugger_access()) |
| 255 | logerror("w %05x %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u %u %u\n", offset, sysioen, dramen, |
| 256 | casseg1, casseg2, casseg3, casseg4, buframcs, extbufcs, vidramcs, |
| 257 | diskromcs, csbank1, csbank2, csbank3, basiccs, knbcs, kernalcs, |
| 258 | crtccs, cs1, sidcs, extprtcs, ciacs, aciacs, tript1cs, tript2cs); |
| 259 | */ |
| 262 | 260 | if (!dramen) |
| 263 | 261 | { |
| 264 | 262 | if (!casseg1) |
| r18087 | r18088 | |
| 439 | 437 | &csbank1, &csbank2, &csbank3, &basiclocs, &basichics, &kernalcs, |
| 440 | 438 | &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs, &aec, &vsysaden); |
| 441 | 439 | /* |
| 442 | | if (!space.debugger_access() && !ae) |
| 443 | | logerror("read %05x %u %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u : ", |
| 440 | if (!space.debugger_access()) |
| 441 | logerror("r %05x %u %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u : ", |
| 444 | 442 | offset, datxen, dramxen, clrniben, _64kcasen, casenb, viddaten, viddat_tr, |
| 445 | 443 | clrnibcs, extbufcs, discromcs, buframcs, charomcs, viccs, vidmatcs, |
| 446 | 444 | csbank1, csbank2, csbank3, basiclocs, basichics, kernalcs, |
| r18087 | r18088 | |
| 451 | 449 | if (aec && !datxen && !_64kcasen) |
| 452 | 450 | { |
| 453 | 451 | data = m_ram->pointer()[offset & 0xffff]; |
| 454 | | //if (!space.debugger_access() && !ae) logerror("64K\n"); |
| 452 | //if (!space.debugger_access()) logerror("64K\n"); |
| 455 | 453 | } |
| 456 | 454 | else if (!aec && !viddaten && viddat_tr && !_64kcasen) |
| 457 | 455 | { |
| 458 | 456 | data = m_ram->pointer()[(m_vicbnksel << 14) | va]; |
| 459 | | //if (!space.debugger_access() && !ae) logerror("64K\n"); |
| 457 | //if (!space.debugger_access()) logerror("64K\n"); |
| 460 | 458 | } |
| 461 | 459 | else if (!dramxen && casenb && !P3) |
| 462 | 460 | { |
| r18087 | r18088 | |
| 466 | 464 | case 2: if (m_ram->size() > 0x20000) data = m_ram->pointer()[0x20000 + (offset & 0xffff)]; break; |
| 467 | 465 | case 3: if (m_ram->size() > 0x30000) data = m_ram->pointer()[0x30000 + (offset & 0xffff)]; break; |
| 468 | 466 | } |
| 469 | | //if (!space.debugger_access() && !ae) logerror("CASEN\n"); |
| 467 | //if (!space.debugger_access()) logerror("CASEN\n"); |
| 470 | 468 | } |
| 471 | 469 | else if (!datxen && !buframcs) |
| 472 | 470 | { |
| 473 | 471 | data = m_buffer_ram[offset & 0x7ff]; |
| 474 | | //if (!space.debugger_access() && !ae) logerror("BUFRAM\n"); |
| 472 | //if (!space.debugger_access()) logerror("BUFRAM\n"); |
| 475 | 473 | } |
| 476 | 474 | else if (!vsysaden && clrniben && !clrnibcs) |
| 477 | 475 | { |
| 478 | 476 | data = m_color_ram[offset & 0x3ff]; |
| 479 | | //if (!space.debugger_access() && !ae) logerror("CLRNIB\n"); |
| 477 | //if (!space.debugger_access()) logerror("CLRNIB\n"); |
| 480 | 478 | } |
| 481 | 479 | else if (vsysaden && !clrnibcs) |
| 482 | 480 | { |
| 483 | 481 | data = m_color_ram[va & 0x3ff]; |
| 484 | | //if (!space.debugger_access() && !ae) logerror("CLRNIB\n"); |
| 482 | //if (!space.debugger_access()) logerror("CLRNIB\n"); |
| 485 | 483 | } |
| 486 | 484 | else if (!datxen && !vsysaden && !viddaten && viddat_tr && !vidmatcs) |
| 487 | 485 | { |
| 488 | 486 | data = m_video_ram[offset & 0x3ff]; |
| 489 | | //if (!space.debugger_access() && !ae) logerror("VIDMAT\n"); |
| 487 | //if (!space.debugger_access()) logerror("VIDMAT\n"); |
| 490 | 488 | } |
| 491 | 489 | else if (vsysaden && !vidmatcs) |
| 492 | 490 | { |
| 493 | 491 | data = m_video_ram[va & 0x3ff]; |
| 494 | | //if (!space.debugger_access() && !ae) logerror("VIDMAT\n"); |
| 492 | //if (!space.debugger_access()) logerror("VIDMAT\n"); |
| 495 | 493 | } |
| 496 | 494 | else if (!datxen && (!basiclocs || !basichics)) |
| 497 | 495 | { |
| 498 | 496 | data = m_basic[offset & 0x3fff]; |
| 499 | | //if (!space.debugger_access() && !ae) logerror("BASIC\n"); |
| 497 | //if (!space.debugger_access()) logerror("BASIC\n"); |
| 500 | 498 | } |
| 501 | 499 | else if (!datxen && !kernalcs) |
| 502 | 500 | { |
| 503 | 501 | data = m_kernal[offset & 0x1fff]; |
| 504 | | //if (!space.debugger_access() && !ae) logerror("KERNAL\n"); |
| 502 | //if (!space.debugger_access()) logerror("KERNAL\n"); |
| 505 | 503 | } |
| 506 | 504 | else if (!datxen && !vsysaden && !viddaten && viddat_tr && !charomcs) |
| 507 | 505 | { |
| 508 | 506 | data = m_charom[offset & 0xfff]; |
| 509 | | //if (!space.debugger_access() && !ae) logerror("CHAROM\n"); |
| 507 | //if (!space.debugger_access()) logerror("CHAROM\n"); |
| 510 | 508 | } |
| 511 | 509 | else if (vsysaden && !charomcs) |
| 512 | 510 | { |
| 513 | 511 | data = m_charom[va & 0xfff]; |
| 514 | | //if (!space.debugger_access() && !ae) logerror("CHAROM\n"); |
| 512 | //if (!space.debugger_access()) logerror("CHAROM\n"); |
| 515 | 513 | } |
| 516 | 514 | else if (!datxen && !viddaten && viddat_tr && !viccs) |
| 517 | 515 | { |
| 518 | 516 | data = m_vic->read(space, offset & 0x3f); |
| 519 | | //if (!space.debugger_access() && !ae) logerror("VIC\n"); |
| 517 | //if (!space.debugger_access()) logerror("VIC\n"); |
| 520 | 518 | } |
| 521 | 519 | else if (!datxen && !sidcs) |
| 522 | 520 | { |
| 523 | 521 | data = m_sid->read(space, offset & 0x1f); |
| 524 | | //if (!space.debugger_access() && !ae) logerror("SID\n"); |
| 522 | //if (!space.debugger_access()) logerror("SID\n"); |
| 525 | 523 | } |
| 526 | 524 | else if (!datxen && !ciacs) |
| 527 | 525 | { |
| 528 | 526 | data = m_cia->read(space, offset & 0x0f); |
| 529 | | //if (!space.debugger_access() && !ae) logerror("CIA\n"); |
| 527 | //if (!space.debugger_access()) logerror("CIA\n"); |
| 530 | 528 | } |
| 531 | 529 | else if (!datxen && !aciacs) |
| 532 | 530 | { |
| 533 | 531 | data = m_acia->read(space, offset & 0x03); |
| 534 | | //if (!space.debugger_access() && !ae) logerror("ACIA\n"); |
| 532 | //if (!space.debugger_access()) logerror("ACIA\n"); |
| 535 | 533 | } |
| 536 | 534 | else if (!datxen && !tript1cs) |
| 537 | 535 | { |
| 538 | 536 | data = m_tpi1->read(space, offset & 0x07); |
| 539 | | //if (!space.debugger_access() && !ae) logerror("TPI1\n"); |
| 537 | //if (!space.debugger_access()) logerror("TPI1\n"); |
| 540 | 538 | } |
| 541 | 539 | else if (!datxen && !tript2cs) |
| 542 | 540 | { |
| 543 | 541 | data = m_tpi2->read(space, offset & 0x07); |
| 544 | | //if (!space.debugger_access() && !ae) logerror("TPI2\n"); |
| 542 | //if (!space.debugger_access()) logerror("TPI2\n"); |
| 545 | 543 | } |
| 546 | | //else if (!space.debugger_access() && !ae) logerror("\n"); |
| 544 | //else //if (!space.debugger_access()) logerror("\n"); |
| 547 | 545 | |
| 548 | 546 | if (!datxen) data = m_exp->read(space, offset & 0x1fff, data, csbank1, csbank2, csbank3); |
| 549 | 547 | |
| r18087 | r18088 | |
| 573 | 571 | &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs, &aec, &vsysaden); |
| 574 | 572 | /* |
| 575 | 573 | if (!space.debugger_access()) |
| 576 | | logerror("write %05x %u %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u: ", |
| 574 | logerror("w %05x %u %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u : ", |
| 577 | 575 | offset, datxen, dramxen, clrniben, _64kcasen, casenb, viddaten, viddat_tr, |
| 578 | 576 | clrnibcs, extbufcs, discromcs, buframcs, charomcs, viccs, vidmatcs, |
| 579 | 577 | csbank1, csbank2, csbank3, basiclocs, basichics, kernalcs, |
| r18087 | r18088 | |
| 581 | 579 | */ |
| 582 | 580 | if (!aec && !datxen && !_64kcasen) |
| 583 | 581 | { |
| 584 | | //logerror("64K RAM\n"); |
| 582 | //if (!space.debugger_access()) logerror("64K RAM\n"); |
| 585 | 583 | m_ram->pointer()[offset & 0xffff] = data; |
| 586 | 584 | } |
| 587 | 585 | else if (!dramxen && casenb && !P3) |
| 588 | 586 | { |
| 589 | | //logerror("CASENB\n"); |
| 587 | //if (!space.debugger_access()) logerror("CASENB\n"); |
| 590 | 588 | switch ((offset >> 15) & 0x07) |
| 591 | 589 | { |
| 592 | 590 | case 1: m_ram->pointer()[0x10000 + (offset & 0xffff)] = data; break; |
| r18087 | r18088 | |
| 596 | 594 | } |
| 597 | 595 | else if (!datxen && !buframcs) |
| 598 | 596 | { |
| 599 | | //logerror("BUFRAM\n"); |
| 597 | //if (!space.debugger_access()) logerror("BUFRAM\n"); |
| 600 | 598 | m_buffer_ram[offset & 0x7ff] = data; |
| 601 | 599 | } |
| 602 | 600 | else if (!vsysaden && clrniben && !clrnibcs) |
| 603 | 601 | { |
| 604 | | //logerror("CLRNIB\n"); |
| 602 | //if (!space.debugger_access()) logerror("CLRNIB\n"); |
| 605 | 603 | m_color_ram[offset & 0x3ff] = data; |
| 606 | 604 | } |
| 607 | 605 | else if (!datxen && !vsysaden && !viddaten && !viddat_tr && !vidmatcs) |
| 608 | 606 | { |
| 609 | | //logerror("VIDMAT\n"); |
| 607 | //if (!space.debugger_access()) logerror("VIDMAT\n"); |
| 610 | 608 | m_video_ram[offset & 0x3ff] = data; |
| 611 | 609 | } |
| 612 | 610 | else if (vsysaden && !vidmatcs) |
| 613 | 611 | { |
| 614 | | //logerror("VIDMAT\n"); |
| 612 | //if (!space.debugger_access()) logerror("VIDMAT\n"); |
| 615 | 613 | m_video_ram[va & 0x3ff] = data; |
| 616 | 614 | } |
| 617 | 615 | else if (!datxen && !viddaten && !viddat_tr && !viccs) |
| 618 | 616 | { |
| 619 | | //logerror("VIC\n"); |
| 617 | //if (!space.debugger_access()) logerror("VIC\n"); |
| 620 | 618 | m_vic->write(space, offset & 0x3f, data); |
| 621 | 619 | } |
| 622 | 620 | else if (!datxen && !sidcs) |
| 623 | 621 | { |
| 624 | | //logerror("SID\n"); |
| 622 | //if (!space.debugger_access()) logerror("SID\n"); |
| 625 | 623 | m_sid->write(space, offset & 0x1f, data); |
| 626 | 624 | } |
| 627 | 625 | else if (!datxen && !ciacs) |
| 628 | 626 | { |
| 629 | | //logerror("CIA\n"); |
| 627 | //if (!space.debugger_access()) logerror("CIA\n"); |
| 630 | 628 | m_cia->write(space, offset & 0x0f, data); |
| 631 | 629 | } |
| 632 | 630 | else if (!datxen && !aciacs) |
| 633 | 631 | { |
| 634 | | //logerror("ACIA\n"); |
| 632 | //if (!space.debugger_access()) logerror("ACIA\n"); |
| 635 | 633 | m_acia->write(space, offset & 0x03, data); |
| 636 | 634 | } |
| 637 | 635 | else if (!datxen && !tript1cs) |
| 638 | 636 | { |
| 639 | | //logerror("TPI1\n"); |
| 637 | //if (!space.debugger_access()) logerror("TPI1\n"); |
| 640 | 638 | m_tpi1->write(space, offset & 0x07, data); |
| 641 | 639 | } |
| 642 | 640 | else if (!datxen && !tript2cs) |
| 643 | 641 | { |
| 644 | | //logerror("TPI2\n"); |
| 642 | //if (!space.debugger_access()) logerror("TPI2\n"); |
| 645 | 643 | m_tpi2->write(space, offset & 0x07, data); |
| 646 | 644 | } |
| 647 | | //else logerror("\n"); |
| 645 | //else //if (!space.debugger_access()) logerror("\n"); |
| 648 | 646 | |
| 649 | 647 | if (!datxen) m_exp->write(space, offset & 0x1fff, data, csbank1, csbank2, csbank3); |
| 650 | 648 | } |