1.1 --- a/src/asic.c Mon Jul 14 07:44:42 2008 +0000
1.2 +++ b/src/asic.c Sun Jul 20 11:36:48 2008 +0000
1.4 sh4addr_t table_addr = MMIO_READ( ASIC, SORTDMATBL );
1.5 sh4addr_t data_addr = MMIO_READ( ASIC, SORTDMADATA );
1.6 int table_size = MMIO_READ( ASIC, SORTDMATSIZ );
1.7 - int data_size = MMIO_READ( ASIC, SORTDMADSIZ );
1.8 + int addr_shift = MMIO_READ( ASIC, SORTDMAASIZ ) ? 5 : 0;
1.11 - WARN( "Sort DMA not implemented" );
1.12 + uint32_t *table32 = (uint32_t *)mem_get_region( table_addr );
1.13 + uint16_t *table16 = (uint16_t *)table32;
1.14 + uint32_t next = table_size ? (*table32++) : (uint32_t)(*table16++);
1.16 + next &= 0x07FFFFFF;
1.18 + next = table_size ? (*table32++) : (uint32_t)(*table16++);
1.21 + } else if( next == 2 ) {
1.22 + asic_event( EVENT_SORT_DMA );
1.25 + uint32_t *data = (uint32_t *)mem_get_region(data_addr + (next<<addr_shift));
1.26 + if( data == NULL ) {
1.30 + uint32_t *poly = pvr2_ta_find_polygon_context(data, 128);
1.31 + if( poly == NULL ) {
1.32 + asic_event( EVENT_SORT_DMA_ERR );
1.35 + uint32_t size = poly[6] & 0xFF;
1.40 + pvr2_ta_write( (unsigned char *)data, size<<5 );
1.43 + MMIO_WRITE( ASIC, SORTDMACNT, count );
1.44 + MMIO_WRITE( ASIC, SORTDMACTL, 0 );
1.47 void mmio_region_ASIC_write( uint32_t reg, uint32_t val )
1.49 case SORTDMATBL: case SORTDMADATA:
1.50 MMIO_WRITE( ASIC, reg, (val & 0x0FFFFFE0) | 0x08000000 );
1.52 - case SORTDMATSIZ: case SORTDMADSIZ:
1.53 + case SORTDMATSIZ: case SORTDMAASIZ:
1.54 MMIO_WRITE( ASIC, reg, (val & 1) );