1
0
mirror of https://github.com/aap/pdp6.git synced 2026-01-13 15:27:46 +00:00

started working on a linker

This commit is contained in:
aap 2016-10-09 22:36:09 +02:00
parent f2e9f77f69
commit 6311e92a7c
4 changed files with 1532 additions and 0 deletions

388
link/ld6.c Normal file
View File

@ -0,0 +1,388 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <assert.h>
#include "pdp6common.h"
word fw(hword l, hword r) { return ((word)l << 18) | (word)r; }
word point(word pos, word sz, hword p){ return (pos<<30)|(sz<<24)|p; }
hword left(word w) { return (w >> 18) & 0777777; }
hword right(word w) { return w & 0777777; }
/* just a subset here */
enum ItemType
{
Nothing = 0,
Code = 1,
Symbols = 2,
Entry = 4,
End = 5,
Name = 6,
Start = 7,
};
enum SymType
{
SymName = 000,
SymGlobal = 004,
SymLocal = 010,
SymBlock = 014,
SymGlobalH = 044, /* hidden
SymLocalH = 050, */
SymUndef = 060,
};
enum
{
MAXSYM = 1000
};
FILE*
mustopen(const char *name, const char *mode)
{
FILE *f;
if(f = fopen(name, mode), f == NULL){
fprintf(stderr, "couldn't open file: %s\n", name);
exit(1);
}
return f;
}
FILE *in;
hword itemsz;
word mem[01000000];
hword rel, loc;
int error;
/*
* debugging helpers
*/
void
printinst(hword p)
{
printf("%06o: %06o %06o %s\n", p, left(mem[p]), right(mem[p]), disasm(mem[p]));
}
void
disasmrange(hword start, hword end)
{
for(; start < end; start++)
printinst(start);
}
/* emulate PDP-6 IBP instruction */
word
ibp(word bp)
{
word pos, sz, p;
pos = (bp>>30)&077;
sz = (bp>>24)&077;
p = right(bp);
if(pos >= sz)
return point(pos-sz, sz, p);
return point(36-sz, sz, p+1);
}
/* emulate PDP-6 LDB instruction */
word
ldb(word bp)
{
word pos, sz, p;
pos = (bp>>30)&077;
sz = (bp>>24)&077;
p = right(bp);
return (mem[p]>>pos) & (1<<sz)-1;
}
/* print an ASCII string in memory */
void
printascii(hword loc)
{
word bp;
char c;
bp = point(36, 7, loc);
for(;;){
c = ldb(bp = ibp(bp));
if(c == 0)
break;
putchar(c);
}
putchar('\n');
}
word symtab[MAXSYM*2];
word symp;
/* Get symbol by name */
word*
findsym(word name)
{
word p;
word mask;
mask = 0037777777777;
for(p = 0; p < symp; p += 2)
if((symtab[p]&mask) == (name&mask))
return &symtab[p];
return NULL;
}
/* Extend a global request chain by writing hw at the end of
* the chain beginning at p */
void
extendreq(hword p, hword hw)
{
while(right(mem[p]))
p = right(mem[p]);
mem[p] = fw(left(mem[p]), hw);
}
/* Resolve a global request chain by writing hw to all locations */
void
resolvereq(hword p, hword hw)
{
hword next;
do{
next = right(mem[p]);
mem[p] = fw(left(mem[p]), hw);
p = next;
}while(next);
}
/* Insert a symbol into the symbol table. Handle linking. */
void
loadsym(word *newsym)
{
word *sym;
int type, newtype;
char name[8];
sym = findsym(newsym[0]);
newtype = (newsym[0]>>30)&074;
if(sym == NULL){
/* Symbol not in table yet.
* TODO: ignore locals? */
// if(newtype == SymGlobal || newtype == SymGlobalH ||
// newtype == SymUndef){
assert(symp < MAXSYM);
symtab[symp++] = newsym[0];
symtab[symp++] = newsym[1];
// }
return;
}
type = unrad50(sym[0], name);
if(type == SymUndef){
/* global request is in table */
if(newtype == SymGlobal || newtype == SymGlobalH){
/* found definition, resolve request chain
* and insert definition into table */
resolvereq(right(sym[1]), right(newsym[1]));
sym[0] = newsym[0];
sym[1] = newsym[1];
}else if(newtype == SymUndef)
/* extend request chain */
extendreq(right(sym[1]), right(newsym[1]));
}else if(type == SymGlobal || type == SymGlobalH){
/* global definition is in table */
if(newtype == SymGlobal || newtype == SymGlobalH){
if(newtype == type &&
newsym[1] == sym[1])
return;
fprintf(stderr, "Error: multiple definitions: %s\n", name);
error = 1;
}else if(newtype == SymUndef)
/* just resolve request */
resolvereq(right(newsym[1]), right(sym[1]));
}
}
/* print symbol table, not needed */
void
dumpsym(void)
{
int type;
char name[8];
word p;
for(p = 0; p < symp; p += 2){
type = unrad50(symtab[p], name);
printf(" %02o %s %012lo\n", type, name, symtab[p+1]);
}
}
/* Make sure there are no undefined symbols left */
void
checkundef(void)
{
int type;
char name[8];
word p;
for(p = 0; p < symp; p += 2){
type = unrad50(symtab[p], name);
if(type != SymUndef)
continue;
error = 1;
printf(" Error: undefined: %s %012lo\n", name, symtab[p+1]);
}
}
word block[18];
hword blocksz;
word
getword(FILE *f)
{
int i, b;
word w;
w = 0;
for(i = 0; i < 6; i++){
if(b = getc(f), b == EOF)
return ~0;
w = (w << 6) | (b & 077);
}
return w;
}
void
readblock(int mode)
{
word reloc;
hword i;
hword l, r;
int bits;
blocksz = 0;
if(itemsz == 0)
return;
reloc = getword(in);
i = 18;
while(itemsz && i--){
block[blocksz++] = getword(in);
itemsz--;
}
/* relocate block */
for(i = 0; i < 18; i++){
bits = (reloc >> 34) & 03;
reloc <<= 2;
if(mode == 1){
l = left(block[i]);
r = right(block[i]);
if(bits & 1) r += rel;
if(bits & 2) l += rel;
block[i] = fw(l, r);
/* This is weird but necessary for full word reloc */
}else if(mode == 2){
if(bits & 1)
block[i] = (block[i] + rel) & 0777777777777;
}
}
}
void
handlename(void)
{
word w;
int id;
char name[8];
readblock(0);
w = block[0];
while(itemsz)
readblock(0);
id = unrad50(w, name);
}
void
handlecode(void)
{
int i;
readblock(1);
loc = right(block[0]);
i = 1;
if(i < blocksz) // hacky
goto loop;
while(itemsz){
readblock(1);
for(i = 0; i < blocksz; i++){
loop:
mem[loc] = block[i];
loc++;
}
}
}
void
handlestart(void)
{
word w;
readblock(1);
w = block[0];
while(itemsz)
readblock(1);
}
void
handlesym(void)
{
int i;
word w1, w2;
while(itemsz){
readblock(2);
i = 0;
while(i < blocksz){
loadsym(&block[i]);
i += 2;
}
}
}
void
skipitem(void)
{
while(itemsz)
readblock(0);
}
int
main()
{
word w;
hword i, type;
void (*typesw[8])(void) = {
skipitem,
handlecode,
handlesym,
skipitem,
skipitem,
skipitem,
handlename,
handlestart,
};
// rel = 01000;
in = mustopen("test.rel", "rb");
while(w = getword(in), w != ~0){
type = left(w);
itemsz = right(w);
typesw[type]();
}
fclose(in);
checkundef();
if(error)
return 1;
disasmrange(findsym(rad50(0, "LINKSR"))[1],
findsym(rad50(0, "LINEP"))[1]);
disasmrange(0600+rel, 0603+rel);
return 0;
}

321
link/pdp6common.c Normal file
View File

@ -0,0 +1,321 @@
#include <stdio.h>
#include <stdint.h>
#include "pdp6common.h"
/* map ascii to radix50/squoze, also map lower to upper case */
char
ascii2rad(char c)
{
static char tab[] = {
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
0, -1, -1, -1, 046, 047, -1, -1,
-1, -1, -1, -1, -1, -1, 045, -1,
001, 002, 003, 004, 005, 006, 007, 010,
011, 012, -1, -1, -1, -1, -1, -1,
-1, 013, 014, 015, 016, 017, 020, 021,
022, 023, 024, 025, 026, 027, 030, 031,
032, 033, 034, 035, 036, 037, 040, 041,
042, 043, 044, -1, -1, -1, -1, -1,
-1, 013, 014, 015, 016, 017, 020, 021,
022, 023, 024, 025, 026, 027, 030, 031,
032, 033, 034, 035, 036, 037, 040, 041,
042, 043, 044, -1, -1, -1, -1, -1,
};
return tab[c&0177];
}
/* map radix50/squoze to ascii */
char
rad2ascii(char c)
{
static char tab[] = {
' ', '0', '1', '2', '3', '4', '5', '6',
'7', '8', '9', 'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
'V', 'W', 'X', 'Y', 'Z', '.', '$', '%'
};
return tab[c%050];
}
/* convert ascii string + code to radix50 */
word
rad50(int n, const char *s)
{
word r;
char c;
int i;
r = 0;
i = 0;
for(i = 0; i < 6 && *s; i++){
c = ascii2rad(*s++);
if(c < 0)
break;
r = r*050 + c;
}
for(; i < 6; i++)
r = r*050;
r |= (word)(n&074) << 30;
return r;
}
/* get null-terminated ascii string and code from radix50 */
int
unrad50(word r, char *s)
{
int i;
int n;
n = r>>30 & 074;
r &= ~0740000000000;
s += 6;
*s-- = '\0';
for(i = 0; i < 6; i++){
*s-- = rad2ascii(r%050);
r /= 050;
}
return n;
}
/* map ascii to sixbit, also map lower to upper case */
char
ascii2sixbit(char c)
{
static char tab[] = {
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
000, 001, 002, 003, 004, 005, 006, 007,
010, 011, 012, 013, 014, 015, 016, 017,
020, 021, 022, 023, 024, 025, 026, 027,
030, 031, 032, 033, 034, 035, 036, 037,
040, 041, 042, 043, 044, 045, 046, 047,
050, 051, 052, 053, 054, 055, 056, 057,
060, 061, 062, 063, 064, 065, 066, 067,
070, 071, 072, -1, -1, -1, -1, -1,
-1, 041, 042, 043, 044, 045, 046, 047,
050, 051, 052, 053, 054, 055, 056, 057,
060, 061, 062, 063, 064, 065, 066, 067,
070, 071, 072, -1, -1, -1, -1, -1,
};
return tab[c&0177];
}
/* map sixbit to ascii */
char
sixbit2ascii(char c)
{
static char tab[] = {
' ', '!', '"', '#', '$', '%', '&', '\'',
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '[', '\\', ']', '^', '_'
};
return tab[c&077];
}
/* convert ascii string to sixbit */
word
sixbit(const char *s)
{
word sx;
char c;
int i;
sx = 0;
i = 0;
for(i = 0; i < 6 && *s; i++){
c = ascii2sixbit(*s++);
if(c < 0)
break;
sx = (sx<<6) + c;
}
sx <<= 6*(6-i);
return sx;
}
/* get null-terminated ascii string from sixbit */
void
unsixbit(word sx, char *s)
{
int i;
s += 6;
*s-- = '\0';
for(i = 0; i < 6; i++){
*s-- = sixbit2ascii(sx&077);
sx >>= 6;
}
}
char *mnemonics[0700] = {
"UUO00", "UUO01", "UUO02", "UUO03",
"UUO04", "UUO05", "UUO06", "UUO07",
"UUO10", "UUO11", "UUO12", "UUO13",
"UUO14", "UUO15", "UUO16", "UUO17",
"UUO20", "UUO21", "UUO22", "UUO23",
"UUO24", "UUO25", "UUO26", "UUO27",
"UUO30", "UUO31", "UUO32", "UUO33",
"UUO34", "UUO35", "UUO36", "UUO37",
"UUO40", "UUO41", "UUO42", "UUO43",
"UUO44", "UUO45", "UUO46", "UUO47",
"UUO50", "UUO51", "UUO52", "UUO53",
"UUO54", "UUO55", "UUO56", "UUO57",
"UUO60", "UUO61", "UUO62", "UUO63",
"UUO64", "UUO65", "UUO66", "UUO67",
"UUO70", "UUO71", "UUO72", "UUO73",
"UUO74", "UUO75", "UUO76", "UUO77",
"XX100", "XX101", "XX102", "XX103",
"XX104", "XX105", "XX106", "XX107",
"XX110", "XX111", "XX112", "XX113",
"XX114", "XX115", "XX116", "XX117",
"XX120", "XX121", "XX122", "XX123",
"XX124", "XX125", "XX126", "XX127",
"XX130", "XX131", "FSC", "CAO",
"LDCI", "LDC", "DPCI", "DPC",
"FAD", "FADL", "FADM", "FADB",
"FADR", "FADLR", "FADMR", "FADBR",
"FSB", "FSBL", "FSBM", "FSBB",
"FSBR", "FSBLR", "FSBMR", "FSBBR",
"FMP", "FMPL", "FMPM", "FMPB",
"FMPR", "FMPLR", "FMPMR", "FMPBR",
"FDV", "FDVL", "FDVM", "FDVB",
"FDVR", "FDVLR", "FDVMR", "FDVBR",
"MOVE", "MOVEI", "MOVEM", "MOVES",
"MOVS", "MOVSI", "MOVSM", "MOVSS",
"MOVN", "MOVNI", "MOVNM", "MOVNS",
"MOVM", "MOVMI", "MOVMM", "MOVMS",
"IMUL", "IMULI", "IMULM", "IMULB",
"MUL", "MULI", "MULM", "MULB",
"IDIV", "IDIVI", "IDIVM", "IDIVB",
"DIV", "DIVI", "DIVM", "DIVB",
"ASH", "ROT", "LSH", "XX243",
"ASHC", "ROTC", "LSHC", "XX247",
"EXCH", "BLT", "AOBJP", "AOBJN",
"JRST", "JFCL", "XCT", "XX257",
"PUSHJ", "PUSH", "POP", "POPJ",
"JSR", "JSP", "JSA", "JRA",
"ADD", "ADDI", "ADDM", "ADDB",
"SUB", "SUBI", "SUBM", "SUBB",
"CAI", "CAIL", "CAIE", "CAILE",
"CAIA", "CAIGE", "CAIN", "CAIG",
"CAM", "CAML", "CAME", "CAMLE",
"CAMA", "CAMGE", "CAMN", "CAMG",
"JUMP", "JUMPL", "JUMPE", "JUMPLE",
"JUMPA", "JUMPGE", "JUMPN", "JUMPG",
"SKIP", "SKIPL", "SKIPE", "SKIPLE",
"SKIPA", "SKIPGE", "SKIPN", "SKIPG",
"AOJ", "AOJL", "AOJE", "AOJLE",
"AOJA", "AOJGE", "AOJN", "AOJG",
"AOS", "AOSL", "AOSE", "AOSLE",
"AOSA", "AOSGE", "AOSN", "AOSG",
"SOJ", "SOJL", "SOJE", "SOJLE",
"SOJA", "SOJGE", "SOJN", "SOJG",
"SOS", "SOSL", "SOSE", "SOSLE",
"SOSA", "SOSGE", "SOSN", "SOSG",
"SETZ", "SETZI", "SETZM", "SETZB",
"AND", "ANDI", "ANDM", "ANDB",
"ANDCA", "ANDCAI", "ANDCAM", "ANDCAB",
"SETM", "SETMI", "SETMM", "SETMB",
"ANDCM", "ANDCMI", "ANDCMM", "ANDCMB",
"SETA", "SETAI", "SETAM", "SETAB",
"XOR", "XORI", "XORM", "XORB",
"IOR", "IORI", "IORM", "IORB",
"ANDCB", "ANDCBI", "ANDCBM", "ANDCBB",
"EQV", "EQVI", "EQVM", "EQVB",
"SETCA", "SETCAI", "SETCAM", "SETCAB",
"ORCA", "ORCAI", "ORCAM", "ORCAB",
"SETCM", "SETCMI", "SETCMM", "SETCMB",
"ORCM", "ORCMI", "ORCMM", "ORCMB",
"ORCB", "ORCBI", "ORCBM", "ORCBB",
"SETO", "SETOI", "SETOM", "SETOB",
"HLL", "HLLI", "HLLM", "HLLS",
"HRL", "HRLI", "HRLM", "HRLS",
"HLLZ", "HLLZI", "HLLZM", "HLLZS",
"HRLZ", "HRLZI", "HRLZM", "HRLZS",
"HLLO", "HLLOI", "HLLOM", "HLLOS",
"HRLO", "HRLOI", "HRLOM", "HRLOS",
"HLLE", "HLLEI", "HLLEM", "HLLES",
"HRLE", "HRLEI", "HRLEM", "HRLES",
"HRR", "HRRI", "HRRM", "HRRS",
"HLR", "HLRI", "HLRM", "HLRS",
"HRRZ", "HRRZI", "HRRZM", "HRRZS",
"HLRZ", "HLRZI", "HLRZM", "HLRZS",
"HRRO", "HRROI", "HRROM", "HRROS",
"HLRO", "HLROI", "HLROM", "HLROS",
"HRRE", "HRREI", "HRREM", "HRRES",
"HLRE", "HLREI", "HLREM", "HLRES",
"TRN", "TLN", "TRNE", "TLNE",
"TRNA", "TLNA", "TRNN", "TLNN",
"TDN", "TSN", "TDNE", "TSNE",
"TDNA", "TSNA", "TDNN", "TSNN",
"TRZ", "TLZ", "TRZE", "TLZE",
"TRZA", "TLZA", "TRZN", "TLZN",
"TDZ", "TSZ", "TDZE", "TSZE",
"TDZA", "TSZA", "TDZN", "TSZN",
"TRC", "TLC", "TRCE", "TLCE",
"TRCA", "TLCA", "TRCN", "TLCN",
"TDC", "TSC", "TDCE", "TSCE",
"TDCA", "TSCA", "TDCN", "TSCN",
"TRO", "TLO", "TROE", "TLOE",
"TROA", "TLOA", "TRON", "TLON",
"TDO", "TSO", "TDOE", "TSOE",
"TDOA", "TSOA", "TDON", "TSON",
};
char *iomnemonics[] = {
"BLKI",
"DATAI",
"BLKO",
"DATAO",
"CONO",
"CONI",
"CONSZ",
"CONSO"
};
char*
disasm(word w)
{
static char s[100];
char *p;
hword i, x, y;
hword ac, dev;
hword op;
hword f;
y = w & 0777777;
x = (w >> 18) & 017;
i = (w >> 22) & 1;
ac = (w >> 23) & 017;
op = (w >> 27) & 0777;
dev = (w >> 24) & 0774;
f = ac & 07;
p = s;
if((op & 0700) == 0700){
p += sprintf(p, "%s ", iomnemonics[f]);
p += sprintf(p, "%o,", dev);
}else{
p += sprintf(p, "%s ", mnemonics[op]);
p += sprintf(p, "%o,", ac);
}
if(i)
p += sprintf(p, "@");
p += sprintf(p, "%o", y);
if(x)
p += sprintf(p, "(%o)", x);
return s;
}

12
link/pdp6common.h Normal file
View File

@ -0,0 +1,12 @@
typedef uint64_t word;
typedef uint32_t hword;
char ascii2rad(char c);
char rad2ascii(char c);
word rad50(int n, const char *s);
int unrad50(word r, char *s);
char ascii2sixbit(char c);
char sixbit2ascii(char c);
word sixbit(const char *s);
void unsixbit(word sx, char *s);
char *disasm(word w);

811
link/reltest.c Normal file
View File

@ -0,0 +1,811 @@
#include <stdio.h>
#include <stdint.h>
#include "pdp6common.h"
word fw(hword l, hword r) { return ((word)l << 18) | (word)r; }
hword left(word w) { return (w >> 18) & 0777777; }
hword right(word w) { return w & 0777777; }
/* just a subset here */
enum ItemType
{
Nothing = 0,
Code = 1,
Symbols = 2,
Entry = 4,
End = 5,
Name = 6,
Start = 7,
};
enum SymType
{
SymName = 000,
SymGlobal = 004,
SymLocal = 010,
SymBlock = 014,
SymGlobalH = 044, /* hidden
SymLocalH = 050, */
SymUndef = 060,
};
word item[01000000];
hword itemp, headp;
hword itemtype, itemsz;
hword relocp;
word blockreloc;
int blocksz;
void
startblock(void)
{
if(blocksz){
blockreloc <<= 2*(18-blocksz);
item[relocp] = blockreloc;
relocp = itemp++;
}
blockreloc = 0;
blocksz = 0;
}
void
putword(word w, int reloc)
{
item[itemp++] = w;
blockreloc = blockreloc<<2 | reloc;
blocksz++;
itemsz++;
if(blocksz == 18)
startblock();
}
void
startitem(hword it)
{
if(itemsz){
item[headp] = fw(itemtype, itemsz);
headp = itemp++;
}
itemtype = it;
itemsz = 0;
startblock();
}
void
dump(void)
{
hword i;
for(i = 0; i < itemp-2; i++)
printf("%06o: %012lo\n", i, item[i]);
}
void
dumpfile(FILE *f)
{
hword i;
word w;
int j;
for(i = 0; i < itemp-2; i++){
w = item[i] & 0777777777777;
for(j = 5; j >= 0; j--)
putc((w>>j*6)&077, f);
}
}
int
main()
{
/* init for first item */
headp = itemp++;
relocp = itemp++;
startitem(Name);
putword(rad50(0, "PROG"), 0);
startitem(Code);
putword(fw(0, 0100), 1);
putword(fw(0000000, 0000000), 0);
putword(fw(0515240, 0254000), 0);
putword(fw(0201100, 0000000), 0);
putword(fw(0554302, 0000000), 0);
putword(fw(0540242, 0000103), 1);
putword(fw(0200046, 0000001), 0);
putword(fw(0202045, 0000001), 0);
putword(fw(0202246, 0000001), 0);
putword(fw(0365100, 0000103), 1);
putword(fw(0402000, 0000005), 0);
putword(fw(0700200, 0010000), 0);
putword(fw(0271240, 0002000), 0);
putword(fw(0200105, 0000000), 0);
putword(fw(0700340, 0010000), 0);
putword(fw(0254000, 0000113), 1);
putword(fw(0275240, 0000001), 0);
putword(fw(0202240, 0000037), 0);
putword(fw(0275240, 0000177), 0);
putword(fw(0574100, 0000000), 0);
putword(fw(0322100, 0000143), 1);
putword(fw(0213000, 0000002), 0);
putword(fw(0550040, 0000122), 1);
putword(fw(0271042, 0000000), 0);
putword(fw(0504040, 0000002), 0);
putword(fw(0275241, 0000001), 0);
putword(fw(0542240, 0000140), 1);
putword(fw(0200100, 0000125), 1);
putword(fw(0271105, 0000001), 0);
putword(fw(0202100, 0000132), 1);
putword(fw(0201100, 0000134), 1);
putword(fw(0202100, 0000036), 0);
putword(fw(0200101, 0777777), 0);
putword(fw(0202101, 0000140), 1);
putword(fw(0274040, 0000551), 1);
putword(fw(0325040, 0000137), 1);
putword(fw(0200040, 0000552), 1);
putword(fw(0251040, 0000057), 0);
putword(fw(0200040, 0000147), 1);
putword(fw(0202040, 0000101), 1);
putword(fw(0254020, 0000100), 1);
putword(fw(0000000, 0000000), 0);
putword(fw(0264000, 0000000), 0);
putword(fw(0264000, 0000000), 0);
putword(fw(0265240, 0000000), 0);
putword(fw(0264000, 0000000), 0);
putword(fw(0265240, 0000153), 1);
putword(fw(0264000, 0000000), 0);
putword(fw(0265240, 0000155), 1);
putword(fw(0264000, 0000000), 0);
putword(fw(0265240, 0000157), 1);
putword(fw(0264000, 0000000), 0);
putword(fw(0265240, 0000161), 1);
putword(fw(0264000, 0000000), 0);
putword(fw(0265240, 0000163), 1);
putword(fw(0264000, 0000000), 0);
putword(fw(0265240, 0000165), 1);
putword(fw(0000000, 0000000), 0);
putword(fw(0201040, 0777777), 1);
putword(fw(0202040, 0000000), 0);
putword(fw(0200240, 0000443), 1);
putword(fw(0200140, 0000553), 1);
putword(fw(0260140, 0000000), 0);
putword(fw(0201040, 0000000), 0);
putword(fw(0260140, 0000000), 0);
putword(fw(0201040, 0000474), 1);
putword(fw(0260140, 0000177), 1);
putword(fw(0554040, 0000000), 0);
putword(fw(0260140, 0000000), 0);
putword(fw(0201040, 0000554), 1);
putword(fw(0260140, 0000201), 1);
putword(fw(0550040, 0000202), 1);
putword(fw(0260140, 0000203), 1);
putword(fw(0201040, 0000555), 1);
putword(fw(0260140, 0000205), 1);
putword(fw(0201040, 0000000), 0);
putword(fw(0260140, 0000211), 1);
putword(fw(0260140, 0000175), 1);
putword(fw(0260140, 0000421), 1);
putword(fw(0402000, 0000000), 0);
putword(fw(0200240, 0000443), 1);
putword(fw(0201040, 0000477), 1);
putword(fw(0260140, 0000213), 1);
putword(fw(0260140, 0000421), 1);
putword(fw(0260140, 0000376), 1);
putword(fw(0254000, 0000216), 1);
putword(fw(0260140, 0000000), 0);
putword(fw(0254000, 0000216), 1);
putword(fw(0332000, 0000002), 0);
putword(fw(0303100, 0000014), 0);
putword(fw(0254000, 0000216), 1);
putword(fw(0275100, 0000001), 0);
putword(fw(0221100, 0000037), 0);
putword(fw(0272100, 0000216), 1);
putword(fw(0260140, 0000225), 1);
putword(fw(0254000, 0000216), 1);
putword(fw(0332000, 0000002), 0);
putword(fw(0303100, 0000037), 0);
putword(fw(0254000, 0000216), 1);
putword(fw(0275100, 0000001), 0);
putword(fw(0272100, 0000234), 1);
putword(fw(0260140, 0000235), 1);
putword(fw(0254000, 0000216), 1);
putword(fw(0301100, 0000101), 0);
putword(fw(0303100, 0000143), 0);
putword(fw(0254000, 0000216), 1);
putword(fw(0275100, 0000100), 0);
putword(fw(0221100, 0000564), 0);
putword(fw(0272100, 0000243), 1);
putword(fw(0402000, 0000000), 0);
putword(fw(0200240, 0000443), 1);
putword(fw(0201040, 0000506), 1);
putword(fw(0260140, 0000221), 1);
putword(fw(0260140, 0000421), 1);
putword(fw(0260140, 0000376), 1);
putword(fw(0254000, 0000254), 1);
putword(fw(0134100, 0000001), 0);
putword(fw(0275100, 0000060), 0);
putword(fw(0331000, 0000002), 0);
putword(fw(0303100, 0000002), 0);
putword(fw(0254000, 0000254), 1);
putword(fw(0220100, 0000556), 1);
putword(fw(0272100, 0000254), 1);
putword(fw(0134100, 0000001), 0);
putword(fw(0275100, 0000060), 0);
putword(fw(0331000, 0000002), 0);
putword(fw(0303100, 0000011), 0);
putword(fw(0254000, 0000254), 1);
putword(fw(0221100, 0645700), 0);
putword(fw(0272100, 0000271), 1);
putword(fw(0260140, 0000244), 1);
putword(fw(0254000, 0000254), 1);
putword(fw(0303100, 0000073), 0);
putword(fw(0254000, 0000254), 1);
putword(fw(0221100, 0007020), 0);
putword(fw(0272100, 0000300), 1);
putword(fw(0200240, 0000443), 1);
putword(fw(0201040, 0000517), 1);
putword(fw(0260140, 0000257), 1);
putword(fw(0554300, 0000000), 0);
putword(fw(0201040, 0000004), 0);
putword(fw(0261140, 0000001), 0);
putword(fw(0201040, 0000001), 0);
putword(fw(0510206, 0000000), 0);
putword(fw(0554306, 0000003), 0);
putword(fw(0322300, 0000324), 1);
putword(fw(0510106, 0000000), 0);
putword(fw(0316100, 0000004), 0);
putword(fw(0344040, 0000317), 1);
putword(fw(0200340, 0000001), 0);
putword(fw(0260140, 0000207), 1);
putword(fw(0201600, 0000040), 0);
putword(fw(0136600, 0000005), 0);
putword(fw(0201600, 0000003), 0);
putword(fw(0200440, 0000557), 1);
putword(fw(0134100, 0000011), 0);
putword(fw(0271100, 0000240), 0);
putword(fw(0136100, 0000005), 0);
putword(fw(0367600, 0000332), 1);
putword(fw(0201040, 0000560), 1);
putword(fw(0303340, 0000001), 0);
putword(fw(0260140, 0000311), 1);
putword(fw(0260140, 0000214), 1);
putword(fw(0326300, 0000315), 1);
putword(fw(0262140, 0000002), 0);
putword(fw(0260140, 0000421), 1);
putword(fw(0200240, 0000443), 1);
putword(fw(0201040, 0000524), 1);
putword(fw(0260140, 0000340), 1);
putword(fw(0260140, 0000421), 1);
putword(fw(0260140, 0000376), 1);
putword(fw(0254000, 0000355), 1);
putword(fw(0201040, 0000000), 0);
putword(fw(0202040, 0000172), 1);
putword(fw(0200240, 0000443), 1);
putword(fw(0201040, 0000536), 1);
putword(fw(0260140, 0000347), 1);
putword(fw(0260140, 0000421), 1);
putword(fw(0260140, 0000376), 1);
putword(fw(0254000, 0000365), 1);
putword(fw(0200040, 0000000), 0);
putword(fw(0552040, 0000354), 1);
putword(fw(0200240, 0000443), 1);
putword(fw(0201040, 0000541), 1);
putword(fw(0260140, 0000357), 1);
putword(fw(0200040, 0000364), 1);
putword(fw(0260140, 0000000), 0);
putword(fw(0201040, 0000544), 1);
putword(fw(0260140, 0000367), 1);
putword(fw(0260140, 0000421), 1);
putword(fw(0254020, 0000170), 1);
putword(fw(0200040, 0000443), 1);
putword(fw(0201200, 0000000), 0);
putword(fw(0712340, 0000040), 0);
putword(fw(0254000, 0000400), 1);
putword(fw(0712040, 0000002), 0);
putword(fw(0712140, 0000002), 0);
putword(fw(0136100, 0000001), 0);
putword(fw(0405100, 0000177), 0);
putword(fw(0306100, 0000177), 0);
putword(fw(0254000, 0000000), 0);
putword(fw(0302100, 0000015), 0);
putword(fw(0344200, 0000400), 1);
putword(fw(0712340, 0000020), 0);
putword(fw(0254000, 0000412), 1);
putword(fw(0201100, 0000012), 0);
putword(fw(0712140, 0000002), 0);
putword(fw(0200040, 0000443), 1);
putword(fw(0326200, 0000000), 0);
putword(fw(0263140, 0000000), 0);
putword(fw(0200040, 0000443), 1);
putword(fw(0712040, 0000002), 0);
putword(fw(0316040, 0000005), 0);
putword(fw(0263140, 0000000), 0);
putword(fw(0712300, 0000040), 0);
putword(fw(0254000, 0000434), 1);
putword(fw(0712300, 0000020), 0);
putword(fw(0254000, 0000427), 1);
putword(fw(0134100, 0000001), 0);
putword(fw(0712140, 0000002), 0);
putword(fw(0254000, 0000423), 1);
putword(fw(0712300, 0000020), 0);
putword(fw(0254000, 0000434), 1);
putword(fw(0712140, 0000561), 1);
putword(fw(0712300, 0000020), 0);
putword(fw(0254000, 0000437), 1);
putword(fw(0712140, 0000562), 1);
putword(fw(0263140, 0000000), 0);
putword(fw(0440700, 0000444), 1);
startitem(Code);
putword(fw(0, 0474), 1);
putword(fw(0202505, 0620246), 0);
putword(fw(0271010, 0554212), 0);
putword(fw(0415320, 0000000), 0);
putword(fw(0064252, 0454640), 0);
putword(fw(0425012, 0447610), 0);
putword(fw(0406624, 0751500), 0);
putword(fw(0422032, 0442500), 0);
putword(fw(0406464, 0040604), 0);
putword(fw(0476550, 0527032), 0);
putword(fw(0050000, 0000000), 0);
putword(fw(0064252, 0454640), 0);
putword(fw(0425006, 0420210), 0);
putword(fw(0446171, 0152100), 0);
putword(fw(0472032, 0654500), 0);
putword(fw(0522231, 0542520), 0);
putword(fw(0301626, 0531500), 0);
putword(fw(0446464, 0034564), 0);
putword(fw(0325464, 0040632), 0);
putword(fw(0245341, 0505000), 0);
putword(fw(0064251, 0147500), 0);
putword(fw(0416371, 0643222), 0);
putword(fw(0436532, 0240650), 0);
putword(fw(0446371, 0606424), 0);
putword(fw(0000000, 0000000), 0);
putword(fw(0064250, 0447500), 0);
putword(fw(0546372, 0520256), 0);
putword(fw(0406352, 0420246), 0);
putword(fw(0546471, 0540626), 0);
putword(fw(0242513, 0150212), 0);
putword(fw(0202624, 0044614), 0);
putword(fw(0202630, 0551530), 0);
putword(fw(0416444, 0044614), 0);
putword(fw(0202351, 0724576), 0);
putword(fw(0064240, 0000000), 0);
putword(fw(0064250, 0554212), 0);
putword(fw(0415010, 0442250), 0);
putword(fw(0374321, 0200000), 0);
putword(fw(0064250, 0554212), 0);
putword(fw(0415011, 0151500), 0);
putword(fw(0000000, 0000000), 0);
putword(fw(0202370, 0352202), 0);
putword(fw(0461011, 0447606), 0);
putword(fw(0406511, 0147634), 0);
putword(fw(0515011, 0447634), 0);
putword(fw(0435341, 0505000), 0);
putword(fw(0000001, 0000001), 0);
putword(fw(0000150, 0000040), 2);
putword(fw(0000010, 0000464), 1);
putword(fw(0270000, 0000000), 0);
putword(fw(0200000, 0000000), 0);
putword(fw(0000000, 0106274), 0);
putword(fw(0440600, 0000004), 0);
putword(fw(0236460, 0000000), 0);
putword(fw(0000000, 0000015), 0);
putword(fw(0000000, 0000012), 0);
startitem(Symbols);
putword(rad50(SymGlobal, "A"), 0);
putword(0000000, 0);
putword(rad50(SymGlobal, "AC1"), 0);
putword(0000015, 0);
putword(rad50(SymGlobal, "AC2"), 0);
putword(0000016, 0);
putword(rad50(SymGlobal, "AC3"), 0);
putword(0000017, 0);
putword(rad50(SymGlobal, "AL"), 0);
putword(0000001, 0);
putword(rad50(SymGlobal, "ASSCON"), 0);
putword(0400000, 0);
putword(rad50(SymGlobal, "ASSPRG"), 0);
putword(0200000, 0);
putword(rad50(SymGlobal, "B"), 0);
putword(0000014, 0);
putword(rad50(SymGlobal, "BUFPNT"), 0);
putword(0000012, 0);
putword(rad50(SymGlobal, "BUFWRD"), 0);
putword(0000013, 0);
putword(rad50(SymLocal, "C"), 0);
putword(0000002, 0);
putword(rad50(SymUndef, "CH1"), 0);
putword(0000152, 1);
putword(rad50(SymUndef, "CH2"), 0);
putword(0000154, 1);
putword(rad50(SymUndef, "CH3"), 0);
putword(0000156, 1);
putword(rad50(SymUndef, "CH4"), 0);
putword(0000160, 1);
putword(rad50(SymUndef, "CH5"), 0);
putword(0000162, 1);
putword(rad50(SymUndef, "CH6"), 0);
putword(0000164, 1);
putword(rad50(SymUndef, "CH7"), 0);
putword(0000166, 1);
putword(rad50(SymLocal, "CHL"), 0);
putword(0000006, 0);
putword(rad50(SymGlobal, "CLOSR"), 0);
putword(0002000, 0);
putword(rad50(SymGlobal, "CLSIN"), 0);
putword(0000002, 0);
putword(rad50(SymGlobal, "CLSOUT"), 0);
putword(0000001, 0);
putword(rad50(SymUndef, "CONFIG"), 0);
putword(0000176, 1);
putword(rad50(SymUndef, "CONMES"), 0);
putword(0000373, 1);
putword(rad50(SymUndef, "CPOPJ"), 0);
putword(0000407, 1);
putword(rad50(SymUndef, "CPOPJ1"), 0);
putword(0000417, 1);
putword(rad50(SymUndef, "CRLF"), 0);
putword(0000341, 1);
putword(rad50(SymGlobal, "D"), 0);
putword(0000017, 0);
putword(rad50(SymGlobal, "DAT"), 0);
putword(0000005, 0);
putword(rad50(SymLocal, "DATLOP"), 0);
putword(0000216, 1);
putword(rad50(SymGlobal, "DCL"), 0);
putword(0000001, 0);
putword(rad50(SymGlobal, "DCW"), 0);
putword(0020000, 0);
putword(rad50(SymGlobal, "DDI"), 0);
putword(0000007, 0);
putword(rad50(SymGlobal, "DDO"), 0);
putword(0000006, 0);
putword(rad50(SymGlobal, "DDTMEM"), 0);
putword(0000037, 0);
putword(rad50(SymGlobal, "DDTSYM"), 0);
putword(0000036, 0);
putword(rad50(SymUndef, "DECIN"), 0);
putword(0000000, 0);
putword(rad50(SymUndef, "DECIN1"), 0);
putword(0000301, 1);
putword(rad50(SymGlobal, "DEN"), 0);
putword(0000004, 0);
putword(rad50(SymLocal, "DEV1"), 0);
putword(0000103, 1);
putword(rad50(SymGlobal, "DEVADR"), 0);
putword(0000007, 0);
putword(rad50(SymGlobal, "DEVBUF"), 0);
putword(0000006, 0);
putword(rad50(SymGlobal, "DEVCHR"), 0);
putword(0000001, 0);
putword(rad50(SymGlobal, "DEVCTR"), 0);
putword(0000011, 0);
putword(rad50(SymGlobal, "DEVDAT"), 0);
putword(0000006, 0);
putword(rad50(SymGlobal, "DEVIAD"), 0);
putword(0000007, 0);
putword(rad50(SymUndef, "DECINT"), 0);
putword(0000104, 1);
putword(rad50(SymGlobal, "DEVIOS"), 0);
putword(0000002, 0);
putword(rad50(SymGlobal, "DEVLOG"), 0);
putword(0000005, 0);
putword(rad50(SymUndef, "DEVLST"), 0);
putword(0000312, 1);
putword(rad50(SymGlobal, "DEVMOD"), 0);
putword(0000004, 0);
putword(rad50(SymGlobal, "DEVNAM"), 0);
putword(0000000, 0);
putword(rad50(SymGlobal, "DEVOAD"), 0);
putword(0000010, 0);
putword(rad50(SymGlobal, "DEVPTR"), 0);
putword(0000010, 0);
putword(rad50(SymGlobal, "DEVSER"), 0);
putword(0000003, 0);
putword(rad50(SymGlobal, "DGF"), 0);
putword(0000012, 0);
putword(rad50(SymGlobal, "DIN"), 0);
putword(0000003, 0);
putword(rad50(SymGlobal, "DLK"), 0);
putword(0000005, 0);
putword(rad50(SymGlobal, "DOU"), 0);
putword(0000002, 0);
putword(rad50(SymGlobal, "DR"), 0);
putword(0000016, 0);
putword(rad50(SymGlobal, "DRL"), 0);
putword(0000000, 0);
putword(rad50(SymGlobal, "DSI"), 0);
putword(0000011, 0);
putword(rad50(SymGlobal, "DSO"), 0);
putword(0000010, 0);
putword(rad50(SymGlobal, "DTW"), 0);
putword(0040000, 0);
putword(rad50(SymGlobal, "DVAVAL"), 0);
putword(0000040, 0);
putword(rad50(SymGlobal, "DVCDR"), 0);
putword(0100000, 0);
putword(rad50(SymGlobal, "DVDIR"), 0);
putword(0000004, 0);
putword(rad50(SymGlobal, "DVDIR1"), 0);
putword(0400000, 0);
putword(rad50(SymGlobal, "DVIN"), 0);
putword(0000002, 0);
putword(rad50(SymGlobal, "DVLPT"), 0);
putword(0040000, 0);
putword(rad50(SymGlobal, "DVMTA"), 0);
putword(0000020, 0);
putword(rad50(SymGlobal, "DVOUT"), 0);
putword(0000001, 0);
putword(rad50(SymGlobal, "DVTTY"), 0);
putword(0000010, 0);
putword(rad50(SymGlobal, "ENTRB"), 0);
putword(0020000, 0);
putword(rad50(SymUndef, "ERNAM"), 0);
putword(0000000, 0);
putword(rad50(SymUndef, "ERROR"), 0);
putword(0000167, 1);
putword(rad50(SymLocal, "EXECIS"), 0);
putword(0000541, 1);
putword(rad50(SymLocal, "GET1"), 0);
putword(0000400, 1);
putword(rad50(SymLocal, "GETLIN"), 0);
putword(0000376, 1);
putword(rad50(SymGlobal, "I"), 0);
putword(0000010, 0);
putword(rad50(SymGlobal, "IB"), 0);
putword(0000013, 0);
putword(rad50(SymGlobal, "IBUFB"), 0);
putword(0200000, 0);
putword(rad50(SymGlobal, "INITB"), 0);
putword(0400000, 0);
putword(rad50(SymGlobal, "INPB"), 0);
putword(0010000, 0);
putword(rad50(SymLocal, "INT"), 0);
putword(0000005, 0);
putword(rad50(SymGlobal, "IO"), 0);
putword(0000020, 0);
putword(rad50(SymGlobal, "IOACT"), 0);
putword(0010000, 0);
putword(rad50(SymGlobal, "IOREG"), 0);
putword(0000002, 0);
putword(rad50(SymGlobal, "IORKTL"), 0);
putword(0040000, 0);
putword(rad50(SymGlobal, "IOCON"), 0);
putword(0000040, 0);
putword(rad50(SymLocal, "IOCONF"), 0);
putword(0000517, 1);
putword(rad50(SymGlobal, "IODEND"), 0);
putword(0020000, 0);
putword(rad50(SymGlobal, "IODERR"), 0);
putword(0200000, 0);
putword(rad50(SymGlobal, "IODISC"), 0);
putword(0400000, 0);
putword(rad50(SymGlobal, "IODONE"), 0);
putword(0400000, 0);
putword(rad50(SymGlobal, "IODTER"), 0);
putword(0100000, 0);
putword(rad50(SymGlobal, "IOEND"), 0);
putword(0000040, 0);
putword(rad50(SymGlobal, "IOFST"), 0);
putword(0000004, 0);
putword(rad50(SymGlobal, "IOIMPM"), 0);
putword(0400000, 0);
putword(rad50(SymGlobal, "IONRCK"), 0);
putword(0000100, 0);
putword(rad50(SymGlobal, "IORDEL"), 0);
putword(0000100, 0);
putword(rad50(SymGlobal, "IORET"), 0);
putword(0000020, 0);
putword(rad50(SymGlobal, "IOS"), 0);
putword(0000000, 0);
putword(rad50(SymGlobal, "IOSTRT"), 0);
putword(0000010, 0);
putword(rad50(SymGlobal, "IOUSE"), 0);
putword(0400000, 0);
putword(rad50(SymGlobal, "IOW"), 0);
putword(0000001, 0);
putword(rad50(SymGlobal, "IOWC"), 0);
putword(0000020, 0);
putword(rad50(SymGlobal, "IOWS"), 0);
putword(0400000, 0);
putword(rad50(SymGlobal, "ITEM"), 0);
putword(0000004, 0);
putword(rad50(SymGlobal, "JBFADR"), 0);
putword(0000000, 0);
putword(rad50(SymGlobal, "JBFCTR"), 0);
putword(0000002, 0);
putword(rad50(SymGlobal, "JBFPTR"), 0);
putword(0000001, 0);
putword(rad50(SymGlobal, "JBUF"), 0);
putword(0000005, 0);
putword(rad50(SymGlobal, "JDAT"), 0);
putword(0000011, 0);
putword(rad50(SymGlobal, "JERR"), 0);
putword(0002000, 0);
putword(rad50(SymGlobal, "JIOW"), 0);
putword(0100000, 0);
putword(rad50(SymGlobal, "JNA"), 0);
putword(0004000, 0);
putword(rad50(SymUndef, "JORFF"), 0);
putword(0000363, 1);
putword(rad50(SymUndef, "JORSYM"), 0);
putword(0000135, 1);
putword(rad50(SymLocal, "JRSTI"), 0);
putword(0000147, 1);
putword(rad50(SymLocal, "JRSTI1"), 0);
putword(0000143, 1);
putword(rad50(SymLocal, "LENGTH"), 0);
putword(0000544, 1);
putword(rad50(SymLocal, "LINBUF"), 0);
putword(0000444, 1);
putword(rad50(SymLocal, "LINEP"), 0);
putword(0000443, 1);
putword(rad50(SymGlobal, "LINKSR"), 0);
putword(0000100, 1);
putword(rad50(SymLocal, "LOC40"), 0);
putword(0000150, 1);
putword(rad50(SymGlobal, "LOOKB"), 0);
putword(0040000, 0);
putword(rad50(SymUndef, "MAKEND"), 0);
putword(0000353, 1);
putword(rad50(SymGlobal, "MTW"), 0);
putword(0010000, 0);
putword(rad50(SymUndef, "NDEVM1"), 0);
putword(0000102, 1);
putword(rad50(SymLocal, "NXM"), 0);
putword(0010000, 0);
putword(rad50(SymGlobal, "OBUFB"), 0);
putword(0100000, 0);
putword(rad50(SymUndef, "OCTPNT"), 0);
putword(0000371, 1);
putword(rad50(SymGlobal, "ONCE"), 0);
putword(0000170, 1);
putword(rad50(SymLocal, "ONCE2"), 0);
putword(0000355, 1);
putword(rad50(SymLocal, "ONCE3"), 0);
putword(0000365, 1);
putword(rad50(SymLocal, "ONCE4"), 0);
putword(0000317, 1);
putword(rad50(SymLocal, "ONCE5"), 0);
putword(0000315, 1);
putword(rad50(SymLocal, "ONCE6"), 0);
putword(0000324, 1);
putword(rad50(SymLocal, "ONCE7"), 0);
putword(0000332, 1);
putword(rad50(SymLocal, "ONCEPD"), 0);
putword(0000464, 1);
putword(rad50(SymLocal, "ONCEPN"), 0);
putword(0000010, 0);
putword(rad50(SymLocal, "OPOUT"), 0);
putword(0000421, 1);
putword(rad50(SymLocal, "OPOUT1"), 0);
putword(0000423, 1);
putword(rad50(SymLocal, "OPOUT2"), 0);
putword(0000434, 1);
putword(rad50(SymGlobal, "OUTPR"), 0);
putword(0004000, 0);
putword(rad50(SymGlobal, "PATCH"), 0);
putword(0000000, 1);
putword(rad50(SymGlobal, "PDP"), 0);
putword(0000003, 0);
putword(rad50(SymGlobal, "PICHN"), 0);
putword(0000100, 0);
putword(rad50(SymGlobal, "PROG"), 0);
putword(0000007, 0);
putword(rad50(SymUndef, "RADX10"), 0);
putword(0000325, 1);
putword(rad50(SymGlobal, "RUN"), 0);
putword(0200000, 0);
putword(rad50(SymGlobal, "RUNABL"), 0);
putword(0204000, 0);
putword(rad50(SymLocal, "STO1"), 0);
putword(0000140, 1);
putword(rad50(SymUndef, "SYSDAT"), 0);
putword(0000212, 1);
putword(rad50(SymLocal, "SYSDM"), 0);
putword(0000536, 1);
putword(rad50(SymGlobal, "SYSFIN"), 0);
putword(0777777777777, 1);
putword(rad50(SymLocal, "SYSM"), 0);
putword(0000524, 1);
putword(rad50(SymUndef, "SYSNUM"), 0);
putword(0000206, 1);
putword(rad50(SymUndef, "SYSSIZ"), 0);
putword(0000370, 1);
putword(rad50(SymLocal, "T"), 0);
putword(0000001, 0);
putword(rad50(SymGlobal, "TAC"), 0);
putword(0000001, 0);
putword(rad50(SymGlobal, "TAC1"), 0);
putword(0000002, 0);
putword(rad50(SymGlobal, "TEM"), 0);
putword(0000010, 0);
putword(rad50(SymUndef, "THSDAT"), 0);
putword(0000253, 1);
putword(rad50(SymUndef, "TIME"), 0);
putword(0000306, 1);
putword(rad50(SymLocal, "TIMEM"), 0);
putword(0000506, 1);
putword(rad50(SymLocal, "TIMLOP"), 0);
putword(0000254, 1);
putword(rad50(SymLocal, "TODATE"), 0);
putword(0000477, 1);
putword(rad50(SymLocal, "TSEXEC"), 0);
putword(0000474, 1);
putword(rad50(SymGlobal, "TTYATC"), 0);
putword(0020000, 0);
putword(rad50(SymGlobal, "TTYUSE"), 0);
putword(0010000, 0);
putword(rad50(SymGlobal, "USRMOD"), 0);
putword(0010000, 0);
putword(rad50(SymGlobal, "UUO"), 0);
putword(0000014, 0);
putword(rad50(SymUndef, "UUO0"), 0);
putword(0000151, 1);
/* Testing */
startitem(Code);
putword(fw(0, 0600), 1);
putword(fw(0, 0), 0);
putword(fw(0, 0), 0);
putword(fw(0, 0600), 1);
startitem(Symbols);
putword(rad50(SymGlobal, "ERROR"), 0);
putword(0646464, 0);
putword(rad50(SymUndef, "ERROR"), 0);
putword(0000602, 1);
putword(rad50(SymGlobal, "UUO0"), 0);
putword(04000, 0);
putword(rad50(SymGlobal, "CH1"), 0);
putword(04001, 0);
putword(rad50(SymGlobal, "CH2"), 0);
putword(04002, 0);
putword(rad50(SymGlobal, "CH3"), 0);
putword(04003, 0);
putword(rad50(SymGlobal, "CH4"), 0);
putword(04004, 0);
putword(rad50(SymGlobal, "CH5"), 0);
putword(04005, 0);
putword(rad50(SymGlobal, "CH6"), 0);
putword(04006, 0);
putword(rad50(SymGlobal, "CH7"), 0);
putword(04007, 0);
startitem(Start);
putword(0100, 0);
startitem(End);
putword(0, 0);
putword(0, 0);
startitem(Nothing);
dump();
{
FILE *f;
if(f = fopen("test.rel", "wb"), f == NULL)
return 1;
dumpfile(f);
fclose(f);
}
return 0;
}