66 CHƯƠNG 10 : VIDEO Phần thể hiện hình ảnh của máy vi tính bao gồm 2 phần : - Màn hình : monitor - Mạch điều khiển : display adapter 10.1MONITOR Màn hình của máy vi tính có cấu tạo giống như một tivi gia dụng bình thường Nhưng monitor của máy vi tính không có bộ phận bắt sóng và giải điều chế tín hiệu video của các đài truyền hình.Một số monitor hiện nay có độ phân giải cao hơn các tivi gia dụng rất nhiều . Monitor nhận tín hiệu điều khiển từ mạch điều khiển bao gồm các thông số : - Tín hiệu màu (thay đổi tùy theo các loại monitor khác nhau) - Độ sáng - Xung đồng bộ quét dòng và quét mành 10.2DISPLAY ADAPTER Mạch điều khiển màn hình là một bìa mạch được gắn thêm vào main board bằng cách cắm vào một slot mở rộng. Trung tâm của bìa mạch là một chip điều khiển có khả năng hoạt động với nhiều mode khác nhau theo các tham số được xác đònh từ chương trình của chúng ta. Bìa mạch này được trang bò một vùng RAM để lưu chứa thông tin của màn hình hiện tại.Vùng RAM này đươc gọi là video buffer.Video buffer là một vùng nhớ riêng của display adapter nhưng đồng thời cũng được CPU truy nhập như một phần thuộc về memory của mình . Trên các máy IBM PC/XT/AT, một vùng đòa chỉ rộng lớn ( 128 KB ) được dành riêng cho video buffer bắt đầu từ A000:0000 đến B000:FFFF . Thông qua video buffer chương trình của chúng ta xác đònh màn hình hiện tại bằng cách ghi vào đó các mô tả theo những quy đònh riêng . Display adapter theo một chu kỳ đều đặn sẽ đọc từ đầu đến cuối video buffer và hiển thò các thông tin ấy thành các hình ảnh tương ứng trên màn hình. Các hình ảnh trên màn hình được tạo thành từ tập hợp các điểm sáng với độ sáng (đậm nhạt) và sắc độ (màu sắc) khác nhau . Trong một số trường hợp, các điểm sáng chỉ thể hiện một trong hai trạng thái sáng hoặc tối . Một màn hình được chia thành nhiều dòng, mỗi dòng là tập hợp các điểm liên tiếp nhau theo thứ tự từ trái sang phải . Kế tiếp điểm cuối của một dòng là điểm đầu của dòng kế tiếp . Tương ứng với vò trí của các điểm trên màn hình là các phần tử thuộc video buffer, giá trò của các phần tử này sẽ xác đònh thuộc tính (attribute) của các điểm sáng ấy . Kích thước của các phần tử thuộc video buffer thay đổi theo số các trạng thái một điểm thuộc màn hình thể hiện được . Thí dụ : Để biểu diễn hai trạng thái sáng và tối chỉ cần một bit Để biểu diễn 16 màu khác nhau cần đến 4 bit ( 2 4 = 16 ) Các loại display adapter thông dụng : - Monochrome Display Adapter (MDA) - Color Graphics Adapter (CGA) - Hercule Graphics Adapter (Hercule) - Enhanced Graphics Adapter (EGA) - Video Graphics Array adapter (VGA) 10.3ĐỘ PHÂN GIẢI 67 Số điểm trên một dòng và số dòng hiển thò của một hình ảnh sẽ quyết đònh độ nét của hình ảnh ấy . Càng nhiều điểm, càng nhiều dòng, hình ảnh càng mòn, càng rõ nét . Độ phân giải của một hình ảnh được biểu thò bằng tích số của số điểm trên một dòng và số dòng của hình ảnh đó . Chất lượng hình ảnh theo tiêu chuẩn trên tùy thuộc vào cả màn hình lẫn bìa điều khiển . Song song với độ phân giải, số lượng màu sắc có thể thể hiện được cũng ảnh hưởng nhiều đến chất lượng của hình ảnh. 10.4MODE HIỂN THỊ CỦA DISPLAY CARD 10.4.1Graphic mode Theo nguyên lý nêu trên, để tạo ra bất cứ hình ảnh nào, chương trình của chúng ta phải mô tả từng điểm với đầy đủ các thuộc tính của chúng: màu sắc, dộ sáng . Điều kiện làm việc như vậy của display card được gọi là graphic mode. Để ghi nhận thông tin của một màn hình trong mode graphic, cần phải dùng đến khá nhiều phần tử nhớ . Với một số lượng bộ nhớ xác đònh của video buffer, ta có thể chọn các khuynh hướng sau : Thể hiện một hình ảnh có độ phân giải cao, với các điểm ảnh chỉ có hai thuộc tính : sáng hoặc không sáng . Theo phương pháp này, để mô tả một điểm ảnh ta chỉ cần một bit Thể hiện hình ảnh có độ phân giải thấp hơn, nhưng với các điểm ảnh có nhiều thuộc tính hơn tương ứng với nhiều màu khác nhau . Theo phương pháp này ta cần một tập hợp nhiều bit để mô tả một điểm ảnh. Thí dụ : 16 KB RAM có thể sử dụng cho 200x320 4 màu ( 2bit/điểm ) 200x640 4 màu ( 1bit/điểm ) Thông thường một display adapter có khả năng làm việc trong nhiều graphic mode khác nhau, với độ phân giải và số màu hiển thò khác nhau. 10.4.2Text mode Trong quá trình làm việc với máy tính không phải lúc nào ta cũng vẽ các đồ thò, các biểu đồ cùng các hình ảnh phức tạp. Phần lớn những gì ta cần thể hiện qua màn hình là các chuỗi nhắc nhở,các câu trả lời,các mệnh lệnh . mà phần lớn đều được tạo thành từ một tập hợp các ký hiệu chuẩn thí dụ như bộ mã ASCII . Để đáp ứng nhu cầu sử dụng trên tất cả các display adapter đều có thể làm việc trong một mode đặc biệt : text mode . Trong text mode, thay vì phải mô tả màn hình theo từng điểm, chúng ta chỉ cần mô tả các ký tự được hiển thò trên đó thông qua các mã ASCII tương ứng. Trong text mode, màn hình được quan niệm như là tập hợp từng dòng các ký tự liên tiếp . Tương ứng với mỗi ký tự là một phần tử thuộc video buffer . Mỗi phần tử này gồm hai byte đi liền nhau : - Byte thứ nhất là mã ASCII của ký tự - Byte thứ hai là thuộc tính của ký tự Thực sự,trong text mode video adapter đã chia màn hình thành nhiều ô hình chữ nhật bằng nhau.Số lượng các điểm trong một ô được xác đònh bằng tích số các điểm trên một hàng ngang với các điểm trên một hàng dọc.Tích số này gọi là kích cỡ của ký tự (character size) Thí dụ : 8x8, 8x14, 9x14, 9x16 Mỗi ký tự được thể hiện bằng cách xác đònh các thuộc tính khác nhau cho các điểm thuộc ô chữ nhật ấy . Sẽ có hai thuộc tính cho các điểm trong một ô : Thuộc tính thứ nhất gọi là thuộc tính nền, dành cho các điểm không vẽ nên hình ảnh của ký tự. Thuộc tính thứ hai gọi là thuộc tính ký tự, dành cho các điểm vẽ nên hình ảnh của ký tự. 68 Cả hai thuộc tính trên được mô tả trong cùng một byte : đó là byte thuộc tính . Cấu trúc một byte thuộc tính như sau : 7 6 5 4 3 2 1 0 fgB back ground brt fore ground foreground attribute (ký tự) Intensity: 1=foreground is bright background attribute ( nền ) Blink: 1=foreground flashes Text-attribute = background + foreground*16 (cộng thêm 128 nếu nhấp nháy) Mô tả chi tiết các điểm tạo nên hình ảnh các ký tự được lưu trong một chip ROM gắn trên video card . Với mỗi mã ASCII, video adapter sẽ xem mô tả tương ứng trong ROM và sẽ hiển thò chúng một cách tự động với màu sắc quy đònh bởi byte thuộc tính đi kèm . Mỗi màn hình trong text mode sẽ cần đến max-row*max-col*2 byte . Với max-row và max-col là kích thước của màn hình trong text mode . Display adapter chia video buffer thành nhiều trang, mỗi trang chứa thông tin của một màn hình . Tại mỗi thời điểm xác đònh,display adapter sẽ hiển thò thông tin của một trang gọi là trang hiện hành . Việc xác đònh trang hiện hành được thực hiện bằng cách chỉ đònh điểm đầu trang cho display adapter. Con trỏ (cursor) là đặc điểm riêng của text mode . Con trỏ được tạo thành bằng cách cho tất cả các điểm trên một số dòng liên tiếp của một ô chữ nhật (tương ứng với một ký tự) thuộc tính foregound trong từng khoảng thời gian xen kẽ . Kết quả là sẽ xuất hiện một hình chữ nhật nhấp nháy - Dòng đầu tiên từ trên xuống ( đánh số từ 0 ) gọi là start line - Dòng cuối cùng gọi là end line Đối với text mode,có hai loại display adapter chính: Monochrome và COLOR 10.4.2.1Monochrome adapter Cho phép hiển thò các ký tự trên màn hình Monochrome (đơn sắc) với các đặc điểm : - Adapter sử dụng : MDA & Hercule - Video buffer size : 4 Kb - Screen size : 25x80 (25 dòng, 80 cột) 1 trang - Character size : 9x14 - Video buffer bắt đầu tại đòa chỉ 0B000:0000 Ký tự có thể có các thuộc tính : Attribute code 01 Underline 07 Normal (White on Black) 09 Bright Underline 0F Bright 70 Reverse 81 Blinking Underline 87 Blinking Normal 89 Blinking Bright Underline 8F Blinking Reverse 69 Đối với Monochrome adapter chuẩn, video buffer có kích thước là 4 Kb do đó chỉ đủ lưu chứa 1 trang màn hình ( 25x80x2 = 4000 ). 10.4.2.2Color adapter Cho phép hiển thò các ký tự trên màn hình Color với các đặc điểm : - Adapter sử dụng : CGA, EGA & VGA - Video buffer size : 16 Kb - Screen size : 25x40 (25 dòng, 40 cột) 8 trang 25x80 (25 dòng, 80 cột) 4 trang - Character size : 8x8 - Video buffer bắt đầu tại đòa chỉ 0B800:0000 Cho phép hiển thò 8 màu cho thuộc tính nền ( Bảng 1 ) và 16 màu cho thuộc tính ký tự ( Bảng 1 & 2 ) (8 màu của bảng 1 phối hợp với bit độ sáng bằng 1) Color code Color code Intensity-bit=1 0 Black 8 Gray 1 Blue 9 Light Blue 2 Green 10 Light Green 3 Cyan 11 Light Cyan 4 Magenta 12 Light Magenta 5 Red 13 Light Red 6 Brown 14 Yellow 7 White 15 Light White Bảng 1 Bảng 2 10.5INTERRUPT 010H ROM BIOS của các máy vi tính IBM PC cung cấp cho chúng ta một số chức năng tiện dụng để điều khiển display adapter như thay đổi mode, đònh vò trí con trỏ, in các ký tự . Dưới đây là một số các chức năng thông dụng cho tất cả các loại màn hình 10.5.1Chọn mode làm việc : Input : AH = 00 AL = mode Output : None Tham số của chức năng 0 AL Type Format Colors Adapter Addr Monitor 0 text 40x25 16/8 CGA,EGA B800 Composite 1 text 40x25 16/8 CGA,EGA B800 Comp,RGB,Enhanced 2 text 80x25 16/8 CGA,EGA B800 Composite 3 text 80x25 16/8 CGA,EGA B800 Comp,RGB,Enhanced 4 graphic 320x200 4 CGA,EGA B800 Comp,RGB,Enhanced 5 graphic 320x200 4 CGA,EGA B800 Composite 6 graphic 640x200 2 CGA,EGA B800 Comp,RGB,Enhanced 7 text 80x25 3 MDA,EGA B000 Monochrome 0Dh graphic 320x200 16 EGA A000 RGB,Enhanced 70 0Eh graphic 640x200 16 EGA A000 RGB,Enhanced 0Fh graphic 640x350 3 EGA A000 Enhanced,Monochrome 10h graphic 640x350 4 or 16 EGA A000 Enhanced 10.5.2Đònh hình dạng con trỏ Input : AH = 01 CH = start line CL = end line Output : None Nếu CH = 020h --> con trỏ sẽ không xuất hiện trên màn hình . 10.5.3Đònh vò trí con trỏ Input : AH = 02 BH = trang hiện hành DH,DL = row,col (row,col tính từ 0 trở đi) Output : None 10.5.4Đọc vò trí con trỏ Input : AH = 03 BH = trang hiện hành Output : DH,DL = row,col CH,CL = start,end line 10.5.5Chọn trang hiển thò Input : AH = 05 AL = trang Output : None 10.5.6 Scroll window up Scroll window down Input : AH = 06 Input : AH = 07 CH,CL = tọa độ thứ 1 CH,CL = tọa độ thứ 1 DH,DL = tọa độ thứ 2 DH,DL = tọa độ thứ 2 AL = số dòng trôi lên AL = số dòng trôi xuống BH = thuộc tính BH = thuộc tính Output : None Tọa độ thứ 1 : row,col của góc trái trên Tọa độ thứ 2 : row,col của góc phải dưới Tác vụ này sẽ tònh tiến các dòng ký tự trong cửa sổ lên hoặc xuống, các dòng xuất hiện do việc “trôi” lên hay xuống sẽ được điền kín bằng mã 020h với thuộc tính trong BH Nếu AL = 0, toàn bộ cửa sổ (window) sẽ được điền kín bằng mã 020h với thuộc tính trong BH . Trường hợp này thường được dùng để xóa và đònh lại thuộc tính màu cho một phần hoặc toàn bộ màn hình. 10.5.7Đọc ký tự tại vò trí con trỏ Input : AH = 08 BH = trang cần đọc 71 Output : AL = ký tự AH = thuộc tính Mặc dù chỉ có một con trỏ duy nhất về mặt vật lý,mỗi trang màn hình có một cặp giá trò để ghi nhớ vò trí con trỏ của riêng từng trang màn hình . Mỗi khi có sự thay đổi trang màn hình, con trỏ vật lý sẽ được cập nhật vò trí ngay lập tức theo giá trò tương ứng. 10.5.8In ký tự tại vò trí con trỏ Input : AH = 09 BH = trang cần ghi AL = ký tự CX = số lần lặp lại BL = thuộc tính Chức năng này in một hay nhiều ký tự giống nhau (mã ASCII trong AL) liên tiếp trên màn hình . Ký tự đầu tiên được in tại đòa chỉ hiện thời của con trỏ . 10.5.9Đọc mode hiện tại Input : AH = 0F Output : AL = current mode AH = số ký tự trên một hàng BH = trang hiện thời 10.5.10In một chấm (pixel) trong graphics mode Input : AH = 0C BH = Video page CX = hàng DX = cột AL = color value (nếu bit 7 = 1 --> XOR với điểm hiện tại) 10.5.11Đọc một chấm (pixel) trong graphics mode Input : AH = 0D BH = Video page CX = hàng DX = cột Output : AL = color value 10.6BIOS DATA OF INTERRUPT 010H Các thông số về màn hình hiện thời được BIOS lưu giữ trong một vùng nhớ riêng từ đòa chỉ 0:0449 đến 0:0466 với cấu trúc như sau : Address Size Content 0:0449 1 Mode hiện thời . 0:044A 2 Bề rộng của màn hình ( tính theo số ký tự trên một hàng ) 0:044C 2 Kích thước của video buffer 0:044E 2 offset của trang màn hình hiện tại 0:0450 10H 8 cặp vò trí của con trỏ tương ứng với 8 trang màn hình 72 mỗi cặp vò trí gồm byte đầu cho cột,byte kế tiếp cho hàng 0:0460 2 Kích thước con trỏ (end-line và begin-line) 0:0462 1 Màn hình hiện thời ( page number = 0 . 7 ) 0:0463 2 port address for 6845 video controller chip 0:0465 1 current value of 6845 video control register CRT-MODE 0:0466 1 current value of 6845 video control register CRT-PALETTE 10.7MỘT SỐ THÍ DỤ Giả sử chúng ta chỉ sử dụng trang 0 10.7.1Xác đònh video buffer Test-V-Seg proc near mov ah,0Fh int 010h mov V-seg,0B800h cmp al,7 jne TVS-1 mov V-seg,0B000h TVS-1: ret Test-V-Seg endp V-seg dw 0 10.7.2In ra màn hình trực tiếp WSCR proc near ; dh = row ; dl = col ; ah = Color ; DS:SI = Đòa chỉ buffer cần in ( kết thúc bằng mã 0 ) cld push di push si push es mov bx,V-seg ; Biến chứa Video segment mov es,bx push ax mov ah,dh mov al,80 mul ah mov di,ax xor dh,dh add di,dx shl di,1 ; DI = (row*80+col)*2 pop ax ; AH = Color WSCR-1: lodsb ; Lấy ký tự vào al 73 or al,al jz WSCR-2 ; nếu là mã 0 thì kết thúc stosw ; Đưa ký tự và thuộc tính ra video jmp WSCR-1 ; buffer WSCR-2: pop es pop si pop di ret WSCR endp . address for 6845 video controller chip 0:0465 1 current value of 6845 video control register CRT-MODE 0:0466 1 current value of 6845 video control register. đòa chỉ rộng lớn ( 128 KB ) được dành riêng cho video buffer bắt đầu từ A000:0000 đến B000:FFFF . Thông qua video buffer chương trình của chúng ta xác đònh