Annotation of cci/d/macro4/cp.lst, revision 1.1

1.1     ! root        1:    1  00000000                                  LL0:
        !             2:    2  00000000                                         .data
        !             3:    3  000001c8 *                                .set CPMDCB,21
        !             4:    4  000001c8 *                                .set DC_OFF,2
        !             5:    5  000001c8 *                                .set DC_ON,1
        !             6:    6  000001c8 *                                .set MME,9
        !             7:    7  000001c8 *                                .set DCR,27
        !             8:    8  000001c8 *                                .set PDCS,28
        !             9:    9  000001c8 *                                .set CTL_SW,0x41b
        !            10:   10  000001c8 *                                       .comm   _tmp_lw,4
        !            11:   11  000001c8 *                                       .align  2
        !            12:   12  000001c8 *                                       .globl  _cpbuf_sz
        !            13:   13  000001c8 *                                _cpbuf_sz:
        !            14:   14  000001c8 *  00000001                             .long   1
        !            15:   15  000001cc *                                       .align  2
        !            16:   16  000001cc *                                       .globl  _charcnt
        !            17:   17  000001cc *                                _charcnt:
        !            18:   18  000001cc *  00000000                             .long   0
        !            19:   19  000001d0 *                                       .comm   _cpout,204
        !            20:   20  000001d0 *                                       .comm   _cpin,8
        !            21:   21  000001d0 *                                .set HISR,0x410
        !            22:   22  000001d0 *                                       .text
        !            23:   23  00000000                                         .align  1
        !            24:   24  00000000                                         .globl  _putstr
        !            25:   25  00000000                                  _putstr:
        !            26:   26  0000B88C    0000                                 .word   L17
        !            27:   27  0000B88E                                   # 
        !            28:   28  0000B88E                                   # /*  Console Processor Interface     */
        !            29:   29  0000B88E                                   # /*  Tahoe version, Nov. 1982        */
        !            30:   30  0000B88E                                   # 
        !            31:   31  0000B88E                                   # /****************************************/
        !            32:   32  0000B88E                                   # /*                                  */
        !            33:   33  0000B88E                                   # /*  Reduced DCB layout for byte     */
        !            34:   34  0000B88E                                   # /*  communication.                  */
        !            35:   35  0000B88E                                   # /*                                  */
        !            36:   36  0000B88E                                   # /****************************************/
        !            37:   37  0000B88E                                   # 
        !            38:   38  0000B88E                                   # asm(".set CPMDCB,21");
        !            39:   39  0000B88E                                   # asm(".set DC_OFF,2");
        !            40:   40  0000B88E                                   # asm(".set DC_ON,1");
        !            41:   41  0000B88E                                   # asm(".set MME,9");
        !            42:   42  0000B88E                                   # asm(".set DCR,27");
        !            43:   43  0000B88E                                   # asm(".set PDCS,28");
        !            44:   44  0000B88E                                   # asm(".set CTL_SW,0x41b");  /* Addr of switches to turn on Cache, MME, Fault */
        !            45:   45  0000B88E                                   # long tmp_lw;
        !            46:   46  0000B88E                                   # 
        !            47:   47  0000B88E                                   # 
        !            48:   48  0000B88E                                   # #define     CPBUFLEN 200            /* Output buffer length */
        !            49:   49  0000B88E                                   # struct      cphdr
        !            50:   50  0000B88E                                   # {
        !            51:   51  0000B88E                                   #     char    cp_unit;        /* Done bit & unit # */
        !            52:   52  0000B88E                                   #     char    cp_comm;        /* Command */
        !            53:   53  0000B88E                                   #     short   cp_count;       /* Counter (when relevant) */
        !            54:   54  0000B88E                                   # };
        !            55:   55  0000B88E                                   # 
        !            56:   56  0000B88E                                   # struct      cpdcb_o                 /* Output structure */
        !            57:   57  0000B88E                                   # {
        !            58:   58  0000B88E                                   #     struct  cphdr   cp_hdr;
        !            59:   59  0000B88E                                   #     char    cp_buf[CPBUFLEN]; /* Buffer for output or 'stty' */
        !            60:   60  0000B88E                                   # };
        !            61:   61  0000B88E                                   # 
        !            62:   62  0000B88E                                   # struct      cpdcb_i                 /* Structure for input */
        !            63:   63  0000B88E                                   # {
        !            64:   64  0000B88E                                   #     struct  cphdr   cp_hdr;
        !            65:   65  0000B88E                                   #     char    cpi_buf[4];     /* Buffer for input */
        !            66:   66  0000B88E                                   # };
        !            67:   67  0000B88E                                   # 
        !            68:   68  0000B88E                                   # #define     CPDONE  0x80            /* 'Done' bit in cp_unit */
        !            69:   69  0000B88E                                   # #define     CPTAKE  0x40            /* CP 'ack' to this cpdcb */
        !            70:   70  0000B88E                                   # 
        !            71:   71  0000B88E                                   #             /* Values for 'unit' */
        !            72:   72  0000B88E                                   # #define     CPUNIT  0               /* The CP itself */
        !            73:   73  0000B88E                                   # #define     CPCONS  1               /* Console line */
        !            74:   74  0000B88E                                   # #define     CPREMOT 2               /* Remote line */
        !            75:   75  0000B88E                                   # 
        !            76:   76  0000B88E                                   #             /* Values for 'command' */
        !            77:   77  0000B88E                                   # #define     CPRESET 0
        !            78:   78  0000B88E                                   # #define     CPWRITE 1
        !            79:   79  0000B88E                                   # #define     CPREAD  2
        !            80:   80  0000B88E                                   # #define     CPSTTY  3
        !            81:   81  0000B88E                                   # #define     CPBOOT  4
        !            82:   82  0000B88E                                   # 
        !            83:   83  0000B88E                                   # 
        !            84:   84  0000B88E                                   # /*  Put a char to CPU2 console */
        !            85:   85  0000B88E                                   # 
        !            86:   86  0000B88E                                   # #define NCHAR       1
        !            87:   87  0000B88E                                   # 
        !            88:   88  0000B88E                                   # long cpbuf_sz = 1;          /* Buffer size   */
        !            89:   89  0000B88E                                   # long charcnt = 0;
        !            90:   90  0000B88E                                   # struct cpdcb_o cpout;                       /* DCB for output */
        !            91:   91  0000B88E                                   # struct cpdcb_i cpin;                        /* DCB for input */
        !            92:   92  0000B88E                                   # 
        !            93:   93  0000B88E                                   # asm(".set HISR,0x410");
        !            94:   94  0000B88E                                   # 
        !            95:   95  0000B88E                                   # putstr(str)
        !            96:   96  0000B88E                                   # char *str;
        !            97:   97  0000B88E                                   # {   long c_cnt;
        !            98:   98  0000B88E    11 75                                jbr     L19
        !            99:   99  0000B890                                  L20:
        !           100:  100  0000B890                                   # 
        !           101:  101  0000B890                                   #     cpout.cp_hdr.cp_unit = CPCONS;          /* Reset done bit */
        !           102:  102  0000B890    6f 01 effffffff5                     cvtlb   $1,_cpout
        !           103:  103  0000B897                                   #     cpout.cp_hdr.cp_comm = CPWRITE;         /* Set command */
        !           104:  104  0000B897    6f 01 efffffffef                     cvtlb   $1,_cpout+1
        !           105:  105  0000B89E                                   #     for(c_cnt=0;;c_cnt++) {
        !           106:  106  0000B89E    4d adc8                              clrl    -56(fp)
        !           107:  107  0000B8A1                                  L23:
        !           108:  108  0000B8A1                                   #             cpout.cp_buf[c_cnt] = *str++;
        !           109:  109  0000B8A1    0d 8f00000004 50                     movl    $_cpout+4,r0
        !           110:  110  0000B8A8    0d adc8 51                           movl    -56(fp),r1
        !           111:  111  0000B8AC    09 bd04 4160                         movb    *4(fp),(r0)[r1]
        !           112:  112  0000B8B1    6d ad04                              incl    4(fp)
        !           113:  113  0000B8B4                                   #             if (cpout.cp_buf[c_cnt]=='\n') {
        !           114:  114  0000B8B4    0d 8f00000004 50                     movl    $_cpout+4,r0
        !           115:  115  0000B8BB    0d adc8 51                           movl    -56(fp),r1
        !           116:  116  0000B8BF    19 4160 0a                           cmpb    (r0)[r1],$10
        !           117:  117  0000B8C3    21 12                                jneq    L24
        !           118:  118  0000B8C5                                   #                      c_cnt++;
        !           119:  119  0000B8C5    6d adc8                              incl    -56(fp)
        !           120:  120  0000B8C8                                   #                      cpout.cp_buf[c_cnt]='\r';
        !           121:  121  0000B8C8    0d 8f00000004 50                     movl    $_cpout+4,r0
        !           122:  122  0000B8CF    0d adc8 51                           movl    -56(fp),r1
        !           123:  123  0000B8D3    6f 0d 4160                           cvtlb   $13,(r0)[r1]
        !           124:  124  0000B8D7                                   #                      }
        !           125:  125  0000B8D7                                   #             if (cpout.cp_buf[c_cnt]=='\0') break;
        !           126:  126  0000B8D7                                  L24:
        !           127:  127  0000B8D7    0d 8f00000004 50                     movl    $_cpout+4,r0
        !           128:  128  0000B8DE    0d adc8 51                           movl    -56(fp),r1
        !           129:  129  0000B8E2    59 4160                              tstb    (r0)[r1]
        !           130:  130  0000B8E5    21 02                                jneq    L25
        !           131:  131  0000B8E7    11 05                                jbr     L22
        !           132:  132  0000B8E9                                   #     }
        !           133:  133  0000B8E9                                  L25:
        !           134:  134  0000B8E9                                  L21:
        !           135:  135  0000B8E9    6d adc8                              incl    -56(fp)
        !           136:  136  0000B8EC    11 b3                                jbr     L23
        !           137:  137  0000B8EE                                  L22:
        !           138:  138  0000B8EE                                   #     if (c_cnt) {
        !           139:  139  0000B8EE    5d adc8                              tstl    -56(fp)
        !           140:  140  0000B8F1    31 11                                jeql    L26
        !           141:  141  0000B8F3                                   #             cpout.cp_hdr.cp_count = c_cnt;
        !           142:  142  0000B8F3    7f adc8 efffffff93                   cvtlw   -56(fp),_cpout+2
        !           143:  143  0000B8FB                                   #             cp_poll('\0'); }
        !           144:  144  0000B8FB    dd 00                                pushl   $0
        !           145:  145  0000B8FD    fe 08 ef000000c6                     callf   $8,_cp_poll
        !           146:  146  0000B904                                   # }
        !           147:  147  0000B904                                  L26:
        !           148:  148  0000B904    40                                   ret#2
        !           149:  149  0000B905                                         .set    L17,0x0
        !           150:  150  0000B905                                  L19:
        !           151:  151  0000B905    3c 38 5d 5e                          subl3   $56,fp,sp
        !           152:  152  0000B909    11 85                                jbr     L20
        !           153:  153  0000B90B                                         .data
        !           154:  154  000001d0 *                                       .text
        !           155:  155  0000B90B    00                                   .align  1
        !           156:  156  0000B90C                                         .globl  _putchar
        !           157:  157  0000B90C                                  _putchar:
        !           158:  158  0000B90C    0000                                 .word   L29
        !           159:  159  0000B90E                                   # 
        !           160:  160  0000B90E                                   # putchar(c)
        !           161:  161  0000B90E                                   # {
        !           162:  162  0000B90E    11 33                                jbr     L31
        !           163:  163  0000B910                                  L32:
        !           164:  164  0000B910                                   #     cpout.cp_hdr.cp_unit = CPCONS;          /* Reset done bit */
        !           165:  165  0000B910    6f 01 efffffff75                     cvtlb   $1,_cpout
        !           166:  166  0000B917                                   #     cpout.cp_hdr.cp_comm = CPWRITE;         /* Set command */
        !           167:  167  0000B917    6f 01 efffffff6f                     cvtlb   $1,_cpout+1
        !           168:  168  0000B91E                                   #     cpout.cp_buf[charcnt] = c;
        !           169:  169  0000B91E    0d 8f00000004 50                     movl    $_cpout+4,r0
        !           170:  170  0000B925    0d ef0000012d 51                     movl    _charcnt,r1
        !           171:  171  0000B92C    6f ad04 4160                         cvtlb   4(fp),(r0)[r1]
        !           172:  172  0000B931                                   #     cpout.cp_hdr.cp_count = 1;
        !           173:  173  0000B931    7f 01 efffffff56                     cvtlw   $1,_cpout+2
        !           174:  174  0000B938                                   #     cp_poll(c);
        !           175:  175  0000B938    dd ad04                              pushl   4(fp)
        !           176:  176  0000B93B    fe 08 ef00000088                     callf   $8,_cp_poll
        !           177:  177  0000B942                                   # }
        !           178:  178  0000B942    40                                   ret#2
        !           179:  179  0000B943                                         .set    L29,0x0
        !           180:  180  0000B943                                  L31:
        !           181:  181  0000B943    11 cb                                jbr     L32
        !           182:  182  0000B945                                         .data
        !           183:  183  000001d0 *                                       .text
        !           184:  184  0000B945    00                                   .align  1
        !           185:  185  0000B946                                         .globl  _rdchar
        !           186:  186  0000B946                                  _rdchar:
        !           187:  187  0000B946    1000                                 .word   L34
        !           188:  188  0000B948                                   # 
        !           189:  189  0000B948                                   # 
        !           190:  190  0000B948                                   # char rdchar()
        !           191:  191  0000B948                                   # {
        !           192:  192  0000B948    11 36                                jbr     L36
        !           193:  193  0000B94A                                  L37:
        !           194:  194  0000B94A                                   # register long       r12;
        !           195:  195  0000B94A                                   #     cpin.cp_hdr.cp_unit = CPCONS;           /* Reset done bit */
        !           196:  196  0000B94A    6f 01 efffffff3b                     cvtlb   $1,_cpin
        !           197:  197  0000B951                                   #     cpin.cp_hdr.cp_comm = CPREAD;           /* Set command */
        !           198:  198  0000B951    6f 02 efffffff35                     cvtlb   $2,_cpin+1
        !           199:  199  0000B958                                   #     cpin.cp_hdr.cp_count = 1;
        !           200:  200  0000B958    7f 01 efffffff2f                     cvtlw   $1,_cpin+2
        !           201:  201  0000B95F                                   #     cp_pollr();
        !           202:  202  0000B95F    fe 04 ef0000001c                     callf   $4,_cp_pollr
        !           203:  203  0000B966                                   #     r12 = (long)(&cpin.cpi_buf[0]);
        !           204:  204  0000B966    0d 8f00000004 5c                     movl    $_cpin+4,r12
        !           205:  205  0000B96D                                   #     asm("mtpr r12,$0x1c");                  /* mtpr r11,$PDCS */
        !           206:  206  0000B96D    ad 5c 1c                      mtpr r12,$0x1c
        !           207:  207  0000B970                                   #     return(cpin.cpi_buf[0] & 0x7f);
        !           208:  208  0000B970    89 efffffff1a 50                     cvtbl   _cpin+4,r0
        !           209:  209  0000B977    ac 887f 50                           andl2   $127,r0
        !           210:  210  0000B97B    89 50 50                             cvtbl   r0,r0
        !           211:  211  0000B97E    40                                   ret#1
        !           212:  212  0000B97F                                   # }
        !           213:  213  0000B97F    40                                   ret#1
        !           214:  214  0000B980                                         .set    L34,0x1000
        !           215:  215  0000B980                                  L36:
        !           216:  216  0000B980    11 c8                                jbr     L37
        !           217:  217  0000B982                                         .data
        !           218:  218  000001d0 *                                       .text
        !           219:  219  0000B982                                         .align  1
        !           220:  220  0000B982                                         .globl  _cp_pollr
        !           221:  221  0000B982                                  _cp_pollr:
        !           222:  222  0000B982    1800                                 .word   L39
        !           223:  223  0000B984                                   # 
        !           224:  224  0000B984                                   # 
        !           225:  225  0000B984                                   # /*  Poll CP on read
        !           226:  226  0000B984                                   # */
        !           227:  227  0000B984                                   # cp_pollr()
        !           228:  228  0000B984                                   # {   register long r12, r11, time;
        !           229:  229  0000B984    11 42                                jbr     L41
        !           230:  230  0000B986                                  L42:
        !           231:  231  0000B986                                   # 
        !           232:  232  0000B986                                   #     r12 = ((long)&cpin) & 0xffffff;
        !           233:  233  0000B986    bc 8f00ffffff 8f00000000             andl3   $16777215,$_cpin,r0
        !           234:                   50 
        !           235:  234  0000B992    0d 50 5c                             movl    r0,r12
        !           236:  235  0000B995                                   #     asm("mtpr r12,$CPMDCB");
        !           237:  236  0000B995    ad 5c 15                      mtpr r12,$CPMDCB
        !           238:  237  0000B998                                   # 
        !           239:  238  0000B998                                   #     r11 = (long)(&cpin.cp_hdr.cp_unit);
        !           240:  239  0000B998    0d 8f00000000 5b                     movl    $_cpin,r11
        !           241:  240  0000B99F                                   #     while (!(cpin.cp_hdr.cp_unit & CPDONE)) { 
        !           242:  241  0000B99F                                  L43:
        !           243:  242  0000B99F    89 effffffee7 50                     cvtbl   _cpin,r0
        !           244:  243  0000B9A6    3d 890080 50                         bitl    $128,r0
        !           245:  244  0000B9AB    21 05                                jneq    L44
        !           246:  245  0000B9AD                                   #             asm("mtpr r11,$0x1c");                  /* mtpr r11,$PDCS */
        !           247:  246  0000B9AD    ad 5b 1c                      mtpr r11,$0x1c
        !           248:  247  0000B9B0                                   #             }
        !           249:  248  0000B9B0    11 ed                                jbr     L43
        !           250:  249  0000B9B2                                  L44:
        !           251:  250  0000B9B2                                   #     if (!(cpin.cp_hdr.cp_unit & CPDONE)) cp_hlt();  /* Time out */
        !           252:  251  0000B9B2    89 effffffed4 50                     cvtbl   _cpin,r0
        !           253:  252  0000B9B9    3d 890080 50                         bitl    $128,r0
        !           254:  253  0000B9BE    21 07                                jneq    L45
        !           255:  254  0000B9C0    fe 04 ef0000006d                     callf   $4,_cp_hlt
        !           256:  255  0000B9C7                                   # }
        !           257:  256  0000B9C7                                  L45:
        !           258:  257  0000B9C7    40                                   ret#2
        !           259:  258  0000B9C8                                         .set    L39,0x1800
        !           260:  259  0000B9C8                                  L41:
        !           261:  260  0000B9C8    11 bc                                jbr     L42
        !           262:  261  0000B9CA                                         .data
        !           263:  262  000001d0 *                                       .text
        !           264:  263  0000B9CA                                         .align  1
        !           265:  264  0000B9CA                                         .globl  _cp_poll
        !           266:  265  0000B9CA                                  _cp_poll:
        !           267:  266  0000B9CA    1c00                                 .word   L47
        !           268:  267  0000B9CC                                   # 
        !           269:  268  0000B9CC                                   # 
        !           270:  269  0000B9CC                                   # /*  Poll CP on write
        !           271:  270  0000B9CC                                   # */
        !           272:  271  0000B9CC                                   # cp_poll(c)
        !           273:  272  0000B9CC                                   # char c;
        !           274:  273  0000B9CC                                   # {   register long r12, r11, time;
        !           275:  274  0000B9CC    11 64                                jbr     L49
        !           276:  275  0000B9CE                                  L50:
        !           277:  276  0000B9CE                                   # 
        !           278:  277  0000B9CE                                   #     time = 200000;
        !           279:  278  0000B9CE    0d 8f00030d40 5a                     movl    $200000,r10
        !           280:  279  0000B9D5                                   #     r12 = ((long)&cpout) & 0xffffff;
        !           281:  280  0000B9D5    bc 8f00ffffff 8f00000000             andl3   $16777215,$_cpout,r0
        !           282:                   50 
        !           283:  281  0000B9E1    0d 50 5c                             movl    r0,r12
        !           284:  282  0000B9E4                                   #     asm("mtpr r12,$CPMDCB");
        !           285:  283  0000B9E4    ad 5c 15                      mtpr r12,$CPMDCB
        !           286:  284  0000B9E7                                   #     asm("mtpr r12,$CPMDCB");
        !           287:  285  0000B9E7    ad 5c 15                      mtpr r12,$CPMDCB
        !           288:  286  0000B9EA                                   # 
        !           289:  287  0000B9EA                                   #     r11 = (long)(&cpout.cp_hdr.cp_unit);
        !           290:  288  0000B9EA    0d 8f00000000 5b                     movl    $_cpout,r11
        !           291:  289  0000B9F1                                   #     while (time-- && !(cpout.cp_hdr.cp_unit & CPDONE)) { 
        !           292:  290  0000B9F1                                  L51:
        !           293:  291  0000B9F1    0d 5a 50                             movl    r10,r0
        !           294:  292  0000B9F4    7d 5a                                decl    r10
        !           295:  293  0000B9F6    5d 50                                tstl    r0
        !           296:  294  0000B9F8    31 13                                jeql    L52
        !           297:  295  0000B9FA    89 effffffe8c 50                     cvtbl   _cpout,r0
        !           298:  296  0000BA01    3d 890080 50                         bitl    $128,r0
        !           299:  297  0000BA06    21 05                                jneq    L52
        !           300:  298  0000BA08                                   #             asm("mtpr r11,$0x1c");                  /* mtpr r11,$PDCS */
        !           301:  299  0000BA08    ad 5b 1c                      mtpr r11,$0x1c
        !           302:  300  0000BA0B                                   #             }
        !           303:  301  0000BA0B    11 e4                                jbr     L51
        !           304:  302  0000BA0D                                  L52:
        !           305:  303  0000BA0D                                   #     if (!(cpout.cp_hdr.cp_unit & CPDONE)) cp_hlt(); /* Time out */
        !           306:  304  0000BA0D    89 effffffe79 50                     cvtbl   _cpout,r0
        !           307:  305  0000BA14    3d 890080 50                         bitl    $128,r0
        !           308:  306  0000BA19    21 07                                jneq    L53
        !           309:  307  0000BA1B    fe 04 ef00000012                     callf   $4,_cp_hlt
        !           310:  308  0000BA22                                   #     if (c== '\n') putchar('\r');
        !           311:  309  0000BA22                                  L53:
        !           312:  310  0000BA22    19 ad07 0a                           cmpb    7(fp),$10
        !           313:  311  0000BA26    21 09                                jneq    L54
        !           314:  312  0000BA28    dd 0d                                pushl   $13
        !           315:  313  0000BA2A    fe 08 effffffedb                     callf   $8,_putchar
        !           316:  314  0000BA31                                   # }
        !           317:  315  0000BA31                                  L54:
        !           318:  316  0000BA31    40                                   ret#2
        !           319:  317  0000BA32                                         .set    L47,0x1C00
        !           320:  318  0000BA32                                  L49:
        !           321:  319  0000BA32    11 9a                                jbr     L50
        !           322:  320  0000BA34                                         .data
        !           323:  321  000001d0 *                                       .text
        !           324:  322  0000BA34                                         .align  1
        !           325:  323  0000BA34                                         .globl  _cp_hlt
        !           326:  324  0000BA34                                  _cp_hlt:
        !           327:  325  0000BA34    0000                                 .word   L55
        !           328:  326  0000BA36                                   # 
        !           329:  327  0000BA36                                   # cp_hlt()
        !           330:  328  0000BA36                                   # {
        !           331:  329  0000BA36    11 17                                jbr     L57
        !           332:  330  0000BA38                                  L58:
        !           333:  331  0000BA38                                   #     asm("movl $0xeeeeeeee,r0");
        !           334:  332  0000BA38    0d 8feeeeeeee 50              movl $0xeeeeeeee,r0
        !           335:  333  0000BA3F                                   #     asm("movl $0xeeeeeeee,r1");
        !           336:  334  0000BA3F    0d 8feeeeeeee 51              movl $0xeeeeeeee,r1
        !           337:  335  0000BA46                                   #     asm("movl $0xeeeeeeee,r2");
        !           338:  336  0000BA46    0d 8feeeeeeee 52              movl $0xeeeeeeee,r2
        !           339:  337  0000BA4D                                   #     asm("halt");
        !           340:  338  0000BA4D    00                            halt
        !           341:  339  0000BA4E                                   # }
        !           342:  340  0000BA4E    40                                   ret#2
        !           343:  341  0000BA4F                                         .set    L55,0x0
        !           344:  342  0000BA4F                                  L57:
        !           345:  343  0000BA4F    11 e7                                jbr     L58
        !           346:  344  0000BA51                                         .data
        !           347:  345  000001d0 *                                 # 
        !           348:  345  000001d0 *                                 # 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.