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
Wrap
Assembly Source File
|
1989-10-08
|
13KB
|
587 lines
;*---------------------------------------------------------------------------
; :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;