trunk/src/mame/drivers/coolridr.c
| r21354 | r21355 | |
| 1277 | 1277 | printf("blitter mode with mask 0x0000f000\n"); |
| 1278 | 1278 | |
| 1279 | 1279 | |
| 1280 | |
| 1281 | //if (m_blitterMode<0x80) printf("blitter set screen %d mode %02x addr? %04x\n", (data&0x00800000)>>23, ((data & 0x00ff0000)>>16)-0x30, data & 0x00000fff); |
| 1282 | |
| 1280 | 1283 | // form 0xacMM-xxx ac = fixed value for this mode? MM = modes above. -xxx = some kind of offset? but it doesn't increment for each blit like the textOffset / paletteOffset stuff, investigate |
| 1281 | 1284 | |
| 1282 | 1285 | } |
| r21354 | r21355 | |
| 1428 | 1431 | copybitmap(m_screen2_bitmap, m_temp_bitmap_sprites2[i], 0, 0, 0, 0, visarea); |
| 1429 | 1432 | m_temp_bitmap_sprites2[i].fill(0, visarea); |
| 1430 | 1433 | } |
| 1434 | |
| 1435 | //printf("frame\n"); |
| 1431 | 1436 | } |
| 1432 | 1437 | } |
| 1433 | 1438 | else |
| r21354 | r21355 | |
| 1505 | 1510 | size = m_framebuffer_vram[(8+dma_index)/4]; |
| 1506 | 1511 | type = (m_framebuffer_vram[(0+dma_index)/4] & 0xf0000000) >> 28; |
| 1507 | 1512 | |
| 1508 | | #if 0 |
| 1509 | | if(type == 0xc || type == 0xd || type == 0xe) |
| 1510 | | printf("* %08x %08x %08x %08x\n",src,dst,size,type); |
| 1511 | | else if(type != 0 && type != 0x4) |
| 1512 | | printf("%08x %08x %08x %08x\n",src,dst,size,type); |
| 1513 | | #endif |
| 1514 | 1513 | |
| 1515 | | if(type == 0x3 || type == 0x4) |
| 1516 | | { |
| 1517 | | //type 3 sets a DMA state->m_param, type 4 sets some kind of table? Skip it for now |
| 1518 | | dma_index+=4; |
| 1519 | | continue; |
| 1520 | | } |
| 1521 | 1514 | |
| 1522 | | if(type == 0xc) |
| 1515 | switch (type) |
| 1523 | 1516 | { |
| 1524 | | dst &= 0xfffff; |
| 1517 | case 0x0: |
| 1518 | end_dma_mark = 1; //end of DMA list |
| 1519 | break; |
| 1525 | 1520 | |
| 1526 | | dst |= 0x3000000; //to videoram, FIXME: unknown offset |
| 1527 | | size*=2; |
| 1528 | | } |
| 1529 | | if(type == 0xd) |
| 1530 | | { |
| 1531 | | dst &= 0xfffff; |
| 1521 | default: |
| 1522 | // on startup |
| 1523 | //unhandled dma type 01 03e09b80 |
| 1524 | //unhandled dma type 02 03e0dc00 |
| 1525 | //unhandled dma type 02 07e0ee00 |
| 1532 | 1526 | |
| 1533 | | dst |= 0x3d00000; //to charram, FIXME: unknown offset |
| 1534 | | size*=2; |
| 1535 | | } |
| 1527 | printf("unhandled dma type %02x %08x\n", type, src); |
| 1528 | dma_index+=4; |
| 1529 | break; |
| 1536 | 1530 | |
| 1537 | | if(type == 0xe) |
| 1538 | | { |
| 1539 | | dst &= 0xfffff; |
| 1531 | case 0x3: |
| 1532 | //type 3 sets a DMA state->m_param, type 4 sets some kind of table? Skip it for now |
| 1533 | /* per screen - on transitions */ |
| 1534 | if (src & 0x04000000) |
| 1535 | { |
| 1536 | //printf("screen 2 unhandled dma type %02x %08x\n", type, src& ~0x04000000); |
| 1537 | } |
| 1538 | else |
| 1539 | { |
| 1540 | //printf("screen 1 unhandled dma type %02x %08x\n", type, src& ~0x04000000); |
| 1541 | } |
| 1542 | |
| 1543 | dma_index+=4; |
| 1544 | break; |
| 1540 | 1545 | |
| 1541 | | dst |= 0x3c00000; //to paletteram FIXME: unknown offset |
| 1542 | | //size/=2; |
| 1546 | case 0x4: |
| 1547 | /* per screen - on transitions */ |
| 1548 | /* some kind of brightness effect for the sprites? */ |
| 1543 | 1549 | |
| 1544 | | // this is used when transfering palettes written by the blitter? maybe? |
| 1545 | | // it might be a better indication of where blitter command 0xe0 should REALLY write data (at 0x3e00000)... |
| 1546 | | if((src & 0xff00000) == 0x3e00000) |
| 1547 | | { |
| 1548 | | src &= 0xfffff; |
| 1549 | | src |= 0x3c00000; |
| 1550 | | } |
| 1551 | | // return; //FIXME: kludge to avoid palette corruption |
| 1552 | | //debugger_break(space.machine()); |
| 1553 | | } |
| 1550 | if (src & 0x04000000) |
| 1551 | { |
| 1552 | // screen 2... |
| 1553 | //printf("screen 2 unhandled dma type %02x %08x\n", type, src& ~0x04000000); |
| 1554 | } |
| 1555 | else |
| 1556 | { |
| 1557 | // screen 1 |
| 1558 | //printf("screen 1 unhandled dma type %02x %08x\n", type, src& ~0x04000000); |
| 1559 | } |
| 1554 | 1560 | |
| 1555 | | if(type == 0xc || type == 0xd || type == 0xe) |
| 1556 | | { |
| 1557 | | for(s_i=0;s_i<size;s_i+=4) |
| 1558 | | { |
| 1559 | | space.write_dword(dst,space.read_dword(src)); |
| 1560 | | dst+=4; |
| 1561 | | src+=4; |
| 1562 | | } |
| 1561 | //type 3 sets a DMA state->m_param, type 4 sets some kind of table? Skip it for now |
| 1562 | dma_index+=4; |
| 1563 | break; |
| 1564 | |
| 1565 | case 0xc: |
| 1566 | dst &= 0xfffff; |
| 1567 | |
| 1568 | dst |= 0x3000000; //to videoram, FIXME: unknown offset |
| 1569 | size*=2; |
| 1570 | |
| 1571 | for(s_i=0;s_i<size;s_i+=4) |
| 1572 | { |
| 1573 | space.write_dword(dst,space.read_dword(src)); |
| 1574 | dst+=4; |
| 1575 | src+=4; |
| 1576 | } |
| 1577 | dma_index+=0xc; |
| 1578 | break; |
| 1579 | |
| 1580 | case 0xd: |
| 1581 | dst &= 0xfffff; |
| 1582 | |
| 1583 | dst |= 0x3d00000; //to charram, FIXME: unknown offset |
| 1584 | size*=2; |
| 1585 | |
| 1586 | for(s_i=0;s_i<size;s_i+=4) |
| 1587 | { |
| 1588 | space.write_dword(dst,space.read_dword(src)); |
| 1589 | dst+=4; |
| 1590 | src+=4; |
| 1591 | } |
| 1592 | dma_index+=0xc; |
| 1593 | break; |
| 1594 | |
| 1595 | case 0xe: |
| 1596 | dst &= 0xfffff; |
| 1597 | |
| 1598 | dst |= 0x3c00000; //to paletteram FIXME: unknown offset |
| 1599 | //size/=2; |
| 1600 | |
| 1601 | // this is used when transfering palettes written by the blitter? maybe? |
| 1602 | // it might be a better indication of where blitter command 0xe0 should REALLY write data (at 0x3e00000)... |
| 1603 | if((src & 0xff00000) == 0x3e00000) |
| 1604 | { |
| 1605 | src &= 0xfffff; |
| 1606 | src |= 0x3c00000; |
| 1607 | } |
| 1608 | |
| 1609 | for(s_i=0;s_i<size;s_i+=4) |
| 1610 | { |
| 1611 | space.write_dword(dst,space.read_dword(src)); |
| 1612 | dst+=4; |
| 1613 | src+=4; |
| 1614 | } |
| 1615 | dma_index+=0xc; |
| 1616 | break; |
| 1563 | 1617 | } |
| 1564 | | else |
| 1565 | | { |
| 1566 | | //printf("%08x %08x %08x %08x\n",src,dst,size,type); |
| 1567 | | } |
| 1568 | 1618 | |
| 1569 | | if(type == 0x00) |
| 1570 | | end_dma_mark = 1; //end of DMA list |
| 1571 | 1619 | |
| 1572 | | dma_index+=0xc; |
| 1573 | 1620 | |
| 1621 | |
| 1574 | 1622 | }while(!end_dma_mark ); |
| 1575 | 1623 | } |
| 1576 | 1624 | |