📄 exceptions.asm
字号:
##############################################################################
#
# FILE
# __exception.s
#
# DESCRIPTION
# Exception/interrupt handler table.
#
# COPYRIGHT
# (c) 1996-8 Metrowerks Corporation
# All rights reserved.
#
# HISTORY
# 97 MAR 20 LLY Created.
# 98 JUL 23 SCM Renamed and re-organized.
#
##############################################################################
#
# This must be the first file in the link order in order to set .org
# correctly for the exception vector (0x00000100 from start of ROM)
#
##############################################################################
.global gInterruptVectorTable
.global gInterruptVectorTableEnd
.global __reset
.extern InterruptHandler # void InterruptHandler(unsigned long exceptNumber)
.extern __start
.section .init,4,1,6 # put this code in .init section
.org 0x0
gInterruptVectorTable:
##############################################################################
#
# 0x0100 System Reset
#
# This is the first instruction to be executed after the hardware power-on
# reset.
#
##############################################################################
.org 0x100
__reset:
// b __start // use this when when debugging under the bdm
b (__start+0x400000) // use this for power-on version (program this into flash)
##############################################################################
#
# 0x0200 Machine Check
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x200
mtspr sprg1,r2
mtspr sprg2,r3
### FLUSH AND INVALIDATE THE CACHES ###
; These instructions are only valid on some PPC
; processors.
; mfspr r2,srr0 # get the faulting instruction address
; icbi 0,r2 # invalidate the cache block
; mfspr r2,19 # get the faulting data from DAR -> r2
; dcbi 0,r2 # invalidate the data cache block
addi r3,r0,0x0200
ba InterruptHandler
##############################################################################
#
# 0x0300 Data Storage
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x300
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0300
ba InterruptHandler
##############################################################################
#
# 0x0400 Instruction Storage
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x400
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0400
ba InterruptHandler
##############################################################################
#
# 0x0500 External Interrupt
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x500
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0500
ba InterruptHandler
##############################################################################
#
# 0x0600 Alignment
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x600
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0600
ba InterruptHandler
##############################################################################
#
# 0x0700 Program
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x700
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0700
ba InterruptHandler
##############################################################################
#
# 0x0800 Floating Point Unavailable
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x800
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0800
ba InterruptHandler
##############################################################################
#
# 0x0900 Decrementer Interrupt
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x900
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0900
ba InterruptHandler
##############################################################################
#
# 0x0C00 System Call
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0xC00
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0C00
ba InterruptHandler
##############################################################################
#
# 0x0D00 Trace
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0xD00
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0D00
ba InterruptHandler
##############################################################################
#
# 0x0E00 FP Assist
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0xE00
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0E00
ba InterruptHandler
##############################################################################
#
# 0x0F00 PPC740 and PPC750: Performance Monitor
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0xF00
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x0F00
ba InterruptHandler
##############################################################################
#
# 0x1000 MPC8xx and MPC505: Software Emulation
# PPC603e: Instruction TLB Miss
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x1000
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x1000
ba InterruptHandler
##############################################################################
#
# 0x1100 MPC8xx: Instruction TLB Miss
# PPC603e: Data Load TLB Miss
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x1100
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x1100
ba InterruptHandler
##############################################################################
#
# 0x1200 MPC8xx: Data TLB Miss
# PPC603e: Data Store TLB Miss
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x1200
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x1200
ba InterruptHandler
##############################################################################
#
# 0x1300 MPC8xx: Instruction TLB Error
# PPC7xx and PPC603e: Instruction address breakpoint
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x1300
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x1300
ba InterruptHandler
##############################################################################
#
# 0x1400 MPC8xx: Data TLB Error
# PPC7xx and PPC603e: System management
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x1400
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x1400
ba InterruptHandler
##############################################################################
#
# 0x1C00 MPC8xx and MPC505: Data breakpoint
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x1C00
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x1C00
ba InterruptHandler
##############################################################################
#
# 0x1D00 MPC8xx and MPC505: Instruction breakpoint
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x1D00
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x1D00
ba InterruptHandler
##############################################################################
#
# 0x1E00 MPC8xx and MPC505: Peripheral breakpoint
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x1E00
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x1E00
ba InterruptHandler
##############################################################################
#
# 0x1F00 MPC8xx and MPC505: Non-maskable development port
#
# Override the behavior by over-writing the handler code in RAM.
#
##############################################################################
.org 0x1F00
mtspr sprg1,r2
mtspr sprg2,r3
addi r3,r0,0x1F00
ba InterruptHandler
gInterruptVectorTableEnd:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -