Tải bản đầy đủ (.pdf) (17 trang)

Đồ họa máy tính - Chương 5 Tô màu, Font chữ - Bài 17 ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (415.76 KB, 17 trang )

Kỹ thuật Đồ hoạ máy tính
94
Line(500,150,450,30);
Line(400,80,450,30);
Line(50,50,400,80);
Repeat
To_Mau(250,70,White,RanDom(14)+1);
settextjustify(1,1);
settextstyle(1,0,2);
Outtextxy(320,400,'Press ESCAPE to Exit');
Repeat
Until KeyPressed;
Until (KeyPressed)And(ReadKey=#27);
CloseGraph;
End.

$17. Xử lý ký tự trên mn hình
Để biểu diễn các ký tự trên màn hình ngời ta sử dụng 2 byte cho 1 ký tự một byte -
mã (code) của ký tự một byte - thuộc tính (attribute) của ký tự. Mã của ký tự là một
số trong tập từ 0-256 Byte thuộc tính dùng để xác định tính chất hiển thị của ký tự
trên màn hình nh màu sắc, chế độ hiện nhấp nháy (Blink)
Mỗi ký tự có khuôn mẫu của nó ngời ta gọi là shape hay pattern của ký tự. Khuôn
mẫu của ký tự đợc lu trong máy bằng một số byte nào đó tuỳ thuộc vào khuôn
mẫu của ký tự. Trong máy tính ngời ta dành 32 byte để lu giữ khuôn mẫu cho mọi
ký tự. Ngời ta tạo các byte biểu diễn khuôn mẫu của một ký tự theo nguyên tắc
sau:
ở chế độ hộp ký tự 8x8:
ở chế độ hộp ký tự 8x14

Kỹ thuật Đồ hoạ máy tính
95


Cách tạo khuôn mẫu ký tự nh trên gọi là cách tạo theo kiểu bitmap. Ưu điểm của
cách này đơn giản. Song nhợc điểm là khó thay đổi kích thớc ký tự khi cần phóng
to thu nhỏ. Ngời ta có thể tạo khuôn mẫu, ký tự theo một cách khác ghi lại toạ độ
của các đoạn thẳng tạo nên ký tự - cách này gọi là kiểu vectơ - u điểm của cách này
là cho phép thay đổi kích cỡ của ký tự. Tập các khuôn mẫu của bộ 256 ký tự gọi là
font của ký tự
+ Một vài đặc điểm cần chú ý trong quá trình tạo font
1. Khi các ký tự xuất hiện trên màn hình nó sẽ xuất hiện trong khuôn khổ hộp ký tự.
Mặc dù các ký tự có khoảng cách cách xa nhau nhng giữa các hộp ký tự không có
khoảng cách trên màn hình

2. Để tạo ra khoảng cách theo hàng ngang và chiều đứng giữa các ký tự mặc dù các
hộp ký tự xếp liền nhau, khi tạo font ngời ta tạo theo nguyên tắc khuôn mẫu của ký
tự tập trung về góc trên bên trái

+ Lu giữ font ký tự ở chế độ văn bản trong bộ nhớ
Trong máy tính ngời ta quy định chuẩn chiều rộng của mỗi ký tự là 8 dot, chiều
cao tối đa của mỗi ký tự là 32 dòng (32 scanline) từ đó suy ra để lu giữ font của
một ký tự tối đa cần 32 byte
Một bộ font gồm 256 ký tự cần:
Vùn
g
các dot tạo
ra khuôn mẫu
Kỹ thuật Đồ hoạ máy tính
96
256x32 =8192 ~8Kb
ở chế độ EGA bộ nhớ màn hình cho phép nạp sẵn (Resident) tối đa 4 bộ font nghĩa
là trong 4 nhớ màn hình đợc chia thành 4 khối mỗi khối (Block) 8 Kb để chữa font
của mỗi tập ký tự

ở chế độ văn bản của VGA độ nhớ màn hình cho phép nạp sẵn 8 bộ font. Điều đó
có nghĩa là bộ nhớ màn hình đợc chia thành 8 khối (block) mỗi khối 8 Kb để lu
trữ 8 bộ font
ở mỗi thời điểm của EGA, VGA chỉ cho phép kích hoạt (active) hai bộ font cùng
một lúc nghĩa là ở một thời điểm chỉ có 2 bộ font đợc đem ra sử dụng
ở chế độ văn bản các bitplane 0 và bit plane 1 đợc sử dụng để chứa dữ liệu về tập
các ký tự
bit plane 0 đợc chia thành 4 hoặc 8 khối để chứa các bộ font
bit plane 1 dùng để chứa thuộc tính của ký tự
Để xác định địa chỉ bắt đầu khuôn của ký tự trong một font ta có thể tính theo
nguyên tắc:
character shape.addresso=font base address + (character code <<5)
Trong máy tính ROM BIOS có chứa sẵn một số loại font. Ngời lập trình có thể sử
dụng dịch vụ ngắt của BIOS để đặt các tập font theo ý muốn
Bảng các dịch vụ ngắt của ngắt 11 h ( AH=$11)
AL Kểt quả Display mode
00 load user character set text
01 load ROM 9x14 set text (monochom)
02 load ROM 8x8 set text (color)
03 Set Block Sfeeifier text
04 load ROM 8x16 text (only VGA)
Kỹ thuật Đồ hoạ máy tính
97
10 load user character set text
11 load ROM 9x14 set text (monochome)
12 load ROM 8x8 set text (color)
14 load ROM 8x16 set text
20 load USER 8x8 set
21 load USE Set graphics
22 load ROM 8x14 set graphics

23 load ROM 8x8 set graphics (color)
24 load ROM 8x16 set graphics (only VGA)
30 Retur font information graphics (only VGA)
Trong máy tính có một số tập font đã chứa sẵn trong BIOS ROM khi máy tính khởi
động tuỳ thuộc vào mode hoạt động nó sẽ lại tự động nạp sẵn (Resident) vào trong
bộ nhớ màn hình. Dới đây là bảng các font chuẩn (Default font) đợc sử dụng ở
các mode
ở chế độ text:
mode character box size color
4,5 8x8 color
6 8x8 monox color
D,E 8x8 color
F 8x14 mono/color
10 8x14 color
11 8x16 (VGA) mono/color
12 8x16 (VGA) color
13 8x8 (VGA) color
ở chế độ graphics dùng các font chuẩn sau:
Mode character box size color
0,1 8x8 color
0,1 8x14 color
0,1 9x16 (VGA) color
2,3 8x8 color
Kỹ thuật Đồ hoạ máy tính
98
2,3 8x14 color
2,3 9x16 (VGA) color
7 9x14 mono/color
7 9x16 (VGA) mono/color
Chú ý:

Để đổi từ mode này sang mode khác ta sử dụng ngắt số 10h, với dịch vụ ngắt 0, cụ
thể:
Int=10h
AH=$00
AL=Số hiệu Mode
bit số 7 trong thanh ghi AL có vai trò đặc biệt nếu nó có giá trị 0 giải phóng bộ nhớ
màn hình khi đổi mode, nếu có giá trị 1 không giải phóng nhớ màn hình khi đổi
mode
Ví dụ:
int=$10
AH=$00
AL=$03
Đổi mode 3 không giải phóng màn hình
2. Từ mode text sang mode graphic bộ nhớ màn hình luôn luôn đợc giải phóng
+ Hiển thị ký tự trong chế độ graphics
ở chế độ đồ hoạ bộ nhớ màn hình không đợc sử dụng để chứa các bộ font ký tự
nh trong chế độ văn bản, các bit plane đợc sử dụng để lu trữ dữ liệu của các điểm
ảnh (pixel) vì vậy tập các font chữ ở chế độ đồ hoạ đợc để ở RAM khi hiện lên màn
hình nó thực hiện đọc các mẫu ký tự vào các bit plane nh các ảnh. Chúng ta có thể
sử dụng các chơng trình truy nhập bộ nhớ màn hình ở chế độ đồ hoạ để đa các ký
tự từ bộ nhớ vào bộ nhớ màn hình
Chẳng hạn: Giả sử ta có tập font để ở RAM font có kích thớc 8x14=112 byte khi
đó ta sẽ thực hiện các phép đọc một ảnh vào vị trí (x,y) nào đó có kích thớc ảnh 12
byte
Để kết thúc phần này chúng ta hãy làm quen với một số dịch vụ ngắt liên quan đến
tập font của các ký tự
Ví dụ 1

Chơng trình đọc font chữ lập bằng TURBO PASCAL:
Program Chuong_trinh_doc_font;

Uses Crt,Dos;
Var
i,j:integer;
Chon:char;
TGAL:Byte;
Kü thuËt §å ho¹ m¸y tÝnh
99
dem:integer;
fnt : Array[1 256*16] of Byte;
Procedure Menu;
Begin
TextColor(RED);
TextColor(YELLOW);
Writeln(' º CHUONG TRINH DOC FONT º');
Writeln(' SU DUNG CO NGAT CUA ROMBIOS º');
Writeln(' º 1. AL=0 Tai font chu cua NSD º');
Writeln(' º 2. AL=1 Tai fon chu 8x14 cua ROM º');
Writeln(' º 3. AL=2 Tai fon chu 8x8 cua ROM º');
Writeln(' º 4. AL=4 Tai font chu 8x16 cua ROM (VGA) º');
Writeln(' º 5. Q q X x Tro ve chuong trinh º');
TextColor(WHITE);
Writeln;
Write(' Ban chon so may : ');
end;
{*********************************************************}
Procedure Load_font;
Var R:Registers;
sm,os,i : Word;
Begin
R.ah:=$11;

R.al:=TGAL;
R.bl:=0;
R.cx:=256;
R.dx:=33;
intr($10,R);
End;
{*********************************************************}
Procedure Tra_ve_font_ban_dau;
Var R:Registers;
Begin
R.ah:=$11;
R.al:=4;
R.bl:=0;
intr($10,R);
End;
{*********************************************************}
Begin
Repeat
Clrscr;
Menu;
Chon:=ReadKey;
Writeln(chon);
Kỹ thuật Đồ hoạ máy tính
100
Case chon of
'1' : TGAL:=0;
'2' : TGAL:=1;
'3' : TGAL:=2;
'4' : TGAL:=4;
'5','q','Q','X','x': Exit;

End;
clrscr;
Load_font;
dem:=0;
for i:=33 to 255 do
begin
Write(' ',chr(i));
inc(dem);
if dem mod 20 = 0 then
begin
Writeln; Writeln;
end;
end;
Readln;
Tra_ve_font_ban_dau;
Until Pos(chon,'5qQXx')>0;
End.
Ví dụ 2

Đa tệp font VGA 8x16 của ngời sử dụng vào hoạt động ở chế độ văn bản và đồ
hoạ, chơng trình đợc lập bằng TURBO PASCAL có sử dụng UNIT :
a. Tệp UNIT : FONTVN.PAS
UNIT FontVN;
INTERFACE
Procedure Load_Graph_Font;
Procedure Load_Text_Font;
Procedure UnLoadFont;
Function Vn(S : String) : String;
Procedure Out_Text(st : string);
procedure Sch_Repl(Var S : String; Sch, Repl : String);

(*************************************************)
IMPLEMENTATION
Uses Crt,Graph, Dos;
Type
Font = Array[1 256*16] of Byte;
Const
Fnt : Font=(
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,126,129,165,129,129,189,153,129,129,126, 0, 0, 0, 0,
0, 0,126,255,219,255,255,195,231,255,255,126, 0, 0, 0, 0,
Kü thuËt §å ho¹ m¸y tÝnh
101
0, 0, 0, 0,108,254,254,254,254,124, 56, 16, 0, 0, 0, 0,
0, 0, 0, 0, 16, 56,124,254,124, 56, 16, 0, 0, 0, 0, 0,
0, 0, 0, 24, 60, 60,231,231,231,153, 24, 60, 0, 0, 0, 0,
0, 0, 0, 24, 60,126,255,255,126, 24, 24, 60, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 24, 60, 60, 24, 0, 0, 0, 0, 0, 0,
255,255,255,255,255,255,231,195,195,231,255,255,255,255,255,255,
0, 0, 0, 0, 0, 60,102, 66, 66,102, 60, 0, 0, 0, 0, 0,
255,255,255,255,255,195,153,189,189,153,195,255,255,255,255,255,
0, 0, 30, 14, 26, 50,120,204,204,204,204,120, 0, 0, 0, 0,
0, 0, 60,102,102,102,102, 60, 24,126, 24, 24, 0, 0, 0, 0,
0, 0, 63, 51, 63, 48, 48, 48, 48,112,240,224, 0, 0, 0, 0,
0, 0,127, 99,127, 99, 99, 99, 99,103,231,230,192, 0, 0, 0,
0, 0, 0, 24, 24,219, 60,231, 60,219, 24, 24, 0, 0, 0, 0,
0,128,192,224,240,248,254,248,240,224,192,128, 0, 0, 0, 0,
0, 2, 6, 14, 30, 62,254, 62, 30, 14, 6, 2, 0, 0, 0, 0,
0, 0, 24, 60,126, 24, 24, 24, 24,126, 60, 24, 0, 0, 0, 0,
0, 0,102,102,102,102,102,102,102, 0,102,102, 0, 0, 0, 0,
0, 0,127,219,219,219,123, 27, 27, 27, 27, 27, 0, 0, 0, 0,

0,124,198, 96, 56,108,198,198,108, 56, 12,198,124, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,254,254,254,254, 0, 0, 0, 0,
0, 0, 24, 60,126, 24, 24, 24, 24,126, 60, 24,126, 0, 0, 0,
0, 0, 24, 60,126, 24, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0,
0, 0, 24, 24, 24, 24, 24, 24, 24,126, 60, 24, 0, 0, 0, 0,
0, 0, 0, 0, 0, 24, 12,254, 12, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 48, 96,254, 96, 48, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,192,192,192,192,254, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 40,108,254,108, 40, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 16, 56, 56,124,124,254,254, 0, 0, 0, 0, 0,
0, 0, 0, 0,254,254,124,124, 56, 56, 16, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 24, 60, 60, 60, 24, 24, 24, 0, 24, 24, 0, 0, 0, 0,
0,102,102,102, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0,108,108,254,108,108,108,254,108,108, 0, 0, 0, 0,
24, 24,124,198,194,192,124, 6,134,198,124, 24, 24, 0, 0, 0,
0, 0, 0, 0,194,198, 12, 24, 48, 96,198,134, 0, 0, 0, 0,
0, 0, 56,108,108, 56,118,220,204,204,204,118, 0, 0, 0, 0,
0, 48, 48, 48, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 12, 24, 48, 48, 48, 48, 48, 48, 24, 12, 0, 0, 0, 0,
0, 0, 48, 24, 12, 12, 12, 12, 12, 12, 24, 48, 0, 0, 0, 0,
0, 0, 0, 0, 0,102, 60,255, 60,102, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 24, 24,126, 24, 24, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 48, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,254, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0,
0, 0, 0, 0, 2, 6, 12, 24, 48, 96,192,128, 0, 0, 0, 0,
Kü thuËt §å ho¹ m¸y tÝnh
102
0, 0,124,198,198,206,214,214,230,198,198,124, 0, 0, 0, 0,

0, 0, 24, 56,120, 24, 24, 24, 24, 24, 24,126, 0, 0, 0, 0,
0, 0,124,198, 6, 12, 24, 48, 96,192,198,254, 0, 0, 0, 0,
0, 0,124,198, 6, 6, 60, 6, 6, 6,198,124, 0, 0, 0, 0,
0, 0, 12, 28, 60,108,204,254, 12, 12, 12, 30, 0, 0, 0, 0,
0, 0,254,192,192,192,252, 14, 6, 6,198,124, 0, 0, 0, 0,
0, 0, 56, 96,192,192,252,198,198,198,198,124, 0, 0, 0, 0,
0, 0,254,198, 6, 6, 12, 24, 48, 48, 48, 48, 0, 0, 0, 0,
0, 0,124,198,198,198,124,198,198,198,198,124, 0, 0, 0, 0,
0, 0,124,198,198,198,126, 6, 6, 6, 12,120, 0, 0, 0, 0,
0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 24, 24, 0, 0, 0, 0,
0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 24, 24, 48, 0, 0, 0,
0, 0, 0, 6, 12, 24, 48, 96, 48, 24, 12, 6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,254, 0, 0,254, 0, 0, 0, 0, 0, 0,
0, 0, 0, 96, 48, 24, 12, 6, 12, 24, 48, 96, 0, 0, 0, 0,
0, 0,124,198,198, 12, 24, 24, 24, 0, 24, 24, 0, 0, 0, 0,
0, 0, 0,124,198,198,222,222,222,220,192,124, 0, 0, 0, 0,
0, 0, 16, 56,108,198,198,254,198,198,198,198, 0, 0, 0, 0,
0, 0,252,102,102,102,124,102,102,102,102,252, 0, 0, 0, 0,
0, 0, 60,102,194,192,192,192,192,194,102, 60, 0, 0, 0, 0,
0, 0,248,108,102,102,102,102,102,102,108,248, 0, 0, 0, 0,
0, 0,254,102, 98,104,120,104, 96, 98,102,254, 0, 0, 0, 0,
0, 0,254,102, 98,104,120,104, 96, 96, 96,240, 0, 0, 0, 0,
0, 0, 60,102,194,192,192,222,198,198,102, 58, 0, 0, 0, 0,
0, 0,198,198,198,198,254,198,198,198,198,198, 0, 0, 0, 0,
0, 0, 60, 24, 24, 24, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
0, 0, 30, 12, 12, 12, 12, 12,204,204,204,120, 0, 0, 0, 0,
0, 0,230,102,108,108,120,120,108,102,102,230, 0, 0, 0, 0,
0, 0,240, 96, 96, 96, 96, 96, 96, 98,102,254, 0, 0, 0, 0,
0, 0,198,238,254,254,214,198,198,198,198,198, 0, 0, 0, 0,
0, 0,198,230,246,254,222,206,198,198,198,198, 0, 0, 0, 0,

0, 0, 56,108,198,198,198,198,198,198,108, 56, 0, 0, 0, 0,
0, 0,252,102,102,102,124, 96, 96, 96, 96,240, 0, 0, 0, 0,
0, 0,124,198,198,198,198,198,198,214,222,124, 12, 14, 0, 0,
0, 0,252,102,102,102,124,108,102,102,102,230, 0, 0, 0, 0,
0, 0,124,198,198, 96, 56, 12, 6,198,198,124, 0, 0, 0, 0,
0, 0,126,126, 90, 24, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
0, 0,198,198,198,198,198,198,198,198,198,124, 0, 0, 0, 0,
0, 0,198,198,198,198,198,198,198,108, 56, 16, 0, 0, 0, 0,
0, 0,198,198,198,198,198,214,214,254,108,108, 0, 0, 0, 0,
0, 0,198,198,108,108, 56, 56,108,108,198,198, 0, 0, 0, 0,
0, 0,102,102,102,102, 60, 24, 24, 24, 24, 60, 0, 0, 0, 0,
0, 0,254,198,134, 12, 24, 48, 96,194,198,254, 0, 0, 0, 0,
0, 0, 60, 48, 48, 48, 48, 48, 48, 48, 48, 60, 0, 0, 0, 0,
0, 0, 0,128,192,224,112, 56, 28, 14, 6, 2, 0, 0, 0, 0,
Kü thuËt §å ho¹ m¸y tÝnh
103
0, 0, 60, 12, 12, 12, 12, 12, 12, 12, 12, 60, 0, 0, 0, 0,
16, 56,108,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0,
48, 48, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
0, 0,224, 96, 96,120,108,102,102,102,102,220, 0, 0, 0, 0,
0, 0, 0, 0, 0,124,198,192,192,192,198,124, 0, 0, 0, 0,
0, 0, 28, 12, 12, 60,108,204,204,204,204,118, 0, 0, 0, 0,
0, 0, 0, 0, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
0, 0, 56,108,100, 96,240, 96, 96, 96, 96,240, 0, 0, 0, 0,
0, 0, 0, 0, 0,118,204,204,204,204,204,124, 12,204,120, 0,
0, 0,224, 96, 96,108,118,102,102,102,102,230, 0, 0, 0, 0,
0, 0, 24, 24, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
0, 0, 6, 6, 0, 14, 6, 6, 6, 6, 6, 6,102,102, 60, 0,

0, 0,224, 96, 96,102,108,120,120,108,102,230, 0, 0, 0, 0,
0, 0, 56, 24, 24, 24, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
0, 0, 0, 0, 0,236,254,214,214,214,214,214, 0, 0, 0, 0,
0, 0, 0, 0, 0,220,102,102,102,102,102,102, 0, 0, 0, 0,
0, 0, 0, 0, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
0, 0, 0, 0, 0,220,102,102,102,102,102,124, 96, 96,240, 0,
0, 0, 0, 0, 0,118,204,204,204,204,204,124, 12, 12, 30, 0,
0, 0, 0, 0, 0,220,118, 98, 96, 96, 96,240, 0, 0, 0, 0,
0, 0, 0, 0, 0,124,198, 96, 56, 12,198,124, 0, 0, 0, 0,
0, 0, 16, 48, 48,252, 48, 48, 48, 48, 54, 28, 0, 0, 0, 0,
0, 0, 0, 0, 0,204,204,204,204,204,204,118, 0, 0, 0, 0,
0, 0, 0, 0, 0,102,102,102,102,102, 60, 24, 0, 0, 0, 0,
0, 0, 0, 0, 0,198,198,198,214,214,254,108, 0, 0, 0, 0,
0, 0, 0, 0, 0,198,108, 56, 56, 56,108,198, 0, 0, 0, 0,
0, 0, 0, 0, 0,198,198,198,198,198,198,126, 6, 12,248, 0,
0, 0, 0, 0, 0,254,204, 24, 48, 96,198,254, 0, 0, 0, 0,
0, 0, 14, 24, 24, 24,112, 24, 24, 24, 24, 14, 0, 0, 0, 0,
0, 0, 24, 24, 24, 24, 0, 24, 24, 24, 24, 24, 0, 0, 0, 0,
0, 0,112, 24, 24, 24, 14, 24, 24, 24, 24,112, 0, 0, 0, 0,
0, 0,118,220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 16, 56,108,198,198,198,254, 0, 0, 0, 0, 0,
0, 0,108, 56, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
12, 24,108, 56, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
96, 48,108, 56, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
48, 16,108, 56, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
20, 40,108, 56, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
0, 0,108, 56, 0,120, 12,124,204,204,204,118, 0, 48, 48, 0,
0, 0, 56,108, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
6, 12, 56,108, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
192, 96, 56,108, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,

28, 4, 56,108, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
Kü thuËt §å ho¹ m¸y tÝnh
104
54,108, 56,108, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
0, 0, 56,108, 0,120, 12,124,204,204,204,118, 0, 48, 48, 0,
0, 0, 56,108, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
6, 12, 56,108, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
192, 96, 56,108, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
28, 4, 56,108, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
54,108, 56,108, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
0, 0, 56,108, 0,124,198,254,192,192,198,124, 0, 48, 48, 0,
0, 0, 0, 6, 2,126,198,198,198,198,198,124, 0, 0, 0, 0,
0, 12, 24, 6, 2,126,198,198,198,198,198,124, 0, 0, 0, 0,
0, 96, 48, 6, 2,126,198,198,198,198,198,124, 0, 0, 0, 0,
0, 56, 8, 22, 2,126,198,198,198,198,198,124, 0, 0, 0, 0,
0, 54,108, 6, 2,126,198,198,198,198,198,124, 0, 0, 0, 0,
0, 0, 0, 6, 2,126,198,198,198,198,198,124, 0, 48, 48, 0,
0, 0, 56,108, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
6, 12, 56,108, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
192, 96, 56,108, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
14, 2, 60,108, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
54,108, 56,108, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
0, 0, 56,108, 0,124,198,198,198,198,198,124, 0, 48, 48, 0,
0, 0, 0, 6, 2,206,204,204,204,204,204,118, 0, 0, 0, 0,
0, 12, 24, 6, 2,206,204,204,204,204,204,118, 0, 0, 0, 0,
0, 96, 48, 6, 2,206,204,204,204,204,204,118, 0, 0, 0, 0,
0, 56, 8, 22, 2,206,204,204,204,204,204,118, 0, 0, 0, 0,
0, 54,108, 6, 2,206,204,204,204,204,204,118, 0, 0, 0, 0,
0, 0, 0, 6, 2,206,204,204,204,204,204,118, 0, 48, 48, 0,
0, 0, 12, 24, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,

0, 0, 96, 48, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
0, 56, 8, 16, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
0, 0, 54,108, 0,120, 12,124,204,204,204,118, 0, 0, 0, 0,
0, 0, 0, 0, 0,120, 12,124,204,204,204,118, 0, 48, 48, 0,
0, 0, 12, 24, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
0, 0, 96, 48, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
0, 56, 8, 16, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
0, 0, 54,108, 0,124,198,254,192,192,198,124, 0, 0, 0, 0,
0, 0, 0, 0, 0,124,198,254,192,192,198,124, 0, 48, 48, 0,
0, 0, 12, 24, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
0, 0, 48, 24, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
17, 68, 17, 68, 17, 68, 17, 68, 17, 68, 17, 68, 17, 68, 17, 68,
85,170, 85,170, 85,170, 85,170, 85,170, 85,170, 85,170, 85,170,
221,119,221,119,221,119,221,119,221,119,221,119,221,119,221,119,
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24,248, 24, 24, 24, 24, 24, 24, 24, 24,
0, 56, 8, 16, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
0, 0, 54,108, 0, 56, 24, 24, 24, 24, 24, 60, 0, 0, 0, 0,
Kü thuËt §å ho¹ m¸y tÝnh
105
0, 0, 24, 24, 0, 56, 24, 24, 24, 24, 24, 60, 0, 24, 24, 0,
0, 0, 12, 24, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
54, 54, 54, 54, 54,246, 6,246, 54, 54, 54, 54, 54, 54, 54, 54,
54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
0, 0, 0, 0, 0,254, 6,246, 54, 54, 54, 54, 54, 54, 54, 54,
54, 54, 54, 54, 54,246, 6,254, 0, 0, 0, 0, 0, 0, 0, 0,
54, 54, 54, 54, 54, 54, 54,254, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 96, 48, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,248, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 31, 0, 0, 0, 0, 0, 0, 0, 0,

24, 24, 24, 24, 24, 24, 24,255, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,255, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 31, 24, 24, 24, 24, 24, 24, 24, 24,
0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,
24, 24, 24, 24, 24, 24, 24,255, 24, 24, 24, 24, 24, 24, 24, 24,
0, 56, 8, 16, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
0, 0, 54,108, 0,124,198,198,198,198,198,124, 0, 0, 0, 0,
54, 54, 54, 54, 54, 55, 48, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 63, 48, 55, 54, 54, 54, 54, 54, 54, 54, 54,
54, 54, 54, 54, 54,247, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,255, 0,247, 54, 54, 54, 54, 54, 54, 54, 54,
54, 54, 54, 54, 54, 55, 48, 55, 54, 54, 54, 54, 54, 54, 54, 54,
0, 0, 0, 0, 0,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,
54, 54, 54, 54, 54,247, 0,247, 54, 54, 54, 54, 54, 54, 54, 54,
24, 24, 24, 24, 24,255, 0,255, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,124,198,198,198,198,198,124, 0, 48, 48, 0,
0, 0, 0, 0, 0,255, 0,255, 24, 24, 24, 24, 24, 24, 24, 24,
0, 0, 12, 24, 0,204,204,204,204,204,204,118, 0, 0, 0, 0,
0, 0, 96, 48, 0,204,204,204,204,204,204,118, 0, 0, 0, 0,
0, 56, 8, 16, 0,204,204,204,204,204,204,118, 0, 0, 0, 0,
0, 0,108,216, 0,204,204,204,204,204,204,118, 0, 0, 0, 0,
0, 0, 0, 0, 0,204,204,204,204,204,204,118, 0, 48, 48, 0,
0, 0, 12, 24, 0,198,198,198,198,198,198,126, 6, 12,248, 0,
0, 0, 96, 48, 0,198,198,198,198,198,198,126, 6, 12,248, 0,
24, 24, 24, 24, 24, 24, 24,248, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 31, 24, 24, 24, 24, 24, 24, 24, 24,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255,255,255,
0, 0, 56, 8, 16,198,198,198,198,198,198,126, 6, 12,248, 0,
0, 0, 54,108, 0,198,198,198,198,198,198,126, 6, 12,248, 0,

255,255,255,255,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,118,220,216,216,216,220,118, 0, 0, 0, 0,
0, 0, 0, 0,120,204,216,204,198,198,198,204,192,192, 0, 0,
0, 0, 0,254,198,198,192,192,192,192,192,192, 0, 0, 0, 0,
0, 0, 0, 0,128,254,108,108,108,108,108,108, 0, 0, 0, 0,
Kü thuËt §å ho¹ m¸y tÝnh
106
0, 0, 0,254,198, 96, 48, 24, 48, 96,198,254, 0, 0, 0, 0,
0, 0, 0, 0, 0,126,216,216,216,216,216,112, 0, 0, 0, 0,
0, 0, 0, 0,102,102,102,102,102,124, 96, 96,192, 0, 0, 0,
0, 0, 0, 0,118,220, 24, 24, 24, 24, 24, 24, 0, 0, 0, 0,
0, 0, 0,126, 24, 60,102,102,102, 60, 24,126, 0, 0, 0, 0,
0, 0, 0, 56,108,198,198,254,198,198,108, 56, 0, 0, 0, 0,
0, 0, 56,108,198,198,198,108,108,108,108,238, 0, 0, 0, 0,
0, 0, 30, 48, 24, 12, 62,102,102,102,102, 60, 0, 0, 0, 0,
0, 0, 0, 0, 0,126,219,219,219,126, 0, 0, 0, 0, 0, 0,
0, 0, 0, 3, 6,126,207,219,243,126, 96,192, 0, 0, 0, 0,
0, 0, 28, 48, 96, 96,124, 96, 96, 96, 48, 28, 0, 0, 0, 0,
0, 0, 0,124,198,198,198,198,198,198,198,198, 0, 0, 0, 0,
0, 0, 0, 0,254, 0, 0,254, 0, 0,254, 0, 0, 0, 0, 0,
0, 0, 0, 0, 24, 24,126, 24, 24, 0, 0,255, 0, 0, 0, 0,
0, 0, 0, 48, 24, 12, 6, 12, 24, 48, 0,126, 0, 0, 0, 0,
0, 0, 0, 12, 24, 48, 96, 48, 24, 12, 0,126, 0, 0, 0, 0,
0, 0, 14, 27, 27, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 24, 24,216,216,216,112, 0, 0, 0, 0,
0, 0, 0, 0, 24, 24, 0,126, 0, 24, 24, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,118,220, 0,118,220, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,198,198,198,198,198,198,126, 6, 12,248, 24,
0, 0, 12, 30, 12, 60,108,204,204,204,204,118, 0, 0, 0, 0,
0, 0,248,108,102,102,246,102,102,102,108,248, 0, 0, 0, 0,

0, 15, 12, 12, 12, 12, 12,236,108,108, 60, 28, 0, 0, 0, 0,
0,216,108,108,108,108,108, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,112,152, 48, 96,200,248, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,124,124,124,124,124,124,124, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
(*************************************************)
var
R : Registers;
(*************************************************)
Procedure Out_Text(st : string);
Var
C16 : Array[1 16] Of Byte;
x,y,n,i,ofset,l,j : integer;
ch1 : Char;
Begin
l:=length(st);
For j:=1 To l Do
Begin
ch1:=st[j];
n:=Ord(ch1);
x:=GetX;
y:=GetY;
Kü thuËt §å ho¹ m¸y tÝnh
107
ofset:=80*y+(x div 8);
For i:=1 To 16 Do
Begin
C16[i]:=Fnt[16*n+i];
ofset:=80*(y+i-1)+(x div 8);
Mem[$A000:ofset]:=C16[i];

End;
x:=x+8;
if x>632 Then
Begin
x:=0;
y:=y+19;
End;
moveto(x,y);
End;
End;
(*************************************************)
Procedure Sch_Repl;
Var
i, j : Byte;
Begin
j := 0;
Repeat
i := Pos(Sch, S);
If i > 0 then
Begin
Delete(S, i, Length(Sch));
Insert(Repl, S, i);
j := j + 1;
End;
Until (i = 0);
End;
(*************************************************)
Procedure Load_Graph_Font;
Begin
R.AX := $1121;

R.CX := 16;
R.BL := 0;
R.DL :=Round(480/R.CX);
R.ES := Seg(Fnt);
R.BP := Ofs(Fnt);
Intr($10, R);
End;
(*************************************************)
Procedure Load_Text_Font;
Kü thuËt §å ho¹ m¸y tÝnh
108
Begin
R.AX := $1100;
R.CX := 256;
R.DX := 0;
R.BH := 16;
R.ES := Seg(Fnt);
R.BP := Ofs(Fnt);
Intr($10, R);
End;
(*************************************************)
Procedure UnLoadFont;
Begin
R.AH := $11;
R.AL := $24;
R.BL := 30;
Intr($10, R);
End;
(******************** VnString Function *******************)
Function Vn(S : String) : String;

Begin
Sch_Repl(S, 'aw', chr(128));
Sch_Repl(S, chr(128)+'s', chr(129));
Sch_Repl(S, chr(128)+'f', chr(130));
Sch_Repl(S, chr(128)+'r', chr(131));
Sch_Repl(S, chr(128)+'x', chr(132));
Sch_Repl(S, chr(128)+'j', chr(133));
Sch_Repl(S, 'aa', chr(134));
Sch_Repl(S, chr(134)+'s', chr(135));
Sch_Repl(S, chr(134)+'f', chr(136));
Sch_Repl(S, chr(134)+'r', chr(137));
Sch_Repl(S, chr(134)+'x', chr(138));
Sch_Repl(S, chr(134)+'j', chr(139));
Sch_Repl(S, 'ee', chr(140));
Sch_Repl(S, chr(140)+'s', chr(141));
Sch_Repl(S, chr(140)+'f', chr(142));
Sch_Repl(S, chr(140)+'r', chr(143));
Sch_Repl(S, chr(140)+'x', chr(144));
Sch_Repl(S, chr(140)+'j', chr(145));
Sch_Repl(S, 'ow', chr(146));
Sch_Repl(S, chr(146)+'s', chr(147));
Sch_Repl(S, chr(146)+'f', chr(148));
Sch_Repl(S, chr(146)+'r', chr(149));
Sch_Repl(S, chr(146)+'x', chr(150));
Sch_Repl(S, chr(146)+'j', chr(151));
Sch_Repl(S, 'oo', chr(152));
Kü thuËt §å ho¹ m¸y tÝnh
109
Sch_Repl(S, chr(152)+'s', chr(153));
Sch_Repl(S, chr(152)+'f', chr(154));

Sch_Repl(S, chr(152)+'r', chr(155));
Sch_Repl(S, chr(152)+'x', chr(156));
Sch_Repl(S, chr(152)+'j', chr(157));
Sch_Repl(S, 'uw', chr(158));
Sch_Repl(S, 'w', chr(158));
Sch_Repl(S, chr(158)+'s', chr(159));
Sch_Repl(S, chr(158)+'f', chr(160));
Sch_Repl(S, chr(158)+'r', chr(161));
Sch_Repl(S, chr(158)+'x', chr(162));
Sch_Repl(S, chr(158)+'j', chr(163));
Sch_Repl(S, 'as', chr(164));
Sch_Repl(S, 'af', chr(165));
Sch_Repl(S, 'ar', chr(166));
Sch_Repl(S, 'ax', chr(167));
Sch_Repl(S, 'aj', chr(168));
Sch_Repl(S, 'es', chr(169));
Sch_Repl(S, 'ef', chr(170));
Sch_Repl(S, 'er', chr(171));
Sch_Repl(S, 'ex', chr(172));
Sch_Repl(S, 'ej', chr(173));
Sch_Repl(S, 'is', chr(174));
Sch_Repl(S, 'if', chr(175));
Sch_Repl(S, 'ir', chr(181));
Sch_Repl(S, 'ix', chr(182));
Sch_Repl(S, 'ij', chr(183));
Sch_Repl(S, 'os', chr(184));
Sch_Repl(S, 'of', chr(190));
Sch_Repl(S, 'or', chr(198));
Sch_Repl(S, 'ox', chr(199));
Sch_Repl(S, 'oj', chr(208));

Sch_Repl(S, 'us', chr(210));
Sch_Repl(S, 'uf', chr(211));
Sch_Repl(S, 'ur', chr(212));
Sch_Repl(S, 'ux', chr(213));
Sch_Repl(S, 'uj', chr(214));
Sch_Repl(S, 'ys', chr(215));
Sch_Repl(S, 'yf', chr(216));
Sch_Repl(S, 'yr', chr(221));
Sch_Repl(S, 'yx', chr(222));
Sch_Repl(S, 'yj', chr(248));
Sch_Repl(S, 'dd', chr(249));
Sch_Repl(S, 'DD', chr(250));
Sch_Repl(S, '~', '');
Kü thuËt §å ho¹ m¸y tÝnh
110
Vn := S;
End;
END.
b. TÖp Ch−¬ng tr×nh : chu_viet.PAS
Program Chu_viet;
Uses Crt,Graph,FontVN;
Var
gd,gm,i: integer;
st : String;
Begin
Clrscr;
st:=VN('Xin chafo casc bajn ! ');
Load_Text_Font;
writeln(st);
Readln;

gd:=0;
initgraph(gd,gm,' ');
Load_Graph_font;
directvideo:=False;
writeln(st);
moveto(0,240);
Out_Text(st);
Readln;
closegraph;
Load_Text_Font;
for i:=0 to 255 do write(chr(i):4);
readln;
UnLoadfont;
End.









×