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 V7 Filesystem
        └─ ⟦this⟧ »cmd/as/z8001/machine.c« 

Hex Dump

0x0000…0020 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 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 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 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 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 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 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 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 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 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 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 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 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…]