1. Trang chủ
  2. » Công Nghệ Thông Tin

Đồ họa máy tính - Chương 1 Màn hình của máy tính - Bài 2 pptx

21 419 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 502,32 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mode D: A000 - A1F3F Về nguyên tắc có 2 cách để truy cập bộ nhớ màn hình và các thanh ghi + Cách 1: Sử dụng các dịch vụ ngắt của ROM BIOS, ROM BIOS cung cấp tương đối đầy đủ các chương

Trang 1

Do vậy tối đa chỉ có thể hiển thị được 4 trang

- Mode D: có 64000 pixel/ page Vì pixel ứng với một byte trên một bit plane do

đó cần 8000 byte/ bit plane/ page - một trang cần 32000 byte xấp xỉ 32kb/page do

đó tối đa chỉ có thể có 8 trang

- Người ta cũng có thể biết được địa chỉ đầu của mỗi trang trong từng chế độ làm việc của màn hình

Mode D: A000 - A1F3F

Về nguyên tắc có 2 cách để truy cập bộ nhớ màn hình và các thanh ghi

+ Cách 1: Sử dụng các dịch vụ ngắt của ROM BIOS, ROM BIOS cung cấp

tương đối đầy đủ các chương trình con ứng với các ngắt để phục

vụ cho công việc này

+ Cách 2: Truy cập trực tiếp đưa vào các địa chỉ của các cổng (port) thông

qua các ngôn ngữ lập trình Cách 1 đơn giản tuy nhiên có nhược điểm tốc độ truy nhập chậm

I Sử dụng các dịch vụ ngắt Int 10H của ROM BIOS

Dưới đây là một vài ngắt của ROM BIOS

1 Đưa một pixel vμo bộ nhớ mμn hình

input AH=0Ch AL=mμu BH=trang CX=x (cột)

Trang 2

BX=n (số hiệu thanh ghi mμu) Output: CH=độ kích hoạt mμu Green

CL=độ kích hoạt mμu Blue DH=độ kích hoạt mμu Red Type

RGB_COLOR_TYP = Record

Trang 3

BX=số hiệu thanh ghi mμu CH=độ kích hoạt mμu green CL=độ kích hoạt mμu Blue DH=độ kích hoạt mμu Red Type

Trang 5

col:=320; row:=240; color:=WHITE;

Trang 6

Writeln('3 mau cua thanh ghi mau WHITE la: ');

Writeln('Red: ',color.red,'; Green: ',color.green,'; Blue: ',color.blue);

II Hệ thống các thanh ghi của màn hình

Bộ nhớ màn hình dùng để chứa thông tin hay dữ liệu của điểm ảnh Để tạo ra màu sắc hiển thị điểm ảnh trên màn hình, màn hình còn có một hệ thống các thanh ghi (Register) tương đối phức tạp, các thanh ghi này cho phép người lập trình gián tiếp hoặc trực tiếp truy nhập, dưới đây chúng ta sẽ tìm hiểu sơ lược về hệ thống các thanh ghi của màn hình

Trang 7

Các thanh ghi của màn hình rất nhiều song có thể phân chia thành 6 nhóm cơ bản đó

Các thanh ghi còn lại được truy nhập gián tiếp thông qua thanh ghi địa chỉ (address Register) và thanh ghi dữ liệu (data Register) hai thanh ghi này có địa chỉ liên lạc thông qua địa chỉ cổng

Có thể minh hoạ:

Các thanh ghi trong nhóm thanh ghi thuộc tính không truy nhập theo phương pháp trên, dùng cùng một địa chỉ cổng để lấy địa chỉ và dữ liệu ở địa chỉ 3C0

Nhóm 1 (General hay External Register)

Nhóm này có 4 thanh ghi có độ dài 8 bit, nhiệm vụ của các thanh ghi nhóm này là thiết lập trạng thái cách thức kiểm tra chế độ làm việc của màn hình nhóm 1 cho ở bảng sau:

Tên thanh ghi Địa chỉ ghi vμo (Write) Địa chỉ đọc ra

Miscellaneous output 3C2 3CC

Feature control 3DA/3BA 3CA

Trang 8

Input Status #1 3DA/3BA 3DA/3CA

Nhóm 2 (Sequencer Register)

Nhóm này gồm 6 thanh ghi không có địa chỉ liên lạc với bộ nhớ, nó dùng một thanh

ghi trong nhóm làm thành địa chỉ, thanh ghi này chứa chỉ số của thanh ghi trong

nhóm cần truy nhập và một thanh ghi dữ liệu

Các thanh ghi của nhóm cho trong bảng sau:

Tên thanh ghi Chỉ số thanh ghi Địa chỉ ghi vμo Địa chỉ đọc ra

Trong số các thanh ghi của nhóm trên chúng ta quan tâm đến thanh ghi Map Mask

thanh ghi này có nhiệm vụ xác định bit plane đ−ợc truy cập Các thanh ghi trong

nhóm CRTC coi bộ nhớ màn hình là một dãy 32 bit Một thanh ghi 32 bit đ−ợc tạo

ra để liên hệ giữa các thanh ghi trong nhóm CRTC và bộ nhớ màn hình Mỗi lần đ−a

số liệu vào bộ nhớ màn hình 4 byte đ−ợc đ−a vào 4 bit plane Thanh ghi Map Mask

có nhiệm vụ xem bit plane nào đ−ợc sửa đổi Dạng của thanh ghi này nh− sau:

6 5 4 3 2 1

bj = 0 việc truy cập bit plane không cho phép

1 việc truy cập bit plane cho phép

Nhóm 3 (CRTC)

Nhóm này gồm 26 thanh ghi với EGA, 24 thanh ghi với VGA Chức năng của nhóm

này xác định các thông tin về số hàng, số cột, chiều cao, chiều rộng, của chế độ hiển

thị Nó đ−ợc truy cập thông qua thanh ghi địa chỉ và thanh ghi dữ liệu

Các thanh ghi của nhóm này cho trong bảng sau:

Trang 9

Start horizontal Blank 2 nt nt

end horizontal Blank 3 nt nt

Start horizontal Retrace 4 nt nt

end horizontal Retrace 5 nt nt

Start address high C nt nt

Start address low D nt nt

Cursor location hight E nt nt

Cursor location low F nt nt

Vertical Retrace start 10 nt nt

Vertical Retrace low 11 nt nt

Vertical Display end 12 nt nt

Underline location 14 nt nt

Start Vertical Blank 15 nt nt

End Vertical Blank 16 nt nt

Nhóm 4 (Graphics Controller Registers)

Nhóm này gồm 9 thanh ghi các thanh ghi trong nhóm đ−ợc truy cập thông qua

thanh ghi địa chỉ và thanh ghi dữ liệu

Trang 10

Set/Reset O 3cf 3cf Enable Set/Reset 1 3cf 3cf

Các thanh ghi Set/Reset, Enable Set/Reset và các bitplan có sự tương ứng 1-1 Thanh

ghi Set/Reset chứa khuôn mẫu cần ghi vào bit plane, enable Set/Reset chỉ ba bit

plane nào cần được sửa

Nhóm 5: (attribute controler Register)

Nhóm này gồm 21 thanh (EGA có 20 thanh) các thanh ghi của nhóm cho ở bảng

dưới đây:

Color plane enable 12 3CO 3C1

Horizontal pixel paning 13 3CO 3C1

Nhóm này có 16 thanh ghi palette mỗi thanh ghi palette được sử dụng để chuyển dữ

liệu từ bộ nhớ màn hình thành màu Mỗi thanh ghi palett có độ dài 16 bit (nó tạo từ

RAM) nó xác định giá trị tương ứng với pixel trong bộ nhớ màn hình Đối với VGA

các giá trị này lại là giá trị trỏ đến thanh ghi màu trong nhóm 256 thanh ghi màu

Khi hoạt động ở chế độ của VGA, thanh ghi palette chứa 6 bit, 6 bit này tạo ra địa

chỉ để trỏ vào một trong 64 thanh ghi màu

Mã màu trong thanh ghi pallette tạo theo nguyên tắc sau:

6 bit mã màu được chia thành hai nhóm Nhóm màu cơ bản RGB (3 bit)

Nhóm màu thay đổi cường độ của màu tương ứng R1G1B1 (3 bit)

Trang 11

Mỗi màu có 4 khả năng tạo từ các cặp R1R, G1G, B1B và do đó tất cả 64 màu Các

màu tạo ra theo tỉ lệ sau:

III Truy cập trực tiếp qua cổng và bộ nhớ màn hình

Việc truy nhập vào màn hình thông qua các dịch vụ ngắt của ROM BIOS rất chậm

không đáp ứng được các yêu cầu của các ứng dụng về đồ hoạ để tăng tốc độ truy

nhập người ta phải truy cập trực tiếp vào bộ nhớ màn hình thông qua các cổng (port)

1 Chế độ 320x200 256 màu

Đây là chế độ mode $13 và bộ nhớ màn hình được tổ chức thành mảng một chiều

(dạng gói) gồm có 320x200=64000 phần (tương đương 64K) tử mỗi phần tử là một

byte Bộ nhớ của máy chủ dành cho bộ nhớ màn hình là 64K từ A000:0000 đến

A000:FFFF (65536 byte hay 64KB), để vẽ một điểm có toạ độ (x,y) lên màn hình ta

chỉ cần gán Mem[$A000:320*y+x]:=Color; Còn để đọc màu của một điểm có toạ

độ (x,y) trên màn hình ta chỉ cần gán Color:=Mem[$A000:320*y+x];

Sau đây là các thủ tục đọc ghi :

Const Buffer: Word = $A000;

Procedure writepixel(col,row,color: integer);

Var address : Word;

Begin

address:=320*row+col;

Mem[Buffer: address]:=color;

End;

Function readpixel(col,row: integer): Byte;

Var address : Word;

Giả sử ở các mode 16 màu (D,E,10,12 là các chế độ 4 bit plane) màn hình có độ

phân giải n x m (n số cột, m số hàng) để xác định vị trí của byte chứa pixel có toạ độ

(x,y) ta có thể xác định theo công thức:

k = y * n div 8 + x div 8

Vị trí của bit liên quan đến pixel có toạ độ (x,y) được xác lập theo công thức:

Trang 12

Vị trí bit = 7 - (x mod 8)

Ví dụ: ở chế độ phân giải 640 x 480 pixel có toạ độ (100,100)

byte chứa thông tin của pixel là byte thứ k

k=100x640 div 8 + 100 div 8= 8000+12=8012

Vị trí của bit trong byte thứ k

l=7-(x mod 8) (phần d− x chia cho 8)

Để tăng tốc độ tính toán ta dùng phép đẩy phải (Shr) thay cho thay cho phép lấy phần d− (Mod)

Để ghi ra màn hình trong chế độ 4 bit plane chúng ta phải ghi đồng thời 8 điểm, mỗi

điểm gồm có 4 bit màu và 4 bit màu đó lại nằm trong 4 byte ở cùng vị trí giống nh−

ở bảng trên Ta hãy xem lại nhóm 2 (Sequencer Register), trong nhóm này thanh ghi

số 2 (Map Mask) sẽ xác định bit plane nào đ−ợc truy cập:

Tên thanh ghi Chỉ số thanh ghi Địa chỉ ghi vμo Địa chỉ đọc ra

Mỗi lần đ−a số liệu vào bộ nhớ màn hình, 4 byte đ−ợc đ−a vào 4 bit plane Thanh

ghi Map Mask có nhiệm vụ xem bit plane nào đ−ợc sửa đổi Dạng của thanh ghi này

nh− sau:

0001, 0010, 0100, 1000

để truy nhập vào một bit plane ta cần hai lệnh

Lệnh 1 : xác định thanh ghi cần truy nhập là thanh ghi mapmask

Lệnh 2 : đ−a số liệu bit plane cần truy cập vào thanh ghi mapmask

Hai lệnh có dạng:

port[$3C4]:=2; (Vào thanh ghi cần truy cập)

port[$3C5]:= n; (đ−a số liệu bitplan cần truy cập vào thanh ghi Mapmask)

(n=1,2,4,8)

Và ta cần 4 lần nh− vậy để truy cập vào 4 bit plane

Thủ tục ghi 8 điểm ra màn hình bằng 4 byte :

Procedure write_8_pixel(x,y: integer; Var b: four_byte);

Var

Trang 13

đ−a số liệu ra :

Để thực hiện phép đọc một bit plane nào đó chúng ta cần có hai lệnh:

Lệnh 1 Xác định số hiệu của thanh ghi trong nhóm cần truy nhập

four_byte = array[0 3] of Byte;

Thủ tục đọc 8 điểm trên màn hình vào 4 byte :

Procedure read_8_pixel(x,y: integer; Var b: four_byte);

Thủ tục vẽ một điểm : để vẽ một điểm trên màn hình ta đọc 4 byte liên quan đến

điểm đó (4 byte ứng với 8 điểm có chứa điểm cần vẽ), mà vị trí của điểm cần vẽ

Trang 14

trong 8 điểm đánh số từ 0 đến 7 là p=7-(x mod 8), sau đó ta thay bit thứ p của mỗi byte trong 4 byte đó bằng bit màu cần vẽ (bằng cách đổi màu cần vẽ điểm ra cơ số 2

If ma[i]=0 Then b[i]:=b[i] And ($FF-m)

Else b[i]:=b[i] Or ma[i]; End;

Trang 15

Procedure write_8_pixel(x,y: integer; Var b: four_byte);

Trang 16

Else b[i]:=b[i] Or ma[i];

Ví dụ 5: Đọc dữ liệu từ chế độ 4 bit plane thông qua các cổng của các thanh ghi

Đoạn chương trình sau mô tả cách đọc một điểm ảnh từ bộ nhớ màn hình

Trang 17

tử (mỗi phần tử là 1 byte, mỗi byte ứng với 1 pixel) và do đó ta cần có 5 mảng đánh

số từ 0 đến 4 để có thể chứa đ−ợc 640x480 byte Mỗi một mảng nh− vậy gọi là một Bank (dải), nh− vậy một bank 64K đúng bằng 64K mà bộ nhớ của máy chủ dành cho màn hình, mà có 5 bank nh− vậy (do đó bộ nhớ màn hình phải có ít nhất là 64K

x 5 = 320K thì mới có thể đặt đ−ợc chế độ này) và bộ nhớ của máy chủ chỉ có thể

ánh xạ vào một bank của bộ nhớ màn hình và để cho bank (từ 0-4) nào đ−ợc ánh xạ

Một điểm có toạ độ (x,y) trên màn hình sẽ là điểm thứ linear_address:=y*640+x;

Mà mỗi một bank có 65536 điểm nên điểm đó sẽ nầm ở bank thứ

bank_num:=linear_address Div 65536; và địa chỉ của điểm đó ở bank này là

Trang 19

Ví dụ 7: đọc nội dung thanh ghi màu thông qua cổng

Trang 20

Writeln('3 mau cua thanh ghi mau WHITE la: ');

Writeln('Red: ',color.red,'; Green: ',color.green,'; Blue: ',color.blue);

Ngày đăng: 24/07/2014, 10:21

TỪ KHÓA LIÊN QUAN