home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 3 / Meeting_Pearls_III.iso / Pearls / texmf / source / driver / util / amiga / sfast_cp.omd < prev    next >
Text File  |  1991-07-09  |  41KB  |  815 lines

  1. Lattice AMIGA 68000-68020 OBJ Module Disassembler V5.04.039
  2. Copyright © 1988, 1989 Lattice Inc.  All Rights Reserved.
  3.  
  4.  
  5. Amiga Object File Loader V1.00
  6. 68000 Instruction Set
  7.  
  8. EXTERNAL DEFINITIONS
  9.  
  10. @SetChar 0000-00    @SetRule 02BC-00
  11.  
  12. SECTION 00 "sfast_cp.c" 000004A4 BYTES
  13. ;   1: #ifndef SLOW
  14. ;   2: 
  15. ;   3: #include "defines.h"
  16. ;   4: 
  17. ;   5: #include <stdio.h>
  18. ;   6: 
  19. ;   7: #ifdef AMIGA
  20. ;   8: # ifdef DISPLAY
  21. ;   9: #  include <intuition/intuition.h>
  22. ;  10:    extern struct RastPort      myRastPort;
  23. ;  11: # endif
  24. ;  12: #endif
  25. ;  13: 
  26. ;  14: #ifdef AZTEC_C
  27. ;  15: #  include "functions.h"
  28. ;  16: #endif
  29. ;  17: 
  30. ;  18: 
  31. ;  19: #include "globals.h"
  32. ;  20: #include "bitmap.h"
  33. ;  21: #include "commands.h"
  34. ;  22: #include "flmt.h"
  35. ;  23: #include "new_font.h"
  36. ;  24: 
  37. ;  25: #include "globals.i"
  38. ;  26: #include "fast_cp.i"
  39. ;  27: #include "dvihand.i"
  40. ;  28: #include "unpack.i"
  41. ;  29: #include "new_font.i"        /* fuer Load_really() */
  42. ;  30: 
  43. ;  31: #ifdef DISPLAY
  44. ;  32: #  include <clib/graphics_protos.h>
  45. ;  33: #endif
  46. ;  34: 
  47. ;  35: 
  48. ;  36: #define PixRound(x,conv)    (long)(((x) + ((conv) >> 1)) / (conv))
  49. ;  37: 
  50. ;  38: #define BITSPERLONG    32
  51. ;  39: #define BITSPERWORD    16
  52. ;  40: #define WORD_WIDTH    16
  53. ;  41: 
  54. ;  42: extern long  hconv, vconv;            /* converts DVI units to pixels       */
  55. ;  43: extern long  h;                       /* current horizontal position        */
  56. ;  44: extern long  hh;                      /* current h on device                */
  57. ;  45: extern long  v;                       /* current vertical position          */
  58. ;  46: extern long  vv;                      /* current v on device                */
  59. ;  47: 
  60. ;  48: 
  61. ;  49: 
  62. ;  50: extern int        DeBug;
  63. ;  51: extern struct bitmap    map;
  64. ;  52: extern long        upper_limit;
  65. ;  53: extern long        lower_limit;
  66. ;  54: 
  67. ;  55: /* extern struct font_entry *cfontptr; */
  68. ;  56: 
  69. ;  57: extern struct Font *cfontptr;
  70. ;  58: 
  71. ;  59: 
  72. ;  60: 
  73. ;  61: 
  74. ;  62: /*-->SetChar*/
  75. ;  63: /**********************************************************************/
  76. ;  64: /*****************************  SetChar  ******************************/
  77. ;  65: /**********************************************************************/
  78. ;  66: 
  79. ;  67: void SetChar(long pc, int command)
  80. ;  68: {
  81.        | 0000  4E55 FFC8                      LINK      A5,#FFC8
  82.        | 0004  48E7 3F32                      MOVEM.L   D2-D7/A2-A3/A6,-(A7)
  83. ;  69:   struct Char            *ptr;
  84. ;  70: 
  85. ;  71:   register unsigned long     reg;
  86. ;  72:   unsigned short        *char_adr;
  87. ;  73:   unsigned short        *start_adr, *adr;
  88. ;  74:   long                nr_sh, length_row;
  89. ;  75:   long                c, l;
  90. ;  76: 
  91. ;  77:   long            x, y;        /* upper left corner (pixels)           */
  92. ;  78:   long            cp_h, w;     /* height / width of character (pixels) */
  93. ;  79:   /* long        *p; */          /* pointer to bitmap */
  94. ;  80:   unsigned short    *p;          /* pointer to bitmap */
  95. ;  81:   struct Chars        *cd;
  96. ;  82: 
  97. ;  83:   long            words, lmin, lmax;
  98. ;  84: 
  99. ;  85:  
  100. ;  86:   cd = &(cfontptr->common->ch[pc]);
  101.        | 0008  206C  0000-XX.2                MOVEA.L   _cfontptr(A4),A0
  102.        | 000C  2668 0414                      MOVEA.L   0414(A0),A3
  103.        | 0010  2E00                           MOVE.L    D0,D7
  104.        | 0012  2B40 FFD8                      MOVE.L    D0,FFD8(A5)
  105.        | 0016  2007                           MOVE.L    D7,D0
  106.        | 0018  2B41 FFDC                      MOVE.L    D1,FFDC(A5)
  107.        | 001C  720A                           MOVEQ     #0A,D1
  108.        | 001E  4EBA  0000-XX.1                JSR       __CXM33(PC)
  109.        | 0022  224B                           MOVEA.L   A3,A1
  110.        | 0024  D3C0                           ADDA.L    D0,A1
  111.        | 0026  4DE9 0024                      LEA       0024(A1),A6
  112. ;  87: 
  113. ;  88:   if (cd->packed_data == -1) {
  114.        | 002A  2F4E 0030                      MOVE.L    A6,0030(A7)
  115.        | 002E  70FF                           MOVEQ     #FF,D0
  116.        | 0030  B0AE 0002                      CMP.L     0002(A6),D0
  117.        | 0034  666E                           BNE.B     00A4
  118. ;  89:     /* character not in font:
  119. ;  90:      * add tfm width to h and set hh = PixRound(h)
  120. ;  91:      */
  121. ;  92:     if (command <= SET4) {        /* SET command (or PUT command) ? */
  122.        | 0036  0CAD 0000 0083 FFDC            CMPI.L    #00000083,FFDC(A5)
  123.        | 003E  6E00 0244                      BGT.W     0284
  124. ;  93:     if (!cfontptr->ctfmw_valid ) {
  125.        | 0042  2007                           MOVE.L    D7,D0
  126.        | 0044  7200                           MOVEQ     #00,D1
  127.        | 0046  4601                           NOT.B     D1
  128.        | 0048  C081                           AND.L     D1,D0
  129.        | 004A  E580                           ASL.L     #2,D0
  130.        | 004C  2E00                           MOVE.L    D0,D7
  131.        | 004E  4A28 0418                      TST.B     0418(A0)
  132.        | 0052  6624                           BNE.B     0078
  133. ;  94:        h += scalewidth(cfontptr->common->fnt_group->tfmw[(int)pc&255],
  134.        | 0054  2268 0414                      MOVEA.L   0414(A0),A1
  135.        | 0058  2F49 0024                      MOVE.L    A1,0024(A7)
  136.        | 005C  206F 0024                      MOVEA.L   0024(A7),A0
  137.        | 0060  2250                           MOVEA.L   (A0),A1
  138.        | 0062  D3C7                           ADDA.L    D7,A1
  139. ;  95:                    cfontptr->space_faktor);
  140.        | 0064  2011                           MOVE.L    (A1),D0
  141.        | 0066  206C  0000-XX.2                MOVEA.L   _cfontptr(A4),A0
  142.        | 006A  2228 0008                      MOVE.L    0008(A0),D1
  143.        | 006E  4EBA  0000-XX.1                JSR       @scalewidth(PC)
  144.        | 0072  D1AC  0000-XX.2                ADD.L     D0,_h(A4)
  145. ;  96:         }
  146. ;  97:     else {
  147.        | 0076  600C                           BRA.B     0084
  148. ;  98:       h += cfontptr->ctfmw[(int)pc&255];
  149.        | 0078  2248                           MOVEA.L   A0,A1
  150.        | 007A  D3C7                           ADDA.L    D7,A1
  151.        | 007C  2029 0014                      MOVE.L    0014(A1),D0
  152.        | 0080  D1AC  0000-XX.2                ADD.L     D0,_h(A4)
  153. ;  99:     }
  154. ; 100:     hh = PixRound(h, hconv);
  155.        | 0084  202C  0000-XX.2                MOVE.L    _hconv(A4),D0
  156.        | 0088  2200                           MOVE.L    D0,D1
  157.        | 008A  E281                           ASR.L     #1,D1
  158.        | 008C  242C  0000-XX.2                MOVE.L    _h(A4),D2
  159.        | 0090  D481                           ADD.L     D1,D2
  160.        | 0092  2002                           MOVE.L    D2,D0
  161.        | 0094  222C  0000-XX.2                MOVE.L    _hconv(A4),D1
  162.        | 0098  4EBA  0000-XX.1                JSR       __CXD33(PC)
  163.        | 009C  2940  0000-XX.2                MOVE.L    D0,_hh(A4)
  164. ; 101:     }
  165. ; 102:     return ;  /* kein Shift */
  166.        | 00A0  6000 01E2                      BRA.W     0284
  167. ; 103:   }
  168. ; 104: 
  169. ; 105:   if ((ptr = cd->unpacked) == NULL) {
  170.        | 00A4  206F 0030                      MOVEA.L   0030(A7),A0
  171.        | 00A8  2468 0006                      MOVEA.L   0006(A0),A2
  172.        | 00AC  200A                           MOVE.L    A2,D0
  173.        | 00AE  6632                           BNE.B     00E2
  174. ; 106:     if (cfontptr->common->fnt_status == FNT_DEFINED ||
  175.        | 00B0  102B 0A26                      MOVE.B    0A26(A3),D0
  176.        | 00B4  7203                           MOVEQ     #03,D1
  177.        | 00B6  B001                           CMP.B     D1,D0
  178.        | 00B8  6704                           BEQ.B     00BE
  179. ; 107:         cfontptr->common->fnt_status == FNT_FOUND) {
  180.        | 00BA  5500                           SUBQ.B    #2,D0
  181.        | 00BC  6608                           BNE.B     00C6
  182. ; 108:       /* Font noch nicht geladen?? */
  183. ; 109:       /* Die Abfrage kommt nur, wenn der Buchstabe nicht eh schon gefunden    */
  184. ; 110:       /* wird, also wenn der Char sicher noch nie ausgepackt wurde!        */
  185. ; 111: 
  186. ; 112:       Load_really(cfontptr);        /* nun wird er geladen... */
  187.        | 00BE  206C  0000-XX.2                MOVEA.L   _cfontptr(A4),A0
  188.        | 00C2  4EBA  0000-XX.1                JSR       @Load_really(PC)
  189. ; 113:     }
  190. ; 114:     unpack_char(cfontptr, pc);
  191.        | 00C6  202D FFD8                      MOVE.L    FFD8(A5),D0
  192.        | 00CA  48C0                           EXT.L     D0
  193.        | 00CC  206C  0000-XX.2                MOVEA.L   _cfontptr(A4),A0
  194.        | 00D0  4EBA  0000-XX.1                JSR       @unpack_char(PC)
  195. ; 115:     if ((ptr = cd->unpacked) == NULL) {
  196.        | 00D4  206F 0030                      MOVEA.L   0030(A7),A0
  197.        | 00D8  2468 0006                      MOVEA.L   0006(A0),A2
  198.        | 00DC  200A                           MOVE.L    A2,D0
  199.        | 00DE  6700 012E                      BEQ.W     020E
  200. ; 116:       /* auspacken hat nicht geklappt, aber die Breite des Chars ist bekannt */
  201. ; 117:       goto sh_return;
  202. ; 118:     }
  203. ; 119:   }
  204. ; 120: 
  205. ; 121: #if 0
  206. ; 122:   x = (long)(PixRound(h, hconv)-ptr->xOffset) + hoffset;
  207. ; 123:   y = (long)(PixRound(v, vconv)-ptr->yOffset) + voffset; 
  208. ; 124: #endif
  209. ; 125: 
  210. ; 126:   x = hh - ptr->xOffset + hoffset;
  211.        | 00E2  202C  0000-XX.2                MOVE.L    _hh(A4),D0
  212.        | 00E6  90AA 0004                      SUB.L     0004(A2),D0
  213.        | 00EA  D0AC  0000-XX.2                ADD.L     _hoffset(A4),D0
  214. ; 127:   y = vv - ptr->yOffset + voffset; 
  215.        | 00EE  222C  0000-XX.2                MOVE.L    _vv(A4),D1
  216.        | 00F2  92AA 0008                      SUB.L     0008(A2),D1
  217.        | 00F6  D2AC  0000-XX.2                ADD.L     _voffset(A4),D1
  218.        | 00FA  2C01                           MOVE.L    D1,D6
  219. ; 128:   w = (long)ptr->width;                    /* char width */
  220.        | 00FC  7200                           MOVEQ     #00,D1
  221.        | 00FE  3212                           MOVE.W    (A2),D1
  222. ; 129:   cp_h = (long)ptr->height;                /* char height */
  223.        | 0100  7800                           MOVEQ     #00,D4
  224.        | 0102  382A 0002                      MOVE.W    0002(A2),D4
  225. ; 130: 
  226. ; 131:   p = (unsigned short *)(ptr+1);
  227. ; 132: 
  228. ; 133:   /* Buchstaben am Rand werden vollstaendig weggelassen */
  229. ; 134:   if (x < 0L || x+w >= map.width) {
  230.        | 0106  2F40 002C                      MOVE.L    D0,002C(A7)
  231.        | 010A  2F41 0028                      MOVE.L    D1,0028(A7)
  232.        | 010E  4A80                           TST.L     D0
  233.        | 0110  6B00 00FC                      BMI.W     020E
  234.        | 0114  2401                           MOVE.L    D1,D2
  235.        | 0116  D480                           ADD.L     D0,D2
  236.        | 0118  262C  0000-XX.2                MOVE.L    _map(A4),D3
  237.        | 011C  B483                           CMP.L     D3,D2
  238.        | 011E  6C00 00EE                      BGE.W     020E
  239. ; 135:       goto sh_return;
  240. ; 136:   }
  241. ; 137: #ifdef BERND
  242. ; 138:   if (y >= lower_limit || y-cp_h < upper_limit) {
  243. ; 139:                 ^^^^^^ falsche Richtung!
  244. ; 140:       goto sh_return;
  245. ; 141:   }
  246. ; 142: #else
  247. ; 143:   /* Buchstaben die ganz unten oder oben heraus sind werden weggelassen */
  248. ; 144:   if (y >= lower_limit || y+cp_h < upper_limit) {
  249.        | 0122  242C  0000-XX.2                MOVE.L    _lower_limit(A4),D2
  250.        | 0126  BC82                           CMP.L     D2,D6
  251.        | 0128  6C00 00E4                      BGE.W     020E
  252.        | 012C  2A04                           MOVE.L    D4,D5
  253.        | 012E  DA86                           ADD.L     D6,D5
  254.        | 0130  262C  0000-XX.2                MOVE.L    _upper_limit(A4),D3
  255.        | 0134  BA83                           CMP.L     D3,D5
  256.        | 0136  6D00 00D6                      BLT.W     020E
  257. ; 145:       goto sh_return;
  258. ; 146:   }
  259. ; 147: #endif
  260. ; 148: 
  261. ; 149:   lmin = 0; lmax = cp_h;
  262.        | 013A  7E00                           MOVEQ     #00,D7
  263. ; 150: 
  264. ; 151:   /* Buchstaben die nach unten herausragt wird abgeschnitten */
  265. ; 152:   if (y+cp_h >= lower_limit) {
  266.        | 013C  BA82                           CMP.L     D2,D5
  267.        | 013E  6D06                           BLT.B     0146
  268. ; 153:     lmax = lower_limit - y - 1;
  269.        | 0140  9486                           SUB.L     D6,D2
  270.        | 0142  2802                           MOVE.L    D2,D4
  271.        | 0144  5384                           SUBQ.L    #1,D4
  272. ; 154:   }
  273. ; 155:   /* Buchstaben die nach oben herausragen werden ebenfalls abgeschnitten */
  274. ; 156:   if (y < upper_limit) {
  275.        | 0146  2404                           MOVE.L    D4,D2
  276.        | 0148  2B42 FFE0                      MOVE.L    D2,FFE0(A5)
  277.        | 014C  262C  0000-XX.2                MOVE.L    _upper_limit(A4),D3
  278.        | 0150  BC83                           CMP.L     D3,D6
  279.        | 0152  6C06                           BGE.B     015A
  280. ; 157:     lmin = upper_limit - y;
  281.        | 0154  2203                           MOVE.L    D3,D1
  282.        | 0156  9286                           SUB.L     D6,D1
  283.        | 0158  2E01                           MOVE.L    D1,D7
  284. ; 158:   }
  285. ; 159: 
  286. ; 160:   length_row = map.width >> 4;        /* Laenge einer Zeile in Woerter */
  287.        | 015A  222C  0000-XX.2                MOVE.L    _map(A4),D1
  288.        | 015E  E881                           ASR.L     #4,D1
  289. ; 161: 
  290. ; 162:   start_adr = ((unsigned short *)map.pixptr) 
  291. ; 163:                 + ((y - upper_limit + lmin) * length_row)
  292. ; 164:                 + (x >> 4);
  293.        | 0160  2400                           MOVE.L    D0,D2
  294.        | 0162  E882                           ASR.L     #4,D2
  295.        | 0164  D482                           ADD.L     D2,D2
  296.        | 0166  2006                           MOVE.L    D6,D0
  297.        | 0168  9083                           SUB.L     D3,D0
  298.        | 016A  D087                           ADD.L     D7,D0
  299.        | 016C  2F41 0024                      MOVE.L    D1,0024(A7)
  300.        | 0170  4EBA  0000-XX.1                JSR       __CXM33(PC)
  301.        | 0174  D080                           ADD.L     D0,D0
  302.        | 0176  206C  0008-XX.2                MOVEA.L   _map+00000008(A4),A0
  303.        | 017A  D1C0                           ADDA.L    D0,A0
  304.        | 017C  D1C2                           ADDA.L    D2,A0
  305.        | 017E  2648                           MOVEA.L   A0,A3
  306. ; 165:   /* Adresse des ersten Wortes */
  307. ; 166: 
  308. ; 167:   nr_sh = x & 15;            /* Anzahl benoetigter Shifte */
  309.        | 0180  2B4B FFE4                      MOVE.L    A3,FFE4(A5)
  310.        | 0184  202F 002C                      MOVE.L    002C(A7),D0
  311.        | 0188  2A00                           MOVE.L    D0,D5
  312.        | 018A  700F                           MOVEQ     #0F,D0
  313.        | 018C  CA80                           AND.L     D0,D5
  314. ; 168:   words = (w + 15) / 16;        /* Anzahl Words des Chars pro Zeile */
  315.        | 018E  202F 0028                      MOVE.L    0028(A7),D0
  316.        | 0192  720F                           MOVEQ     #0F,D1
  317.        | 0194  D081                           ADD.L     D1,D0
  318.        | 0196  7210                           MOVEQ     #10,D1
  319.        | 0198  4EBA  0000-XX.1                JSR       __CXD33(PC)
  320.        | 019C  2800                           MOVE.L    D0,D4
  321. ; 169: 
  322. ; 170:   char_adr = (unsigned short *) ((unsigned short *)p + (lmin * words));
  323.        | 019E  2007                           MOVE.L    D7,D0
  324.        | 01A0  2204                           MOVE.L    D4,D1
  325.        | 01A2  4EBA  0000-XX.1                JSR       __CXM33(PC)
  326.        | 01A6  D080                           ADD.L     D0,D0
  327.        | 01A8  204A                           MOVEA.L   A2,A0
  328.        | 01AA  D1C0                           ADDA.L    D0,A0
  329.        | 01AC  45E8 000C                      LEA       000C(A0),A2
  330. ; 171: 
  331. ; 172:    reg = 0L;
  332. ; 173: 
  333. ; 174:    if (words == 1) {                /* width char <= width word */
  334.        | 01B0  7001                           MOVEQ     #01,D0
  335.        | 01B2  B880                           CMP.L     D0,D4
  336.        | 01B4  6624                           BNE.B     01DA
  337. ; 175:      for (l=lmin; l<lmax; l++) {
  338.        | 01B6  282D FFE0                      MOVE.L    FFE0(A5),D4
  339.        | 01BA  2C2F 0024                      MOVE.L    0024(A7),D6
  340.        | 01BE  6014                           BRA.B     01D4
  341. ; 176:         reg = ((long)(*char_adr++)) << 16;
  342. ; 177:         reg >>= nr_sh;
  343. ; 178:         *(unsigned long *)start_adr |= reg;
  344.        | 01C0  7000                           MOVEQ     #00,D0
  345.        | 01C2  301A                           MOVE.W    (A2)+,D0
  346.        | 01C4  4840                           SWAP      D0
  347.        | 01C6  4240                           CLR.W     D0
  348.        | 01C8  EAA8                           LSR.L     D5,D0
  349.        | 01CA  8193                           OR.L      D0,(A3)
  350. ; 179:         start_adr += length_row;
  351.        | 01CC  2006                           MOVE.L    D6,D0
  352.        | 01CE  D080                           ADD.L     D0,D0
  353.        | 01D0  D7C0                           ADDA.L    D0,A3
  354.        | 01D2  5287                           ADDQ.L    #1,D7
  355.        | 01D4  BE84                           CMP.L     D4,D7
  356.        | 01D6  6DE8                           BLT.B     01C0
  357. ; 180:     }                        /* end for l        */
  358. ; 181:    }
  359. ; 182:    else {
  360.        | 01D8  6034                           BRA.B     020E
  361. ; 183:     adr = start_adr;
  362. ; 184:     for (l=lmin; l<lmax; l++) {
  363.        | 01DA  2C07                           MOVE.L    D7,D6
  364.        | 01DC  602A                           BRA.B     0208
  365. ; 185:       for (c=0; c<words; c++) {
  366.        | 01DE  7E00                           MOVEQ     #00,D7
  367.        | 01E0  6012                           BRA.B     01F4
  368. ; 186:         reg = ((long)(*char_adr++)) << 16;
  369. ; 187:         reg >>= nr_sh;
  370. ; 188:         *(unsigned long *)(adr++) |= reg;
  371.        | 01E2  204B                           MOVEA.L   A3,A0
  372.        | 01E4  548B                           ADDQ.L    #2,A3
  373.        | 01E6  7000                           MOVEQ     #00,D0
  374.        | 01E8  301A                           MOVE.W    (A2)+,D0
  375.        | 01EA  4840                           SWAP      D0
  376.        | 01EC  4240                           CLR.W     D0
  377.        | 01EE  EAA8                           LSR.L     D5,D0
  378.        | 01F0  8190                           OR.L      D0,(A0)
  379.        | 01F2  5287                           ADDQ.L    #1,D7
  380.        | 01F4  BE84                           CMP.L     D4,D7
  381.        | 01F6  6DEA                           BLT.B     01E2
  382. ; 189:       }                        /* end for c        */
  383. ; 190:       start_adr += length_row;
  384.        | 01F8  202F 0024                      MOVE.L    0024(A7),D0
  385.        | 01FC  D080                           ADD.L     D0,D0
  386.        | 01FE  D1AD FFE4                      ADD.L     D0,FFE4(A5)
  387. ; 191:       adr = start_adr;
  388.        | 0202  266D FFE4                      MOVEA.L   FFE4(A5),A3
  389.        | 0206  5286                           ADDQ.L    #1,D6
  390.        | 0208  BCAD FFE0                      CMP.L     FFE0(A5),D6
  391.        | 020C  6DD0                           BLT.B     01DE
  392. ; 192:     }                        /* end for l        */
  393. ; 193:   }                        /* end else w<16    */
  394. ; 194: 
  395. ; 195: 
  396. ; 196: sh_return:
  397. ; 197: 
  398. ; 198:     if (command <= SET4) {    /* SET command, not a PUT command */
  399.        | 020E  0CAD 0000 0083 FFDC            CMPI.L    #00000083,FFDC(A5)
  400.        | 0216  6E6C                           BGT.B     0284
  401. ; 199:        /* ... but {\tt DVItype} will allow character codes greater 255,
  402. ; 200:         * assuming that they all have the same width as the character
  403. ; 201:         * whose code is  c mod 256.
  404. ; 202:         */
  405. ; 203:       if (!cfontptr->ctfmw_valid ) {
  406.        | 0218  7000                           MOVEQ     #00,D0
  407.        | 021A  4600                           NOT.B     D0
  408.        | 021C  C0AD FFD8                      AND.L     FFD8(A5),D0
  409.        | 0220  E580                           ASL.L     #2,D0
  410.        | 0222  2E00                           MOVE.L    D0,D7
  411.        | 0224  206C  0000-XX.2                MOVEA.L   _cfontptr(A4),A0
  412.        | 0228  4A28 0418                      TST.B     0418(A0)
  413.        | 022C  663C                           BNE.B     026A
  414. ; 204:         /* Diese Abfrage ist eigentlich ueberfluessig!!         */
  415. ; 205:         /* Wenn das Programm korrekt funktioniert, sollte dieser */
  416. ; 206:         /* Fall nie auftreten!                     */
  417. ; 207:         Warning("Internal error: 'ctfmw_valid' (%s, #%d, St:%d)",
  418. ; 208:         cfontptr->common->fnt_group->fnt_name, cfontptr->fnt_number, cfontptr->common->fnt_status);
  419.        | 022E  2268 0414                      MOVEA.L   0414(A0),A1
  420.        | 0232  2C51                           MOVEA.L   (A1),A6
  421.        | 0234  DCFC 0400                      ADDA.W    #0400,A6
  422.        | 0238  7000                           MOVEQ     #00,D0
  423.        | 023A  1029 0A26                      MOVE.B    0A26(A1),D0
  424.        | 023E  2F00                           MOVE.L    D0,-(A7)
  425.        | 0240  2F10                           MOVE.L    (A0),-(A7)
  426.        | 0242  2F0E                           MOVE.L    A6,-(A7)
  427.        | 0244  487A 0046                      PEA       0046(PC)
  428.        | 0248  4EBA  0000-XX.1                JSR       _Warning(PC)
  429. ; 209:     setup_ctfmw(cfontptr);
  430.        | 024C  206C  0000-XX.2                MOVEA.L   _cfontptr(A4),A0
  431.        | 0250  4EBA  0000-XX.1                JSR       @setup_ctfmw(PC)
  432.        | 0254  4FEF 0010                      LEA       0010(A7),A7
  433. ; 210:         h  += cfontptr->ctfmw[(int)pc&255];
  434.        | 0258  206C  0000-XX.2                MOVEA.L   _cfontptr(A4),A0
  435.        | 025C  2248                           MOVEA.L   A0,A1
  436.        | 025E  D3C7                           ADDA.L    D7,A1
  437.        | 0260  2029 0014                      MOVE.L    0014(A1),D0
  438.        | 0264  D1AC  0000-XX.2                ADD.L     D0,_h(A4)
  439. ; 211:     /* h += scalewidth(cfontptr->common->fnt_group->tfmw[(int)pc&255], cfontptr->space_faktor); */
  440. ; 212:       }
  441. ; 213:       else {
  442.        | 0268  600A                           BRA.B     0274
  443. ; 214:         h  += cfontptr->ctfmw[(int)pc&255];
  444.        | 026A  D1C7                           ADDA.L    D7,A0
  445.        | 026C  2028 0014                      MOVE.L    0014(A0),D0
  446.        | 0270  D1AC  0000-XX.2                ADD.L     D0,_h(A4)
  447. ; 215:       }
  448. ; 216:       hh += cd->pixelwidth;
  449.        | 0274  206F 0030                      MOVEA.L   0030(A7),A0
  450.        | 0278  3010                           MOVE.W    (A0),D0
  451.        | 027A  48C0                           EXT.L     D0
  452.        | 027C  D1AC  0000-XX.2                ADD.L     D0,_hh(A4)
  453. ; 217:       setmotion();     /* Immer wenn was geaendert wird, wird auch setmotion() gemacht! */
  454.        | 0280  4EBA  0000-XX.1                JSR       @setmotion(PC)
  455. ; 218:     }
  456. ; 219: #if 0
  457. ; 220:     setmotion();     /* seltsam, warum wird das immer gemacht? */
  458. ; 221: #endif
  459. ; 222: 
  460. ; 223:   /* Antwort: Wird nicht immer gemacht, sondern nur nach einer Bewegung,
  461. ; 224:    * deshalb sollte der Aufruf von setmotion eigentlich in's if.
  462. ; 225:    * Wird nach jeder Aenderung von h gemacht, damit hh nicht mehr als
  463. ; 226:    * maxdrift von PixRound(h) abweicht. (br)
  464. ; 227:    */
  465. ; 228: 
  466. ; 229: }
  467.        | 0284  4CDF 4CFC                      MOVEM.L   (A7)+,D2-D7/A2-A3/A6
  468.        | 0288  4E5D                           UNLK      A5
  469.        | 028A  4E75                           RTS
  470.        | 028C  496E 7465                      PEA       7465(A6)
  471.        | 0290  726E                           MOVEQ     #6E,D1
  472.        | 0292  616C                           BSR.B     0300
  473.        | 0294  2065                           MOVEA.L   -(A5),A0
  474.        | 0296  7272                           MOVEQ     #72,D1
  475.        | 0298  6F72                           BLE.B     030C
  476.        | 029A  3A20                           MOVE.W    -(A0),D5
  477.        | 029C  2763 7466                      MOVE.L    -(A3),7466(A3)
  478.        | 02A0  6D77                           BLT.B     0319
  479.        | 02A2  5F76 616C 6964                 SUBQ.W    #7,([6964,A6])
  480.        | 02A8  2720                           MOVE.L    -(A0),-(A3)
  481.        | 02AA  2825                           MOVE.L    -(A5),D4
  482.        | 02AC  732C                           
  483.        | 02AE  2023                           MOVE.L    -(A3),D0
  484.        | 02B0  2564 2C20                      MOVE.L    -(A4),2C20(A2)
  485.        | 02B4  5374 3A25                      SUBQ.W    #1,25(A4,D3.L*2)
  486.        | 02B8  6429                           BCC.B     02E3
  487.        | 02BA  0000 4E55                      ORI.B     #55,D0
  488. ; 230: 
  489. ; 231: 
  490. ; 232: 
  491. ; 233: /*-->SetRule*/
  492. ; 234: /**********************************************************************/
  493. ; 235: /*****************************  SetRule  ******************************/
  494. ; 236: /**********************************************************************/
  495. ; 237: 
  496. ; 238: void SetRule(long y, long x, BOOLEAN Set)    /* this routine will draw a rule */
  497. ; 239: {
  498.        | 02BE  FFC8 48E7                      F????
  499.        | 02C2  3F30 2E00                      MOVE.W    00(A0,D2.L*8),-(A7)
  500. ; 240: #ifndef WEGDISPLAY
  501. ; 241:   unsigned short    *start_adr, *adr;
  502. ; 242:   unsigned short    start_mask, end_mask;
  503. ; 243:   long            l, c;
  504. ; 244:   long            length_row;
  505. ; 245:   long            words;
  506. ; 246: #endif
  507. ; 247:   long            lmin, lmax;
  508. ; 248: 
  509. ; 249:   long            cp_x, cp_y;        /* upper left corner (pixels)           */
  510. ; 250:   long            cp_h, cp_w;        /* height / width of character (pixels) */
  511. ; 251: 
  512. ; 252:   long rxx, ryy;
  513. ; 253: 
  514. ; 254: 
  515. ; 255:     /* Hoehe und Breite immer aufrunden */
  516. ; 256:     rxx = (x + (hconv - 1)) / hconv;
  517.        | 02C6  202C  0000-XX.2                MOVE.L    _hconv(A4),D0
  518.        | 02CA  2401                           MOVE.L    D1,D2
  519.        | 02CC  D480                           ADD.L     D0,D2
  520.        | 02CE  5382                           SUBQ.L    #1,D2
  521.        | 02D0  2002                           MOVE.L    D2,D0
  522.        | 02D2  2B41 FFE4                      MOVE.L    D1,FFE4(A5)
  523.        | 02D6  222C  0000-XX.2                MOVE.L    _hconv(A4),D1
  524.        | 02DA  4EBA  0000-XX.1                JSR       __CXD33(PC)
  525. ; 257:     ryy = (y + (vconv - 1)) / vconv;
  526. ; 258: 
  527. ; 259: 
  528. ; 260:     if (x > 0 && y > 0) {
  529.        | 02DE  2F40 0032                      MOVE.L    D0,0032(A7)
  530.        | 02E2  222D FFE4                      MOVE.L    FFE4(A5),D1
  531.        | 02E6  4A81                           TST.L     D1
  532.        | 02E8  6F00 0198                      BLE.W     0482
  533.        | 02EC  4A87                           TST.L     D7
  534.        | 02EE  6F00 0192                      BLE.W     0482
  535. ; 261:        cp_x = hh + hoffset;
  536.        | 02F2  222C  0000-XX.2                MOVE.L    _hh(A4),D1
  537.        | 02F6  D2AC  0000-XX.2                ADD.L     _hoffset(A4),D1
  538.        | 02FA  2C01                           MOVE.L    D1,D6
  539. ; 262:        cp_y = vv + voffset;
  540. ; 263: 
  541. ; 264:        cp_w = rxx;
  542.        | 02FC  2A00                           MOVE.L    D0,D5
  543.        | 02FE  2207                           MOVE.L    D7,D1
  544.        | 0300  242C  0000-XX.2                MOVE.L    _vconv(A4),D2
  545.        | 0304  D282                           ADD.L     D2,D1
  546.        | 0306  5381                           SUBQ.L    #1,D1
  547.        | 0308  2001                           MOVE.L    D1,D0
  548.        | 030A  2202                           MOVE.L    D2,D1
  549.        | 030C  4EBA  0000-XX.1                JSR       __CXD33(PC)
  550.        | 0310  2800                           MOVE.L    D0,D4
  551. ; 265:        cp_h = ryy;
  552. ; 266: 
  553. ; 267:        /* mache linken unteren zum linken oberen ... */
  554. ; 268:        cp_y -= (cp_h - 1);
  555.        | 0312  2004                           MOVE.L    D4,D0
  556.        | 0314  5380                           SUBQ.L    #1,D0
  557.        | 0316  222C  0000-XX.2                MOVE.L    _vv(A4),D1
  558.        | 031A  D2AC  0000-XX.2                ADD.L     _voffset(A4),D1
  559.        | 031E  9280                           SUB.L     D0,D1
  560.        | 0320  2E01                           MOVE.L    D1,D7
  561. ; 269: 
  562. ; 270:       /*---- Schneide Rule links und rechts an den Seitengrenzen ab ----*/
  563. ; 271:       if( cp_x < 0L ) {
  564.        | 0322  4A86                           TST.L     D6
  565.        | 0324  6A04                           BPL.B     032A
  566. ; 272:     cp_w += cp_x;    cp_x = 0L;
  567.        | 0326  DA86                           ADD.L     D6,D5
  568.        | 0328  7C00                           MOVEQ     #00,D6
  569. ; 273:       }
  570. ; 274:       if( cp_x + cp_w >= map.width )    /* oder ist -1 notwendig ? */
  571.        | 032A  2005                           MOVE.L    D5,D0
  572.        | 032C  D086                           ADD.L     D6,D0
  573.        | 032E  222C  0000-XX.2                MOVE.L    _map(A4),D1
  574.        | 0332  B081                           CMP.L     D1,D0
  575.        | 0334  6D06                           BLT.B     033C
  576. ; 275:          cp_w = map.width - cp_x;
  577.        | 0336  2001                           MOVE.L    D1,D0
  578.        | 0338  9086                           SUB.L     D6,D0
  579.        | 033A  2A00                           MOVE.L    D0,D5
  580. ; 276: 
  581. ; 277:       if( cp_w <= 0L )    /* Rule liegt nicht mehr auf der Seite */
  582.        | 033C  2005                           MOVE.L    D5,D0
  583.        | 033E  2B40 FFE8                      MOVE.L    D0,FFE8(A5)
  584.        | 0342  4A85                           TST.L     D5
  585.        | 0344  6F00 013C                      BLE.W     0482
  586. ; 278:     goto shift;
  587. ; 279: 
  588. ; 280:       /*---- Schneide Rule oben und unten an den Seitengrenzen ab ----*/
  589. ; 281:       if( cp_y < upper_limit ) {
  590.        | 0348  242C  0000-XX.2                MOVE.L    _upper_limit(A4),D2
  591.        | 034C  BE82                           CMP.L     D2,D7
  592.        | 034E  6C08                           BGE.B     0358
  593. ; 282:     cp_h = cp_h - (upper_limit - cp_y);
  594.        | 0350  2602                           MOVE.L    D2,D3
  595.        | 0352  9687                           SUB.L     D7,D3
  596.        | 0354  9883                           SUB.L     D3,D4
  597. ; 283:     cp_y = upper_limit;
  598.        | 0356  2E02                           MOVE.L    D2,D7
  599. ; 284:       }
  600. ; 285:       if( cp_y + cp_h >= lower_limit )    /* oder ist -1 notwendig ? */
  601.        | 0358  2604                           MOVE.L    D4,D3
  602.        | 035A  D687                           ADD.L     D7,D3
  603.        | 035C  202C  0000-XX.2                MOVE.L    _lower_limit(A4),D0
  604.        | 0360  B680                           CMP.L     D0,D3
  605.        | 0362  6D04                           BLT.B     0368
  606. ; 286:     cp_h = lower_limit - cp_y;
  607.        | 0364  9087                           SUB.L     D7,D0
  608.        | 0366  2800                           MOVE.L    D0,D4
  609. ; 287: 
  610. ; 288:       if( cp_h <= 0L )    /* Rule liegt nicht mehr auf der Seite */
  611.        | 0368  4A84                           TST.L     D4
  612.        | 036A  6F00 0116                      BLE.W     0482
  613. ; 289:     goto shift;
  614. ; 290: 
  615. ; 291: 
  616. ; 292:        lmin = 0; lmax = cp_h;
  617. ; 293: 
  618. ; 294: #if 0
  619. ; 295:        if (cp_x+cp_w < 0L || cp_x >= map.width-1) {
  620. ; 296:          goto shift;
  621. ; 297:        }
  622. ; 298:        if (cp_x+cp_w >= map.width) {    /* Abfrage, dass die Linie nicht rechts raus geht */
  623. ; 299:          cp_w = map.width - cp_x - 1;
  624. ; 300:        }
  625. ; 301: 
  626. ; 302:        if (cp_y >= lower_limit || cp_y+cp_h < upper_limit) {
  627. ; 303:          goto shift;
  628. ; 304:        }
  629. ; 305:        if (cp_y+cp_h >= lower_limit) {
  630. ; 306:          lmax = lower_limit - cp_y - 1;
  631. ; 307:        }
  632. ; 308:        if (cp_y - upper_limit < 0) {
  633. ; 309:          lmin = upper_limit - cp_y;
  634. ; 310:        }
  635. ; 311: #endif
  636. ; 312: 
  637. ; 313: #ifdef WEGDISPLAY
  638. ; 314:        RectFill(&myRastPort, cp_x, cp_y+lmin, cp_x+cp_w-1, cp_y+lmax-1);
  639. ; 315: #else
  640. ; 316: 
  641. ; 317:   length_row = map.width >> 4;        /* Laenge einer Zeile in Woerter */
  642.        | 036E  E881                           ASR.L     #4,D1
  643.        | 0370  2A01                           MOVE.L    D1,D5
  644. ; 318:   start_adr = ((unsigned short *)map.pixptr) + ((cp_y - upper_limit + lmin) * length_row)
  645. ; 319:                     + (cp_x >> 4);
  646.        | 0372  2005                           MOVE.L    D5,D0
  647.        | 0374  2206                           MOVE.L    D6,D1
  648.        | 0376  E881                           ASR.L     #4,D1
  649.        | 0378  D281                           ADD.L     D1,D1
  650.        | 037A  2607                           MOVE.L    D7,D3
  651.        | 037C  9682                           SUB.L     D2,D3
  652.        | 037E  2F40 002E                      MOVE.L    D0,002E(A7)
  653.        | 0382  2003                           MOVE.L    D3,D0
  654.        | 0384  2F41 0036                      MOVE.L    D1,0036(A7)
  655.        | 0388  2205                           MOVE.L    D5,D1
  656.        | 038A  4EBA  0000-XX.1                JSR       __CXM33(PC)
  657.        | 038E  D080                           ADD.L     D0,D0
  658.        | 0390  206C  0008-XX.2                MOVEA.L   _map+00000008(A4),A0
  659.        | 0394  D1C0                           ADDA.L    D0,A0
  660.        | 0396  202F 0036                      MOVE.L    0036(A7),D0
  661.        | 039A  D1C0                           ADDA.L    D0,A0
  662.        | 039C  2648                           MOVEA.L   A0,A3
  663. ; 320:   start_mask = (1 << (16-(cp_x & 15)))-1;
  664.        | 039E  2006                           MOVE.L    D6,D0
  665.        | 03A0  720F                           MOVEQ     #0F,D1
  666.        | 03A2  C081                           AND.L     D1,D0
  667.        | 03A4  7410                           MOVEQ     #10,D2
  668.        | 03A6  2602                           MOVE.L    D2,D3
  669.        | 03A8  9680                           SUB.L     D0,D3
  670.        | 03AA  2F43 002A                      MOVE.L    D3,002A(A7)
  671.        | 03AE  7601                           MOVEQ     #01,D3
  672.        | 03B0  242F 002A                      MOVE.L    002A(A7),D2
  673.        | 03B4  E5A3                           ASL.L     D2,D3
  674.        | 03B6  5383                           SUBQ.L    #1,D3
  675. ; 321:   end_mask   = ~((1 << (16-((cp_x+cp_w) & 15)))-1);
  676.        | 03B8  2406                           MOVE.L    D6,D2
  677.        | 03BA  222D FFE8                      MOVE.L    FFE8(A5),D1
  678.        | 03BE  D481                           ADD.L     D1,D2
  679.        | 03C0  720F                           MOVEQ     #0F,D1
  680.        | 03C2  C481                           AND.L     D1,D2
  681.        | 03C4  7210                           MOVEQ     #10,D1
  682.        | 03C6  3F43 0028                      MOVE.W    D3,0028(A7)
  683.        | 03CA  2601                           MOVE.L    D1,D3
  684.        | 03CC  9682                           SUB.L     D2,D3
  685.        | 03CE  2F42 0024                      MOVE.L    D2,0024(A7)
  686.        | 03D2  7401                           MOVEQ     #01,D2
  687.        | 03D4  E7A2                           ASL.L     D3,D2
  688.        | 03D6  5382                           SUBQ.L    #1,D2
  689.        | 03D8  4682                           NOT.L     D2
  690. ; 322: 
  691. ; 323:   adr = start_adr;
  692.        | 03DA  244B                           MOVEA.L   A3,A2
  693. ; 324:   c = (cp_x & 15) + cp_w;    /* Hilfe fuer unten */
  694.        | 03DC  D0AD FFE8                      ADD.L     FFE8(A5),D0
  695.        | 03E0  2E00                           MOVE.L    D0,D7
  696. ; 325: 
  697. ; 326:   if (c < 16 ) {
  698.        | 03E2  3F42 0022                      MOVE.W    D2,0022(A7)
  699.        | 03E6  BE81                           CMP.L     D1,D7
  700.        | 03E8  6C24                           BGE.B     040E
  701. ; 327:     start_mask &= end_mask;
  702.        | 03EA  302F 0028                      MOVE.W    0028(A7),D0
  703.        | 03EE  2200                           MOVE.L    D0,D1
  704.        | 03F0  C242                           AND.W     D2,D1
  705. ; 328:     for (l=lmin; l<lmax; l++) {
  706.        | 03F2  7E00                           MOVEQ     #00,D7
  707.        | 03F4  3F41 0020                      MOVE.W    D1,0020(A7)
  708.        | 03F8  600E                           BRA.B     0408
  709. ; 329:       *adr |= start_mask;
  710.        | 03FA  302F 0020                      MOVE.W    0020(A7),D0
  711.        | 03FE  8152                           OR.W      D0,(A2)
  712. ; 330:       adr += length_row;
  713.        | 0400  2005                           MOVE.L    D5,D0
  714.        | 0402  D080                           ADD.L     D0,D0
  715.        | 0404  D5C0                           ADDA.L    D0,A2
  716.        | 0406  5287                           ADDQ.L    #1,D7
  717.        | 0408  BE84                           CMP.L     D4,D7
  718.        | 040A  6DEE                           BLT.B     03FA
  719. ; 331:     }
  720. ; 332:   }
  721. ; 333:   else {
  722.        | 040C  6074                           BRA.B     0482
  723. ; 334:     if (c < 32) {
  724.        | 040E  7020                           MOVEQ     #20,D0
  725.        | 0410  BE80                           CMP.L     D0,D7
  726.        | 0412  6C2A                           BGE.B     043E
  727. ; 335:       length_row--;
  728.        | 0414  2C05                           MOVE.L    D5,D6
  729.        | 0416  5386                           SUBQ.L    #1,D6
  730. ; 336:       for (l=lmin; l<lmax; l++) {
  731.        | 0418  7E00                           MOVEQ     #00,D7
  732.        | 041A  601C                           BRA.B     0438
  733. ; 337:         *adr |= start_mask;
  734.        | 041C  302F 0028                      MOVE.W    0028(A7),D0
  735.        | 0420  8152                           OR.W      D0,(A2)
  736. ; 338:     adr++;
  737. ; 339:     *adr |= end_mask;
  738.        | 0422  302F 0022                      MOVE.W    0022(A7),D0
  739.        | 0426  816A 0002                      OR.W      D0,0002(A2)
  740. ; 340:         adr += length_row;
  741.        | 042A  2006                           MOVE.L    D6,D0
  742.        | 042C  D080                           ADD.L     D0,D0
  743.        | 042E  204A                           MOVEA.L   A2,A0
  744.        | 0430  D1C0                           ADDA.L    D0,A0
  745.        | 0432  45E8 0002                      LEA       0002(A0),A2
  746.        | 0436  5287                           ADDQ.L    #1,D7
  747.        | 0438  BE84                           CMP.L     D4,D7
  748.        | 043A  6DE0                           BLT.B     041C
  749. ; 341:       }
  750. ; 342:     }
  751. ; 343:     else {
  752.        | 043C  6044                           BRA.B     0482
  753. ; 344:       words = (cp_w + 15 - (16-(cp_x&15)) - ((cp_x+cp_w)&15) ) >> 4;
  754. ; 345:     /* Anzahl der Woerter */
  755. ; 346:       for (l=lmin; l<lmax; l++) {
  756.        | 043E  7A00                           MOVEQ     #00,D5
  757.        | 0440  603C                           BRA.B     047E
  758. ; 347:         *adr |= start_mask;
  759.        | 0442  302F 0028                      MOVE.W    0028(A7),D0
  760.        | 0446  8152                           OR.W      D0,(A2)
  761. ; 348:     adr++;
  762.        | 0448  548A                           ADDQ.L    #2,A2
  763. ; 349:     for (c=0; c<words; c++) {
  764.        | 044A  7E00                           MOVEQ     #00,D7
  765.        | 044C  202D FFE8                      MOVE.L    FFE8(A5),D0
  766.        | 0450  90AF 002A                      SUB.L     002A(A7),D0
  767.        | 0454  90AF 0024                      SUB.L     0024(A7),D0
  768.        | 0458  720F                           MOVEQ     #0F,D1
  769.        | 045A  D081                           ADD.L     D1,D0
  770.        | 045C  E880                           ASR.L     #4,D0
  771.        | 045E  2C00                           MOVE.L    D0,D6
  772.        | 0460  6006                           BRA.B     0468
  773. ; 350:       *adr = 0xFFFF;
  774.        | 0462  34FC FFFF                      MOVE.W    #FFFF,(A2)+
  775. ; 351:       adr++;
  776.        | 0466  5287                           ADDQ.L    #1,D7
  777.        | 0468  BE86                           CMP.L     D6,D7
  778.        | 046A  6DF6                           BLT.B     0462
  779. ; 352:     }
  780. ; 353:     *adr |= end_mask;
  781.        | 046C  302F 0022                      MOVE.W    0022(A7),D0
  782.        | 0470  8152                           OR.W      D0,(A2)
  783. ; 354:         start_adr += length_row;
  784.        | 0472  202F 002E                      MOVE.L    002E(A7),D0
  785.        | 0476  D080                           ADD.L     D0,D0
  786.        | 0478  D7C0                           ADDA.L    D0,A3
  787. ; 355:         adr = start_adr;
  788.        | 047A  244B                           MOVEA.L   A3,A2
  789.        | 047C  5285                           ADDQ.L    #1,D5
  790.        | 047E  BA84                           CMP.L     D4,D5
  791.        | 0480  6DC0                           BLT.B     0442
  792. ; 356:       }
  793. ; 357:     }
  794. ; 358:   }
  795. ; 359: #endif        /* WEGDISPLAY */
  796. ; 360:      }
  797. ; 361: 
  798. ; 362: shift:
  799. ; 363:     if (Set) {
  800.        | 0482  4AAD 0008                      TST.L     0008(A5)
  801.        | 0486  6714                           BEQ.B     049C
  802. ; 364:       h  += x;
  803.        | 0488  202D FFE4                      MOVE.L    FFE4(A5),D0
  804.        | 048C  D1AC  0000-XX.2                ADD.L     D0,_h(A4)
  805. ; 365:       hh += rxx ;
  806.        | 0490  202F 0032                      MOVE.L    0032(A7),D0
  807.        | 0494  D1AC  0000-XX.2                ADD.L     D0,_hh(A4)
  808. ; 366:       setmotion();    /* muss nach jeder Aenderung gemacht werden! */
  809.        | 0498  4EBA  0000-XX.1                JSR       @setmotion(PC)
  810. ; 367:     }
  811. ; 368: }
  812.        | 049C  4CDF 0CFC                      MOVEM.L   (A7)+,D2-D7/A2-A3
  813.        | 04A0  4E5D                           UNLK      A5
  814.        | 04A2  4E75                           RTS
  815.