home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 451.lha / MuchMore_v2.7 / txt / MMQText.asm < prev    next >
Assembly Source File  |  1990-12-08  |  19KB  |  827 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. ;  :History.    V 2.6 26-Jun-90 [fbs] removed globals
  9. ;  :Copyright.  Public Domain
  10. ;  :Language.   68000 Assembler
  11. ;  :Translator. a68k
  12. ;---------------------------------------------------------------------------*
  13.  
  14.   XDEF QText         ; QText Procedure
  15.   XDEF GetFontData   ; GetFontData Procedure
  16.   XDEF CopyLine1     ; CopyLine1 Procedure
  17.   XDEF CopyLine2     ; CopyLine2 Procedure
  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. ;* d1 - vertical position (pixel position)
  29. ;* a0 - Pointer to String (0C-Termination)
  30. ;* a1 - Pointer to BitMap to store String
  31. ;* a2 - Pointer to TextFont
  32. ;
  33. ;Special codes:
  34. ; 1..16: background color (x-1) & 3, foreground ((x-1) / 4) & 3
  35. ; 17: switch to plain text
  36. ; 18: switch to italics
  37. ; 19: switch to bold
  38. ; 20: switch to italics and bold
  39. ; 21: underline on
  40. ; 22: underline off
  41.  
  42. ; Register use:
  43.  
  44. ; D0: character
  45. ; D1: vertical position
  46. ; D2: bytesperrow
  47. ; D3: to examine character
  48. ; D4: Offset of fontstyle
  49. ; D5: offset (row * bytesperrow)
  50.  
  51. ; A0: points to string
  52. ; A1: plane # 1
  53. ; A2: fontdata
  54. ; A3: character address in font.chardata
  55. ; A4: plane # 2;
  56. ; A5: procedure to type in correct color
  57. ; A6: negative character
  58.  
  59. p1  EQUR A1;
  60. p2  EQUR A4;
  61. chr EQUR A3;
  62. nch EQUR A6;
  63. col EQUR A5;
  64.  
  65. char EQUR d0
  66. vert EQUR d1
  67. bpr  EQUR d2
  68. ch2  EQUR d3
  69. style EQUR d4
  70. dadr EQUR d5
  71. ulin EQUR d6  ; underline on ?
  72. nuln EQUR d7  ; underline off?
  73.  
  74.  
  75. QText:
  76.   move.l      A5,-(A7);
  77.   lea         Col04,col;
  78.   clr         style;
  79.   sf          ulin;
  80.   st          nuln;
  81.   move        bm_BytesPerRow(a1),bpr;
  82.   ext.l       bpr;
  83.   mulu        bpr,vert;
  84.   move.l      bm_Planes+4(a1),p2;  position in plane #2
  85.   move.l      bm_Planes(a1),p1;    position in plane #1
  86.   add.l       vert,p1;               add offset within plane
  87.   add.l       vert,p2;
  88.   move.l      p1,chr;
  89.   move.l      p2,nch;
  90.   move        bpr,vert;
  91.   subq        #1,vert;
  92. clrline:
  93.   clr.l       (chr)+           ; clear line
  94.   clr.l       (chr)+
  95.   clr.l       (nch)+
  96.   clr.l       (nch)+
  97.   dbra        vert,clrline;
  98.  
  99.   move        bpr,vert;
  100.   asl         #3,vert;
  101.   sub         bpr,vert;   vert = 7*bpr;
  102.  
  103. loop:
  104.   move.b      (a0)+,char;           ; get character
  105.   beq         return;
  106.  
  107.   cmp.b       #$20,char;
  108.   bcc         \typechr;
  109.   cmp.b       #17,char;
  110.   blt         \newcol;
  111.   cmp.b       #22,char;
  112.   cmp.b       #21,char;
  113.   blt         \newstyle;
  114.   seq         ulin;
  115.   sne         nuln;
  116.   bra.s       loop;
  117. \newstyle;
  118.   bhi.s       loop;
  119.   sub.b       #17,char;
  120.   ext.w       char;
  121.   move        char,style;
  122.   asl         #1,style;
  123.   add         char,style;
  124.   asl         #8,style;
  125.   add         style,style;
  126.   bra         loop;
  127.  
  128. \newcol:
  129.   subq.b      #1,char;
  130.   bne         \l0;
  131.   lea         Col00,col;
  132.   bra         loop;
  133. \l0:
  134.   subq.b      #1,char;
  135.   bne         \l1;
  136.   lea         Col01,col;
  137.   bra         loop;
  138. \l1:
  139.   subq.b      #1,char;
  140.   bne         \l2;
  141.   lea         Col02,col;
  142.   bra         loop;
  143. \l2:
  144.   subq.b      #1,char;
  145.   bne         \l3;
  146.   lea         Col03,col;
  147.   bra         loop;
  148. \l3:
  149.   subq.b      #1,char;
  150.   bne         \l4;
  151.   lea         Col04,col;
  152.   bra         loop;
  153. \l4:
  154.   subq.b      #1,char;
  155.   bne         \l5;
  156.   lea         Col05,col;
  157.   bra         loop;
  158. \l5:
  159.   subq.b      #1,char;
  160.   bne         \l6;
  161.   lea         Col06,col;
  162.   bra         loop;
  163. \l6:
  164.   subq.b      #1,char;
  165.   bne         \l7;
  166.   lea         Col07,col;
  167.   bra         loop;
  168. \l7:
  169.   subq.b      #1,char;
  170.   bne         \l8;
  171.   lea         Col08,col;
  172.   bra         loop;
  173. \l8:
  174.   subq.b      #1,char;
  175.   bne         \l9;
  176.   lea         Col09,col;
  177.   bra         loop;
  178. \l9:
  179.   subq.b      #1,char;
  180.   bne         \la;
  181.   lea         Col10,col;
  182.   bra         loop;
  183. \la:
  184.   subq.b      #1,char;
  185.   bne         \lb;
  186.   lea         Col11,col;
  187.   bra         loop;
  188. \lb:
  189.   subq.b      #1,char;
  190.   bne         \lc;
  191.   lea         Col12,col;
  192.   bra         loop;
  193. \lc:
  194.   subq.b      #1,char;
  195.   bne         \ld;
  196.   lea         Col13,col;
  197.   bra         loop;
  198. \ld:
  199.   subq.b      #1,char;
  200.   bne         \le;
  201.   lea         Col14,col;
  202.   bra         loop;
  203. \le:
  204.   lea         Col15,col;
  205.   bra         loop;
  206.  
  207. \typechr:
  208.   sub.b       #$20,char;
  209.  
  210.   and         #$ff,char;
  211.   asl         #3,char;
  212.   add         style,char;
  213.   lea         0(a2,char.w),chr;
  214.   lea         $1800(chr),nch
  215.  
  216.   jmp         (col);
  217.  
  218. Col00:
  219.   bra         next;
  220.  
  221. Col01:
  222.   move.b      (nch)+,(p1);
  223.   adda.w      bpr,p1;
  224.   move.b      (nch)+,(p1);
  225.   adda.w      bpr,p1;
  226.   move.b      (nch)+,(p1);
  227.   adda.w      bpr,p1;
  228.   move.b      (nch)+,(p1);
  229.   adda.w      bpr,p1;
  230.   move.b      (nch)+,(p1);
  231.   adda.w      bpr,p1;
  232.   move.b      (nch)+,(p1);
  233.   adda.w      bpr,p1;
  234.   move.b      (nch)+,(p1);
  235.   adda.w      bpr,p1;
  236.   move.b      (nch)+,(p1);
  237.   and.b       nuln,(p1);
  238.   suba.w      vert,p1;
  239.   bra         next;
  240.  
  241. Col02:
  242.   move.b      (nch)+,(p2);
  243.   adda.w      bpr,p2;
  244.   move.b      (nch)+,(p2);
  245.   adda.w      bpr,p2;
  246.   move.b      (nch)+,(p2);
  247.   adda.w      bpr,p2;
  248.   move.b      (nch)+,(p2);
  249.   adda.w      bpr,p2;
  250.   move.b      (nch)+,(p2);
  251.   adda.w      bpr,p2;
  252.   move.b      (nch)+,(p2);
  253.   adda.w      bpr,p2;
  254.   move.b      (nch)+,(p2);
  255.   adda.w      bpr,p2;
  256.   move.b      (nch)+,(p2);
  257.   and.b       nuln,(p2);
  258.   suba.w      vert,p2;
  259.   bra         next;
  260.  
  261. Col03:
  262.   move.b      (nch),(p1);
  263.   move.b      (nch)+,(p2);
  264.   move        bpr,dadr;
  265.   move.b      (nch),0(p1,dadr);
  266.   move.b      (nch)+,0(p2,dadr);
  267.   add         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.   and.b       nuln,0(p1,dadr);
  286.   and.b       nuln,0(p2,dadr);
  287.   bra         next;
  288.  
  289. Col04:
  290.   move.b      (chr)+,(p1);
  291.   adda.w      bpr,p1;
  292.   move.b      (chr)+,(p1);
  293.   adda.w      bpr,p1;
  294.   move.b      (chr)+,(p1);
  295.   adda.w      bpr,p1;
  296.   move.b      (chr)+,(p1);
  297.   adda.w      bpr,p1;
  298.   move.b      (chr)+,(p1);
  299.   adda.w      bpr,p1;
  300.   move.b      (chr)+,(p1);
  301.   adda.w      bpr,p1;
  302.   move.b      (chr)+,(p1);
  303.   adda.w      bpr,p1;
  304.   move.b      (chr)+,(p1);
  305.   or.b        ulin,(p1);
  306.   suba.w      vert,p1;
  307.   bra         next;
  308.  
  309. Col05:
  310.   st          (p1);
  311.   move        bpr,dadr;
  312.   st          0(p1,dadr);
  313.   add         bpr,dadr;
  314.   st          0(p1,dadr);
  315.   add         bpr,dadr;
  316.   st          0(p1,dadr);
  317.   add         bpr,dadr;
  318.   st          0(p1,dadr);
  319.   add         bpr,dadr;
  320.   st          0(p1,dadr);
  321.   add         bpr,dadr;
  322.   st          0(p1,dadr);
  323.   add         bpr,dadr;
  324.   st          0(p1,dadr);
  325.   bra         next;
  326.  
  327. Col06:
  328.   move.b      (chr)+,(p1);
  329.   move.b      (nch)+,(p2);
  330.   move        bpr,dadr;
  331.   move.b      (chr)+,0(p1,dadr);
  332.   move.b      (nch)+,0(p2,dadr);
  333.   add         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.   or.b        ulin,0(p1,dadr);
  352.   and.b       nuln,0(p2,dadr);
  353.   bra         next;
  354.  
  355. Col07:
  356.   st          (p1);
  357.   move.b      (nch)+,(p2);
  358.   move        bpr,dadr;
  359.   st          0(p1,dadr);
  360.   move.b      (nch)+,0(p2,dadr);
  361.   add         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.   and.b       nuln,0(p2,dadr);
  380.   bra         next;
  381.  
  382. Col08:
  383.   move.b      (chr)+,(p2);
  384.   adda.w      bpr,p2;
  385.   move.b      (chr)+,(p2);
  386.   adda.w      bpr,p2;
  387.   move.b      (chr)+,(p2);
  388.   adda.w      bpr,p2;
  389.   move.b      (chr)+,(p2);
  390.   adda.w      bpr,p2;
  391.   move.b      (chr)+,(p2);
  392.   adda.w      bpr,p2;
  393.   move.b      (chr)+,(p2);
  394.   adda.w      bpr,p2;
  395.   move.b      (chr)+,(p2);
  396.   adda.w      bpr,p2;
  397.   move.b      (chr)+,(p2);
  398.   or.b        ulin,(p2);
  399.   suba.w      vert,p2;
  400.   bra         next;
  401.  
  402. Col09:
  403.   move.b      (nch)+,(p1);
  404.   move.b      (chr)+,(p2);
  405.   move        bpr,dadr;
  406.   move.b      (nch)+,0(p1,dadr);
  407.   move.b      (chr)+,0(p2,dadr);
  408.   add         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.   and.b       nuln,0(p1,dadr);
  427.   or.b        ulin,0(p2,dadr);
  428.   bra         next;
  429.  
  430. Col10:
  431.   st          (p2);
  432.   adda.w      bpr,p2;
  433.   st          (p2);
  434.   adda.w      bpr,p2;
  435.   st          (p2);
  436.   adda.w      bpr,p2;
  437.   st          (p2);
  438.   adda.w      bpr,p2;
  439.   st          (p2);
  440.   adda.w      bpr,p2;
  441.   st          (p2);
  442.   adda.w      bpr,p2;
  443.   st          (p2);
  444.   adda.w      bpr,p2;
  445.   st          (p2);
  446.   suba.w      vert,p2;
  447.   bra         next;
  448.  
  449. Col11:
  450.   move.b      (nch)+,(p1);
  451.   st          (p2);
  452.   move        bpr,dadr;
  453.   move.b      (nch)+,0(p1,dadr);
  454.   st          0(p2,dadr);
  455.   add         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.   and.b       nuln,0(p1,dadr);
  474.   bra         next;
  475.  
  476. Col12:
  477.   move.b      (chr),(p1);
  478.   move.b      (chr)+,(p2);
  479.   move        bpr,dadr;
  480.   move.b      (chr),0(p1,dadr);
  481.   move.b      (chr)+,0(p2,dadr);
  482.   add         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.   or.b        ulin,0(p1,dadr);
  501.   or.b        ulin,0(p2,dadr);
  502.   bra         next;
  503.  
  504. Col13:
  505.   st          (p1);
  506.   move.b      (chr)+,(p2);
  507.   move        bpr,dadr;
  508.   st          0(p1,dadr);
  509.   move.b      (chr)+,0(p2,dadr);
  510.   add         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.   or.b        ulin,0(p2,dadr);
  529.   bra         next;
  530.  
  531. Col14:
  532.   move.b      (chr)+,(p1);
  533.   st          (p2);
  534.   move        bpr,dadr;
  535.   move.b      (chr)+,0(p1,dadr);
  536.   st          0(p2,dadr);
  537.   add         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.   or.b        ulin,0(p1,dadr);
  556.   bra         next;
  557.  
  558. Col15:
  559.   st          (p1);
  560.   st          (p2);
  561.   move        bpr,dadr;
  562.   st          0(p1,dadr);
  563.   st          0(p2,dadr);
  564.   add         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.  
  583. next:
  584.   addq        #1,p1;
  585.   addq        #1,p2;
  586.   bra         loop;
  587.  
  588. return:
  589.   move.l      (A7)+,A5;
  590.   rts;
  591.  
  592. ;---------------------------------------------------------------------------*)
  593. ; GetFontData
  594.  
  595. ; A0: Pointer to font's chardata
  596. ; A1: Pointer to fontdata-Array
  597. ; D7: Line Modulo
  598.  
  599. ch EQUR A0;
  600. fd EQUR A1;
  601. ad EQUR A2;
  602. j  EQUR D0;
  603. x  EQUR D1;
  604. c  EQUR D2;
  605. d  EQUR D3;
  606. e  EQUR D4;
  607. x1 EQUR D5;
  608. x2 EQUR D6;
  609. x3 EQUR D7;
  610.  
  611. GetFontData:
  612.  
  613.         move.w  D7,-(A7);
  614.         move    #0,j;
  615. jloop:  move    j,x;
  616.         asl     #3,x;
  617.         move    x,x1;
  618.         move    x,x2;
  619.         move    x,x3;
  620.         add     #$600,x1;
  621.         add     #$c00,x2;
  622.         add     #$1200,x3;
  623.         lea     0(ch,j),ad;
  624. ; Byte 0:
  625.         move.b  (ad),c;
  626.         move.b  c,0(fd,x);
  627.         move.b  c,d;
  628.         lsr.b   #2,d;
  629.         bcc     \1;
  630.         bset    #0,d;
  631. \1:     move.b  d,0(fd,x1);
  632.         move.b  c,e;
  633.         lsr.b   #1,e;
  634.         or.b    c,e;
  635.         move.b  e,0(fd,x2);
  636.         move.b  d,e;
  637.         lsr.b   #1,e;
  638.         or.b    d,e;
  639.         move.b  e,0(fd,x3);
  640. ; Byte 1:
  641.         adda.w  (A7),ad
  642.         move.b  (ad),c;
  643.         move.b  c,1(fd,x);
  644.         move.b  c,d;
  645.         lsr.b   #2,d;
  646.         bcc     \2;
  647.         bset    #0,d;
  648. \2:     move.b  d,1(fd,x1);
  649.         move.b  c,e;
  650.         lsr.b   #1,e;
  651.         or.b    c,e;
  652.         move.b  e,1(fd,x2);
  653.         move.b  d,e;
  654.         lsr.b   #1,e;
  655.         or.b    d,e;
  656.         move.b  e,1(fd,x3);
  657. ; Byte 2:
  658.         adda.w  (A7),ad
  659.         move.b  (ad),c;
  660.         move.b  c,2(fd,x);
  661.         move.b  c,d;
  662.         lsr.b   #1,d;
  663.         bcc     \3;
  664.         bset    #0,d;
  665. \3:     move.b  d,2(fd,x1);
  666.         move.b  c,e;
  667.         lsr.b   #1,e;
  668.         or.b    c,e;
  669.         move.b  e,2(fd,x2);
  670.         move.b  d,e;
  671.         lsr.b   #1,e;
  672.         or.b    d,e;
  673.         move.b  e,2(fd,x3);
  674. ; Byte 3:
  675.         adda.w  (A7),ad
  676.         move.b  (ad),c;
  677.         move.b  c,3(fd,x);
  678.         move.b  c,d;
  679.         lsr.b   #1,d;
  680.         bcc     \4;
  681.         bset    #0,d;
  682. \4:     move.b  d,3(fd,x1);
  683.         move.b  c,e;
  684.         lsr.b   #1,e;
  685.         or.b    c,e;
  686.         move.b  e,3(fd,x2);
  687.         move.b  d,e;
  688.         lsr.b   #1,e;
  689.         or.b    d,e;
  690.         move.b  e,3(fd,x3);
  691. ; Byte 4:
  692.         adda.w  (A7),ad
  693.         move.b  (ad),c;
  694.         move.b  c,4(fd,x);
  695.         move.b  c,4(fd,x1);
  696.         move.b  c,e;
  697.         lsr.b   #1,e;
  698.         or.b    c,e;
  699.         move.b  e,4(fd,x2);
  700.         move.b  e,4(fd,x3);
  701. ; Byte 5:
  702.         adda.w  (A7),ad
  703.         move.b  (ad),c;
  704.         move.b  c,5(fd,x);
  705.         move.b  c,5(fd,x1);
  706.         move.b  c,e;
  707.         lsr.b   #1,e;
  708.         or.b    c,e;
  709.         move.b  e,5(fd,x2);
  710.         move.b  e,5(fd,x3);
  711. ; Byte 6:
  712.         adda.w  (A7),ad
  713.         move.b  (ad),c;
  714.         move.b  c,6(fd,x);
  715.         move.b  c,d;
  716.         lsl.b   #1,d;
  717.         bcc     \7;
  718.         bset    #7,d;
  719. \7:     move.b  d,6(fd,x1);
  720.         move.b  c,e;
  721.         lsr.b   #1,e;
  722.         or.b    c,e;
  723.         move.b  e,6(fd,x2);
  724.         move.b  d,e;
  725.         lsr.b   #1,e;
  726.         or.b    d,e;
  727.         move.b  e,6(fd,x3);
  728. ; Byte 7:
  729.         adda.w  (A7),ad
  730.         move.b  (ad),c;
  731.         move.b  c,7(fd,x);
  732.         move.b  c,d;
  733.         lsl.b   #1,d;
  734.         bcc     \8;
  735.         bset    #7,d;
  736. \8:     move.b  d,7(fd,x1);
  737.         move.b  c,e;
  738.         lsr.b   #1,e;
  739.         or.b    c,e;
  740.         move.b  e,7(fd,x2);
  741.         move.b  d,e;
  742.         lsr.b   #1,e;
  743.         or.b    d,e;
  744.         move.b  e,7(fd,x3);
  745.  
  746.         addq    #1,j;
  747.         move    j,x;
  748.         cmp     #$30,x;
  749.         beq.s   newlin;
  750.         cmp     #$60,x;
  751.         beq.s   newlin;
  752.         cmp     #$90,x;
  753.         bne.s   nextl;
  754. newlin: move    (A7),x;
  755.         asl     #3,x;
  756.         sub     #$30,x;
  757.         adda.w  x,ch;
  758. nextl:  cmp     #$c0,j;
  759.         blt     jloop;
  760.  
  761.         move.l  fd,ad;
  762.         adda.w  #$1800,ad;
  763.         move    #$5ff,j;
  764. invers: move.l  (fd)+,c;
  765.         not.l   c;
  766.         move.l  c,(ad)+;
  767.         dbra    j,invers;
  768.         lea     2(A7),A7;
  769.         rts;
  770.  
  771. ;---------------------------------------------------------------------------*)
  772. ; CopyLine1
  773.  
  774. ; a0: Bitmap
  775. ; d0: NumColumns
  776. ; d1: NumLines;
  777. ; d2: ScreenPos;
  778.  
  779. BM    EQUR a0;
  780. s1    EQUR a1;
  781. s2    EQUR a2;
  782. z1    EQUR a3;
  783. z2    EQUR a4;
  784.  
  785. NumCol EQUR d0;
  786. NumLin EQUR d1;
  787. ScrPos EQUR d2;
  788.  
  789. CopyLine1:
  790.   jsr     InitCopyLine(PC);
  791. \loop;
  792.   move.l  (s1)+,(z1)+;
  793.   move.l  (s2)+,(z2)+;
  794.   dbra    NumCol,\loop;
  795.   rts;
  796.  
  797. ;---------------------------------------------------------------------------*)
  798. ; CopyLine2:
  799.  
  800. CopyLine2:
  801.   jsr     InitCopyLine(PC);
  802. \loop;
  803.   move.l  (z1)+,(s1)+;
  804.   move.l  (z2)+,(s2)+;
  805.   dbra    NumCol,\loop;
  806.   rts;
  807.  
  808.  
  809. InitCopyLine:
  810.   move.l  bm_Planes(BM),z1;
  811.   move.l  bm_Planes+4(BM),z2;
  812.   asl     #3,NumCol;
  813.   muls    NumCol,ScrPos;
  814.   lea     0(z1,ScrPos.l),z1;
  815.   lea     0(z2,ScrPos.l),z2;
  816.   muls    NumCol,NumLin;
  817.   lea     0(z1,NumLin.l),s1;
  818.   lea     0(z2,NumLin.l),s2;
  819.   asr     #2,NumCol;
  820.   subq    #1,NumCol;
  821.   rts;
  822.  
  823. ;---------------------------------------------------------------------------*)
  824.  
  825.   END
  826.  
  827.