12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- @*
- @* Memory converters for different modes
- @* (C) notaz, 2007-2008
- @*
- @* This work is licensed under the terms of MAME license.
- @* See COPYING file in the top-level directory.
- @*
- @ 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}
- @ vim:filetype=armasm
|