|
|
1.1 root 1: /* @(#)kas2.c 1.2 */
2: #include <stdio.h>
3: #include "kas.h"
4: #include "kas.yh"
5: #define OP(a,b,c) {a,b|XTAG,c}
6: #define R(a,b) {a,REG|XTAG,b}
7: #define RL(a,b) {a,REGL|XTAG,b}
8: #define RH(a,b) {a,REGH|XTAG,b}
9: #define M(a,b) {a,DEBUG|XTAG,b}
10: #define P(a,b) {a,PAGE|XTAG,b}
11: struct symtab instab[] = {
12: OP("mov", MVINS, 0),
13: OP("inc", SFINS, (3<<4)),
14: OP("adc", SFINS, (4<<4)),
15: OP("asl", SFINS, (5<<4)),
16: OP("aslc", SFINS, (6<<4)),
17: OP("dec", SFINS, (7<<4)),
18: OP("add", DFINS, (0<<4)),
19: OP("addc", DFINS, (1<<4)),
20: OP("subc", DFINS, (2<<4)),
21: OP("orn", DFINS, (10<<4)),
22: OP("and", DFINS, (11<<4)),
23: OP("or", DFINS, (12<<4)),
24: OP("xor", DFINS, (13<<4)),
25: OP("sub", DFINS, (14<<4)),
26: OP("addn", DFINS, (15<<4)),
27: OP("jmp", JMPINS, (0<<8)|0100000),
28: OP("br", BRINS, (1<<8)|0100000),
29: OP("brc", BRINS, (2<<8)|0100000),
30: OP("brz", BRINS, (3<<8)|0100000),
31: OP("br0", BRINS, (4<<8)|0100000),
32: OP("br1", BRINS, (5<<8)|0100000),
33: OP("br4", BRINS, (6<<8)|0100000),
34: OP("br7", BRINS, (7<<8)|0100000),
35: R("r0", 0),
36: R("r1", 1),
37: R("r2", 2),
38: R("r3", 3),
39: R("r4", 4),
40: R("r5", 5),
41: R("r6", 6),
42: R("r7", 7),
43: R("r8", 8),
44: R("r9", 9),
45: R("r10", 10),
46: R("r11", 11),
47: R("r12", 12),
48: R("r13", 13),
49: R("r14", 14),
50: R("r15", 15),
51: {"mem", MEM|XTAG, 0},
52: {"brg", BRG|XTAG, 0},
53: {"mar", MAR|XTAG, 0},
54: {"pc", PC|XTAG, 0},
55: {"pcr", PCR|XTAG, 0},
56: RL("idl", 0),
57: RL("idh", 1),
58: RL("odl", 2),
59: RL("odh", 3),
60: RL("ial", 4),
61: RL("iah", 5),
62: RL("oal", 6),
63: RL("oah", 7),
64: RL("lur0", 8+0),
65: RL("lur1", 8+1),
66: RL("lur2", 8+2),
67: RL("lur3", 8+3),
68: RL("lur4", 8+4),
69: RL("lur5", 8+5),
70: RL("lur6", 8+6),
71: RL("lur7", 8+7),
72: RH("csr0", 0),
73: RH("csr1", 1),
74: RH("csr2", 2),
75: RH("csr3", 3),
76: RH("csr4", 4),
77: RH("csr5", 5),
78: RH("csr6", 6),
79: RH("csr7", 7),
80: RH("npr", 8+0),
81: RH("nprx", 8+1),
82: P("p0",0),
83: P("p1",1<<11),
84: P("p2",2<<11),
85: P("p3",3<<11),
86: {".", XTEXT, 0},
87: {".text", SEG|XTAG, XTEXT},
88: {".data", SEG|XTAG, XDATA},
89: {".org", ORG|XTAG, 0},
90: {".byte", DATA|XTAG, 1},
91: {".word", DATA|XTAG, 2},
92: M(".load", DLOAD),
93: M(".dump", DDUMP),
94: M(".step", DSTEP),
95: M(".run", DRUN),
96: M(".reset", DRESET),
97: M(".wcsr", DWCSR),
98: M(".clear", DCLEAR),
99: M(".stop", DSTOP),
100: M(".regs", DREGS),
101: 0,
102: };
103:
104: struct symtab symtab[NSYM];
105: struct symtab *hshtab[NHASH];
106: struct symtab loclab[10];
107: struct symtab *dot;
108: int tsize;
109: int dsize;
110: int anyerrs;
111: int textsv, datasv;
112: char dbmode;
113: char *outfile, *dbfile, *infile;
114: int dbfd;
115: int dbtab[3];
116: char dbstr[50], instr[50];
117: short ispace[NKMCI], reloc[NKMCI];
118: char dspace[NKMCD];
119: struct ir ir;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.