trunk/src/mess/drivers/pet.c
| r21706 | r21707 | |
| 327 | 327 | { |
| 328 | 328 | UINT32 input = (offset & 0xff00) | phi2 << 7 | brw << 6 | noscreen << 5 | noio << 4 | ramsela << 3 | ramsel9 << 2 | ramon << 1 | norom; |
| 329 | 329 | //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); |
| 331 | 331 | UINT8 data = m_ue6_rom->base()[input]; |
| 332 | 332 | data = BITSWAP8(data,7,0,1,2,3,4,5,6); |
| 333 | 333 | |
| r21706 | r21707 | |
| 350 | 350 | { |
| 351 | 351 | UINT32 input = BITSWAP8(m_cr, 0,1,2,3,4,5,6,7) << 8 | ((offset >> 8) & 0xf8) | brw << 2 | phi2 << 1 | casena1; |
| 352 | 352 | //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); |
| 354 | 354 | UINT8 data = m_ue5_rom->base()[input]; |
| 355 | 355 | data = BITSWAP8(data,7,0,1,2,3,4,5,6); |
| 356 | 356 | |
| r21706 | r21707 | |
| 380 | 380 | read_pla1(offset, phi2, brw, noscreen, noio, ramsela, ramsel9, ramon, norom, |
| 381 | 381 | cswff, cs9, csa, csio, cse, cskb, fa12, casena1); |
| 382 | 382 | |
| 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); |
| 384 | 384 | |
| 385 | 385 | UINT8 data = 0; |
| 386 | 386 | |
| r21706 | r21707 | |
| 390 | 390 | { |
| 391 | 391 | data = m_ram->pointer()[offset & 0xffff]; |
| 392 | 392 | } |
| 393 | | if (!casena2) |
| 393 | if (casena2) |
| 394 | 394 | { |
| 395 | 395 | data = m_ram->pointer()[0x10000 | fa15 << 15 | (offset & 0x7fff)]; |
| 396 | 396 | } |
| r21706 | r21707 | |
| 460 | 460 | { |
| 461 | 461 | m_ram->pointer()[offset & 0xffff] = data; |
| 462 | 462 | } |
| 463 | | if (!casena2) |
| 463 | if (casena2) |
| 464 | 464 | { |
| 465 | 465 | m_ram->pointer()[0x10000 | fa15 << 15 | (offset & 0x7fff)] = data; |
| 466 | 466 | } |
| r21706 | r21707 | |
| 491 | 491 | } |
| 492 | 492 | } |
| 493 | 493 | } |
| 494 | | if (!cswff && ((offset & 0xff) == 0xf0)) |
| 494 | if (cswff && ((offset & 0xff) == 0xf0)) |
| 495 | 495 | { |
| 496 | 496 | m_cr = data; |
| 497 | 497 | } |
| r21706 | r21707 | |
| 1197 | 1197 | }; |
| 1198 | 1198 | |
| 1199 | 1199 | |
| 1200 | //------------------------------------------------- |
| 1201 | // MC6845_INTERFACE( cbm8296_crtc_intf ) |
| 1202 | //------------------------------------------------- |
| 1200 | 1203 | |
| 1204 | static 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 | |
| 1245 | static 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 | |
| 1201 | 1262 | //************************************************************************** |
| 1202 | 1263 | // MACHINE INITIALIZATION |
| 1203 | 1264 | //************************************************************************** |
| r21706 | r21707 | |
| 1741 | 1802 | MCFG_PLS100_ADD(PLA1_TAG) |
| 1742 | 1803 | MCFG_PLS100_ADD(PLA2_TAG) |
| 1743 | 1804 | |
| 1805 | MCFG_DEVICE_MODIFY(MC6845_TAG) |
| 1806 | MCFG_DEVICE_CONFIG(cbm8296_crtc_intf) |
| 1807 | |
| 1744 | 1808 | MCFG_DEVICE_REMOVE("ieee8") |
| 1745 | 1809 | MCFG_IEEE488_SLOT_ADD("ieee8", 8, cbm_ieee488_devices, "c8250", NULL) |
| 1746 | 1810 | |