devices/console.c
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 |
#include <stdio.h>
#include "../xyw.h"
/* console device */
#define XYW_CONSOLE_INPUT 0x0
#define XYW_CONSOLE_OUTPUT 0x1
#define XYW_CONSOLE_ERROR 0x2
#define XYW_CONSOLE_ON_KEYPRESS 0x3
xyw_byte console_read(xyw_byte *data, xyw_byte addr, xyw_byte *error)
{
(void)error;
if (addr == XYW_CONSOLE_INPUT)
{
return (xyw_byte)getchar();
}
return data[addr];
}
void console_write(xyw_byte *data, xyw_byte addr, xyw_byte val, xyw_byte *error)
{
(void)error;
switch (addr)
{
case XYW_CONSOLE_OUTPUT:
putchar(val);
fflush(stdout);
break;
case XYW_CONSOLE_ERROR:
fputc(val, stderr);
fflush(stderr);
break;
}
data[addr] = val;
}
xyw_word console_readw(xyw_byte *data, xyw_byte addr, xyw_byte *error)
{
(void)error;
return XYW_PEEKW(&data[addr]);
}
void console_writew(xyw_byte *data, xyw_byte addr, xyw_word val, xyw_byte *error)
{
(void)error;
XYW_POKEW(&data[addr], val);
}
|