--- a/src/asic.c Mon Jul 14 07:44:42 2008 +0000 +++ b/src/asic.c Sun Jul 20 11:36:48 2008 +0000 @@ -355,9 +355,42 @@ sh4addr_t table_addr = MMIO_READ( ASIC, SORTDMATBL ); sh4addr_t data_addr = MMIO_READ( ASIC, SORTDMADATA ); int table_size = MMIO_READ( ASIC, SORTDMATSIZ ); - int data_size = MMIO_READ( ASIC, SORTDMADSIZ ); + int addr_shift = MMIO_READ( ASIC, SORTDMAASIZ ) ? 5 : 0; + int count = 1; - WARN( "Sort DMA not implemented" ); + uint32_t *table32 = (uint32_t *)mem_get_region( table_addr ); + uint16_t *table16 = (uint16_t *)table32; + uint32_t next = table_size ? (*table32++) : (uint32_t)(*table16++); + while(1) { + next &= 0x07FFFFFF; + if( next == 1 ) { + next = table_size ? (*table32++) : (uint32_t)(*table16++); + count++; + continue; + } else if( next == 2 ) { + asic_event( EVENT_SORT_DMA ); + break; + } + uint32_t *data = (uint32_t *)mem_get_region(data_addr + (next<