mirror of
				https://github.com/RaySollium99/picodrive.git
				synced 2025-10-27 21:48:50 +01:00 
			
		
		
		
	 6fc5714482
			
		
	
	
		6fc5714482
		
	
	
	
	
		
			
			git-svn-id: file:///home/notaz/opt/svn/PicoDrive@415 be3aeb3a-fb24-0410-a615-afba39da0efa
		
			
				
	
	
		
			135 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| # vim:filetype=mips
 | |
| 
 | |
| # some asm utils
 | |
| # (c) Copyright 2007, Grazvydas "notaz" Ignotas
 | |
| # All Rights Reserved
 | |
| 
 | |
| .set noreorder
 | |
| .set noat
 | |
| 
 | |
| .data
 | |
| .align 4
 | |
| 
 | |
| .byte  0,  1,  6, 11, 16, 21, 26, 31 # -4
 | |
| .byte  0,  2,  7, 12, 16, 21, 26, 31 # -3
 | |
| .byte  0,  3,  7, 12, 17, 22, 26, 31 # -2
 | |
| .byte  0,  4,  8, 13, 17, 22, 26, 31 # -1
 | |
| pal_gmtab:
 | |
| .byte  0,  5, 10, 15, 16, 21, 26, 31 #  0
 | |
| .byte  0,  6, 10, 15, 19, 23, 27, 31
 | |
| .byte  0,  7, 11, 15, 19, 23, 27, 31
 | |
| .byte  0,  8, 12, 16, 19, 23, 27, 31
 | |
| .byte  0,  9, 12, 16, 20, 24, 27, 31
 | |
| .byte  0, 10, 13, 17, 20, 24, 27, 31
 | |
| .byte  0, 10, 14, 17, 21, 24, 28, 31
 | |
| .byte  0, 11, 15, 18, 21, 24, 28, 31
 | |
| .byte  0, 12, 15, 18, 22, 25, 28, 31
 | |
| .byte  0, 13, 16, 19, 22, 25, 28, 31
 | |
| .byte  0, 14, 17, 20, 22, 25, 28, 31 # 10
 | |
| .byte  0, 15, 17, 20, 23, 26, 28, 31
 | |
| .byte  0, 16, 18, 21, 23, 26, 28, 31
 | |
| .byte  0, 16, 19, 21, 24, 26, 29, 31
 | |
| .byte  0, 17, 20, 22, 24, 26, 29, 31
 | |
| .byte  0, 18, 20, 22, 25, 27, 29, 31
 | |
| .byte  0, 19, 21, 23, 25, 27, 29, 31 # 16
 | |
| 
 | |
| .text
 | |
| .align 4
 | |
| 
 | |
| # bbbb bggg gggr rrrr
 | |
| 
 | |
| #.global pal_gmtab
 | |
| .global do_pal_convert # dest, src, gammaa_val, black_lvl
 | |
| 
 | |
| do_pal_convert:
 | |
|     bnez    $a2, dpc_gma
 | |
|     li      $t0, 64/2
 | |
|     bnez    $a3, dpc_gma
 | |
|     lui     $t2, 0x00e
 | |
|     ori     $t2, 0x00e
 | |
|     lui     $t3, 0x006
 | |
|     ori     $t3, 0x006
 | |
|     lui     $t4, 0x0e0
 | |
|     ori     $t4, 0x0e0
 | |
|     lui     $t6, 0xe00
 | |
|     ori     $t6, 0xe00
 | |
|     lui     $t7, 0x600
 | |
|     ori     $t7, 0x600
 | |
| 
 | |
| dpc_loop:
 | |
|     lw      $v0, 0($a1)
 | |
|     addiu   $a1, 4
 | |
|     and     $v1, $v0, $t2   # r
 | |
|     sll     $v1, 1
 | |
|     and     $t9, $v0, $t3
 | |
|     srl     $t9, 1
 | |
|     or      $v1, $t9        # r
 | |
|     and     $t9, $v0, $t4   # g
 | |
|     sll     $t8, $t9, 3
 | |
|     or      $v1, $t8
 | |
|     or      $v1, $t9        # g
 | |
|     and     $t9, $v0, $t6   # b
 | |
|     sll     $t9, 4
 | |
|     or      $v1, $t9
 | |
|     and     $t9, $v0, $t7
 | |
|     sll     $t9, 2
 | |
|     or      $v1, $t9        # b
 | |
|     sw      $v1, 0($a0)
 | |
|     addiu   $t0, -1
 | |
|     bnez    $t0, dpc_loop
 | |
|     addiu   $a0, 4
 | |
| 
 | |
|     jr      $ra
 | |
|     nop
 | |
| 
 | |
| # non-zero gamma
 | |
| dpc_gma:
 | |
|     slt     $t2, $a2, $0
 | |
|     sll     $a2, 3
 | |
|     lui     $t1, %hi(pal_gmtab)
 | |
|     addiu   $t1, %lo(pal_gmtab)
 | |
|     addu    $a2, $t1
 | |
|     beqz    $a3, dpc_gma_loop
 | |
|     sb      $0,  0($a2)        # black level 0
 | |
|     bnez    $t2, dpc_gma_loop  # gamma < 0, keep black at 0
 | |
|     addiu   $a3, -2
 | |
|     slt     $t2, $a3, $0       # t2 = a3_orig == 1 ? 1 : 0
 | |
|     lb      $t1, 1($a2)
 | |
|     addiu   $t1, -2
 | |
|     srlv    $t1, $t1, $t2
 | |
|     sb      $t1, 0($a2)
 | |
| 
 | |
| dpc_gma_loop:
 | |
|     lw      $v0, 0($a1)
 | |
|     addiu   $a1, 4
 | |
|     ext     $v1, $v0, 1, 3
 | |
|     addu    $v1, $a2
 | |
|     lb      $v1, 0($v1)
 | |
|     ext     $t1, $v0, 5, 3
 | |
|     addu    $t1, $a2
 | |
|     lb      $t1, 0($t1)
 | |
|     ext     $t2, $v0, 9, 3
 | |
|     addu    $t2, $a2
 | |
|     lb      $t2, 0($t2)
 | |
|     ext     $t3, $v0, 17, 3
 | |
|     addu    $t3, $a2
 | |
|     lb      $t3, 0($t3)
 | |
|     ext     $t4, $v0, 21, 3
 | |
|     addu    $t4, $a2
 | |
|     lb      $t4, 0($t4)
 | |
|     ext     $t5, $v0, 25, 3
 | |
|     addu    $t5, $a2
 | |
|     lb      $t5, 0($t5)
 | |
|     ins     $v1, $t1,  6, 5
 | |
|     ins     $v1, $t2, 11, 5
 | |
|     ins     $v1, $t3, 16, 5
 | |
|     ins     $v1, $t4, 22, 5
 | |
|     ins     $v1, $t5, 27, 5
 | |
|     sw      $v1, 0($a0)
 | |
|     addiu   $t0, -1
 | |
|     bnez    $t0, dpc_gma_loop
 | |
|     addiu   $a0, 4
 | |
| 
 | |
|     jr      $ra
 | |
|     nop
 | |
| 
 |