Previous 199869 Revisions Next

r21707 Friday 8th March, 2013 at 15:36:21 UTC by Curt Coder
(MESS) cbm8296: Fixed address decode and video. (nw)
[src/mess/drivers]pet.c

trunk/src/mess/drivers/pet.c
r21706r21707
327327{
328328   UINT32 input = (offset & 0xff00) | phi2 << 7 | brw << 6 | noscreen << 5 | noio << 4 | ramsela << 3 | ramsel9 << 2 | ramon << 1 | norom;
329329   //UINT32 data = m_pla1->read(input);
330   input = BITSWAP16(input,0,10,15,11,9,8,13,14,12,7,6,5,4,3,2,1);
330   input = BITSWAP16(input,13,8,9,7,12,14,11,10,6,5,4,3,2,1,0,15);
331331   UINT8 data = m_ue6_rom->base()[input];
332332   data = BITSWAP8(data,7,0,1,2,3,4,5,6);
333333
r21706r21707
350350{
351351   UINT32 input = BITSWAP8(m_cr, 0,1,2,3,4,5,6,7) << 8 | ((offset >> 8) & 0xf8) | brw << 2 | phi2 << 1 | casena1;
352352   //UINT32 data = m_pla2->read(input);
353   input = BITSWAP16(input,0,10,15,11,9,8,13,14,12,7,6,5,4,3,2,1);
353   input = BITSWAP16(input,13,8,9,7,12,14,11,10,6,5,4,3,2,1,0,15);
354354   UINT8 data = m_ue5_rom->base()[input];
355355   data = BITSWAP8(data,7,0,1,2,3,4,5,6);
356356
r21706r21707
380380   read_pla1(offset, phi2, brw, noscreen, noio, ramsela, ramsel9, ramon, norom,
381381      cswff, cs9, csa, csio, cse, cskb, fa12, casena1);
382382
383   //printf("%04x : cswff %u cs9 %u csa %u csio %u cse %u cskb %u fa12 %u casena1 %u endra %u noscreen %u casena2 %u fa15 %u\n",offset,cswff,cs9,csa,csio,cse,cskb,fa12,casena1,endra,noscreen,casena2,fa15);
383   //logerror("%04x : cswff %u cs9 %u csa %u csio %u cse %u cskb %u fa12 %u casena1 %u endra %u noscreen %u casena2 %u fa15 %u\n",offset,cswff,cs9,csa,csio,cse,cskb,fa12,casena1,endra,noscreen,casena2,fa15);
384384
385385   UINT8 data = 0;
386386
r21706r21707
390390      {
391391         data = m_ram->pointer()[offset & 0xffff];
392392      }
393      if (!casena2)
393      if (casena2)
394394      {
395395         data = m_ram->pointer()[0x10000 | fa15 << 15 | (offset & 0x7fff)];
396396      }
r21706r21707
460460      {
461461         m_ram->pointer()[offset & 0xffff] = data;
462462      }
463      if (!casena2)
463      if (casena2)
464464      {
465465         m_ram->pointer()[0x10000 | fa15 << 15 | (offset & 0x7fff)] = data;
466466      }
r21706r21707
491491         }
492492      }
493493   }
494   if (!cswff && ((offset & 0xff) == 0xf0))
494   if (cswff && ((offset & 0xff) == 0xf0))
495495   {
496496      m_cr = data;
497497   }
r21706r21707
11971197};
11981198
11991199
1200//-------------------------------------------------
1201//  MC6845_INTERFACE( cbm8296_crtc_intf )
1202//-------------------------------------------------
12001203
1204static MC6845_UPDATE_ROW( cbm8296_update_row )
1205{
1206   pet80_state *state = device->machine().driver_data<pet80_state>();
1207   int x = 0;
1208   int char_rom_mask = state->m_char_rom->bytes() - 1;
1209
1210   for (int column = 0; column < x_count; column++)
1211   {
1212      UINT8 lsd = 0, data = 0;
1213      UINT8 rra = ra & 0x07;
1214      int no_row = !BIT(ra, 3);
1215      int chr_option = BIT(ma, 13);
1216
1217      // even character
1218
1219      lsd = state->m_ram->pointer()[0x8000 | (((ma + column) << 1) & 0x1fff)];
1220
1221      offs_t char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra;
1222      data = state->m_char_rom->base()[char_addr & char_rom_mask];
1223
1224      for (int bit = 0; bit < 8; bit++, data <<= 1)
1225      {
1226         int video = ((BIT(data, 7) ^ BIT(lsd, 7)) && no_row);
1227         bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[video];
1228      }
1229
1230      // odd character
1231
1232      lsd = state->m_ram->pointer()[0x8000 | ((((ma + column) << 1) + 1) & 0x1fff)];
1233
1234      char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra;
1235      data = state->m_char_rom->base()[char_addr & char_rom_mask];
1236
1237      for (int bit = 0; bit < 8; bit++, data <<= 1)
1238      {
1239         int video = ((BIT(data, 7) ^ BIT(lsd, 7)) && no_row);
1240         bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[video];
1241      }
1242   }
1243}
1244
1245static MC6845_INTERFACE( cbm8296_crtc_intf )
1246{
1247   SCREEN_TAG,
1248   false,
1249   2*8,
1250   NULL,
1251   cbm8296_update_row,
1252   NULL,
1253   DEVCB_NULL,
1254   DEVCB_NULL,
1255   DEVCB_NULL,
1256   DEVCB_DEVICE_LINE_MEMBER(M6520_1_TAG, pia6821_device, cb1_w),
1257   NULL
1258};
1259
1260
1261
12011262//**************************************************************************
12021263//  MACHINE INITIALIZATION
12031264//**************************************************************************
r21706r21707
17411802   MCFG_PLS100_ADD(PLA1_TAG)
17421803   MCFG_PLS100_ADD(PLA2_TAG)
17431804
1805   MCFG_DEVICE_MODIFY(MC6845_TAG)
1806   MCFG_DEVICE_CONFIG(cbm8296_crtc_intf)
1807
17441808   MCFG_DEVICE_REMOVE("ieee8")
17451809   MCFG_IEEE488_SLOT_ADD("ieee8", 8, cbm_ieee488_devices, "c8250", NULL)
17461810

Previous 199869 Revisions Next


© 1997-2024 The MAME Team