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

📄 debug-macros.h.s

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 S
📖 第 1 页 / 共 5 页
字号:

	MEND

	; -----------------------------
	; Testing ^ addressing
	; Four registers ONLY
	; ASSUMES r1 - r4 differ from r11-r14
	; -----------------------------
	; 08/07/97 P Pearse - Added
	; 13/07/97 J Rijk   - Storage space corrected
	; 03/10/97 J Rijk   - Remove UNPREDICTABLE writeback	
	; -----------------------------	
	MACRO
	Corrupt_User_Regs

	LOCAL
	B 	start$l
tmpr0$l		DCD	0
tmpregs$l 	%	4*4
start$l
	STR	r0 , tmpr0$l
	ADRL	r0 , tmpregs$l
	STMIA	r0, {r1 -r4 }  ; Store values to:
	LDMIA	r0, {r11-r14}^ ; - corrupt user regs
	LDR	r0 , tmpr0$l  
	LOCAL_END
	MEND

	; -----------------------------
	; Testing ^ addressing
	; Four registers ONLY
	; ASSUMES r0 correct on entry
	; r0 NOT changed on exit
	; -----------------------------
	; 08/07/97 P Pearse - Added
	; 03/10/97 J Rijk   - Remove UNPREDICTABLE writeback	
	; -----------------------------
	MACRO
	Transfer_Regs_User_To_Current_Mode
	STMIA	r0, {r11-r14}^	
	Load_Cleared_Current_Regs
	MEND

	; -----------------------------
	; Testing ^ addressing
	; Four registers ONLY
	; ASSUMES r0 correct on entry
	; Decrements r0 by 4 words
	; -----------------------------
	; 08/07/97 P Pearse - Added
	; 03/10/97 J Rijk   - Remove UNPREDICTABLE writeback		
	; -----------------------------
	MACRO
	Load_Cleared_Current_Regs
	MOV	r11,#0			
	MOV	r12,#0		
	MOV	r13,#0		 
	MOV	r14,#0		 		
	LDMIA	r0,{r11-r14}			; - move them to current registers
	MEND

	; -----------------------------
	; Start of tests
	; - ASSUMED entered in mode other than USER mode
	;   - can NOT change mode in USER mode
	;   - Thus lists must have   USER mode last
	; - Modes NOT recorded or output
	;   ASSUMED MODE CHANGE indication in vsim log is sufficient
	; -----------------------------

		MACRO
$label		Mode_Loop $LoopedCode, $ModeList	; Loop testing in ALL modes
		LCLS	ModeName
		LCLS	List
		LCLS	char
ModeName	SETS	"" 
List		SETS	"$ModeList"

$label		
		WHILE	List /= ""						
char		SETS	List:LEFT:1				
		[	(char = ",") :LOR: (:LEN:List=1)
		[	:LEN:List=1
ModeName	SETS	ModeName:CC:char
		]

		MSR_M	CPSR, $ModeName, r0	; Change to next mode	
		BL	$LoopedCode		; Call looped code
ModeName	SETS	""
		|
ModeName	SETS	ModeName:CC:char
		]
List		SETS	List:RIGHT:(:LEN:List-1)
		WEND
		MEND

	; -----------------------------
	; Start of tests
	; SHOULD REPLACE Mode_Loop above eventually
	; Initially produced for multiple test3
	; to overcome fact that we end in USR mode and can't
	; switch out for next test
	; Must be used with Add_Mode_Switching_Instructions
	;
	; - Modes NOT recorded or output
	;   ASSUMED MODE CHANGE indication in vsim log is sufficient
	;
	; 32 bit ONLY
	;
	MACRO
$label	Mode_Loop_2	$LoopedCode, $ModeList	; Loop testing in ALL modes
	; -----------------------------
		LCLS ModeName
		LCLS Suffix
		LCLS ModeTLA
		LCLS List
		LCLS char
		LCLA ctr
ModeName	SETS "" 
List	SETS "$ModeList"

$label
	WHILE List /= ""						
char	     SETS List:LEFT:1				
	     [ (char = ",") :LOR: (:LEN:List=1)
		[ :LEN:List=1
ModeName	   SETS ModeName:CC:char
		]
Suffix	SETS	ModeName:RIGHT:6
ModeTLA SETS	Suffix:LEFT:3
	; -----------------------------------------
	; The 'mode switch' instruction
	; - causes an Undefined exception
	; - i.e. will switch to UNDEF mode
	; - the handler can then switch to the requested mode and return
	; - see M_SWITCH_TO_<> below
	;   && Add_Mode_Switching_Instructions
	; -----------------------------------------
		M_SWITCH_TO_$ModeTLA._32
		BL	$LoopedCode		; Call looped code
ModeName	SETS ""
	     |
ModeName	 SETS ModeName:CC:char
	     ]
List	  SETS List:RIGHT:(:LEN:List-1)
	WEND

	MEND

	;-----------------------
	MACRO
$L	SaveReturnAddress $location
	; 13/05/97 P Pearse - Use ADRL, NOT =$location
	; 07/07/97 P Pearse - Use LOCAL
	;-----------------------
	LOCAL
	B %F1

tmp$l	DCD 0

1
	STR	r0, tmp$l

	ADRL	r0 , $location
	STR	r14, [r0]

	LDR	r0, tmp$l
	LOCAL_END
	MEND

	;-----------------------
	MACRO
	UseReturnAddress $location
	; 13/05/97 P Pearse - Use ADRL, NOT =$location
	;	   J Rijk   - Blip message
	; 24/08/97 P Pearse - Back to LDR
	;-----------------------
	LOCAL
	PRINTF "Blip\n"	; Message to show something is happening
	LDR	r14, =$location
	LDR	r14, [r14]
	MOV	pc, r14
	; ==============================>>>
	LTORG		
	LOCAL_END
	MEND

	;-----------------------
	; Provide variable for BST access
	; - check variable within 0xFFF of the AREA base
	;-----------------------
	
		MACRO
$label		Set_BST_Access
		LOCAL
		GBLA	offset_$label
here$l
offset_$label	Get_Address here$l
offset_$label	SETA	offset_$label - Start_of_Code
;offset_$label	SETA	{PC} - Start_of_Code

		[	offset_$label > 0xFFF
		!	1, "\n\t$label un-addressable by BST"
		MEXIT
		]

$label		DCD	0
		LOCAL_END
		MEND

	;-----------------------
	; Display addressing type (26/32 bit)
	; - error if CONFIG undefined
	;-----------------------
	MACRO
	Msg_Re_Addressing
	;-----------------------
	; 17/06/97 P Pearse Add INIT_DEVICE
	; 24/11/97 P Pearse Remove INIT_DEVICE - use configuration files
	;-----------------------		
	; highly dodgy place for macro but will do for now (jrijk)
		INIT_ICEBREAKER


		
		[	$VERBOSE > $VERBOSE_DEFAULT
		[	{CONFIG} = 32
		MESSAGE "32 bit addressing"
		|
		[	{CONFIG} = 26
		MESSAGE "26 bit addressing"
		| 
		!	0, "Debug-Macros: Msg_Re_Addressing"
		!	0, "CONFIG should be 26 OR 32"
		]
		]
		]
		MEND

	; --------------------------	
	MACRO
	Enable_FIQ
	; --------------------------
	; 13/05/97 P Pearse - Added
	; --------------------------
	MRS	r0, CPSR
	BIC	r0, r0, #DISABLE_FIQ 
	MSR	CPSR_cf, r0
	
	MEND

	; --------------------------	
	MACRO
	Disable_FIQ
	; --------------------------
	; 13/05/97 P Pearse - Added
	; --------------------------
	MRS	r0, CPSR
	ORR	r0, r0, #DISABLE_FIQ 
	MSR	CPSR_cf, r0
	
	MEND

	; --------------------------	
	MACRO
	Enable_IRQ
	; --------------------------
	; 13/05/97 P Pearse - Added
	; --------------------------
	MRS	r0, CPSR
	BIC	r0, r0, #DISABLE_IRQ 
	MSR	CPSR_cf, r0
	
	MEND

	; --------------------------	
	MACRO
	Disable_IRQ
	; --------------------------
	; 13/05/97 P Pearse - Added
	; --------------------------
	MRS	r0, CPSR
	ORR	r0, r0, #DISABLE_IRQ 
	MSR	CPSR_cf, r0
	
	MEND 

	; --------------------------
	; $reg		Register to test		(decimal register tag: r0 - r15)
	; $address	Address which should be therein (label  string		       ) 
	; $error	Routine to call on error	(label  string		       )
	;
	MACRO
	RegAddressCheck $reg, $address, $error
	; --------------------------
	; 07/07/97 P Pearse - Added
	; 31/07/97 P Pearse - Correct storage/retrieval of registers
	; --------------------------
	LOCAL
	B	%F1
tmpr0$l		DCD 0
tmpr1$l 	DCD 0
tmpreg$l	DCD 0
1
	STR	$reg, tmpreg$l
	STR	r0, tmpr0$l
	STR	r1, tmpr1$l

	LDR	r0, =$address
	LDR	r1, tmpreg$l
	CMP	r0, r1
	BNE	$error

	LDR	r0  , tmpr0$l
	LDR	r1  , tmpr1$l
	LDR	$reg, tmpreg$l
	LOCAL_END
	MEND

	; ------------------------------------------------
	; Initialise listed registers in the currentprocessor mode
	MACRO
$L	RegisterInit $DIYRegList
	; ------------------------------------------------
	LCLS RegName
	LCLS List
	LCLS char
RegName SETS "" 
List	SETS "$DIYRegList"

$L
	WHILE List /= ""
char	     SETS List:LEFT:1
	     [ (char = ",") :LOR: (:LEN:List=1)
		[ :LEN:List=1
RegName		     SETS RegName:CC:char
		]
		MOV r$RegName,#VU$RegName
RegName		SETS ""
	     |
RegName		SETS RegName:CC:char
	     ]
List	     SETS List:RIGHT:(:LEN:List-1)
	WEND
	MEND

	; ------------------------------------------------
	; Clear the listed registers in the current processor mode
	MACRO
$L	RegisterClear $DIYRegList
	; ------------------------------------------------
	LCLS RegName
	LCLS List
	LCLS char
RegName SETS "" 
List	SETS "$DIYRegList"

$L
	WHILE List /= ""
char	     SETS List:LEFT:1
	     [ (char = ",") :LOR: (:LEN:List=1)
		[ :LEN:List=1
RegName		     SETS RegName:CC:char
		]
		MOV r$RegName,#0
RegName		SETS ""
	     |
RegName		SETS RegName:CC:char
	     ]
List	     SETS List:RIGHT:(:LEN:List-1)
	WEND
	MEND

	; ------------------------------------------------
	; Check register contents as set in RegisterInit above
	; (in current processor mode)
	; Supports 26-bit
        ; 19/22/97: P Pearse: Add display of registers which fail
	MACRO
$L	RegisterCheck $FailedTarget,$DIYRegList
	; ------------------------------------------------
        LOCAL
	LCLS RegName
	LCLS List
	LCLS char
RegName SETS "" 
List	SETS "$DIYRegList"

$L      B $l.past
       
$l.past
	WHILE List /= ""
char	     SETS List:LEFT:1
	     [ (char = ",") :LOR: (:LEN:List=1)
		[ :LEN:List=1
RegName		     SETS RegName:CC:char
		]
		CMP	r$RegName,#VU$RegName
                BEQ     $l.$RegName.OK
		MOV	r2,r$RegName
		MOV	r0,#$RegName
		MOV	r1,#VU$RegName
		BL	fail_regs_corrupt
		B	$FailedTarget

$l.$RegName.OK
RegName		SETS ""
	     |
RegName		SETS RegName:CC:char
	     ]
List	     SETS List:RIGHT:(:LEN:List-1)
	WEND
        LOCAL_END
	MEND

	; ------------------------------------------------
	; Check register 14 if NOT overwritten by handler call:
	; - set r14_ModeA to VU14
	; - exception occurs which switches to ModeA
	; - r14_ModeA overwritten with return address
	;
	; ModeTab is mode of exception which is known to be called	
	; UND, SVC, ABT, IRQ, FIQ
	;
	; - checks 26/32
	;
	MACRO
$L	Register14Check	$Error, $ModeTab
	; ------------------------------------------------
	; 07/07/97 P Pearse - Use LOCAL
	;-----------------------
	CheckMode	$ModeTab
	LOCAL
	B %F1

tmpr0$l	DCD 0

1
	STR	r0, tmpr0$l

	MRS	r0, CPSR

	IF	{CONFIG} = 32

		AND	r0, r0, #Mode_$ModeTab._32
		CMP	r0, #Mode_$ModeTab._32
	
	ELSE

		IF $ModeTab = "IRQ" :LOR: $ModeTab = "FIQ"

			AND	r0, r0, #Mode_$ModeTab._26
			CMP	r0, #Mode_$ModeTab._26

		ELSE

			AND	r0, r0, #Mode_SVC_26
			CMP	r0, #Mode_SVC_26

		ENDIF
	
	ENDIF

	BEQ	NO_r14_test		

	CMP	r14, #VU14
	BEQ	$l.END

	LDR	r0,=VU14
	Report_Regs     "r14 incorrect - expected:__", r0, "__actual:__", r14
	B	$Error

NO_r14_test
;~~~~~~~~~~
$l.END
	LDR	r0, tmpr0$l

	LOCAL_END
	MEND

	; ------------------------------------------------
	; Check register 14 if NOT overwritten by handler call:
	; - set r14_ModeA to VU14
	; - exception occurs which switches to ModeA
	; - r14_ModeA overwritten with return address
	;
	; ModeTab is list of exception modes which are known to be called	
	; in the form "UND,SVC,ABT,IRQ,FIQ" - comma seperated, NO spaces
	;
	; - checks 26/32
	;
	MACRO
$L	Register14CheckList	$Error, $ModeList
	; ------------------------------------------------
	; 13/05/97 P Pearse - Added
	; 07/07/97 P Pearse - Use LOCAL
	; ------------------------------------------------

	LCLS ModeTag
	LCLS List
	LCLS char
ModeTag SETS ""

	LOCAL
	B %F1

tmpr0$l	DCD 0

1
	STR	r0, tmpr0$l
	
List	SETS "$ModeList"

	WHILE List /= ""
	    ; -----------------------------
	    ; Get next tag

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -