Home » Archimedes archive » Zipped Apps » BCPL » BCPL/b/cgd

BCPL/b/cgd

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Zipped Apps » BCPL
Filename: BCPL/b/cgd
Read OK:
File size: 2CE5 bytes
Load address: 0000
Exec address: 0000
File contents
SECTION "CGD"

GET "b.CGheader"
GET "b.FP2Ops"

STATIC {
/* ARM disassembler for BCPL codegenerator.
   version of 08 Jul 87 13:07:27
*/
   dummy = VersionMark;
   version = 1*256+4 };

/*
   1.2	01 Nov 85 11:40:10
     CMP not CMPS, etc, and register definitions at the start,
     so the listing can be assembled if required.
   1.3	06 Feb 86 12:16:21
     Floating point ops incorporated
   1.4	08 Jul 87 13:06:47
     second version of floating point instruction set.
     CMPS etc restored.
*/

STATIC {
   position = 0;
   RealWrch = 0;
   noRegisterUpdate = 0;
   moveType = 0;
   labelsKnown = 0 };

LET InitialiseDisassembler(printLabels) BE {
   RealWrch := Wrch;
   Wrch := CountWrch;
   labelsKnown := printLabels;
   position := 1
/*
   FOR r = r.0 to r.pc DO
      WriteF("%s RN %n*n", RegisterName(r), r);
   NewLine()
*/
}

AND TerminateDisassembler() BE {
   Wrch := RealWrch }

AND CountWrch(ch) BE {
   TEST ch='*N'
      THEN position := 1
      ELSE position := position+1;
   RealWrch(ch) }

AND TabTo(n) BE {
   LET n1 = (n-1)&(-8);   // tab stop before
   LET p1 = (position+7)&(-8);
   IF p1<=n1 THEN {
      RealWrch('*T');
      WHILE p1~=n1 DO {
	 RealWrch('*T');
	 p1 := p1+8 };
      position := n1+1 };
   WHILE position<n DO Wrch('*s') }

AND RegisterName(r) = VALOF SWITCHON r&15 INTO {
   CASE r.0:	  RESULTIS "r0"
   CASE r.a1:	  RESULTIS "a1"
   CASE r.a2:	  RESULTIS "a2"
   CASE r.a3:	  RESULTIS "a3"
   CASE r.a4:	  RESULTIS "a4"
   CASE r.w1:	  RESULTIS "w1"
   CASE r.nilbase:RESULTIS "nilbase"
   CASE r.gb:	  RESULTIS "rgb"
   CASE r.g:	  RESULTIS "rg"
   CASE r.p:	  RESULTIS "rp"
   CASE r.ts:	  RESULTIS "rts"
   CASE r.l:	  RESULTIS "rl"
   CASE r.b:	  RESULTIS "rb"
   CASE r.nil:	  RESULTIS "nil"
   CASE r.14:	  RESULTIS "r14"
   CASE r.pc:	  RESULTIS "pc" }

AND ShiftName(sh) = VALOF SWITCHON sh&#x60 INTO {
   CASE sh.asl: RESULTIS "ASL"
   CASE sh.lsr: RESULTIS "LSR"
   CASE sh.asr: RESULTIS "ASR"
   CASE sh.ror: RESULTIS "ROR" }

AND MaskName(m) = VALOF SWITCHON m&#xf0000000 INTO {
   CASE m.eq:  RESULTIS "EQ"
   CASE m.ne:  RESULTIS "NE"
   CASE m.geu: RESULTIS "CS"
   CASE m.ltu: RESULTIS "CC"
   CASE m.mi:  RESULTIS "MI"
   CASE m.pl:  RESULTIS "PL"
   CASE m.vs:  RESULTIS "VS"
   CASE m.vc:  RESULTIS "VC"
   CASE m.gtu: RESULTIS "HI"
   CASE m.leu: RESULTIS "LS"
   CASE m.ge:  RESULTIS "GE"
   CASE m.lt:  RESULTIS "LT"
   CASE m.gt:  RESULTIS "GT"
   CASE m.le:  RESULTIS "LE"
   CASE m.always:RESULTIS ""
   CASE m.never: RESULTIS "NV" }

AND OpCodeName(op) = VALOF {
   noRegisterUpdate := FALSE;
   moveType := FALSE;
   SWITCHON (op&#x1e00000)>>21 INTO {
      CASE f.add>>21:  RESULTIS "ADD"
      CASE f.sub>>21:  RESULTIS "SUB"
      CASE f.rsb>>21:  RESULTIS "RSB"
      CASE f.adc>>21:  RESULTIS "ADC"
      CASE f.sbc>>21:  RESULTIS "SBC"
      CASE f.rsc>>21:  RESULTIS "RSC"
      CASE f.cmp>>21:  noRegisterUpdate := TRUE;
		       RESULTIS "CMP"
      CASE f.cmn>>21:  noRegisterUpdate := TRUE;
		       RESULTIS "CMN"
      CASE f.and>>21:  RESULTIS "AND"
      CASE f.eor>>21:  RESULTIS "EOR"
      CASE f.orr>>21:  RESULTIS "ORR"
      CASE f.bic>>21:  RESULTIS "BIC"
      CASE f.tst>>21:  noRegisterUpdate := TRUE;
		       RESULTIS "TST"
      CASE f.teq>>21:  noRegisterUpdate := TRUE;
		       RESULTIS "TEQ"
      CASE f.mov>>21:  moveType := TRUE;
		       RESULTIS "MOV"
      CASE f.mvn>>21:  moveType := TRUE;
		       RESULTIS "MVN" } }

AND F4Type(a) = VALOF SWITCHON (a>>23)&3 INTO {
   CASE #x1800000>>23: RESULTIS "IB"
   CASE #x1000000>>23: RESULTIS "DB"
   CASE #x0800000>>23: RESULTIS "IA"
   CASE #x0000000>>23: RESULTIS "DA" }

AND PrintRegisterAndShift(b) BE {
   WriteS(RegisterName(b));
   IF (b&#xff0)~=0 THEN {
      WriteF(", %s ", ShiftName(b));
      TEST (b&#x10)~=0 THEN
	 WriteS(RegisterName(b>>8))
      ELSE
	 PrintNumber([b>>7]&#x1f, -1) } }

AND RotateRight(n, shift) = VALOF {
   WHILE shift>0 DO {
      LET bottombit = n&1;
      n := (n>>1);
      IF bottombit~=0 THEN n := n+#x80000000;
      shift := shift-1 };
   RESULTIS n }

AND PrintNumber(offset, shift) BE {
   IF shift>0 THEN offset := RotateRight(offset, 2*shift);
   WriteF((-4097<offset<4097 -> "#%n", "#&%x8"),
	  offset) }

AND StartComment() BE {
   TabTo(33);
   WriteS("; ") }

AND PrintF2Start(a, t) BE {
   WriteF(" %sR%s", ((a&#x100000)~=0 -> "LD", "ST"),
		    MaskName(a));
   IF (a&#x400000)~=0 THEN Wrch('B');
   IF t THEN WrCh('T');
   TabTo(9);
   WriteF("%s, [%s", RegisterName(a>>12),
		     RegisterName(a>>16)) }

AND PrintInstruction(loc, a) BE {
   LET type = a&#xf000000;
   LET updown = a&#x800000;   // for the benfit of DT instructions
   LET n = a&#xfff;	      // ditto
   SWITCHON type>>24 INTO {
      CASE #x0:
	 IF (a&#xfc00000)=0 & (a&#xf0)=#x90 THEN {
	    LET mla = (a&#x200000)~=0;
	    WriteF(" %s%s", (mla -> "MLA", "MUL"), MaskName(a));
	    IF (a&#x100000)~=0 THEN Wrch('S');
	    TabTo(9);
	    WriteF("%s, %s, %s", RegisterName(a>>16), RegisterName(a), RegisterName(a>>8));
	    IF mla THEN WriteF(", %s", RegisterName(a>>12));
	    ENDCASE }

      CASE #x1:
      CASE #x2:
      CASE #x3:
	 WriteF(" %s%s", OpCodeName(a), MaskName(a));
	 IF (a&#x100000)~=0 THEN Wrch('S');
	 TabTo(9);
	 IF ~noRegisterUpdate
	    THEN WriteF("%s, ", RegisterName(a>>12));
	 IF ~moveType
	    THEN WriteF("%s, ", RegisterName(a>>16));
	 TEST (type&#x2000000)=0
	    THEN PrintRegisterAndShift(a)
	    ELSE PrintNumber(a&255, (a>>8)&15);
	 ENDCASE

      CASE #x8:
      CASE #x9:
	 WriteF(" %sM%s%s", ((a&#x100000)~=0 -> "LD", "ST"),
			    MaskName(a), F4Type(a));
	 TabTo(9);
	 WriteS(RegisterName(a>>16));
	 IF (a&f.wb)~=0 THEN Wrch('!');
	 WriteS(", {");
	 {  LET b = a&#xffff;
	    TEST b=0 THEN
	       Wrch('0')
	    ELSE FOR r = 0 TO 15 DO {
	       IF (b&1)~=0 THEN {
		  WriteS(RegisterName(r));
		  IF b=1 THEN BREAK;
		  WriteS(", ") };
	       b := b>>1 } };
	 Wrch('}');
	 IF (a&f.pc)~=0 THEN Wrch('^');
	 ENDCASE

      CASE #xa:
      CASE #xb:
	 WriteF(" %s%s", ((a&#x1000000)~=0 -> "BL", "B"),
			 MaskName(a));
	 TabTo(9);
	 {  LET i = loc+8+(a<<8)/64;
	    LET lab = ?;
	    TEST labelsKnown THEN {
	       lab := LabelWithValue(i, 1);
	       TEST lab<0 THEN {
		  lab := RelocationForLoc(loc);
		  TEST lab~=Null THEN {
		     WriteF("|%s|", SymbolOfReloc(lab));
		     TabTo(18);
		     WriteF("; &%x4", i) }
		  ELSE {
		     Wrch('.'); TabTo(18);
		     WriteF("; &%x4 **unknown label", i) } }
	       ELSE {
		  WriteF("L%n", lab); TabTo(18);
		  WriteF("; &%x4", i) } }
	    ELSE
	       WriteF("&%x6", i) };
	 ENDCASE

      CASE #xf:
	 WriteF(" SWI%s", MaskName(a));
	 TabTo(9);
	 PrintNumber(a&#xffffff, -1);
	 ENDCASE

      CASE #x4:
	 PrintF2Start(a, a&f.wb)
	 WriteS("], ");
	 PrintNumber((UpDown=0 -> -n, n), -1);
	 ENDCASE

      CASE #x5:
	 PrintF2Start(a, 0)
	 WriteS(", ");
	 PrintNumber((UpDown=0 -> -n, n), -1);
	 Wrch(']');
	 IF (a&f.wb)~=0 THEN Wrch('!');
	 ENDCASE

      CASE #x6:
	 PrintF2Start(a, a&f.wb)
	 WriteS("], ");
	 IF UpDown=0 THEN Wrch('-');
	 PrintRegisterAndShift(a);
	 ENDCASE

      CASE #x7:
	 PrintF2Start(a, 0)
	 WriteS(", ");
	 IF UpDown=0 THEN Wrch('-');
	 PrintRegisterAndShift(a);
	 Wrch(']');
	 IF (a&f.wb)~=0 THEN Wrch('!');
	 ENDCASE

      CASE #xc:
	 PrintCPDTStart(a, a&f.wb);
	 n := (a&#xff)*4;
	 WriteF("], #%n", (UpDown=0 -> -n, n));
	 ENDCASE

      CASE #xd:
	 PrintCPDTStart(a, 0);
	 n := (a&#xff)*4;
	 WriteF(", #%n]", (UpDown=0 -> -n, n));
	 IF (a&f.wb)~=0 THEN Wrch('!');
	 ENDCASE

      CASE #xe:
	 TEST (a&#x30)=#x10 THEN {
	    WriteF(" %s%s", CPRTFop(a), maskname(a));
	    TEST (a&#xe00000)=ff.fixflt THEN {
	       WriteDestAndRounding(a);
	       TabTo(9);
	       TEST (a&ff.toarm)~=0 THEN
		  WriteF("%s, %s", RegisterName(a>>12), FPRegName(a))
	       ELSE
		  WriteF("%s, %s", FPRegName(a>>16), RegisterName(a>>12)) }
	    ELSE TEST (a&#xf00000)>=ff.cmf THEN {
	       TabTo(9);
	       WriteF("%s, ", FPRegName(a>>16));
	       TEST (a&ff.const)=0 THEN
		  WriteF("%s", FPRegName(a))
	       ELSE
		  WriteF("#%s", FConst(a&7)) }
	    ELSE {
	       TabTo(9);
	       WriteS(RegisterName(a>>12)) } }
	 ELSE {
	    WriteF(" %s%s", CPDOFop(a),
			    MaskName(a));
	    WriteDestAndRounding(a);
	    TabTo(9);
	    IF ~noRegisterUpdate THEN WriteF("%s, ", FPRegName(a>>12));
	    IF ~moveType THEN WriteF("%s, ", FPRegName(a>>16));
	    TEST (a&ff.const)=0 THEN
	       WriteF("%s", FPRegName(a))
	    ELSE
	       WriteF("#%s", FConst(a&7)) } };
   StartComment();
   WriteF("%x4 %x8*n", loc, a) }

AND FConst(n) = VALOF SWITCHON n INTO {
   CASE 0: RESULTIS "0"
   CASE 1: RESULTIS "1"
   CASE 2: RESULTIS "2"
   CASE 3: RESULTIS "3"
   CASE 4: RESULTIS "4"
   CASE 5: RESULTIS "5"
   CASE 6: RESULTIS "0.5"
   CASE 7: RESULTIS "10" }

AND PrintCPDTStart(a, t) BE {
   LET storeFormat = VALOF SWITCHON a&fcpdt.size INTO {
      CASE fcpdt.s: RESULTIS 'S'
      CASE fcpdt.d: RESULTIS 'D'
      CASE fcpdt.e: RESULTIS 'E'
      CASE fcpdt.p: RESULTIS 'P' };
   WriteF(" %sF%s%c", ((a&#x100000)~=0 -> "LD", "ST"),
		      MaskName(a),
		      storeFormat);
   IF t THEN WrCh('T');
   TabTo(9);
   WriteF("%s, [%s", FPRegName(a>>12), RegisterName(a>>16)) }

AND FPRegName(n) = VALOF SWITCHON n&7 INTO {
   CASE fr.0: RESULTIS "f0"
   CASE fr.1: RESULTIS "f1"
   CASE fr.2: RESULTIS "f2"
   CASE fr.3: RESULTIS "f3"
   CASE fr.4: RESULTIS "f4"
   CASE fr.5: RESULTIS "f5"
   CASE fr.6: RESULTIS "f6"
   CASE fr.7: RESULTIS "f7" }

AND CPRTFop(n) = VALOF SWITCHON n&#xf00000 INTO {
   CASE ff.fix: RESULTIS "FIX"
   CASE ff.flt: RESULTIS "FLT"
   CASE ff.wfs: RESULTIS "WFS"
   CASE ff.rfs: RESULTIS "RFS"
   CASE ff.wfc: RESULTIS "WFC"
   CASE ff.rfc: RESULTIS "RFC"
   CASE ff.cmf: RESULTIS "CMF"
   CASE ff.cnf: RESULTIS "CNF"

   DEFAULT: RESULTIS "???" }

AND CPDOFop(n) = VALOF {
   noRegisterUpdate := FALSE;
   moveType := FALSE;
   SWITCHON (n&#xf08000) INTO {
      CASE ff.adf: RESULTIS "ADF"
      CASE ff.sbf: RESULTIS "SBF"
      CASE ff.rsf: RESULTIS "RSF"
      CASE ff.mlf: RESULTIS "MLF"
      CASE ff.dvf: RESULTIS "DVF"
      CASE ff.rdf: RESULTIS "RDF"
      CASE ff.pow: RESULTIS "POW"
      CASE ff.rpw: RESULTIS "RPW"
      CASE ff.rmf: RESULTIS "RMF"
      CASE ff.fml: RESULTIS "FML"
      CASE ff.fdv: RESULTIS "FDV"
      CASE ff.frd: RESULTIS "FRD"
      CASE ff.pol: RESULTIS "POL"

      CASE ff.abs: moveType := TRUE;
		   RESULTIS "ABS"
      CASE ff.sqt: moveType := TRUE;
		   RESULTIS "SQT"
      CASE ff.mvf: moveType := TRUE;
		   RESULTIS "MVF"
      CASE ff.mnf: moveType := TRUE;
		   RESULTIS "MNF"
      CASE ff.rnd: moveType := TRUE;
		   RESULTIS "RND"
      CASE ff.log: moveType := TRUE;
		   RESULTIS "LOG"
      CASE ff.lgn: moveType := TRUE;
		   RESULTIS "LGN"
      CASE ff.exp: moveType := TRUE;
		   RESULTIS "EXP"
      CASE ff.sin: moveType := TRUE;
		   RESULTIS "SIN"
      CASE ff.cos: moveType := TRUE;
		   RESULTIS "COS"
      CASE ff.tan: moveType := TRUE;
		   RESULTIS "TAN"
      CASE ff.asn: moveType := TRUE;
		   RESULTIS "ASN"
      CASE ff.acs: moveType := TRUE;
		   RESULTIS "ACS"
      CASE ff.atn: moveType := TRUE;
		   RESULTIS "ATN"
      DEFAULT:	   RESULTIS "???" } }

AND WriteDestAndRounding(a) BE {
   SWITCHON a&fcpdo.size INTO {
      CASE fcpdo.s: WrCh('S'); ENDCASE
      CASE fcpdo.d: WrCh('D'); ENDCASE
      CASE fcpdo.e: WrCh('E') };
   SWITCHON a&fr.field INTO {
      CASE fr.rtopi: WrCh('P'); ENDCASE
      CASE fr.rtomi: WrCh('M'); ENDCASE
      CASE fr.rtoz:  WrCh('Z')
      CASE fr.rton: } }
00000000  53 45 43 54 49 4f 4e 20  22 43 47 44 22 0a 0a 47  |SECTION "CGD"..G|
00000010  45 54 20 22 62 2e 43 47  68 65 61 64 65 72 22 0a  |ET "b.CGheader".|
00000020  47 45 54 20 22 62 2e 46  50 32 4f 70 73 22 0a 0a  |GET "b.FP2Ops"..|
00000030  53 54 41 54 49 43 20 7b  0a 2f 2a 20 41 52 4d 20  |STATIC {./* ARM |
00000040  64 69 73 61 73 73 65 6d  62 6c 65 72 20 66 6f 72  |disassembler for|
00000050  20 42 43 50 4c 20 63 6f  64 65 67 65 6e 65 72 61  | BCPL codegenera|
00000060  74 6f 72 2e 0a 20 20 20  76 65 72 73 69 6f 6e 20  |tor..   version |
00000070  6f 66 20 30 38 20 4a 75  6c 20 38 37 20 31 33 3a  |of 08 Jul 87 13:|
00000080  30 37 3a 32 37 0a 2a 2f  0a 20 20 20 64 75 6d 6d  |07:27.*/.   dumm|
00000090  79 20 3d 20 56 65 72 73  69 6f 6e 4d 61 72 6b 3b  |y = VersionMark;|
000000a0  0a 20 20 20 76 65 72 73  69 6f 6e 20 3d 20 31 2a  |.   version = 1*|
000000b0  32 35 36 2b 34 20 7d 3b  0a 0a 2f 2a 0a 20 20 20  |256+4 };../*.   |
000000c0  31 2e 32 09 30 31 20 4e  6f 76 20 38 35 20 31 31  |1.2.01 Nov 85 11|
000000d0  3a 34 30 3a 31 30 0a 20  20 20 20 20 43 4d 50 20  |:40:10.     CMP |
000000e0  6e 6f 74 20 43 4d 50 53  2c 20 65 74 63 2c 20 61  |not CMPS, etc, a|
000000f0  6e 64 20 72 65 67 69 73  74 65 72 20 64 65 66 69  |nd register defi|
00000100  6e 69 74 69 6f 6e 73 20  61 74 20 74 68 65 20 73  |nitions at the s|
00000110  74 61 72 74 2c 0a 20 20  20 20 20 73 6f 20 74 68  |tart,.     so th|
00000120  65 20 6c 69 73 74 69 6e  67 20 63 61 6e 20 62 65  |e listing can be|
00000130  20 61 73 73 65 6d 62 6c  65 64 20 69 66 20 72 65  | assembled if re|
00000140  71 75 69 72 65 64 2e 0a  20 20 20 31 2e 33 09 30  |quired..   1.3.0|
00000150  36 20 46 65 62 20 38 36  20 31 32 3a 31 36 3a 32  |6 Feb 86 12:16:2|
00000160  31 0a 20 20 20 20 20 46  6c 6f 61 74 69 6e 67 20  |1.     Floating |
00000170  70 6f 69 6e 74 20 6f 70  73 20 69 6e 63 6f 72 70  |point ops incorp|
00000180  6f 72 61 74 65 64 0a 20  20 20 31 2e 34 09 30 38  |orated.   1.4.08|
00000190  20 4a 75 6c 20 38 37 20  31 33 3a 30 36 3a 34 37  | Jul 87 13:06:47|
000001a0  0a 20 20 20 20 20 73 65  63 6f 6e 64 20 76 65 72  |.     second ver|
000001b0  73 69 6f 6e 20 6f 66 20  66 6c 6f 61 74 69 6e 67  |sion of floating|
000001c0  20 70 6f 69 6e 74 20 69  6e 73 74 72 75 63 74 69  | point instructi|
000001d0  6f 6e 20 73 65 74 2e 0a  20 20 20 20 20 43 4d 50  |on set..     CMP|
000001e0  53 20 65 74 63 20 72 65  73 74 6f 72 65 64 2e 0a  |S etc restored..|
000001f0  2a 2f 0a 0a 53 54 41 54  49 43 20 7b 0a 20 20 20  |*/..STATIC {.   |
00000200  70 6f 73 69 74 69 6f 6e  20 3d 20 30 3b 0a 20 20  |position = 0;.  |
00000210  20 52 65 61 6c 57 72 63  68 20 3d 20 30 3b 0a 20  | RealWrch = 0;. |
00000220  20 20 6e 6f 52 65 67 69  73 74 65 72 55 70 64 61  |  noRegisterUpda|
00000230  74 65 20 3d 20 30 3b 0a  20 20 20 6d 6f 76 65 54  |te = 0;.   moveT|
00000240  79 70 65 20 3d 20 30 3b  0a 20 20 20 6c 61 62 65  |ype = 0;.   labe|
00000250  6c 73 4b 6e 6f 77 6e 20  3d 20 30 20 7d 3b 0a 0a  |lsKnown = 0 };..|
00000260  4c 45 54 20 49 6e 69 74  69 61 6c 69 73 65 44 69  |LET InitialiseDi|
00000270  73 61 73 73 65 6d 62 6c  65 72 28 70 72 69 6e 74  |sassembler(print|
00000280  4c 61 62 65 6c 73 29 20  42 45 20 7b 0a 20 20 20  |Labels) BE {.   |
00000290  52 65 61 6c 57 72 63 68  20 3a 3d 20 57 72 63 68  |RealWrch := Wrch|
000002a0  3b 0a 20 20 20 57 72 63  68 20 3a 3d 20 43 6f 75  |;.   Wrch := Cou|
000002b0  6e 74 57 72 63 68 3b 0a  20 20 20 6c 61 62 65 6c  |ntWrch;.   label|
000002c0  73 4b 6e 6f 77 6e 20 3a  3d 20 70 72 69 6e 74 4c  |sKnown := printL|
000002d0  61 62 65 6c 73 3b 0a 20  20 20 70 6f 73 69 74 69  |abels;.   positi|
000002e0  6f 6e 20 3a 3d 20 31 0a  2f 2a 0a 20 20 20 46 4f  |on := 1./*.   FO|
000002f0  52 20 72 20 3d 20 72 2e  30 20 74 6f 20 72 2e 70  |R r = r.0 to r.p|
00000300  63 20 44 4f 0a 20 20 20  20 20 20 57 72 69 74 65  |c DO.      Write|
00000310  46 28 22 25 73 20 52 4e  20 25 6e 2a 6e 22 2c 20  |F("%s RN %n*n", |
00000320  52 65 67 69 73 74 65 72  4e 61 6d 65 28 72 29 2c  |RegisterName(r),|
00000330  20 72 29 3b 0a 20 20 20  4e 65 77 4c 69 6e 65 28  | r);.   NewLine(|
00000340  29 0a 2a 2f 0a 7d 0a 0a  41 4e 44 20 54 65 72 6d  |).*/.}..AND Term|
00000350  69 6e 61 74 65 44 69 73  61 73 73 65 6d 62 6c 65  |inateDisassemble|
00000360  72 28 29 20 42 45 20 7b  0a 20 20 20 57 72 63 68  |r() BE {.   Wrch|
00000370  20 3a 3d 20 52 65 61 6c  57 72 63 68 20 7d 0a 0a  | := RealWrch }..|
00000380  41 4e 44 20 43 6f 75 6e  74 57 72 63 68 28 63 68  |AND CountWrch(ch|
00000390  29 20 42 45 20 7b 0a 20  20 20 54 45 53 54 20 63  |) BE {.   TEST c|
000003a0  68 3d 27 2a 4e 27 0a 20  20 20 20 20 20 54 48 45  |h='*N'.      THE|
000003b0  4e 20 70 6f 73 69 74 69  6f 6e 20 3a 3d 20 31 0a  |N position := 1.|
000003c0  20 20 20 20 20 20 45 4c  53 45 20 70 6f 73 69 74  |      ELSE posit|
000003d0  69 6f 6e 20 3a 3d 20 70  6f 73 69 74 69 6f 6e 2b  |ion := position+|
000003e0  31 3b 0a 20 20 20 52 65  61 6c 57 72 63 68 28 63  |1;.   RealWrch(c|
000003f0  68 29 20 7d 0a 0a 41 4e  44 20 54 61 62 54 6f 28  |h) }..AND TabTo(|
00000400  6e 29 20 42 45 20 7b 0a  20 20 20 4c 45 54 20 6e  |n) BE {.   LET n|
00000410  31 20 3d 20 28 6e 2d 31  29 26 28 2d 38 29 3b 20  |1 = (n-1)&(-8); |
00000420  20 20 2f 2f 20 74 61 62  20 73 74 6f 70 20 62 65  |  // tab stop be|
00000430  66 6f 72 65 0a 20 20 20  4c 45 54 20 70 31 20 3d  |fore.   LET p1 =|
00000440  20 28 70 6f 73 69 74 69  6f 6e 2b 37 29 26 28 2d  | (position+7)&(-|
00000450  38 29 3b 0a 20 20 20 49  46 20 70 31 3c 3d 6e 31  |8);.   IF p1<=n1|
00000460  20 54 48 45 4e 20 7b 0a  20 20 20 20 20 20 52 65  | THEN {.      Re|
00000470  61 6c 57 72 63 68 28 27  2a 54 27 29 3b 0a 20 20  |alWrch('*T');.  |
00000480  20 20 20 20 57 48 49 4c  45 20 70 31 7e 3d 6e 31  |    WHILE p1~=n1|
00000490  20 44 4f 20 7b 0a 09 20  52 65 61 6c 57 72 63 68  | DO {.. RealWrch|
000004a0  28 27 2a 54 27 29 3b 0a  09 20 70 31 20 3a 3d 20  |('*T');.. p1 := |
000004b0  70 31 2b 38 20 7d 3b 0a  20 20 20 20 20 20 70 6f  |p1+8 };.      po|
000004c0  73 69 74 69 6f 6e 20 3a  3d 20 6e 31 2b 31 20 7d  |sition := n1+1 }|
000004d0  3b 0a 20 20 20 57 48 49  4c 45 20 70 6f 73 69 74  |;.   WHILE posit|
000004e0  69 6f 6e 3c 6e 20 44 4f  20 57 72 63 68 28 27 2a  |ion<n DO Wrch('*|
000004f0  73 27 29 20 7d 0a 0a 41  4e 44 20 52 65 67 69 73  |s') }..AND Regis|
00000500  74 65 72 4e 61 6d 65 28  72 29 20 3d 20 56 41 4c  |terName(r) = VAL|
00000510  4f 46 20 53 57 49 54 43  48 4f 4e 20 72 26 31 35  |OF SWITCHON r&15|
00000520  20 49 4e 54 4f 20 7b 0a  20 20 20 43 41 53 45 20  | INTO {.   CASE |
00000530  72 2e 30 3a 09 20 20 52  45 53 55 4c 54 49 53 20  |r.0:.  RESULTIS |
00000540  22 72 30 22 0a 20 20 20  43 41 53 45 20 72 2e 61  |"r0".   CASE r.a|
00000550  31 3a 09 20 20 52 45 53  55 4c 54 49 53 20 22 61  |1:.  RESULTIS "a|
00000560  31 22 0a 20 20 20 43 41  53 45 20 72 2e 61 32 3a  |1".   CASE r.a2:|
00000570  09 20 20 52 45 53 55 4c  54 49 53 20 22 61 32 22  |.  RESULTIS "a2"|
00000580  0a 20 20 20 43 41 53 45  20 72 2e 61 33 3a 09 20  |.   CASE r.a3:. |
00000590  20 52 45 53 55 4c 54 49  53 20 22 61 33 22 0a 20  | RESULTIS "a3". |
000005a0  20 20 43 41 53 45 20 72  2e 61 34 3a 09 20 20 52  |  CASE r.a4:.  R|
000005b0  45 53 55 4c 54 49 53 20  22 61 34 22 0a 20 20 20  |ESULTIS "a4".   |
000005c0  43 41 53 45 20 72 2e 77  31 3a 09 20 20 52 45 53  |CASE r.w1:.  RES|
000005d0  55 4c 54 49 53 20 22 77  31 22 0a 20 20 20 43 41  |ULTIS "w1".   CA|
000005e0  53 45 20 72 2e 6e 69 6c  62 61 73 65 3a 52 45 53  |SE r.nilbase:RES|
000005f0  55 4c 54 49 53 20 22 6e  69 6c 62 61 73 65 22 0a  |ULTIS "nilbase".|
00000600  20 20 20 43 41 53 45 20  72 2e 67 62 3a 09 20 20  |   CASE r.gb:.  |
00000610  52 45 53 55 4c 54 49 53  20 22 72 67 62 22 0a 20  |RESULTIS "rgb". |
00000620  20 20 43 41 53 45 20 72  2e 67 3a 09 20 20 52 45  |  CASE r.g:.  RE|
00000630  53 55 4c 54 49 53 20 22  72 67 22 0a 20 20 20 43  |SULTIS "rg".   C|
00000640  41 53 45 20 72 2e 70 3a  09 20 20 52 45 53 55 4c  |ASE r.p:.  RESUL|
00000650  54 49 53 20 22 72 70 22  0a 20 20 20 43 41 53 45  |TIS "rp".   CASE|
00000660  20 72 2e 74 73 3a 09 20  20 52 45 53 55 4c 54 49  | r.ts:.  RESULTI|
00000670  53 20 22 72 74 73 22 0a  20 20 20 43 41 53 45 20  |S "rts".   CASE |
00000680  72 2e 6c 3a 09 20 20 52  45 53 55 4c 54 49 53 20  |r.l:.  RESULTIS |
00000690  22 72 6c 22 0a 20 20 20  43 41 53 45 20 72 2e 62  |"rl".   CASE r.b|
000006a0  3a 09 20 20 52 45 53 55  4c 54 49 53 20 22 72 62  |:.  RESULTIS "rb|
000006b0  22 0a 20 20 20 43 41 53  45 20 72 2e 6e 69 6c 3a  |".   CASE r.nil:|
000006c0  09 20 20 52 45 53 55 4c  54 49 53 20 22 6e 69 6c  |.  RESULTIS "nil|
000006d0  22 0a 20 20 20 43 41 53  45 20 72 2e 31 34 3a 09  |".   CASE r.14:.|
000006e0  20 20 52 45 53 55 4c 54  49 53 20 22 72 31 34 22  |  RESULTIS "r14"|
000006f0  0a 20 20 20 43 41 53 45  20 72 2e 70 63 3a 09 20  |.   CASE r.pc:. |
00000700  20 52 45 53 55 4c 54 49  53 20 22 70 63 22 20 7d  | RESULTIS "pc" }|
00000710  0a 0a 41 4e 44 20 53 68  69 66 74 4e 61 6d 65 28  |..AND ShiftName(|
00000720  73 68 29 20 3d 20 56 41  4c 4f 46 20 53 57 49 54  |sh) = VALOF SWIT|
00000730  43 48 4f 4e 20 73 68 26  23 78 36 30 20 49 4e 54  |CHON sh&#x60 INT|
00000740  4f 20 7b 0a 20 20 20 43  41 53 45 20 73 68 2e 61  |O {.   CASE sh.a|
00000750  73 6c 3a 20 52 45 53 55  4c 54 49 53 20 22 41 53  |sl: RESULTIS "AS|
00000760  4c 22 0a 20 20 20 43 41  53 45 20 73 68 2e 6c 73  |L".   CASE sh.ls|
00000770  72 3a 20 52 45 53 55 4c  54 49 53 20 22 4c 53 52  |r: RESULTIS "LSR|
00000780  22 0a 20 20 20 43 41 53  45 20 73 68 2e 61 73 72  |".   CASE sh.asr|
00000790  3a 20 52 45 53 55 4c 54  49 53 20 22 41 53 52 22  |: RESULTIS "ASR"|
000007a0  0a 20 20 20 43 41 53 45  20 73 68 2e 72 6f 72 3a  |.   CASE sh.ror:|
000007b0  20 52 45 53 55 4c 54 49  53 20 22 52 4f 52 22 20  | RESULTIS "ROR" |
000007c0  7d 0a 0a 41 4e 44 20 4d  61 73 6b 4e 61 6d 65 28  |}..AND MaskName(|
000007d0  6d 29 20 3d 20 56 41 4c  4f 46 20 53 57 49 54 43  |m) = VALOF SWITC|
000007e0  48 4f 4e 20 6d 26 23 78  66 30 30 30 30 30 30 30  |HON m&#xf0000000|
000007f0  20 49 4e 54 4f 20 7b 0a  20 20 20 43 41 53 45 20  | INTO {.   CASE |
00000800  6d 2e 65 71 3a 20 20 52  45 53 55 4c 54 49 53 20  |m.eq:  RESULTIS |
00000810  22 45 51 22 0a 20 20 20  43 41 53 45 20 6d 2e 6e  |"EQ".   CASE m.n|
00000820  65 3a 20 20 52 45 53 55  4c 54 49 53 20 22 4e 45  |e:  RESULTIS "NE|
00000830  22 0a 20 20 20 43 41 53  45 20 6d 2e 67 65 75 3a  |".   CASE m.geu:|
00000840  20 52 45 53 55 4c 54 49  53 20 22 43 53 22 0a 20  | RESULTIS "CS". |
00000850  20 20 43 41 53 45 20 6d  2e 6c 74 75 3a 20 52 45  |  CASE m.ltu: RE|
00000860  53 55 4c 54 49 53 20 22  43 43 22 0a 20 20 20 43  |SULTIS "CC".   C|
00000870  41 53 45 20 6d 2e 6d 69  3a 20 20 52 45 53 55 4c  |ASE m.mi:  RESUL|
00000880  54 49 53 20 22 4d 49 22  0a 20 20 20 43 41 53 45  |TIS "MI".   CASE|
00000890  20 6d 2e 70 6c 3a 20 20  52 45 53 55 4c 54 49 53  | m.pl:  RESULTIS|
000008a0  20 22 50 4c 22 0a 20 20  20 43 41 53 45 20 6d 2e  | "PL".   CASE m.|
000008b0  76 73 3a 20 20 52 45 53  55 4c 54 49 53 20 22 56  |vs:  RESULTIS "V|
000008c0  53 22 0a 20 20 20 43 41  53 45 20 6d 2e 76 63 3a  |S".   CASE m.vc:|
000008d0  20 20 52 45 53 55 4c 54  49 53 20 22 56 43 22 0a  |  RESULTIS "VC".|
000008e0  20 20 20 43 41 53 45 20  6d 2e 67 74 75 3a 20 52  |   CASE m.gtu: R|
000008f0  45 53 55 4c 54 49 53 20  22 48 49 22 0a 20 20 20  |ESULTIS "HI".   |
00000900  43 41 53 45 20 6d 2e 6c  65 75 3a 20 52 45 53 55  |CASE m.leu: RESU|
00000910  4c 54 49 53 20 22 4c 53  22 0a 20 20 20 43 41 53  |LTIS "LS".   CAS|
00000920  45 20 6d 2e 67 65 3a 20  20 52 45 53 55 4c 54 49  |E m.ge:  RESULTI|
00000930  53 20 22 47 45 22 0a 20  20 20 43 41 53 45 20 6d  |S "GE".   CASE m|
00000940  2e 6c 74 3a 20 20 52 45  53 55 4c 54 49 53 20 22  |.lt:  RESULTIS "|
00000950  4c 54 22 0a 20 20 20 43  41 53 45 20 6d 2e 67 74  |LT".   CASE m.gt|
00000960  3a 20 20 52 45 53 55 4c  54 49 53 20 22 47 54 22  |:  RESULTIS "GT"|
00000970  0a 20 20 20 43 41 53 45  20 6d 2e 6c 65 3a 20 20  |.   CASE m.le:  |
00000980  52 45 53 55 4c 54 49 53  20 22 4c 45 22 0a 20 20  |RESULTIS "LE".  |
00000990  20 43 41 53 45 20 6d 2e  61 6c 77 61 79 73 3a 52  | CASE m.always:R|
000009a0  45 53 55 4c 54 49 53 20  22 22 0a 20 20 20 43 41  |ESULTIS "".   CA|
000009b0  53 45 20 6d 2e 6e 65 76  65 72 3a 20 52 45 53 55  |SE m.never: RESU|
000009c0  4c 54 49 53 20 22 4e 56  22 20 7d 0a 0a 41 4e 44  |LTIS "NV" }..AND|
000009d0  20 4f 70 43 6f 64 65 4e  61 6d 65 28 6f 70 29 20  | OpCodeName(op) |
000009e0  3d 20 56 41 4c 4f 46 20  7b 0a 20 20 20 6e 6f 52  |= VALOF {.   noR|
000009f0  65 67 69 73 74 65 72 55  70 64 61 74 65 20 3a 3d  |egisterUpdate :=|
00000a00  20 46 41 4c 53 45 3b 0a  20 20 20 6d 6f 76 65 54  | FALSE;.   moveT|
00000a10  79 70 65 20 3a 3d 20 46  41 4c 53 45 3b 0a 20 20  |ype := FALSE;.  |
00000a20  20 53 57 49 54 43 48 4f  4e 20 28 6f 70 26 23 78  | SWITCHON (op&#x|
00000a30  31 65 30 30 30 30 30 29  3e 3e 32 31 20 49 4e 54  |1e00000)>>21 INT|
00000a40  4f 20 7b 0a 20 20 20 20  20 20 43 41 53 45 20 66  |O {.      CASE f|
00000a50  2e 61 64 64 3e 3e 32 31  3a 20 20 52 45 53 55 4c  |.add>>21:  RESUL|
00000a60  54 49 53 20 22 41 44 44  22 0a 20 20 20 20 20 20  |TIS "ADD".      |
00000a70  43 41 53 45 20 66 2e 73  75 62 3e 3e 32 31 3a 20  |CASE f.sub>>21: |
00000a80  20 52 45 53 55 4c 54 49  53 20 22 53 55 42 22 0a  | RESULTIS "SUB".|
00000a90  20 20 20 20 20 20 43 41  53 45 20 66 2e 72 73 62  |      CASE f.rsb|
00000aa0  3e 3e 32 31 3a 20 20 52  45 53 55 4c 54 49 53 20  |>>21:  RESULTIS |
00000ab0  22 52 53 42 22 0a 20 20  20 20 20 20 43 41 53 45  |"RSB".      CASE|
00000ac0  20 66 2e 61 64 63 3e 3e  32 31 3a 20 20 52 45 53  | f.adc>>21:  RES|
00000ad0  55 4c 54 49 53 20 22 41  44 43 22 0a 20 20 20 20  |ULTIS "ADC".    |
00000ae0  20 20 43 41 53 45 20 66  2e 73 62 63 3e 3e 32 31  |  CASE f.sbc>>21|
00000af0  3a 20 20 52 45 53 55 4c  54 49 53 20 22 53 42 43  |:  RESULTIS "SBC|
00000b00  22 0a 20 20 20 20 20 20  43 41 53 45 20 66 2e 72  |".      CASE f.r|
00000b10  73 63 3e 3e 32 31 3a 20  20 52 45 53 55 4c 54 49  |sc>>21:  RESULTI|
00000b20  53 20 22 52 53 43 22 0a  20 20 20 20 20 20 43 41  |S "RSC".      CA|
00000b30  53 45 20 66 2e 63 6d 70  3e 3e 32 31 3a 20 20 6e  |SE f.cmp>>21:  n|
00000b40  6f 52 65 67 69 73 74 65  72 55 70 64 61 74 65 20  |oRegisterUpdate |
00000b50  3a 3d 20 54 52 55 45 3b  0a 09 09 20 20 20 20 20  |:= TRUE;...     |
00000b60  20 20 52 45 53 55 4c 54  49 53 20 22 43 4d 50 22  |  RESULTIS "CMP"|
00000b70  0a 20 20 20 20 20 20 43  41 53 45 20 66 2e 63 6d  |.      CASE f.cm|
00000b80  6e 3e 3e 32 31 3a 20 20  6e 6f 52 65 67 69 73 74  |n>>21:  noRegist|
00000b90  65 72 55 70 64 61 74 65  20 3a 3d 20 54 52 55 45  |erUpdate := TRUE|
00000ba0  3b 0a 09 09 20 20 20 20  20 20 20 52 45 53 55 4c  |;...       RESUL|
00000bb0  54 49 53 20 22 43 4d 4e  22 0a 20 20 20 20 20 20  |TIS "CMN".      |
00000bc0  43 41 53 45 20 66 2e 61  6e 64 3e 3e 32 31 3a 20  |CASE f.and>>21: |
00000bd0  20 52 45 53 55 4c 54 49  53 20 22 41 4e 44 22 0a  | RESULTIS "AND".|
00000be0  20 20 20 20 20 20 43 41  53 45 20 66 2e 65 6f 72  |      CASE f.eor|
00000bf0  3e 3e 32 31 3a 20 20 52  45 53 55 4c 54 49 53 20  |>>21:  RESULTIS |
00000c00  22 45 4f 52 22 0a 20 20  20 20 20 20 43 41 53 45  |"EOR".      CASE|
00000c10  20 66 2e 6f 72 72 3e 3e  32 31 3a 20 20 52 45 53  | f.orr>>21:  RES|
00000c20  55 4c 54 49 53 20 22 4f  52 52 22 0a 20 20 20 20  |ULTIS "ORR".    |
00000c30  20 20 43 41 53 45 20 66  2e 62 69 63 3e 3e 32 31  |  CASE f.bic>>21|
00000c40  3a 20 20 52 45 53 55 4c  54 49 53 20 22 42 49 43  |:  RESULTIS "BIC|
00000c50  22 0a 20 20 20 20 20 20  43 41 53 45 20 66 2e 74  |".      CASE f.t|
00000c60  73 74 3e 3e 32 31 3a 20  20 6e 6f 52 65 67 69 73  |st>>21:  noRegis|
00000c70  74 65 72 55 70 64 61 74  65 20 3a 3d 20 54 52 55  |terUpdate := TRU|
00000c80  45 3b 0a 09 09 20 20 20  20 20 20 20 52 45 53 55  |E;...       RESU|
00000c90  4c 54 49 53 20 22 54 53  54 22 0a 20 20 20 20 20  |LTIS "TST".     |
00000ca0  20 43 41 53 45 20 66 2e  74 65 71 3e 3e 32 31 3a  | CASE f.teq>>21:|
00000cb0  20 20 6e 6f 52 65 67 69  73 74 65 72 55 70 64 61  |  noRegisterUpda|
00000cc0  74 65 20 3a 3d 20 54 52  55 45 3b 0a 09 09 20 20  |te := TRUE;...  |
00000cd0  20 20 20 20 20 52 45 53  55 4c 54 49 53 20 22 54  |     RESULTIS "T|
00000ce0  45 51 22 0a 20 20 20 20  20 20 43 41 53 45 20 66  |EQ".      CASE f|
00000cf0  2e 6d 6f 76 3e 3e 32 31  3a 20 20 6d 6f 76 65 54  |.mov>>21:  moveT|
00000d00  79 70 65 20 3a 3d 20 54  52 55 45 3b 0a 09 09 20  |ype := TRUE;... |
00000d10  20 20 20 20 20 20 52 45  53 55 4c 54 49 53 20 22  |      RESULTIS "|
00000d20  4d 4f 56 22 0a 20 20 20  20 20 20 43 41 53 45 20  |MOV".      CASE |
00000d30  66 2e 6d 76 6e 3e 3e 32  31 3a 20 20 6d 6f 76 65  |f.mvn>>21:  move|
00000d40  54 79 70 65 20 3a 3d 20  54 52 55 45 3b 0a 09 09  |Type := TRUE;...|
00000d50  20 20 20 20 20 20 20 52  45 53 55 4c 54 49 53 20  |       RESULTIS |
00000d60  22 4d 56 4e 22 20 7d 20  7d 0a 0a 41 4e 44 20 46  |"MVN" } }..AND F|
00000d70  34 54 79 70 65 28 61 29  20 3d 20 56 41 4c 4f 46  |4Type(a) = VALOF|
00000d80  20 53 57 49 54 43 48 4f  4e 20 28 61 3e 3e 32 33  | SWITCHON (a>>23|
00000d90  29 26 33 20 49 4e 54 4f  20 7b 0a 20 20 20 43 41  |)&3 INTO {.   CA|
00000da0  53 45 20 23 78 31 38 30  30 30 30 30 3e 3e 32 33  |SE #x1800000>>23|
00000db0  3a 20 52 45 53 55 4c 54  49 53 20 22 49 42 22 0a  |: RESULTIS "IB".|
00000dc0  20 20 20 43 41 53 45 20  23 78 31 30 30 30 30 30  |   CASE #x100000|
00000dd0  30 3e 3e 32 33 3a 20 52  45 53 55 4c 54 49 53 20  |0>>23: RESULTIS |
00000de0  22 44 42 22 0a 20 20 20  43 41 53 45 20 23 78 30  |"DB".   CASE #x0|
00000df0  38 30 30 30 30 30 3e 3e  32 33 3a 20 52 45 53 55  |800000>>23: RESU|
00000e00  4c 54 49 53 20 22 49 41  22 0a 20 20 20 43 41 53  |LTIS "IA".   CAS|
00000e10  45 20 23 78 30 30 30 30  30 30 30 3e 3e 32 33 3a  |E #x0000000>>23:|
00000e20  20 52 45 53 55 4c 54 49  53 20 22 44 41 22 20 7d  | RESULTIS "DA" }|
00000e30  0a 0a 41 4e 44 20 50 72  69 6e 74 52 65 67 69 73  |..AND PrintRegis|
00000e40  74 65 72 41 6e 64 53 68  69 66 74 28 62 29 20 42  |terAndShift(b) B|
00000e50  45 20 7b 0a 20 20 20 57  72 69 74 65 53 28 52 65  |E {.   WriteS(Re|
00000e60  67 69 73 74 65 72 4e 61  6d 65 28 62 29 29 3b 0a  |gisterName(b));.|
00000e70  20 20 20 49 46 20 28 62  26 23 78 66 66 30 29 7e  |   IF (b&#xff0)~|
00000e80  3d 30 20 54 48 45 4e 20  7b 0a 20 20 20 20 20 20  |=0 THEN {.      |
00000e90  57 72 69 74 65 46 28 22  2c 20 25 73 20 22 2c 20  |WriteF(", %s ", |
00000ea0  53 68 69 66 74 4e 61 6d  65 28 62 29 29 3b 0a 20  |ShiftName(b));. |
00000eb0  20 20 20 20 20 54 45 53  54 20 28 62 26 23 78 31  |     TEST (b&#x1|
00000ec0  30 29 7e 3d 30 20 54 48  45 4e 0a 09 20 57 72 69  |0)~=0 THEN.. Wri|
00000ed0  74 65 53 28 52 65 67 69  73 74 65 72 4e 61 6d 65  |teS(RegisterName|
00000ee0  28 62 3e 3e 38 29 29 0a  20 20 20 20 20 20 45 4c  |(b>>8)).      EL|
00000ef0  53 45 0a 09 20 50 72 69  6e 74 4e 75 6d 62 65 72  |SE.. PrintNumber|
00000f00  28 5b 62 3e 3e 37 5d 26  23 78 31 66 2c 20 2d 31  |([b>>7]&#x1f, -1|
00000f10  29 20 7d 20 7d 0a 0a 41  4e 44 20 52 6f 74 61 74  |) } }..AND Rotat|
00000f20  65 52 69 67 68 74 28 6e  2c 20 73 68 69 66 74 29  |eRight(n, shift)|
00000f30  20 3d 20 56 41 4c 4f 46  20 7b 0a 20 20 20 57 48  | = VALOF {.   WH|
00000f40  49 4c 45 20 73 68 69 66  74 3e 30 20 44 4f 20 7b  |ILE shift>0 DO {|
00000f50  0a 20 20 20 20 20 20 4c  45 54 20 62 6f 74 74 6f  |.      LET botto|
00000f60  6d 62 69 74 20 3d 20 6e  26 31 3b 0a 20 20 20 20  |mbit = n&1;.    |
00000f70  20 20 6e 20 3a 3d 20 28  6e 3e 3e 31 29 3b 0a 20  |  n := (n>>1);. |
00000f80  20 20 20 20 20 49 46 20  62 6f 74 74 6f 6d 62 69  |     IF bottombi|
00000f90  74 7e 3d 30 20 54 48 45  4e 20 6e 20 3a 3d 20 6e  |t~=0 THEN n := n|
00000fa0  2b 23 78 38 30 30 30 30  30 30 30 3b 0a 20 20 20  |+#x80000000;.   |
00000fb0  20 20 20 73 68 69 66 74  20 3a 3d 20 73 68 69 66  |   shift := shif|
00000fc0  74 2d 31 20 7d 3b 0a 20  20 20 52 45 53 55 4c 54  |t-1 };.   RESULT|
00000fd0  49 53 20 6e 20 7d 0a 0a  41 4e 44 20 50 72 69 6e  |IS n }..AND Prin|
00000fe0  74 4e 75 6d 62 65 72 28  6f 66 66 73 65 74 2c 20  |tNumber(offset, |
00000ff0  73 68 69 66 74 29 20 42  45 20 7b 0a 20 20 20 49  |shift) BE {.   I|
00001000  46 20 73 68 69 66 74 3e  30 20 54 48 45 4e 20 6f  |F shift>0 THEN o|
00001010  66 66 73 65 74 20 3a 3d  20 52 6f 74 61 74 65 52  |ffset := RotateR|
00001020  69 67 68 74 28 6f 66 66  73 65 74 2c 20 32 2a 73  |ight(offset, 2*s|
00001030  68 69 66 74 29 3b 0a 20  20 20 57 72 69 74 65 46  |hift);.   WriteF|
00001040  28 28 2d 34 30 39 37 3c  6f 66 66 73 65 74 3c 34  |((-4097<offset<4|
00001050  30 39 37 20 2d 3e 20 22  23 25 6e 22 2c 20 22 23  |097 -> "#%n", "#|
00001060  26 25 78 38 22 29 2c 0a  09 20 20 6f 66 66 73 65  |&%x8"),..  offse|
00001070  74 29 20 7d 0a 0a 41 4e  44 20 53 74 61 72 74 43  |t) }..AND StartC|
00001080  6f 6d 6d 65 6e 74 28 29  20 42 45 20 7b 0a 20 20  |omment() BE {.  |
00001090  20 54 61 62 54 6f 28 33  33 29 3b 0a 20 20 20 57  | TabTo(33);.   W|
000010a0  72 69 74 65 53 28 22 3b  20 22 29 20 7d 0a 0a 41  |riteS("; ") }..A|
000010b0  4e 44 20 50 72 69 6e 74  46 32 53 74 61 72 74 28  |ND PrintF2Start(|
000010c0  61 2c 20 74 29 20 42 45  20 7b 0a 20 20 20 57 72  |a, t) BE {.   Wr|
000010d0  69 74 65 46 28 22 20 25  73 52 25 73 22 2c 20 28  |iteF(" %sR%s", (|
000010e0  28 61 26 23 78 31 30 30  30 30 30 29 7e 3d 30 20  |(a&#x100000)~=0 |
000010f0  2d 3e 20 22 4c 44 22 2c  20 22 53 54 22 29 2c 0a  |-> "LD", "ST"),.|
00001100  09 09 20 20 20 20 4d 61  73 6b 4e 61 6d 65 28 61  |..    MaskName(a|
00001110  29 29 3b 0a 20 20 20 49  46 20 28 61 26 23 78 34  |));.   IF (a&#x4|
00001120  30 30 30 30 30 29 7e 3d  30 20 54 48 45 4e 20 57  |00000)~=0 THEN W|
00001130  72 63 68 28 27 42 27 29  3b 0a 20 20 20 49 46 20  |rch('B');.   IF |
00001140  74 20 54 48 45 4e 20 57  72 43 68 28 27 54 27 29  |t THEN WrCh('T')|
00001150  3b 0a 20 20 20 54 61 62  54 6f 28 39 29 3b 0a 20  |;.   TabTo(9);. |
00001160  20 20 57 72 69 74 65 46  28 22 25 73 2c 20 5b 25  |  WriteF("%s, [%|
00001170  73 22 2c 20 52 65 67 69  73 74 65 72 4e 61 6d 65  |s", RegisterName|
00001180  28 61 3e 3e 31 32 29 2c  0a 09 09 20 20 20 20 20  |(a>>12),...     |
00001190  52 65 67 69 73 74 65 72  4e 61 6d 65 28 61 3e 3e  |RegisterName(a>>|
000011a0  31 36 29 29 20 7d 0a 0a  41 4e 44 20 50 72 69 6e  |16)) }..AND Prin|
000011b0  74 49 6e 73 74 72 75 63  74 69 6f 6e 28 6c 6f 63  |tInstruction(loc|
000011c0  2c 20 61 29 20 42 45 20  7b 0a 20 20 20 4c 45 54  |, a) BE {.   LET|
000011d0  20 74 79 70 65 20 3d 20  61 26 23 78 66 30 30 30  | type = a&#xf000|
000011e0  30 30 30 3b 0a 20 20 20  4c 45 54 20 75 70 64 6f  |000;.   LET updo|
000011f0  77 6e 20 3d 20 61 26 23  78 38 30 30 30 30 30 3b  |wn = a&#x800000;|
00001200  20 20 20 2f 2f 20 66 6f  72 20 74 68 65 20 62 65  |   // for the be|
00001210  6e 66 69 74 20 6f 66 20  44 54 20 69 6e 73 74 72  |nfit of DT instr|
00001220  75 63 74 69 6f 6e 73 0a  20 20 20 4c 45 54 20 6e  |uctions.   LET n|
00001230  20 3d 20 61 26 23 78 66  66 66 3b 09 20 20 20 20  | = a&#xfff;.    |
00001240  20 20 2f 2f 20 64 69 74  74 6f 0a 20 20 20 53 57  |  // ditto.   SW|
00001250  49 54 43 48 4f 4e 20 74  79 70 65 3e 3e 32 34 20  |ITCHON type>>24 |
00001260  49 4e 54 4f 20 7b 0a 20  20 20 20 20 20 43 41 53  |INTO {.      CAS|
00001270  45 20 23 78 30 3a 0a 09  20 49 46 20 28 61 26 23  |E #x0:.. IF (a&#|
00001280  78 66 63 30 30 30 30 30  29 3d 30 20 26 20 28 61  |xfc00000)=0 & (a|
00001290  26 23 78 66 30 29 3d 23  78 39 30 20 54 48 45 4e  |&#xf0)=#x90 THEN|
000012a0  20 7b 0a 09 20 20 20 20  4c 45 54 20 6d 6c 61 20  | {..    LET mla |
000012b0  3d 20 28 61 26 23 78 32  30 30 30 30 30 29 7e 3d  |= (a&#x200000)~=|
000012c0  30 3b 0a 09 20 20 20 20  57 72 69 74 65 46 28 22  |0;..    WriteF("|
000012d0  20 25 73 25 73 22 2c 20  28 6d 6c 61 20 2d 3e 20  | %s%s", (mla -> |
000012e0  22 4d 4c 41 22 2c 20 22  4d 55 4c 22 29 2c 20 4d  |"MLA", "MUL"), M|
000012f0  61 73 6b 4e 61 6d 65 28  61 29 29 3b 0a 09 20 20  |askName(a));..  |
00001300  20 20 49 46 20 28 61 26  23 78 31 30 30 30 30 30  |  IF (a&#x100000|
00001310  29 7e 3d 30 20 54 48 45  4e 20 57 72 63 68 28 27  |)~=0 THEN Wrch('|
00001320  53 27 29 3b 0a 09 20 20  20 20 54 61 62 54 6f 28  |S');..    TabTo(|
00001330  39 29 3b 0a 09 20 20 20  20 57 72 69 74 65 46 28  |9);..    WriteF(|
00001340  22 25 73 2c 20 25 73 2c  20 25 73 22 2c 20 52 65  |"%s, %s, %s", Re|
00001350  67 69 73 74 65 72 4e 61  6d 65 28 61 3e 3e 31 36  |gisterName(a>>16|
00001360  29 2c 20 52 65 67 69 73  74 65 72 4e 61 6d 65 28  |), RegisterName(|
00001370  61 29 2c 20 52 65 67 69  73 74 65 72 4e 61 6d 65  |a), RegisterName|
00001380  28 61 3e 3e 38 29 29 3b  0a 09 20 20 20 20 49 46  |(a>>8));..    IF|
00001390  20 6d 6c 61 20 54 48 45  4e 20 57 72 69 74 65 46  | mla THEN WriteF|
000013a0  28 22 2c 20 25 73 22 2c  20 52 65 67 69 73 74 65  |(", %s", Registe|
000013b0  72 4e 61 6d 65 28 61 3e  3e 31 32 29 29 3b 0a 09  |rName(a>>12));..|
000013c0  20 20 20 20 45 4e 44 43  41 53 45 20 7d 0a 0a 20  |    ENDCASE }.. |
000013d0  20 20 20 20 20 43 41 53  45 20 23 78 31 3a 0a 20  |     CASE #x1:. |
000013e0  20 20 20 20 20 43 41 53  45 20 23 78 32 3a 0a 20  |     CASE #x2:. |
000013f0  20 20 20 20 20 43 41 53  45 20 23 78 33 3a 0a 09  |     CASE #x3:..|
00001400  20 57 72 69 74 65 46 28  22 20 25 73 25 73 22 2c  | WriteF(" %s%s",|
00001410  20 4f 70 43 6f 64 65 4e  61 6d 65 28 61 29 2c 20  | OpCodeName(a), |
00001420  4d 61 73 6b 4e 61 6d 65  28 61 29 29 3b 0a 09 20  |MaskName(a));.. |
00001430  49 46 20 28 61 26 23 78  31 30 30 30 30 30 29 7e  |IF (a&#x100000)~|
00001440  3d 30 20 54 48 45 4e 20  57 72 63 68 28 27 53 27  |=0 THEN Wrch('S'|
00001450  29 3b 0a 09 20 54 61 62  54 6f 28 39 29 3b 0a 09  |);.. TabTo(9);..|
00001460  20 49 46 20 7e 6e 6f 52  65 67 69 73 74 65 72 55  | IF ~noRegisterU|
00001470  70 64 61 74 65 0a 09 20  20 20 20 54 48 45 4e 20  |pdate..    THEN |
00001480  57 72 69 74 65 46 28 22  25 73 2c 20 22 2c 20 52  |WriteF("%s, ", R|
00001490  65 67 69 73 74 65 72 4e  61 6d 65 28 61 3e 3e 31  |egisterName(a>>1|
000014a0  32 29 29 3b 0a 09 20 49  46 20 7e 6d 6f 76 65 54  |2));.. IF ~moveT|
000014b0  79 70 65 0a 09 20 20 20  20 54 48 45 4e 20 57 72  |ype..    THEN Wr|
000014c0  69 74 65 46 28 22 25 73  2c 20 22 2c 20 52 65 67  |iteF("%s, ", Reg|
000014d0  69 73 74 65 72 4e 61 6d  65 28 61 3e 3e 31 36 29  |isterName(a>>16)|
000014e0  29 3b 0a 09 20 54 45 53  54 20 28 74 79 70 65 26  |);.. TEST (type&|
000014f0  23 78 32 30 30 30 30 30  30 29 3d 30 0a 09 20 20  |#x2000000)=0..  |
00001500  20 20 54 48 45 4e 20 50  72 69 6e 74 52 65 67 69  |  THEN PrintRegi|
00001510  73 74 65 72 41 6e 64 53  68 69 66 74 28 61 29 0a  |sterAndShift(a).|
00001520  09 20 20 20 20 45 4c 53  45 20 50 72 69 6e 74 4e  |.    ELSE PrintN|
00001530  75 6d 62 65 72 28 61 26  32 35 35 2c 20 28 61 3e  |umber(a&255, (a>|
00001540  3e 38 29 26 31 35 29 3b  0a 09 20 45 4e 44 43 41  |>8)&15);.. ENDCA|
00001550  53 45 0a 0a 20 20 20 20  20 20 43 41 53 45 20 23  |SE..      CASE #|
00001560  78 38 3a 0a 20 20 20 20  20 20 43 41 53 45 20 23  |x8:.      CASE #|
00001570  78 39 3a 0a 09 20 57 72  69 74 65 46 28 22 20 25  |x9:.. WriteF(" %|
00001580  73 4d 25 73 25 73 22 2c  20 28 28 61 26 23 78 31  |sM%s%s", ((a&#x1|
00001590  30 30 30 30 30 29 7e 3d  30 20 2d 3e 20 22 4c 44  |00000)~=0 -> "LD|
000015a0  22 2c 20 22 53 54 22 29  2c 0a 09 09 09 20 20 20  |", "ST"),....   |
000015b0  20 4d 61 73 6b 4e 61 6d  65 28 61 29 2c 20 46 34  | MaskName(a), F4|
000015c0  54 79 70 65 28 61 29 29  3b 0a 09 20 54 61 62 54  |Type(a));.. TabT|
000015d0  6f 28 39 29 3b 0a 09 20  57 72 69 74 65 53 28 52  |o(9);.. WriteS(R|
000015e0  65 67 69 73 74 65 72 4e  61 6d 65 28 61 3e 3e 31  |egisterName(a>>1|
000015f0  36 29 29 3b 0a 09 20 49  46 20 28 61 26 66 2e 77  |6));.. IF (a&f.w|
00001600  62 29 7e 3d 30 20 54 48  45 4e 20 57 72 63 68 28  |b)~=0 THEN Wrch(|
00001610  27 21 27 29 3b 0a 09 20  57 72 69 74 65 53 28 22  |'!');.. WriteS("|
00001620  2c 20 7b 22 29 3b 0a 09  20 7b 20 20 4c 45 54 20  |, {");.. {  LET |
00001630  62 20 3d 20 61 26 23 78  66 66 66 66 3b 0a 09 20  |b = a&#xffff;.. |
00001640  20 20 20 54 45 53 54 20  62 3d 30 20 54 48 45 4e  |   TEST b=0 THEN|
00001650  0a 09 20 20 20 20 20 20  20 57 72 63 68 28 27 30  |..       Wrch('0|
00001660  27 29 0a 09 20 20 20 20  45 4c 53 45 20 46 4f 52  |')..    ELSE FOR|
00001670  20 72 20 3d 20 30 20 54  4f 20 31 35 20 44 4f 20  | r = 0 TO 15 DO |
00001680  7b 0a 09 20 20 20 20 20  20 20 49 46 20 28 62 26  |{..       IF (b&|
00001690  31 29 7e 3d 30 20 54 48  45 4e 20 7b 0a 09 09 20  |1)~=0 THEN {... |
000016a0  20 57 72 69 74 65 53 28  52 65 67 69 73 74 65 72  | WriteS(Register|
000016b0  4e 61 6d 65 28 72 29 29  3b 0a 09 09 20 20 49 46  |Name(r));...  IF|
000016c0  20 62 3d 31 20 54 48 45  4e 20 42 52 45 41 4b 3b  | b=1 THEN BREAK;|
000016d0  0a 09 09 20 20 57 72 69  74 65 53 28 22 2c 20 22  |...  WriteS(", "|
000016e0  29 20 7d 3b 0a 09 20 20  20 20 20 20 20 62 20 3a  |) };..       b :|
000016f0  3d 20 62 3e 3e 31 20 7d  20 7d 3b 0a 09 20 57 72  |= b>>1 } };.. Wr|
00001700  63 68 28 27 7d 27 29 3b  0a 09 20 49 46 20 28 61  |ch('}');.. IF (a|
00001710  26 66 2e 70 63 29 7e 3d  30 20 54 48 45 4e 20 57  |&f.pc)~=0 THEN W|
00001720  72 63 68 28 27 5e 27 29  3b 0a 09 20 45 4e 44 43  |rch('^');.. ENDC|
00001730  41 53 45 0a 0a 20 20 20  20 20 20 43 41 53 45 20  |ASE..      CASE |
00001740  23 78 61 3a 0a 20 20 20  20 20 20 43 41 53 45 20  |#xa:.      CASE |
00001750  23 78 62 3a 0a 09 20 57  72 69 74 65 46 28 22 20  |#xb:.. WriteF(" |
00001760  25 73 25 73 22 2c 20 28  28 61 26 23 78 31 30 30  |%s%s", ((a&#x100|
00001770  30 30 30 30 29 7e 3d 30  20 2d 3e 20 22 42 4c 22  |0000)~=0 -> "BL"|
00001780  2c 20 22 42 22 29 2c 0a  09 09 09 20 4d 61 73 6b  |, "B"),.... Mask|
00001790  4e 61 6d 65 28 61 29 29  3b 0a 09 20 54 61 62 54  |Name(a));.. TabT|
000017a0  6f 28 39 29 3b 0a 09 20  7b 20 20 4c 45 54 20 69  |o(9);.. {  LET i|
000017b0  20 3d 20 6c 6f 63 2b 38  2b 28 61 3c 3c 38 29 2f  | = loc+8+(a<<8)/|
000017c0  36 34 3b 0a 09 20 20 20  20 4c 45 54 20 6c 61 62  |64;..    LET lab|
000017d0  20 3d 20 3f 3b 0a 09 20  20 20 20 54 45 53 54 20  | = ?;..    TEST |
000017e0  6c 61 62 65 6c 73 4b 6e  6f 77 6e 20 54 48 45 4e  |labelsKnown THEN|
000017f0  20 7b 0a 09 20 20 20 20  20 20 20 6c 61 62 20 3a  | {..       lab :|
00001800  3d 20 4c 61 62 65 6c 57  69 74 68 56 61 6c 75 65  |= LabelWithValue|
00001810  28 69 2c 20 31 29 3b 0a  09 20 20 20 20 20 20 20  |(i, 1);..       |
00001820  54 45 53 54 20 6c 61 62  3c 30 20 54 48 45 4e 20  |TEST lab<0 THEN |
00001830  7b 0a 09 09 20 20 6c 61  62 20 3a 3d 20 52 65 6c  |{...  lab := Rel|
00001840  6f 63 61 74 69 6f 6e 46  6f 72 4c 6f 63 28 6c 6f  |ocationForLoc(lo|
00001850  63 29 3b 0a 09 09 20 20  54 45 53 54 20 6c 61 62  |c);...  TEST lab|
00001860  7e 3d 4e 75 6c 6c 20 54  48 45 4e 20 7b 0a 09 09  |~=Null THEN {...|
00001870  20 20 20 20 20 57 72 69  74 65 46 28 22 7c 25 73  |     WriteF("|%s|
00001880  7c 22 2c 20 53 79 6d 62  6f 6c 4f 66 52 65 6c 6f  ||", SymbolOfRelo|
00001890  63 28 6c 61 62 29 29 3b  0a 09 09 20 20 20 20 20  |c(lab));...     |
000018a0  54 61 62 54 6f 28 31 38  29 3b 0a 09 09 20 20 20  |TabTo(18);...   |
000018b0  20 20 57 72 69 74 65 46  28 22 3b 20 26 25 78 34  |  WriteF("; &%x4|
000018c0  22 2c 20 69 29 20 7d 0a  09 09 20 20 45 4c 53 45  |", i) }...  ELSE|
000018d0  20 7b 0a 09 09 20 20 20  20 20 57 72 63 68 28 27  | {...     Wrch('|
000018e0  2e 27 29 3b 20 54 61 62  54 6f 28 31 38 29 3b 0a  |.'); TabTo(18);.|
000018f0  09 09 20 20 20 20 20 57  72 69 74 65 46 28 22 3b  |..     WriteF(";|
00001900  20 26 25 78 34 20 2a 2a  75 6e 6b 6e 6f 77 6e 20  | &%x4 **unknown |
00001910  6c 61 62 65 6c 22 2c 20  69 29 20 7d 20 7d 0a 09  |label", i) } }..|
00001920  20 20 20 20 20 20 20 45  4c 53 45 20 7b 0a 09 09  |       ELSE {...|
00001930  20 20 57 72 69 74 65 46  28 22 4c 25 6e 22 2c 20  |  WriteF("L%n", |
00001940  6c 61 62 29 3b 20 54 61  62 54 6f 28 31 38 29 3b  |lab); TabTo(18);|
00001950  0a 09 09 20 20 57 72 69  74 65 46 28 22 3b 20 26  |...  WriteF("; &|
00001960  25 78 34 22 2c 20 69 29  20 7d 20 7d 0a 09 20 20  |%x4", i) } }..  |
00001970  20 20 45 4c 53 45 0a 09  20 20 20 20 20 20 20 57  |  ELSE..       W|
00001980  72 69 74 65 46 28 22 26  25 78 36 22 2c 20 69 29  |riteF("&%x6", i)|
00001990  20 7d 3b 0a 09 20 45 4e  44 43 41 53 45 0a 0a 20  | };.. ENDCASE.. |
000019a0  20 20 20 20 20 43 41 53  45 20 23 78 66 3a 0a 09  |     CASE #xf:..|
000019b0  20 57 72 69 74 65 46 28  22 20 53 57 49 25 73 22  | WriteF(" SWI%s"|
000019c0  2c 20 4d 61 73 6b 4e 61  6d 65 28 61 29 29 3b 0a  |, MaskName(a));.|
000019d0  09 20 54 61 62 54 6f 28  39 29 3b 0a 09 20 50 72  |. TabTo(9);.. Pr|
000019e0  69 6e 74 4e 75 6d 62 65  72 28 61 26 23 78 66 66  |intNumber(a&#xff|
000019f0  66 66 66 66 2c 20 2d 31  29 3b 0a 09 20 45 4e 44  |ffff, -1);.. END|
00001a00  43 41 53 45 0a 0a 20 20  20 20 20 20 43 41 53 45  |CASE..      CASE|
00001a10  20 23 78 34 3a 0a 09 20  50 72 69 6e 74 46 32 53  | #x4:.. PrintF2S|
00001a20  74 61 72 74 28 61 2c 20  61 26 66 2e 77 62 29 0a  |tart(a, a&f.wb).|
00001a30  09 20 57 72 69 74 65 53  28 22 5d 2c 20 22 29 3b  |. WriteS("], ");|
00001a40  0a 09 20 50 72 69 6e 74  4e 75 6d 62 65 72 28 28  |.. PrintNumber((|
00001a50  55 70 44 6f 77 6e 3d 30  20 2d 3e 20 2d 6e 2c 20  |UpDown=0 -> -n, |
00001a60  6e 29 2c 20 2d 31 29 3b  0a 09 20 45 4e 44 43 41  |n), -1);.. ENDCA|
00001a70  53 45 0a 0a 20 20 20 20  20 20 43 41 53 45 20 23  |SE..      CASE #|
00001a80  78 35 3a 0a 09 20 50 72  69 6e 74 46 32 53 74 61  |x5:.. PrintF2Sta|
00001a90  72 74 28 61 2c 20 30 29  0a 09 20 57 72 69 74 65  |rt(a, 0).. Write|
00001aa0  53 28 22 2c 20 22 29 3b  0a 09 20 50 72 69 6e 74  |S(", ");.. Print|
00001ab0  4e 75 6d 62 65 72 28 28  55 70 44 6f 77 6e 3d 30  |Number((UpDown=0|
00001ac0  20 2d 3e 20 2d 6e 2c 20  6e 29 2c 20 2d 31 29 3b  | -> -n, n), -1);|
00001ad0  0a 09 20 57 72 63 68 28  27 5d 27 29 3b 0a 09 20  |.. Wrch(']');.. |
00001ae0  49 46 20 28 61 26 66 2e  77 62 29 7e 3d 30 20 54  |IF (a&f.wb)~=0 T|
00001af0  48 45 4e 20 57 72 63 68  28 27 21 27 29 3b 0a 09  |HEN Wrch('!');..|
00001b00  20 45 4e 44 43 41 53 45  0a 0a 20 20 20 20 20 20  | ENDCASE..      |
00001b10  43 41 53 45 20 23 78 36  3a 0a 09 20 50 72 69 6e  |CASE #x6:.. Prin|
00001b20  74 46 32 53 74 61 72 74  28 61 2c 20 61 26 66 2e  |tF2Start(a, a&f.|
00001b30  77 62 29 0a 09 20 57 72  69 74 65 53 28 22 5d 2c  |wb).. WriteS("],|
00001b40  20 22 29 3b 0a 09 20 49  46 20 55 70 44 6f 77 6e  | ");.. IF UpDown|
00001b50  3d 30 20 54 48 45 4e 20  57 72 63 68 28 27 2d 27  |=0 THEN Wrch('-'|
00001b60  29 3b 0a 09 20 50 72 69  6e 74 52 65 67 69 73 74  |);.. PrintRegist|
00001b70  65 72 41 6e 64 53 68 69  66 74 28 61 29 3b 0a 09  |erAndShift(a);..|
00001b80  20 45 4e 44 43 41 53 45  0a 0a 20 20 20 20 20 20  | ENDCASE..      |
00001b90  43 41 53 45 20 23 78 37  3a 0a 09 20 50 72 69 6e  |CASE #x7:.. Prin|
00001ba0  74 46 32 53 74 61 72 74  28 61 2c 20 30 29 0a 09  |tF2Start(a, 0)..|
00001bb0  20 57 72 69 74 65 53 28  22 2c 20 22 29 3b 0a 09  | WriteS(", ");..|
00001bc0  20 49 46 20 55 70 44 6f  77 6e 3d 30 20 54 48 45  | IF UpDown=0 THE|
00001bd0  4e 20 57 72 63 68 28 27  2d 27 29 3b 0a 09 20 50  |N Wrch('-');.. P|
00001be0  72 69 6e 74 52 65 67 69  73 74 65 72 41 6e 64 53  |rintRegisterAndS|
00001bf0  68 69 66 74 28 61 29 3b  0a 09 20 57 72 63 68 28  |hift(a);.. Wrch(|
00001c00  27 5d 27 29 3b 0a 09 20  49 46 20 28 61 26 66 2e  |']');.. IF (a&f.|
00001c10  77 62 29 7e 3d 30 20 54  48 45 4e 20 57 72 63 68  |wb)~=0 THEN Wrch|
00001c20  28 27 21 27 29 3b 0a 09  20 45 4e 44 43 41 53 45  |('!');.. ENDCASE|
00001c30  0a 0a 20 20 20 20 20 20  43 41 53 45 20 23 78 63  |..      CASE #xc|
00001c40  3a 0a 09 20 50 72 69 6e  74 43 50 44 54 53 74 61  |:.. PrintCPDTSta|
00001c50  72 74 28 61 2c 20 61 26  66 2e 77 62 29 3b 0a 09  |rt(a, a&f.wb);..|
00001c60  20 6e 20 3a 3d 20 28 61  26 23 78 66 66 29 2a 34  | n := (a&#xff)*4|
00001c70  3b 0a 09 20 57 72 69 74  65 46 28 22 5d 2c 20 23  |;.. WriteF("], #|
00001c80  25 6e 22 2c 20 28 55 70  44 6f 77 6e 3d 30 20 2d  |%n", (UpDown=0 -|
00001c90  3e 20 2d 6e 2c 20 6e 29  29 3b 0a 09 20 45 4e 44  |> -n, n));.. END|
00001ca0  43 41 53 45 0a 0a 20 20  20 20 20 20 43 41 53 45  |CASE..      CASE|
00001cb0  20 23 78 64 3a 0a 09 20  50 72 69 6e 74 43 50 44  | #xd:.. PrintCPD|
00001cc0  54 53 74 61 72 74 28 61  2c 20 30 29 3b 0a 09 20  |TStart(a, 0);.. |
00001cd0  6e 20 3a 3d 20 28 61 26  23 78 66 66 29 2a 34 3b  |n := (a&#xff)*4;|
00001ce0  0a 09 20 57 72 69 74 65  46 28 22 2c 20 23 25 6e  |.. WriteF(", #%n|
00001cf0  5d 22 2c 20 28 55 70 44  6f 77 6e 3d 30 20 2d 3e  |]", (UpDown=0 ->|
00001d00  20 2d 6e 2c 20 6e 29 29  3b 0a 09 20 49 46 20 28  | -n, n));.. IF (|
00001d10  61 26 66 2e 77 62 29 7e  3d 30 20 54 48 45 4e 20  |a&f.wb)~=0 THEN |
00001d20  57 72 63 68 28 27 21 27  29 3b 0a 09 20 45 4e 44  |Wrch('!');.. END|
00001d30  43 41 53 45 0a 0a 20 20  20 20 20 20 43 41 53 45  |CASE..      CASE|
00001d40  20 23 78 65 3a 0a 09 20  54 45 53 54 20 28 61 26  | #xe:.. TEST (a&|
00001d50  23 78 33 30 29 3d 23 78  31 30 20 54 48 45 4e 20  |#x30)=#x10 THEN |
00001d60  7b 0a 09 20 20 20 20 57  72 69 74 65 46 28 22 20  |{..    WriteF(" |
00001d70  25 73 25 73 22 2c 20 43  50 52 54 46 6f 70 28 61  |%s%s", CPRTFop(a|
00001d80  29 2c 20 6d 61 73 6b 6e  61 6d 65 28 61 29 29 3b  |), maskname(a));|
00001d90  0a 09 20 20 20 20 54 45  53 54 20 28 61 26 23 78  |..    TEST (a&#x|
00001da0  65 30 30 30 30 30 29 3d  66 66 2e 66 69 78 66 6c  |e00000)=ff.fixfl|
00001db0  74 20 54 48 45 4e 20 7b  0a 09 20 20 20 20 20 20  |t THEN {..      |
00001dc0  20 57 72 69 74 65 44 65  73 74 41 6e 64 52 6f 75  | WriteDestAndRou|
00001dd0  6e 64 69 6e 67 28 61 29  3b 0a 09 20 20 20 20 20  |nding(a);..     |
00001de0  20 20 54 61 62 54 6f 28  39 29 3b 0a 09 20 20 20  |  TabTo(9);..   |
00001df0  20 20 20 20 54 45 53 54  20 28 61 26 66 66 2e 74  |    TEST (a&ff.t|
00001e00  6f 61 72 6d 29 7e 3d 30  20 54 48 45 4e 0a 09 09  |oarm)~=0 THEN...|
00001e10  20 20 57 72 69 74 65 46  28 22 25 73 2c 20 25 73  |  WriteF("%s, %s|
00001e20  22 2c 20 52 65 67 69 73  74 65 72 4e 61 6d 65 28  |", RegisterName(|
00001e30  61 3e 3e 31 32 29 2c 20  46 50 52 65 67 4e 61 6d  |a>>12), FPRegNam|
00001e40  65 28 61 29 29 0a 09 20  20 20 20 20 20 20 45 4c  |e(a))..       EL|
00001e50  53 45 0a 09 09 20 20 57  72 69 74 65 46 28 22 25  |SE...  WriteF("%|
00001e60  73 2c 20 25 73 22 2c 20  46 50 52 65 67 4e 61 6d  |s, %s", FPRegNam|
00001e70  65 28 61 3e 3e 31 36 29  2c 20 52 65 67 69 73 74  |e(a>>16), Regist|
00001e80  65 72 4e 61 6d 65 28 61  3e 3e 31 32 29 29 20 7d  |erName(a>>12)) }|
00001e90  0a 09 20 20 20 20 45 4c  53 45 20 54 45 53 54 20  |..    ELSE TEST |
00001ea0  28 61 26 23 78 66 30 30  30 30 30 29 3e 3d 66 66  |(a&#xf00000)>=ff|
00001eb0  2e 63 6d 66 20 54 48 45  4e 20 7b 0a 09 20 20 20  |.cmf THEN {..   |
00001ec0  20 20 20 20 54 61 62 54  6f 28 39 29 3b 0a 09 20  |    TabTo(9);.. |
00001ed0  20 20 20 20 20 20 57 72  69 74 65 46 28 22 25 73  |      WriteF("%s|
00001ee0  2c 20 22 2c 20 46 50 52  65 67 4e 61 6d 65 28 61  |, ", FPRegName(a|
00001ef0  3e 3e 31 36 29 29 3b 0a  09 20 20 20 20 20 20 20  |>>16));..       |
00001f00  54 45 53 54 20 28 61 26  66 66 2e 63 6f 6e 73 74  |TEST (a&ff.const|
00001f10  29 3d 30 20 54 48 45 4e  0a 09 09 20 20 57 72 69  |)=0 THEN...  Wri|
00001f20  74 65 46 28 22 25 73 22  2c 20 46 50 52 65 67 4e  |teF("%s", FPRegN|
00001f30  61 6d 65 28 61 29 29 0a  09 20 20 20 20 20 20 20  |ame(a))..       |
00001f40  45 4c 53 45 0a 09 09 20  20 57 72 69 74 65 46 28  |ELSE...  WriteF(|
00001f50  22 23 25 73 22 2c 20 46  43 6f 6e 73 74 28 61 26  |"#%s", FConst(a&|
00001f60  37 29 29 20 7d 0a 09 20  20 20 20 45 4c 53 45 20  |7)) }..    ELSE |
00001f70  7b 0a 09 20 20 20 20 20  20 20 54 61 62 54 6f 28  |{..       TabTo(|
00001f80  39 29 3b 0a 09 20 20 20  20 20 20 20 57 72 69 74  |9);..       Writ|
00001f90  65 53 28 52 65 67 69 73  74 65 72 4e 61 6d 65 28  |eS(RegisterName(|
00001fa0  61 3e 3e 31 32 29 29 20  7d 20 7d 0a 09 20 45 4c  |a>>12)) } }.. EL|
00001fb0  53 45 20 7b 0a 09 20 20  20 20 57 72 69 74 65 46  |SE {..    WriteF|
00001fc0  28 22 20 25 73 25 73 22  2c 20 43 50 44 4f 46 6f  |(" %s%s", CPDOFo|
00001fd0  70 28 61 29 2c 0a 09 09  09 20 20 20 20 4d 61 73  |p(a),....    Mas|
00001fe0  6b 4e 61 6d 65 28 61 29  29 3b 0a 09 20 20 20 20  |kName(a));..    |
00001ff0  57 72 69 74 65 44 65 73  74 41 6e 64 52 6f 75 6e  |WriteDestAndRoun|
00002000  64 69 6e 67 28 61 29 3b  0a 09 20 20 20 20 54 61  |ding(a);..    Ta|
00002010  62 54 6f 28 39 29 3b 0a  09 20 20 20 20 49 46 20  |bTo(9);..    IF |
00002020  7e 6e 6f 52 65 67 69 73  74 65 72 55 70 64 61 74  |~noRegisterUpdat|
00002030  65 20 54 48 45 4e 20 57  72 69 74 65 46 28 22 25  |e THEN WriteF("%|
00002040  73 2c 20 22 2c 20 46 50  52 65 67 4e 61 6d 65 28  |s, ", FPRegName(|
00002050  61 3e 3e 31 32 29 29 3b  0a 09 20 20 20 20 49 46  |a>>12));..    IF|
00002060  20 7e 6d 6f 76 65 54 79  70 65 20 54 48 45 4e 20  | ~moveType THEN |
00002070  57 72 69 74 65 46 28 22  25 73 2c 20 22 2c 20 46  |WriteF("%s, ", F|
00002080  50 52 65 67 4e 61 6d 65  28 61 3e 3e 31 36 29 29  |PRegName(a>>16))|
00002090  3b 0a 09 20 20 20 20 54  45 53 54 20 28 61 26 66  |;..    TEST (a&f|
000020a0  66 2e 63 6f 6e 73 74 29  3d 30 20 54 48 45 4e 0a  |f.const)=0 THEN.|
000020b0  09 20 20 20 20 20 20 20  57 72 69 74 65 46 28 22  |.       WriteF("|
000020c0  25 73 22 2c 20 46 50 52  65 67 4e 61 6d 65 28 61  |%s", FPRegName(a|
000020d0  29 29 0a 09 20 20 20 20  45 4c 53 45 0a 09 20 20  |))..    ELSE..  |
000020e0  20 20 20 20 20 57 72 69  74 65 46 28 22 23 25 73  |     WriteF("#%s|
000020f0  22 2c 20 46 43 6f 6e 73  74 28 61 26 37 29 29 20  |", FConst(a&7)) |
00002100  7d 20 7d 3b 0a 20 20 20  53 74 61 72 74 43 6f 6d  |} };.   StartCom|
00002110  6d 65 6e 74 28 29 3b 0a  20 20 20 57 72 69 74 65  |ment();.   Write|
00002120  46 28 22 25 78 34 20 25  78 38 2a 6e 22 2c 20 6c  |F("%x4 %x8*n", l|
00002130  6f 63 2c 20 61 29 20 7d  0a 0a 41 4e 44 20 46 43  |oc, a) }..AND FC|
00002140  6f 6e 73 74 28 6e 29 20  3d 20 56 41 4c 4f 46 20  |onst(n) = VALOF |
00002150  53 57 49 54 43 48 4f 4e  20 6e 20 49 4e 54 4f 20  |SWITCHON n INTO |
00002160  7b 0a 20 20 20 43 41 53  45 20 30 3a 20 52 45 53  |{.   CASE 0: RES|
00002170  55 4c 54 49 53 20 22 30  22 0a 20 20 20 43 41 53  |ULTIS "0".   CAS|
00002180  45 20 31 3a 20 52 45 53  55 4c 54 49 53 20 22 31  |E 1: RESULTIS "1|
00002190  22 0a 20 20 20 43 41 53  45 20 32 3a 20 52 45 53  |".   CASE 2: RES|
000021a0  55 4c 54 49 53 20 22 32  22 0a 20 20 20 43 41 53  |ULTIS "2".   CAS|
000021b0  45 20 33 3a 20 52 45 53  55 4c 54 49 53 20 22 33  |E 3: RESULTIS "3|
000021c0  22 0a 20 20 20 43 41 53  45 20 34 3a 20 52 45 53  |".   CASE 4: RES|
000021d0  55 4c 54 49 53 20 22 34  22 0a 20 20 20 43 41 53  |ULTIS "4".   CAS|
000021e0  45 20 35 3a 20 52 45 53  55 4c 54 49 53 20 22 35  |E 5: RESULTIS "5|
000021f0  22 0a 20 20 20 43 41 53  45 20 36 3a 20 52 45 53  |".   CASE 6: RES|
00002200  55 4c 54 49 53 20 22 30  2e 35 22 0a 20 20 20 43  |ULTIS "0.5".   C|
00002210  41 53 45 20 37 3a 20 52  45 53 55 4c 54 49 53 20  |ASE 7: RESULTIS |
00002220  22 31 30 22 20 7d 0a 0a  41 4e 44 20 50 72 69 6e  |"10" }..AND Prin|
00002230  74 43 50 44 54 53 74 61  72 74 28 61 2c 20 74 29  |tCPDTStart(a, t)|
00002240  20 42 45 20 7b 0a 20 20  20 4c 45 54 20 73 74 6f  | BE {.   LET sto|
00002250  72 65 46 6f 72 6d 61 74  20 3d 20 56 41 4c 4f 46  |reFormat = VALOF|
00002260  20 53 57 49 54 43 48 4f  4e 20 61 26 66 63 70 64  | SWITCHON a&fcpd|
00002270  74 2e 73 69 7a 65 20 49  4e 54 4f 20 7b 0a 20 20  |t.size INTO {.  |
00002280  20 20 20 20 43 41 53 45  20 66 63 70 64 74 2e 73  |    CASE fcpdt.s|
00002290  3a 20 52 45 53 55 4c 54  49 53 20 27 53 27 0a 20  |: RESULTIS 'S'. |
000022a0  20 20 20 20 20 43 41 53  45 20 66 63 70 64 74 2e  |     CASE fcpdt.|
000022b0  64 3a 20 52 45 53 55 4c  54 49 53 20 27 44 27 0a  |d: RESULTIS 'D'.|
000022c0  20 20 20 20 20 20 43 41  53 45 20 66 63 70 64 74  |      CASE fcpdt|
000022d0  2e 65 3a 20 52 45 53 55  4c 54 49 53 20 27 45 27  |.e: RESULTIS 'E'|
000022e0  0a 20 20 20 20 20 20 43  41 53 45 20 66 63 70 64  |.      CASE fcpd|
000022f0  74 2e 70 3a 20 52 45 53  55 4c 54 49 53 20 27 50  |t.p: RESULTIS 'P|
00002300  27 20 7d 3b 0a 20 20 20  57 72 69 74 65 46 28 22  |' };.   WriteF("|
00002310  20 25 73 46 25 73 25 63  22 2c 20 28 28 61 26 23  | %sF%s%c", ((a&#|
00002320  78 31 30 30 30 30 30 29  7e 3d 30 20 2d 3e 20 22  |x100000)~=0 -> "|
00002330  4c 44 22 2c 20 22 53 54  22 29 2c 0a 09 09 20 20  |LD", "ST"),...  |
00002340  20 20 20 20 4d 61 73 6b  4e 61 6d 65 28 61 29 2c  |    MaskName(a),|
00002350  0a 09 09 20 20 20 20 20  20 73 74 6f 72 65 46 6f  |...      storeFo|
00002360  72 6d 61 74 29 3b 0a 20  20 20 49 46 20 74 20 54  |rmat);.   IF t T|
00002370  48 45 4e 20 57 72 43 68  28 27 54 27 29 3b 0a 20  |HEN WrCh('T');. |
00002380  20 20 54 61 62 54 6f 28  39 29 3b 0a 20 20 20 57  |  TabTo(9);.   W|
00002390  72 69 74 65 46 28 22 25  73 2c 20 5b 25 73 22 2c  |riteF("%s, [%s",|
000023a0  20 46 50 52 65 67 4e 61  6d 65 28 61 3e 3e 31 32  | FPRegName(a>>12|
000023b0  29 2c 20 52 65 67 69 73  74 65 72 4e 61 6d 65 28  |), RegisterName(|
000023c0  61 3e 3e 31 36 29 29 20  7d 0a 0a 41 4e 44 20 46  |a>>16)) }..AND F|
000023d0  50 52 65 67 4e 61 6d 65  28 6e 29 20 3d 20 56 41  |PRegName(n) = VA|
000023e0  4c 4f 46 20 53 57 49 54  43 48 4f 4e 20 6e 26 37  |LOF SWITCHON n&7|
000023f0  20 49 4e 54 4f 20 7b 0a  20 20 20 43 41 53 45 20  | INTO {.   CASE |
00002400  66 72 2e 30 3a 20 52 45  53 55 4c 54 49 53 20 22  |fr.0: RESULTIS "|
00002410  66 30 22 0a 20 20 20 43  41 53 45 20 66 72 2e 31  |f0".   CASE fr.1|
00002420  3a 20 52 45 53 55 4c 54  49 53 20 22 66 31 22 0a  |: RESULTIS "f1".|
00002430  20 20 20 43 41 53 45 20  66 72 2e 32 3a 20 52 45  |   CASE fr.2: RE|
00002440  53 55 4c 54 49 53 20 22  66 32 22 0a 20 20 20 43  |SULTIS "f2".   C|
00002450  41 53 45 20 66 72 2e 33  3a 20 52 45 53 55 4c 54  |ASE fr.3: RESULT|
00002460  49 53 20 22 66 33 22 0a  20 20 20 43 41 53 45 20  |IS "f3".   CASE |
00002470  66 72 2e 34 3a 20 52 45  53 55 4c 54 49 53 20 22  |fr.4: RESULTIS "|
00002480  66 34 22 0a 20 20 20 43  41 53 45 20 66 72 2e 35  |f4".   CASE fr.5|
00002490  3a 20 52 45 53 55 4c 54  49 53 20 22 66 35 22 0a  |: RESULTIS "f5".|
000024a0  20 20 20 43 41 53 45 20  66 72 2e 36 3a 20 52 45  |   CASE fr.6: RE|
000024b0  53 55 4c 54 49 53 20 22  66 36 22 0a 20 20 20 43  |SULTIS "f6".   C|
000024c0  41 53 45 20 66 72 2e 37  3a 20 52 45 53 55 4c 54  |ASE fr.7: RESULT|
000024d0  49 53 20 22 66 37 22 20  7d 0a 0a 41 4e 44 20 43  |IS "f7" }..AND C|
000024e0  50 52 54 46 6f 70 28 6e  29 20 3d 20 56 41 4c 4f  |PRTFop(n) = VALO|
000024f0  46 20 53 57 49 54 43 48  4f 4e 20 6e 26 23 78 66  |F SWITCHON n&#xf|
00002500  30 30 30 30 30 20 49 4e  54 4f 20 7b 0a 20 20 20  |00000 INTO {.   |
00002510  43 41 53 45 20 66 66 2e  66 69 78 3a 20 52 45 53  |CASE ff.fix: RES|
00002520  55 4c 54 49 53 20 22 46  49 58 22 0a 20 20 20 43  |ULTIS "FIX".   C|
00002530  41 53 45 20 66 66 2e 66  6c 74 3a 20 52 45 53 55  |ASE ff.flt: RESU|
00002540  4c 54 49 53 20 22 46 4c  54 22 0a 20 20 20 43 41  |LTIS "FLT".   CA|
00002550  53 45 20 66 66 2e 77 66  73 3a 20 52 45 53 55 4c  |SE ff.wfs: RESUL|
00002560  54 49 53 20 22 57 46 53  22 0a 20 20 20 43 41 53  |TIS "WFS".   CAS|
00002570  45 20 66 66 2e 72 66 73  3a 20 52 45 53 55 4c 54  |E ff.rfs: RESULT|
00002580  49 53 20 22 52 46 53 22  0a 20 20 20 43 41 53 45  |IS "RFS".   CASE|
00002590  20 66 66 2e 77 66 63 3a  20 52 45 53 55 4c 54 49  | ff.wfc: RESULTI|
000025a0  53 20 22 57 46 43 22 0a  20 20 20 43 41 53 45 20  |S "WFC".   CASE |
000025b0  66 66 2e 72 66 63 3a 20  52 45 53 55 4c 54 49 53  |ff.rfc: RESULTIS|
000025c0  20 22 52 46 43 22 0a 20  20 20 43 41 53 45 20 66  | "RFC".   CASE f|
000025d0  66 2e 63 6d 66 3a 20 52  45 53 55 4c 54 49 53 20  |f.cmf: RESULTIS |
000025e0  22 43 4d 46 22 0a 20 20  20 43 41 53 45 20 66 66  |"CMF".   CASE ff|
000025f0  2e 63 6e 66 3a 20 52 45  53 55 4c 54 49 53 20 22  |.cnf: RESULTIS "|
00002600  43 4e 46 22 0a 0a 20 20  20 44 45 46 41 55 4c 54  |CNF"..   DEFAULT|
00002610  3a 20 52 45 53 55 4c 54  49 53 20 22 3f 3f 3f 22  |: RESULTIS "???"|
00002620  20 7d 0a 0a 41 4e 44 20  43 50 44 4f 46 6f 70 28  | }..AND CPDOFop(|
00002630  6e 29 20 3d 20 56 41 4c  4f 46 20 7b 0a 20 20 20  |n) = VALOF {.   |
00002640  6e 6f 52 65 67 69 73 74  65 72 55 70 64 61 74 65  |noRegisterUpdate|
00002650  20 3a 3d 20 46 41 4c 53  45 3b 0a 20 20 20 6d 6f  | := FALSE;.   mo|
00002660  76 65 54 79 70 65 20 3a  3d 20 46 41 4c 53 45 3b  |veType := FALSE;|
00002670  0a 20 20 20 53 57 49 54  43 48 4f 4e 20 28 6e 26  |.   SWITCHON (n&|
00002680  23 78 66 30 38 30 30 30  29 20 49 4e 54 4f 20 7b  |#xf08000) INTO {|
00002690  0a 20 20 20 20 20 20 43  41 53 45 20 66 66 2e 61  |.      CASE ff.a|
000026a0  64 66 3a 20 52 45 53 55  4c 54 49 53 20 22 41 44  |df: RESULTIS "AD|
000026b0  46 22 0a 20 20 20 20 20  20 43 41 53 45 20 66 66  |F".      CASE ff|
000026c0  2e 73 62 66 3a 20 52 45  53 55 4c 54 49 53 20 22  |.sbf: RESULTIS "|
000026d0  53 42 46 22 0a 20 20 20  20 20 20 43 41 53 45 20  |SBF".      CASE |
000026e0  66 66 2e 72 73 66 3a 20  52 45 53 55 4c 54 49 53  |ff.rsf: RESULTIS|
000026f0  20 22 52 53 46 22 0a 20  20 20 20 20 20 43 41 53  | "RSF".      CAS|
00002700  45 20 66 66 2e 6d 6c 66  3a 20 52 45 53 55 4c 54  |E ff.mlf: RESULT|
00002710  49 53 20 22 4d 4c 46 22  0a 20 20 20 20 20 20 43  |IS "MLF".      C|
00002720  41 53 45 20 66 66 2e 64  76 66 3a 20 52 45 53 55  |ASE ff.dvf: RESU|
00002730  4c 54 49 53 20 22 44 56  46 22 0a 20 20 20 20 20  |LTIS "DVF".     |
00002740  20 43 41 53 45 20 66 66  2e 72 64 66 3a 20 52 45  | CASE ff.rdf: RE|
00002750  53 55 4c 54 49 53 20 22  52 44 46 22 0a 20 20 20  |SULTIS "RDF".   |
00002760  20 20 20 43 41 53 45 20  66 66 2e 70 6f 77 3a 20  |   CASE ff.pow: |
00002770  52 45 53 55 4c 54 49 53  20 22 50 4f 57 22 0a 20  |RESULTIS "POW". |
00002780  20 20 20 20 20 43 41 53  45 20 66 66 2e 72 70 77  |     CASE ff.rpw|
00002790  3a 20 52 45 53 55 4c 54  49 53 20 22 52 50 57 22  |: RESULTIS "RPW"|
000027a0  0a 20 20 20 20 20 20 43  41 53 45 20 66 66 2e 72  |.      CASE ff.r|
000027b0  6d 66 3a 20 52 45 53 55  4c 54 49 53 20 22 52 4d  |mf: RESULTIS "RM|
000027c0  46 22 0a 20 20 20 20 20  20 43 41 53 45 20 66 66  |F".      CASE ff|
000027d0  2e 66 6d 6c 3a 20 52 45  53 55 4c 54 49 53 20 22  |.fml: RESULTIS "|
000027e0  46 4d 4c 22 0a 20 20 20  20 20 20 43 41 53 45 20  |FML".      CASE |
000027f0  66 66 2e 66 64 76 3a 20  52 45 53 55 4c 54 49 53  |ff.fdv: RESULTIS|
00002800  20 22 46 44 56 22 0a 20  20 20 20 20 20 43 41 53  | "FDV".      CAS|
00002810  45 20 66 66 2e 66 72 64  3a 20 52 45 53 55 4c 54  |E ff.frd: RESULT|
00002820  49 53 20 22 46 52 44 22  0a 20 20 20 20 20 20 43  |IS "FRD".      C|
00002830  41 53 45 20 66 66 2e 70  6f 6c 3a 20 52 45 53 55  |ASE ff.pol: RESU|
00002840  4c 54 49 53 20 22 50 4f  4c 22 0a 0a 20 20 20 20  |LTIS "POL"..    |
00002850  20 20 43 41 53 45 20 66  66 2e 61 62 73 3a 20 6d  |  CASE ff.abs: m|
00002860  6f 76 65 54 79 70 65 20  3a 3d 20 54 52 55 45 3b  |oveType := TRUE;|
00002870  0a 09 09 20 20 20 52 45  53 55 4c 54 49 53 20 22  |...   RESULTIS "|
00002880  41 42 53 22 0a 20 20 20  20 20 20 43 41 53 45 20  |ABS".      CASE |
00002890  66 66 2e 73 71 74 3a 20  6d 6f 76 65 54 79 70 65  |ff.sqt: moveType|
000028a0  20 3a 3d 20 54 52 55 45  3b 0a 09 09 20 20 20 52  | := TRUE;...   R|
000028b0  45 53 55 4c 54 49 53 20  22 53 51 54 22 0a 20 20  |ESULTIS "SQT".  |
000028c0  20 20 20 20 43 41 53 45  20 66 66 2e 6d 76 66 3a  |    CASE ff.mvf:|
000028d0  20 6d 6f 76 65 54 79 70  65 20 3a 3d 20 54 52 55  | moveType := TRU|
000028e0  45 3b 0a 09 09 20 20 20  52 45 53 55 4c 54 49 53  |E;...   RESULTIS|
000028f0  20 22 4d 56 46 22 0a 20  20 20 20 20 20 43 41 53  | "MVF".      CAS|
00002900  45 20 66 66 2e 6d 6e 66  3a 20 6d 6f 76 65 54 79  |E ff.mnf: moveTy|
00002910  70 65 20 3a 3d 20 54 52  55 45 3b 0a 09 09 20 20  |pe := TRUE;...  |
00002920  20 52 45 53 55 4c 54 49  53 20 22 4d 4e 46 22 0a  | RESULTIS "MNF".|
00002930  20 20 20 20 20 20 43 41  53 45 20 66 66 2e 72 6e  |      CASE ff.rn|
00002940  64 3a 20 6d 6f 76 65 54  79 70 65 20 3a 3d 20 54  |d: moveType := T|
00002950  52 55 45 3b 0a 09 09 20  20 20 52 45 53 55 4c 54  |RUE;...   RESULT|
00002960  49 53 20 22 52 4e 44 22  0a 20 20 20 20 20 20 43  |IS "RND".      C|
00002970  41 53 45 20 66 66 2e 6c  6f 67 3a 20 6d 6f 76 65  |ASE ff.log: move|
00002980  54 79 70 65 20 3a 3d 20  54 52 55 45 3b 0a 09 09  |Type := TRUE;...|
00002990  20 20 20 52 45 53 55 4c  54 49 53 20 22 4c 4f 47  |   RESULTIS "LOG|
000029a0  22 0a 20 20 20 20 20 20  43 41 53 45 20 66 66 2e  |".      CASE ff.|
000029b0  6c 67 6e 3a 20 6d 6f 76  65 54 79 70 65 20 3a 3d  |lgn: moveType :=|
000029c0  20 54 52 55 45 3b 0a 09  09 20 20 20 52 45 53 55  | TRUE;...   RESU|
000029d0  4c 54 49 53 20 22 4c 47  4e 22 0a 20 20 20 20 20  |LTIS "LGN".     |
000029e0  20 43 41 53 45 20 66 66  2e 65 78 70 3a 20 6d 6f  | CASE ff.exp: mo|
000029f0  76 65 54 79 70 65 20 3a  3d 20 54 52 55 45 3b 0a  |veType := TRUE;.|
00002a00  09 09 20 20 20 52 45 53  55 4c 54 49 53 20 22 45  |..   RESULTIS "E|
00002a10  58 50 22 0a 20 20 20 20  20 20 43 41 53 45 20 66  |XP".      CASE f|
00002a20  66 2e 73 69 6e 3a 20 6d  6f 76 65 54 79 70 65 20  |f.sin: moveType |
00002a30  3a 3d 20 54 52 55 45 3b  0a 09 09 20 20 20 52 45  |:= TRUE;...   RE|
00002a40  53 55 4c 54 49 53 20 22  53 49 4e 22 0a 20 20 20  |SULTIS "SIN".   |
00002a50  20 20 20 43 41 53 45 20  66 66 2e 63 6f 73 3a 20  |   CASE ff.cos: |
00002a60  6d 6f 76 65 54 79 70 65  20 3a 3d 20 54 52 55 45  |moveType := TRUE|
00002a70  3b 0a 09 09 20 20 20 52  45 53 55 4c 54 49 53 20  |;...   RESULTIS |
00002a80  22 43 4f 53 22 0a 20 20  20 20 20 20 43 41 53 45  |"COS".      CASE|
00002a90  20 66 66 2e 74 61 6e 3a  20 6d 6f 76 65 54 79 70  | ff.tan: moveTyp|
00002aa0  65 20 3a 3d 20 54 52 55  45 3b 0a 09 09 20 20 20  |e := TRUE;...   |
00002ab0  52 45 53 55 4c 54 49 53  20 22 54 41 4e 22 0a 20  |RESULTIS "TAN". |
00002ac0  20 20 20 20 20 43 41 53  45 20 66 66 2e 61 73 6e  |     CASE ff.asn|
00002ad0  3a 20 6d 6f 76 65 54 79  70 65 20 3a 3d 20 54 52  |: moveType := TR|
00002ae0  55 45 3b 0a 09 09 20 20  20 52 45 53 55 4c 54 49  |UE;...   RESULTI|
00002af0  53 20 22 41 53 4e 22 0a  20 20 20 20 20 20 43 41  |S "ASN".      CA|
00002b00  53 45 20 66 66 2e 61 63  73 3a 20 6d 6f 76 65 54  |SE ff.acs: moveT|
00002b10  79 70 65 20 3a 3d 20 54  52 55 45 3b 0a 09 09 20  |ype := TRUE;... |
00002b20  20 20 52 45 53 55 4c 54  49 53 20 22 41 43 53 22  |  RESULTIS "ACS"|
00002b30  0a 20 20 20 20 20 20 43  41 53 45 20 66 66 2e 61  |.      CASE ff.a|
00002b40  74 6e 3a 20 6d 6f 76 65  54 79 70 65 20 3a 3d 20  |tn: moveType := |
00002b50  54 52 55 45 3b 0a 09 09  20 20 20 52 45 53 55 4c  |TRUE;...   RESUL|
00002b60  54 49 53 20 22 41 54 4e  22 0a 20 20 20 20 20 20  |TIS "ATN".      |
00002b70  44 45 46 41 55 4c 54 3a  09 20 20 20 52 45 53 55  |DEFAULT:.   RESU|
00002b80  4c 54 49 53 20 22 3f 3f  3f 22 20 7d 20 7d 0a 0a  |LTIS "???" } }..|
00002b90  41 4e 44 20 57 72 69 74  65 44 65 73 74 41 6e 64  |AND WriteDestAnd|
00002ba0  52 6f 75 6e 64 69 6e 67  28 61 29 20 42 45 20 7b  |Rounding(a) BE {|
00002bb0  0a 20 20 20 53 57 49 54  43 48 4f 4e 20 61 26 66  |.   SWITCHON a&f|
00002bc0  63 70 64 6f 2e 73 69 7a  65 20 49 4e 54 4f 20 7b  |cpdo.size INTO {|
00002bd0  0a 20 20 20 20 20 20 43  41 53 45 20 66 63 70 64  |.      CASE fcpd|
00002be0  6f 2e 73 3a 20 57 72 43  68 28 27 53 27 29 3b 20  |o.s: WrCh('S'); |
00002bf0  45 4e 44 43 41 53 45 0a  20 20 20 20 20 20 43 41  |ENDCASE.      CA|
00002c00  53 45 20 66 63 70 64 6f  2e 64 3a 20 57 72 43 68  |SE fcpdo.d: WrCh|
00002c10  28 27 44 27 29 3b 20 45  4e 44 43 41 53 45 0a 20  |('D'); ENDCASE. |
00002c20  20 20 20 20 20 43 41 53  45 20 66 63 70 64 6f 2e  |     CASE fcpdo.|
00002c30  65 3a 20 57 72 43 68 28  27 45 27 29 20 7d 3b 0a  |e: WrCh('E') };.|
00002c40  20 20 20 53 57 49 54 43  48 4f 4e 20 61 26 66 72  |   SWITCHON a&fr|
00002c50  2e 66 69 65 6c 64 20 49  4e 54 4f 20 7b 0a 20 20  |.field INTO {.  |
00002c60  20 20 20 20 43 41 53 45  20 66 72 2e 72 74 6f 70  |    CASE fr.rtop|
00002c70  69 3a 20 57 72 43 68 28  27 50 27 29 3b 20 45 4e  |i: WrCh('P'); EN|
00002c80  44 43 41 53 45 0a 20 20  20 20 20 20 43 41 53 45  |DCASE.      CASE|
00002c90  20 66 72 2e 72 74 6f 6d  69 3a 20 57 72 43 68 28  | fr.rtomi: WrCh(|
00002ca0  27 4d 27 29 3b 20 45 4e  44 43 41 53 45 0a 20 20  |'M'); ENDCASE.  |
00002cb0  20 20 20 20 43 41 53 45  20 66 72 2e 72 74 6f 7a  |    CASE fr.rtoz|
00002cc0  3a 20 20 57 72 43 68 28  27 5a 27 29 0a 20 20 20  |:  WrCh('Z').   |
00002cd0  20 20 20 43 41 53 45 20  66 72 2e 72 74 6f 6e 3a  |   CASE fr.rton:|
00002ce0  20 7d 20 7d 0a                                    | } }.|
00002ce5