Previous 15994 Revisions Next

r7789 Monday 12th April, 2010 at 01:38:24 UTC by Barry Rodewald
[FMTOWNS] Greatly simplified first track hack. Fixes sound issues with SSF2 and fixes High-C.
[src/mess/drivers]fmtowns.c

src/mess/drivers/fmtowns.c
r7788r7789
12071207   track = cdrom_get_track(mess_cd_get_cdrom_file(device),towns_cd.lba_current);
12081208   if(track < 2)
12091209   {  // recalculate LBA
1210      if((towns_cd.parameter[6] & 0x0f) < 2)
1211      {
1212         lba1 = 0;
1213         if((towns_cd.parameter[6] & 0xf0) == 0x00)
1214         {
1215            lba1 |= (((towns_cd.parameter[6] + 8) & 0x0f) << 8);
1216            lba1 |= (((towns_cd.parameter[6] + 0x80) & 0xf0) << 8);
1217            lba1 |= ((towns_cd.parameter[7] - 1) << 16);
1218         }
1219         else
1220         {
1221            lba1 |= (((towns_cd.parameter[6] + 8) & 0x0f) << 8);
1222            lba1 |= (((towns_cd.parameter[6] - 0x10) & 0xf0) << 8);
1223            lba1 |= ((towns_cd.parameter[7]) << 16);
1224         }
1225      }
1226      else
1227      {
1228         lba1 = (towns_cd.parameter[7] << 16);
1229         lba1 |= ((towns_cd.parameter[6] - 2) << 8);
1230      }
1231      lba1 |= towns_cd.parameter[5];
1232      if((towns_cd.parameter[3] & 0x0f) < 2)
1233      {
1234         lba2 = 0;
1235         if((towns_cd.parameter[3] & 0xf0) == 0x00)
1236         {
1237            lba2 |= (((towns_cd.parameter[3] + 8) & 0x0f) << 8);
1238            lba2 |= (((towns_cd.parameter[3] + 0x80) & 0xf0) << 8);
1239            lba2 |= ((towns_cd.parameter[4] - 1) << 16);
1240         }
1241         else
1242         {
1243            lba2 |= (((towns_cd.parameter[3] + 8) & 0x0f) << 8);
1244            lba2 |= (((towns_cd.parameter[3] - 0x10) & 0xf0) << 8);
1245            lba2 |= ((towns_cd.parameter[4]) << 16);
1246         }
1247      }
1248      else
1249      {
1250         lba2 = (towns_cd.parameter[4] << 16);
1251         lba2 |= ((towns_cd.parameter[3] - 2) << 8);
1252      }
1253      lba2 |= towns_cd.parameter[2];
1254      towns_cd.lba_current = msf_to_lba(lba1);
1255      towns_cd.lba_last = msf_to_lba(lba2);
1210      towns_cd.lba_current -= 150;
1211      towns_cd.lba_last -= 150;
12561212   }
12571213
12581214   logerror("CD: Mode 1 read from LBA next:%i last:%i track:%i\n",towns_cd.lba_current,towns_cd.lba_last,track);
r7788r7789
13131269   }
13141270   else
13151271   {
1272      towns_cd.status &= ~0x02;
13161273      switch(towns_cd.command & 0x9f)
13171274      {
13181275         case 0x00:  // Seek
r7788r7789
13231280            }
13241281            logerror("CD: Command 0x00: SEEK\n");
13251282            break;
1283         case 0x01:  // unknown
1284            if(towns_cd.command & 0x20)
1285            {
1286               towns_cd.extra_status = 0;
1287               towns_cd_set_status(device->machine,0x00,0x00,0x00,0x00);
1288            }
1289            logerror("CD: Command 0x01: unknown\n");
1290            break;
13261291         case 0x02:  // Read (MODE1)
13271292            logerror("CD: Command 0x02: READ MODE1\n");
13281293            towns_cdrom_read(device);
r7788r7789
13421307            towns_cd_set_status(device->machine,0x00,0x00,0x00,0x00);
13431308            break;
13441309         case 0x80:  // set state
1310            logerror("CD: Command 0x80: set state\n");
13451311            if(towns_cd.command & 0x20)
13461312            {
13471313               towns_cd.extra_status = 0;
r7788r7789
13561322                  towns_cd_set_status(device->machine,0x00,0x01,0x00,0x00);
13571323
13581324            }
1359            logerror("CD: Command 0x80: set state\n");
13601325            break;
13611326         case 0x81:  // set state (CDDASET)
13621327            if(towns_cd.command & 0x20)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team