⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asmlib.s

📁 samsung 9908DVD源代码,
💻 S
📖 第 1 页 / 共 2 页
字号:

	//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 + -