mirror of
https://github.com/marqs85/ossc.git
synced 2024-10-31 18:04:50 +00:00
88 lines
2.0 KiB
ArmAsm
88 lines
2.0 KiB
ArmAsm
|
// Copyright 2017 ETH Zurich and University of Bologna.
|
||
|
// Copyright and related rights are licensed under the Solderpad Hardware
|
||
|
// License, Version 0.51 (the “License”); you may not use this file except in
|
||
|
// compliance with the License. You may obtain a copy of the License at
|
||
|
// http://solderpad.org/licenses/SHL-0.51. Unless required by applicable law
|
||
|
// or agreed to in writing, software, hardware and materials distributed under
|
||
|
// this License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR
|
||
|
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||
|
// specific language governing permissions and limitations under the License.
|
||
|
|
||
|
#include "pulpino.h"
|
||
|
|
||
|
#define EXCEPTION_STACK_SIZE 72
|
||
|
|
||
|
|
||
|
/* ========================================================= [ entry ] === */
|
||
|
.section .text
|
||
|
|
||
|
default_exc_handler:
|
||
|
jal x0, default_exc_handler
|
||
|
|
||
|
reset_handler:
|
||
|
/* set all registers to zero */
|
||
|
mv x1, x0
|
||
|
mv x2, x1
|
||
|
mv x3, x1
|
||
|
mv x4, x1
|
||
|
mv x5, x1
|
||
|
mv x6, x1
|
||
|
mv x7, x1
|
||
|
mv x8, x1
|
||
|
mv x9, x1
|
||
|
mv x10, x1
|
||
|
mv x11, x1
|
||
|
mv x12, x1
|
||
|
mv x13, x1
|
||
|
mv x14, x1
|
||
|
mv x15, x1
|
||
|
|
||
|
/* stack initilization */
|
||
|
la x2, _stack_start
|
||
|
|
||
|
_start:
|
||
|
.global _start
|
||
|
|
||
|
/* clear BSS */
|
||
|
la x14, _bss_start
|
||
|
la x15, _bss_end
|
||
|
|
||
|
bge x14, x15, zero_loop_end
|
||
|
|
||
|
zero_loop:
|
||
|
sw x0, 0(x14)
|
||
|
addi x14, x14, 4
|
||
|
ble x14, x15, zero_loop
|
||
|
zero_loop_end:
|
||
|
|
||
|
|
||
|
main_entry:
|
||
|
/* jump to alt_main program entry point */
|
||
|
jal alt_main
|
||
|
|
||
|
/* =================================================== [ exceptions ] === */
|
||
|
/* This section has to be down here, since we have to disable rvc for it */
|
||
|
|
||
|
.section .vectors, "ax"
|
||
|
.option norvc;
|
||
|
|
||
|
// external interrupts are handled by the same callback
|
||
|
// until compiler supports IRQ routines
|
||
|
.org 0x00
|
||
|
.rept 31
|
||
|
nop
|
||
|
.endr
|
||
|
jal x0, default_exc_handler
|
||
|
|
||
|
// reset vector
|
||
|
.org 0x80
|
||
|
jal x0, reset_handler
|
||
|
|
||
|
// illegal instruction exception
|
||
|
.org 0x84
|
||
|
jal x0, default_exc_handler
|
||
|
|
||
|
// ecall handler
|
||
|
.org 0x88
|
||
|
jal x0, default_exc_handler
|