diff options
author | PCSX* teams | 2010-11-16 14:15:22 +0200 |
---|---|---|
committer | Grazvydas Ignotas | 2010-11-16 14:15:22 +0200 |
commit | ef79bbde537d6b9c745a7d86cb9df1d04c35590d (patch) | |
tree | ef8d2520dbb9e1e345b41b12c9959f300ca8fd10 /libpcsxcore/ppc/pasm.s | |
download | pcsx_rearmed-ef79bbde537d6b9c745a7d86cb9df1d04c35590d.tar.gz pcsx_rearmed-ef79bbde537d6b9c745a7d86cb9df1d04c35590d.tar.bz2 pcsx_rearmed-ef79bbde537d6b9c745a7d86cb9df1d04c35590d.zip |
pcsxr-1.9.92
Diffstat (limited to 'libpcsxcore/ppc/pasm.s')
-rw-r--r-- | libpcsxcore/ppc/pasm.s | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/libpcsxcore/ppc/pasm.s b/libpcsxcore/ppc/pasm.s new file mode 100644 index 0000000..96891b4 --- /dev/null +++ b/libpcsxcore/ppc/pasm.s @@ -0,0 +1,124 @@ + + +#define OLD_REGISTER_OFFSET (19*4) +#define SP_SIZE (OLD_REGISTER_OFFSET+4+8) + +/*asm void recRun(register void (*func)(), register u32 hw1, register u32 hw2)*/ + .text + .align 4 + .globl recRun +recRun: + /* prologue code */ + mflr r0 + stmw r13, -(32-13)*4(r1) + stw r0, 4(r1) + stwu r1, -((32-13)*4+8)(r1) + + /* execute code */ + mtctr r3 + mr r31, r4 + mr r30, r5 + bctrl +/* +} +asm void returnPC() +{*/ + .text + .align 4 + .globl returnPC +returnPC: + // end code + lwz r0, (32-13)*4+8+4(r1) + addi r1, r1, (32-13)*4+8 + mtlr r0 + lmw r13, -(32-13)*4(r1) + blr +//}*/ + +// Memory functions that only works with a linear memory + + .text + .align 4 + .globl dynMemRead8 +dynMemRead8: +// assumes that memory pointer is in r30 + addis r2,r3,-0x1f80 + srwi. r4,r2,16 + bne+ .norm8 + cmplwi r2,0x1000 + blt- .norm8 + b psxHwRead8 +.norm8: + clrlwi r5,r3,3 + lbzx r3,r5,r30 + blr + + .text + .align 4 + .globl dynMemRead16 +dynMemRead16: +// assumes that memory pointer is in r30 + addis r2,r3,-0x1f80 + srwi. r4,r2,16 + bne+ .norm16 + cmplwi r2,0x1000 + blt- .norm16 + b psxHwRead16 +.norm16: + clrlwi r5,r3,3 + lhbrx r3,r5,r30 + blr + + .text + .align 4 + .globl dynMemRead32 +dynMemRead32: +// assumes that memory pointer is in r30 + addis r2,r3,-0x1f80 + srwi. r4,r2,16 + bne+ .norm32 + cmplwi r2,0x1000 + blt- .norm32 + b psxHwRead32 +.norm32: + clrlwi r5,r3,3 + lwbrx r3,r5,r30 + blr + +/* + N P Z + 0 0 0 X +- 0 0 1 X + 1 0 0 X + 1 0 1 X + +P | (!N & Z) +P | !(N | !Z) +*/ + + .text + .align 4 + .globl dynMemWrite32 +dynMemWrite32: +// assumes that memory pointer is in r30 + addis r2,r3,-0x1f80 + srwi. r5,r2,16 + bne+ .normw32 + cmplwi r2,0x1000 + blt .normw32 + b psxHwWrite32 +.normw32: + mtcrf 0xFF, r3 + clrlwi r5,r3,3 + crandc 0, 2, 0 + cror 2, 1, 0 + bne+ .okw32 + // write test + li r2,0x0130 + addis r2,r2,0xfffe + cmplw r3,r2 + bnelr +.okw32: + stwbrx r4,r5,r30 + blr + |