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 51098 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
                                                                       / This module starts the compiler, and forms a permanently resident subroutine
                                                                       / for control of I/O -- see documentation at the end
                                                                       / Can be entered via OUT 1 with the value of Z38 in N1

                                                                       Z0 = 11103:   / Z11 should be accessed as F.Z0-11
                                                                       Z50 = Z0-50:
                                                                       Z38 = Z0-38:      / see z38tab label
                                                                                         /  TRACE      / D1   TINT;B100
                                                                                         /  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        / 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 374|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 244|200 321 244                                       prog=4: JS.crash;  JS.crash;   /restart

                                                                       bsz = 256:         / defines size of MT blocks - comments assume 512
                                                                           / this feature is now obsolete, but retained for compatibility with old format system tape

                                                                       / -------------------------------------------------------------------
                                                                       prog=8:
   10/0: 000 000 000 000 001 261                                         = 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;
   62/0: 000 000 000 000 000 000                                       *mthead: =0;            / set NZ to force skip over
                                                                                               / standard header introduced for first prog on tape - Oct 2020.

                                                                       diagbuff:
   63/0: 000 000 000 000 000 000                                         = 0;       / stream no
   64/0: 064 332 263 225 164 000                                         = #1515526345272000;       / *a *a JSE70 *s;
   65/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;
   76/0: 000 000 000 063 000 075                                       out8wd: = Q0/diagbuff/prog-1;
   77/0: 001 004 020 101 004 017                                         = #0020202020202017;
  100/0: 040 202 010 040 202 001                                         = #1010101010101001;
  101/0: 251 004 020 101 003 320                                       linkwd: = #5220202020201720;
  102/0: 050 242 212 050 242 212                                       rad10: = #1212121212121212;
  103/0: 002 053 053 001 004 020                                       blkwd: = #42545300202020;
  104/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 077|300 000 100|066|067|011|301 000 065
                                                                          DUP; SHL+32; SHC+16; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+2;
  110/5: 042|164 301|300 000 077|300 000 100|066|067|011|301 000 066      DUP; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+3;
  113/2: 042|164 041|164 301|300 000 077|300 000 100|066|067|011|301 000 067
                                                                          DUP; SHL+16; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+4;
  116/1: 041|033|042|301 000 071|042|301 000 072|301 000 073              ZERO; NOT; DUP; S.diagbuff+6; DUP; S.diagbuff+7; S.diagbuff+8;
  120/2: 304 007 236|164 031|164 365|301 000 070                          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 100|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 101|011                          SHC+13; FRB; SHL+6; OR; F.linkwd; OR;
  126/3: 301 000 064                                                   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 173                          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 274|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;                  / channel 0 (or 8) system tape
  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 070                                          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 072|110 360|301 000 073          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: 200 321 126                                                      JS.seekch0;
  174/2: 201 261 110                                                      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 070                                          F.popen; S.diagbuff+5;
  177/4: 154 017|171 376|301 001 253                                      CFRQ0/15; FQ15; S.chan;
  200/5: 171 364|170 363|200 261 075                                      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 070                                          F.pread; S.diagbuff+5;

  204/3: 300 001 253|170 376                                              F.chan; SQ15;             / N.B. I cannot remember why the device is stored as channel 8
  205/2: 300 001 263|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 253|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 075                                                      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 070                                          F.pclose; S.diagbuff+5;
                                                                        / F.chan+8; SQ15; MRWDQ15;  / don't rewind the system tape
  214/1: 202 261 075                                                      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 070                                          F.pdevno; S.diagbuff+5;
  217/1: 300 001 263|202 261 075                                          F.chan+8; J.nores;        / return device for channel 0 -- see comment above

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

  222/4: 300 000 240|171 362|067                                          F.radix; FM15; FRB;    / failure number
  223/4: 304 002 374|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 374                                          SET#30; S.buff;
  232/5: 171 376|304 000 010|200 220 000                                  FQ15; SET8; OUT;
  234/1: 202 321 075|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 070                                          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 301                                                      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 064                                                      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 070                          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 374|200 321 275                                          SET.opbuff; JS.startlp;             / set printer buffer pointers
  263/4: 201 041 110                                                      JGEZ.prtprt;                        / J if single buffered
  264/1: 052|201 261 110                                                  ERASE; J.prtprt;                    / remove extra buffer parameter

                                                                       notyetimp:
  264/5: 200 321 244|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 070                              JNEZ.notwrite;  F.pwrite; S.diagbuff+5;
  276/2: 202 320 300                                                      JS.mtwrite;
  276/5: 304 377 375|301 000 014|200 261 064                              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 253|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 253|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 253|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 253|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 264|033|027|301 341 264                                  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 070                              JNEZ.notread;  F.pread; S.diagbuff+5;
  322/2: 300 341 253|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 264|033|027|301 341 264                                  FM14.cbn; NOT; NEG; SM14.cbn;
  326/4: 304 377 376|301 000 014|200 261 064                              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 264|027|033|301 341 264                                  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 075                                                      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 373|300 000 143|301 000 070                              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 253|041|166 041|170 370|261 360 344                      FM14.chan; ZERO; SHLD+16; SC15; JCNZ15.mtok;/ check if tape already claimed
  342/4: 041|304 000 004|200 220 000|170 370                              ZERO; SET4; OUT; SC15;                      / claim a new work tape
                                                                       // SET#50; FM14;                               / SET3; J=.notyetimp;
                                                                       // +; SHL+16; SET.chan; DUP; SHL+16; OR; SET8; +; SHL+16; SET70; OUT;
                                                                       mtok:
  344/1: 171 376|301 341 253                                              FQ15; SM14.chan;   / set up channel control word
  345/0: 220 140 346|200 321 244                                          J=Z.prog+1; JS.crash;                 / illegal if channel already open
  346/0: 300 000 013|304 360 200|054|304 240 200|015|202 140 361             F.par1; SET#0170200; AND; SET#0120200; NEV; JNEZ.fwd;  / J if not backwards
  350/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
  351/2: 300 000 013|304 242 204|015|203 140 354                             F.par1; SET#0121204; NEV; JNEZ.tryend;  / J if not chan 4 backwards from current
  353/0: 300 000 153|301 000 070                                             F.pbackc; S.diagbuff+5;
  354/0: 200 261 075                                                         J.q15res;

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

  360/5: 203 261 062                                                         J.nokando;

                                                                       fwd:  /  sprintf(sbuff, "Open channel %d (double)", chan);
  361/2: 041|033|301 000 014                                                    ZERO; NOT; S.resms;
  362/1: 171 342|304 000 021|015|222 141 075                                    FM14; SET17; NEV; J=Z.nores;                / J if channel 17 - no result
  363/4: 300 000 013|304 000 101|054|027|033|222 140 371                        F.par1; SET#101; AND; NEG; NOT; J=Z.curr;   / J if current position
  365/4: 041|301 341 264                                                           ZERO; SM14.cbn;                          / number of block behind tape head
  366/2: 136 370                                                                   MRWDQ15;
  366/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
  370/4: 134 360|121 360                                                           MFSKQ15; PARQ15;                         / skip label block
  371/2: 171 342|167 377|220 041 064                                   curr: FM14; SHC-1; JLTZ.windup;                      / same as for write on a write channel
  372/3: 171 364|170 363|200 261 075                                   currr:  FI15; SRM15; J.q15res;                       / deliver 0 in C result to indicate empty buffer on read

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

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

                                                                       notclose:    / test for INTERCHANGE
  415/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
  417/3: 222 141 021                                                      J=Z.interch;
  420/0: 304 344 000|015                                                  SET#0162000; NEV;                             /  (par1&0177770) == 0162000 )        // interchange according to the PANACEA documentation
  420/4: 203 141 031|041                                                  JNEZ.notintch; ZERO;
  421/2: 052|300 000 147|301 000 070                                   interch: ERASE;  F.pinter; S.diagbuff+5;
  422/3: 300 341 253|300 341 254|301 341 253|301 341 254                  FM14.chan; FM14.chan+1; SM14.chan; SM14.chan+1;
  424/3: 300 341 264|300 341 265|301 341 264|301 341 265                  FM14.cbn; FM14.cbn+1; SM14.cbn; SM14.cbn+1;
  426/3: 171 342|304 000 004|015|202 141 075                              FM14; SET4; NEV; JNEZ.nores;
  430/0: 300 341 264|301 000 012                                          FM14.cbn; S.ch4end;                           / remember end of channel 4
  431/0: 202 261 075                                                      J.nores;

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

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

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

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

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

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

                                                                       windup:  / deliver result, etc
  464/0: 300 000 015|033|300 000 014|054|202 041 075                        F.resls; NOT; F.resms; AND; JGEZ.nores;
  465/5: 300 341 253|042|167 341|042|170 363                                FM14.chan; DUP; SHC-16; DUP; SRM15;
  467/2: 036|033|027|170 370                                                -; NOT;NEG; SC15;                          / only works for chan 6 and 7
  470/1: 171 342|304 000 005|015|205 141 072                                FM14; SET5; NEV; JNEZ.notch5;
  471/4: 140 360|143 360|200 261 075                                        M+I15; DC15; J.q15res;                     / space for block size word
                                                                       notch5:
  472/5: 171 342|304 000 004|015|200 141 075                                FM14; SET4; NEV; JNEZ.q15res;               / not channel 4
  474/2: 102 360|170 370                                                    FMMQ15/0; SC15;                            / pick size word from start of block
                                                                       q15res:
  475/0: 171 376                                                           FQ15;
  475/2: 300 000 070                                                   nores: F.diagbuff+5;                  / exit leaving no result
  475/5: 171 342|011|304 000 020|011                                       FM14; OR; SET#20; OR;          / path for failure exit
  477/0: 301 000 070                                                       S.diagbuff+5;   / channel no in diagnostic
                                                                       / diagnostic
  477/3: 221 241 110                                                      JEN.prtprt;
  500/0: 042|164 301|300 000 077|300 000 100|066|067|011|301 000 071      DUP; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+6;
  502/3: 042|164 041|164 301|300 000 077|300 000 100|066|067|011|301 000 072
                                                                          DUP; SHL+16; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+7;
  505/2: 042|167 341|164 301|300 000 077|300 000 100|066|067|011|301 000 073
                                                                          DUP; SHC-16; SHL-32; F.out8wd+1; F.out8wd+2; CAB; FRB; OR; S.diagbuff+8;
                                                                       prtprt:
  510/1: 320 013 071|164 003|204 041 124                                  F.Z38; SHL+1; JGEZ.nodiag0;                           / jump past the ERASE
  511/3: 300 000 102|300 341 264|067|300 000 103|011|301 000 074          F.rad10; FM14.cbn; FRB; F.blkwd; OR; S.diagbuff+9;    / print block number
  513/5: 300 341 253|164 025|164 255|304 360 020|011|301 000 075          FM14.chan; SHL+10; SHL-42; SET#170020; OR; S.diagbuff+10;
  516/1: 300 000 070|164 365|164 015|300 000 145|223 021 124              F.diagbuff+5; SHL-6; SHL+6; F.pread; J=.nodiag;
  520/2: 300 000 146|223 021 124                                          F.pwrite; J=.nodiag;
  521/2: 300 000 156|223 021 124                                          F.pprint; J=.nodiag;
  522/2: 041|301 000 063|300 000 076|304 000 010|200 220 000              ZERO; S.diagbuff; F.out8wd; SET8; OUT;
  524/3: 052                                                           nodiag:  ERASE;
  524/4: 300 000 020|170 356                                           nodiag0: F.kq14; SQ14;                     / exit after restoring Q14
  525/3: 202 360 001                                                      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;
  526/0: 301 001 171                                                         S.seek;
                                                                           / F.seek; SHL+18; S.buff+1; F.out8; SET2; -;
                                                                           / SET8; OUT;

  526/3: 300 001 263|170 356                                                 F.chan+8; SQ14;             / access channel 0
  527/2: 304 002 374|170 344                                                 SET.buff; SI14;
  530/1: 304 000 007|170 342|140 340                                         SET7; SM14; M+I14;
  531/2: 124 340|121 340                                                     MFRQ14; PARQ14;             / read immediate block -- assumed to be a b-BLOCK
  532/0: 300 002 377|300 002 376|166 255|052                                 F.buff+3; F.buff+2; SHLD-42; ERASE;
  533/3: 300 001 171|224 021 162|052                                         F.seek; J=.qfound; ERASE;
  534/4: 157 357|136 370                                                     QFRQ14/15; MRWDQ15;         / not next file - so rewind -- may need +ve modifier
  535/2: 304 000 002|170 364|304 000 001|170 362                             SET2; SI15; SET1; SM15;
  537/0: 134 360|121 360                                                     MFSKQ15; PARQ15;            / skip the label block
  537/4: 300 000 062|220 141 142                                             F.mthead; J=Z.loop;         / J if not standard header for first program
  540/4: 134 360|121 360                                                     MFSKQ15; PARQ15;            / skip the last block marker
  541/2: 134 360|121 360                                                     MFSKQ15; PARQ15;            / skip the KAB00 A-block

                                                                       loop:
  542/0: 304 000 007|170 342|140 340                                         SET7; SM14; M+I14;
  543/1: 124 340|121 340                                                     MFRQ14; PARQ14;             / read b-BLOCK
  543/5: 300 002 377|300 002 376|166 255|052                                 F.buff+3; F.buff+2; SHLD-42; ERASE;

  545/2: 300 003 003|170 376                                                 F.buff+7; SQ15;             / filler word
  546/1: 300 001 171|223 021 163                                             F.seek; J=.found;
  547/1: 300 001 172|015|221 141 164                                         F.kab99; NEV; J=Z.notfound;

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

                                                                       final:                            / skip final C-block segment
  556/5: 171 362|171 364|036|033|027                                         FM15; FI15; -; NOT; NEG;    / block size
  560/0: 170 364                                                             SI15;                       / needed for Holdsworth emulator
  560/2: 304 000 001|170 362|154 357                                         SET1; SM15; CFRQ14/15;      / block count
  561/3: 134 360|121 360                                                     MFSKQ15; PARQ15;            / skip C-block or final fragment
  562/1: 200 261 142                                                         J.loop;

                                                                       qfound:                           / quickly found - next file on tape
  562/4: 300 003 003|170 376                                                 F.buff+7; SQ15;             / filler word
  563/3: 052|200 360 000                                               found:  ERASE; EXITH;

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

                                                                       brickch:
                                                                       !begin
  573/0: 171 356|301 000 020                                                 FQ14; S.kq14;   / preserve Q-stores used -- do we need to on brick change?
  573/5: 164 041|164 301                                                     SHL+16; SHL-32;            / brick number in chars
  574/3: 300 001 227|011                                                     F.kab; OR;
  575/1: 042|304 000 007|166 125|301 000 002                                 DUP; SET7; SHLD+42; S.2;   / first word of program ID
  576/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
  600/3: 200 321 126                                                         JS.seekch0;
                                                                       !begin                           / routine to load binary prog
  601/0: 244 361 205                                                         JCZ15.final;               / J if C-block not fragmented
  601/3: 152 376                                                             IFRQ15/14;
  601/5: 304 000 377|170 342|140 340                                   loop: SET.bsz-1; SM14; M+I14;    / 512 word transfer
  603/0: 124 340|121 340                                                     MFRQ14; PARQ14;            / read 512 word fragment of C-block
  603/4: 304 001 000|172 344|143 360                                         SET.bsz; S+I14; DC15;      / move up 512 words
  604/5: 265 361 201                                                         JCNZ15.loop;
  605/2: 152 357                                                             IFRQ14/15;                 / start of final transfer
                                                                       final:
  605/4: 154 357                                                             CFRQ14/15;
  606/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
  606/4: 300 003 003|170 376                                                 F.buff+7; SQ15;            / filler word
  607/3: 171 362|171 364|036                                                 FM15; FI15; -;
  610/2: 145 360|102 360                                                     IMONE15; FMMQ15/0;
  611/0: 065|170 370                                                         REV; SC15;
  611/3: 102 360|015|263 361 211                                       chs:  FMMQ15/0; NEV; JCNZ15.chs;
  612/3: 042|164 061|015                                                     DUP; SHL+24; NEV;
  613/1: 300 001 231|042|164 377|066|164 321                                 F.radix; DUP; SHL-1; CAB; SHL-24;  / 24-bit NEV check
  614/4: 067|011|301 002 377                                                 FRB; OR; S.buff+3;

  615/3: 222 241 216                                                         JEN.nofloat;               / diagnostic to spot floaters
  616/0: 143 360                                                             DC15; /  MRWDQ0;              / Crash if first / removed
                                                                       nofloat:
  616/2: 300 001 230|171 370|056|301 002 375                                 F.brick; FC15; +; S.buff+1; / change K to J if nest not empty
  617/5: 300 001 171|164 045|164 351|301 002 376                             F.seek; SHL+18; SHL-12; S.buff+2;
  621/3: 300 002 374|041|301 002 374                                         F.buff; ZERO; S.buff;
  622/4: 300 001 226|304 000 010|200 220 000                                 F.out8; SET8; OUT;
  624/1: 301 002 374                                                         S.buff;                / restore initial jump
                                                                       !end
  624/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

  625/3: 200 262 374                                                         J.buff;                / enter brick
  626/0: 000 000 002 374 002 377                                       *out8: = Q 0/buff/buff+3;
  627/0: 012 320 253 206 040 000                                       kab: = P *c M *c KAB *2s;
  630/0: 002 054 251 216 260 000                                       brick: = P *s BRICK *2s ;
  631/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
  632/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;
  635/3: 300 001 242|065|067|300 001 243|011|101 360                      F.radix; REV; FRB; F.digits; OR; SMM15/0;
  637/2: 171 376|304 000 010|200 220 000|202 360 003                      FQ15; SET8; OUT; EXIT.3;
  641/1: 017|017|017|017|017|040 202 001 020 202 001                   *radix: =#1010100104101001;
  643/0: 101 004 000 101 004 002                                       digits: =#2020200020202002;
                                                                       !end
                                                                       / -------------------------------------------------------------------

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

                                                                       / I/O words for channels 0 to 8  ( 8 is brick changer )
  652/5: 017|000 000 000 000 000 000|000 000 000 000 000 000|000 000 000 000 000 000|000 001 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; =Q1/0/0; =0; =0; =0; =0; =0;    / channel transfer words Q dv/lo/hi chan 0 to 8
  664/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
  674/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:
  675/0: 042|170 363|170 364|171 376|301 001 353|200 360 000                 DUP; SRM15; SI15; FQ15; S.lpbuf; EXITH;

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

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

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

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

  737/3: 052|200 321 331                                               nl:   ERASE; JS.nlprt;
  740/1: 205 321 344|200 261 325                                             JS.nbuf; J.mlp3;             / keep going after the newline

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

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

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

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

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

 1373/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)
 1374/0: 300 003 036|301 000 002|300 003 037|301 000 003                     F.progname; S.2; F.progname+1; S.3;
 1376/0: 041|033|321 013 074                                                 ZERO; NOT; S.Z0-35;          / Set POST flag in Z35
 1376/5: 041|033|301 000 060                                                 ZERO; NOT; S.48;             / Set POST flag in E48 ???
 1377/4: 041|301 000 105                                                     ZERO; S.69;                  / clear sumcheck required flag
 1400/2: 300 000 004|301 001 274                                             F.4; S.k4;                   / keep restart word

 1401/2: 304 053 071|170 362                                                 SET.Z38; SM15;               / Set bits in Z38
 1402/1: 100 000|301 000 104                                                 FMM0/0; S.68;                / used by B20 substitute - not currently (Feb17) operational
 1403/0: 205 243 006                                                         JNEN.nen;                    / entry with Z38 in N1 for Bill Findlay
 1403/3: 041|100 000|166 361|065                                             ZERO; FMM0/0; SHLD-8; REV;   / save D24-39 for later
 1404/3: 042|205 143 005                                                     DUP; JNEZ.notintb;
 1405/1: 052|300 003 061                                                     ERASE; F.v1;                 / use the value of V1 if TINT;B not operational
                                                                       notintb:
 1405/5: 065|164 117|164 361|011                                             REV; SHL+39; SHL-8; OR;      / incorporate the language selection bits from nnn in TINT;Bnnnzzz

 1406/5: 101 360                                                       nen:  SMM15/0;                     / entry with Z38 in N1

                                                                       //      FMM15/0;                   / this info is nowoutput by brick 81
                                                                       //      SET16; SRC15;
                                                                       //w0:   SHL+1; STR; NOT; FM15.z38tab; OR; SMQ15.y0+1; JCNZ15.w0; ERASE;
                                                                       //      SET#30; S.y0; SET#177702; SM15.y0+1;
                                                                       //      F.v11; FM15; +; DUP; SET8; OUT;
                                                                       //      ZERO; S.y0; NEG; NOT; SET8; OUT;

                                                                             / now to open the system tape
 1407/1: 201 243 011                                                         JNEN.mtok;                   / J if MT was left in N2 on entry
 1407/4: 300 003 034|304 000 004|200 220 000                                 F.mtlab; SET4; OUT;

 1411/1: 170 351|140 340                                               mtok: SRC14; M+I14;
 1411/5: 304 003 062|170 344|140 340                                         SET.buff; SI14; M+I14;
 1413/0: 124 340|121 340                                                     MFRQ14; PARQ14;                / read label block
                                                                                                            / system tape left after label block
 1413/4: 300 003 062|041|166 061|301 003 064                                 F.buff; ZERO; SHLD+24; S.buff+2;
 1415/1: 301 003 065                                                         S.buff+3;
 1415/4: 041|301 003 062                                                     ZERO; S.buff;
 1416/2: 300 003 035|304 000 010|200 220 000                                 F.out8; SET8; OUT;             / print tape label on monitor
 1417/5: 171 356|301 001 263                                                 FQ14; S.chan+8;                / remember for channel 8

 1420/4: 124 340|121 340                                                     MFRQ14; PARQ14;                / read possible prog header for Oct 2020 format
 1421/2: 136 350|146 340|304 000 001|170 342                                 MRWDQ14; ITWO14; SET1; SM14;
 1422/5: 300 003 062|200 143 026                                             F.buff; JNEZ.oldform;          / J if no zero word last block found
 1423/5: 134 340|121 340                                                     MFSKQ14; PARQ14;               / skip label block
 1424/3: 134 340|121 340                                                     MFSKQ14; PARQ14;               / skip last block marker
 1425/1: 041|033|301 000 062                                                 ZERO; NOT; S.mthead;           / marker for rewinds

                                                                       oldform:                             / MT is old format -- no prog header block
 1426/0: 134 340|121 340                                                     MFSKQ14; PARQ14;               / skip either label or A-block

                                                                          // ZERO; SET4; OUT; SHL+32; S.chan+7;    / channel 7 device number
                                                                          // ZERO; SET4; OUT; SHL+32; S.chan+6;    / channel 6 device number

 1426/4: 304 003 100|200 321 275                                             SET.y0; JS.startlp;                   / set printer buffer pointers

                                                                          // F.Z38; SHL+10; JNEZ.notkalgol;        / channels 4 & 5 only needed by Kalgol

                                                                          // ZERO; SET4; OUT; SHL+32; S.chan+5;    / channel 5 device number
                                                                          // ZERO; SET4; OUT; SHL+32; S.chan+4;    / channel 4 device number

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

                                                                       notkalgol:
 1432/1: 320 013 071|164 027|224 043 027                                     F.Z38; SHL+11; J<Z.brick81;            / enter brick 81 if Usercode

 1433/3: 136 010                                                             MRWDQ0;      / temp

 1433/5: 017|317 234 364 207 011 131                                   *mtlab: = P SYSTAPE9;
 1435/0: 000 000 003 062 003 065                                       *out8: = Q 0/buff/buff+3;
 1436/0: 034 053 102 256 030 220                                       progname: =#07025502 53414220;   / M KAB0
 1437/0: 102 112 036 173 134 365                                               =P 0DH--USU;

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

 1460/0: 000 000 003 100 003 101                                       v11: = Q 0/y0/y0+1;
 1461/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
 1462/0: 304 006 100|200 321 275                                             SET1600; JS.startlp;
 1463/0: 304 003 077|304 003 073|042|170 343|036|170 350                     SET.endwords; SET.words; DUP; SRM14; -; SC14;
 1465/0: 204 321 301                                                         JS.abstolp;
 1465/3: 304 003 077|304 003 073|042|170 343|036|170 350                     SET.endwords; SET.words; DUP; SRM14; -; SC14;
 1467/3: 204 321 301                                                         JS.abstolp;
 1470/0: 304 003 100|304 003 073|042|170 343|036|170 350                     SET.endwords+1; SET.words; DUP; SRM14; -; SC14;
 1472/0: 204 321 301|136 010                                                 JS.abstolp; MRWDQ0;
 1472/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};
 1477/0: 377 377 377 377 377 240                                       *endwords: = #7777777777777640;


                                                                       !end

                                                                       *y0:

Reached end of file
                                                                       !end

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