OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [sw/] [gdb_stub/] [boot.S] - Blame information for rev 43

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 43 ultra_embe
.nodelay
2
 
3
#include "exception.inc"
4
 
5
#-------------------------------------------------------------
6
# VECTOR 0x100 - Reset
7
#-------------------------------------------------------------
8
.org    0x100
9
vector_reset:
10
 
11
    # Setup SP (R1)
12
    l.movhi r4,hi(_sp);
13
    l.ori r1,r4,lo(_sp);
14
 
15
    # R4 = _bss_start
16
    l.movhi r4,hi(_bss_start);
17
    l.ori r4,r4,lo(_bss_start);
18
 
19
    # R5 = _bss_end
20
    l.movhi r5,hi(_bss_end);
21
    l.ori r5,r5,lo(_bss_end);
22
 
23
BSS_CLEAR:
24
    l.sw 0x0(r4),r0         # Write 0x00 to mem[r4]
25
    l.sfleu r4,r5           # SR[F] = (r4 < r5)
26
    l.addi r4, r4, 4        # r4 += 4
27
    l.bf  BSS_CLEAR         # If SR[F] == 0, jump to BSS_CLEAR
28
    l.nop
29
 
30
    # Jump to debug agent
31
    l.j gdb_main
32
    l.nop
33
 
34
.size vector_reset, .-vector_reset
35
 
36
#-------------------------------------------------------------
37
# VECTOR 0x200 - Fault / Illegal Instruction
38
#-------------------------------------------------------------
39
.org    0x200
40
vector_fault:
41
 
42
    # Save context
43
    asm_save_context
44
 
45
    # Arg 2 = Fault
46
    l.addi r4, r0, 1
47
 
48
    l.j handle_exception
49
    l.nop
50
 
51
.size vector_fault, .-vector_fault
52
 
53
#-------------------------------------------------------------
54
# VECTOR 0x300 - External Interrupt
55
#-------------------------------------------------------------
56
.org    0x300
57
vector_extint:
58
 
59
    # Save context
60
    asm_save_context
61
 
62
    # Arg 2 = Ext Int
63
    l.addi r4, r0, 2
64
 
65
    l.j handle_exception
66
    l.nop
67
 
68
.size vector_extint, .-vector_extint
69
 
70
#-------------------------------------------------------------
71
# VECTOR 0x400 - Syscall
72
#-------------------------------------------------------------
73
.org    0x400
74
vector_syscall:
75
 
76
    # Save context
77
    asm_save_context
78
 
79
    # Arg 2 = Syscall
80
    l.addi r4, r0, 3
81
 
82
    l.j handle_exception
83
    l.nop
84
 
85
.size vector_syscall, .-vector_syscall
86
 
87
#-------------------------------------------------------------
88
# VECTOR 0x600 - Trap
89
#-------------------------------------------------------------
90
.org    0x600
91
vector_trap:
92
 
93
    # Save context
94
    asm_save_context
95
 
96
    # Arg 2 = Trap
97
    l.addi r4, r0, 4
98
 
99
    # Fall through...
100
 
101
.size vector_trap, .-vector_trap
102
 
103
#-------------------------------------------------------------
104
# handle_exception: Common exception handling code
105
#-------------------------------------------------------------
106
handle_exception:
107
 
108
    # Copy stack pointer to arg1
109
    l.add r3, r0, r1
110
 
111
    # Jump to debug handler
112
    l.movhi r10,hi(gdb_exception);
113
    l.ori r10,r10,lo(gdb_exception);
114
    l.jalr r10
115
    l.nop
116
 
117
    # Return value is stack pointer
118
    l.add r1, r0, r11
119
 
120
    # Restore context
121
    asm_load_context
122
 
123
.size   handle_exception, .-handle_exception

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.