📄 mmumacro.s
字号:
IF FORCE_TGTCPU = "SA110"
CHECK_UNIFIED_110 $reg
ENDIF
MEND
MACRO
CHECK_CPUID $reg, $ret
NO_CHECK_CPUID $reg, $ret
IF FORCE_TGTCPU = "ARM7"
CHECK_CPUID_7T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "ARM720"
CHECK_CPUID_720T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "ARM740"
CHECK_CPUID_740T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "ARM920"
CHECK_CPUID_920T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "ARM940"
CHECK_CPUID_940T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "SA110"
CHECK_CPUID_110 $reg, $ret
ENDIF
MEND
MACRO
CHECK_VENDOR $reg, $ret
NO_CHECK_VENDOR $reg, $ret
IF FORCE_TGTCPU = "ARM7"
CHECK_VENDOR_7T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "ARM720"
CHECK_VENDOR_720T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "ARM740"
CHECK_VENDOR_740T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "ARM920"
CHECK_VENDOR_920T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "ARM940"
CHECK_VENDOR_940T $reg, $ret
ENDIF
IF FORCE_TGTCPU = "SA110"
CHECK_VENDOR_110 $reg, $ret
ENDIF
MEND
;------------------------------------------------------------------
; Macros to hide internals of each processor's cache implementation
;
; Never set coprocessor bits directly, use the macros. To use:
; RDMMU_STATE $reg ; read the flags
; CLEAR_IDC $reg ; disable I & D caches
; SET_MMU $reg ; enable MMU
; WRMMU_STATE $reg ; update the coprocessor
;
; CLEAR_IDC Clear Instruction & Data Cache Bits (& Write Buffer)
; CLEAR_ICACHE Clear (at least) Instruction Cache Bits
; CLEAR_DCACHE Clear (at least) Data Cache Bits
; CLEAR_WBUFFER Clear Write Buffer Bits
; CLEAR_MMU Clear MMU Enable Bits
; CLEAR_BIGEND Clear Big Endian Enable Bits
; SET_IDC As above, but Set each mode
; SET_ICACHE
; SET_DCACHE
; SET_WBUFFER
; SET_MMU
; SET_BIGEND
; TEST_MMU Simple tests to see if bits are already set
; TEST_BIGEND
MACRO
CLEAR_IDC $state
NO_CLEAR_IDC $state
IF FORCE_TGTCPU = "ARM720"
CLEAR_IDC_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
CLEAR_IDC_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
CLEAR_IDC_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
CLEAR_IDC_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
CLEAR_IDC_110 $state
ENDIF
MEND
MACRO
CLEAR_ICACHE $state
NO_CLEAR_ICACHE $state
IF FORCE_TGTCPU = "ARM720"
CLEAR_ICACHE_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
CLEAR_ICACHE_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
CLEAR_ICACHE_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
CLEAR_ICACHE_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
CLEAR_ICACHE_110 $state
ENDIF
MEND
MACRO
CLEAR_DCACHE $state
NO_CLEAR_DCACHE $state
IF FORCE_TGTCPU = "ARM720"
CLEAR_DCACHE_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
CLEAR_DCACHE_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
CLEAR_DCACHE_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
CLEAR_DCACHE_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
CLEAR_DCACHE_110 $state
ENDIF
MEND
MACRO
CLEAR_WBUFFER $state
NO_CLEAR_WBUFFER $state
IF FORCE_TGTCPU = "ARM720"
CLEAR_WBUFFER_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
CLEAR_WBUFFER_740T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
CLEAR_WBUFFER_110 $state
ENDIF
MEND
MACRO
CLEAR_MMU $state
NO_CLEAR_MMU $state
IF FORCE_TGTCPU = "ARM720"
CLEAR_MMU_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
CLEAR_MMU_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
CLEAR_MMU_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
CLEAR_MMU_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
CLEAR_MMU_110 $state
ENDIF
MEND
MACRO
CLEAR_BIGEND $state
NO_CLEAR_BIGEND $state
IF FORCE_TGTCPU = "ARM720"
CLEAR_BIGEND_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
CLEAR_BIGEND_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
CLEAR_BIGEND_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
CLEAR_BIGEND_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
CLEAR_BIGEND_110 $state
ENDIF
MEND
MACRO
SET_IDC $state
NO_SET_IDC $state
IF FORCE_TGTCPU = "ARM720"
SET_IDC_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
SET_IDC_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
SET_IDC_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
SET_IDC_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
SET_IDC_110 $state
ENDIF
MEND
MACRO
SET_ICACHE $state
NO_SET_ICACHE $state
IF FORCE_TGTCPU = "ARM720"
SET_ICACHE_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
SET_ICACHE_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
SET_ICACHE_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
SET_ICACHE_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
SET_ICACHE_110 $state
ENDIF
MEND
MACRO
SET_DCACHE $state
NO_SET_DCACHE $state
IF FORCE_TGTCPU = "ARM720"
SET_DCACHE_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
SET_DCACHE_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
SET_DCACHE_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
SET_DCACHE_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
SET_DCACHE_110 $state
ENDIF
MEND
MACRO
SET_WBUFFER $state
NO_SET_WBUFFER $state
IF FORCE_TGTCPU = "ARM720"
SET_WBUFFER_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
SET_WBUFFER_740T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
SET_WBUFFER_110 $state
ENDIF
MEND
MACRO
SET_MMU $state
NO_SET_MMU $state
IF FORCE_TGTCPU = "ARM720"
SET_MMU_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
SET_MMU_920T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
SET_MMU_110 $state
ENDIF
MEND
MACRO
SET_BIGEND $state
NO_SET_BIGEND $state
IF FORCE_TGTCPU = "ARM720"
SET_BIGEND_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
SET_BIGEND_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
SET_BIGEND_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
SET_BIGEND_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
SET_BIGEND_110 $state
ENDIF
MEND
MACRO
TEST_MMU $state
NO_TEST_MMU $state
IF FORCE_TGTCPU = "ARM720"
TEST_MMU_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
TEST_MMU_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
TEST_MMU_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
TEST_MMU_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
TEST_MMU_110 $state
ENDIF
MEND
MACRO
TEST_BIGEND $state
NO_TEST_BIGEND $state
IF FORCE_TGTCPU = "ARM720"
TEST_BIGEND_720T $state
ENDIF
IF FORCE_TGTCPU = "ARM740"
TEST_BIGEND_740T $state
ENDIF
IF FORCE_TGTCPU = "ARM920"
TEST_BIGEND_920T $state
ENDIF
IF FORCE_TGTCPU = "ARM940"
TEST_BIGEND_940T $state
ENDIF
IF FORCE_TGTCPU = "SA110"
TEST_BIGEND_110 $state
ENDIF
MEND
;------------------------------------------------------------------
;Read CPU Code (ID, Vendor revision etc.) register
;
MACRO
REALLY_RDCPU_CODE $val
MRC p15, 0, $val, c0, c0 ,0
MEND
MACRO
RDCPU_CODE $val
NO_RDCPU_CODE $val
IF FORCE_TGTCPU = "ARM720"
RDCPU_CODE_720T $val
ENDIF
IF FORCE_TGTCPU = "ARM740"
RDCPU_CODE_740T $val
ENDIF
IF FORCE_TGTCPU = "ARM920"
RDCPU_CODE_920T $val
ENDIF
IF FORCE_TGTCPU = "ARM940"
RDCPU_CODE_940T $val
ENDIF
IF FORCE_TGTCPU = "ARM940"
RDCPU_CODE_940T $val
ENDIF
IF FORCE_TGTCPU = "SA110"
RDCPU_CODE_110 $val
ENDIF
MEND
;Extract CPU ID from CPU Code register
;
MACRO
RDCPU_ID $w1, $val
NO_RDCPU_ID $w1, $val
IF FORCE_TGTCPU = "ARM720"
RDCPU_ID_720T $w1, $val
ENDIF
IF FORCE_TGTCPU = "ARM740"
RDCPU_ID_740T $w1, $val
ENDIF
IF FORCE_TGTCPU = "ARM920"
RDCPU_ID_920T $w1, $val
ENDIF
IF FORCE_TGTCPU = "ARM940"
RDCPU_ID_940T $w1, $val
ENDIF
IF FORCE_TGTCPU = "SA110"
RDCPU_ID_110 $w1, $val
ENDIF
MEND
;Extract CPU Vendor from CPU Code register
;
MACRO
RDCPU_VENDOR $w1, $val
NO_RDCPU_VENDOR $w1, $val
IF FORCE_TGTCPU = "ARM720"
RDCPU_VENDOR_720T $w1, $val
ENDIF
IF FORCE_TGTCPU = "ARM740"
RDCPU_VENDOR_740T $w1, $val
ENDIF
IF FORCE_TGTCPU = "ARM920"
RDCPU_VENDOR_920T $w1, $val
ENDIF
IF FORCE_TGTCPU = "ARM940"
RDCPU_VENDOR_940T $w1, $val
ENDIF
IF FORCE_TGTCPU = "SA110"
RDCPU_VENDOR_110 $w1, $val
ENDIF
MEND
;Coprocessor read of ID register (cache line sizes)
;
MACRO
RDCACHE_SIZES $reg_number
NO_RDCACHE_SIZES $reg_number
IF FORCE_TGTCPU = "ARM920"
RDCACHE_SIZES_920T $reg_number
ENDIF
IF FORCE_TGTCPU = "ARM940"
RDCACHE_SIZES_940T $reg_number
ENDIF
MEND
;Coprocessor read of Control register
;
MACRO
RDMMU_STATE $reg_number
NO_RDMMU_STATE $reg_number
IF FORCE_TGTCPU = "ARM720"
RDMMU_STATE_720T $reg_number
ENDIF
IF FORCE_TGTCPU = "ARM740"
RDMMU_STATE_740T $reg_number
ENDIF
IF FORCE_TGTCPU = "ARM920"
RDMMU_STATE_920T $reg_number
ENDIF
IF FORCE_TGTCPU = "ARM940"
RDMMU_STATE_940T $reg_number
ENDIF
IF FORCE_TGTCPU = "SA110"
RDMMU_STATE_110 $reg_number
ENDIF
MEND
;Coprocessor write of Control register
;
MACRO
WRMMU_STATE $reg_number
NO_WRMMU_STATE $reg_number
IF FORCE_TGTCPU = "ARM720"
WRMMU_STATE_720T $reg_number
ENDIF
IF FORCE_TGTCPU = "ARM740"
WRMMU_STATE_740T $reg_number
ENDIF
IF FORCE_TGTCPU = "ARM920"
WRMMU_STATE_920T $reg_number
ENDIF
IF FORCE_TGTCPU = "ARM940"
WRMMU_STATE_940T $reg_number
ENDIF
IF FORCE_TGTCPU = "SA110"
WRMMU_STATE_110 $reg_number
ENDIF
MEND
;------------------------------------------------------------------
;Coprocessor read of Translation Table Base reg.
;
MACRO
RDMMU_TTBase $reg_number
NO_RDMMU_TTBase $reg_number
IF FORCE_TGTCPU = "ARM720"
RDMMU_TTBase_720T $reg_number
ENDIF
IF FORCE_TGTCPU = "ARM920"
RDMMU_TTBase_920T $reg_number
ENDIF
IF FORCE_TGTCPU = "SA110"
RDMMU_TTBase_110 $reg_number
ENDIF
MEND
;Coprocessor write of Translation Table Base reg.
;
MACRO
WRMMU_TTBase $reg_number
NO_WRMMU_TTBase $reg_number
IF FORCE_TGTCPU = "ARM720"
WRMMU_TTBase_720T $reg_number
ENDIF
IF FORCE_TGTCPU = "ARM920"
WRMMU_TTBase_920T $reg_number
ENDIF
IF FORCE_TGTCPU = "SA110"
WRMMU_TTBase_110 $reg_number
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -