?? asmlib.s
字號:
//ld r0, #0x22 // xy cache on
.if(0) // changed by hspark 041221 for enable X,Y,S0,S1
ld r0, #0x222 // i,X,Y cache on
.else
ld r0, #0x200 // i cache on
.endif
ldw @[a8+cachecon], r0 // 0x48
SETSR FE
RET
_Set_Region9::
push a8
ld a8, #adm_base
ldw @[a8+r9cfg], r2
ldw @[a8+r9cfg+2], r3
pop a8
ret
_Set_Region10::
push a8
ld a8, #adm_base
ldw @[a8+r10cfg], r2
ldw @[a8+r10cfg+2], r3
pop a8
ret
_Set_Region11::
push a8
ld a8, #adm_base
ldw @[a8+r11cfg], r2
ldw @[a8+r11cfg+2], r3
pop a8
ret
_Cache_enable::
ld r0, #0x111 // Invalidation for i/x/y-Cache
ldw @[a8+cachecon], r0 //0x48
/* //
%02 ldw r0, @[a8+cachestat] // 0x4c
and r0, #0x070
cmp eq,r0,#0x010
brt %b02
//
%03 ldw r0, @[a8+cachestat] // 0x4c
and r0, #0x007
cmp eq,r0,#0x001
brt %b03
*/ //
%01 ldw r0, @[a8+cachestat] // 0x4c
and r0, #0x300
cmp eq,r0,#0x100
brt %b01
// Enable Cache i/x/y-mem
ld r0, #0x222 // Enable i/x/y-Cache
ldw @[a8+cachecon], r0 // 0x48
RET
_Cache_disable::
// disable Cache i/x/y-mem
ld r0, #0x333 // Enable i/x/y-Cache
ldw @[a8+cachecon], r0 // 0x48
// Invalidate Cache memory
ld r0, #0x044 // Invalidation for i/x/y-Cache
ldw @[a8+cachecon], r0 //0x48
//
%01 ldw r0, @[a8+cachestat] // x
and r0, #0x040
cmp eq,r0,#0x040
brt %b01
%02 ldw r0, @[a8+cachestat] // y
and r0, #0x004
cmp eq,r0,#0x004
brt %b02
RET
_DCache_enable::
ld r0, #0x011 // Invalidation for i/x/y-Cache
ldw @[a8+cachecon], r0 //0x48
// Enable Cache i/x/y-mem
ld r0, #0x022 // Enable i/x/y-Cache
ldw @[a8+cachecon], r0 // 0x48
RET
_DCache_disable::
// disable Cache i/x/y-mem
ld r0, #0x033 // Enable i/x/y-Cache
ldw @[a8+cachecon], r0 // 0x48
// Invalidate Cache memory
ld r0, #0x044 // Invalidation for i/x/y-Cache
ldw @[a8+cachecon], r0 //0x48
//
%01 ldw r0, @[a8+cachestat] // x
and r0, #0x040
cmp eq,r0,#0x040
brt %b01
%02 ldw r0, @[a8+cachestat] // y
and r0, #0x004
cmp eq,r0,#0x004
brt %b02
RET
//void Set_IOBank(unsigned char *addr)
_Set_IOBank::
ld a8, a10
ret
//void IO_WData32Offset(unsigned char *addr,unsigned int high,unsigned int low)
_IO_WData32Offset::
ldw @[a8+r10], r2
add r10,#2
ldw @[a8+r10], r3
ret
//void IO_WData32(unsigned char *addr,unsigned int high,unsigned int low)
_IO_WData32::
ldw @[a10+0], r2
ldw @[a10+2], r3
ret
//void IO_WData32_FE(unsigned char *addr,unsigned int high,unsigned int low)
_IO_WData32_FE::
// CLRSR IE // di
ldw @[a10+0], r2
ldw @[a10+2], r3
// SETSR IE // ei
ret
/*
//unsigned int IO_RLowData16Offset(unsigned char *addr)
_IO_RLowData16Offset::
ldw r2, @[a8+r10]
add r10,#2
ldw r2, @[a8+r10]
ret
*/
//unsigned int IO_RLowData16(unsigned char *addr)
_IO_RLowData16::
ldw r2,@[a10+0]
ldw r2,@[a10+2]
ret
_IO_RData16::
ldw r2,@[a10+0]
ret
//unsigned long IO_RData32(unsigned char *addr)
_IO_RData32::
// ldw r2,@[a10+0]
// ldw r3,@[a10+2]
ldw r3,@[a10+0]
ldw r2,@[a10+2]
ret
//void IO_SP_WData32(unsigned char *addr,unsigned int high,unsigned int low1,unsigned int low2)
_IO_SP_WData32::
ldw @[a10+0], r2
ldw @[a10+2], r3
nop
nop
nop
nop
ldw @[a10+0], r2
ldw @[a10+2], r4
ret
//void IO_WData32_EX(unsigned char *addr,unsigned int high,unsigned int low)
_IO_WData32_EX::
TSTSR IE
BRT If_IntDisable_WD
CLRSR IE
ldw @[a10+0], r2
ldw @[a10+2], r3
SETSR IE
ret
If_IntDisable_WD:
ldw @[a10+0], r2
ldw @[a10+2], r3
ret
/*
ldw @[a10+0], r2
ldw @[a10+2], r3
ret
*/
//unsigned long IO_RData32_EX(unsigned char *addr)
_IO_RData32_EX::
TSTSR IE
BRT If_IntDisable_RD
CLRSR IE
ldw r3,@[a10+0]
ldw r2,@[a10+2]
SETSR IE
ret
If_IntDisable_RD:
//ldw r2,@[a10+0]
//ldw r3,@[a10+2]
ldw r3,@[a10+0]
ldw r2,@[a10+2]
ret
_Enable_DCache::
push r0
push a8
ld a8, #adm_base //0x2c0000
ld r0, #0x111 // Invalidation for i/x/y-Cache
TSTSR IE
BRT If_IntDisable_EC
CLRSR IE
ldw @[a8+cachecon], r0 //0x48
%07 ldw r0, @[a8+cachestat] // 0x4c
and r0, #0x300
cmp eq,r0,#0x100
brt %b07
ld r0, #0x222 // i,X,Y cache on
ldw @[a8+cachecon], r0 // 0x48
SETSR IE
pop a8
pop r0
ret
If_IntDisable_EC:
ldw @[a8+cachecon], r0 //0x48
%08 ldw r0, @[a8+cachestat] // 0x4c
and r0, #0x300
cmp eq,r0,#0x100
brt %b08
ld r0, #0x222 // i,X,Y cache on
ldw @[a8+cachecon], r0 // 0x48
pop a8
pop r0
ret
//////////////////////////////////////////////////////////////////
// _Div_dw_w(ulong* in0, uword in1, uword* out); //
//////////////////////////////////////////////////////////////////
PUBLIC _Div_dw_w
_Div_dw_w::
ecld a, r2 ; 2nd parameter
efz8 a
ELD P,A
///
ldw r2, @[a10+0] ; 1st Argument
ldw r3, @[a10+2]
ECR MA0 ; Clear MA
srb r2
ecld a, r2
efz16 a
ELD MA0,A
ldw r2, @[a10+0]
ecld b, r2
eld sa, #16
esft b, sa
ecld a, r3
efz8 a
eadd a, sr
ELD MA0L,A
///
ER NQ
ESLA MA0
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
EDIVQ MA0,P
ELD A,MA0L
ld r2, #0xffff
ecld b, r2
efz8 b
ecp a, b
etst nc, ec3
bra ec3,%f1
eld a, b
%1 ECLD r2,a
////////////////////////////////////////////
ldw @[a11+0], r2
ret
.if LoadCodecPGM
//////////////////////////////////////////////////////////////
// extern void LoadAudioDecoderToIPMG(int);
//////////////////////////////////////////////////////////////
_LoadAudioDecoderToIPMG::
// push a11
// pop a11
.endif
ret
//////////////////////////////////////////////////////////////
EXTERN _MK_ServiceIRQ
_IRQ_handler::
push A14
push R0,R1
push R2,R3
push R4,R5
push R6,R7
push A8,A9
push A10,A11
push A12,A13
jsr _MK_ServiceIRQ
POP A13,A12
POP A11,A10
POP A9,A8
POP R7,R6
POP R5,R4
POP R3,R2
POP R1,R0
POP A14
SYS #0x18
RET_IRQ
;****************************************************************************
; Function: MK_IRQHandler()
;
;****************************************************************************
EXTERN _MK_IntEnter
EXTERN _MK_ServiceIRQ
EXTERN _MK_IntExit
ALIGN
;_MK_IRQHandler::
_9908_IRQHandler::
;CLRSR FE ;FRQ disalble
;CLRSR IE ;IRQ disalble
;CLRSR TE ;TRQ disalble
;PUSH A14
;PUSH A13
;PUSH A12
;PUSH A11
;PUSH A10
;PUSH A9
;PUSH A8
;PUSH R7
;PUSH R6
;PUSH R5
;PUSH R4
;PUSH R3
;PUSH R2
;PUSH R1
;PUSH R0
push A14
push R0,R1
push R2,R3
push R4,R5
push R6,R7
push A8,A9
push A10,A11
push A12,A13
LD R0,SPCH_IRQ
PUSH R0
LD R0,SPCL_IRQ
PUSH R0
LD R0,SSR_IRQ
PUSH R0
JSR _MK_IntEnter
JSR _MK_ServiceIRQ
JSR _MK_IntExit
POP R0
LD SSR_IRQ,R0
POP R0
LD SPCL_IRQ,R0
POP R0
LD SPCH_IRQ,R0
POP A13,A12
POP A11,A10
POP A9,A8
POP R7,R6
POP R5,R4
POP R3,R2
POP R1,R0
POP A14
;POP R0
;POP R1
;POP R2
;POP R3
;POP R4
;POP R5
;POP R6
;POP R7
;POP A8
;POP A9
;POP A10
;POP A11
;POP A12
;POP A13
;POP A14 ;LR
RET_IRQ
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -