Previous 15994 Revisions Next

r9076 Thursday 9th September, 2010 at 12:40:32 UTC by Angelo Salese
[PCE]: Implemented remaining Arcade Card features
[src/mess/machine]pce.c

src/mess/machine/pce.c
r9075r9076
117117   UINT32   acard_base_addr;
118118   UINT16   acard_addr_offset;
119119   UINT16   acard_addr_inc;
120   UINT32   acard_shift;
121   UINT8   acard_shift_reg;
120122
121123   UINT32   current_frame;
122124   UINT32   end_frame;
r9075r9076
13011303   {
13021304      switch(offset & 0x2ef)
13031305      {
1306         case 0x2e0: return (pce_cd.acard_shift >> 0)  & 0xff;
1307         case 0x2e1: return (pce_cd.acard_shift >> 8)  & 0xff;
1308         case 0x2e2: return (pce_cd.acard_shift >> 16) & 0xff;
1309         case 0x2e3: return (pce_cd.acard_shift >> 24) & 0xff;
1310         case 0x2e4: return (pce_cd.acard_shift_reg);
13041311         case 0x2e5: return pce_cd.acard_latch;
13051312         case 0x2ee: return 0x10;
13061313         case 0x2ef: return 0x51;
r9075r9076
13301337            else
13311338            {
13321339               pce_cd.acard_addr_offset += pce_cd.acard_addr_inc;
1333
13341340            }
13351341         }
13361342
r9075r9076
13441350      case 0x07: return (pce_cd.acard_addr_inc >> 0) & 0xff;
13451351      case 0x08: return (pce_cd.acard_addr_inc >> 8) & 0xff;
13461352      case 0x09: return pce_cd.acard_ctrl;
1353      default:   return 0;
13471354   }
13481355
13491356   return 0;
r9075r9076
13571364   {
13581365      switch(offset & 0x0f)
13591366      {
1367         case 0: pce_cd.acard_shift = (data & 0xff) | (pce_cd.acard_shift & 0xffffff00); break;
1368         case 1: pce_cd.acard_shift = (data << 8)   | (pce_cd.acard_shift & 0xffff00ff); break;
1369         case 2: pce_cd.acard_shift = (data << 16)  | (pce_cd.acard_shift & 0xff00ffff); break;
1370         case 3: pce_cd.acard_shift = (data << 24)  | (pce_cd.acard_shift & 0x00ffffff); break;
1371         case 4:
1372            {
1373               pce_cd.acard_shift_reg = data & 0x0f;
1374
1375               if(pce_cd.acard_shift_reg != 0)
1376               {
1377                   pce_cd.acard_shift = (pce_cd.acard_shift_reg < 8) ?
1378                                  (pce_cd.acard_shift << pce_cd.acard_shift_reg)
1379                                  : (pce_cd.acard_shift >> (16 - pce_cd.acard_shift_reg));
1380               }
1381            }
1382            break;
13601383         case 5: pce_cd.acard_latch = data; break;
13611384      }
13621385   }
r9075r9076
13811404               else
13821405               {
13831406                  pce_cd.acard_addr_offset += pce_cd.acard_addr_inc;
1384
13851407               }
13861408            }
13871409
r9075r9076
13941416         case 0x06:
13951417            pce_cd.acard_addr_offset = (data << 8) | (pce_cd.acard_addr_offset & 0x00ff);
13961418
1419            if((pce_cd.acard_ctrl & 0x60) == 0x40)
1420            {
1421               pce_cd.acard_base_addr += pce_cd.acard_addr_offset + ((pce_cd.acard_ctrl & 0x08) ? 0xff0000 : 0);
1422               pce_cd.acard_base_addr &= 0xffffff;
1423            }
13971424            break;
13981425         case 0x07: pce_cd.acard_addr_inc = (data & 0xff) | (pce_cd.acard_addr_inc & 0xff00);       break;
13991426         case 0x08: pce_cd.acard_addr_inc = (data << 8) | (pce_cd.acard_addr_inc & 0x00ff);          break;
14001427         case 0x09: pce_cd.acard_ctrl = data & 0x7f;                                     break;
1428         case 0x0a:
1429            if((pce_cd.acard_ctrl & 0x60) == 0x60)
1430            {
1431               pce_cd.acard_base_addr += pce_cd.acard_addr_offset;
1432               pce_cd.acard_base_addr &= 0xffffff;
1433            }
1434            break;
14011435      }
14021436   }
14031437}

Previous 15994 Revisions Next


© 1998-2018 The MESS Team