Annotation of cci/d/entry/mod.c, revision 1.1.1.1

1.1       root        1: #define error_hdl2 error
                      2: 
                      3: #define C      0x1
                      4: #define V      0x2
                      5: #define Z      0x4
                      6: #define N      0x8
                      7: 
                      8: static long error_count, SS1, SS2, SS3;
                      9: 
                     10: /* Some global variables       */
                     11: static long flag_msk, psl, divr, rem, remainder;
                     12: int ix;
                     13: 
                     14: /*     MOD intructions         */
                     15: 
                     16: mod()
                     17: {
                     18:        SS1 = 0;                /* Print error message */
                     19:        SS2 = 0;                /* Do not loop on error */
                     20:        modl2();
                     21:        modl3();
                     22:        modl2u();
                     23:        modl3u();
                     24:        asm("jmp *return");
                     25: }
                     26: 
                     27: static modl2()
                     28: {
                     29:        long exp_psw;
                     30:        int unsign, no_op;
                     31: 
                     32:        unsign = 0;
                     33:        no_op = 2;
                     34:        ix = 1;
                     35: 
                     36:        /* MOD OF 2 LONG_OPERANDS       */
                     37:        flag_msk = exp_psw = 0;
                     38:        flag_msk = Z|V|C;
                     39:        exp_psw = N | C;
                     40:        divr = 98765;
                     41:        rem = -345678;
                     42:        modl(unsign,no_op,-49383,exp_psw);
                     43: 
                     44:        ++ix;
                     45:        flag_msk = exp_psw = 0;
                     46:        flag_msk = N|V|C;
                     47:        exp_psw = Z | C;
                     48:        divr = 2;
                     49:        rem = -345678;
                     50:        modl(unsign,no_op,0,exp_psw);
                     51: 
                     52:        ++ix;
                     53:        flag_msk = exp_psw = 0;
                     54:        flag_msk = N|V|C;
                     55:        exp_psw = C | N;
                     56:        asm("movl $-2,_divr");
                     57:        rem = -345679;
                     58:        modl(unsign,no_op,-1,exp_psw);
                     59: 
                     60:        /* check overflow bit   */
                     61: 
                     62:        ++ix;
                     63:        flag_msk = exp_psw = 0;
                     64:        flag_msk = N|Z|C;
                     65:        exp_psw = V | C | N;
                     66:        /* divide largest neg. no by -1 */
                     67:        asm("movl $-1,_divr");
                     68:        rem = 0x80000000;
                     69:        modl(unsign,no_op,0x80000000,exp_psw);  
                     70: 
                     71: }
                     72: 
                     73: static modl2u()
                     74: {
                     75:        long  exp_psw;
                     76:        int unsign, no_op;
                     77: 
                     78:        unsign = 1;
                     79:        no_op = 2;
                     80:        ix = 1;
                     81: 
                     82:        /* MOD OF 2 UNSIGNED LONG_OPERANDS      */
                     83:        flag_msk = exp_psw = 0;
                     84:        flag_msk = N|Z|V|C;
                     85:        exp_psw =  C;
                     86:        divr = 0xaaaaaaaa;
                     87:        rem = 0xaaaaaaad;
                     88:        modl(unsign,no_op,3,exp_psw);
                     89: 
                     90:        ++ix;
                     91:        flag_msk = exp_psw = 0;
                     92:        flag_msk = Z|V|C;
                     93:        exp_psw =  C ;
                     94:        divr = 0xaaaaaaad;
                     95:        rem = 0xaaaaaaaa;
                     96:        modl(unsign,no_op,0xaaaaaaaa,exp_psw);
                     97: 
                     98:        ++ix;
                     99:        flag_msk = exp_psw = 0;
                    100:        flag_msk = N|V|C;
                    101:        exp_psw = Z | C;
                    102:        divr = 2;
                    103:        rem = 0xffffff00;
                    104:        modl(unsign,no_op,0,exp_psw);
                    105: 
                    106:        ++ix;
                    107:        flag_msk = exp_psw = 0;
                    108:        flag_msk = N|Z|C;
                    109:        exp_psw = C ;
                    110:        asm("movl $0xffffffff,_divr");
                    111:        rem = 0x80000000;
                    112:        modl(unsign,no_op,0x80000000,exp_psw);
                    113: }
                    114: 
                    115: static modl3()
                    116: {
                    117:        long  exp_psw;
                    118:        int unsign, no_op;
                    119: 
                    120:        unsign = 0;
                    121:        no_op = 3;
                    122:        ix = 1;
                    123: 
                    124:        /* MOD OF 3 LONG_OPERANDS               */
                    125:        flag_msk = exp_psw = 0;
                    126:        flag_msk = Z|V|C;
                    127:        exp_psw = N | C;
                    128:        divr = 98765;
                    129:        rem = -345678;
                    130:        modl(unsign,no_op,-49383,exp_psw);
                    131: 
                    132:        ++ix;
                    133:        flag_msk = exp_psw = 0;
                    134:        flag_msk = N|V|C;
                    135:        exp_psw = Z | C;
                    136:        divr = 3;
                    137:        rem = -345678;
                    138:        modl(unsign,no_op,0,exp_psw);
                    139: 
                    140:        ++ix;
                    141:        flag_msk = exp_psw = 0;
                    142:        flag_msk = N|V|C;
                    143:        exp_psw = C | N;
                    144:        asm("movl $-3,_divr");
                    145:        rem = -345679;
                    146:        modl(unsign,no_op,-1,exp_psw);
                    147: 
                    148:        ++ix;
                    149:        /* check overflow bit   */
                    150:        flag_msk = exp_psw = 0;
                    151:        flag_msk = N|Z|C;
                    152:        exp_psw =  V | C | N;
                    153:        /* divide largest neg. no by -1 */
                    154:        asm("movl $-1,_divr");
                    155:        rem = 0x80000000;
                    156:        modl(unsign,no_op,0x80000000,exp_psw);  
                    157: 
                    158:        ++ix;
                    159:        flag_msk = exp_psw = 0;
                    160:        flag_msk = Z|V|C;
                    161:        exp_psw = N | C;
                    162:        divr = 98765;
                    163:        rem = -345678;
                    164:        modl(unsign,no_op,-49383,exp_psw);
                    165: 
                    166:        ++ix;
                    167:        flag_msk = exp_psw = 0;
                    168:        flag_msk = N|V|C;
                    169:        exp_psw = Z | C;
                    170:        divr = 3;
                    171:        rem = -345678;
                    172:        modl(unsign,no_op,0,exp_psw);
                    173: 
                    174:        ++ix;
                    175:        flag_msk = exp_psw = 0;
                    176:        flag_msk = N|V|C;
                    177:        exp_psw = C | N;
                    178:        asm("movl $-3,_divr");
                    179:        rem = -345679;
                    180:        modl(unsign,no_op,-1,exp_psw);
                    181: 
                    182:        ++ix;
                    183:        /* check overflow bit   */
                    184:        flag_msk = exp_psw = 0;
                    185:        flag_msk = N|Z|C;
                    186:        exp_psw =  V | C | N;
                    187:        /* divide largest neg. no by -1 */
                    188:        asm("movl $-1,_divr");
                    189:        rem = 0x80000000;
                    190:        modl(unsign,no_op,0x80000000,exp_psw);  
                    191: }
                    192: 
                    193: static modl3u()
                    194: {
                    195:        long  exp_psw;
                    196:        int unsign, no_op;
                    197: 
                    198:        unsign = 1;
                    199:        no_op = 3;
                    200:        ix = 1;
                    201: 
                    202:        /* MOD OF 3 UNSIGNED LONG_OPERANDS      */
                    203:        flag_msk = exp_psw = 0;
                    204:        flag_msk = N|Z|V|C;
                    205:        exp_psw = C;
                    206:        divr = 0xaaaaaaaa;
                    207:        rem = 0xaaaaaaad;
                    208:        modl(unsign,no_op,3,exp_psw);
                    209: 
                    210:        ++ix;
                    211:        flag_msk = exp_psw = 0;
                    212:        flag_msk = Z|V|C;
                    213:        exp_psw =  C;
                    214:        divr = 0xbbbbbbbc;
                    215:        rem =  0xbbbbbbbb;
                    216:        modl(unsign,no_op,0xbbbbbbbb,exp_psw);
                    217: 
                    218:        ++ix;
                    219:        flag_msk = exp_psw = 0;
                    220:        flag_msk = N|V|C;
                    221:        exp_psw = Z | C;
                    222:        divr = 2;
                    223:        rem = 0xffffff00;
                    224:        modl(unsign,no_op,0,exp_psw);
                    225: 
                    226:        ++ix;
                    227:        flag_msk = exp_psw = 0;
                    228:        flag_msk = N|Z|C;
                    229:        exp_psw = C;
                    230:        asm("movl $-1,_divr");
                    231:        rem = 0x80000000;
                    232:        modl(unsign,no_op,0x80000000,exp_psw);
                    233: 
                    234:        ++ix;
                    235:        flag_msk = exp_psw = 0;
                    236:        flag_msk = N|Z|V|C;
                    237:        exp_psw = C;
                    238:        divr = 0xaaaaaaaa;
                    239:        rem = 0xaaaaaaad;
                    240:        modl(unsign,no_op,3,exp_psw);
                    241: 
                    242:        ++ix;
                    243:        flag_msk = exp_psw = 0;
                    244:        flag_msk = Z|V|C;
                    245:        exp_psw =  C;
                    246:        divr = 0xbbbbbbbc;
                    247:        rem =  0xbbbbbbbb;
                    248:        modl(unsign,no_op,0xbbbbbbbb,exp_psw);
                    249: 
                    250:        ++ix;
                    251:        flag_msk = exp_psw = 0;
                    252:        flag_msk = N|V|C;
                    253:        exp_psw = Z | C;
                    254:        divr = 2;
                    255:        rem = 0xffffff00;
                    256:        modl(unsign,no_op,0,exp_psw);
                    257: 
                    258:        ++ix;
                    259:        flag_msk = exp_psw = 0;
                    260:        flag_msk = N|Z|C;
                    261:        exp_psw = C;
                    262:        asm("movl $-1,_divr");
                    263:        rem = 0x80000000;
                    264:        modl(unsign,no_op,0x80000000,exp_psw);
                    265: }
                    266: 
                    267: static modl(unsign,no_op,exp_reslt,exp_psw)
                    268: long exp_reslt,  exp_psw;
                    269: int unsign, no_op;
                    270: {
                    271:        char *msg1, *msg2;
                    272:        long op1, op2, op3, psw;
                    273: 
                    274:    flag_msk = flag_msk << 16;
                    275:    op1 = divr;
                    276:    op3 = op2 = rem;
                    277:    for(;;)
                    278:         {
                    279:        if (unsign)
                    280:                {
                    281:                if (no_op==2) msg1 = "** Test MODL2U **\n";
                    282:                        else msg1 = "** Test MODL3U **\n";
                    283:                }
                    284:            else
                    285:                {
                    286:                if (no_op==2) msg1 = "** Test MODL2 **\n";
                    287:                        else msg1 = "** Test MODL3 **\n";
                    288:                }
                    289: 
                    290:        divr = op1;
                    291:        rem = op2;
                    292: 
                    293:        if (unsign)
                    294:                {       /* unsigned division */
                    295:                if (no_op==2)
                    296:                     {
                    297:                if (ix==1){
                    298:                                                        /* unsigned division */
                    299:                        asm("bicpsw $0xf");             /* clear all flags */
                    300:                        asm("bispsw _flag_msk");        /* set flags       */
                    301:                        asm("modl2u  _divr,_rem");      /* mem to mem      */
                    302:                        asm("movpsl _psl");     /* save PSL */
                    303:                        remainder = rem;
                    304:                          }
                    305:                if (ix==2){
                    306:                                /* unsigned division */
                    307:                        asm("movl   _rem,r7");          /* load rem reg    */
                    308:                        asm("bicpsw $0xf");             /* clear all flags */
                    309:                        asm("bispsw _flag_msk");        /* set flags       */
                    310:                        asm("modl2u  _divr,r7");        /* mem to reg      */
                    311:                        asm("movpsl _psl");     /* save PSL */
                    312:                        asm("movl   r7,_rem");          /* reload rem adres */
                    313:                        remainder = rem;
                    314:                          }
                    315:                if (ix==3){
                    316:                                /* unsigned division */
                    317:                        asm("movl   _divr,r6");         /* load divr reg   */
                    318:                        asm("bicpsw $0xf");             /* clear all flags */
                    319:                        asm("bispsw _flag_msk");        /* set flags       */
                    320:                        asm("modl2u  r6,_rem");         /* reg to mem      */
                    321:                        asm("movpsl _psl");     /* save PSL */
                    322:                        remainder = rem;
                    323:                          }
                    324:                if (ix==4){
                    325:                                /* unsigned division */
                    326:                        asm("movl   _divr,r6");         /* load divr reg   */
                    327:                        asm("movl   _rem,r7");          /* load rem reg    */
                    328:                        asm("bicpsw $0xf");             /* clear all flags */
                    329:                        asm("bispsw _flag_msk");        /* set flags       */
                    330:                        asm("modl2u  r6,r7");           /* reg to reg      */
                    331:                        asm("movpsl _psl");     /* save PSL */
                    332:                        asm("movl   r7,_rem");          /* reload rem adres */
                    333:                        remainder = rem;
                    334:                         }
                    335:                }
                    336:                   else
                    337:                {
                    338:                if (ix==1){
                    339:                        asm("bicpsw $0xf");             /* clear all flags */
                    340:                        asm("bispsw _flag_msk");        /* set flags       */
                    341:                        asm("modl3u  _divr,_rem,_remainder");/* mem mem mem */
                    342:                        asm("movpsl _psl");     /* save PSL */
                    343:                          }
                    344:                if (ix==2){
                    345:                        asm("movl   _divr,r6");         /* load divr reg   */
                    346:                        asm("movl   _rem,r7");          /* load rem reg    */
                    347:                        asm("bicpsw $0xf");             /* clear all flags */
                    348:                        asm("bispsw _flag_msk");        /* set flags       */
                    349:                        asm("modl3u  r6,r7,_remainder");/* reg to reg to mem */
                    350:                        asm("movpsl _psl");     /* save PSL */
                    351:                          }
                    352:                if (ix==3){
                    353:                        asm("movl   _divr,r6");         /* load divr reg   */
                    354:                        asm("movl   _rem,r7");          /* load rem reg    */
                    355:                        asm("movl   _remainder,r8"); /* load remainder reg */
                    356:                        asm("bicpsw $0xf");             /* clear all flags */
                    357:                        asm("bispsw _flag_msk");        /* set flags       */
                    358:                        asm("modl3u  r6,r7,r8");        /* reg reg reg */
                    359:                        asm("movpsl _psl");     /* save PSL */
                    360:                        asm("movl   r8,_remainder"); /* reload remainder */
                    361:                          }
                    362:                if (ix==4){
                    363:                        asm("movl   _rem,r7");          /* load rem reg    */
                    364:                        asm("movl   _remainder,r8"); /* load remainder reg */
                    365:                        asm("bicpsw $0xf");             /* clear all flags */
                    366:                        asm("bispsw _flag_msk");        /* set flags       */
                    367:                        asm("modl3u  _divr,r7,r8");     /* mem reg reg */
                    368:                        asm("movpsl _psl");     /* save PSL */
                    369:                        asm("movl   r8,_remainder"); /* reload remainder */
                    370:                          }
                    371:                if (ix==5){
                    372:                        asm("movl   _rem,r7");          /* load rem reg    */
                    373:                        asm("bicpsw $0xf");             /* clear all flags */
                    374:                        asm("bispsw _flag_msk");        /* set flags       */
                    375:                        asm("modl3u  _divr,r7,_remainder"); /* mem reg mem */
                    376:                        asm("movpsl _psl");     /* save PSL */
                    377:                          }
                    378:                if (ix==6){
                    379:                        asm("bicpsw $0xf");             /* clear all flags */
                    380:                        asm("bispsw _flag_msk");        /* set flags       */
                    381:                        asm("modl3u  _divr,_rem,r8");   /* mem mem reg */
                    382:                        asm("movpsl _psl");     /* save PSL */
                    383:                        asm("movl   r8,_remainder"); /* reload remainder */
                    384:                          }
                    385:                if (ix==7){
                    386:                        asm("movl   _divr,r6");         /* load divr reg   */
                    387:                        asm("movl   _rem,r7");          /* load rem reg    */
                    388:                        asm("bicpsw $0xf");             /* clear all flags */
                    389:                        asm("bispsw _flag_msk");        /* set flags       */
                    390:                        asm("modl3u  r6,_rem,_remainder");/* reg mem mem */
                    391:                        asm("movpsl _psl");     /* save PSL */
                    392:                          }
                    393:                if (ix==8){
                    394:                        asm("movl   _divr,r6");         /* load divr reg   */
                    395:                        asm("movl   _remainder,r8"); /* load remainder reg */
                    396:                        asm("bicpsw $0xf");             /* clear all flags */
                    397:                        asm("bispsw _flag_msk");        /* set flags       */
                    398:                        asm("modl3u  r6,_rem,r8");      /* reg mem reg  */
                    399:                        asm("movpsl _psl");     /* save PSL */
                    400:                        asm("movl   r8,_remainder"); /* reload remainder */
                    401:                          }
                    402:                     }
                    403:                }
                    404:             else
                    405:                {       /* signed division */
                    406:                if (no_op==2)
                    407:                {
                    408:                if (ix==1){
                    409:                        asm("bicpsw $0xf");             /* clear all flags */
                    410:                        asm("bispsw _flag_msk");        /* set flags       */
                    411:                        asm("modl2  _divr,_rem");       /* mem to mem   */
                    412:                        asm("movpsl _psl");     /* save PSL */
                    413:                        remainder = rem;
                    414:                         }
                    415:                if (ix==2){
                    416:                        asm("movl   _rem,r7");
                    417:                        asm("bicpsw $0xf");             /* clear all flags */
                    418:                        asm("bispsw _flag_msk");        /* set flags       */
                    419:                        asm("modl2  _divr,r7");         /* mem to reg      */
                    420:                        asm("movpsl _psl");     /* save PSL */
                    421:                        asm("movl   r7,_rem");          /* reload dest     */
                    422:                        remainder = rem;
                    423:                         }
                    424:                if (ix==3){
                    425:                        asm("movl   _divr,r6");         /* load divr reg   */
                    426:                        asm("bicpsw $0xf");             /* clear all flags */
                    427:                        asm("bispsw _flag_msk");        /* set flags       */
                    428:                        asm("modl2  r6,_rem");          /* reg to mem      */
                    429:                        asm("movpsl _psl");     /* save PSL */
                    430:                        remainder = rem;
                    431:                         }
                    432:                if (ix==4){
                    433:                        asm("movl   _divr,r6");         /* load divr reg   */
                    434:                        asm("movl   _rem,r7");          /* load rem reg    */
                    435:                        asm("bicpsw $0xf");             /* clear all flags */
                    436:                        asm("bispsw _flag_msk");        /* set flags       */
                    437:                        asm("modl2  r6,r7");            /* reg to reg      */
                    438:                        asm("movpsl _psl");     /* save PSL */
                    439:                        asm("movl   r7,_rem");          /* rload dest adres */
                    440:                        remainder = rem;
                    441:                         }
                    442:                }
                    443:                   else
                    444:                if (ix==1){
                    445:                        asm("bicpsw $0xf");             /* clear all flags */
                    446:                        asm("bispsw _flag_msk");        /* set flags       */
                    447:                        asm("modl3  _divr,_rem,_remainder"); /* mem mem mem */
                    448:                        asm("movpsl _psl");             /* save PSL */
                    449:                          }
                    450:                if (ix==2){
                    451:                        asm("movl   _divr,r6");         /* load divr reg   */
                    452:                        asm("movl   _rem,r7");          /* load rem reg    */
                    453:                        asm("bicpsw $0xf");             /* clear all flags */
                    454:                        asm("bispsw _flag_msk");        /* set flags       */
                    455:                        asm("modl3  r6,r7,_remainder");/* reg to reg to mem */
                    456:                        asm("movpsl _psl");     /* save PSL */
                    457:                          }
                    458:                if (ix==3){
                    459:                        asm("movl   _divr,r6");         /* load divr reg   */
                    460:                        asm("movl   _rem,r7");          /* load rem reg    */
                    461:                        asm("movl   _remainder,r8"); /* load remainder reg */
                    462:                        asm("bicpsw $0xf");             /* clear all flags */
                    463:                        asm("bispsw _flag_msk");        /* set flags       */
                    464:                        asm("modl3  r6,r7,r8"); /* reg reg reg */
                    465:                        asm("movpsl _psl");     /* save PSL */
                    466:                        asm("movl   r8,_remainder"); /* reload remainder */
                    467:                          }
                    468:                if (ix==4){
                    469:                        asm("movl   _rem,r7");          /* load rem reg    */
                    470:                        asm("movl   _remainder,r8"); /* load remainder reg */
                    471:                        asm("bicpsw $0xf");             /* clear all flags */
                    472:                        asm("bispsw _flag_msk");        /* set flags       */
                    473:                        asm("modl3  _divr,r7,r8");      /* mem reg reg */
                    474:                        asm("movpsl _psl");     /* save PSL */
                    475:                        asm("movl   r8,_remainder"); /* reload remainder */
                    476:                          }
                    477:                if (ix==5){
                    478:                        asm("movl   _rem,r7");          /* load rem reg    */
                    479:                        asm("bicpsw $0xf");             /* clear all flags */
                    480:                        asm("bispsw _flag_msk");        /* set flags       */
                    481:                        asm("modl3  _divr,r7,_remainder"); /* mem reg mem */
                    482:                        asm("movpsl _psl");     /* save PSL */
                    483:                          }
                    484:                if (ix==6){
                    485:                        asm("movl   _remainder,r8"); /* load remainder reg */
                    486:                        asm("bicpsw $0xf");             /* clear all flags */
                    487:                        asm("bispsw _flag_msk");        /* set flags       */
                    488:                        asm("modl3  _divr,_rem,r8");    /* mem mem reg */
                    489:                        asm("movpsl _psl");     /* save PSL */
                    490:                        asm("movl   r8,_remainder"); /* reload remainder */
                    491:                          }
                    492:                if (ix==7){
                    493:                        asm("movl   _divr,r6");         /* load divr reg   */
                    494:                        asm("movl   _rem,r7");          /* load rem reg    */
                    495:                        asm("bicpsw $0xf");             /* clear all flags */
                    496:                        asm("bispsw _flag_msk");        /* set flags       */
                    497:                        asm("modl3  r6,_rem,_remainder");/* reg mem mem */
                    498:                        asm("movpsl _psl");     /* save PSL */
                    499:                          }
                    500:                if (ix==8){
                    501:                        asm("movl   _divr,r6");         /* load divr reg   */
                    502:                        asm("movl   _remainder,r8"); /* load remainder reg */
                    503:                        asm("bicpsw $0xf");             /* clear all flags */
                    504:                        asm("bispsw _flag_msk");        /* set flags       */
                    505:                        asm("modl3  r6,_rem,r8");       /* reg mem reg  */
                    506:                        asm("movpsl _psl");     /* save PSL */
                    507:                        asm("movl   r8,_remainder"); /* reload remainder */
                    508:                          }
                    509:                }
                    510:        psw =  psl & 0xf;
                    511: 
                    512:        /*  check flags */
                    513:        if (psw != exp_psw)  
                    514:                {
                    515:                msg2 = "** error in psw flags ... \n";
                    516:                if (!SS1) error_hdl2(msg1,msg2,op1,op2,psw,exp_psw);
                    517:                        else error_count++;
                    518:                if (!SS2) break;
                    519:                        else continue;
                    520:                }
                    521: 
                    522:        if (divr != op1)
                    523:                {
                    524:                msg2 = "** divisor get changed in modulus operation \n";
                    525:                if (!SS1) error_hdl2(msg1,msg2,op1,op2,divr,op1);
                    526:                        else error_count++;
                    527:                if (!SS2) break;
                    528:                        else continue;
                    529:                }
                    530:        if (no_op == 3)
                    531:                {
                    532:                if (rem != op3)
                    533:                        {
                    534:                        msg2="** dividend get changed in modulus operation \n";
                    535:                        if (!SS1) error_hdl2(msg1,msg2,op1,op2,rem,op3);
                    536:                                 else error_count++;
                    537:                        if (!SS2) break;
                    538:                                else continue;
                    539:                        }
                    540:                }
                    541:        if (remainder != exp_reslt)
                    542:                {
                    543:                msg2 = "** incorrect result in modulus operation \n";
                    544:                if (!SS1) error_hdl2(msg1,msg2,op1,op2,remainder,exp_reslt);
                    545:                        else error_count++;
                    546:                if (!SS2) break;
                    547:                        else continue;
                    548:                }
                    549:        break;
                    550:        }
                    551: 
                    552: 
                    553: }

unix.superglobalmegacorp.com

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