test_cpu_prerun PROC
EXPORT test_cpu_prerun
; register R0 test
LDR R0, =GENERAL_FACTOR1
CMP R0, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R0, =GENERAL_FACTOR2
CMP R0, #GENERAL_FACTOR2
BNE.W StartupPCFail
; register R14 test
MOVS R0, R14
LDR R14, =GENERAL_FACTOR1
CMP R14, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R14, =GENERAL_FACTOR2
CMP R14, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R14, R0
MOVS R0, #0x00
; register R1 test
LDR R1, =GENERAL_FACTOR1
CMP R1, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R1, =GENERAL_FACTOR2
CMP R1, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R1, #0x01
; register R2 test
LDR R2, =GENERAL_FACTOR1
CMP R2, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R2, =GENERAL_FACTOR2
CMP R2, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R2, #0x02
; register R3 test
LDR R3, =GENERAL_FACTOR1
CMP R3, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R3, =GENERAL_FACTOR2
CMP R3, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R3, #0x03
; register R4 test
LDR R4, =GENERAL_FACTOR1
CMP R4, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R4, =GENERAL_FACTOR2
CMP R4, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R4, #0x04
; register R5 test
LDR R5, =GENERAL_FACTOR1
CMP R5, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R5, =GENERAL_FACTOR2
CMP R5, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R5, #0x05
; register R6 test
LDR R6, =GENERAL_FACTOR1
CMP R6, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R6, =GENERAL_FACTOR2
CMP R6, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R6, #0x06
; register R7 test
LDR R7, =GENERAL_FACTOR1
CMP R7, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R7, =GENERAL_FACTOR2
CMP R7, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R7, #0x07
; register R8 test
LDR R8, =GENERAL_FACTOR1
CMP R8, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R8, =GENERAL_FACTOR2
CMP R8, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R8, #0x08
; register R9 test
LDR R9, =GENERAL_FACTOR1
CMP R9, #GENERAL_FACTOR1
BNE.W StartupPCFail
LDR R9, =GENERAL_FACTOR2
CMP R9, #GENERAL_FACTOR2
BNE.W StartupPCFail
MOVS R9, #0x09
; register R10 test
LDR R10, =GENERAL_FACTOR1
CMP R10, #GENERAL_FACTOR1
BNE StartupPCFail
LDR R10, =GENERAL_FACTOR2
CMP R10, #GENERAL_FACTOR2
BNE StartupPCFail
MOVS R10, #0x0A
; register R11 test
LDR R11, =GENERAL_FACTOR1
CMP R11, #GENERAL_FACTOR1
BNE StartupPCFail
LDR R11, =GENERAL_FACTOR2
CMP R11, #GENERAL_FACTOR2
BNE StartupPCFail
MOVS R11, #0x0B
; register R12 test
LDR R12, =GENERAL_FACTOR1
CMP R12, #GENERAL_FACTOR1
BNE StartupPCFail
LDR R12, =GENERAL_FACTOR2
CMP R12, #GENERAL_FACTOR2
BNE StartupPCFail
MOVS R12, #0x0C
; verify the values of the registers
CMP R0, #0x00
BNE StartupPCFail
CMP R1, #0x01
BNE StartupPCFail
CMP R2, #0x02
BNE StartupPCFail
CMP R3, #0x03
BNE StartupPCFail
CMP R4, #0x04
BNE StartupPCFail
CMP R5, #0x05
BNE StartupPCFail
CMP R6, #0x06
BNE StartupPCFail
CMP R7, #0x07
BNE StartupPCFail
CMP R8, #0x08
BNE StartupPCFail
CMP R9, #0x09
BNE StartupPCFail
CMP R10, #0x0A
BNE StartupPCFail
CMP R11, #0x0B
BNE StartupPCFail
CMP R12, #0x0C
BNE StartupPCFail
; process stack pointer(PSP) test
MRS R0, PSP
LDR R1, =SP_FACTOR1
MSR PSP, R1
MRS R2, PSP
CMP R2, R1
BNE StartupPCFail
LDR R1, =SP_FACTOR2
MSR PSP, R1
MRS R2, PSP
CMP R2, R1
BNE StartupPCFail
MSR PSP, R0
; stack pointer(SP) test
MOV R12, R13
LDR R13, =SP_FACTOR1
LDR R1, =SP_FACTOR1
CMP R13, R1
BNE StartupPCFail
LDR R13, =SP_FACTOR2
LDR R1, =SP_FACTOR2
CMP R13, R1
BNE StartupPCFail
MOV R13, R12
; register APSR test
MOVS R0, #0x00000000 ; test Z flag
BNE.W StartupPCFail
SUBS R0,#1 ; test N flag
BPL.W StartupPCFail
ADDS R0,#2 ; test C flag without setting Z flag
BCC.W StartupPCFail
MOVS R0, #0x80000000
ADDS R0, R0, R0 ; test V Flag
BVC.W StartupPCFail
MOVS R0, #0xFFFFFFFF
USAT R1,#10,R0 ; test Q Flag
MRS R0, APSR ; get the value of APSR register
CMP R0, #0xB8000000
BNE.W StartupPCFail
MOVS R0, #0x1 ; SUCCESS = 1
BX LR
StartupPCFail
MOVS R0, #0x00
BX LR
StartupPCSuccess
MOVS R0, #0x01
BX LR
ENDP
END
最新发布