Previous 15994 Revisions Next

r9433 Friday 22nd October, 2010 at 15:13:04 UTC by Angelo Salese
[Mega CD]: fixed various bugs with CDD implementation, gets to the point of checking Track Addresses
[src/mame/drivers]megadriv.c

src/mame/drivers/megadriv.c
r9432r9433
397397{
398398   UINT8 buffer[5];
399399   UINT8 ctrl;
400   UINT8 scd_status; // SCSI status?
400401}segacd_cdd;
401402#ifdef MESS
402403static struct
r9432r9433
51085109            segacd.end_frame = segacd.last_frame;
51095110         }
51105111      }
5112
5113      segacd_cdd.scd_status = 0x00; // initial state
51115114   }
51125115   #endif
51135116
r9432r9433
53655368
53665369static void segacd_cdd_get_status(running_machine *machine)
53675370{
5368   segacd_cdd.buffer[0] = 0;
5369   segacd_cdd.buffer[1] = 0;
5370   segacd_cdd.buffer[2] = 0;
5371   segacd_cdd.buffer[3] = 0;
5372   segacd_cdd.buffer[4] = 0;
5371   //segacd_cdd.buffer[0] = 0;
5372   //segacd_cdd.buffer[1] = 0;
5373   //segacd_cdd.buffer[2] = 0;
5374   //segacd_cdd.buffer[3] = 0;
5375   //segacd_cdd.buffer[4] = 0;
53735376
53745377   cdd_hock_irq(machine,1);
53755378}
r9432r9433
53905393
53915394static void segacd_cdd_get_toc_info(running_machine *machine)
53925395{
5393   segacd_cdd.buffer[0] = (segacd_cdd_tx[3] & 0xf) | (segacd_cdd.buffer[0] & 0xf0);
5396   segacd_cdd.buffer[0] = (segacd_cdd_tx[3] & 0xf) | (segacd_cdd.scd_status & 0xf0); // TODO: remove me
53945397
53955398   #if LOG_CDD
53965399   printf("CDD: TOC command %s issued\n",segacd_cdd_get_toc_cmd[segacd_cdd_tx[3] & 0xf]);
r9432r9433
54295432
54305433            frame = segacd.toc->tracks[segacd.toc->numtrks-1].physframeofs;
54315434            frame += segacd.toc->tracks[segacd.toc->numtrks-1].frames;
5435            frame += 150; // 2 seconds of pre-gap
54325436            msf = lba_to_msf( frame );
54335437
5434            segacd_cdd.buffer[0] = (0x3 & 0xf) | (segacd_cdd.buffer[0] & 0xf0);
5438            segacd_cdd.buffer[0] = (0x3 & 0xf) | (segacd_cdd.scd_status & 0xf0);
54355439            segacd_cdd.buffer[1] = ((msf >> 16) & 0xff);
54365440            segacd_cdd.buffer[2] = ((msf >> 8) & 0xff);
54375441            segacd_cdd.buffer[3] = ((msf >> 0) & 0xff);
54385442            segacd_cdd.buffer[4] = 0;
54395443
5444            printf("%02x %02x %02x %02x %02x\n",segacd_cdd.buffer[0],segacd_cdd.buffer[1],segacd_cdd.buffer[2],segacd_cdd.buffer[3],segacd_cdd.buffer[4]);
5445
54405446            cdd_hock_irq(machine,1);
54415447            return;
54425448
54435449         }
54445450      case 0x4: //Get First and Last Track Number
54455451         {
5446            segacd_cdd.buffer[0] = (0x4 & 0xf) | (segacd_cdd.buffer[0] & 0xf0);
5452            segacd_cdd.scd_status = 0x40;
5453            segacd_cdd.buffer[0] = (0x4 & 0xf) | (segacd_cdd.scd_status & 0xf0);
54475454            segacd_cdd.buffer[1] = dec_2_bcd(1);
5448            segacd_cdd.buffer[2] = dec_2_bcd(segacd.toc->numtrks);
5455            segacd_cdd.buffer[2] = dec_2_bcd(segacd.toc->numtrks - 1); // TODO: check me
54495456            segacd_cdd.buffer[3] = 0;
54505457            segacd_cdd.buffer[4] = 0;
54515458
5459            printf("%02x %02x %02x %02x %02x\n",segacd_cdd.buffer[0],segacd_cdd.buffer[1],segacd_cdd.buffer[2],segacd_cdd.buffer[3],segacd_cdd.buffer[4]);
5460
54525461            cdd_hock_irq(machine,1);
54535462         }
54545463         return;

Previous 15994 Revisions Next


© 1998-2018 The MESS Team