1
0
mirror of https://github.com/livingcomputermuseum/UniBone.git synced 2026-02-13 11:25:27 +00:00
Files
livingcomputermuseum.UniBone/10.02_devices/2_src/cpu20/11.h
2019-09-26 07:42:59 +02:00

91 lines
1.8 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <ctype.h>
#include <assert.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
typedef uint8_t uint8, byte;
typedef uint16_t uint16, word;
typedef uint32_t uint32;
#define WD(hi, lo) W((hi)<<8 | (lo))
#define W(w) ((word)(w))
#define M8 0377
#define M16 0177777
#define B7 0000200
#define B15 0100000
#define nil NULL
#define SETMASK(l, r, m) l = (((l)&~(m)) | ((r)&(m)))
//#define trace printf
//#define trace(...)
// route "trace()" to unibone_cpu->logger
void unibone_log(unsigned msglevel, const char *srcfilename, unsigned srcline, const char *fmt, ...) ;
void unibone_logdump(void);
#define LL_DEBUG 5 // see logger.hpp
#define trace(...) unibone_log(LL_DEBUG, __FILE__, __LINE__, __VA_ARGS__)
int hasinput(int fd);
int dial(char *host, int port);
void serve(int port, void (*handlecon)(int, void*), void *arg);
void nodelay(int fd);
word sgn(word w);
word sxt(byte b);
typedef struct Bus Bus;
typedef struct Busdev Busdev;
struct Busdev
{
Busdev *next;
void *dev;
int (*dati)(Bus *bus, void *dev);
int (*dato)(Bus *bus, void *dev);
int (*datob)(Bus *bus, void *dev);
int (*svc)(Bus *bus, void *dev);
int (*bg)(void *dev);
void (*reset)(void *dev);
};
void reset_null(void *dev);
struct Bus
{
Busdev *devs;
uint32 addr;
word data;
};
int dati_bus(Bus *bus);
int dato_bus(Bus *bus);
int datob_bus(Bus *bus);
typedef struct Memory Memory;
struct Memory
{
word *mem;
uint32 start, end;
};
int dati_mem(Bus *bus, void *dev);
int dato_mem(Bus *bus, void *dev);
int datob_mem(Bus *bus, void *dev);
typedef struct KE11 KE11;
struct KE11
{
word ac;
word mq;
word x;
byte sc; /* 6 bits */
byte sr;
};
int dati_ke11(Bus *bus, void *dev);
int dato_ke11(Bus *bus, void *dev);
int datob_ke11(Bus *bus, void *dev);
void reset_ke11(void *dev);