Kidsgrove Algol Compiler - Brick 00

This assembler listing has hot links for all references to subroutines.

You can click on the routine name in code such as JS.pproc; and jump to the routine. When you have seen enough of it, you can use the back button to carry on where you left off.

Started

Loaded 48042 bytes for KAB00.k4
Reached end of file


=============== Second pass
===========================


                                                                       !begin
                                                                       / KAB00 replacement
                                                                       / There is documentation at the end of this source file marked by a line of equals signs

                                                                       Z0 = 11103:   / Z11 should be accessed as F.Z0-11
                                                                       Z50 = Z0-50:
                                                                       Z38 = Z0-38:      / see z38tab label
                                                                                         /  CM+LP      / D1   TINT;B100 print call matrix and level parameters
                                                                                         /  TABLES     / D2   TINT;B040
                                                                                         /  ORIG-SW    / D3   TINT;B020  indicates use of original software for assembly
                                                                                         /  TEXT       / D4   TINT;B010
                                                                                         /  NO-OPT     / D5   TINT;B004
                                                                                         /  NO-TEST    / D6   TINT;B002
                                                                                         /  NO-WARN    / D7   TINT;B001
                                                                                         /  L+G*4d     / D8   TINT;B200000
                                                                                         /  KALGOL     / D9   TINT;B100000
                                                                                         /  WALGOL     / D10  TINT;B40000
                                                                                         /  USERCODE;  / D11  TINT;B20000
                                                                                         /  FORTRAN    / D12  TINT;B10000
                                                                                         /  UC/RLB     / D13  TINT;B4000
                                                                                         /  KAL4       / D14  TINT;B2000
                                                                                         /  D15        / D15  TINT;B1000
                                                                                         /  D16        / D16  TINT;B400

                                                                       / -------------------------------------------------------------------

                                                                       prog=0:      /form B-block
    0/0: 200 262 366|000 000 000                                               J.main;  =H0;
    1/0: 000 000 000|000 053 140                                               =H0; =H11104;
    2/0: 034 053 102 256 030 220                                               =#07025502 53414220;
    3/0: 102 112 036 173 134 365                                               =P 0DH--USU;
    4/0: 200 321 236|200 321 236                                       prog=4: JS.crash;  JS.crash;   /restart

                                                                       bsz = 256:         / defines size of MT blocks - comments assume 512

                                                                       / -------------------------------------------------------------------
                                                                       prog=8:
   10/0: 000 000 000 000 001 253                                         = Q 0/0/chan+6;        / pointer to channel 6 for use by brick83()

   11/0: 000 000 000 000 000 000                                       ch4back: = 0;            / NZ indicates that channel 4 is backwards
   12/0: 000 000 000 000 000 000                                       ch4end: = 0;             / block no at end of channel 4 - set by interchange
   13/0: 000 000 000 000 000 000                                       par1: = 0;
   14/0: 000 000 000 000 000 000                                       resms: = 0;                            // These are the result most-sig asnd least-sig halves ...
   15/0: 000 000 000 000 000 000                                       resls: = 0;                            // ... , but also used as flags to cause writes etc
   16/0: 000 000 000 000 000 000                                       w1: =0;                 / handy working locations analagous to W1 in KAB00
   17/0: 000 000 000 000 000 000                                       channo: =0;             / N.B. channel 8 is denoted by 0 in par1 - see R8P1 in KAB01
   20/0: 000 000 000 000 000 000                                       kq14: =0;
   21/0: 000 000 000 000 000 000                                       kq13: =0;
   22/0: 377 377 377 377 377 377                                         = -1;                 / 32 -ve numbers to stop KAB99 from trying to deallocate == must be word 18
   23/0: 377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377
                                                                         = -1; = -1; = -1; = -1; = -1; = -1; = -1;
   32/0: 377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377
                                                                         = -1; = -1; = -1; = -1; = -1; = -1; = -1; = -1;
   42/0: 377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377
                                                                         = -1; = -1; = -1; = -1; = -1; = -1; = -1; = -1;
   52/0: 377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377|377 377 377 377 377 377
                                                                         = -1; = -1; = -1; = -1; = -1; = -1; = -1; = -1;

                                                                       diagbuff:
   62/0: 000 000 000 000 000 000                                         = 0;       / stream no
   63/0: 064 332 263 225 164 000                                         = #1515526345272000;       / *a *a JSE70 *s;
   64/0: 000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|001 347 200 377 377 377|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|377 377 377 377 377 377|000 000 000 000 007 135
                                                                         = 0; = 0; = 0; = #00363600 77777777;  = 0; = 0; = 0; =-1; = #3535;
   75/0: 000 000 000 062 000 074                                       out8wd: = Q0/diagbuff/prog-1;
   76/0: 001 004 020 101 004 017                                         = #0020202020202017;
   77/0: 040 202 010 040 202 001                                         = #1010101010101001;
  100/0: 251 004 020 101 003 320                                       linkwd: = #5220202020201720;
  101/0: 050 242 212 050 242 212                                       rad10: = #1212121212121212;
  102/0: 002 053 053 001 004 020                                       blkwd: = #42545300202020;
  103/0: 377 377 377 377 344 000                                       tester: = #77777777 77762000;
                                                                          / do not know exactly what occupied the space up to 70
                                                                          / seems that these words are never referenced
                                                                          / though there is reference to E48 in KAB01 source

                                                                       // this is OUT70 for for reverse engineering KAB00 JSE70
                                                                       // bottom 16 bits of N1 (i.e. M part) are function number -- bottom 6 bits are almost always the channel number
                                                                       // Copy-typed documentation from Science Museum in out70.c
                                                                       // Main if statement below shows known options, note 121... has two params and seems to be double-buffered open
                                                                       // C and I parts of N1 are lo and hi addresses of buffer area.
                                                                       // This is used at location 70 to implement JSE70, after which
                                                                       // return from JSE70 is via EXIT2, and leaves one result (usually) which is a Q-store word to step through the buffer
                                                                       // Some functions leave no rsult which is indicated by resls -ve
                                                                       // EXIT1 is failure exit and appears not to return a value
                                                                       // There is an additional OUT 70 for diagnostic purposes. which is over and above the original JSE70 provision
                                                                       // N1 is in Q-store format:   Q lo / hi / 0
                                                                       // and it prints store from lo to hi inclusive.
                                                                       // N2 is in Q-store format:   Q ignored / lab / n
                                                                       // where lab is the label of the store section, e.g. YX, V, Y, Z, H
                                                                       // and n is the number within the section at which is starts. (Z-stores number backwards)
                                                                       !begin

                                                                       prog=70:   / entry to PANACEA
                                                                          / start with loading diagnostic info into buffer
  106/0: 042|164 101|167 041|300 000 076|300 000 077|066|067|011|301 000 064
                                                                          DUP; SHL+32; SHC+16; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+2;
  110/5: 042|164 301|300 000 076|300 000 077|066|067|011|301 000 065      DUP; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+3;
  113/2: 042|164 041|164 301|300 000 076|300 000 077|066|067|011|301 000 066
                                                                          DUP; SHL+16; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+4;
  116/1: 041|033|042|301 000 070|042|301 000 071|301 000 072              ZERO; NOT; DUP; S.diagbuff+6; DUP; S.diagbuff+7; S.diagbuff+8;
  120/2: 304 007 236|164 031|164 365|301 000 067                          SET#3636; SHL+12; SHL-6; S.diagbuff+5;

  122/0: 041|223 300 126                                                  ZERO; JEJ.ej;                              / might have been JE70
  122/4: 052|300 000 077|041|173 000|042|174 000|166 347|012              ERASE; F.out8wd+2; ZERO;; FLINK; DUP; SLINK; SHLD-13; PERM;
  124/5: 167 033|067|164 015|011|300 000 100|011                          SHC+13; FRB; SHL+6; OR; F.linkwd; OR;
  126/3: 301 000 063                                                   ej:S.diagbuff+1;     / to print link -- end of diagnostic output prep

  127/0: 042|304 000 074|054|304 000 004|015|224 140 265                  DUP; SET#74; AND; SET4; NEV; J=Z.usemt;       / just do channels 4, 5, 6 and 7
  131/0: 042|304 000 077|054|304 000 021|220 020 244                      DUP; SET#77; AND; SET17; J=.ch17;             / also try channel 17 now
  132/5: 041|220 020 163                                                  ZERO; J=.ch0;                                 / the mysterious channel 0
  133/3: 304 000 003|015|224 140 265                                      SET3; NEV; J=Z.usemt;                         / also try channel 3 now

  134/4: 042|304 336 010|015|164 101|220 141 165                          DUP; SET#157010; NEV; SHL+32; J=Z.brickch;    / brick change
  136/2: 042|304 177 374|054|304 000 100|015|224 140 265                  DUP; SET#77774; AND; SET#100; NEV; J=Z.usemt; / only used for devices 1 and 2 in KAB99
  140/2: 304 000 106|200 220 000                                          SET70; OUT;                                   / otherwise use OUT 70 - should never happen
  141/2: 300 001 266|301 000 004                                          F.k4; S.4;
  142/2: 202 360 001                                                      EXIT.1;

  142/5: 017                                                           *;      / word align
  143/0: 002 374 045 270 000 000                                       popen: =P *sOPEN *3s;
  144/0: 002 073 057 316 120 000                                       pclose: =P *sCLOSE *2s;
  145/0: 003 051 141 220 000 000                                       pread: =P *sREAD *3s;
  146/0: 003 174 251 322 120 000                                       pwrite: =P *sWRITE *2s;
  147/0: 002 233 264 227 040 000                                       pinter: =P *sINTER *2s;
  150/0: 002 070 256 000 000 000                                       pcbn: =P *sCBN *4s;
  151/0: 002 111 166 272 360 000                                       pdevno: =P *sDEVNO *2s;
  152/0: 002 111 166 323 220 000                                       pdevty: =P *sDEVTY *2s;
  153/0: 002 050 143 255 350 300                                       pbackc: =P *sBACK-C *s;
  154/0: 002 050 143 255 351 100                                       pbacke: =P *sBACK-E *s;
  155/0: 003 072 351 300 000 000                                       pskip: =P *sSKIP *3s;
  156/0: 003 014 251 273 100 000                                       pprint: =P *sPRINT *2s;
  157/0: 002 310 236 216 300 000                                       plbclose: =P *sLB-CL *2s;
  160/0: 002 152 156 220 000 000                                       pfind: =P *sFIND *3s;
  161/0: 002 150 151 260 000 000                                       pfail: =P *sFAIL *3s;

  162/0: 000 017 300 377 377 377                                       fmask: = #00007700 77777777;

  163/0: 052                                                           ch0: ERASE;     / mysterious read at start of compilation
  163/1: 042|167 341|170 376                                              DUP; SHC-16; SQ15;
                                                                       !begin
  164/0: 171 356|301 000 020                                              FQ14; S.kq14;             / preserve Q-stores used
  164/5: 151 016                                                          MFRQ0/14;                 / set channel number to 0
  165/1: 171 370|304 337 000|015|205 140 174                              FC15; SET#157400; NEV; JNEZ.tryopen;
  166/4: 300 000 160|301 000 067                                          F.pfind; S.diagbuff+5;    / FIND -- position channel 0 to read specified item
  167/4: 167 041|170 362                                                  SHC+16; SM15;             / address of search string
  170/2: 100 360|300 000 162|054|301 000 071|110 360|301 000 072          FMM15/0; F.fmask; AND; S.diagbuff+7; FMMN15/0; S.diagbuff+8;
                                                                                                    / don't always print 0702 might upset ee9
  172/4: 110 360|100 360|166 255|052                                      FMMN15/0; FMM15/0; SHLD-42; ERASE;
  173/5: 204 321 122                                                      JS.seekch0;
  174/2: 201 261 106                                                      J.prtprt;       / bit naughty, but avoids overwrite of search string if nest not empty

  174/5: 052                                                           tryopen: ERASE;    / remove original parameter
  175/0: 171 370|304 242 100|015|200 140 202                              FC15; SET#121100; NEV; JNEZ.tryread;
  176/3: 052                                                              ERASE;                   / remove second buffer parameter
  176/4: 300 000 143|301 000 067                                          F.popen; S.diagbuff+5;
  177/4: 154 017|171 376|301 001 245                                      CFRQ0/15; FQ15; S.chan;
  200/5: 171 364|170 363|200 261 073                                      FI15; SRM15; J.q15res;   / empty buffer so it will call read next

                                                                       tryread:
  202/0: 171 370|304 340 000|015|204 140 211                              FC15; SET#160000; NEV; JNEZ.tryclose;
  203/3: 300 000 145|301 000 067                                          F.pread; S.diagbuff+5;

  204/3: 300 001 245|170 376                                              F.chan; SQ15;             / N.B. I cannot remember why the device is stored as channel 8
  205/2: 300 001 255|164 301|170 370                                      F.chan+8; SHL-32; SC15;   / but I think that it relates to a time when open and close 0 were like other channels
  206/3: 124 360|121 360                                                  MFRQ15; PARQ15;
  207/1: 300 001 245|164 341|170 363                                      F.chan; SHL-16; SRM15;    / address of buffer
  210/2: 304 000 040|170 370                                              SET32; SC15;              / data blocks are always 32 words on channel 0
  211/1: 200 261 073                                                      J.q15res;

                                                                       tryclose:                    / close only comes after reading library material
  211/4: 171 370|304 140 000|015|204 140 214                              FC15; SET#060000; NEV; JNEZ.trydvno;
  213/1: 300 000 144|301 000 067                                          F.pclose; S.diagbuff+5;
                                                                        / F.chan+8; SQ15; MRWDQ15;  / don't rewind the system tape
  214/1: 202 261 073                                                      J.nores;

                                                                       trydvno:
  214/4: 171 370|304 000 100|015|201 140 220                              FC15; SET#0100; NEV; JNEZ.tryfail;
  216/1: 300 000 151|301 000 067                                          F.pdevno; S.diagbuff+5;
  217/1: 300 001 255|202 261 073                                          F.chan+8; J.nores;        / return device for channel 0 -- see comment above

                                                                       tryfail:
  220/1: 171 370|304 000 200|015|203 141 060                              FC15; SET#0200; NEV; JNEZ.nokando;
  221/4: 300 000 161|301 000 067                                          F.pfail; S.diagbuff+5;

  222/4: 300 000 240|171 362|067                                          F.radix; FM15; FRB;    / failure number
  223/4: 304 002 366|042|170 363|041|103 360                              SET.buff; DUP; SRM15; ZERO; SMMQ15/0;
  225/1: 300 000 161|103 360|170 364                                      F.pfail; SMMQ15/0; SI15;
  226/2: 300 000 241|011|042|101 360                                      F.chars; OR; DUP; SMM15/0;
  227/3: 171 376|304 000 010|200 220 000                                  FQ15; SET8; OUT;
  230/5: 033|027|033|027|101 360                                          NOT; NEG; NOT; NEG; SMM15/0;
  231/5: 304 000 030|301 002 366                                          SET#30; S.buff;
  232/5: 171 376|304 000 010|200 220 000                                  FQ15; SET8; OUT;
  234/1: 202 321 073|136 010|056                                          JS.nores; MRWDQ0; +;   / so that exit.1 comes back here
  235/1: 304 014 055                                                      SET#6055;              / call brick PM
  235/4: 170 364|304 336 010|170 362                                      SI15; SET#157010; SM15;
  236/5: 171 376|200 260 106                                              FQ15; J.70;
                                                                        ///   F.pmid+1; F.pmid; SET1; OUT;
  237/4: 017|017|050 242 212 004 242 201                               *radix: = #1212121201121201;
  241/0: 001 004 020 075 004 000                                       chars:  = #0020202017202000;
  242/0: 034 053 102 256 030 260                                       pmid:   = #0702550253414260;
  243/0: 265 347 236 171 347 236                                               = #5536363636363636;
                                                                       !end

  244/0: 052                                                           ch17: ERASE;              / operation on ABS printer -- channel 17
                                                                       !begin
  244/1: 171 356|301 000 020                                              FQ14; S.kq14;   / preserve Q-stores used
  245/0: 171 336|301 000 021                                              FQ13; S.kq13;
  245/5: 167 341|170 376                                                  SHC-16; SQ15;   / Shifted parameter word to Q15 so that I15 and M15 are lo and hi

                                                                       tryprint:
  246/3: 171 370|304 270 321|015|201 140 256                              FC15; SET#134321; NEV; JNEZ.tryopen;
  250/0: 300 000 156|301 000 067                                          F.pprint;  S.diagbuff+5;
  251/0: 171 362|171 364|042|170 343|036                                  FM15; FI15; DUP; SRM14; -;
                                                                       /  NOT; NEG;                     / there is doubt as to whether we need this
  252/2: 170 350                                                          SC14;                         / see http://kdf9.settle.dtdns.net/KDF9/Blythe2/p46.jpg
  252/4: 204 321 273                                                      JS.abstolp;
  253/1: 304 000 003|170 342|041|033|301 000 014                          SET3; SM14; ZERO; NOT; S.resms;
  254/5: 300 000 021|170 336                                              F.kq13; SQ13;
  255/4: 200 261 062                                                      J.windup;

                                                                       tryopen:
  256/1: 171 370|304 375 377|054                                          FC15; SET#176777; AND;
  257/1: 304 240 021|015|205 140 264                                      SET#120021; NEV; JNEZ.notyetimp;    / test for open chan 17
  260/2: 300 000 143|304 014 000|011|301 000 067                          F.popen; SET#6000; OR; S.diagbuff+5;
  262/0: 171 370|167 355                                                  FC15; SHC-10;                       / -ve if single buffered
  262/4: 304 002 366|200 321 267                                          SET.opbuff; JS.startlp;             / set printer buffer pointers
  263/4: 201 041 106                                                      JGEZ.prtprt;                        / J if single buffered
  264/1: 052|201 261 106                                                  ERASE; J.prtprt;                    / remove extra buffer parameter

                                                                       notyetimp:
  264/5: 200 321 236|136 010                                              JS.crash;  MRWDQ0;
                                                                       !end

                                                                       usemt:    // version using channels on emulated MT rather than OUT 70
  265/4: 171 356|301 000 020                                              FQ14; S.kq14;
  266/3: 041|301 000 014|041|301 000 015                                  ZERO; S.resms;   ZERO; S.resls;
  267/5: 042|304 000 037|054|170 342                                      DUP; SET#37; AND; SM14;                     / channel number
  271/0: 042|301 000 016|167 341|170 376|171 370|301 000 013              DUP; S.w1; SHC-16; SQ15; FC15; S.par1;

                                                                                     / test for WRITE
  273/1: 171 370|304 376 001|054|304 340 001|015                          FC15; SET#0177001; AND; SET#0160001; NEV; / write to channel -- odd numbered channel
  274/5: 201 140 317|300 000 146|301 000 067                              JNEZ.notwrite;  F.pwrite; S.diagbuff+5;
  276/2: 202 320 300                                                      JS.mtwrite;
  276/5: 304 377 375|301 000 014|200 261 062                              SET-3; S.resms; J.windup;

                                                                       mtwrite:     / subroutne to set block size (only needed on channel 5) and write to MT
  300/2: 171 370|304 000 100|054|200 140 303                              FC15; SET#100; AND; JNEZ.partblk;
  301/5: 300 341 245|033|027|170 362                                      FM14.chan; NOT; NEG; SM15;                / set HWM to the top
                                                                       partblk:
                                                                       wrclose:                  / subroutne to deal with final block
  303/0: 171 342|304 000 005|015|202 140 313                              FM14; SET5; NEV; JNEZ.notw5;
  304/3: 171 362|042|300 341 245|164 341|170 362|171 362                  FM15; DUP; FM14.chan; SHL-16; SM15; FM15;      / N1 start of block, N2 end of data M15 = N1
  306/3: 036|027|033|101 360                                              -; NEG; NOT; SMM15/0;                     / no of useful words in block
                                                                                                               / did we actually need to clear down the end of the block
  307/2: 042|170 363|300 341 245|033|027|065|036|170 370                  DUP; SRM15; FM14.chan; NOT; NEG; REV; -; SC15;    / Perhaps we should
  311/2: 242 360 313                                                      JCZ15.nofill;
  311/5: 017|041|103 360|017|017|017|177 360                              *ZERO; SMMQ15/0; *JCNZS15;   / short loop not really an economy on emulation
                                                                       nofill:
                                                                       notw5:
  313/2: 300 341 245|170 376|244 360 316                                  FM14.chan; SQ15; JCZ15.xh;   / C15 will be zero for channel 3
  314/4: 130 360|121 360                                                  MWQ15; PARQ15;
  315/2: 300 341 256|033|027|301 341 256                                  FM14.cbn; NOT; NEG; SM14.cbn;
  316/4: 200 360 000                                                   xh: EXITH;

                                                                       notwrite:    / test for READ
  317/1: 171 370|304 376 001|054|304 340 000|015                          FC15; SET#0177001; AND; SET#0160000; NEV; / read from channel -- even numbered channel
  320/5: 202 140 334|300 000 145|301 000 067                              JNEZ.notread;  F.pread; S.diagbuff+5;
  322/2: 300 341 245|170 376                                              FM14.chan; SQ15;
  323/1: 171 342|300 000 011|015|221 140 330                              FM14; F.ch4back; NEV; J=Z.backread;
  324/4: 124 360|121 360                                                  MFRQ15; PARQ15;
  325/2: 300 341 256|033|027|301 341 256                                  FM14.cbn; NOT; NEG; SM14.cbn;
  326/4: 304 377 376|301 000 014|200 261 062                              SET-2; S.resms; J.windup;

                                                                       backread:                                     / backwards read only on channel 4
  330/1: 126 360|121 360                                                  MBRQ15; PARQ15;
                                                                       /  SET#7171; FQ15; SHLD+16; SET70; OUT;       / diagnostic commented out
  330/5: 300 341 256|027|033|301 341 256                                  FM14.cbn; NEG; NOT; SM14.cbn;
  332/1: 100 360|042|170 370|027|172 362|144 360                          FMM15/0; DUP; SC15; NEG; S+M15; IONE15;    / scan data word is result
  333/5: 200 261 073                                                      J.q15res;;

                                                                       notread:    / test for INITIATE (= OPEN)
  334/2: 171 370|304 374 000|054|304 240 000|015                          FC15; SET#0176000; AND; SET#0120000; NEV;   / (par1&0176000) == 0120000 initiate channel
  336/0: 204 140 371|300 000 143|301 000 067                              JNEZ.notopen;  F.popen; S.diagbuff+5;
  337/3: 171 370|167 355|205 040 340|052                                  FC15; SHC-10; JGEZ.prog+0s4; ERASE;         / remove unwanted param for double I/O
  340/5: 300 341 245|041|166 041|170 370|171 376|301 341 245              FM14.chan; ZERO; SHLD+16; SC15; FQ15; SM14.chan;   / set up channel control word
  343/0: 220 140 344|200 321 236                                          J=Z.prog+1; JS.crash;                 / illegal if channel already open
  344/0: 300 000 013|304 360 200|054|304 240 200|015|202 140 357             F.par1; SET#0170200; AND; SET#0120200; NEV; JNEZ.fwd;  / J if not backwards
  346/2: 304 000 004|301 000 011                                             SET4; S.ch4back;                   / indicates backwards reading on ch 4

                                                                                  / if  ( par1 == 0121204 )          // backwards read from current position on channel 4
  347/2: 300 000 013|304 242 204|015|203 140 352                             F.par1; SET#0121204; NEV; JNEZ.tryend;  / J if not chan 4 backwards from current
  351/0: 300 000 153|301 000 067                                             F.pbackc; S.diagbuff+5;
  352/0: 200 261 073                                                         J.q15res;

                                                                       tryend:
                                                                                        / if  ( par1 == 0121704 )     // backwards read from end on channel 4
  352/3: 300 000 013|304 243 304|015|203 141 060                             F.par1; SET#0121704; NEV; JNEZ.nokando;  / J if not chan 4 backwards
  354/1: 300 000 154|301 000 067                                             F.pbacke; S.diagbuff+5;
  355/1: 300 000 012|300 341 256|015                                         F.ch4end; FM14.cbn; NEV;
  356/2: 223 140 370                                                         J=Z.currr;              / not yet implemented if not already at at end

  356/5: 203 261 060                                                         J.nokando;

                                                                       fwd:  /  sprintf(sbuff, "Open channel %d (double)", chan);
  357/2: 041|033|301 000 014                                                    ZERO; NOT; S.resms;
  360/1: 171 342|304 000 021|015|222 141 073                                    FM14; SET17; NEV; J=Z.nores;                / J if channel 17 - no result
  361/4: 300 000 013|304 000 101|054|027|033|222 140 367                        F.par1; SET#101; AND; NEG; NOT; J=Z.curr;   / J if current position
  363/4: 041|301 341 256                                                           ZERO; SM14.cbn;                          / number of block behind tape head
  364/2: 136 370                                                                   MRWDQ15;
  364/4: 152 376|304 000 002|170 364|304 000 001|170 362                           IFRQ15/14; SET2; SI15; SET1; SM15;       / needs block size in increment for DH's tape emulation
  366/4: 134 360|121 360                                                           MFSKQ15; PARQ15;                         / skip label block
  367/2: 171 342|167 377|220 041 062                                   curr: FM14; SHC-1; JLTZ.windup;                      / same as for write on a write channel
  370/3: 171 364|170 363|200 261 073                                   currr:  FI15; SRM15; J.q15res;                       / deliver 0 in C result to indicate empty buffer on read

                                                                       notopen:    / test for CLOSE READ
  371/4: 171 370|304 376 001|054|304 140 000|015                          FC15; SET#0177001; AND; SET#0060000; NEV;    / ( (par1&0177000) == 0060000 ) // close read channel
  373/2: 201 141 001|300 000 144|301 000 067                              JNEZ.notrclose;  F.pclose; S.diagbuff+5;
  374/5: 300 341 245|164 301|167 341|301 341 245                          FM14.chan; SHL-32; SHC-16; SM14.chan;
  376/3: 171 342|304 000 004|015|202 141 073                              FM14; SET4; NEV; JNEZ.nores;
  400/0: 041|301 000 011|202 261 073                                      ZERO; S.ch4back; J.nores;                    / ensure that the next open is not backwards by accident

                                                                       notrclose:    / test for CLOSE WRITE
  401/1: 171 370|304 376 001|054|304 140 001|015                          FC15; SET#0177001; AND; SET#0060001; NEV;    / ( (par1&0177000) == 0060000 ) // close write channel
  402/5: 204 141 013|300 000 144|301 000 067                              JNEZ.notclose;  F.pclose; S.diagbuff+5;
  404/2: 171 342|304 000 003|015|205 141 006                              FM14; SET3; NEV; JNEZ.notlp;                 / j if not printer
  405/5: 201 321 271|203 261 011                                          JS.closelp; J.donotwrite;
                                                                       notlp:
  406/5: 300 341 245|164 341|171 362|015                                  FM14.chan; SHL-16; FM15; NEV;                / test for empty buffer
  410/1: 164 101|223 141 011                                              SHL+32; J=Z.donotwrite;                      / test to see if no data currently in buffer
  411/0: 200 320 303                                                      JS.wrclose;                                  / write final block
                                                                       donotwrite:
  411/3: 300 341 245|167 041|164 101|301 341 245|202 261 073              FM14.chan; SHC+16; SHL+32; SM14.chan; J.nores;  / mark channel as closed

                                                                       notclose:    / test for INTERCHANGE
  413/4: 171 370|304 377 370|054|042|304 010 000|015                      FC15; SET#0177770; AND; DUP; SET#04000; NEV;  /  ( (par1&0177770) == 04000          // interchange sussed out from the code
  415/3: 222 141 017                                                      J=Z.interch;
  416/0: 304 344 000|015                                                  SET#0162000; NEV;                             /  (par1&0177770) == 0162000 )        // interchange according to the PANACEA documentation
  416/4: 203 141 027|041                                                  JNEZ.notintch; ZERO;
  417/2: 052|300 000 147|301 000 067                                   interch: ERASE;  F.pinter; S.diagbuff+5;
  420/3: 300 341 245|300 341 246|301 341 245|301 341 246                  FM14.chan; FM14.chan+1; SM14.chan; SM14.chan+1;
  422/3: 300 341 256|300 341 257|301 341 256|301 341 257                  FM14.cbn; FM14.cbn+1; SM14.cbn; SM14.cbn+1;
  424/3: 171 342|304 000 004|015|202 141 073                              FM14; SET4; NEV; JNEZ.nores;
  426/0: 300 341 256|301 000 012                                          FM14.cbn; S.ch4end;                           / remember end of channel 4
  427/0: 202 261 073                                                      J.nores;

                                                                       notintch:    / test for DEVICENO (undocumented)
  427/3: 171 370|304 377 300|054|304 000 100|015                          FC15; SET#0177700; AND; SET#0100; NEV;        / ( (par1&0177700) == 0100 )
  431/1: 204 141 033|300 000 151|301 000 067                              JNEZ.notdevno;  F.pdevno; S.diagbuff+5;       / undocumented, but it seems that it delivers MT unit number in D0-15
  432/4: 300 341 245|202 261 073                                          FM14.chan; J.nores;

                                                                       notdevno:    / test for CBN current block number
  433/4: 171 370|304 377 370|054|304 110 000|015                          FC15; SET#0177770; AND; SET#044000; NEV;      / ( (par1&0177770) == 044000 )   // current block number ???
  435/2: 205 141 037|300 000 150|301 000 067                              JNEZ.notcbn;  F.pcbn; S.diagbuff+5;
  436/5: 300 341 256|202 261 073                                          FM14.cbn;  J.nores;

                                                                       notcbn:     / test for SKIP on channel 4
  437/5: 171 370|304 152 004|015|200 141 052                              FC15; SET#065004; NEV; JNEZ.try303;       / skip to absolute block no on channel 4
  441/2: 300 000 155|301 000 067                                          F.pskip; S.diagbuff+5;
  442/2: 171 362|027|033                                                  FM15; NEG; NOT;                           / CBN is no of block just read
  443/0: 300 341 245|170 376|304 001 000|170 364                          FM14.chan; SQ15; SET256; SI15;            / block size in I15 -- kludge for DH's emulator
  444/4: 042|300 341 256|065|301 341 256                                  DUP; FM14.cbn; REV; SM14.cbn;             / set new position
  446/0: 036|042|170 362|042|224 041 050                                  -; DUP; SM15; DUP; JLTZ.bsk;              / J if not forward
  447/2: 222 141 073                                                      J=Z.nores;                                / do nothing if we are already in the right place
  447/5: 134 360|202 261 073                                              MFSKQ15; J.nores;
  450/4: 027|170 362|136 360|202 261 073                               bsk: NEG; SM15; MBSKQ15; J.nores;

                                                                       try303:      / test for request to know device type for channel 3
  452/0: 171 370|304 000 303|015|203 141 055                              FC15; SET#0303; NEV; JNEZ.try61407;
  453/3: 300 000 152|301 000 067                                          F.pdevty; S.diagbuff+5;
  454/3: 304 000 001|202 261 073                                          SET1; J.nores;                      / channel 3 is always on the printer

                                                                       try61407:                              / write last block and close channel 7 only in KAB99
  455/3: 171 370|304 143 007|015|203 141 060                              FC15; SET#61407; NEV; JNEZ.nokando;
  457/0: 300 000 157|301 000 067                                          F.plbclose; S.diagbuff+5;
  460/0: 203 261 011                                                      J.donotwrite;                       / this is only used at the very end and is basically ignored

                                                                                / things not yet implemented
  460/3: 202 321 073|136 010|056|200 360 000                           nokando: JS.nores; MRWDQ0; +; EXITH;   / print diagnostics and return failure

                                                                       windup:  / deliver result, etc
  462/0: 300 000 015|033|300 000 014|054|202 041 073                        F.resls; NOT; F.resms; AND; JGEZ.nores;
  463/5: 300 341 245|042|167 341|042|170 363                                FM14.chan; DUP; SHC-16; DUP; SRM15;
  465/2: 036|033|027|170 370                                                -; NOT;NEG; SC15;                          / only works for chan 6 and 7
  466/1: 171 342|304 000 005|015|205 141 070                                FM14; SET5; NEV; JNEZ.notch5;
  467/4: 140 360|143 360|200 261 073                                        M+I15; DC15; J.q15res;                     / space for block size word
                                                                       notch5:
  470/5: 171 342|304 000 004|015|200 141 073                                FM14; SET4; NEV; JNEZ.q15res;               / not channel 4
  472/2: 102 360|170 370                                                    FMMQ15/0; SC15;                            / pick size word from start of block
                                                                       q15res:
  473/0: 171 376                                                           FQ15;
  473/2: 300 000 067                                                   nores: F.diagbuff+5;                  / exit leaving no result
  473/5: 171 342|011|304 000 020|011                                       FM14; OR; SET#20; OR;          / path for failure exit
  475/0: 301 000 067                                                       S.diagbuff+5;   / channel no in diagnostic
                                                                       / diagnostic
  475/3: 221 241 106                                                      JEN.prtprt;
  476/0: 042|164 301|300 000 076|300 000 077|066|067|011|301 000 070      DUP; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+6;
  500/3: 042|164 041|164 301|300 000 076|300 000 077|066|067|011|301 000 071
                                                                          DUP; SHL+16; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+7;
  503/2: 042|167 341|164 301|300 000 076|300 000 077|066|067|011|301 000 072
                                                                          DUP; SHC-16; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+8;
                                                                       prtprt:
  506/1: 300 000 101|300 341 256|067|300 000 102|011|301 000 073          F.rad10; FM14.cbn; FRB; F.blkwd; OR; S.diagbuff+9;    / print block number
  510/3: 300 341 245|164 025|164 255|304 360 020|011|301 000 074          FM14.chan; SHL+10; SHL-42; SET#170020; OR; S.diagbuff+10;
  512/5: 300 000 067|164 365|164 015|300 000 145|221 021 121              F.diagbuff+5; SHL-6; SHL+6; F.pread; J=.nodiag;
  515/0: 300 000 146|221 021 121                                          F.pwrite; J=.nodiag;
  516/0: 300 000 156|221 021 121                                          F.pprint; J=.nodiag;
  517/0: 041|301 000 062|300 000 075|304 000 010|200 220 000              ZERO; S.diagbuff; F.out8wd; SET8; OUT;
  521/1: 052                                                           nodiag: ERASE;
  521/2: 300 000 020|170 356                                              F.kq14; SQ14;                     / exit after restoring Q14

                                                                       /    JEN.xxxxx;
                                                                       /     F.tester; JNE.xxxxx;
                                                                       /     MRWDQ0;
  522/1: 202 360 001                                                   xxxxx:     EXIT.1;


                                                                       !end

                                                                       seekch0:
                                                                          /  The system tape is mostly (always?) left positioned before an 8-word B-block format block
                                                                          /  This routine looks to see if required item is next, and if not rewinds
                                                                       !begin   !label seek;
  522/4: 301 001 163                                                         S.seek;
                                                                           / F.seek; SHL+18; S.buff+1; F.out8; SET2; -;
                                                                           / SET8; OUT;

  523/1: 300 001 255|170 356                                                 F.chan+8; SQ14;             / access channel 0
  524/0: 304 002 366|170 344                                                 SET.buff; SI14;
  524/5: 304 000 007|170 342|140 340                                         SET7; SM14; M+I14;
  526/0: 124 340|121 340                                                     MFRQ14; PARQ14;             / read immediate block -- assumed to be a b-BLOCK
  526/4: 300 002 371|300 002 370|166 255|052                                 F.buff+3; F.buff+2; SHLD-42; ERASE;
  530/1: 300 001 163|220 021 155|052                                         F.seek; J=.qfound; ERASE;
  531/2: 157 357|136 370                                                     QFRQ14/15; MRWDQ15;         / not next file - so rewind -- may need +ve modifier
  532/0: 304 000 002|170 364|304 000 001|170 362                             SET2; SI15; SET1; SM15;
  533/4: 134 360|121 360                                                     MFSKQ15; PARQ15;            / skip the label block

                                                                       loop:
  534/2: 304 000 007|170 342|140 340                                         SET7; SM14; M+I14;
  535/3: 124 340|121 340                                                     MFRQ14; PARQ14;             / read b-BLOCK
  536/1: 300 002 371|300 002 370|166 255|052                                 F.buff+3; F.buff+2; SHLD-42; ERASE;

  537/4: 300 002 375|170 376                                                 F.buff+7; SQ15;             / filler word
  540/3: 300 001 163|225 021 155                                             F.seek; J=.found;
  541/3: 300 001 164|015|223 141 156                                         F.kab99; NEV; J=Z.notfound;

  542/4: 241 361 151                                                         JCZ15.final;                / fragmented C-block C15 = no of 512 frags
  543/1: 304 001 000                                                         SET.bsz;                    / block size for fragmented C-blocks
  543/4: 171 364|201 141 145                                                 FI15; JNEZ.bin;             / J if not text file in 32-word blocks
  544/3: 052|304 000 040                                                     ERASE; SET32;
  545/1: 042|171 370|034|050                                           bin:  DUP; FC15; MULTD; CONT;
  546/0: 172 364|171 376                                                     S+I15; FQ15;                / N1 = final block "filler"
  546/4: 065|170 364                                                         REV; SI15;                  / block size in I15 for DH's crude MT emulation
  547/1: 171 370|170 362                                                     FC15; SM15;                 / M15 = no of 512 word fragments
  547/5: 154 357|134 360|121 360                                             CFRQ14/15; MFSKQ15; PARQ15; / skip n 512 word fragments
  550/5: 170 376                                                             SQ15;                       / final block "filler"

                                                                       final:                            / skip final C-block segment
  551/1: 171 362|171 364|036|033|027|170 364                                 FM15; FI15; -; NOT; NEG; SI15;
  552/4: 304 000 001|170 362|154 357                                         SET1; SM15; CFRQ14/15;
  553/5: 134 360|121 360                                                     MFSKQ15; PARQ15;            / skip C-block or final fragment
  554/3: 202 261 134                                                         J.loop;

                                                                       qfound:                           / quickly found - next file on tape
  555/0: 300 002 375|170 376                                                 F.buff+7; SQ15;             / filler word
  555/5: 052|200 360 000                                               found:  ERASE; EXITH;

                                                                       notfound:
  556/3: 041|301 000 062|300 000 075|304 000 010|200 220 000                 ZERO; S.diagbuff; F.out8wd; SET8; OUT;    / diagnostic output -- temp??
  560/4: 304 000 144|164 041|304 000 200|011                                 SET100; SHL+16; SET#200; OR;
  562/1: 200 320 106                                                         JS.70;
  562/4: 017|017|000 000 000 000 000 000                               *seek: =0;              / brick sought
  564/0: 012 320 253 206 046 131                                       kab99: = P *c M *c KAB99;
                                                                       !end

                                                                       brickch:
                                                                       !begin
  565/0: 171 356|301 000 020                                                 FQ14; S.kq14;   / preserve Q-stores used -- do we need to on brick change?
  565/5: 164 041|164 301                                                     SHL+16; SHL-32;            / brick number in chars
  566/3: 300 001 221|011                                                     F.kab; OR;
  567/1: 042|304 000 007|166 125|301 000 002                                 DUP; SET7; SHLD+42; S.2;   / first word of program ID
  570/4: 300 000 003|164 015|164 365|011|301 000 003                         F.3; SHL+6; SHL-6; OR; S.3;/ second word of program ID
  572/3: 204 321 122                                                         JS.seekch0;
                                                                       !begin                           / routine to load binary prog
  573/0: 244 361 177                                                         JCZ15.final;               / J if C-block not fragmented
  573/3: 152 376                                                             IFRQ15/14;
  573/5: 304 000 377|170 342|140 340                                   loop: SET.bsz-1; SM14; M+I14;    / 512 word transfer
  575/0: 124 340|121 340                                                     MFRQ14; PARQ14;            / read 512 word fragment of C-block
  575/4: 304 001 000|172 344|143 360                                         SET.bsz; S+I14; DC15;      / move up 512 words
  576/5: 265 361 173                                                         JCNZ15.loop;
  577/2: 152 357                                                             IFRQ14/15;                 / start of final transfer
                                                                       final:
  577/4: 154 357                                                             CFRQ14/15;
  600/0: 124 360|121 360                                                     MFRQ15; PARQ15;            / read C-block (or final fragment)
                                                                           / MRWDQ15;                   / leave tape in position - no longer crude search from start of tape

                                                                           / now compute check
  600/4: 300 002 375|170 376                                                 F.buff+7; SQ15;            / filler word
  601/3: 171 362|171 364|036                                                 FM15; FI15; -;
  602/2: 145 360|102 360                                                     IMONE15; FMMQ15/0;
  603/0: 065|170 370                                                         REV; SC15;
  603/3: 102 360|015|263 361 203                                       chs:  FMMQ15/0; NEV; JCNZ15.chs;
  604/3: 042|164 061|015                                                     DUP; SHL+24; NEV;
  605/1: 300 001 223|042|164 377|066|164 321                                 F.radix; DUP; SHL-1; CAB; SHL-24;  / 24-bit NEV check
  606/4: 067|011|301 002 371                                                 FRB; OR; S.buff+3;

  607/3: 222 241 210                                                         JEN.nofloat;               / diagnostic to spot floaters
  610/0: 143 360                                                             DC15; /  MRWDQ0;              / Crash if first / removed
                                                                       nofloat:
  610/2: 300 001 222|171 370|056|301 002 367                                 F.brick; FC15; +; S.buff+1; / change K to J if nest not empty
  611/5: 300 001 163|164 045|164 351|301 002 370                             F.seek; SHL+18; SHL-12; S.buff+2;
  613/3: 300 002 366|041|301 002 366                                         F.buff; ZERO; S.buff;
  614/4: 300 001 220|304 000 010|200 220 000                                 F.out8; SET8; OUT;
  616/1: 301 002 366                                                         S.buff;                / restore initial jump
                                                                       !end
  616/4: 300 000 020|170 356                                                 F.kq14; SQ14;          / reinstate Q14 -- do we need to?

                                                                         /    SET3; SHL+14; F.Z0-10; OR; S.Z0-10;    / hope to print level params and call matrix
                                                                                                    / suppressed, but may reappear in a more sophisticated form

  617/3: 200 262 366                                                         J.buff;                / enter brick
  620/0: 000 000 002 366 002 371                                       *out8: = Q 0/buff/buff+3;
  621/0: 012 320 253 206 040 000                                       kab: = P *c M *c KAB *2s;
  622/0: 002 054 251 216 260 000                                       brick: = P *s BRICK *2s ;
  623/0: 101 004 020 101 004 020                                       radix: = #2020202020202020;

                                                                       !end

                                                                       / -------------------------------------------------------------------

                                                                       n1print:
                                                                       / prints a string embedded in code followed by bottom bits of n1
                                                                       / call sequence must be *JS.cwprint; *= #30; =P 8 chars; =0;
                                                                       !begin
  624/0: 173 000|033|027|042|170 363|140 360|304 000 030|101 360|140 360|042|170 364|174 000
                                                                          FLINK; NOT; NEG; DUP; SRM15; M+I15; SET#30; SMM15/0; M+I15; DUP; SI15; SLINK;
  627/3: 300 001 234|065|067|300 001 235|011|101 360                      F.radix; REV; FRB; F.digits; OR; SMM15/0;
  631/2: 171 376|304 000 010|200 220 000|202 360 003                      FQ15; SET8; OUT; EXIT.3;
  633/1: 017|017|017|017|017|040 202 001 020 202 001                   *radix: =#1010100104101001;
  635/0: 101 004 000 101 004 002                                       digits: =#2020200020202002;
                                                                       !end
                                                                       / -------------------------------------------------------------------

                                                                       crash:
                                                                       /   // disaster
  636/0: 041                                                            ZERO;
  636/1: 017|017|017|017|017|200 321 224|017|017|017|000 000 000 000 000 030
                                                                        *JS.n1print; *=#30;
  641/0: 171 350 362 207 072 000|000 000 000 000 000 000                =P --crash*s; =0;
  643/0: 300 000 075|304 000 010|200 220 000                            F.out8wd; SET8; OUT;
  644/3: 136 010                                                        MRWDQ0;
                                                                       / -------------------------------------------------------------------

                                                                       / I/O words for channels 0 to 8  ( 8 is brick changer )
  644/5: 017|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000
                                                                       *chan: =0; =0; =0; =0; =0; =0; =0; =0; =0;    / channel transfer words Q dv/lo/hi chan 0 to 8
  656/0: 000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000
                                                                       *cbn: =0; =0; =0; =0; =0; =0; =0; =0;     / channel block position -- newer more than chan 7
  666/0: 000 000 000 000 000 000                                       *k4: =0;              / location to keep restart word

                                                                          / ABS to printer chars, akin to abstoascii in out70.c
                                                                       !begin !label abstolp, startlp, closelp;    / N1 is address of output buffer, Q14 scans the input data

                                                                       startlp:
  667/0: 042|170 363|170 364|171 376|301 001 345|200 360 000                 DUP; SRM15; SI15; FQ15; S.lpbuf; EXITH;

                                                                       closelp:
  671/1: 300 001 345|033|027|170 376                                         F.lpbuf; NOT; NEG; SQ15;     / Q15 has I and M correct for output
  672/2: 304 377 302|101 360                                                 SET#177702; SMM15/0;         / extra newline to make sure there is no junk left in the buffer
  673/1: 205 261 325                                                         J.prt;

                                                                       abstolp:                           / Q14 scans the current input words from JSE70 call
  673/4: 300 001 345|042|170 363                                             F.lpbuf; DUP; SRM15;         / M15 address of the current output word
  674/4: 170 336                                                             SQ13;                        / also remembered in I13 to reset buffer after newline
                                                                                                          / C15 is the shift used to insert the most recent output character
  675/0: 304 377 320|170 330                                                 SET-48; SC13;                / C13 is the shift used to extract the current ABS
                                                                          / start main loop
  675/5: 100 340                                                       mlp:  FMM14/0;
  676/1: 304 000 010|172 330                                           mlp2: SET8; S+C13;                 / increment input pointer
  677/0: 164 320|033|027                                                     SHLC13; NOT; NEG;            / next ABS+1 in D40-47
  677/4: 304 000 377|054|304 000 241|223 021 331                             SET#377; AND; SET#241; J=.nl;/ print line if newline
  701/2: 042|170 322|220 141 317                                             DUP; SM13; J=Z.mlp3;         / J if dummy char, avoid printing 077 so as not to overflow line
  702/2: 300 321 345                                                         FM13.chtab-1;                / pick up printer representation
  702/5: 042|164 255|224 141 313                                             DUP; SHL-42; J=Z.onech;      / j if single char symbol
  703/5: 042|304 000 077|054|201 141 342                                     DUP; SET#77; AND; JNEZ.proc; / bottom char set if special symbol, i.e. proc
  705/1: 304 000 007|166 125                                                 SET7; SHLD+42;               / strop char on front
  706/0: 260 361 307                                                   clp:  JCNZ15.nfull;                / come here to continue with a compound symbol
  706/3: 201 321 333                                                         JS.nwd;                      / initialise next output word
  707/0: 042|164 255                                                   nfull:DUP; SHL-42;                 / one char in N1 OR ZERO if end of symbol -- why can this be zero?
  707/3: 304 377 372|172 370|164 360|100 360|011|101 360                     SET-6; S+C15; SHLC15; FMM15/0; OR; SMM15/0;
  711/3: 166 015|042|200 141 306                                             SHLD+6; DUP; JNEZ.clp;       / loop until all characters sent
  712/3: 052|052|304 000 007|167 351                                         ERASE; ERASE; SET7; SHC-12;  / end of sym, put in last quote

  713/4: 164 271                                                       onech:SHL-36;                      / ABS represented by a single KDF9 char
  714/0: 260 361 315                                                         JCNZ15.nf2;                  / J if current output not full
  714/3: 201 321 333                                                         JS.nwd;                      / initialise next output word

  715/0: 304 377 372|172 370|164 360|100 360|011|101 360               nf2:  SET-6; S+C15; SHLC15; FMM15/0; OR; SMM15/0;
  717/0: 265 321 275|304 377 320|170 330                               mlp3: JCNZ13.mlp; SET-48; SC13;
  720/2: 112 340|261 341 276                                                 FMMQN14/0; JCNZ14.mlp2;      / next word of ABSs - test for end
  721/1: 052                                                                 ERASE;                       / discard overflow word
  721/2: 171 324|171 362|027|033|015                                         FI13; FM15; NEG; NOT; NEV;   / zero if last output was new line
  722/3: 220 141 331                                                         JEQZ.xit;                    / J if last char sent was new line
                                                                       nlprt:                             / pad with dummies and print new line
  723/0: 041|033|164 360|033|100 360|011|101 360                             ZERO; NOT; SHLC15; NOT; FMM15/0; OR; SMM15/0;   / pad with dummies
  724/4: 304 377 302|113 360                                                 SET#177702; SMMQN15/0;       / bit inefficient if C15 is non-zero
  725/3: 152 337                                                             IFRQ13/15;                   / and now print
  725/5: 154 017                                                       prt:  CFRQ0/15;                    / not sure we actually need this
  726/1: 171 376|151 017|140 360|304 000 030|101 360                         FQ15; MFRQ0/15; M+I15; SET#30; SMM15/0;
  730/0: 304 000 010|200 220 000                                             SET8; OUT;
  731/0: 200 360 000                                                   xit:  EXITH;

  731/3: 052|200 321 323                                               nl:   ERASE; JS.nlprt;
  732/1: 205 321 336|200 261 317                                             JS.nbuf; J.mlp3;             / keep going after the newline

                                                                       nwd:  / subroutine to initialise next word of output, but checking for 120 chars
  733/1: 171 362|171 324|036|304 000 017|036|222 041 340                     FM15; FI13; -; SET15; -; JLTZ.cont; / continue on same line
  735/1: 304 377 302|113 360                                                 SET#177702; SMMQN15/0;
  736/0: 152 337|205 321 325                                                 IFRQ13/15; JS.prt;           / print line
  736/5: 171 324|170 363                                               nbuf: FI13; SRM15;                 / back to start of buffer
  737/3: 304 000 030|101 360                                                 SET#30; SMM15/0;             / reset OUT8 stream no as it is overwritten by director
  740/2: 041|113 360                                                   cont: ZERO; SMMQN15/0;             / initialise next output word
  740/5: 304 000 060|170 370                                                 SET48; SC15;
  741/4: 200 360 000                                                         EXITH;

  742/1: 304 014 245|167 351|065|304 000 007|166 365|052|200 261 306   proc: SET#6245; SHC-12; REV; SET7; SHLD-6; ERASE; J.clp;
  744/4: 017|017|000 000 000 000 000 000                               *lpbuf: =0;                  / preserves pointer between calls
                                                                       *chtab:
  746/0: 001 000 000 000 000 000                                          = #0020000000000000;  / 000 = 0
  747/0: 001 020 000 000 000 000                                          = #0021000000000000;  / 001 = 1
  750/0: 001 040 000 000 000 000                                          = #0022000000000000;  / 002 = 2
  751/0: 001 060 000 000 000 000                                          = #0023000000000000;  / 003 = 3
  752/0: 001 100 000 000 000 000                                          = #0024000000000000;  / 004 = 4
  753/0: 001 120 000 000 000 000                                          = #0025000000000000;  / 005 = 5
  754/0: 001 140 000 000 000 000                                          = #0026000000000000;  / 006 = 6
  755/0: 001 160 000 000 000 000                                          = #0027000000000000;  / 007 = 7
  756/0: 001 200 000 000 000 000                                          = #0030000000000000;  / 010 = 8
  757/0: 001 220 000 000 000 000                                          = #0031000000000000;  / 011 = 9
  760/0: 003 360 000 000 000 000                                          = #0077000000000000;  / 012 = @
  761/0: 001 360 000 000 000 000                                          = #0037000000000000;  / 013 = .
  762/0: 002 020 000 000 000 000                                          = #0041000000000000;  / 014 = A
  763/0: 002 040 000 000 000 000                                          = #0042000000000000;  / 015 = B
  764/0: 002 060 000 000 000 000                                          = #0043000000000000;  / 016 = C
  765/0: 002 100 000 000 000 000                                          = #0044000000000000;  / 017 = D
  766/0: 002 120 000 000 000 000                                          = #0045000000000000;  / 020 = E
  767/0: 002 140 000 000 000 000                                          = #0046000000000000;  / 021 = F
  770/0: 002 160 000 000 000 000                                          = #0047000000000000;  / 022 = G
  771/0: 002 200 000 000 000 000                                          = #0050000000000000;  / 023 = H
  772/0: 002 220 000 000 000 000                                          = #0051000000000000;  / 024 = I
  773/0: 002 240 000 000 000 000                                          = #0052000000000000;  / 025 = J
  774/0: 002 260 000 000 000 000                                          = #0053000000000000;  / 026 = K
  775/0: 002 300 000 000 000 000                                          = #0054000000000000;  / 027 = L
  776/0: 002 320 000 000 000 000                                          = #0055000000000000;  / 030 = M
  777/0: 002 340 000 000 000 000                                          = #0056000000000000;  / 031 = N
 1000/0: 002 360 000 000 000 000                                          = #0057000000000000;  / 032 = O
 1001/0: 003 000 000 000 000 000                                          = #0060000000000000;  / 033 = P
 1002/0: 003 020 000 000 000 000                                          = #0061000000000000;  / 034 = Q
 1003/0: 003 040 000 000 000 000                                          = #0062000000000000;  / 035 = R
 1004/0: 003 060 000 000 000 000                                          = #0063000000000000;  / 036 = S
 1005/0: 003 100 000 000 000 000                                          = #0064000000000000;  / 037 = T
 1006/0: 003 120 000 000 000 000                                          = #0065000000000000;  / 040 = U
 1007/0: 003 140 000 000 000 000                                          = #0066000000000000;  / 041 = V
 1010/0: 003 160 000 000 000 000                                          = #0067000000000000;  / 042 = W
 1011/0: 003 200 000 000 000 000                                          = #0070000000000000;  / 043 = X
 1012/0: 003 220 000 000 000 000                                          = #0071000000000000;  / 044 = Y
 1013/0: 003 240 000 000 000 000                                          = #0072000000000000;  / 045 = Z
 1014/0: 002 020 000 000 000 000                                          = #0041000000000000;  / 046 = a
 1015/0: 002 040 000 000 000 000                                          = #0042000000000000;  / 047 = b
 1016/0: 002 060 000 000 000 000                                          = #0043000000000000;  / 050 = c
 1017/0: 002 100 000 000 000 000                                          = #0044000000000000;  / 051 = d
 1020/0: 002 120 000 000 000 000                                          = #0045000000000000;  / 052 = e
 1021/0: 002 140 000 000 000 000                                          = #0046000000000000;  / 053 = f
 1022/0: 002 160 000 000 000 000                                          = #0047000000000000;  / 054 = g
 1023/0: 002 200 000 000 000 000                                          = #0050000000000000;  / 055 = h
 1024/0: 002 220 000 000 000 000                                          = #0051000000000000;  / 056 = i
 1025/0: 002 240 000 000 000 000                                          = #0052000000000000;  / 057 = j
 1026/0: 002 260 000 000 000 000                                          = #0053000000000000;  / 060 = k
 1027/0: 002 300 000 000 000 000                                          = #0054000000000000;  / 061 = l
 1030/0: 002 320 000 000 000 000                                          = #0055000000000000;  / 062 = m
 1031/0: 002 340 000 000 000 000                                          = #0056000000000000;  / 063 = n
 1032/0: 002 360 000 000 000 000                                          = #0057000000000000;  / 064 = o
 1033/0: 003 000 000 000 000 000                                          = #0060000000000000;  / 065 = p
 1034/0: 003 020 000 000 000 000                                          = #0061000000000000;  / 066 = q
 1035/0: 003 040 000 000 000 000                                          = #0062000000000000;  / 067 = r
 1036/0: 003 060 000 000 000 000                                          = #0063000000000000;  / 070 = s
 1037/0: 003 100 000 000 000 000                                          = #0064000000000000;  / 071 = t
 1040/0: 003 120 000 000 000 000                                          = #0065000000000000;  / 072 = u
 1041/0: 003 140 000 000 000 000                                          = #0066000000000000;  / 073 = v
 1042/0: 003 160 000 000 000 000                                          = #0067000000000000;  / 074 = w
 1043/0: 003 200 000 000 000 000                                          = #0070000000000000;  / 075 = x
 1044/0: 003 220 000 000 000 000                                          = #0071000000000000;  / 076 = y
 1045/0: 003 240 000 000 000 000                                          = #0072000000000000;  / 077 = z
 1046/0: 000 000 000 000 000 000                                          = #0;
 1047/0: 312 130 154 000 000 000                                          = #6245415400000000;   / 101 = real
 1050/0: 246 355 045 236 134 200                                          = #5156644547456200;   / 102 = integer
 1051/0: 212 373 354 226 033 200                                          = #4257575445415600;   / 103 = boolean
 1052/0: 000 000 000 000 000 000                                          = #0;
 1053/0: 000 000 000 000 000 000                                          = #0;
 1054/0: 000 000 000 000 000 000                                          = #0;
 1055/0: 000 000 000 000 000 000                                          = #0;
 1056/0: 207 054 241 344 000 000                                          = #4162624171000000;   / 110 = array
 1057/0: 000 000 000 000 000 000                                          = #0;
 1060/0: 000 000 000 000 000 000                                          = #0;
 1061/0: 000 000 000 000 000 000                                          = #0;
 1062/0: 000 000 000 000 000 000                                          = #0;
 1063/0: 000 000 000 000 000 000                                          = #0;
 1064/0: 000 000 000 000 000 000                                          = #0;
 1065/0: 000 000 000 000 000 000                                          = #0;
 1066/0: 303 053 343 226 115 162                                          = #6062574345446562;   / 120 = procedure
 1067/0: 000 000 000 000 000 000                                          = #0;
 1070/0: 000 000 000 000 000 000                                          = #0;
 1071/0: 000 000 000 000 000 000                                          = #0;
 1072/0: 000 000 000 000 000 000                                          = #0;
 1073/0: 000 000 000 000 000 000                                          = #0;
 1074/0: 000 000 000 000 000 000                                          = #0;
 1075/0: 000 000 000 000 000 000                                          = #0;
 1076/0: 317 172 164 216 200 000                                          = #6367516443500000;   / 130 = switch
 1077/0: 000 000 000 000 000 000                                          = #0;
 1100/0: 000 000 000 000 000 000                                          = #0;
 1101/0: 000 000 000 000 000 000                                          = #0;
 1102/0: 000 000 000 000 000 000                                          = #0;
 1103/0: 000 000 000 000 000 000                                          = #0;
 1104/0: 000 000 000 000 000 000                                          = #0;
 1105/0: 000 000 000 000 000 000                                          = #0;
 1106/0: 000 000 000 000 000 000                                          = #0;
 1107/0: 000 000 000 000 000 000                                          = #0;
 1110/0: 000 000 000 000 000 000                                          = #0;
 1111/0: 000 000 000 000 000 000                                          = #0;
 1112/0: 000 000 000 000 000 000                                          = #0;
 1113/0: 000 000 000 000 000 000                                          = #0;
 1114/0: 000 000 000 000 000 000                                          = #0;
 1115/0: 000 000 000 000 000 000                                          = #0;
 1116/0: 000 000 000 000 000 000                                          = #0;
 1117/0: 000 000 000 000 000 000                                          = #0;
 1120/0: 000 000 000 000 000 000                                          = #0;
 1121/0: 000 000 000 000 000 000                                          = #0;
 1122/0: 000 000 000 000 000 000                                          = #0;
 1123/0: 000 000 000 000 000 000                                          = #0;
 1124/0: 000 000 000 000 000 000                                          = #0;
 1125/0: 000 000 000 000 000 000                                          = #0;
 1126/0: 000 000 000 000 000 000                                          = #0;
 1127/0: 000 000 000 000 000 000                                          = #0;
 1130/0: 000 000 000 000 000 000                                          = #0;
 1131/0: 000 000 000 000 000 000                                          = #0;
 1132/0: 000 000 000 000 000 000                                          = #0;
 1133/0: 000 000 000 000 000 000                                          = #0;
 1134/0: 000 000 000 000 000 000                                          = #0;
 1135/0: 000 000 000 000 000 000                                          = #0;
 1136/0: 000 000 000 000 000 000                                          = #0;
 1137/0: 262 030 245 260 000 000                                          = #5441424554000000;   / 171 = label
 1140/0: 317 114 251 272 160 000                                          = #6364625156470000;   / 172 = string
 1141/0: 000 000 000 000 000 000                                          = #0;
 1142/0: 000 000 000 000 000 000                                          = #0;
 1143/0: 000 000 000 000 000 000                                          = #0;
 1144/0: 000 000 000 000 000 000                                          = #0;
 1145/0: 000 000 000 000 000 000                                          = #0;
 1146/0: 216 373 155 226 355 000                                          = #4357555545566400;   / 200 = comment
 1147/0: 327 000 000 000 000 000                                          = #6560000000000000;   / 201 = up
 1150/0: 263 100 000 000 000 000                                          = #5464000000000000;   / 202 = lt
 1151/0: 272 375 000 000 000 000                                          = #5657640000000000;   / 203 = not
 1152/0: 000 240 000 000 000 000                                          = #0012000000000000;  / 204 = (
 1153/0: 246 140 000 000 000 000                                          = #5146000000000000;   / 205 = if
 1154/0: 232 374 200 000 000 000                                          = #4657620000000000;   / 206 = for
 1155/0: 000 000 000 000 000 000                                          = #0;
 1156/0: 236 375 057 000 000 000                                          = #4757645700000000;   / 210 = goto
 1157/0: 003 360 000 000 000 000                                          = #0077000000000000;  / 211 = [
 1160/0: 000 000 000 000 000 000                                          = #0;
 1161/0: 000 000 000 000 000 000                                          = #0;
 1162/0: 212 131 351 270 000 000                                          = #4245475156000000;   / 214 = begin
 1163/0: 304 000 000 000 000 000                                          = #6100000000000000;   / 215 = q
 1164/0: 000 320 000 000 000 000                                          = #0015000000000000;  / 216 = *
 1165/0: 277 173 200 000 000 000                                          = #5767560000000000;   / 217 = own
 1166/0: 000 000 000 000 000 000                                          = #0;
 1167/0: 222 235 200 000 000 000                                          = #4451660000000000;   / 221 = div
 1170/0: 262 120 000 000 000 000                                          = #5445000000000000;   / 222 = le
 1171/0: 206 351 000 000 000 000                                          = #4156440000000000;   / 223 = and
 1172/0: 000 260 000 000 000 000                                          = #0013000000000000;   / 224 = )
 1173/0: 322 211 156 000 000 000                                          = #6450455600000000;   / 225 = then
 1174/0: 336 212 154 224 000 000                                          = #6750515445000000;   / 226 = while
 1175/0: 000 000 000 000 000 000                                          = #0;
 1176/0: 001 300 000 000 000 000                                          = #0034000000000000;  / 230 = ;
 1177/0: 003 360 000 000 000 000                                          = #0077000000000000;  / 231 = ]
 1200/0: 000 000 000 000 000 000                                          = #0;
 1201/0: 000 000 000 000 000 000                                          = #0;
 1202/0: 226 351 000 000 000 000                                          = #4556440000000000;   / 234 = end
 1203/0: 324 000 000 000 000 000                                          = #6500000000000000;   / 235 = u
 1204/0: 000 000 000 000 000 000                                          = #0000000000000000;  / 236 =
 1205/0: 332 033 065 224 000 000                                          = #6641546545000000;   / 237 = value
 1206/0: 000 040 000 000 000 000                                          = #0002000000000000;  / 240 =

 1207/0: 000 360 000 000 000 000                                          = #0017000000000000;  / 241 = /
 1210/0: 000 220 000 000 000 000                                          = #0011000000000000;  / 242 = =
 1211/0: 277 040 000 000 000 000                                          = #5762000000000000;   / 243 = or
 1212/0: 000 000 000 000 000 000                                          = #0;
 1213/0: 226 314 345 000 000 000                                          = #4554634500000000;   / 245 = else
 1214/0: 000 340 000 000 000 000                                          = #0016000000000000;  / 246 = ,
 1215/0: 000 000 000 000 000 000                                          = #0;
 1216/0: 000 000 000 000 000 000                                          = #0;
 1217/0: 000 000 000 000 000 000                                          = #0;
 1220/0: 000 000 000 000 000 000                                          = #0;
 1221/0: 000 000 000 000 000 000                                          = #0;
 1222/0: 000 000 000 000 000 000                                          = #0;
 1223/0: 000 000 000 000 000 000                                          = #0;
 1224/0: 000 000 000 000 000 000                                          = #0000000000000000;  / 256 = 	tab as space
 1225/0: 000 000 000 000 000 000                                          = #0;
 1226/0: 256 111 231 000 000 000                                          = #5344463100000000;   / 260 = KDF9
 1227/0: 000 320 000 000 000 000                                          = #0015000000000000;   / 261 =   print as *
 1230/0: 236 120 000 000 000 000                                          = #4745000000000000;   / 262 = ge
 1231/0: 246 334 000 000 000 000                                          = #5155600000000000;   / 263 = imp
 1232/0: 000 000 000 000 000 000                                          = #0;
 1233/0: 000 000 000 000 000 000                                          = #0;
 1234/0: 317 111 160 000 000 000                                          = #6364456000000000;   / 266 = step
 1235/0: 000 000 000 000 000 000                                          = #0;
 1236/0: 000 000 000 000 000 000                                          = #0;
 1237/0: 003 360 000 000 000 000                                          = #0077000000000000;   / 271 = :
 1240/0: 000 000 000 000 000 000                                          = #0;
 1241/0: 000 000 000 000 000 000                                          = #0;
 1242/0: 000 000 000 000 000 000                                          = #0;
 1243/0: 000 000 000 000 000 000                                          = #0;
 1244/0: 003 360 000 000 000 000                                          = #0077000000000000;  / 276 = |
 1245/0: 000 000 000 000 000 000                                          = #0;
 1246/0: 206 311 357 260 000 000                                          = #4154475754000000;   / 300 = ALGOL
 1247/0: 001 320 000 000 000 000                                          = #0035000000000000;   / 301 = +
 1250/0: 237 100 000 000 000 000                                          = #4764000000000000;   / 302 = gt
 1251/0: 227 035 200 000 000 000                                          = #4561660000000000;   / 303 = eqv
 1252/0: 000 000 000 000 000 000                                          = #0;
 1253/0: 000 000 000 000 000 000                                          = #0;
 1254/0: 326 355 051 260 000 000                                          = #6556645154000000;   / 306 = until
 1255/0: 000 000 000 000 000 000                                          = #0;
 1256/0: 000 000 000 000 000 000                                          = #0;
 1257/0: 000 000 000 000 000 000                                          = #0;
 1260/0: 000 000 000 000 000 000                                          = #0;
 1261/0: 000 000 000 000 000 000                                          = #0;
 1262/0: 000 000 000 000 000 000                                          = #0;
 1263/0: 232 033 063 224 000 000                                          = #4641546345000000;   / 315 = false
 1264/0: 000 000 000 000 000 000                                          = #0;
 1265/0: 000 000 000 000 000 000                                          = #0;
 1266/0: 262 230 262 207 056 100                                          = #5451426241627100;   / 320 = library
 1267/0: 001 340 000 000 000 000                                          = #0036000000000000;   / 321 = -
 1270/0: 272 120 000 000 000 000                                          = #5645000000000000;   / 322 = ne
 1271/0: 000 000 000 000 000 000                                          = #0;
 1272/0: 000 000 000 000 000 000                                          = #0;
 1273/0: 000 000 000 000 000 000                                          = #0;
 1274/0: 222 360 000 000 000 000                                          = #4457000000000000;   / 326 = do
 1275/0: 000 000 000 000 000 000                                          = #0;
 1276/0: 000 000 000 000 000 000                                          = #0;
 1277/0: 000 000 000 000 000 000                                          = #0;
 1300/0: 000 000 000 000 000 000                                          = #0;
 1301/0: 000 000 000 000 000 000                                          = #0;
 1302/0: 000 000 000 000 000 000                                          = #0;
 1303/0: 323 055 145 000 000 000                                          = #6462654500000000;   / 335 = true
 1304/0: 000 000 000 000 000 000                                          = #0;
 1305/0: 000 000 000 000 000 000                                          = #0;
 1306/0: 316 131 355 226 355 000                                          = #6345475545566400;   / 340 = segment
 1307/0: 000 000 000 000 000 000                                          = #0;
 1310/0: 000 000 000 000 000 000                                          = #0;
 1311/0: 000 000 000 000 000 000                                          = #0;
 1312/0: 000 000 000 000 000 000                                          = #0;
 1313/0: 000 000 000 000 000 000                                          = #0;
 1314/0: 000 000 000 000 000 000                                          = #0;
 1315/0: 000 000 000 000 000 000                                          = #0;
 1316/0: 000 000 000 000 000 000                                          = #0;
 1317/0: 000 000 000 000 000 000                                          = #0;
 1320/0: 000 000 000 000 000 000                                          = #0;
 1321/0: 000 000 000 000 000 000                                          = #0;
 1322/0: 000 000 000 000 000 000                                          = #0;
 1323/0: 000 000 000 000 000 000                                          = #0;
 1324/0: 000 000 000 000 000 000                                          = #0;
 1325/0: 000 000 000 000 000 000                                          = #0;
 1326/0: 227 212 164 000 000 000                                          = #4570516400000000;   / 360 = EXIT
 1327/0: 000 000 000 000 000 000                                          = #0;
 1330/0: 000 000 000 000 000 000                                          = #0;
 1331/0: 000 000 000 000 000 000                                          = #0;
 1332/0: 000 000 000 000 000 000                                          = #0;
 1333/0: 000 000 000 000 000 000                                          = #0;
 1334/0: 000 000 000 000 000 000                                          = #0;
 1335/0: 000 000 000 000 000 000                                          = #0;
 1336/0: 000 000 000 000 000 000                                          = #0;
 1337/0: 000 000 000 000 000 000                                          = #0;
 1340/0: 000 000 000 000 000 000                                          = #0;
 1341/0: 000 000 000 000 000 000                                          = #0;
 1342/0: 000 000 000 000 000 000                                          = #0;
 1343/0: 000 000 000 000 000 000                                          = #0;
 1344/0: 000 000 000 000 000 000                                          = #0;
                                                                       /  = #0077000000000000;  / 377 dummy is never accessed
                                                                       !end

                                                                       !begin !label nogo;
 1345/0: 016|017|020|101|236|120                                       *test: = S 14;   = S 15;   = S 16;  = S #101; = S #236; = S #120;
 1346/0: 240|023|024|027|014|035                                              = S #240; = S 19;   = S 20;  = S 23;   = S 12;   = S 29;
 1347/0: 044|236|023|377|377|240                                              = S 36;   = S #236; = S 19;  = S #377; = S #377; = S #240;
 1350/0: 301|301|301|301|377|240                                              = S #301; = S #301; =S #301; = S #301; = S #377; = S #240;
 1351/0: 240|120|240|240|120|240                                              = S #240; = S #120; =S #240; = S #240; = S #120; =S #240;
 1352/0: 002 234 002 345 242 003                                       *och3: = Q #1234/ #1345/ #121003;
 1353/0: 002 234 002 234 140 303                                       *cch3: = Q #1234/ #1234/ #060303;
 1354/0: 002 345 002 351 270 321                                       *prt: = Q test/och3-1/#134321;
 1355/0: 300 002 352|042|200 320 106|200 321 236                       nogo: F.och3; DUP; JS.70; JS.crash;   /open 3
 1356/4: 052                                                                 ERASE;
 1356/5: 300 002 352|304 000 016|056|042|200 320 106|200 321 236             F.och3; SET14; +; DUP; JS.70; JS.crash;   /open 17
 1361/1: 300 002 354|200 320 106|200 321 236                                 F.prt; JS.70; JS.crash;   /print
 1362/4: 052                                                                 ERASE;
 1362/5: 300 002 353|200 320 106|200 321 236                                 F.cch3; JS.70; JS.crash;   /close

 1364/2: 136 010|041|200 220 000                                           MRWDQ0; ZERO; OUT;
                                                                       !end

 1365/2: 017|017|017|017                                               *opbuff:        / initialisation code is overwritten by the printer output buffer
                                                                       buff=opbuff:    / this buffer is used by brick change - and may need to be somewhere else - doubt it

                                                                       !begin !label main;

                                                                       main:                  /main(int argc, char **argv)
 1366/0: 300 003 044|301 000 002|300 003 045|301 000 003                     F.progname; S.2; F.progname+1; S.3;
 1370/0: 041|033|321 013 074                                                 ZERO; NOT; S.Z0-35;          / Set POST flag in Z35
 1370/5: 041|033|301 000 060                                                 ZERO; NOT; S.48;             / Set POST flag in E48 ???
 1371/4: 041|301 000 105                                                     ZERO; S.69;                  / clear sumcheck required flag
 1372/2: 300 000 004|301 001 266                                             F.4; S.k4;                   / keep restart word

 1373/2: 304 053 071|170 362                                                 SET.Z38; SM15;               / Set bits in Z38
 1374/1: 100 000|301 000 104                                                 FMM0/0; S.68;                / used by B20 substitute - not currently (Feb17) operational
 1375/0: 041|100 000|166 361|065                                             ZERO; FMM0/0; SHLD-8; REV;   / save D24-39 for later
 1376/0: 042|202 142 377                                                     DUP; JNEZ.notintb;
 1376/4: 052|300 003 067                                                     ERASE; F.v1;                 / use the value of V1 if TINT;B not operational
                                                                       notintb:
 1377/2: 065|164 121|164 357|011                                             REV; SHL+40; SHL-9; OR;      / incorporate the language selection bits from nnn in TINT;Bnnnzzz
 1400/2: 042|101 360                                                         DUP; SMM15/0;
 1400/5: 304 000 020|170 371                                                 SET16; SRC15;
 1401/4: 164 003|047|033|300 363 046|011|303 363 107|264 363 001|052   w0:   SHL+1; STR; NOT; FM15.z38tab; OR; SMQ15.y0+1; JCNZ15.w0; ERASE;
 1404/1: 304 000 030|301 003 106|304 377 302|301 363 107                     SET#30; S.y0; SET#177702; SM15.y0+1;
 1406/1: 300 003 066|171 362|056|042|304 000 010|200 220 000                 F.v11; FM15; +; DUP; SET8; OUT;
 1410/2: 041|301 003 106|304 000 010|200 220 000                             ZERO; S.y0; SET8; OUT;

                                                                             / now to open the system tape

 1412/0: 300 003 042|304 000 004|200 220 000|170 351|140 340                 F.mtlab; SET4; OUT; SRC14; M+I14;
 1414/1: 304 003 070|170 344|140 340                                         SET.buff; SI14; M+I14;
 1415/2: 124 340|121 340                                                     MFRQ14; PARQ14;                / read label block
                                                                                                            / system tape left after label block
 1416/0: 300 003 070|041|166 061|301 003 072                                 F.buff; ZERO; SHLD+24; S.buff+2;
 1417/3: 301 003 073                                                         S.buff+3;
 1420/0: 041|301 003 070                                                     ZERO; S.buff;
 1420/4: 300 003 043|304 000 010|200 220 000                                 F.out8; SET8; OUT;             / print tape label on monitor
 1422/1: 171 356|301 001 255                                                 FQ14; S.chan+8;                / remember for channel 8

 1423/0: 041|304 000 004|200 220 000|164 101|301 001 254                     ZERO; SET4; OUT; SHL+32; S.chan+7;    / channel 7 device number
 1425/0: 041|304 000 004|200 220 000|164 101|301 001 253                     ZERO; SET4; OUT; SHL+32; S.chan+6;    / channel 6 device number

 1427/0: 304 003 106|200 321 267                                             SET.y0; JS.startlp;                   / set printer buffer pointers

 1430/0: 320 013 071|164 025|205 143 037                                     F.Z38; SHL+10; JNEZ.notkalgol;        / channels 4 & 5 only needed by Kalgol

 1431/2: 041|304 000 004|200 220 000|164 101|301 001 252                     ZERO; SET4; OUT; SHL+32; S.chan+5;    / channel 5 device number
 1433/2: 041|304 000 004|200 220 000|164 101|301 001 251                     ZERO; SET4; OUT; SHL+32; S.chan+4;    / channel 4 device number

                                                                       brick81:                                    / B81 generates an initial channel 6
 1435/2: 304 006 021                                                         SET#3021;                             / to call brick 81
 1435/5: 170 364|304 336 010|170 362                                         SI15; SET#157010; SM15;
 1437/0: 171 376|200 260 106                                                 FQ15; J.70;

                                                                       notkalgol:
 1437/5: 320 013 071|164 027|222 043 035                                     F.Z38; SHL+11; J<Z.brick81;            / enter brick 81 if Usercode

 1441/1: 136 010                                                             MRWDQ0;      / temp

 1441/3: 017|017|017|317 234 364 207 011 131                           *mtlab: = P SYSTAPE9;
 1443/0: 000 000 003 070 003 073                                       *out8: = Q 0/buff/buff+3;
 1444/0: 034 053 102 256 030 220                                       progname: =#07025502 53414220;   / M KAB0
 1445/0: 102 112 036 173 134 365                                               =P 0DH--USU;

                                                                       *z38tab:              / table of bits in Z38 (all these words are -ve)
 1446/0: 216 327 154 300 017 377                                           = P CM+LP*s;      / D1   TINT;B100
 1447/0: 322 030 254 227 060 077                                           = P TABLES*s;     / D2   TINT;B040
 1450/0: 277 052 147 173 075 300                                           = P ORIG-SW*s;    / D3   TINT;B020  indicates use of original software for assembly
 1451/0: 322 136 064 003 377 377                                           = P TEXT*s;       / D4   TINT;B010
 1452/0: 272 367 257 303 100 077                                           = P NO-OPT*s;     / D5   TINT;B004
 1453/0: 272 367 264 227 075 000                                           = P NO-TEST*s;    / D6   TINT;B002
 1454/0: 272 367 267 207 053 200                                           = P NO-WARN*s;    / D7   TINT;B001
 1455/0: 261 331 377 377 377 300                                           = P L+G*4d*s;     / D8   TINT;B200000
 1456/0: 256 033 047 276 300 077                                           = P KALGOL*s;     / D9   TINT;B100000
 1457/0: 336 033 047 276 300 077                                           = P WALGOL*s;     / D10  TINT;B40000
 1460/0: 327 071 162 216 371 045                                           = P USERCODE;     / D11  TINT;B20000
 1461/0: 232 374 264 312 033 200                                           = P FORTRAN*s;    / D12  TINT;B10000
 1462/0: 326 063 362 262 040 077                                           = P UC/RLB*s;     / D13  TINT;B4000
 1463/0: 256 033 024 003 377 377                                           = P KAL4*s;       / D14  TINT;B2000
 1464/0: 221 025 100 377 377 377                                           = P D15*s;        / D15  TINT;B1000
 1465/0: 221 025 200 377 377 377                                           = P D16*s;        / D16  TINT;B400

 1466/0: 000 000 003 106 003 107                                       v11: = Q 0/y0/y0+1;
 1467/0: 067 000 000 000 000 000                                       v1: = #1560000000000000;      / +tables +real KAA01 -text -optimiser -test points  Kidsgrove is the default
                                                                       buff:


                                                                         / /////////////// test code not now used
 1470/0: 304 006 100|200 321 267                                             SET1600; JS.startlp;
 1471/0: 304 003 105|304 003 101|042|170 343|036|170 350                     SET.endwords; SET.words; DUP; SRM14; -; SC14;
 1473/0: 204 321 273                                                         JS.abstolp;
 1473/3: 304 003 105|304 003 101|042|170 343|036|170 350                     SET.endwords; SET.words; DUP; SRM14; -; SC14;
 1475/3: 204 321 273                                                         JS.abstolp;
 1476/0: 304 003 106|304 003 101|042|170 343|036|170 350                     SET.endwords+1; SET.words; DUP; SRM14; -; SC14;
 1500/0: 204 321 273|136 010                                                 JS.abstolp; MRWDQ0;
 1500/5: 017|070 071 067 056 063 054|236 064 053 236 047 046|070 056 050 236 070 076|062 047 064 061 070 377
                                                                       *words: ={string *s of *s basic *s symbols};
 1505/0: 377 377 377 377 377 240                                       *endwords: = #7777777777777640;


                                                                       !end

                                                                       *y0:

Reached end of file
                                                                       !end

C-block from 8 to 837
No of ID table entries = 430 (14%)