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

syscalls.c « m88kbug « sys « libc « newlib - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 32f42a925bb3f67ab85459ee50af4663b58ce414 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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 */