summaryrefslogtreecommitdiff
path: root/newlib/libc/sys/h8500hms/syscalls.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/sys/h8500hms/syscalls.c')
-rw-r--r--newlib/libc/sys/h8500hms/syscalls.c129
1 files changed, 129 insertions, 0 deletions
diff --git a/newlib/libc/sys/h8500hms/syscalls.c b/newlib/libc/sys/h8500hms/syscalls.c
new file mode 100644
index 00000000000..bb0c3c0c793
--- /dev/null
+++ b/newlib/libc/sys/h8500hms/syscalls.c
@@ -0,0 +1,129 @@
+
+#include <_ansi.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+int
+_read (file, ptr, len)
+ int file;
+ char *ptr;
+ size_t len;
+
+{
+ return 0;
+}
+
+
+int
+_lseek (file, ptr, dir)
+ int file;
+ int ptr;
+ int dir;
+
+{
+ return 0;
+
+}
+
+static
+writechar (c)
+ char c;
+
+
+{
+ register int n asm ("r3");
+ n = c;
+asm ("clr.w r1;mov.w %0,r0; mov.w #6,r3; trapa #15": :"g" (n) : "r3","r1","r0");
+}
+
+
+
+int
+_write (file, ptr, len)
+ int file;
+ char *ptr;
+ size_t len;
+{
+
+ int todo;
+
+ for (todo = 0; todo < len; todo++)
+ {
+ writechar (*ptr++);
+ }
+ return len;
+
+}
+
+
+
+int
+_close (file)
+ int file;
+{
+
+ return -1;
+}
+
+
+
+caddr_t
+_sbrk (incr)
+ size_t incr;
+{
+ extern char end; /* Defined by the linker */
+ static char *heap_end;
+ char *prev_heap_end;
+
+ if (heap_end == 0)
+ {
+ heap_end = &end;
+ }
+ prev_heap_end = heap_end;
+ if (heap_end + incr > stack_ptr)
+ {
+ _write (1, "Heap and stack collision\n", 25);
+ abort ();
+ }
+ heap_end += incr;
+ return (caddr_t) prev_heap_end;
+}
+
+
+
+int
+isatty (file)
+ int file;
+{
+ return 1;
+}
+
+
+
+int
+_fstat (file, stat)
+ int file;
+ struct stat *stat;
+
+{
+ stat->st_mode = S_IFCHR;
+ return 0;
+}
+
+int
+_open (path, flags)
+ const char *path;
+ int flags;
+
+{
+ return 0;
+}
+
+
+void
+_exit (status)
+ int status;
+{
+ asm (" mov.w #33,r3; trapa #15");
+}