Previous 15994 Revisions Next

r9145 Thursday 16th September, 2010 at 23:39:34 UTC by Barry Rodewald
[FMTOWNS] Improved CD IRQ flag handling, Lemmings and Shadow of the Beast now start to load (but are still not playable).
[src/mess/drivers]fmtowns.c

src/mess/drivers/fmtowns.c
r9144r9145
10981098 *    bit 4 - DMA transfer
10991099 *    bit 1 - status read request
11001100 *    bit 0 - ready
1101 *    Note: IRQ bits are only set high if the IRQ bit in the command byte is NOT set.
11011102 *
11021103 *  0x4c2 - Command port (R/W)
11031104 *    On read, returns status byte (4 in total?)
r9144r9145
11341135         {
11351136            if(tstate->towns_cd.command & 0x40)
11361137            {
1137               tstate->towns_cd.status |= 0x80;
1138               if(tstate->towns_cd.mpu_irq_enable)
1138//               if(tstate->towns_cd.mpu_irq_enable)
11391139               {
1140                  tstate->towns_cd.status |= 0x80;
11401141                  pic8259_ir1_w(tstate->pic_slave, 1);
11411142                  logerror("PIC: IRQ9 (CD-ROM) set high\n");
11421143               }
11431144            }
1145            else
1146               tstate->towns_cd.status |= 0x80;
11441147         }
11451148         else
11461149         {
r9144r9145
11541157         {
11551158            if(tstate->towns_cd.command & 0x40)
11561159            {
1157               tstate->towns_cd.status |= 0x40;
1158               if(tstate->towns_cd.dma_irq_enable)
1160//               if(tstate->towns_cd.dma_irq_enable)
11591161               {
1162                  tstate->towns_cd.status |= 0x40;
11601163                  pic8259_ir1_w(tstate->pic_slave, 1);
11611164                  logerror("PIC: IRQ9 (CD-ROM DMA) set high\n");
11621165               }
11631166            }
1167            else
1168               tstate->towns_cd.status |= 0x40;
11641169         }
11651170         else
11661171         {
r9144r9145
12881293      state->towns_cd.lba_last -= 150;
12891294   }
12901295
1296   // parameter 7 = sector count?
1297   if(state->towns_cd.parameter[1] != 0)
1298      state->towns_cd.lba_last += state->towns_cd.parameter[1];
1299
12911300   logerror("CD: Mode 1 read from LBA next:%i last:%i track:%i\n",state->towns_cd.lba_current,state->towns_cd.lba_last,track);
12921301
12931302   if(state->towns_cd.lba_current > state->towns_cd.lba_last)
r9144r9145
13021311      state->towns_cd.status &= ~0x20;  // not a software transfer
13031312//      state->towns_cd.buffer_ptr = 0;
13041313//      timer_adjust_oneshot(state->towns_cd.read_timer,ATTOTIME_IN_HZ(300000),1);
1305      state->towns_cd.extra_status = 2;
1306      towns_cd_set_status(device->machine,0x00,0x00,0x00,0x00);
1314      if(state->towns_cd.command & 0x20)
1315      {
1316         state->towns_cd.extra_status = 2;
1317         towns_cd_set_status(device->machine,0x00,0x00,0x00,0x00);
1318      }
1319      else
1320      {
1321         state->towns_cd.extra_status = 0;
1322         towns_cd_set_status(device->machine,0x22,0x00,0x00,0x00);
1323      }
13071324   }
13081325}
13091326
r9144r9145
13711388            if(state->towns_cd.command & 0x20)
13721389            {
13731390               state->towns_cd.extra_status = 0;
1374               towns_cd_set_status(device->machine,0x00,0x00,0x00,0x00);
1391               towns_cd_set_status(device->machine,0x00,0xff,0xff,0xff);
13751392            }
13761393            logerror("CD: Command 0x01: unknown\n");
13771394            break;

Previous 15994 Revisions Next


© 1998-2018 The MESS Team