home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 296.lha / MuchMore_v1.8 / QText.asm < prev   
Assembly Source File  |  1989-10-08  |  13KB  |  587 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    QText.ASM
  3. ;  :Contents.   Procedure for fast text-output
  4. ;  :Author.     Fridtjof Siebert
  5. ;  :Address.    Nobileweg 67, D-7-Stgt-40
  6. ;  :Phone.      (0)711/822509
  7. ;  :Shortcut.   [fbs]
  8. ;  :Version.    2.0
  9. ;  :Date.       02-Jul-89
  10. ;  :Copyright.  Publik Domain
  11. ;  :Language.   68000 Assembler
  12. ;---------------------------------------------------------------------------*
  13.  
  14. ; BitMap:
  15. bm_BytesPerRow = 0
  16. bm_Rows        = 2
  17. bm_Flags       = 4
  18. bm_Depth       = 5
  19. bm_Pad         = 6
  20. bm_Planes      = 8
  21. bm_SIZEOF      = 40
  22.  
  23. ;* d1 - vertical position    (pixel position)
  24. ;* a0 - Pointer to String (0C-Termination)
  25. ;* a1 - Pointer to BitMap to store String
  26. ;* a2 - Pointer to TextFont
  27. ;
  28. ;Special codes:
  29. ; 1..16: background color (x-1) & 3, foreground ((x-1) / 4) & 3
  30. ; 17: switch to plain text
  31. ; 18: switch to italics
  32. ; 19: switch to bold
  33. ; 20: switch to italics and bold
  34. ; 21: underline on
  35. ; 22: underline off
  36.  
  37. ; Register use:
  38.  
  39. ; D0: character
  40. ; D1: vertical position
  41. ; D2: bytesperrow
  42. ; D3: to examine character
  43. ; D4: Offset of fontstyle
  44. ; D5: offset (row * bytesperrow)
  45.  
  46. ; A0: points to string
  47. ; A1: points to bitmap / plane # 1
  48. ; A2: fontdata
  49. ; A3: character address in font.chardata
  50. ; A4: plane # 2;
  51. ; A5: procedure to type in correct color
  52. ; A6: negative character
  53.  
  54. p1  EQUR A1;
  55. p2  EQUR A4;
  56. chr EQUR A3;
  57. nch EQUR A6;
  58. col EQUR A5;
  59.  
  60. char EQUR d0
  61. vert EQUR d1
  62. bpr  EQUR d2
  63. ch2  EQUR d3
  64. style EQUR d4
  65. dadr EQUR d5
  66. ulin EQUR d6  ; underline on ?
  67. nuln EQUR d7  ; underline off?
  68.  
  69.  
  70. QText:
  71.   move.l      A5,-(A7);
  72.   lea         Col04,col;
  73.   clr         style;
  74.   sf          ulin;
  75.   st          nuln;
  76.   move        bm_bytesPerRow(a1),bpr;
  77.   ext.l       bpr;
  78.   mulu        bpr,vert;
  79.   move.l      bm_Planes+4(a1),p2;  position in plane #2
  80.   move.l      bm_Planes(a1),p1;    position in plane #1
  81.   add.l       vert,p1;               add offset within plane
  82.   add.l       vert,p2;
  83.   move.l      p1,chr;
  84.   move.l      p2,nch;
  85.   move        bpr,vert;
  86.   subq        #1,vert;
  87. clrline:
  88.   clr.l       (chr)+           ; clear line
  89.   clr.l       (chr)+
  90.   clr.l       (nch)+
  91.   clr.l       (nch)+
  92.   dbra        vert,clrline;
  93.  
  94.   move        bpr,vert;
  95.   asl         #3,vert;
  96.   sub         bpr,vert;   vert = 7*bpr;
  97.  
  98. loop:
  99.   move.b      (a0)+,char;           ; get character
  100.   beq         return;
  101.  
  102.   cmp.b       #$20,char;
  103.   bhs         \typechr;
  104.   cmp.b       #17,char;
  105.   blt         \newcol;
  106.   cmp.b       #22,char;
  107.   cmp.b       #21,char;
  108.   blt         \newstyle;
  109.   seq         ulin;
  110.   sne         nuln;
  111.   bra.s       loop;
  112. \newstyle;
  113.   bhi.s       loop;
  114.   sub.b       #17,char;
  115.   ext.w       char;
  116.   move        char,style;
  117.   asl         #1,style;
  118.   add         char,style;
  119.   asl         #8,style;
  120.   add         style,style;
  121.   bra         loop;
  122.  
  123. \newcol:
  124.   subq.b      #1,char;
  125.   bne         \l0;
  126.   lea         Col00,col;
  127.   bra         loop;
  128. \l0:
  129.   subq.b      #1,char;
  130.   bne         \l1;
  131.   lea         Col01,col;
  132.   bra         loop;
  133. \l1:
  134.   subq.b      #1,char;
  135.   bne         \l2;
  136.   lea         Col02,col;
  137.   bra         loop;
  138. \l2:
  139.   subq.b      #1,char;
  140.   bne         \l3;
  141.   lea         Col03,col;
  142.   bra         loop;
  143. \l3:
  144.   subq.b      #1,char;
  145.   bne         \l4;
  146.   lea         Col04,col;
  147.   bra         loop;
  148. \l4:
  149.   subq.b      #1,char;
  150.   bne         \l5;
  151.   lea         Col05,col;
  152.   bra         loop;
  153. \l5:
  154.   subq.b      #1,char;
  155.   bne         \l6;
  156.   lea         Col06,col;
  157.   bra         loop;
  158. \l6:
  159.   subq.b      #1,char;
  160.   bne         \l7;
  161.   lea         Col07,col;
  162.   bra         loop;
  163. \l7:
  164.   subq.b      #1,char;
  165.   bne         \l8;
  166.   lea         Col08,col;
  167.   bra         loop;
  168. \l8:
  169.   subq.b      #1,char;
  170.   bne         \l9;
  171.   lea         Col09,col;
  172.   bra         loop;
  173. \l9:
  174.   subq.b      #1,char;
  175.   bne         \la;
  176.   lea         Col10,col;
  177.   bra         loop;
  178. \la:
  179.   subq.b      #1,char;
  180.   bne         \lb;
  181.   lea         Col11,col;
  182.   bra         loop;
  183. \lb:
  184.   subq.b      #1,char;
  185.   bne         \lc;
  186.   lea         Col12,col;
  187.   bra         loop;
  188. \lc:
  189.   subq.b      #1,char;
  190.   bne         \ld;
  191.   lea         Col13,col;
  192.   bra         loop;
  193. \ld:
  194.   subq.b      #1,char;
  195.   bne         \le;
  196.   lea         Col14,col;
  197.   bra         loop;
  198. \le:
  199.   lea         Col15,col;
  200.   bra         loop;
  201.  
  202. \typechr:
  203.   sub.b       #$20,char;
  204.  
  205.   and         #$ff,char;
  206.   asl         #3,char;
  207.   add         style,char;
  208.   lea         0(a2,char.w),chr;
  209.   lea         $1800(chr),nch
  210.  
  211.   jmp         (col);
  212.  
  213. Col00:
  214.   bra         next;
  215.  
  216. Col01:
  217.   move.b      (nch)+,(p1);
  218.   adda.w      bpr,p1;
  219.   move.b      (nch)+,(p1);
  220.   adda.w      bpr,p1;
  221.   move.b      (nch)+,(p1);
  222.   adda.w      bpr,p1;
  223.   move.b      (nch)+,(p1);
  224.   adda.w      bpr,p1;
  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.   and.b       nuln,(p1);
  233.   suba.w      vert,p1;
  234.   bra         next;
  235.  
  236. Col02:
  237.   move.b      (nch)+,(p2);
  238.   adda.w      bpr,p2;
  239.   move.b      (nch)+,(p2);
  240.   adda.w      bpr,p2;
  241.   move.b      (nch)+,(p2);
  242.   adda.w      bpr,p2;
  243.   move.b      (nch)+,(p2);
  244.   adda.w      bpr,p2;
  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.   and.b       nuln,(p2);
  253.   suba.w      vert,p2;
  254.   bra         next;
  255.  
  256. Col03:
  257.   move.b      (nch),(p1);
  258.   move.b      (nch)+,(p2);
  259.   move        bpr,dadr;
  260.   move.b      (nch),(p1,dadr);
  261.   move.b      (nch)+,(p2,dadr);
  262.   add         bpr,dadr;
  263.   move.b      (nch),(p1,dadr);
  264.   move.b      (nch)+,(p2,dadr);
  265.   add         bpr,dadr;
  266.   move.b      (nch),(p1,dadr);
  267.   move.b      (nch)+,(p2,dadr);
  268.   add         bpr,dadr;
  269.   move.b      (nch),(p1,dadr);
  270.   move.b      (nch)+,(p2,dadr);
  271.   add         bpr,dadr;
  272.   move.b      (nch),(p1,dadr);
  273.   move.b      (nch)+,(p2,dadr);
  274.   add         bpr,dadr;
  275.   move.b      (nch),(p1,dadr);
  276.   move.b      (nch)+,(p2,dadr);
  277.   add         bpr,dadr;
  278.   move.b      (nch),(p1,dadr);
  279.   move.b      (nch)+,(p2,dadr);
  280.   and.b       nuln,(p1,dadr);
  281.   and.b       nuln,(p2,dadr);
  282.   bra         next;
  283.  
  284. Col04:
  285.   move.b      (chr)+,(p1);
  286.   adda.w      bpr,p1;
  287.   move.b      (chr)+,(p1);
  288.   adda.w      bpr,p1;
  289.   move.b      (chr)+,(p1);
  290.   adda.w      bpr,p1;
  291.   move.b      (chr)+,(p1);
  292.   adda.w      bpr,p1;
  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.   or.b        ulin,(p1);
  301.   suba.w      vert,p1;
  302.   bra         next;
  303.  
  304. Col05:
  305.   st          (p1);
  306.   move        bpr,dadr;
  307.   st          (p1,dadr);
  308.   add         bpr,dadr;
  309.   st          (p1,dadr);
  310.   add         bpr,dadr;
  311.   st          (p1,dadr);
  312.   add         bpr,dadr;
  313.   st          (p1,dadr);
  314.   add         bpr,dadr;
  315.   st          (p1,dadr);
  316.   add         bpr,dadr;
  317.   st          (p1,dadr);
  318.   add         bpr,dadr;
  319.   st          (p1,dadr);
  320.   bra         next;
  321.  
  322. Col06:
  323.   move.b      (chr)+,(p1);
  324.   move.b      (nch)+,(p2);
  325.   move        bpr,dadr;
  326.   move.b      (chr)+,(p1,dadr);
  327.   move.b      (nch)+,(p2,dadr);
  328.   add         bpr,dadr;
  329.   move.b      (chr)+,(p1,dadr);
  330.   move.b      (nch)+,(p2,dadr);
  331.   add         bpr,dadr;
  332.   move.b      (chr)+,(p1,dadr);
  333.   move.b      (nch)+,(p2,dadr);
  334.   add         bpr,dadr;
  335.   move.b      (chr)+,(p1,dadr);
  336.   move.b      (nch)+,(p2,dadr);
  337.   add         bpr,dadr;
  338.   move.b      (chr)+,(p1,dadr);
  339.   move.b      (nch)+,(p2,dadr);
  340.   add         bpr,dadr;
  341.   move.b      (chr)+,(p1,dadr);
  342.   move.b      (nch)+,(p2,dadr);
  343.   add         bpr,dadr;
  344.   move.b      (chr)+,(p1,dadr);
  345.   move.b      (nch)+,(p2,dadr);
  346.   or.b        ulin,(p1,dadr);
  347.   and.b       nuln,(p2,dadr);
  348.   bra         next;
  349.  
  350. Col07:
  351.   st          (p1);
  352.   move.b      (nch)+,(p2);
  353.   move        bpr,dadr;
  354.   st          (p1,dadr);
  355.   move.b      (nch)+,(p2,dadr);
  356.   add         bpr,dadr;
  357.   st          (p1,dadr);
  358.   move.b      (nch)+,(p2,dadr);
  359.   add         bpr,dadr;
  360.   st          (p1,dadr);
  361.   move.b      (nch)+,(p2,dadr);
  362.   add         bpr,dadr;
  363.   st          (p1,dadr);
  364.   move.b      (nch)+,(p2,dadr);
  365.   add         bpr,dadr;
  366.   st          (p1,dadr);
  367.   move.b      (nch)+,(p2,dadr);
  368.   add         bpr,dadr;
  369.   st          (p1,dadr);
  370.   move.b      (nch)+,(p2,dadr);
  371.   add         bpr,dadr;
  372.   st          (p1,dadr);
  373.   move.b      (nch)+,(p2,dadr);
  374.   and.b       nuln,(p2,dadr);
  375.   bra         next;
  376.  
  377. Col08:
  378.   move.b      (chr)+,(p2);
  379.   adda.w      bpr,p2;
  380.   move.b      (chr)+,(p2);
  381.   adda.w      bpr,p2;
  382.   move.b      (chr)+,(p2);
  383.   adda.w      bpr,p2;
  384.   move.b      (chr)+,(p2);
  385.   adda.w      bpr,p2;
  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.   or.b        ulin,(p2);
  394.   suba.w      vert,p2;
  395.   bra         next;
  396.  
  397. Col09:
  398.   move.b      (nch)+,(p1);
  399.   move.b      (chr)+,(p2);
  400.   move        bpr,dadr;
  401.   move.b      (nch)+,(p1,dadr);
  402.   move.b      (chr)+,(p2,dadr);
  403.   add         bpr,dadr;
  404.   move.b      (nch)+,(p1,dadr);
  405.   move.b      (chr)+,(p2,dadr);
  406.   add         bpr,dadr;
  407.   move.b      (nch)+,(p1,dadr);
  408.   move.b      (chr)+,(p2,dadr);
  409.   add         bpr,dadr;
  410.   move.b      (nch)+,(p1,dadr);
  411.   move.b      (chr)+,(p2,dadr);
  412.   add         bpr,dadr;
  413.   move.b      (nch)+,(p1,dadr);
  414.   move.b      (chr)+,(p2,dadr);
  415.   add         bpr,dadr;
  416.   move.b      (nch)+,(p1,dadr);
  417.   move.b      (chr)+,(p2,dadr);
  418.   add         bpr,dadr;
  419.   move.b      (nch)+,(p1,dadr);
  420.   move.b      (chr)+,(p2,dadr);
  421.   and.b       nuln,(p1,dadr);
  422.   or.b        ulin,(p2,dadr);
  423.   bra         next;
  424.  
  425. Col10:
  426.   st          (p2);
  427.   adda.w      bpr,p2;
  428.   st          (p2);
  429.   adda.w      bpr,p2;
  430.   st          (p2);
  431.   adda.w      bpr,p2;
  432.   st          (p2);
  433.   adda.w      bpr,p2;
  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.   suba.w      vert,p2;
  442.   bra         next;
  443.  
  444. Col11:
  445.   move.b      (nch)+,(p1);
  446.   st          (p2);
  447.   move        bpr,dadr;
  448.   move.b      (nch)+,(p1,dadr);
  449.   st          (p2,dadr);
  450.   add         bpr,dadr;
  451.   move.b      (nch)+,(p1,dadr);
  452.   st          (p2,dadr);
  453.   add         bpr,dadr;
  454.   move.b      (nch)+,(p1,dadr);
  455.   st          (p2,dadr);
  456.   add         bpr,dadr;
  457.   move.b      (nch)+,(p1,dadr);
  458.   st          (p2,dadr);
  459.   add         bpr,dadr;
  460.   move.b      (nch)+,(p1,dadr);
  461.   st          (p2,dadr);
  462.   add         bpr,dadr;
  463.   move.b      (nch)+,(p1,dadr);
  464.   st          (p2,dadr);
  465.   add         bpr,dadr;
  466.   move.b      (nch)+,(p1,dadr);
  467.   st          (p2,dadr);
  468.   and.b       nuln,(p1,dadr);
  469.   bra         next;
  470.  
  471. Col12:
  472.   move.b      (chr),(p1);
  473.   move.b      (chr)+,(p2);
  474.   move        bpr,dadr;
  475.   move.b      (chr),(p1,dadr);
  476.   move.b      (chr)+,(p2,dadr);
  477.   add         bpr,dadr;
  478.   move.b      (chr),(p1,dadr);
  479.   move.b      (chr)+,(p2,dadr);
  480.   add         bpr,dadr;
  481.   move.b      (chr),(p1,dadr);
  482.   move.b      (chr)+,(p2,dadr);
  483.   add         bpr,dadr;
  484.   move.b      (chr),(p1,dadr);
  485.   move.b      (chr)+,(p2,dadr);
  486.   add         bpr,dadr;
  487.   move.b      (chr),(p1,dadr);
  488.   move.b      (chr)+,(p2,dadr);
  489.   add         bpr,dadr;
  490.   move.b      (chr),(p1,dadr);
  491.   move.b      (chr)+,(p2,dadr);
  492.   add         bpr,dadr;
  493.   move.b      (chr),(p1,dadr);
  494.   move.b      (chr)+,(p2,dadr);
  495.   or.b        ulin,(p1,dadr);
  496.   or.b        ulin,(p2,dadr);
  497.   bra         next;
  498.  
  499. Col13:
  500.   st          (p1);
  501.   move.b      (chr)+,(p2);
  502.   move        bpr,dadr;
  503.   st          (p1,dadr);
  504.   move.b      (chr)+,(p2,dadr);
  505.   add         bpr,dadr;
  506.   st          (p1,dadr);
  507.   move.b      (chr)+,(p2,dadr);
  508.   add         bpr,dadr;
  509.   st          (p1,dadr);
  510.   move.b      (chr)+,(p2,dadr);
  511.   add         bpr,dadr;
  512.   st          (p1,dadr);
  513.   move.b      (chr)+,(p2,dadr);
  514.   add         bpr,dadr;
  515.   st          (p1,dadr);
  516.   move.b      (chr)+,(p2,dadr);
  517.   add         bpr,dadr;
  518.   st          (p1,dadr);
  519.   move.b      (chr)+,(p2,dadr);
  520.   add         bpr,dadr;
  521.   st          (p1,dadr);
  522.   move.b      (chr)+,(p2,dadr);
  523.   or.b        ulin,(p2,dadr);
  524.   bra         next;
  525.  
  526. Col14:
  527.   move.b      (chr)+,(p1);
  528.   st          (p2);
  529.   move        bpr,dadr;
  530.   move.b      (chr)+,(p1,dadr);
  531.   st          (p2,dadr);
  532.   add         bpr,dadr;
  533.   move.b      (chr)+,(p1,dadr);
  534.   st          (p2,dadr);
  535.   add         bpr,dadr;
  536.   move.b      (chr)+,(p1,dadr);
  537.   st          (p2,dadr);
  538.   add         bpr,dadr;
  539.   move.b      (chr)+,(p1,dadr);
  540.   st          (p2,dadr);
  541.   add         bpr,dadr;
  542.   move.b      (chr)+,(p1,dadr);
  543.   st          (p2,dadr);
  544.   add         bpr,dadr;
  545.   move.b      (chr)+,(p1,dadr);
  546.   st          (p2,dadr);
  547.   add         bpr,dadr;
  548.   move.b      (chr)+,(p1,dadr);
  549.   st          (p2,dadr);
  550.   or.b        ulin,(p1,dadr);
  551.   bra         next;
  552.  
  553. Col15:
  554.   st          (p1);
  555.   st          (p2);
  556.   move        bpr,dadr;
  557.   st          (p1,dadr);
  558.   st          (p2,dadr);
  559.   add         bpr,dadr;
  560.   st          (p1,dadr);
  561.   st          (p2,dadr);
  562.   add         bpr,dadr;
  563.   st          (p1,dadr);
  564.   st          (p2,dadr);
  565.   add         bpr,dadr;
  566.   st          (p1,dadr);
  567.   st          (p2,dadr);
  568.   add         bpr,dadr;
  569.   st          (p1,dadr);
  570.   st          (p2,dadr);
  571.   add         bpr,dadr;
  572.   st          (p1,dadr);
  573.   st          (p2,dadr);
  574.   add         bpr,dadr;
  575.   st          (p1,dadr);
  576.   st          (p2,dadr);
  577.  
  578. next:
  579.   addq        #1,p1;
  580.   addq        #1,p2;
  581.   bra         loop;
  582.  
  583. return:
  584.   move.l      (A7)+,A5;
  585.   END;
  586.  
  587.