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 - metrics - 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

0x0000…0020 (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   ┆/*  * Machine op decode and  * f┆
0x0020…0040       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   ┆ormat. This code handles both  *┆
0x0040…0060       20 66 6c 61 76 6f 75 72 73 20 6f 66 20 5a 69 6c 6f 67 20 5a 2d 38 30 30 30 2e 0a 20 2a 2f 0a 23   ┆ flavours of Zilog Z-8000.  */ #┆
0x0060…0080       69 6e 63 6c 75 64 65 20 22 61 73 6d 2e 68 22 0a 0a 73 74 61 74 69 63 09 63 68 61 72 09 73 65 67   ┆include "asm.h"  static char seg┆
0x0080…00a0       66 6c 61 67 3b 0a 23 69 66 20 53 45 47 43 50 55 0a 73 74 61 74 69 63 09 63 68 61 72 09 6a 70 64   ┆flag; #if SEGCPU static char jpd┆
0x00a0…00c0       61 73 7a 20 3d 20 36 3b 0a 73 74 61 74 69 63 09 63 68 61 72 09 63 61 6c 6c 73 7a 20 3d 20 36 3b   ┆asz = 6; static char callsz = 6;┆
0x00c0…00e0       0a 23 65 6c 73 65 0a 73 74 61 74 69 63 09 63 68 61 72 09 6a 70 64 61 73 7a 20 3d 20 34 3b 0a 73   ┆ #else static char jpdasz = 4; s┆
0x00e0…0100       74 61 74 69 63 09 63 68 61 72 09 63 61 6c 6c 73 7a 20 3d 20 34 3b 0a 23 65 6e 64 69 66 0a 0a 6d   ┆tatic char callsz = 4; #endif  m┆
0x0100…0120       61 63 68 69 6e 65 28 73 70 29 0a 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 73 79 6d 20 2a   ┆achine(sp) register struct sym *┆
0x0120…0140       73 70 3b 0a 7b 0a 09 73 77 69 74 63 68 20 28 73 70 2d 3e 73 5f 6b 69 6e 64 29 20 7b 09 09 2f 2a   ┆sp; {  switch (sp->s_kind) {  /*┆
0x0140…0160       20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 74 6f 20 63 61 6c 6c 20 2a 2f 0a 09 63 61 73   ┆ determine which to call */  cas┆
0x0160…0180       65 20 53 5f 53 45 47 4d 3a 0a 09 63 61 73 65 20 53 5f 45 56 45 4e 3a 0a 09 63 61 73 65 20 53 5f   ┆e S_SEGM:  case S_EVEN:  case S_┆
0x0180…01a0       4f 44 44 3a 0a 09 63 61 73 65 20 53 5f 48 41 4c 54 3a 0a 09 63 61 73 65 20 53 5f 52 3a 0a 09 63   ┆ODD:  case S_HALT:  case S_R:  c┆
0x01a0…01c0       61 73 65 20 53 5f 52 52 3a 0a 09 63 61 73 65 20 53 5f 52 45 54 3a 0a 09 63 61 73 65 20 53 5f 53   ┆ase S_RR:  case S_RET:  case S_S┆
0x01c0…01e0       43 3a 0a 09 63 61 73 65 20 53 5f 54 43 43 3a 0a 09 63 61 73 65 20 53 5f 44 49 3a 0a 09 63 61 73   ┆C:  case S_TCC:  case S_DI:  cas┆
0x01e0…0200       65 20 53 5f 46 4c 47 3a 0a 09 63 61 73 65 20 53 5f 49 4e 44 3a 0a 09 63 61 73 65 20 53 5f 49 4e   ┆e S_FLG:  case S_IND:  case S_IN┆
0x0200…0220 (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   ┆DR:  case S_TRT:  case S_TRTR:  ┆
0x0220…0240       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   ┆case S_CPD:  case S_CPS:  case S┆
0x0240…0260       5f 52 4c 3a 0a 09 63 61 73 65 20 53 5f 53 44 41 3a 0a 09 63 61 73 65 20 53 5f 45 58 3a 0a 09 63   ┆_RL:  case S_SDA:  case S_EX:  c┆
0x0260…0280       61 73 65 20 53 5f 52 53 52 43 3a 0a 09 63 61 73 65 20 53 5f 4a 50 3a 0a 09 63 61 73 65 20 53 5f   ┆ase S_RSRC:  case S_JP:  case S_┆
0x0280…02a0       43 4c 52 3a 0a 09 63 61 73 65 20 53 5f 43 41 4c 4c 3a 0a 09 63 61 73 65 20 53 5f 44 45 43 3a 0a   ┆CLR:  case S_CALL:  case S_DEC: ┆
0x02a0…02c0       09 63 61 73 65 20 53 5f 44 4a 4e 5a 3a 0a 09 63 61 73 65 20 53 5f 42 49 54 3a 0a 09 63 61 73 65   ┆ case S_DJNZ:  case S_BIT:  case┆
0x02c0…02e0       20 53 5f 53 52 41 3a 0a 09 63 61 73 65 20 53 5f 53 4c 41 3a 0a 09 63 61 73 65 20 53 5f 43 50 3a   ┆ S_SRA:  case S_SLA:  case S_CP:┆
0x02e0…0300       0a 09 09 6d 61 63 68 69 6e 65 31 28 73 70 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 64 65 66 61   ┆   machine1(sp);   break;   defa┆
0x0300…0320       75 6c 74 3a 0a 09 09 6d 61 63 68 69 6e 65 32 28 73 70 29 3b 0a 09 7d 0a 7d 0a 0a 6d 61 63 68 69   ┆ult:   machine2(sp);  } }  machi┆
0x0320…0340       6e 65 31 28 73 70 29 0a 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 73 79 6d 20 2a 73 70 3b   ┆ne1(sp) register struct sym *sp;┆
0x0340…0360       0a 7b 0a 09 72 65 67 69 73 74 65 72 20 6f 70 3b 0a 09 63 68 61 72 20 69 64 5b 4e 43 50 4c 4e 5d   ┆ {  register op;  char id[NCPLN]┆
0x0360…0380       3b 0a 09 73 74 72 75 63 74 20 65 78 70 72 20 63 6e 74 2c 20 64 73 74 2c 20 73 72 63 3b 0a 09 69   ┆;  struct expr cnt, dst, src;  i┆
0x0380…03a0       6e 74 20 63 2c 20 63 63 2c 20 64 69 73 70 3b 0a 09 69 6e 74 20 61 64 64 72 2c 20 66 6c 61 67 2c   ┆nt c, cc, disp;  int addr, flag,┆
0x03a0…03c0       20 6b 69 6e 64 2c 20 6d 61 73 6b 3b 0a 09 69 6e 74 20 6d 6f 64 65 2c 20 74 79 70 65 3b 0a 0a 09   ┆ kind, mask;  int mode, type;   ┆
0x03c0…03e0       6f 70 20 3d 20 73 70 2d 3e 73 5f 61 64 64 72 3b 0a 09 66 6c 61 67 20 3d 20 73 70 2d 3e 73 5f 66   ┆op = sp->s_addr;  flag = sp->s_f┆
0x03e0…0400       6c 61 67 26 30 78 30 33 3b 0a 09 73 77 69 74 63 68 20 28 6b 69 6e 64 20 3d 20 73 70 2d 3e 73 5f   ┆lag&0x03;  switch (kind = sp->s_┆
0x0400…0420 (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   ┆kind) {   case S_SEGM:   segflag┆
0x0420…0440       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   ┆ = sp->s_addr;   if (segflag)   ┆
0x0440…0460       09 6a 70 64 61 73 7a 20 3d 20 63 61 6c 6c 73 7a 20 3d 20 36 3b 20 65 6c 73 65 0a 09 09 09 6a 70   ┆ jpdasz = callsz = 6; else    jp┆
0x0460…0480       64 61 73 7a 20 3d 20 63 61 6c 6c 73 7a 20 3d 20 34 3b 0a 09 09 6c 6d 6f 64 65 20 3d 20 53 4c 49   ┆dasz = callsz = 4;   lmode = SLI┆
0x0480…04a0       53 54 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 45 56 45 4e 3a 0a 09 63 61 73   ┆ST;   break;   case S_EVEN:  cas┆
0x04a0…04c0       65 20 53 5f 4f 44 44 3a 0a 09 09 69 66 20 28 28 28 69 6e 74 29 64 6f 74 2d 3e 73 5f 61 64 64 72   ┆e S_ODD:   if (((int)dot->s_addr┆
0x04c0…04e0       26 30 31 29 20 3d 3d 20 28 69 6e 74 29 73 70 2d 3e 73 5f 61 64 64 72 29 20 7b 0a 09 09 09 69 66   ┆&01) == (int)sp->s_addr) {    if┆
0x04e0…0500       20 28 69 6e 62 73 73 20 3d 3d 20 30 29 0a 09 09 09 09 6f 75 74 61 62 28 30 29 3b 0a 09 09 09 65   ┆ (inbss == 0)     outab(0);    e┆
0x0500…0520       6c 73 65 0a 09 09 09 09 2b 2b 64 6f 74 2d 3e 73 5f 61 64 64 72 3b 0a 09 09 7d 0a 09 09 6c 6d 6f   ┆lse     ++dot->s_addr;   }   lmo┆
0x0520…0540       64 65 20 3d 20 41 4c 49 53 54 3b 0a 09 09 6c 61 64 64 72 20 3d 20 64 6f 74 2d 3e 73 5f 61 64 64   ┆de = ALIST;   laddr = dot->s_add┆
0x0540…0560       72 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 48 41 4c 54 3a 0a 09 09 6f 75 74   ┆r;   break;   case S_HALT:   out┆
0x0560…0580       61 77 28 6f 70 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 52 3a 0a 09 09 67   ┆aw(op);   break;   case S_R:   g┆
0x0580…05a0       65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09 09 6f 75 74 78 78 28 6f 70 2c 20 26 64 73 74 2c 20   ┆etaddr(&dst);   outxx(op, &dst, ┆
0x05a0…05c0       52 4f 4b 7c 55 50 34 7c 66 6c 61 67 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53   ┆ROK|UP4|flag);   break;   case S┆
0x05c0…05e0       5f 52 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   ┆_RR:   getaddr(&dst);   comma();┆
0x05e0…0600       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 73 74 29   ┆   getaddr(&src);   if (mof(dst)┆
0x0600…0620 (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   ┆ != R)    aerr();   outxx(op|rof┆
0x0620…0640       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   ┆(dst), &src, ROK|UP4);   break; ┆
0x0640…0660       0a 09 63 61 73 65 20 53 5f 52 45 54 3a 0a 09 09 69 66 20 28 6d 6f 72 65 28 29 29 0a 09 09 09 6f   ┆  case S_RET:   if (more())    o┆
0x0660…0680       70 20 7c 3d 20 63 6f 64 65 28 29 3b 0a 09 09 65 6c 73 65 0a 09 09 09 6f 70 20 7c 3d 20 55 4e 3b   ┆p |= code();   else    op |= UN;┆
0x0680…06a0       0a 09 09 6f 75 74 61 77 28 6f 70 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f   ┆   outaw(op);   break;   case S_┆
0x06a0…06c0       53 43 3a 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 73   ┆SC:   getaddr(&src);   if (mof(s┆
0x06c0…06e0       72 63 29 20 21 3d 20 44 41 29 0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 6f 75 74 61 62 28 53 43   ┆rc) != DA)    aerr();   outab(SC┆
0x06e0…0700       48 49 47 48 29 3b 0a 09 09 6f 75 74 72 62 28 26 73 72 63 2c 20 30 29 3b 0a 09 09 62 72 65 61 6b   ┆HIGH);   outrb(&src, 0);   break┆
0x0700…0720       3b 0a 0a 09 63 61 73 65 20 53 5f 54 43 43 3a 0a 09 09 6f 70 20 7c 3d 20 63 6f 64 65 28 29 3b 0a   ┆;   case S_TCC:   op |= code(); ┆
0x0720…0740       09 09 63 6f 6d 6d 61 28 29 3b 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09 09 6f 75   ┆  comma();   getaddr(&dst);   ou┆
0x0740…0760       74 78 78 28 6f 70 2c 20 26 64 73 74 2c 20 52 4f 4b 7c 55 50 34 29 3b 0a 09 09 62 72 65 61 6b 3b   ┆txx(op, &dst, ROK|UP4);   break;┆
0x0760…0780       0a 0a 09 63 61 73 65 20 53 5f 44 49 3a 0a 09 63 61 73 65 20 53 5f 46 4c 47 3a 0a 09 09 64 6f 20   ┆   case S_DI:  case S_FLG:   do ┆
0x0780…07a0       7b 0a 09 09 09 67 65 74 69 64 28 69 64 2c 20 2d 31 29 3b 0a 09 09 09 69 66 20 28 28 73 70 20 3d   ┆{    getid(id, -1);    if ((sp =┆
0x07a0…07c0       20 6c 6f 6f 6b 75 70 28 69 64 2c 20 30 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 09 09 09 61 65 72   ┆ lookup(id, 0)) == NULL)     aer┆
0x07c0…07e0       72 28 29 3b 0a 09 09 09 65 6c 73 65 20 7b 0a 09 09 09 09 6d 61 73 6b 20 3d 20 73 70 2d 3e 73 5f   ┆r();    else {     mask = sp->s_┆
0x07e0…0800       61 64 64 72 3b 0a 09 09 09 09 69 66 20 28 6b 69 6e 64 20 3d 3d 20 53 5f 44 49 29 20 7b 0a 09 09   ┆addr;     if (kind == S_DI) {   ┆
0x0800…0820 (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   ┆   if (sp->s_kind != S_IVN)     ┆
0x0820…0840       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   ┆  aerr();      op &= ~mask;     ┆
0x0840…0860       7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 69 66 20 28 73 70 2d 3e 73 5f 6b 69 6e 64 20 21 3d 20   ┆} else {      if (sp->s_kind != ┆
0x0860…0880       53 5f 46 4c 47 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 7c 3d   ┆S_FLGN)       aerr();      op |=┆
0x0880…08a0       20 6d 61 73 6b 3b 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 20 77 68 69 6c 65 20 28 28 63 20   ┆ mask;     }    }   } while ((c ┆
0x08a0…08c0       3d 20 67 65 74 6e 62 28 29 29 20 3d 3d 20 27 2c 27 29 3b 0a 09 09 75 6e 67 65 74 28 63 29 3b 0a   ┆= getnb()) == ',');   unget(c); ┆
0x08c0…08e0       09 09 6f 75 74 61 77 28 6f 70 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 49   ┆  outaw(op);   break;   case S_I┆
0x08e0…0900       4e 44 3a 0a 09 63 61 73 65 20 53 5f 49 4e 44 52 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74   ┆ND:  case S_INDR:   getaddr(&dst┆
0x0900…0920       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   ┆);   comma();   getaddr(&src);  ┆
0x0920…0940       09 63 6f 6d 6d 61 28 29 3b 0a 09 09 67 65 74 61 64 64 72 28 26 63 6e 74 29 3b 0a 09 09 69 66 20   ┆ comma();   getaddr(&cnt);   if ┆
0x0940…0960       28 6d 6f 66 28 64 73 74 29 21 3d 49 52 20 7c 7c 20 6d 6f 66 28 73 72 63 29 21 3d 49 52 20 7c 7c   ┆(mof(dst)!=IR || mof(src)!=IR ||┆
0x0960…0980       20 6d 6f 66 28 63 6e 74 29 21 3d 52 29 0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 6f 75 74 61 77   ┆ mof(cnt)!=R)    aerr();   outaw┆
0x0980…09a0       28 6f 70 20 7c 20 28 72 6f 66 28 73 72 63 29 3c 3c 34 29 29 3b 0a 09 09 6f 70 20 3d 20 73 70 2d   ┆(op | (rof(src)<<4));   op = sp-┆
0x09a0…09c0       3e 73 5f 6b 69 6e 64 3d 3d 53 5f 49 4e 44 20 3f 20 30 78 30 38 20 3a 20 30 78 30 30 3b 0a 09 09   ┆>s_kind==S_IND ? 0x08 : 0x00;   ┆
0x09c0…09e0       6f 75 74 61 77 28 6f 70 20 7c 20 28 72 6f 66 28 63 6e 74 29 3c 3c 38 29 20 7c 20 28 72 6f 66 28   ┆outaw(op | (rof(cnt)<<8) | (rof(┆
0x09e0…0a00       64 73 74 29 3c 3c 34 29 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 54 52 54   ┆dst)<<4));   break;   case S_TRT┆
0x0a00…0a20 (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   ┆:  case S_TRTR:   getaddr(&dst);┆
0x0a20…0a40       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   ┆   comma();   getaddr(&src);   c┆
0x0a40…0a60       6f 6d 6d 61 28 29 3b 0a 09 09 67 65 74 61 64 64 72 28 26 63 6e 74 29 3b 0a 09 09 69 66 20 28 6d   ┆omma();   getaddr(&cnt);   if (m┆
0x0a60…0a80       6f 66 28 64 73 74 29 21 3d 49 52 20 7c 7c 20 6d 6f 66 28 73 72 63 29 21 3d 49 52 20 7c 7c 20 6d   ┆of(dst)!=IR || mof(src)!=IR || m┆
0x0a80…0aa0       6f 66 28 63 6e 74 29 21 3d 52 29 0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 6f 75 74 61 77 28 6f   ┆of(cnt)!=R)    aerr();   outaw(o┆
0x0aa0…0ac0       70 20 7c 20 28 72 6f 66 28 64 73 74 29 3c 3c 34 29 29 3b 0a 09 09 6f 70 20 3d 20 73 70 2d 3e 73   ┆p | (rof(dst)<<4));   op = sp->s┆
0x0ac0…0ae0       5f 6b 69 6e 64 3d 3d 53 5f 54 52 54 20 3f 20 30 78 30 30 20 3a 20 30 78 30 45 3b 0a 09 09 6f 75   ┆_kind==S_TRT ? 0x00 : 0x0E;   ou┆
0x0ae0…0b00       74 61 77 28 6f 70 20 7c 20 28 72 6f 66 28 63 6e 74 29 3c 3c 38 29 20 7c 20 28 72 6f 66 28 73 72   ┆taw(op | (rof(cnt)<<8) | (rof(sr┆
0x0b00…0b20       63 29 3c 3c 34 29 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 43 50 44 3a 0a   ┆c)<<4));   break;   case S_CPD: ┆
0x0b20…0b40       09 63 61 73 65 20 53 5f 43 50 53 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09 09   ┆ case S_CPS:   getaddr(&dst);   ┆
0x0b40…0b60       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 6f 6d 6d   ┆comma();   getaddr(&src);   comm┆
0x0b60…0b80       61 28 29 3b 0a 09 09 67 65 74 61 64 64 72 28 26 63 6e 74 29 3b 0a 09 09 63 6f 6d 6d 61 28 29 3b   ┆a();   getaddr(&cnt);   comma();┆
0x0b80…0ba0       0a 09 09 63 63 20 3d 20 63 6f 64 65 28 29 3b 0a 09 09 6d 6f 64 65 20 3d 20 28 6b 69 6e 64 20 3d   ┆   cc = code();   mode = (kind =┆
0x0ba0…0bc0       3d 20 53 5f 43 50 44 29 20 3f 20 52 20 3a 20 49 52 3b 0a 09 09 69 66 20 28 6d 6f 66 28 64 73 74   ┆= S_CPD) ? R : IR;   if (mof(dst┆
0x0bc0…0be0       29 21 3d 6d 6f 64 65 20 7c 7c 20 6d 6f 66 28 73 72 63 29 21 3d 49 52 20 7c 7c 20 6d 6f 66 28 63   ┆)!=mode || mof(src)!=IR || mof(c┆
0x0be0…0c00       6e 74 29 21 3d 52 29 0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 6f 75 74 61 77 28 6f 70 20 7c 20   ┆nt)!=R)    aerr();   outaw(op | ┆
0x0c00…0c20 (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   ┆(rof(src)<<4));   outaw((rof(cnt┆
0x0c20…0c40       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   ┆)<<8) | (rof(dst)<<4) | cc);   b┆
0x0c40…0c60       72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 52 4c 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73   ┆reak;   case S_RL:   getaddr(&ds┆
0x0c60…0c80       74 29 3b 0a 09 09 69 66 20 28 6d 6f 66 28 64 73 74 29 20 21 3d 20 52 29 0a 09 09 09 61 65 72 72   ┆t);   if (mof(dst) != R)    aerr┆
0x0c80…0ca0       28 29 3b 0a 09 09 69 66 20 28 6d 6f 72 65 28 29 29 20 7b 0a 09 09 09 69 66 20 28 28 61 64 64 72   ┆();   if (more()) {    if ((addr┆
0x0ca0…0cc0       20 3d 20 67 65 74 61 69 6d 28 29 29 20 3d 3d 20 32 29 0a 09 09 09 09 6f 70 20 7c 3d 20 52 4c 42   ┆ = getaim()) == 2)     op |= RLB┆
0x0cc0…0ce0       59 32 3b 0a 09 09 09 65 6c 73 65 20 69 66 20 28 61 64 64 72 20 21 3d 20 31 29 0a 09 09 09 09 61   ┆Y2;    else if (addr != 1)     a┆
0x0ce0…0d00       65 72 72 28 29 3b 0a 09 09 7d 0a 09 09 6f 75 74 61 77 28 6f 70 20 7c 20 28 72 6f 66 28 64 73 74   ┆err();   }   outaw(op | (rof(dst┆
0x0d00…0d20       29 3c 3c 34 29 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 53 44 41 3a 0a 09   ┆)<<4));   break;   case S_SDA:  ┆
0x0d20…0d40       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   ┆ getaddr(&dst);   comma();   get┆
0x0d40…0d60       61 64 64 72 28 26 73 72 63 29 3b 0a 09 09 69 66 20 28 6d 6f 66 28 73 72 63 29 20 21 3d 20 52 29   ┆addr(&src);   if (mof(src) != R)┆
0x0d60…0d80       0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 6f 75 74 78 78 28 6f 70 2c 20 26 64 73 74 2c 20 52 4f   ┆    aerr();   outxx(op, &dst, RO┆
0x0d80…0da0       4b 7c 55 50 34 29 3b 0a 09 09 6f 75 74 61 77 28 72 6f 66 28 73 72 63 29 20 3c 3c 20 38 29 3b 0a   ┆K|UP4);   outaw(rof(src) << 8); ┆
0x0da0…0dc0       09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 45 58 3a 0a 09 63 61 73 65 20 53 5f 52 53   ┆  break;   case S_EX:  case S_RS┆
0x0dc0…0de0       52 43 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   ┆RC:   getaddr(&dst);   comma(); ┆
0x0de0…0e00       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 73 74 29 20   ┆  getaddr(&src);   if (mof(dst) ┆
0x0e00…0e20 (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   ┆!= R)    aerr();   checkreg(rof(┆
0x0e20…0e40       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   ┆dst), flag);   flag = ROK|IROK|D┆
0x0e40…0e60       41 4f 4b 7c 58 4f 4b 7c 55 50 34 3b 0a 09 09 69 66 20 28 6b 69 6e 64 20 3d 3d 20 53 5f 52 53 52   ┆AOK|XOK|UP4;   if (kind == S_RSR┆
0x0e60…0e80       43 29 0a 09 09 09 66 6c 61 67 20 7c 3d 20 49 4d 4f 4b 3b 0a 09 09 69 66 20 28 28 73 70 2d 3e 73   ┆C)    flag |= IMOK;   if ((sp->s┆
0x0e80…0ea0       5f 66 6c 61 67 26 53 5f 4c 29 20 21 3d 20 30 29 0a 09 09 09 66 6c 61 67 20 7c 3d 20 4c 4f 4e 47   ┆_flag&S_L) != 0)    flag |= LONG┆
0x0ea0…0ec0       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 66 6c 61   ┆;   outxx(op|rof(dst), &src, fla┆
0x0ec0…0ee0       67 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 4a 50 3a 0a 09 09 6f 70 20 7c   ┆g);   break;   case S_JP:   op |┆
0x0ee0…0f00       3d 20 6f 70 74 63 6f 64 65 28 29 3b 0a 09 63 61 73 65 20 53 5f 43 4c 52 3a 0a 09 63 61 73 65 20   ┆= optcode();  case S_CLR:  case ┆
0x0f00…0f20       53 5f 43 41 4c 4c 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09 09 66 6c 61 67 20   ┆S_CALL:   getaddr(&dst);   flag ┆
0x0f20…0f40       7c 3d 20 49 52 4f 4b 7c 44 41 4f 4b 7c 58 4f 4b 7c 55 50 34 3b 0a 09 09 69 66 20 28 6b 69 6e 64   ┆|= IROK|DAOK|XOK|UP4;   if (kind┆
0x0f40…0f60       20 3d 3d 20 53 5f 43 4c 52 29 0a 09 09 09 66 6c 61 67 20 7c 3d 20 52 4f 4b 3b 20 65 6c 73 65 0a   ┆ == S_CLR)    flag |= ROK; else ┆
0x0f60…0f80       09 09 09 66 6c 61 67 20 7c 3d 20 49 52 45 46 3b 0a 09 09 6f 75 74 78 78 28 6f 70 2c 20 26 64 73   ┆   flag |= IREF;   outxx(op, &ds┆
0x0f80…0fa0       74 2c 20 66 6c 61 67 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 44 45 43 3a   ┆t, flag);   break;   case S_DEC:┆
0x0fa0…0fc0       0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09 09 69 66 20 28 6d 6f 72 65 28 29 29 20   ┆   getaddr(&dst);   if (more()) ┆
0x0fc0…0fe0       7b 0a 09 09 09 69 66 20 28 28 61 64 64 72 20 3d 20 67 65 74 61 69 6d 28 29 29 3c 31 20 7c 7c 20   ┆{    if ((addr = getaim())<1 || ┆
0x0fe0…1000       61 64 64 72 3e 31 36 29 0a 09 09 09 09 61 65 72 72 28 29 3b 0a 09 09 09 6f 70 20 7c 3d 20 61 64   ┆addr>16)     aerr();    op |= ad┆
0x1000…1020 (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   ┆dr-1;   }   outxx(op, &dst, ROK|┆
0x1020…1040       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   ┆IROK|DAOK|XOK|UP4);   break;   c┆
0x1040…1060       61 73 65 20 53 5f 44 4a 4e 5a 3a 0a 09 09 67 65 74 61 64 64 72 28 26 63 6e 74 29 3b 0a 09 09 63   ┆ase S_DJNZ:   getaddr(&cnt);   c┆
0x1060…1080       6f 6d 6d 61 28 29 3b 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09 09 69 66 20 28 6d   ┆omma();   getaddr(&dst);   if (m┆
0x1080…10a0       6f 66 28 63 6e 74 29 20 21 3d 20 52 29 0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 6e 6f 74 78 73   ┆of(cnt) != R)    aerr();   notxs┆
0x10a0…10c0       65 67 28 26 64 73 74 29 3b 0a 09 09 64 69 73 70 20 3d 20 64 6f 74 2d 3e 73 5f 61 64 64 72 20 2b   ┆eg(&dst);   disp = dot->s_addr +┆
0x10c0…10e0       20 32 20 2d 20 64 73 74 2e 65 5f 61 64 64 72 3b 0a 09 09 64 69 73 70 20 3e 3e 3d 20 31 3b 0a 09   ┆ 2 - dst.e_addr;   disp >>= 1;  ┆
0x10e0…1100       09 69 66 20 28 64 69 73 70 3c 30 20 7c 7c 20 64 69 73 70 3e 31 32 37 29 0a 09 09 09 61 65 72 72   ┆ if (disp<0 || disp>127)    aerr┆
0x1100…1120       28 29 3b 0a 09 09 6f 75 74 61 77 28 6f 70 20 7c 20 28 72 6f 66 28 63 6e 74 29 3c 3c 38 29 20 7c   ┆();   outaw(op | (rof(cnt)<<8) |┆
0x1120…1140       20 64 69 73 70 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 42 49 54 3a 0a 09   ┆ disp);   break;   case S_BIT:  ┆
0x1140…1160       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   ┆ getaddr(&dst);   comma();   get┆
0x1160…1180       61 64 64 72 28 26 73 72 63 29 3b 0a 09 09 69 66 20 28 6d 6f 66 28 73 72 63 29 20 3d 3d 20 49 4d   ┆addr(&src);   if (mof(src) == IM┆
0x1180…11a0       29 20 7b 0a 09 09 09 69 66 20 28 73 72 63 2e 65 5f 74 79 70 65 20 21 3d 20 45 5f 41 43 4f 4e 29   ┆) {    if (src.e_type != E_ACON)┆
0x11a0…11c0       0a 09 09 09 09 61 65 72 72 28 29 3b 0a 09 09 09 61 64 64 72 20 3d 20 73 72 63 2e 65 5f 61 64 64   ┆     aerr();    addr = src.e_add┆
0x11c0…11e0       72 3b 0a 09 09 09 6f 75 74 78 78 28 6f 70 7c 61 64 64 72 2c 20 26 64 73 74 2c 20 52 4f 4b 7c 49   ┆r;    outxx(op|addr, &dst, ROK|I┆
0x11e0…1200       52 4f 4b 7c 44 41 4f 4b 7c 58 4f 4b 7c 55 50 34 29 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d   ┆ROK|DAOK|XOK|UP4);    break;   }┆
0x1200…1220 (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   ┆   if (mof(src)==R && mof(dst)==┆
0x1220…1240       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   ┆R) {    outaw(op | rof(src));   ┆
0x1240…1260       09 6f 75 74 61 77 28 72 6f 66 28 64 73 74 29 20 3c 3c 20 38 29 3b 0a 09 09 09 62 72 65 61 6b 3b   ┆ outaw(rof(dst) << 8);    break;┆
0x1260…1280       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   ┆   }   aerr();   break;   case S┆
0x1280…12a0       5f 53 52 41 3a 0a 09 63 61 73 65 20 53 5f 53 4c 41 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73   ┆_SRA:  case S_SLA:   getaddr(&ds┆
0x12a0…12c0       74 29 3b 0a 09 09 61 64 64 72 20 3d 20 31 3b 0a 09 09 69 66 20 28 6d 6f 72 65 28 29 29 0a 09 09   ┆t);   addr = 1;   if (more())   ┆
0x12c0…12e0       09 61 64 64 72 20 3d 20 67 65 74 61 69 6d 28 29 3b 0a 09 09 69 66 20 28 6d 6f 66 28 64 73 74 29   ┆ addr = getaim();   if (mof(dst)┆
0x12e0…1300       20 21 3d 20 52 29 0a 09 09 09 61 65 72 72 28 29 3b 0a 09 09 69 66 20 28 6b 69 6e 64 20 3d 3d 20   ┆ != R)    aerr();   if (kind == ┆
0x1300…1320       53 5f 53 52 41 29 0a 09 09 09 61 64 64 72 20 3d 20 2d 61 64 64 72 3b 0a 09 09 6f 75 74 61 77 28   ┆S_SRA)    addr = -addr;   outaw(┆
0x1320…1340       6f 70 20 7c 20 28 72 6f 66 28 64 73 74 29 3c 3c 34 29 29 3b 0a 09 09 6f 75 74 61 77 28 61 64 64   ┆op | (rof(dst)<<4));   outaw(add┆
0x1340…1360       72 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 43 50 3a 0a 09 09 67 65 74 61   ┆r);   break;   case S_CP:   geta┆
0x1360…1380       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   ┆ddr(&dst);   comma();   getaddr(┆
0x1380…13a0       26 73 72 63 29 3b 0a 09 09 69 66 20 28 6d 6f 66 28 64 73 74 29 20 3d 3d 20 52 29 20 7b 0a 09 09   ┆&src);   if (mof(dst) == R) {   ┆
0x13a0…13c0       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 09 66 6c   ┆ checkreg(rof(dst), flag);    fl┆
0x13c0…13e0       61 67 20 3d 20 52 4f 4b 7c 49 4d 4f 4b 7c 49 52 4f 4b 7c 44 41 4f 4b 7c 58 4f 4b 7c 55 50 34 3b   ┆ag = ROK|IMOK|IROK|DAOK|XOK|UP4;┆
0x13e0…1400       0a 09 09 09 69 66 20 28 6f 70 20 3d 3d 20 43 50 4c 29 0a 09 09 09 09 66 6c 61 67 20 7c 3d 20 4c   ┆    if (op == CPL)     flag |= L┆
0x1400…1420 (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   ┆ONG;    outxx(op|rof(dst), &src,┆
0x1420…1440       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   ┆ flag);    break;   }   if (op!=┆
0x1440…1460       43 50 4c 20 26 26 20 6d 6f 66 28 73 72 63 29 3d 3d 49 4d 29 20 7b 0a 09 09 09 6f 70 20 3d 20 6d   ┆CPL && mof(src)==IM) {    op = m┆
0x1460…1480       61 6b 65 6f 70 28 6f 70 2c 20 43 50 49 29 3b 0a 09 09 09 6f 75 74 78 78 28 6f 70 2c 20 26 64 73   ┆akeop(op, CPI);    outxx(op, &ds┆
0x1480…14a0       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 09 6f 75 74 69 77 28   ┆t, IROK|DAOK|XOK|UP4);    outiw(┆
0x14a0…14c0       6f 70 2c 20 26 73 72 63 29 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 09 61 65 72 72 28   ┆op, &src);    break;   }   aerr(┆
0x14c0…14e0       29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 64 65 66 61 75 6c 74 3a 0a 09 09 65 72 72 28 27 3f 27   ┆);   break;   default:   err('?'┆
0x14e0…1500       29 3b 0a 09 7d 0a 7d 0a 0a 6d 61 63 68 69 6e 65 32 28 73 70 29 0a 72 65 67 69 73 74 65 72 20 73   ┆);  } }  machine2(sp) register s┆
0x1500…1520       74 72 75 63 74 20 73 79 6d 20 2a 73 70 3b 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 6f 70 3b 0a 09   ┆truct sym *sp; {  register op;  ┆
0x1520…1540       63 68 61 72 20 69 64 5b 4e 43 50 4c 4e 5d 3b 0a 09 73 74 72 75 63 74 20 65 78 70 72 20 63 6e 74   ┆char id[NCPLN];  struct expr cnt┆
0x1540…1560       2c 20 64 73 74 2c 20 73 72 63 3b 0a 09 69 6e 74 20 63 2c 20 63 63 2c 20 64 69 73 70 3b 0a 09 69   ┆, dst, src;  int c, cc, disp;  i┆
0x1560…1580       6e 74 20 61 64 64 72 2c 20 66 6c 61 67 2c 20 6b 69 6e 64 2c 20 6d 61 73 6b 3b 0a 09 69 6e 74 20   ┆nt addr, flag, kind, mask;  int ┆
0x1580…15a0       6d 6f 64 65 2c 20 74 79 70 65 3b 0a 0a 0a 09 6f 70 20 3d 20 73 70 2d 3e 73 5f 61 64 64 72 3b 0a   ┆mode, type;    op = sp->s_addr; ┆
0x15a0…15c0       09 66 6c 61 67 20 3d 20 73 70 2d 3e 73 5f 66 6c 61 67 26 30 78 30 33 3b 0a 09 73 77 69 74 63 68   ┆ flag = sp->s_flag&0x03;  switch┆
0x15c0…15e0       20 28 6b 69 6e 64 20 3d 20 73 70 2d 3e 73 5f 6b 69 6e 64 29 20 7b 0a 09 63 61 73 65 20 53 5f 43   ┆ (kind = sp->s_kind) {  case S_C┆
0x15e0…1600       41 4c 52 3a 0a 09 09 6d 63 68 63 61 6c 72 28 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 0a 09 63 61 73   ┆ALR:   mchcalr();   break;   cas┆
0x1600…1620 (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   ┆e S_IN:   getaddr(&dst);   comma┆
0x1620…1640       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   ┆();   getaddr(&src);   if (mof(d┆
0x1640…1660       73 74 29 20 3d 3d 20 52 29 20 7b 0a 09 09 09 69 66 20 28 6d 6f 66 28 73 72 63 29 20 3d 3d 20 49   ┆st) == R) {    if (mof(src) == I┆
0x1660…1680       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 73 72 63 29 3c 3c 34   ┆R) {     outaw(op | (rof(src)<<4┆
0x1680…16a0       29 20 7c 20 72 6f 66 28 64 73 74 29 29 3b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d 0a 09   ┆) | rof(dst));     break;    }  ┆
0x16a0…16c0       09 09 69 66 20 28 6d 6f 66 28 73 72 63 29 20 3d 3d 20 44 41 29 20 7b 0a 09 09 09 09 6f 75 74 61   ┆  if (mof(src) == DA) {     outa┆
0x16c0…16e0       77 28 6d 61 6b 65 6f 70 28 6f 70 2c 20 49 4e 44 41 29 20 7c 20 28 72 6f 66 28 64 73 74 29 3c 3c   ┆w(makeop(op, INDA) | (rof(dst)<<┆
0x16e0…1700       34 29 29 3b 0a 09 09 09 09 6f 75 74 72 77 28 26 73 72 63 2c 20 30 29 3b 0a 09 09 09 09 62 72 65   ┆4));     outrw(&src, 0);     bre┆
0x1700…1720       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   ┆ak;    }   }   aerr();   break; ┆
0x1720…1740       0a 09 63 61 73 65 20 53 5f 53 49 4e 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a 09   ┆  case S_SIN:   getaddr(&dst);  ┆
0x1740…1760       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   ┆ comma();   getaddr(&src);   if ┆
0x1760…1780       28 6d 6f 66 28 73 72 63 29 21 3d 44 41 20 7c 7c 20 6d 6f 66 28 64 73 74 29 21 3d 52 29 0a 09 09   ┆(mof(src)!=DA || mof(dst)!=R)   ┆
0x1780…17a0       09 61 65 72 72 28 29 3b 0a 09 09 6f 75 74 61 77 28 6f 70 20 7c 20 28 72 6f 66 28 64 73 74 29 3c   ┆ aerr();   outaw(op | (rof(dst)<┆
0x17a0…17c0       3c 34 29 29 3b 0a 09 09 6f 75 74 72 77 28 26 73 72 63 2c 20 30 29 3b 0a 09 09 62 72 65 61 6b 3b   ┆<4));   outrw(&src, 0);   break;┆
0x17c0…17e0       0a 0a 09 63 61 73 65 20 53 5f 4f 55 54 3a 0a 09 09 67 65 74 61 64 64 72 28 26 64 73 74 29 3b 0a   ┆   case S_OUT:   getaddr(&dst); ┆
0x17e0…1800       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   ┆  comma();   getaddr(&src);   if┆
0x1800…1820 (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   ┆ (mof(src) == R) {    if (mof(ds┆
0x1820…1840       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   ┆t) == IR) {     outaw(op | (rof(┆
0x1840…1860       64 73 74 29 3c 3c 34 29 20 7c 20 72 6f 66 28 73 72 63 29 29 3b 0a 09 09 09 09 62 72 65 61 6b 3b   ┆dst)<<4) | rof(src));     break;┆
0x1860…1880       0a 09 09 09 7d 0a 09 09 09 69 66 20 28 6d 6f 66 28 64 73 74 29 20 3d 3d 20 44 41 29 20 7b 0a 09   ┆    }    if (mof(dst) == DA) {  ┆
0x1880…18a0       09 09 09 6f 75 74 61 77 28 6d 61 6b 65 6f 70 28 6f 70 2c 20 4f 55 54 44 41 29 20 7c 20 28 72 6f   ┆   outaw(makeop(op, OUTDA) | (ro┆
0x18a0…18c0       66 28 73 72 63 29 3c 3c 34 29 29 3b 0a 09 09 09 09 6f 75 74 72 77 28 26 64 73 74 2c 20 30 29 3b   ┆f(src)<<4));     outrw(&dst, 0);┆
0x18c0…18e0       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   ┆     break;    }   }   aerr();  ┆
0x18e0…1900       09 62 72 65 61 6b 3b 0a 0a 09 63 61 73 65 20 53 5f 53 4f 55 54 3a 0a 09 09 67 65 74 61 64 64 72   ┆ break;   case S_SOUT:   getaddr┆
0x1900…1920       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   ┆(&dst);   comma();   getaddr(&sr┆
[…truncated at 200 lines…]