home *** CD-ROM | disk | FTP | other *** search
- ;*---------------------------------------------------------------------------
- ; :Program. QText.ASM
- ; :Contents. Procedure for fast text-output
- ; :Author. Fridtjof Siebert
- ; :Address. Nobileweg 67, D-7-Stgt-40
- ; :Phone. (0)711/822509
- ; :Shortcut. [fbs]
- ; :Version. 2.0
- ; :Date. 02-Jul-89
- ; :Copyright. Publik Domain
- ; :Language. 68000 Assembler
- ;---------------------------------------------------------------------------*
-
- ; BitMap:
- bm_BytesPerRow = 0
- bm_Rows = 2
- bm_Flags = 4
- bm_Depth = 5
- bm_Pad = 6
- bm_Planes = 8
- bm_SIZEOF = 40
-
- ;* d1 - vertical position (pixel position)
- ;* a0 - Pointer to String (0C-Termination)
- ;* a1 - Pointer to BitMap to store String
- ;* a2 - Pointer to TextFont
- ;
- ;Special codes:
- ; 1..16: background color (x-1) & 3, foreground ((x-1) / 4) & 3
- ; 17: switch to plain text
- ; 18: switch to italics
- ; 19: switch to bold
- ; 20: switch to italics and bold
- ; 21: underline on
- ; 22: underline off
-
- ; Register use:
-
- ; D0: character
- ; D1: vertical position
- ; D2: bytesperrow
- ; D3: to examine character
- ; D4: Offset of fontstyle
- ; D5: offset (row * bytesperrow)
-
- ; A0: points to string
- ; A1: points to bitmap / plane # 1
- ; A2: fontdata
- ; A3: character address in font.chardata
- ; A4: plane # 2;
- ; A5: procedure to type in correct color
- ; A6: negative character
-
- p1 EQUR A1;
- p2 EQUR A4;
- chr EQUR A3;
- nch EQUR A6;
- col EQUR A5;
-
- char EQUR d0
- vert EQUR d1
- bpr EQUR d2
- ch2 EQUR d3
- style EQUR d4
- dadr EQUR d5
- ulin EQUR d6 ; underline on ?
- nuln EQUR d7 ; underline off?
-
-
- QText:
- move.l A5,-(A7);
- lea Col04,col;
- clr style;
- sf ulin;
- st nuln;
- move bm_bytesPerRow(a1),bpr;
- ext.l bpr;
- mulu bpr,vert;
- move.l bm_Planes+4(a1),p2; position in plane #2
- move.l bm_Planes(a1),p1; position in plane #1
- add.l vert,p1; add offset within plane
- add.l vert,p2;
- move.l p1,chr;
- move.l p2,nch;
- move bpr,vert;
- subq #1,vert;
- clrline:
- clr.l (chr)+ ; clear line
- clr.l (chr)+
- clr.l (nch)+
- clr.l (nch)+
- dbra vert,clrline;
-
- move bpr,vert;
- asl #3,vert;
- sub bpr,vert; vert = 7*bpr;
-
- loop:
- move.b (a0)+,char; ; get character
- beq return;
-
- cmp.b #$20,char;
- bhs \typechr;
- cmp.b #17,char;
- blt \newcol;
- cmp.b #22,char;
- cmp.b #21,char;
- blt \newstyle;
- seq ulin;
- sne nuln;
- bra.s loop;
- \newstyle;
- bhi.s loop;
- sub.b #17,char;
- ext.w char;
- move char,style;
- asl #1,style;
- add char,style;
- asl #8,style;
- add style,style;
- bra loop;
-
- \newcol:
- subq.b #1,char;
- bne \l0;
- lea Col00,col;
- bra loop;
- \l0:
- subq.b #1,char;
- bne \l1;
- lea Col01,col;
- bra loop;
- \l1:
- subq.b #1,char;
- bne \l2;
- lea Col02,col;
- bra loop;
- \l2:
- subq.b #1,char;
- bne \l3;
- lea Col03,col;
- bra loop;
- \l3:
- subq.b #1,char;
- bne \l4;
- lea Col04,col;
- bra loop;
- \l4:
- subq.b #1,char;
- bne \l5;
- lea Col05,col;
- bra loop;
- \l5:
- subq.b #1,char;
- bne \l6;
- lea Col06,col;
- bra loop;
- \l6:
- subq.b #1,char;
- bne \l7;
- lea Col07,col;
- bra loop;
- \l7:
- subq.b #1,char;
- bne \l8;
- lea Col08,col;
- bra loop;
- \l8:
- subq.b #1,char;
- bne \l9;
- lea Col09,col;
- bra loop;
- \l9:
- subq.b #1,char;
- bne \la;
- lea Col10,col;
- bra loop;
- \la:
- subq.b #1,char;
- bne \lb;
- lea Col11,col;
- bra loop;
- \lb:
- subq.b #1,char;
- bne \lc;
- lea Col12,col;
- bra loop;
- \lc:
- subq.b #1,char;
- bne \ld;
- lea Col13,col;
- bra loop;
- \ld:
- subq.b #1,char;
- bne \le;
- lea Col14,col;
- bra loop;
- \le:
- lea Col15,col;
- bra loop;
-
- \typechr:
- sub.b #$20,char;
-
- and #$ff,char;
- asl #3,char;
- add style,char;
- lea 0(a2,char.w),chr;
- lea $1800(chr),nch
-
- jmp (col);
-
- Col00:
- bra next;
-
- Col01:
- move.b (nch)+,(p1);
- adda.w bpr,p1;
- move.b (nch)+,(p1);
- adda.w bpr,p1;
- move.b (nch)+,(p1);
- adda.w bpr,p1;
- move.b (nch)+,(p1);
- adda.w bpr,p1;
- move.b (nch)+,(p1);
- adda.w bpr,p1;
- move.b (nch)+,(p1);
- adda.w bpr,p1;
- move.b (nch)+,(p1);
- adda.w bpr,p1;
- move.b (nch)+,(p1);
- and.b nuln,(p1);
- suba.w vert,p1;
- bra next;
-
- Col02:
- move.b (nch)+,(p2);
- adda.w bpr,p2;
- move.b (nch)+,(p2);
- adda.w bpr,p2;
- move.b (nch)+,(p2);
- adda.w bpr,p2;
- move.b (nch)+,(p2);
- adda.w bpr,p2;
- move.b (nch)+,(p2);
- adda.w bpr,p2;
- move.b (nch)+,(p2);
- adda.w bpr,p2;
- move.b (nch)+,(p2);
- adda.w bpr,p2;
- move.b (nch)+,(p2);
- and.b nuln,(p2);
- suba.w vert,p2;
- bra next;
-
- Col03:
- move.b (nch),(p1);
- move.b (nch)+,(p2);
- move bpr,dadr;
- move.b (nch),(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch),(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch),(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch),(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch),(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch),(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch),(p1,dadr);
- move.b (nch)+,(p2,dadr);
- and.b nuln,(p1,dadr);
- and.b nuln,(p2,dadr);
- bra next;
-
- Col04:
- move.b (chr)+,(p1);
- adda.w bpr,p1;
- move.b (chr)+,(p1);
- adda.w bpr,p1;
- move.b (chr)+,(p1);
- adda.w bpr,p1;
- move.b (chr)+,(p1);
- adda.w bpr,p1;
- move.b (chr)+,(p1);
- adda.w bpr,p1;
- move.b (chr)+,(p1);
- adda.w bpr,p1;
- move.b (chr)+,(p1);
- adda.w bpr,p1;
- move.b (chr)+,(p1);
- or.b ulin,(p1);
- suba.w vert,p1;
- bra next;
-
- Col05:
- st (p1);
- move bpr,dadr;
- st (p1,dadr);
- add bpr,dadr;
- st (p1,dadr);
- add bpr,dadr;
- st (p1,dadr);
- add bpr,dadr;
- st (p1,dadr);
- add bpr,dadr;
- st (p1,dadr);
- add bpr,dadr;
- st (p1,dadr);
- add bpr,dadr;
- st (p1,dadr);
- bra next;
-
- Col06:
- move.b (chr)+,(p1);
- move.b (nch)+,(p2);
- move bpr,dadr;
- move.b (chr)+,(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- move.b (nch)+,(p2,dadr);
- or.b ulin,(p1,dadr);
- and.b nuln,(p2,dadr);
- bra next;
-
- Col07:
- st (p1);
- move.b (nch)+,(p2);
- move bpr,dadr;
- st (p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (nch)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (nch)+,(p2,dadr);
- and.b nuln,(p2,dadr);
- bra next;
-
- Col08:
- move.b (chr)+,(p2);
- adda.w bpr,p2;
- move.b (chr)+,(p2);
- adda.w bpr,p2;
- move.b (chr)+,(p2);
- adda.w bpr,p2;
- move.b (chr)+,(p2);
- adda.w bpr,p2;
- move.b (chr)+,(p2);
- adda.w bpr,p2;
- move.b (chr)+,(p2);
- adda.w bpr,p2;
- move.b (chr)+,(p2);
- adda.w bpr,p2;
- move.b (chr)+,(p2);
- or.b ulin,(p2);
- suba.w vert,p2;
- bra next;
-
- Col09:
- move.b (nch)+,(p1);
- move.b (chr)+,(p2);
- move bpr,dadr;
- move.b (nch)+,(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- move.b (chr)+,(p2,dadr);
- and.b nuln,(p1,dadr);
- or.b ulin,(p2,dadr);
- bra next;
-
- Col10:
- st (p2);
- adda.w bpr,p2;
- st (p2);
- adda.w bpr,p2;
- st (p2);
- adda.w bpr,p2;
- st (p2);
- adda.w bpr,p2;
- st (p2);
- adda.w bpr,p2;
- st (p2);
- adda.w bpr,p2;
- st (p2);
- adda.w bpr,p2;
- st (p2);
- suba.w vert,p2;
- bra next;
-
- Col11:
- move.b (nch)+,(p1);
- st (p2);
- move bpr,dadr;
- move.b (nch)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (nch)+,(p1,dadr);
- st (p2,dadr);
- and.b nuln,(p1,dadr);
- bra next;
-
- Col12:
- move.b (chr),(p1);
- move.b (chr)+,(p2);
- move bpr,dadr;
- move.b (chr),(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr),(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr),(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr),(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr),(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr),(p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- move.b (chr),(p1,dadr);
- move.b (chr)+,(p2,dadr);
- or.b ulin,(p1,dadr);
- or.b ulin,(p2,dadr);
- bra next;
-
- Col13:
- st (p1);
- move.b (chr)+,(p2);
- move bpr,dadr;
- st (p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (chr)+,(p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- move.b (chr)+,(p2,dadr);
- or.b ulin,(p2,dadr);
- bra next;
-
- Col14:
- move.b (chr)+,(p1);
- st (p2);
- move bpr,dadr;
- move.b (chr)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- move.b (chr)+,(p1,dadr);
- st (p2,dadr);
- or.b ulin,(p1,dadr);
- bra next;
-
- Col15:
- st (p1);
- st (p2);
- move bpr,dadr;
- st (p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- st (p2,dadr);
- add bpr,dadr;
- st (p1,dadr);
- st (p2,dadr);
-
- next:
- addq #1,p1;
- addq #1,p2;
- bra loop;
-
- return:
- move.l (A7)+,A5;
- END;
-
-