-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy path11.h
81 lines (71 loc) · 1.48 KB
/
11.h
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
#ifdef PLAN9
#include "p9.h"
#else
#include "unix.h"
#endif
#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 B31 020000000000
#define SETMASK(l, r, m) l = (((l)&~(m)) | ((r)&(m)))
//#define trace printf
#define trace(...)
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 pause;
};
int dati_bus(Bus *bus);
int datip_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);
int dati_rom(Bus *bus, void *dev);
int dato_rom(Bus *bus, void *dev);
int datob_rom(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);
void initclock(Clock *clk, long period);
int handleclock(Clock *clk);
int ttyopen(Tty *tty);
int ttyinput(Tty *tty, char *c);