summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i960/rxgen960/startup/asmstub.s
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/i960/rxgen960/startup/asmstub.s')
-rw-r--r--c/src/lib/libbsp/i960/rxgen960/startup/asmstub.s141
1 files changed, 141 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/i960/rxgen960/startup/asmstub.s b/c/src/lib/libbsp/i960/rxgen960/startup/asmstub.s
new file mode 100644
index 0000000000..3e499a70c6
--- /dev/null
+++ b/c/src/lib/libbsp/i960/rxgen960/startup/asmstub.s
@@ -0,0 +1,141 @@
+#######################################
+# asmstub.s #
+# Last change : 20. 1.95 #
+#######################################
+
+########################################################################
+#
+# PURPOSE: resets processor
+#
+# ARGUMENTS: g0 = start point
+# g1 = prcb
+#
+# RETURNS: none
+########################################################################
+
+ .text
+ .globl _asm_exit
+
+ .text
+_asm_exit:
+ ldconst 0x300, g2
+# ldconst _start, g1
+# ldconst _ram_prcb, g2
+ sysctl g2, g0, g1
+ ret
+
+########################################################################
+#
+# PURPOSE: execute sysctl instruction
+#
+# ARGUMENTS: g0 = message type (0x300 for reinitialize)
+# g1 = depends on type (inst addr for reinitialize)
+# g2 = depends on type (prcb addr for reinitialize)
+#
+# RETURNS: none
+########################################################################
+
+ .text
+ .globl _asm_sysctl
+
+ .text
+_asm_sysctl:
+ b _asm_sysctl
+ sysctl g0, g1, g2
+ ret
+
+########################################################################
+#
+# PURPOSE: alter a bit in the interrupt pending register
+#
+# ARGUMENTS: g0 = interrupt number
+# g1 = 1 to set, 0 to clear
+#
+# RETURNS: none
+########################################################################
+
+ .text
+ .globl _asm_ipend
+
+ .text
+_asm_ipend:
+ chkbit 0, g1
+ alterbit g0, sf0, sf0
+ ret
+########################################################################
+#
+# PURPOSE: alter a bit in the interrupt mask register
+#
+# ARGUMENTS: g0 = interrupt number
+# g1 = 1 to set, 0 to clear
+#
+# RETURNS: none
+########################################################################
+
+ .text
+ .globl _asm_imask
+
+ .text
+_asm_imask:
+ chkbit 0, g1
+ alterbit g0, sf1, sf1
+ ret
+
+
+########################################################################
+#
+# PURPOSE: get the value of the interrupt mask register
+#
+# ARGUMENTS: none
+#
+# RETURNS: value of IMASK reg
+########################################################################
+
+ .text
+ .globl _asm_get_imask
+
+ .text
+_asm_get_imask:
+ mov sf1, g0
+ ret
+
+########################################################################
+#
+# PURPOSE: modify process-controls register
+#
+# ARGUMENTS: g0 = value masked/stored in PC reg
+# g1 = mask of bits to be modified
+#
+# RETURNS: g0 = initial value of PC reg
+########################################################################
+
+ .text
+ .globl _asm_modpc
+
+ .text
+_asm_modpc:
+ modpc g1, g1, g0
+ ret
+
+########################################################################
+#
+# PURPOSE: change a cached interrupt vector
+#
+# ARGUMENTS: g0 = interrupt number
+# g1 = new interrupt vector
+#
+# RETURNS: none
+########################################################################
+
+ .text
+ .globl _asm_ivector
+
+ .text
+_asm_ivector:
+ addo 1, g0, g0
+ st g1, [g0 * 4]
+ ret
+
+###############
+# End of file #
+###############