home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff253.lzh / MuchMore / src / MMQText.asm < prev    next >
Assembly Source File  |  1989-10-19  |  19KB  |  831 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    MMQText.ASM
  3. ;  :Contents.   Procedure for fast text-output used within MuchMore
  4. ;  :Author.     Fridtjof Siebert
  5. ;  :Address.    Nobileweg 67, D-7-Stgt-40
  6. ;  :Shortcut.   [fbs]
  7. ;  :History.    V 2.0 03-Sep-89 [fbs]
  8. ;  :Copyright.  Publik Domain
  9. ;  :Language.   68000 Assembler
  10. ;  :Translator. a68k
  11. ;---------------------------------------------------------------------------*
  12.  
  13.   XDEF QText         ; QText Procedure
  14.   XDEF GetFontData   ; GetFontData Procedure
  15.   XDEF CopyLine1     ; CopyLine1 Procedure
  16.   XDEF CopyLine2     ; CopyLine2 Procedure
  17.   XDEF BitMap        ; Variable Contains Pointer to the BitMap
  18.  
  19. ; BitMap:
  20. bm_BytesPerRow = 0
  21. bm_Rows        = 2
  22. bm_Flags       = 4
  23. bm_Depth       = 5
  24. bm_Pad         = 6
  25. bm_Planes      = 8
  26. bm_SIZEOF      = 40
  27.  
  28. BitMap: dc.l 0;
  29.  
  30. ;* d1 - vertical position (pixel position)
  31. ;* a0 - Pointer to String (0C-Termination)
  32. ;* a1 - Pointer to BitMap to store String
  33. ;* a2 - Pointer to TextFont
  34. ;
  35. ;Special codes:
  36. ; 1..16: background color (x-1) & 3, foreground ((x-1) / 4) & 3
  37. ; 17: switch to plain text
  38. ; 18: switch to italics
  39. ; 19: switch to bold
  40. ; 20: switch to italics and bold
  41. ; 21: underline on
  42. ; 22: underline off
  43.  
  44. ; Register use:
  45.  
  46. ; D0: character
  47. ; D1: vertical position
  48. ; D2: bytesperrow
  49. ; D3: to examine character
  50. ; D4: Offset of fontstyle
  51. ; D5: offset (row * bytesperrow)
  52.  
  53. ; A0: points to string
  54. ; A1: plane # 1
  55. ; A2: fontdata
  56. ; A3: character address in font.chardata
  57. ; A4: plane # 2;
  58. ; A5: procedure to type in correct color
  59. ; A6: negative character
  60.  
  61. p1  EQUR A1;
  62. p2  EQUR A4;
  63. chr EQUR A3;
  64. nch EQUR A6;
  65. col EQUR A5;
  66.  
  67. char EQUR d0
  68. vert EQUR d1
  69. bpr  EQUR d2
  70. ch2  EQUR d3
  71. style EQUR d4
  72. dadr EQUR d5
  73. ulin EQUR d6  ; underline on ?
  74. nuln EQUR d7  ; underline off?
  75.  
  76.  
  77. QText:
  78.   move.l      A5,-(A7);
  79.   lea         Col04,col;
  80.   clr         style;
  81.   sf          ulin;
  82.   st          nuln;
  83.   move.l      BitMap,a1;
  84.   move        bm_BytesPerRow(a1),bpr;
  85.   ext.l       bpr;
  86.   mulu        bpr,vert;
  87.   move.l      bm_Planes+4(a1),p2;  position in plane #2
  88.   move.l      bm_Planes(a1),p1;    position in plane #1
  89.   add.l       vert,p1;               add offset within plane
  90.   add.l       vert,p2;
  91.   move.l      p1,chr;
  92.   move.l      p2,nch;
  93.   move        bpr,vert;
  94.   subq        #1,vert;
  95. clrline:
  96.   clr.l       (chr)+           ; clear line
  97.   clr.l       (chr)+
  98.   clr.l       (nch)+
  99.   clr.l       (nch)+
  100.   dbra        vert,clrline;
  101.  
  102.   move        bpr,vert;
  103.   asl         #3,vert;
  104.   sub         bpr,vert;   vert = 7*bpr;
  105.  
  106. loop:
  107.   move.b      (a0)+,char;           ; get character
  108.   beq         return;
  109.  
  110.   cmp.b       #$20,char;
  111.   bcc         \typechr;
  112.   cmp.b       #17,char;
  113.   blt         \newcol;
  114.   cmp.b       #22,char;
  115.   cmp.b       #21,char;
  116.   blt         \newstyle;
  117.   seq         ulin;
  118.   sne         nuln;
  119.   bra.s       loop;
  120. \newstyle;
  121.   bhi.s       loop;
  122.   sub.b       #17,char;
  123.   ext.w       char;
  124.   move        char,style;
  125.   asl         #1,style;
  126.   add         char,style;
  127.   asl         #8,style;
  128.   add         style,style;
  129.   bra         loop;
  130.  
  131. \newcol:
  132.   subq.b      #1,char;
  133.   bne         \l0;
  134.   lea         Col00,col;
  135.   bra         loop;
  136. \l0:
  137.   subq.b      #1,char;
  138.   bne         \l1;
  139.   lea         Col01,col;
  140.   bra         loop;
  141. \l1:
  142.   subq.b      #1,char;
  143.   bne         \l2;
  144.   lea         Col02,col;
  145.   bra         loop;
  146. \l2:
  147.   subq.b      #1,char;
  148.   bne         \l3;
  149.   lea         Col03,col;
  150.   bra         loop;
  151. \l3:
  152.   subq.b      #1,char;
  153.   bne         \l4;
  154.   lea         Col04,col;
  155.   bra         loop;
  156. \l4:
  157.   subq.b      #1,char;
  158.   bne         \l5;
  159.   lea         Col05,col;
  160.   bra         loop;
  161. \l5:
  162.   subq.b      #1,char;
  163.   bne         \l6;
  164.   lea         Col06,col;
  165.   bra         loop;
  166. \l6:
  167.   subq.b      #1,char;
  168.   bne         \l7;
  169.   lea         Col07,col;
  170.   bra         loop;
  171. \l7:
  172.   subq.b      #1,char;
  173.   bne         \l8;
  174.   lea         Col08,col;
  175.   bra         loop;
  176. \l8:
  177.   subq.b      #1,char;
  178.   bne         \l9;
  179.   lea         Col09,col;
  180.   bra         loop;
  181. \l9:
  182.   subq.b      #1,char;
  183.   bne         \la;
  184.   lea         Col10,col;
  185.   bra         loop;
  186. \la:
  187.   subq.b      #1,char;
  188.   bne         \lb;
  189.   lea         Col11,col;
  190.   bra         loop;
  191. \lb:
  192.   subq.b      #1,char;
  193.   bne         \lc;
  194.   lea         Col12,col;
  195.   bra         loop;
  196. \lc:
  197.   subq.b      #1,char;
  198.   bne         \ld;
  199.   lea         Col13,col;
  200.   bra         loop;
  201. \ld:
  202.   subq.b      #1,char;
  203.   bne         \le;
  204.   lea         Col14,col;
  205.   bra         loop;
  206. \le:
  207.   lea         Col15,col;
  208.   bra         loop;
  209.  
  210. \typechr:
  211.   sub.b       #$20,char;
  212.  
  213.   and         #$ff,char;
  214.   asl         #3,char;
  215.   add         style,char;
  216.   lea         0(a2,char.w),chr;
  217.   lea         $1800(chr),nch
  218.  
  219.   jmp         (col);
  220.  
  221. Col00:
  222.   bra         next;
  223.  
  224. Col01:
  225.   move.b      (nch)+,(p1);
  226.   adda.w      bpr,p1;
  227.   move.b      (nch)+,(p1);
  228.   adda.w      bpr,p1;
  229.   move.b      (nch)+,(p1);
  230.   adda.w      bpr,p1;
  231.   move.b      (nch)+,(p1);
  232.   adda.w      bpr,p1;
  233.   move.b      (nch)+,(p1);
  234.   adda.w      bpr,p1;
  235.   move.b      (nch)+,(p1);
  236.   adda.w      bpr,p1;
  237.   move.b      (nch)+,(p1);
  238.   adda.w      bpr,p1;
  239.   move.b      (nch)+,(p1);
  240.   and.b       nuln,(p1);
  241.   suba.w      vert,p1;
  242.   bra         next;
  243.  
  244. Col02:
  245.   move.b      (nch)+,(p2);
  246.   adda.w      bpr,p2;
  247.   move.b      (nch)+,(p2);
  248.   adda.w      bpr,p2;
  249.   move.b      (nch)+,(p2);
  250.   adda.w      bpr,p2;
  251.   move.b      (nch)+,(p2);
  252.   adda.w      bpr,p2;
  253.   move.b      (nch)+,(p2);
  254.   adda.w      bpr,p2;
  255.   move.b      (nch)+,(p2);
  256.   adda.w      bpr,p2;
  257.   move.b      (nch)+,(p2);
  258.   adda.w      bpr,p2;
  259.   move.b      (nch)+,(p2);
  260.   and.b       nuln,(p2);
  261.   suba.w      vert,p2;
  262.   bra         next;
  263.  
  264. Col03:
  265.   move.b      (nch),(p1);
  266.   move.b      (nch)+,(p2);
  267.   move        bpr,dadr;
  268.   move.b      (nch),0(p1,dadr);
  269.   move.b      (nch)+,0(p2,dadr);
  270.   add         bpr,dadr;
  271.   move.b      (nch),0(p1,dadr);
  272.   move.b      (nch)+,0(p2,dadr);
  273.   add         bpr,dadr;
  274.   move.b      (nch),0(p1,dadr);
  275.   move.b      (nch)+,0(p2,dadr);
  276.   add         bpr,dadr;
  277.   move.b      (nch),0(p1,dadr);
  278.   move.b      (nch)+,0(p2,dadr);
  279.   add         bpr,dadr;
  280.   move.b      (nch),0(p1,dadr);
  281.   move.b      (nch)+,0(p2,dadr);
  282.   add         bpr,dadr;
  283.   move.b      (nch),0(p1,dadr);
  284.   move.b      (nch)+,0(p2,dadr);
  285.   add         bpr,dadr;
  286.   move.b      (nch),0(p1,dadr);
  287.   move.b      (nch)+,0(p2,dadr);
  288.   and.b       nuln,0(p1,dadr);
  289.   and.b       nuln,0(p2,dadr);
  290.   bra         next;
  291.  
  292. Col04:
  293.   move.b      (chr)+,(p1);
  294.   adda.w      bpr,p1;
  295.   move.b      (chr)+,(p1);
  296.   adda.w      bpr,p1;
  297.   move.b      (chr)+,(p1);
  298.   adda.w      bpr,p1;
  299.   move.b      (chr)+,(p1);
  300.   adda.w      bpr,p1;
  301.   move.b      (chr)+,(p1);
  302.   adda.w      bpr,p1;
  303.   move.b      (chr)+,(p1);
  304.   adda.w      bpr,p1;
  305.   move.b      (chr)+,(p1);
  306.   adda.w      bpr,p1;
  307.   move.b      (chr)+,(p1);
  308.   or.b        ulin,(p1);
  309.   suba.w      vert,p1;
  310.   bra         next;
  311.  
  312. Col05:
  313.   st          (p1);
  314.   move        bpr,dadr;
  315.   st          0(p1,dadr);
  316.   add         bpr,dadr;
  317.   st          0(p1,dadr);
  318.   add         bpr,dadr;
  319.   st          0(p1,dadr);
  320.   add         bpr,dadr;
  321.   st          0(p1,dadr);
  322.   add         bpr,dadr;
  323.   st          0(p1,dadr);
  324.   add         bpr,dadr;
  325.   st          0(p1,dadr);
  326.   add         bpr,dadr;
  327.   st          0(p1,dadr);
  328.   bra         next;
  329.  
  330. Col06:
  331.   move.b      (chr)+,(p1);
  332.   move.b      (nch)+,(p2);
  333.   move        bpr,dadr;
  334.   move.b      (chr)+,0(p1,dadr);
  335.   move.b      (nch)+,0(p2,dadr);
  336.   add         bpr,dadr;
  337.   move.b      (chr)+,0(p1,dadr);
  338.   move.b      (nch)+,0(p2,dadr);
  339.   add         bpr,dadr;
  340.   move.b      (chr)+,0(p1,dadr);
  341.   move.b      (nch)+,0(p2,dadr);
  342.   add         bpr,dadr;
  343.   move.b      (chr)+,0(p1,dadr);
  344.   move.b      (nch)+,0(p2,dadr);
  345.   add         bpr,dadr;
  346.   move.b      (chr)+,0(p1,dadr);
  347.   move.b      (nch)+,0(p2,dadr);
  348.   add         bpr,dadr;
  349.   move.b      (chr)+,0(p1,dadr);
  350.   move.b      (nch)+,0(p2,dadr);
  351.   add         bpr,dadr;
  352.   move.b      (chr)+,0(p1,dadr);
  353.   move.b      (nch)+,0(p2,dadr);
  354.   or.b        ulin,0(p1,dadr);
  355.   and.b       nuln,0(p2,dadr);
  356.   bra         next;
  357.  
  358. Col07:
  359.   st          (p1);
  360.   move.b      (nch)+,(p2);
  361.   move        bpr,dadr;
  362.   st          0(p1,dadr);
  363.   move.b      (nch)+,0(p2,dadr);
  364.   add         bpr,dadr;
  365.   st          0(p1,dadr);
  366.   move.b      (nch)+,0(p2,dadr);
  367.   add         bpr,dadr;
  368.   st          0(p1,dadr);
  369.   move.b      (nch)+,0(p2,dadr);
  370.   add         bpr,dadr;
  371.   st          0(p1,dadr);
  372.   move.b      (nch)+,0(p2,dadr);
  373.   add         bpr,dadr;
  374.   st          0(p1,dadr);
  375.   move.b      (nch)+,0(p2,dadr);
  376.   add         bpr,dadr;
  377.   st          0(p1,dadr);
  378.   move.b      (nch)+,0(p2,dadr);
  379.   add         bpr,dadr;
  380.   st          0(p1,dadr);
  381.   move.b      (nch)+,0(p2,dadr);
  382.   and.b       nuln,0(p2,dadr);
  383.   bra         next;
  384.  
  385. Col08:
  386.   move.b      (chr)+,(p2);
  387.   adda.w      bpr,p2;
  388.   move.b      (chr)+,(p2);
  389.   adda.w      bpr,p2;
  390.   move.b      (chr)+,(p2);
  391.   adda.w      bpr,p2;
  392.   move.b      (chr)+,(p2);
  393.   adda.w      bpr,p2;
  394.   move.b      (chr)+,(p2);
  395.   adda.w      bpr,p2;
  396.   move.b      (chr)+,(p2);
  397.   adda.w      bpr,p2;
  398.   move.b      (chr)+,(p2);
  399.   adda.w      bpr,p2;
  400.   move.b      (chr)+,(p2);
  401.   or.b        ulin,(p2);
  402.   suba.w      vert,p2;
  403.   bra         next;
  404.  
  405. Col09:
  406.   move.b      (nch)+,(p1);
  407.   move.b      (chr)+,(p2);
  408.   move        bpr,dadr;
  409.   move.b      (nch)+,0(p1,dadr);
  410.   move.b      (chr)+,0(p2,dadr);
  411.   add         bpr,dadr;
  412.   move.b      (nch)+,0(p1,dadr);
  413.   move.b      (chr)+,0(p2,dadr);
  414.   add         bpr,dadr;
  415.   move.b      (nch)+,0(p1,dadr);
  416.   move.b      (chr)+,0(p2,dadr);
  417.   add         bpr,dadr;
  418.   move.b      (nch)+,0(p1,dadr);
  419.   move.b      (chr)+,0(p2,dadr);
  420.   add         bpr,dadr;
  421.   move.b      (nch)+,0(p1,dadr);
  422.   move.b      (chr)+,0(p2,dadr);
  423.   add         bpr,dadr;
  424.   move.b      (nch)+,0(p1,dadr);
  425.   move.b      (chr)+,0(p2,dadr);
  426.   add         bpr,dadr;
  427.   move.b      (nch)+,0(p1,dadr);
  428.   move.b      (chr)+,0(p2,dadr);
  429.   and.b       nuln,0(p1,dadr);
  430.   or.b        ulin,0(p2,dadr);
  431.   bra         next;
  432.  
  433. Col10:
  434.   st          (p2);
  435.   adda.w      bpr,p2;
  436.   st          (p2);
  437.   adda.w      bpr,p2;
  438.   st          (p2);
  439.   adda.w      bpr,p2;
  440.   st          (p2);
  441.   adda.w      bpr,p2;
  442.   st          (p2);
  443.   adda.w      bpr,p2;
  444.   st          (p2);
  445.   adda.w      bpr,p2;
  446.   st          (p2);
  447.   adda.w      bpr,p2;
  448.   st          (p2);
  449.   suba.w      vert,p2;
  450.   bra         next;
  451.  
  452. Col11:
  453.   move.b      (nch)+,(p1);
  454.   st          (p2);
  455.   move        bpr,dadr;
  456.   move.b      (nch)+,0(p1,dadr);
  457.   st          0(p2,dadr);
  458.   add         bpr,dadr;
  459.   move.b      (nch)+,0(p1,dadr);
  460.   st          0(p2,dadr);
  461.   add         bpr,dadr;
  462.   move.b      (nch)+,0(p1,dadr);
  463.   st          0(p2,dadr);
  464.   add         bpr,dadr;
  465.   move.b      (nch)+,0(p1,dadr);
  466.   st          0(p2,dadr);
  467.   add         bpr,dadr;
  468.   move.b      (nch)+,0(p1,dadr);
  469.   st          0(p2,dadr);
  470.   add         bpr,dadr;
  471.   move.b      (nch)+,0(p1,dadr);
  472.   st          0(p2,dadr);
  473.   add         bpr,dadr;
  474.   move.b      (nch)+,0(p1,dadr);
  475.   st          0(p2,dadr);
  476.   and.b       nuln,0(p1,dadr);
  477.   bra         next;
  478.  
  479. Col12:
  480.   move.b      (chr),(p1);
  481.   move.b      (chr)+,(p2);
  482.   move        bpr,dadr;
  483.   move.b      (chr),0(p1,dadr);
  484.   move.b      (chr)+,0(p2,dadr);
  485.   add         bpr,dadr;
  486.   move.b      (chr),0(p1,dadr);
  487.   move.b      (chr)+,0(p2,dadr);
  488.   add         bpr,dadr;
  489.   move.b      (chr),0(p1,dadr);
  490.   move.b      (chr)+,0(p2,dadr);
  491.   add         bpr,dadr;
  492.   move.b      (chr),0(p1,dadr);
  493.   move.b      (chr)+,0(p2,dadr);
  494.   add         bpr,dadr;
  495.   move.b      (chr),0(p1,dadr);
  496.   move.b      (chr)+,0(p2,dadr);
  497.   add         bpr,dadr;
  498.   move.b      (chr),0(p1,dadr);
  499.   move.b      (chr)+,0(p2,dadr);
  500.   add         bpr,dadr;
  501.   move.b      (chr),0(p1,dadr);
  502.   move.b      (chr)+,0(p2,dadr);
  503.   or.b        ulin,0(p1,dadr);
  504.   or.b        ulin,0(p2,dadr);
  505.   bra         next;
  506.  
  507. Col13:
  508.   st          (p1);
  509.   move.b      (chr)+,(p2);
  510.   move        bpr,dadr;
  511.   st          0(p1,dadr);
  512.   move.b      (chr)+,0(p2,dadr);
  513.   add         bpr,dadr;
  514.   st          0(p1,dadr);
  515.   move.b      (chr)+,0(p2,dadr);
  516.   add         bpr,dadr;
  517.   st          0(p1,dadr);
  518.   move.b      (chr)+,0(p2,dadr);
  519.   add         bpr,dadr;
  520.   st          0(p1,dadr);
  521.   move.b      (chr)+,0(p2,dadr);
  522.   add         bpr,dadr;
  523.   st          0(p1,dadr);
  524.   move.b      (chr)+,0(p2,dadr);
  525.   add         bpr,dadr;
  526.   st          0(p1,dadr);
  527.   move.b      (chr)+,0(p2,dadr);
  528.   add         bpr,dadr;
  529.   st          0(p1,dadr);
  530.   move.b      (chr)+,0(p2,dadr);
  531.   or.b        ulin,0(p2,dadr);
  532.   bra         next;
  533.  
  534. Col14:
  535.   move.b      (chr)+,(p1);
  536.   st          (p2);
  537.   move        bpr,dadr;
  538.   move.b      (chr)+,0(p1,dadr);
  539.   st          0(p2,dadr);
  540.   add         bpr,dadr;
  541.   move.b      (chr)+,0(p1,dadr);
  542.   st          0(p2,dadr);
  543.   add         bpr,dadr;
  544.   move.b      (chr)+,0(p1,dadr);
  545.   st          0(p2,dadr);
  546.   add         bpr,dadr;
  547.   move.b      (chr)+,0(p1,dadr);
  548.   st          0(p2,dadr);
  549.   add         bpr,dadr;
  550.   move.b      (chr)+,0(p1,dadr);
  551.   st          0(p2,dadr);
  552.   add         bpr,dadr;
  553.   move.b      (chr)+,0(p1,dadr);
  554.   st          0(p2,dadr);
  555.   add         bpr,dadr;
  556.   move.b      (chr)+,0(p1,dadr);
  557.   st          0(p2,dadr);
  558.   or.b        ulin,0(p1,dadr);
  559.   bra         next;
  560.  
  561. Col15:
  562.   st          (p1);
  563.   st          (p2);
  564.   move        bpr,dadr;
  565.   st          0(p1,dadr);
  566.   st          0(p2,dadr);
  567.   add         bpr,dadr;
  568.   st          0(p1,dadr);
  569.   st          0(p2,dadr);
  570.   add         bpr,dadr;
  571.   st          0(p1,dadr);
  572.   st          0(p2,dadr);
  573.   add         bpr,dadr;
  574.   st          0(p1,dadr);
  575.   st          0(p2,dadr);
  576.   add         bpr,dadr;
  577.   st          0(p1,dadr);
  578.   st          0(p2,dadr);
  579.   add         bpr,dadr;
  580.   st          0(p1,dadr);
  581.   st          0(p2,dadr);
  582.   add         bpr,dadr;
  583.   st          0(p1,dadr);
  584.   st          0(p2,dadr);
  585.  
  586. next:
  587.   addq        #1,p1;
  588.   addq        #1,p2;
  589.   bra         loop;
  590.  
  591. return:
  592.   move.l      (A7)+,A5;
  593.   rts;
  594.  
  595. ;---------------------------------------------------------------------------*)
  596. ; GetFontData
  597.  
  598. ; A0: Pointer to font's chardata
  599. ; A1: Pointer to fontdata-Array
  600. ; D7: Line Modulo
  601.  
  602. ch EQUR A0;
  603. fd EQUR A1;
  604. ad EQUR A2;
  605. j  EQUR D0;
  606. x  EQUR D1;
  607. c  EQUR D2;
  608. d  EQUR D3;
  609. e  EQUR D4;
  610. x1 EQUR D5;
  611. x2 EQUR D6;
  612. x3 EQUR D7;
  613.  
  614. GetFontData:
  615.  
  616.         move.w  D7,-(A7);
  617.         move    #0,j;
  618. jloop:  move    j,x;
  619.         asl     #3,x;
  620.         move    x,x1;
  621.         move    x,x2;
  622.         move    x,x3;
  623.         add     #$600,x1;
  624.         add     #$c00,x2;
  625.         add     #$1200,x3;
  626.         lea     0(ch,j),ad;
  627. ; Byte 0:
  628.         move.b  (ad),c;
  629.         move.b  c,0(fd,x);
  630.         move.b  c,d;
  631.         lsr.b   #2,d;
  632.         bcc     \1;
  633.         bset    #0,d;
  634. \1:     move.b  d,0(fd,x1);
  635.         move.b  c,e;
  636.         lsr.b   #1,e;
  637.         or.b    c,e;
  638.         move.b  e,0(fd,x2);
  639.         move.b  d,e;
  640.         lsr.b   #1,e;
  641.         or.b    d,e;
  642.         move.b  e,0(fd,x3);
  643. ; Byte 1:
  644.         adda.w  (A7),ad
  645.         move.b  (ad),c;
  646.         move.b  c,1(fd,x);
  647.         move.b  c,d;
  648.         lsr.b   #2,d;
  649.         bcc     \2;
  650.         bset    #0,d;
  651. \2:     move.b  d,1(fd,x1);
  652.         move.b  c,e;
  653.         lsr.b   #1,e;
  654.         or.b    c,e;
  655.         move.b  e,1(fd,x2);
  656.         move.b  d,e;
  657.         lsr.b   #1,e;
  658.         or.b    d,e;
  659.         move.b  e,1(fd,x3);
  660. ; Byte 2:
  661.         adda.w  (A7),ad
  662.         move.b  (ad),c;
  663.         move.b  c,2(fd,x);
  664.         move.b  c,d;
  665.         lsr.b   #1,d;
  666.         bcc     \3;
  667.         bset    #0,d;
  668. \3:     move.b  d,2(fd,x1);
  669.         move.b  c,e;
  670.         lsr.b   #1,e;
  671.         or.b    c,e;
  672.         move.b  e,2(fd,x2);
  673.         move.b  d,e;
  674.         lsr.b   #1,e;
  675.         or.b    d,e;
  676.         move.b  e,2(fd,x3);
  677. ; Byte 3:
  678.         adda.w  (A7),ad
  679.         move.b  (ad),c;
  680.         move.b  c,3(fd,x);
  681.         move.b  c,d;
  682.         lsr.b   #1,d;
  683.         bcc     \4;
  684.         bset    #0,d;
  685. \4:     move.b  d,3(fd,x1);
  686.         move.b  c,e;
  687.         lsr.b   #1,e;
  688.         or.b    c,e;
  689.         move.b  e,3(fd,x2);
  690.         move.b  d,e;
  691.         lsr.b   #1,e;
  692.         or.b    d,e;
  693.         move.b  e,3(fd,x3);
  694. ; Byte 4:
  695.         adda.w  (A7),ad
  696.         move.b  (ad),c;
  697.         move.b  c,4(fd,x);
  698.         move.b  c,4(fd,x1);
  699.         move.b  c,e;
  700.         lsr.b   #1,e;
  701.         or.b    c,e;
  702.         move.b  e,4(fd,x2);
  703.         move.b  e,4(fd,x3);
  704. ; Byte 5:
  705.         adda.w  (A7),ad
  706.         move.b  (ad),c;
  707.         move.b  c,5(fd,x);
  708.         move.b  c,5(fd,x1);
  709.         move.b  c,e;
  710.         lsr.b   #1,e;
  711.         or.b    c,e;
  712.         move.b  e,5(fd,x2);
  713.         move.b  e,5(fd,x3);
  714. ; Byte 6:
  715.         adda.w  (A7),ad
  716.         move.b  (ad),c;
  717.         move.b  c,6(fd,x);
  718.         move.b  c,d;
  719.         lsl.b   #1,d;
  720.         bcc     \7;
  721.         bset    #7,d;
  722. \7:     move.b  d,6(fd,x1);
  723.         move.b  c,e;
  724.         lsr.b   #1,e;
  725.         or.b    c,e;
  726.         move.b  e,6(fd,x2);
  727.         move.b  d,e;
  728.         lsr.b   #1,e;
  729.         or.b    d,e;
  730.         move.b  e,6(fd,x3);
  731. ; Byte 7:
  732.         adda.w  (A7),ad
  733.         move.b  (ad),c;
  734.         move.b  c,7(fd,x);
  735.         move.b  c,d;
  736.         lsl.b   #1,d;
  737.         bcc     \8;
  738.         bset    #7,d;
  739. \8:     move.b  d,7(fd,x1);
  740.         move.b  c,e;
  741.         lsr.b   #1,e;
  742.         or.b    c,e;
  743.         move.b  e,7(fd,x2);
  744.         move.b  d,e;
  745.         lsr.b   #1,e;
  746.         or.b    d,e;
  747.         move.b  e,7(fd,x3);
  748.  
  749.         addq    #1,j;
  750.         move    j,x;
  751.         cmp     #$30,x;
  752.         beq.s   newlin;
  753.         cmp     #$60,x;
  754.         beq.s   newlin;
  755.         cmp     #$90,x;
  756.         bne.s   nextl;
  757. newlin: move    (A7),x;
  758.         asl     #3,x;
  759.         sub     #$30,x;
  760.         adda.w  x,ch;
  761. nextl:  cmp     #$c0,j;
  762.         blt     jloop;
  763.  
  764.         move.l  fd,ad;
  765.         adda.w  #$1800,ad;
  766.         move    #$5ff,j;
  767. invers: move.l  (fd)+,c;
  768.         not.l   c;
  769.         move.l  c,(ad)+;
  770.         dbra    j,invers;
  771.         lea     2(A7),A7;
  772.         rts;
  773.  
  774. ;---------------------------------------------------------------------------*)
  775. ; CopyLine1
  776.  
  777. ; a0: Bitmap
  778. ; d0: NumColumns
  779. ; d1: NumLines;
  780. ; d2: ScreenPos;
  781.  
  782. BM    EQUR a0;
  783. s1    EQUR a1;
  784. s2    EQUR a2;
  785. z1    EQUR a3;
  786. z2    EQUR a4;
  787.  
  788. NumCol EQUR d0;
  789. NumLin EQUR d1;
  790. ScrPos EQUR d2;
  791.  
  792. CopyLine1:
  793.   jsr     InitCopyLine;
  794. \loop;
  795.   move.l  (s1)+,(z1)+;
  796.   move.l  (s2)+,(z2)+;
  797.   dbra    NumCol,\loop;
  798.   rts;
  799.  
  800. ;---------------------------------------------------------------------------*)
  801. ; CopyLine2:
  802.  
  803. CopyLine2:
  804.   jsr     InitCopyLine;
  805. \loop;
  806.   move.l  (z1)+,(s1)+;
  807.   move.l  (z2)+,(s2)+;
  808.   dbra    NumCol,\loop;
  809.   rts;
  810.  
  811.  
  812. InitCopyLine:
  813.   move.l  BitMap,BM
  814.   move.l  bm_Planes(BM),z1;
  815.   move.l  bm_Planes+4(BM),z2;
  816.   asl     #3,NumCol;
  817.   muls    NumCol,ScrPos;
  818.   lea     0(z1,ScrPos),z1;
  819.   lea     0(z2,ScrPos),z2;
  820.   muls    NumCol,NumLin;
  821.   lea     0(z1,NumLin),s1;
  822.   lea     0(z2,NumLin),s2;
  823.   asr     #2,NumCol;
  824.   subq    #1,NumCol;
  825.   rts;
  826.  
  827. ;---------------------------------------------------------------------------*)
  828.  
  829.   END
  830.  
  831.