X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fcarthw%2Fsvp%2Fstub_arm.S;h=9d5c5fa1a9cb535955e37942b2909bc58ee678b7;hb=a39743e3153322ec0e18bb0d05cd16af1d9a6d79;hp=c65a2357de29271e99ab3413f8d84ffc1db82d83;hpb=cff531af94bd9c9c89ae162e80f48ddc26a4e504;p=picodrive.git diff --git a/pico/carthw/svp/stub_arm.S b/pico/carthw/svp/stub_arm.S index c65a235..9d5c5fa 100644 --- a/pico/carthw/svp/stub_arm.S +++ b/pico/carthw/svp/stub_arm.S @@ -6,19 +6,9 @@ @* See COPYING file in the top-level directory. @* -.global ssp_drc_entry -.global ssp_drc_next -.global ssp_drc_next_patch -.global ssp_drc_end -.global ssp_hle_800 -.global ssp_hle_902 -.global ssp_hle_07_030 -.global ssp_hle_07_036 -.global ssp_hle_07_6d6 -.global ssp_hle_11_12c -.global ssp_hle_11_384 -.global ssp_hle_11_38a +#include "../../arm_features.h" +.syntax unified .text .align 2 @@ -125,12 +115,11 @@ .endm @ ssp_drc_do_next -ssp_drc_entry: +FUNCTION(ssp_drc_entry): stmfd sp!, {r4-r11, lr} - mov r11, r0 + mov r7, r0 @ ssp + mov r11, r1 ssp_regfile_load: - ldr r7, =ssp - ldr r7, [r7] add r2, r7, #0x400 add r2, r2, #4 ldmia r2, {r3,r4,r5,r6,r8} @@ -155,11 +144,11 @@ ssp_regfile_load: mov r0, r0, lsr #16 -ssp_drc_next: +FUNCTION(ssp_drc_next): ssp_drc_do_next 0 -ssp_drc_next_patch: +FUNCTION(ssp_drc_next_patch): ssp_drc_do_next 1 ssp_drc_do_patch: @@ -197,7 +186,7 @@ ssp_drc_dp_end: bx r2 -ssp_drc_end: +FUNCTION(ssp_drc_end): mov r0, r0, lsl #16 str r0, [r7, #(SSP_OFFS_GR+SSP_PC*4)] @@ -209,7 +198,7 @@ ssp_regfile_store: mov r9, r6, lsr #13 and r9, r9, #(7<<16) @ STACK mov r3, r6, lsl #28 - msr cpsr_flg, r3 @ to to ARM PSR + msr cpsr_f, r3 @ to to ARM PSR and r6, r6, #0x670 mov r6, r6, lsl #12 orrmi r6, r6, #0x80000000 @ N @@ -231,7 +220,7 @@ ssp_regfile_store: @ ld A, PM0 @ andi 2 @ bra z=1, gloc_0800 -ssp_hle_800: +FUNCTION(ssp_hle_800): ldr r0, [r7, #(SSP_OFFS_GR+SSP_PM0*4)] ldr r1, [r7, #SSP_OFFS_EMUSTAT] tst r0, #0x20000 @@ -258,7 +247,7 @@ ssp_hle_800: ldrh r0, [r1] .endm -ssp_hle_902: +FUNCTION(ssp_hle_902): cmp r11, #0 ble ssp_drc_end @@ -292,8 +281,8 @@ ssp_hle_902_loop: bgt ssp_hle_902_loop tst r12, #1 - ldrneh r0, [r2], #2 - strneh r0, [r3], #2 + ldrhne r0, [r2], #2 + strhne r0, [r3], #2 ldr r0, [r7, #SSP_OFFS_IRAM_ROM] add r1, r7, #0x200 @@ -331,7 +320,7 @@ ssp_hle_902_loop: add r8, r8, #(1<<24) .endm -ssp_hle_11_12c: +FUNCTION(ssp_hle_11_12c): cmp r11, #0 ble ssp_drc_end @@ -368,11 +357,11 @@ ssp_hle_11_12c: b ssp_drc_next -ssp_hle_11_384: +FUNCTION(ssp_hle_11_384): mov r3, #2 b ssp_hle_11_38x -ssp_hle_11_38a: +FUNCTION(ssp_hle_11_38a): mov r3, #3 @ r5 ssp_hle_11_38x: @@ -420,7 +409,7 @@ ssp_hle_11_38x_loop: b ssp_drc_next -ssp_hle_07_6d6: +FUNCTION(ssp_hle_07_6d6): cmp r11, #0 ble ssp_drc_end @@ -456,14 +445,14 @@ ssp_hle_07_6d6_end: b ssp_drc_next -ssp_hle_07_030: +FUNCTION(ssp_hle_07_030): ldrh r0, [r7] mov r0, r0, lsl #4 orr r0, r0, r0, lsr #16 strh r0, [r7] sub r11,r11,#3 -ssp_hle_07_036: +FUNCTION(ssp_hle_07_036): ldr r1, [r7, #0x1e0] @ F1h F0h rsb r5, r1, r1, lsr #16 mov r5, r5, lsl #16 @ AL not needed @@ -512,7 +501,7 @@ ssp_hle_07_036: mov r12, #0x4000 orr r12,r12,#0x0018 subs r12,r3, r12 - subnes r12,r12,#0x0400 + subsne r12,r12,#0x0400 blne tr_unhandled orr r2, r2, r2, lsl #16 @@ -521,7 +510,7 @@ ssp_hle_07_036: hle_07_036_no_ovrwr: tst r1, #2 - strneh r2, [r1], #0x3e @ align + strhne r2, [r1], #0x3e @ align subne r0, r0, #1 subs r0, r0, #4 blt hle_07_036_l2 @@ -536,7 +525,7 @@ hle_07_036_l2: tst r0, #2 strne r2, [r1], #0x40 tst r0, #1 - strneh r2, [r1], #2 + strhne r2, [r1], #2 b hle_07_036_end_copy hle_07_036_ovrwr: @@ -573,10 +562,10 @@ hle_07_036_ol1: hle_07_036_ol2: tst r0, #1 - ldrneh r3, [r1] + ldrhne r3, [r1] andne r3, r3, r12 orrne r3, r3, r2 - strneh r3, [r1], #2 + strhne r3, [r1], #2 hle_07_036_end_copy: ldr r2, [r7, #SSP_OFFS_DRAM] @@ -616,4 +605,23 @@ hle_07_036_ending2: mov r0, #0x87 b ssp_drc_next @ let the dispatcher finish this + +@ ios stuff - preserving r9 on external calls +#ifdef __MACH__ + +#define APPLE_WRAP(f) \ + f:; \ + push {r9,lr}; \ + bl _##f; \ + pop {r9,pc} + +APPLE_WRAP(cache_flush_d_inval_i) +APPLE_WRAP(ssp_get_iram_context) +APPLE_WRAP(ssp_pm_read) +APPLE_WRAP(ssp_pm_write) +APPLE_WRAP(ssp_translate_block) +APPLE_WRAP(tr_unhandled) + +#endif + @ vim:filetype=armasm