From 6311e92a7cd14f719b6a40670325211f1d13b8e0 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 9 Oct 2016 22:36:09 +0200 Subject: [PATCH] started working on a linker --- link/ld6.c | 388 ++++++++++++++++++++++ link/pdp6common.c | 321 ++++++++++++++++++ link/pdp6common.h | 12 + link/reltest.c | 811 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1532 insertions(+) create mode 100644 link/ld6.c create mode 100644 link/pdp6common.c create mode 100644 link/pdp6common.h create mode 100644 link/reltest.c diff --git a/link/ld6.c b/link/ld6.c new file mode 100644 index 0000000..264d4b6 --- /dev/null +++ b/link/ld6.c @@ -0,0 +1,388 @@ +#include +#include +#include +#include +#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<>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; +} diff --git a/link/pdp6common.c b/link/pdp6common.c new file mode 100644 index 0000000..a88003e --- /dev/null +++ b/link/pdp6common.c @@ -0,0 +1,321 @@ +#include +#include +#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; +} diff --git a/link/pdp6common.h b/link/pdp6common.h new file mode 100644 index 0000000..2f26912 --- /dev/null +++ b/link/pdp6common.h @@ -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); diff --git a/link/reltest.c b/link/reltest.c new file mode 100644 index 0000000..6ef140f --- /dev/null +++ b/link/reltest.c @@ -0,0 +1,811 @@ +#include +#include +#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; +}