Previous 199869 Revisions Next

r18088 Sunday 23rd September, 2012 at 10:17:27 UTC by Curt Coder
(MESS) cbm2: Address decoding WIP. (nw)
[src/mess/drivers]cbm2.c

trunk/src/mess/drivers/cbm2.c
r18087r18088
8282   int *diskromcs, int *csbank1, int *csbank2, int *csbank3, int *basiccs, int *knbcs, int *kernalcs,
8383   int *crtccs, int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs)
8484{
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);
8686
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
9587   int busen1 = m_dramon;
9688   int decoden = 0; // TODO
9789   *sysioen = !(P0 && P1 && P2 && P3) && busen1;
r18087r18088
148140
149141READ8_MEMBER( cbm2_state::read )
150142{
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;
152144   int casseg1 = 1, casseg2 = 1, casseg3 = 1, casseg4 = 1, buframcs = 1, extbufcs = 1, vidramcs = 1;
153145   int diskromcs = 1, csbank1 = 1, csbank2 = 1, csbank3 = 1, basiccs = 1, knbcs = 1, kernalcs = 1;
154146   int crtccs = 1, cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1;
r18087r18088
159151      &crtccs, &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs);
160152/*
161153   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,
163155      casseg1, casseg2, casseg3, casseg4, buframcs, extbufcs, vidramcs,
164156      diskromcs, csbank1, csbank2, csbank3, basiccs, knbcs, kernalcs,
165157      crtccs, cs1, sidcs, extprtcs, ciacs, aciacs, tript1cs, tript2cs);
r18087r18088
249241
250242WRITE8_MEMBER( cbm2_state::write )
251243{
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;
253245   int casseg1 = 1, casseg2 = 1, casseg3 = 1, casseg4 = 1, buframcs = 1, extbufcs = 1, vidramcs = 1;
254246   int diskromcs = 1, csbank1 = 1, csbank2 = 1, csbank3 = 1, basiccs = 1, knbcs = 1, kernalcs = 1;
255247   int crtccs = 1, cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1;
r18087r18088
258250      &casseg1, &casseg2, &casseg3, &casseg4, &buframcs, &extbufcs, &vidramcs,
259251      &diskromcs, &csbank1, &csbank2, &csbank3, &basiccs, &knbcs, &kernalcs,
260252      &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*/
262260   if (!dramen)
263261   {
264262      if (!casseg1)
r18087r18088
439437      &csbank1, &csbank2, &csbank3, &basiclocs, &basichics, &kernalcs,
440438      &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs, &aec, &vsysaden);
441439/*
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 : ",
444442      offset, datxen, dramxen, clrniben, _64kcasen, casenb, viddaten, viddat_tr,
445443      clrnibcs, extbufcs, discromcs, buframcs, charomcs, viccs, vidmatcs,
446444      csbank1, csbank2, csbank3, basiclocs, basichics, kernalcs,
r18087r18088
451449   if (aec && !datxen && !_64kcasen)
452450   {
453451      data = m_ram->pointer()[offset & 0xffff];
454      //if (!space.debugger_access() && !ae) logerror("64K\n");
452      //if (!space.debugger_access()) logerror("64K\n");
455453   }
456454   else if (!aec && !viddaten && viddat_tr && !_64kcasen)
457455   {
458456      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");
460458   }
461459   else if (!dramxen && casenb && !P3)
462460   {
r18087r18088
466464      case 2: if (m_ram->size() > 0x20000) data = m_ram->pointer()[0x20000 + (offset & 0xffff)]; break;
467465      case 3: if (m_ram->size() > 0x30000) data = m_ram->pointer()[0x30000 + (offset & 0xffff)]; break;
468466      }
469      //if (!space.debugger_access() && !ae) logerror("CASEN\n");
467      //if (!space.debugger_access()) logerror("CASEN\n");
470468   }
471469   else if (!datxen && !buframcs)
472470   {
473471      data = m_buffer_ram[offset & 0x7ff];
474      //if (!space.debugger_access() && !ae) logerror("BUFRAM\n");
472      //if (!space.debugger_access()) logerror("BUFRAM\n");
475473   }
476474   else if (!vsysaden && clrniben && !clrnibcs)
477475   {
478476      data = m_color_ram[offset & 0x3ff];
479      //if (!space.debugger_access() && !ae) logerror("CLRNIB\n");
477      //if (!space.debugger_access()) logerror("CLRNIB\n");
480478   }
481479   else if (vsysaden && !clrnibcs)
482480   {
483481      data = m_color_ram[va & 0x3ff];
484      //if (!space.debugger_access() && !ae) logerror("CLRNIB\n");
482      //if (!space.debugger_access()) logerror("CLRNIB\n");
485483   }
486484   else if (!datxen && !vsysaden && !viddaten && viddat_tr && !vidmatcs)
487485   {
488486      data = m_video_ram[offset & 0x3ff];
489      //if (!space.debugger_access() && !ae) logerror("VIDMAT\n");
487      //if (!space.debugger_access()) logerror("VIDMAT\n");
490488   }
491489   else if (vsysaden && !vidmatcs)
492490   {
493491      data = m_video_ram[va & 0x3ff];
494      //if (!space.debugger_access() && !ae) logerror("VIDMAT\n");
492      //if (!space.debugger_access()) logerror("VIDMAT\n");
495493   }
496494   else if (!datxen && (!basiclocs || !basichics))
497495   {
498496      data = m_basic[offset & 0x3fff];
499      //if (!space.debugger_access() && !ae) logerror("BASIC\n");
497      //if (!space.debugger_access()) logerror("BASIC\n");
500498   }
501499   else if (!datxen && !kernalcs)
502500   {
503501      data = m_kernal[offset & 0x1fff];
504      //if (!space.debugger_access() && !ae) logerror("KERNAL\n");
502      //if (!space.debugger_access()) logerror("KERNAL\n");
505503   }
506504   else if (!datxen && !vsysaden && !viddaten && viddat_tr && !charomcs)
507505   {
508506      data = m_charom[offset & 0xfff];
509      //if (!space.debugger_access() && !ae) logerror("CHAROM\n");
507      //if (!space.debugger_access()) logerror("CHAROM\n");
510508   }
511509   else if (vsysaden && !charomcs)
512510   {
513511      data = m_charom[va & 0xfff];
514      //if (!space.debugger_access() && !ae) logerror("CHAROM\n");
512      //if (!space.debugger_access()) logerror("CHAROM\n");
515513   }
516514   else if (!datxen && !viddaten && viddat_tr && !viccs)
517515   {
518516      data = m_vic->read(space, offset & 0x3f);
519      //if (!space.debugger_access() && !ae) logerror("VIC\n");
517      //if (!space.debugger_access()) logerror("VIC\n");
520518   }
521519   else if (!datxen && !sidcs)
522520   {
523521      data = m_sid->read(space, offset & 0x1f);
524      //if (!space.debugger_access() && !ae) logerror("SID\n");
522      //if (!space.debugger_access()) logerror("SID\n");
525523   }
526524   else if (!datxen && !ciacs)
527525   {
528526      data = m_cia->read(space, offset & 0x0f);
529      //if (!space.debugger_access() && !ae) logerror("CIA\n");
527      //if (!space.debugger_access()) logerror("CIA\n");
530528   }
531529   else if (!datxen && !aciacs)
532530   {
533531      data = m_acia->read(space, offset & 0x03);
534      //if (!space.debugger_access() && !ae) logerror("ACIA\n");
532      //if (!space.debugger_access()) logerror("ACIA\n");
535533   }
536534   else if (!datxen && !tript1cs)
537535   {
538536      data = m_tpi1->read(space, offset & 0x07);
539      //if (!space.debugger_access() && !ae) logerror("TPI1\n");
537      //if (!space.debugger_access()) logerror("TPI1\n");
540538   }
541539   else if (!datxen && !tript2cs)
542540   {
543541      data = m_tpi2->read(space, offset & 0x07);
544      //if (!space.debugger_access() && !ae) logerror("TPI2\n");
542      //if (!space.debugger_access()) logerror("TPI2\n");
545543   }
546   //else if (!space.debugger_access() && !ae) logerror("\n");
544   //else //if (!space.debugger_access()) logerror("\n");
547545
548546   if (!datxen) data = m_exp->read(space, offset & 0x1fff, data, csbank1, csbank2, csbank3);
549547
r18087r18088
573571      &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs, &aec, &vsysaden);
574572/*
575573   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 : ",
577575      offset, datxen, dramxen, clrniben, _64kcasen, casenb, viddaten, viddat_tr,
578576      clrnibcs, extbufcs, discromcs, buframcs, charomcs, viccs, vidmatcs,
579577      csbank1, csbank2, csbank3, basiclocs, basichics, kernalcs,
r18087r18088
581579*/
582580   if (!aec && !datxen && !_64kcasen)
583581   {
584      //logerror("64K RAM\n");
582      //if (!space.debugger_access()) logerror("64K RAM\n");
585583      m_ram->pointer()[offset & 0xffff] = data;
586584   }
587585   else if (!dramxen && casenb && !P3)
588586   {
589      //logerror("CASENB\n");
587      //if (!space.debugger_access()) logerror("CASENB\n");
590588      switch ((offset >> 15) & 0x07)
591589      {
592590      case 1: m_ram->pointer()[0x10000 + (offset & 0xffff)] = data; break;
r18087r18088
596594   }
597595   else if (!datxen && !buframcs)
598596   {
599      //logerror("BUFRAM\n");
597      //if (!space.debugger_access()) logerror("BUFRAM\n");
600598      m_buffer_ram[offset & 0x7ff] = data;
601599   }
602600   else if (!vsysaden && clrniben && !clrnibcs)
603601   {
604      //logerror("CLRNIB\n");
602      //if (!space.debugger_access()) logerror("CLRNIB\n");
605603      m_color_ram[offset & 0x3ff] = data;
606604   }
607605   else if (!datxen && !vsysaden && !viddaten && !viddat_tr && !vidmatcs)
608606   {
609      //logerror("VIDMAT\n");
607      //if (!space.debugger_access()) logerror("VIDMAT\n");
610608      m_video_ram[offset & 0x3ff] = data;
611609   }
612610   else if (vsysaden && !vidmatcs)
613611   {
614      //logerror("VIDMAT\n");
612      //if (!space.debugger_access()) logerror("VIDMAT\n");
615613      m_video_ram[va & 0x3ff] = data;
616614   }
617615   else if (!datxen && !viddaten && !viddat_tr && !viccs)
618616   {
619      //logerror("VIC\n");
617      //if (!space.debugger_access()) logerror("VIC\n");
620618      m_vic->write(space, offset & 0x3f, data);
621619   }
622620   else if (!datxen && !sidcs)
623621   {
624      //logerror("SID\n");
622      //if (!space.debugger_access()) logerror("SID\n");
625623      m_sid->write(space, offset & 0x1f, data);
626624   }
627625   else if (!datxen && !ciacs)
628626   {
629      //logerror("CIA\n");
627      //if (!space.debugger_access()) logerror("CIA\n");
630628      m_cia->write(space, offset & 0x0f, data);
631629   }
632630   else if (!datxen && !aciacs)
633631   {
634      //logerror("ACIA\n");
632      //if (!space.debugger_access()) logerror("ACIA\n");
635633      m_acia->write(space, offset & 0x03, data);
636634   }
637635   else if (!datxen && !tript1cs)
638636   {
639      //logerror("TPI1\n");
637      //if (!space.debugger_access()) logerror("TPI1\n");
640638      m_tpi1->write(space, offset & 0x07, data);
641639   }
642640   else if (!datxen && !tript2cs)
643641   {
644      //logerror("TPI2\n");
642      //if (!space.debugger_access()) logerror("TPI2\n");
645643      m_tpi2->write(space, offset & 0x07, data);
646644   }
647   //else logerror("\n");
645   //else //if (!space.debugger_access()) logerror("\n");
648646
649647   if (!datxen) m_exp->write(space, offset & 0x1fff, data, csbank1, csbank2, csbank3);
650648}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team