all repos — xyw @ b771a21192b4387bcb521e35af7578e1ee937dc1

A minimal virtual machine and assembler for terminals.

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:
        fputc(val, stdout);
        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);
}