Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/m32r/trapmon0.c')
-rw-r--r--libgloss/m32r/trapmon0.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/libgloss/m32r/trapmon0.c b/libgloss/m32r/trapmon0.c
new file mode 100644
index 000000000..44bf6a586
--- /dev/null
+++ b/libgloss/m32r/trapmon0.c
@@ -0,0 +1,53 @@
+/*
+ * Mon2000 Trap handler (syscall interface).
+ *
+ * This trap handler is linked into the mon2000 libgloss (libmon).
+ */
+#include <reent.h>
+#include "syscall.h"
+
+int __trap0 (int function, int p1, int p2, int p3, struct _reent *r)
+{
+ int rc = 0;
+
+ switch (function) {
+ case SYS_exit:
+ /* loop so GDB can't go past system exit call */
+ while (1) {
+ asm volatile ("
+ ldi r0, #0
+ trap #15 ; return control to Mon2000");
+ }
+ break;
+
+ case SYS_write:
+ {
+ int i;
+
+ for( i=0; i<p3; i++ ) {
+ asm volatile ("
+ ldi r0, #2
+ ldi r1, #15 ; load Ctrl-O (ASCII 15)
+ trap #15 ; write Ctrl-O for quoting purposes" );
+
+ asm volatile ("
+ ldi r0, #2
+ ldb r1, %0
+ trap #15 ; write character to console"
+ : /* no outputs */
+ : "m" (((char*)p2)[i]));
+ }
+
+ rc = p3; /* return number of chars written */
+ break;
+ }
+
+ default:
+ rc = 0;
+ break;
+ }
+
+ return rc;
+}
+
+