Lập trình phối ghép với màn hình

Một phần của tài liệu Lập trình hệ thống và điều khiển thiết bị (Trang 133 - 137)

CHƯƠNG 4: LẬP TRÌNH PHỐI GHÉP

4.2 MỘT SỐ LẬP TRÌNH PHỐI GHÉP CƠ BẢN

4.2.2 Lập trình phối ghép với màn hình

Bộ nhớ Video

Màn hình của máy tính hiện đại ngày nay đều sử dụng bộ nhớ video (bộ nhớ màn hình) để chứa nội dung hình ảnh được hiển thị và các thông tin liên quan. Bộ nhớ video còn được gọi là bộ đệm khung (frame buffer). Từ thế hệ Pentium, bộ vi xử lý còn có cổng ga tốc đồ họa AGP (Accelerated Graphics Port) Cổng này cho phépbộ vi xử lý dồ họa truy cập trực tiếp vào bộ nhớ hệ thống cho các phép tính đồ họa nhưng vẫn có bộ nhớ video riêng để lưu trữ nội dung các điểm ảnh màn hình. Phương pháp này cho phép sử dụng bộ nhớ hệ thống mềm dẻo hơn mà không làm ảnh hưởng tới tốc độ máy tính. Cổng AGP ngày nay trở thành chuẩn trong các máy tính hiện đại.

Dưới đây là bảng dung lượng bộ nhớ video và khả năng hiển thị màn hình.

Dung lượng bộ nhớ

Kích thước màn hình Chiều sâu mầu Số màu 1MB 1024x768

800x600

8-bit 16-bit

256 65,536 2MB 1024x768

800x600 1280x1024

8-bit 16-bit 24-bit

256 65,536 16.7 million

4MB 1024x768 24-bit 16.7 million

6MB 1280x1024 24-bit 16.7 million

8MB 1600x1200 32-bit 16.7 million

Bộ chuyển đổi số/tương tự

Tín hiệu ra màn hình không phải dạng số mà là dạng tín hiệu tương tự. Tín hiệu ra phải đi qua một bộ biến đổi bộ nhớ tương tự/ số (RAMDAC- RAM Digital Analog Converter) đọc nội dung bộ nhơ video rồi chuyển sang tín hiệu tương tự. Qua trình này lặp lại theo tần số làm tươi màn hình.

Bộ xử lý Video

Bộ xử lý video biên dịch và thực hiện lệnh đồ họa thành từng điểm ảnh cụ thể để đưa ra RAMDAC. Bộ vi xử lý video có cấu trúc hoàn chỉnh và phức tạp như một bộ vi xử lý thực sự.

Nhờ có bộ xử lý video nên đã giảm tính toán cho từng điểm ảnh để hiển thị đối với bộ xử lý.

Thay vào đó CPU chỉ cần truyền tham số căn bản của đối tượng cần hiển thị sang bộ xử lý video.

Bộ xử lý video sẽ tính từng điểm ảnh cần hiển thị từ các tham số nhận được, giải phòng CPU khỏi nhiệm vụ này.

Đồ họa ba chiều

Để phần mêm bắt kịp được với phần cứng trong quá trình phát triển của hiển thị đồ họa ba chiều, các hệ điều hành cung cấp một thư viện giao diện lập trình ứng dụng (Application Programming Interface). Giống như BIOS, API cung cấp các lệnh đồ họa chuẩn ra các chương trình xử lý video thay vì lập trình trực tiếp nó. Phần mềm điều khiển sẽ phải biên dịch tiếp nhưng lệnh này sang lệnh máy.

b. Ví dụ về Lập trình phối ghép màn hình

Dưới đây là một số ví dụ về lập trình màn hình có sử dụng các chức năng và dịch vụ do BIOS cung cấp đã trình bày ở phần 3.4.1.

Ví dụ 1: In ra màn hình 256 kí tự của bảng mã ASCII, mỗi kí tự có một thuộc tính khác nhau trong chế độ text.

.MODEL Tiny .CODE

Org 100h Jmp Start Start:

Mov AL,0

Mov BL,0 ; thuoc tính 0 vơi ki tu co ma ASCII =0 Mov DL,0 ; DL= so cot, bat dau tu cot 0

Mov DH,4 ; Bat dau tu hang thu 4 Mov CX, 255 ; in 256 kí tự

InTiep:

Push AX Mov AH,2

Int 10h ; dat vi tri con tro Pop AX

Mov AH,9 ; in ki tu trong AL voi thuoc ; thuoc tinh trong BL

Push AX Push CX

Mov CX,1 ; in 1 ki tu Int 10h

Pop CX Pop AX

Inc AL ; ki tu ke tiep Inc BL ; thuoc tinh ke tiep Inc DL ; sang cot ben canh

Cmp DL,79 ; Cot cuoi cung?

Jb TiepTuc

Mov Dl,0 ; xuong dong ke tiep Inc DH

TiepTuc:

Loop InTiep Int 20h

End Start

Ví dụ 2: Vẽ một hình chữ nhật trong chế độ đồ họa VGA

.MODEL Tiny .CODE

Org 100h Jmp Start TopRow dw 100 TopCol dw 100 BotRow dw 400 BotCol dw 600

Color db 4 ; mau do Start:

Mov AH,0h ; thiet lap che do do hoa Mov AL,12h ; VGA mode

Int 10h

Mov CX, BotCol Sub CX,TopCol Mov SI,TopRow Mov DI,TopCol

; Ve cach tren TopSide:

Call DrawPixel ; goi chuong trinh con ve diem anh Inc DI ;

Loop TopSide Mov CX, BotRow Sub CX, TopRow Mov SI, TopRow

; Ve cach 2 canh ben Side:

Mov DI, TopCol

Call DrawPixel ; goi chuong trinh con ve diem anh Mov DI, BotCol

Call DrawPixel ; goi chuong trinh con ve diem anh Inc SI

Loop Side Mov CX, BotCol

Sub CX,TopCol Mov SI, BotRow Mov DI, TopCol

; Ve cach duoi BotSide:

Call DrawPixel ; goi chuong trinh con ve diem anh Inc DI ;

Loop BotSide

Mov AH, 1 ; Cho 1 phim go vao Int 21h

Mov AH,0 Mov AL,2 Int 10h Int 20h

; chuong trinh con ve 1 diem anh DrawPixel Proc

Push AX Push CX Push DX Mov DX, SI Mov CX,DI Mov AL, Color Mov AH,0CH Int 10h Pop DX Pop CX Pop AX Ret

DrawPixel Endp End Start

Ví dụ 3: Viết một điểm ảnh trực tiếp vào bộ nhớ hiển thị (không thông qua RAM).

Đây là cách nhanh nhất, tuy nhiên thủ tục viết vào bộ nhớ hiển thị phụ thuộc vào loai card điều khiển màn hình cụ thể.

Chương trình sau được thực hiện trong chế độ đồ họa (640x200x2).

VeDiemAnh Proc Near

; DX=hàng, CX= cột

; ES=B800H

; Giả sử chế độ đồ họa đã được khởi tạo như sau:

; AH=0, AL=6, Int 10h

Xor BX,BX ; BX=0

SHR DX,1 ; kiem ta xem diem anh o dong chan hay le Add BX, 8*1024 ; o dong chan

TinhTiep:

Mov AX,DX ; DX =so hang Mov CL,2

SHL DX,CX ; DX=DX*4 Add DX,AX ; DX=5*DX Mov AX,CX

Mov CL,4

SHL DX,CL ; DX=DX*16

Add BX,DX ; BX=offset cua dong chua diem anh Mov DX,AX

AND DX,7 ; DX=DX Mod 8 = vi tri byte tren dong Mov CL,3 ; no chua diem anh

SHR AX,CL; AX=AX div 8= vi tri byte tren dong Add, BX,AX ; [BX] la byte chua diem anh

NEG DL Add DL,7 Mov CL,DL Mov AL,1 SHL AL,CL OR ES:[BX], AL Ret

VeDiemAnh Endp

Một phần của tài liệu Lập trình hệ thống và điều khiển thiết bị (Trang 133 - 137)

Tải bản đầy đủ (PDF)

(147 trang)