1/*  gdbhost.c -- ARMulator RDP to gdb comms code:  ARM6 Instruction Emulator.
2    Copyright (C) 1994 Advanced RISC Machines Ltd.
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
17
18/***********************************************************/
19/* Functions that communicate info back to the debugger... */
20/***********************************************************/
21
22#include <stdio.h>
23#include <stdarg.h>
24#include "armdefs.h"
25#include "communicate.h"
26#include "dbg_rdi.h"
27#include "armos.h"
28
29#define OS_SendNothing 0x0
30#define OS_SendChar 0x1
31#define OS_SendWord 0x2
32#define OS_SendString 0x3
33
34/* Defined in kid.c */
35extern int wait_for_osreply (ARMword * reply);
36
37/* A pipe for handling SWI return values that goes straight from the */
38/* parent to the ARMulator host interface, bypassing the childs RDP */
39/* to RDI interpreter */
40int DebuggerARMul[2];
41
42/* The pipes between the two processes */
43int mumkid[2];
44int kidmum[2];
45
46void
47myprint (void *arg, const char *format, va_list ap)
48{
49#ifdef DEBUG
50  fprintf (stderr, "Host: myprint\n");
51#endif
52  vfprintf (stderr, format, ap);
53}
54
55
56/* Waits for a keypress on the debuggers' keyboard */
57void
58mypause (void *arg)
59{
60#ifdef DEBUG
61  fprintf (stderr, "Host: mypause\n");
62#endif
63}				/* I do love exciting functions */
64
65void
66mywritec (void *arg, int c)
67{
68#ifdef DEBUG
69  fprintf (stderr, "Mywrite : %c\n", c);
70#endif
71  MYwrite_char (kidmum[1], RDP_OSOp);	/* OS Operation Request Message */
72  MYwrite_word (kidmum[1], SWI_WriteC);	/* Print... */
73  MYwrite_char (kidmum[1], OS_SendChar);	/*  ...a single character */
74  MYwrite_char (kidmum[1], (unsigned char) c);
75
76  wait_for_osreply ((ARMword *) 0);
77}
78
79int
80myreadc (void *arg)
81{
82  char c;
83  ARMword x;
84
85#ifdef DEBUG
86  fprintf (stderr, "Host: myreadc\n");
87#endif
88  MYwrite_char (kidmum[1], RDP_OSOp);	/* OS Operation Request Message */
89  MYwrite_word (kidmum[1], SWI_ReadC);	/* Read... */
90  MYwrite_char (kidmum[1], OS_SendNothing);
91
92  c = wait_for_osreply (&x);
93  return (x);
94}
95
96
97int
98mywrite (void *arg, char const *buffer, int len)
99{
100#ifdef DEBUG
101  fprintf (stderr, "Host: mywrite\n");
102#endif
103  return 0;
104}
105
106char *
107mygets (void *arg, char *buffer, int len)
108{
109#ifdef DEBUG
110  fprintf (stderr, "Host: mygets\n");
111#endif
112  return buffer;
113}
114