Previous 199869 Revisions Next

r29541 Friday 11th April, 2014 at 20:28:15 UTC by Angelo Salese
Improved fdc hookup
[src/mame/machine]archimds.c
[src/mess/drivers]a310.c

trunk/src/mame/machine/archimds.c
r29540r29541
685685         {
686686            case 0: return ioc_ctrl_r(space,offset,mem_mask);
687687            case 1:
688               if (m_fdc) {
689                  logerror("17XX: R @ addr %x mask %08x\n", offset*4, mem_mask);
690                  return m_fdc->data_r(space, offset&0xf);
688               if (m_fdc)
689               {
690                  //printf("17XX: R @ addr %x mask %08x\n", offset*4, mem_mask);
691
692                  switch(ioc_addr & 0xc)
693                  {
694                     case 0x00: return m_fdc->status_r();
695                     case 0x04: return m_fdc->track_r();
696                     case 0x08: return m_fdc->sector_r();
697                     case 0x0c: return m_fdc->data_r();
698                  }
699
700                  return 0;
691701               } else {
692702                  logerror("Read from FDC device?\n");
693703                  return 0;
r29540r29541
702712               logerror("IOC: Internal Podule Read\n");
703713               return 0xffff;
704714            case 5:
705               if (m_fdc) {
715               if (m_fdc)
716               {
706717                  switch(ioc_addr & 0xfffc)
707718                  {
719                     case 0x18: return 0xff; // FDC latch B
720                     case 0x40: return 0xff; // FDC latch A
708721                     case 0x50: return 0; //fdc type, new model returns 5 here
722                            case 0x70: return 0x0F;
723                            case 0x74: return 0xFF; // unknown
724//                          case 0x78: /* joystick */
725//                          case 0x7c:
709726                  }
710727               }
711728
712               logerror("IOC: Internal Latches Read %08x\n",ioc_addr);
729               //printf("IOC: Internal Latches Read %08x\n",ioc_addr);
713730
714731               return 0xffff;
715732         }
r29540r29541
740757         {
741758            case 0: ioc_ctrl_w(space,offset,data,mem_mask); return;
742759            case 1:
743                  if (m_fdc) {
744                     logerror("17XX: %x to addr %x mask %08x\n", data, offset*4, mem_mask);
745                     m_fdc->data_w(space, offset&0xf, data&0xff);
746                  } else {
760                  if (m_fdc)
761                  {
762                     //printf("17XX: %x to addr %x mask %08x\n", data, offset*4, mem_mask);
763                     switch(ioc_addr & 0xc)
764                     {
765                        case 0x00:
766                           m_fdc->cmd_w(data);
767                           return;
768
769                        case 0x04:
770                           m_fdc->track_w(data);
771                           return;
772
773                        case 0x08:
774                           m_fdc->sector_w(data);
775                           return;
776
777                           case 0x0c:
778                           m_fdc->data_w(data);
779                           return;
780                     }
781                  }
782                  else
783                  {
747784                     logerror("Write to FDC device?\n");
748785                  }
749786                  return;
r29540r29541
757794               logerror("IOC: Internal Podule Write\n");
758795               return;
759796            case 5:
760               if (m_fdc) {
797               if (m_fdc)
798               {
761799                  switch(ioc_addr & 0xfffc)
762800                  {
763801                     case 0x18: // latch B
764                        m_fdc->dden_w(BIT(data, 1));
802                        m_fdc->dden_w(!(BIT(data, 1)));
765803                        return;
766804
767805                     case 0x40: // latch A
r29540r29541
769807
770808                        if (data & 1) { floppy = m_floppy0->get_device(); }
771809                        if (data & 2) { floppy = m_floppy1->get_device(); }
772                        //if (data & 4) { m_fdc->set_drive(2); }
773                        //if (data & 8) { m_fdc->set_drive(3); }
810                        if (data & 4) { floppy = NULL; } // floppy 2
811                        if (data & 8) { floppy = NULL; } // floppy 3
774812
775813                        m_fdc->set_floppy(floppy);
776814
777815                        if(floppy)
778816                        {
779817                           floppy->mon_w(BIT(data, 5));
780                           m_fdc->dden_w(BIT(data, 4));
818                           floppy->ss_w(BIT(data, 4));
781819                        }
782820                        //bit 5 is motor on
783821                        return;
784822                  }
823
824                  //printf("%08x\n",ioc_addr);
785825               }
786826               break;
787827         }
trunk/src/mess/drivers/a310.c
r29540r29541
360360   MCFG_RAM_EXTRA_OPTIONS("512K, 1M, 4M, 8M, 16M")
361361
362362   MCFG_WD1772x_ADD("fdc", 8000000 / 2)
363   MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE( a310_state, a310_wd177x_intrq_w))
364   MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(a310_state, a310_wd177x_drq_w))
363365   MCFG_FLOPPY_DRIVE_ADD("fdc:0", a310_floppies, "35dd", a310_state::floppy_formats)
364366   MCFG_FLOPPY_DRIVE_ADD("fdc:1", a310_floppies, "35dd", a310_state::floppy_formats)
365367

Previous 199869 Revisions Next


© 1997-2024 The MAME Team