DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦fc693dee9⟧

    Length: 18566 (0x4886)
    Notes: UNIX file
    Names: »machine.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX Filesystem
        └─ ⟦this⟧ »cmd/as/z8001/machine.c« 

Hex Dump

Dumping the first 0x40 bytes of each record
0x0000…0200 (0,)  2f 2a 0a 20 2a 20 4d 61 63 68 69 6e 65 20 6f 70 20 64 65 63 6f 64 65 20 61 6e 64 0a 20 2a 20 66 6f 72 6d 61 74 2e 20 54 68 69 73 20 63 6f 64 65 20 68 61 6e 64 6c 65 73 20 62 6f 74 68 0a 20 2a   ┆/*  * Machine op decode and  * format. This code handles both  *┆
0x0200…0400 (1,)  44 52 3a 0a 09 63 61 73 65 20 53 5f 54 52 54 3a 0a 09 63 61 73 65 20 53 5f 54 52 54 52 3a 0a 09 63 61 73 65 20 53 5f 43 50 44 3a 0a 09 63 61 73 65 20 53 5f 43 50 53 3a 0a 09 63 61 73 65 20 53   ┆DR:  case S_TRT:  case S_TRTR:  case S_CPD:  case S_CPS:  case S┆
0x0400…0600 (2,)  6b 69 6e 64 29 20 7b 0a 0a 09 63 61 73 65 20 53 5f 53 45 47 4d 3a 0a 09 09 73 65 67 66 6c 61 67 20 3d 20 73 70 2d 3e 73 5f 61 64 64 72 3b 0a 09 09 69 66 20 28 73 65 67 66 6c 61 67 29 0a 09 09   ┆kind) {   case S_SEGM:   segflag = sp->s_addr;   if (segflag)   ┆
0x0600…0800 (3,)  20 21 3d 20 52 29 0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 6f 75 74 78 78 28 6f 70 7c 72 6f 66 28 64 73 74 29 2c 20 26 73 72 63 2c 20 52 4f 4b 7c 55 50 34 29 3b 0a 09 09 62 72 65 61 6b 3b 0a   ┆ != R)    aerr();   outxx(op|rof(dst), &src, ROK|UP4);   break; ┆
0x0800…0a00 (4,)  09 09 09 69 66 20 28 73 70 2d 3e 73 5f 6b 69 6e 64 20 21 3d 20 53 5f 49 56 4e 29 0a 09 09 09 09 09 09 61 65 72 72 28 29 3b 0a 09 09 09 09 09 6f 70 20 26 3d 20 7e 6d 61 73 6b 3b 0a 09 09 09 09   ┆   if (sp->s_kind != S_IVN)       aerr();      op &= ~mask;     ┆
0x0a00…0c00 (5,)  3a 0a 09 63 61 73 65 20 53 5f 54 52 54 52 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09 09 63 6f 6d 6d 61 28 29 3b 0a 09 09 67 65 74 61 64 64 72 28 26 73 72 63 29 3b 0a 09 09 63   ┆:  case S_TRTR:   getaddr(&dst);   comma();   getaddr(&src);   c┆
0x0c00…0e00 (6,)  28 72 6f 66 28 73 72 63 29 3c 3c 34 29 29 3b 0a 09 09 6f 75 74 61 77 28 28 72 6f 66 28 63 6e 74 29 3c 3c 38 29 20 7c 20 28 72 6f 66 28 64 73 74 29 3c 3c 34 29 20 7c 20 63 63 29 3b 0a 09 09 62   ┆(rof(src)<<4));   outaw((rof(cnt)<<8) | (rof(dst)<<4) | cc);   b┆
0x0e00…1000 (7,)  21 3d 20 52 29 0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 63 68 65 63 6b 72 65 67 28 72 6f 66 28 64 73 74 29 2c 20 66 6c 61 67 29 3b 0a 09 09 66 6c 61 67 20 3d 20 52 4f 4b 7c 49 52 4f 4b 7c 44   ┆!= R)    aerr();   checkreg(rof(dst), flag);   flag = ROK|IROK|D┆
0x1000…1200 (8,)  64 72 2d 31 3b 0a 09 09 7d 0a 09 09 6f 75 74 78 78 28 6f 70 2c 20 26 64 73 74 2c 20 52 4f 4b 7c 49 52 4f 4b 7c 44 41 4f 4b 7c 58 4f 4b 7c 55 50 34 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63   ┆dr-1;   }   outxx(op, &dst, ROK|IROK|DAOK|XOK|UP4);   break;   c┆
0x1200…1400 (9,)  0a 09 09 69 66 20 28 6d 6f 66 28 73 72 63 29 3d 3d 52 20 26 26 20 6d 6f 66 28 64 73 74 29 3d 3d 52 29 20 7b 0a 09 09 09 6f 75 74 61 77 28 6f 70 20 7c 20 72 6f 66 28 73 72 63 29 29 3b 0a 09 09   ┆   if (mof(src)==R && mof(dst)==R) {    outaw(op | rof(src));   ┆
0x1400…1600 (10,) 4f 4e 47 3b 0a 09 09 09 6f 75 74 78 78 28 6f 70 7c 72 6f 66 28 64 73 74 29 2c 20 26 73 72 63 2c 20 66 6c 61 67 29 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 09 69 66 20 28 6f 70 21 3d   ┆ONG;    outxx(op|rof(dst), &src, flag);    break;   }   if (op!=┆
0x1600…1800 (11,) 65 20 53 5f 49 4e 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09 09 63 6f 6d 6d 61 28 29 3b 0a 09 09 67 65 74 61 64 64 72 28 26 73 72 63 29 3b 0a 09 09 69 66 20 28 6d 6f 66 28 64   ┆e S_IN:   getaddr(&dst);   comma();   getaddr(&src);   if (mof(d┆
0x1800…1a00 (12,) 20 28 6d 6f 66 28 73 72 63 29 20 3d 3d 20 52 29 20 7b 0a 09 09 09 69 66 20 28 6d 6f 66 28 64 73 74 29 20 3d 3d 20 49 52 29 20 7b 0a 09 09 09 09 6f 75 74 61 77 28 6f 70 20 7c 20 28 72 6f 66 28   ┆ (mof(src) == R) {    if (mof(dst) == IR) {     outaw(op | (rof(┆
0x1a00…1c00 (13,) 45 47 29 20 7b 0a 09 09 09 6f 75 74 61 6c 28 73 72 63 2e 65 5f 61 64 64 72 29 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 09 69 66 20 28 21 73 65 67 66 6c 61 67 29 20 7b 0a 09 09 09 61   ┆EG) {    outal(src.e_addr);    break;   }   if (!segflag) {    a┆
0x1c00…1e00 (14,) ee 05 14 60 94 06 1d a0 37 6a 00 04 27 80 ee 05 1d 86 94 80 94 0a 37 60 00 04 5d 0a 80 00 02 92 1c e1 06 07 a9 ff 9e 08 ab f1 2f ed a1 fd 51 ed 00 06 5f 00 80 00 00 00 a9 f3 93 e1 51 ed 00 06   ┆î  `    7j  ' î       7`  ]      á  ©ÿ  «ñ/í¡ýQí  _     ©ó áQí  ┆
0x1e00…2000 (15,) 2c 20 26 64 73 74 2c 20 61 64 64 72 29 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 09 61 65 72 72 28 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 4c   ┆, &dst, addr);     break;    }   }   aerr();   break;   case S_L┆
0x2000…2200 (16,) 64 6f 74 2d 3e 73 5f 61 64 64 72 20 2b 3d 20 6a 70 64 61 73 7a 3b 0a 09 09 09 09 66 6c 61 67 20 3d 20 31 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 69 66 20 28 64 73 74 2e 65 5f 61   ┆dot->s_addr += jpdasz;     flag = 1;    } else {     if (dst.e_a┆
0x2200…2400 (17,) 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 4c 44 41 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09 09 63 6f 6d 6d 61 28 29 3b 0a 09 09 67 65 74 61 64 64 72 28 26 73   ┆   break;   case S_LDA:   getaddr(&dst);   comma();   getaddr(&s┆
0x2400…2600 (18,) 6c 74 3a 0a 09 09 65 72 72 28 27 6f 27 29 3b 0a 09 7d 0a 7d 0a 0a 2f 2a 0a 20 2a 20 46 6f 72 6d 61 74 20 63 61 6c 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 20 2a 2f 0a 6d 63 68 63 61 6c   ┆lt:   err('o');  } }  /*  * Format calr instructions.  */ mchcal┆
0x2600…2800 (19,) 69 66 20 28 64 69 73 70 3c 2d 32 30 34 38 20 7c 7c 20 64 69 73 70 3e 32 30 34 37 29 20 7b 0a 09 09 09 09 2f 2a 20 64 6f 65 73 6e 27 74 20 72 65 61 63 68 20 2a 2f 0a 09 09 09 09 2b 2b 66 6c 61   ┆if (disp<-2048 || disp>2047) {     /* doesn't reach */     ++fla┆
0x2800…2a00 (20,) 66 20 28 6f 70 20 3d 3d 20 4c 44 42 29 20 7b 0a 09 09 09 6f 75 74 61 77 28 4c 44 42 49 20 7c 20 28 72 6f 66 28 64 73 74 29 3c 3c 38 29 20 7c 20 28 61 64 64 72 26 30 33 37 37 29 29 3b 0a 09 09   ┆f (op == LDB) {    outaw(LDBI | (rof(dst)<<8) | (addr&0377));   ┆
0x2a00…2c00 (21,) 72 65 74 75 72 6e 3b 0a 09 09 7d 0a 09 09 6f 75 74 78 78 28 6f 70 7c 72 6f 66 28 64 73 74 29 2c 20 26 73 72 63 2c 20 66 6c 61 67 29 3b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 09 69 66 20 28   ┆return;   }   outxx(op|rof(dst), &src, flag);   return;  }  if (┆
0x2c00…2e00 (22,) 73 74 2c 20 49 52 4f 4b 7c 44 41 4f 4b 7c 58 4f 4b 7c 55 50 34 29 3b 0a 09 09 6f 75 74 69 77 28 6f 70 2c 20 26 73 72 63 29 3b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 09 61 65 72 72 28 29 3b   ┆st, IROK|DAOK|XOK|UP4);   outiw(op, &src);   return;  }  aerr();┆
0x2e00…3000 (23,) 41 29 0a 09 09 61 64 64 72 20 7c 3d 20 54 4f 43 54 4c 52 3b 0a 09 6f 75 74 61 77 28 6f 70 20 7c 20 28 63 74 6c 72 3c 3c 34 29 20 7c 20 61 64 64 72 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 4f 75 74   ┆A)   addr |= TOCTLR;  outaw(op | (ctlr<<4) | addr); }  /*  * Out┆
0x3000…3200 (24,) 64 65 3d 3d 58 29 0a 09 09 6f 75 74 73 6f 66 28 6d 65 73 70 2c 20 31 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 4f 75 74 70 75 74 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 20 77 6f 72 64 2e 0a 20 2a 20   ┆de==X)   outsof(mesp, 1); }  /*  * Output an immediate word.  * ┆
0x3200…3400 (25,) 65 72 72 6f 72 2e 0a 20 2a 2f 0a 63 6f 6d 6d 61 28 29 0a 7b 0a 09 69 66 20 28 67 65 74 6e 62 28 29 20 21 3d 20 27 2c 27 29 0a 09 09 71 65 72 72 28 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 52 65 61   ┆error.  */ comma() {  if (getnb() != ',')   qerr(); }  /*  * Rea┆
0x3400…3600 (26,) 5d 20 3d 3d 20 4c 45 54 54 45 52 29 20 7b 0a 09 09 67 65 74 69 64 28 69 64 2c 20 63 29 3b 0a 09 09 69 66 20 28 28 73 70 3d 6c 6f 6f 6b 75 70 28 69 64 2c 20 30 29 29 21 3d 4e 55 4c 4c 20 26 26   ┆] == LETTER) {   getid(id, c);   if ((sp=lookup(id, 0))!=NULL &&┆
0x3600…3800 (27,) 28 29 21 3d 27 29 27 29 0a 09 09 09 71 65 72 72 28 29 3b 0a 09 09 69 66 20 28 65 73 70 2d 3e 65 5f 74 79 70 65 21 3d 45 5f 41 52 45 47 20 7c 7c 20 65 73 70 2d 3e 65 5f 61 64 64 72 3d 3d 30 29   ┆()!=')')    qerr();   if (esp->e_type!=E_AREG || esp->e_addr==0)┆
0x3800…3a00 (28,) 09 09 65 73 70 2d 3e 65 5f 6d 6f 64 65 20 3d 20 58 20 2b 20 28 69 6e 74 29 72 65 67 2e 65 5f 61 64 64 72 3b 0a 09 09 72 65 74 75 72 6e 3b 0a 09 7d 0a 09 75 6e 67 65 74 28 63 29 3b 0a 09 69 66   ┆  esp->e_mode = X + (int)reg.e_addr;   return;  }  unget(c);  if┆
0x3a00…3c00 (29,) 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 47 65 6e 65 72 61 6c 20 6f 70 20 66 6f 72 6d 61 74 74 69 6e 67 2e 0a 20 2a 20 48 61 6e 64 6c 65 73 20 69 6d 6d 65 64 69 61 74 65 73 2c 20 74 77 6f 20 73 69 7a   ┆; }  /*  * General op formatting.  * Handles immediates, two siz┆
0x3c00…3e00 (30,) 0a 09 63 61 73 65 20 49 4d 3a 0a 09 09 69 66 20 28 28 66 26 49 4d 4f 4b 29 20 3d 3d 20 30 29 0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 6f 70 20 7c 3d 20 6d 62 69 74 73 28 30 2c 20 30 29 3b 0a   ┆  case IM:   if ((f&IMOK) == 0)    aerr();   op |= mbits(0, 0); ┆
0x3e00…4000 (31,) 69 63 61 74 65 20 62 79 74 65 73 20 66 6f 72 20 62 79 74 65 0a 09 09 20 2a 20 69 6d 6d 65 64 69 61 74 65 20 6f 70 73 2e 0a 09 09 20 2a 2f 0a 09 09 69 66 20 28 28 6f 70 26 57 29 20 3d 3d 20 30   ┆icate bytes for byte    * immediate ops.    */   if ((op&W) == 0┆
0x4000…4200 (32,) 09 09 09 6f 66 20 3d 20 65 73 70 2d 3e 65 5f 61 64 64 72 3b 0a 09 09 09 69 66 20 28 6f 66 3e 3d 30 20 26 26 20 6f 66 3c 3d 32 35 35 29 20 7b 0a 09 09 09 09 6f 75 74 61 77 28 28 28 73 6e 26 30   ┆   of = esp->e_addr;    if (of>=0 && of<=255) {     outaw(((sn&0┆
0x4200…4400 (33,) 0a 6d 69 6e 69 74 28 29 0a 7b 0a 09 73 65 67 66 6c 61 67 20 3d 20 53 45 47 43 50 55 3b 0a 09 62 70 20 3d 20 62 62 3b 0a 09 62 6d 20 3d 20 30 31 3b 0a 7d 0a 0a 73 65 74 62 69 74 28 62 29 0a 7b   ┆ minit() {  segflag = SEGCPU;  bp = bb;  bm = 01; }  setbit(b) {┆
0x4400…4600 (34,) 20 65 78 70 72 20 2a 65 73 70 3b 0a 7b 0a 09 69 66 20 28 28 65 73 70 2d 3e 65 5f 6d 6f 64 65 26 7e 30 31 37 29 21 3d 44 41 20 7c 7c 0a 09 65 73 70 2d 3e 65 5f 74 79 70 65 21 3d 45 5f 44 49 52   ┆ expr *esp; {  if ((esp->e_mode&~017)!=DA ||  esp->e_type!=E_DIR┆
0x4600…4800 (35,) 6c 70 31 2c 20 2a 6c 70 32 3b 0a 09 69 6e 74 20 63 3b 0a 09 63 68 61 72 20 69 64 5b 4e 43 50 4c 4e 5d 3b 0a 0a 09 6c 70 20 3d 20 28 73 74 72 75 63 74 20 6c 6f 63 20 2a 29 20 6e 65 77 28 73 69   ┆lp1, *lp2;  int c;  char id[NCPLN];   lp = (struct loc *) new(si┆
0x4800…4886 (36,) 65 73 73 29 20 6c 70 3b 09 2f 2a 20 48 69 64 65 20 70 6f 69 6e 74 65 72 20 69 6e 20 61 64 64 72 65 73 73 20 28 75 67 68 29 20 2a 2f 0a 09 72 65 74 75 72 6e 20 28 6c 70 29 3b 0a 7d 0a 0a 63 68   ┆ess) lp; /* Hide pointer in address (ugh) */  return (lp); }  ch┆