mirror of
				https://github.com/RaySollium99/picodrive.git
				synced 2025-10-27 00:29:39 -04:00 
			
		
		
		
	 1cfc5cc4ce
			
		
	
	
		1cfc5cc4ce
		
	
	
	
	
		
			
			git-svn-id: file:///home/notaz/opt/svn/PicoDrive@576 be3aeb3a-fb24-0410-a615-afba39da0efa
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| @ vim:filetype=armasm
 | |
| 
 | |
| @ Memory converters for different modes
 | |
| @ (c) Copyright 2007, Grazvydas "notaz" Ignotas
 | |
| 
 | |
| 
 | |
| @ r10 is tmp, io1 is lsb halfword, io2 is msb
 | |
| @ | 0 1 | 2 3 |  ->  | 0 2 | 1 3 |  (little endian)
 | |
| .macro _conv_reg io1 io2
 | |
|     mov     r10,  \io2, lsl #16
 | |
|     and     \io2, \io2, r11,  lsl #16
 | |
|     orr     \io2, \io2, \io1, lsr #16
 | |
|     and     \io1, \io1, r11
 | |
|     orr     \io1, \io1, r10
 | |
| /*
 | |
|     mov     \io2, \io2, ror #16
 | |
|     mov     r10,  \io1, lsl #16
 | |
|     orr     r10,  r10,  \io2, lsr #16
 | |
|     mov     \io1, \io1, lsr #16
 | |
|     orr     \io1, \io1, \io2, lsl #16
 | |
|     mov     \io2, r10,  ror #16
 | |
| */
 | |
| .endm
 | |
| 
 | |
| 
 | |
| .global wram_2M_to_1M
 | |
| wram_2M_to_1M:
 | |
|     stmfd   sp!,{r4-r11,lr}
 | |
|     add     r1, r0, #0x60000    @ m1M_b1
 | |
|     add     r0, r0, #0x40000    @ m1M_b0
 | |
|     mov     r2, r0              @ m2M
 | |
| 
 | |
|     mov     r11, #0xff
 | |
|     orr     r11, r11, r11, lsl #8
 | |
|     mov     r12, #(0x40000/8/4)
 | |
| 
 | |
| _2Mto1M_loop:
 | |
|     ldmdb   r2!,{r3-r9,lr}
 | |
|     _conv_reg r3,r4
 | |
|     _conv_reg r5,r6
 | |
|     _conv_reg r7,r8
 | |
|     _conv_reg r9,lr
 | |
|     subs    r12, r12, #1
 | |
|     stmdb   r0!,{r3,r5,r7,r9}
 | |
|     stmdb   r1!,{r4,r6,r8,lr}
 | |
|     bne     _2Mto1M_loop
 | |
| 
 | |
|     ldmfd   sp!,{r4-r11,pc}
 | |
| 
 | |
| 
 | |
| 
 | |
| .global wram_1M_to_2M
 | |
| wram_1M_to_2M:
 | |
|     stmfd   sp!,{r4-r11,lr}
 | |
|     mov     r2, r0              @ m2M
 | |
|     add     r1, r0, #0x40000    @ m1M_b1
 | |
|     add     r0, r0, #0x20000    @ m1M_b0
 | |
| 
 | |
|     mov     r11, #0xff
 | |
|     orr     r11, r11, r11, lsl #8
 | |
|     mov     r12, #(0x40000/8/4)
 | |
| 
 | |
| _1Mto2M_loop:
 | |
|     ldmia   r0!,{r3,r5,r7,r9}
 | |
|     ldmia   r1!,{r4,r6,r8,lr}
 | |
|     _conv_reg r3,r4
 | |
|     _conv_reg r5,r6
 | |
|     _conv_reg r7,r8
 | |
|     _conv_reg r9,lr
 | |
|     subs    r12, r12, #1
 | |
|     stmia   r2!,{r3-r9,lr}
 | |
|     bne     _1Mto2M_loop
 | |
| 
 | |
|     ldmfd   sp!,{r4-r11,pc}
 | |
| 
 | |
| 
 |