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 'newlib/libc/sys/m88kbug/syscalls.c')
-rw-r--r--newlib/libc/sys/m88kbug/syscalls.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/newlib/libc/sys/m88kbug/syscalls.c b/newlib/libc/sys/m88kbug/syscalls.c
new file mode 100644
index 000000000..32f42a925
--- /dev/null
+++ b/newlib/libc/sys/m88kbug/syscalls.c
@@ -0,0 +1,131 @@
+/* Operating system and traps for mvme187bug, the motorolola BUG
+ monitor for m88k */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/times.h>
+#include <errno.h>
+
+#include "sys/systraps.h"
+
+static void writechar(int c) {
+ register int n asm ("r2");
+ n = c;
+ SYSTRAP(OUTCHR);
+ return;
+}
+
+static int readchar(void) {
+ register int n asm ("r2");
+ SYSTRAP(INCHR);
+ return(n);
+}
+
+int read(int file, char *ptr, int len) {
+ int todo;
+
+ for (todo = len; todo; --todo) {
+ *ptr++ = readchar();
+ }
+
+ return(len);
+}
+
+int lseek(int file, int ptr, int dir) {
+ return 0;
+}
+
+int write(int file, char *ptr, int len) {
+ int todo;
+
+ for (todo = len; todo; --todo) {
+ writechar(*ptr++);
+ }
+ return(len);
+}
+
+int close(int file) {
+ return(-1);
+}
+
+caddr_t sbrk(int 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(int file) {
+ return(1);
+}
+
+int fstat(int file, struct stat *st) {
+ st->st_mode = S_IFCHR;
+ return(0);
+}
+
+int stat(char *filename, struct stat *st) {
+ st->st_mode = S_IFCHR;
+ return(0);
+}
+
+int open(const char *path, int flags) {
+ return(0);
+}
+
+
+int _exit() {
+ SYSTRAP(RETURN);
+}
+
+int execve(char *name, char **argv, char **env) {
+ errno = ENOMEM;
+ return(-1);
+}
+
+int fork() {
+ errno = EAGAIN;
+ return(-1);
+}
+
+int getpid() {
+ return(1);
+}
+
+int kill(int pid, int sig) {
+ errno = EINVAL;
+ return(-1);
+}
+
+int link(char *old, char *new) {
+ errno = EMLINK;
+ return(-1);
+}
+
+clock_t times(struct tms *buf) {
+ return(-1);
+}
+
+int unlink(char *name) {
+ errno = ENOENT;
+ return(-1);
+}
+
+int wait(int *status) {
+ errno = ECHILD;
+ return(-1);
+}
+
+/* end of syscalls.c */