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 | } |