74 CHƯƠNG 11 : VIDEOCONTROLLER Các Display Adapter ban đầu ( MDA và CGA ) của IBM PC/XT/AT dựa trên nguyên lý của chip Motorolla 6845 . Các Display Adapter kế tiếp như EGA,MCGA,VGA . tuy hoạt động trên nguyên lý khác, nhưng các adapter này vẫn duy trì phần lớn các tính chất của chip 6845 . Do đó, trong text mode, các điều khiển của 6845 đều tương thích với tất cả các Display Adapter trên IBM PC/XT/AT. 11.1COLOR GRAPHICS ADAPTER 11.1.1Cấu trúc video buffer 11.1.1.1Trong text mode Xem chương 10 11.1.1.2Trong graphics mode Video buffer có kích thước 16 KB, cho phép thể hiện : - Độ phân giải cao 640x200 với một màu thể hiện . Mỗi điểm sáng (pixel) cần một bit thông tin ==> một dòng cần 640/8 = 80 byte - Độ phân giải trung bình 320x200 với 4 màu thể hiện . Mỗi điểm sáng cần hai bit thông tin.==>một dòng cần 320*2/8 = 80 byte - Thông tin về một dòng được ghi liên tiếp nhau trong một dãy 80 byte ( 640 bit ) theo thứ tự thể hiện trên màn hình ( xem hình minh họa ) - Video buffer ( 16 KB ) được chia thành 2 trang nhỏ liên tiếp nhau đánh số từ 0-1, mỗi trang có kích thước 1000h byte. Thông tin của các dòng được lưu trong các trang theo quy tắc: các dòng chẵn ở trong trang 0, các dòng lẻ ở trong trang 1 Tức là : - Trang 0 chứa thông tin các dòng 0,2,4,6,8,10 . - Trang 1 chứa thông tin các dòng 1,3,5,7,9,11 . Minh họa về cách lưu chứa thông tin trong video buffer (1 bit/pixel) Byte thứ 1 Byte thứ 2 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F (2 bit/pixel) Byte thứ 1 Byte thứ 2 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 1 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 00 01 02 03 04 05 06 07 (1): Số thứ tự của các byte trong dãy giá trò biểu diễn cho một dòng (2): Thứ tự các bit trong byte và vò trí vật lý trong chuỗi giá trò (3): Giá trò của các bit (4): Thứ tự các điểm sáng tương ứng trên dòng . 11.1.2CGA I/O port 75 3D4 Output Address Register (Index register) 3D5 I/O Data register (18 internal registers) 3D8 Output Mode register 3D9 Output Color register 3DA Input Status register 3DB Output Clear Light Pen Latch 3DC Output Set Light Pen Latch Mode register Color register Status register B0 = 80x25 text B0 = Blue B0 = Horizontal Sync | B1 = 320x200 graphics B1 = Green B1 = Light Pen Trig’d| B2 = B&W mode B2 = Red B2 = Pen Switch off | B3 = Enable video B3 = Intensity B3 = Vertical Sync | B4 = 640x200 graphics B4 = Alt Back colors B4 = Not used | B5 = Blinking B5 = Palette B5 = Not used | B6 = Not used B6 = Not used B6 = Not used | B7 = Not used B7 = Not used B7 = Not used | 11.1.3Mode register programming Video mode Mode register value 40 x 25 Alpha B&W 2Ch 00101100 40 x 25 Alpha Color 28h 00101000 80 x 25 Alpha B&W 2Dh 00101101 80 x 25 Alpha Color 29h 00101001 320 x 200 Graphics B&W 0Eh 00001110 320 x 200 Graphics Color 0Ah 00001010 640 x 200 Graphics B&W 1Eh 00011110 11.1.4Color register programming : Các bit 0-3 (tạo thành 16 màu) của Color register xác đònh : - Trong text mode : màu của khung viền xung quanh màn hình (border) - Trong graphics mode : màu nền (background color), dùng chọn màu hiển thò cho 640x200 graphics mode. Bit 4 : khi bằng 1 sẽ làm màu nền trong text mode được xác đònh bởi các bit 4-7 ( bao gồm cả bit 7 ) . Kết quả là màu nền có thể có 16 màu khác nhau, và thuộc tính nhấp nháy (Blinking) không còn nữa Bit 5 : Chọn bảng màu (color palette) cho 320 x 200 color graphics mode Bit 5 = 1 Bit 5 = 0 Pixel value Color Pixel value Color 00 Background color 00 Background color 76 01 Cyan 01 Green 10 Magenta 10 Red 11 White 11 Brown 11.1.5Using Status register information : Horizontal Sync : xung đồng bộ cho tín hiệu quét dòng của màn hình Vertical Sync : xung đồng bộ cho tín hiệu quét mành của màn hình Trong 1 giây có khoảng 50-70 (tùy loại màn hình) mành được thể hiện. Mỗi mành lại có : - 200 dòng (CGA) - 348 dòng (Hercules graphics) - 350 dòng (EGA,Hercules text mode) - 480,600,768 dòng (VGA) Khi bit tương ứng với Horizontal hay Vertical Sync bằng 1, màn hình đang trong tình trạng “quét ngược” (retrace) . Việc truy nhập video buffer cùng lúc với Display adapter đôi khi tạo nên tình trạng xuất hiện các đốm sáng nhấp nháy (snow blinking) trong text mode . Để tránh tình trạng trên, tốt nhất là đừng truy nhập video buffer đồng thời với display adapter . Đó là các thời điểm màn hình đang trong tình trạng quét ngược. 11.1.6Internal registers Address Register Register type I/O 40x25 80x25 Graph| register Number Type Text| Text| mode| 00 R0 Horizontal Total W 38 71 38 01 R1 Horizontal Display W 28 50 28 02 R2 Horizontal Sync Position W 2D 5A 2D 03 R3 Horizontal Sync Width W 0A 0A 0A 04 R4 Vertical Total W 1F 1F 7F 05 R5 Vertical Total Adjust W 06 06 06 06 R6 Vertical Displayed W 19 19 64 07 R7 Vertical Sync Position W 1C 1C 70 08 R8 nterlace Mode W 02 02 02 09 R9 Maximum Scan Line Address W 07 07 01 0A R10 Cursor Start Scan Line W 06 06 06 0B R11 Cursor End Scan Line W 07 07 07 0C R12 Start address (Hi byte) W 00 00 00 0D R13 Start address (Lo byte) W 00 00 00 0E R14 Cursor address (Hi byte) R/W XX XX XX 0F R15 Cursor address (Lo byte) R/W XX XX XX 10 R16 Light pen (Hi byte) R XX XX XX | 11 R17 Light pen (Lo byte) R XX XX XX | Start address là vò trí của trang màn hình hiện tại (tính từ đầu video buffer) . Cự ly này được đo bằng word . Thực tế đó chính là số lượng các phần tử từ đầu buffer đến đầu trang hiện tại . Thí dụ : Tăng giá trò của start address lên 80 thì màn hình sẽ có vẻ như trôi lên một dòng, giảm giá trò của start address 80 thì màn hình có vẻ như trôi xuống một dòng . Nhưng kết quả của hai lần “trôi” lên 77 và xuống ấy là màn hình không hề bò thay đổi so với trước khi “trôi” . Thực chất ta chỉ thay đổi điểm bắt đầu của trang màn hình mà thôi . Chú ý : start address = begin offset/2 Cursor address là vò trí của con trỏ trong trang màn hình hiện tại. vò trí này tính theo số ký tự từ đầu trang hiện tại đến vò trí của con trỏ Thí dụ : cursor address = 130 trong text mode 80x25 tương ứng với dòng 1 cột 50 . Để đọc (lấy giá trò) hoặc ghi (gán giá trò) một thanh ghi ta thực hiện : - Đưa ra Index register (Bằng chỉ thò OUT) thứ tự của thanh ghi - Đọc hoặc ghi từ Data register Thí dụ : đọc vò trí con trỏ mov dx,03D4h ; DX = port of Index register mov al,14 ; Chọn R14 out dx,al inc dx ; DX = port of Data register in al,dx mov ah,al ; AH = Hi byte dec dx ; DX = port of Index register mov al,15 ; Chọn R15 out dx,al inc dx ; DX = port of Data register in al,dx ; AL = Lo byte ; AX = currsor address Thí dụ : đặt vò trí con trỏ (BX = vò trí con trỏ) mov dx,03D4h ; DX = port of Index register mov al,14 ; Chọn R14 mov ah,bh ; AH = Hi byte out dx,ax mov al,15 ; Chọn R15 mov ah,bl ; AH = Lo byte out dx,ax 11.2HERCULE GRAPHICS ADAPTER Đây là một display adapter được thiết kế để khắc phục khuyết điểm của MDA. Hearcule Graphics Adapter cho phép thể hiện text mode hoàn toàn tương thích với MDA, đồng thời cung cấp khả năng hiển thò graphics trên màn hình monochrome . Với video buffer 64KB,Hercule Graphics Adapter cho phép thể hiện hai trang màn hình đồ họa với độ phân giải của mỗi trang là 720x348. Hercule Graphics Adapter không do IBM thiết kế, do đó trong các thủ tục chuẩn của ROM BIOS không có các chức năng dành riêng cho Hercule Graphics mode . Các phần mềm có khai thác đến khả năng đồ thò trên Hercule Graphics Adapter đều phải điều khiển trực tiếp thông qua các port của Hercule card. 11.2.1Cấu trúc video buffer 11.2.1.1Trong text mode Giống như MDA, nhưng cho phép sử dụng hai trang màn hình : Trang 0 : bắt đầu từ B0000h Trang 1 : bắt đầu từ B8000h 78 Mỗi trang chiếm 4 KB, ghi nhớ 2000 phần tử liên tiếp nhau, mỗi phần tử gồm hai byte, byte đầu là ASCII code, byte kế là attrib . Lưu ý : trong text mode, với các chức năng của BIOS dành cho MDA, chỉ có thể hiển thò trên trang 0. 11.2.1.2Trong graphics mode Cho phép sử dụng hai trang màn hình đồ họa : Trang 0 : từ B0000h - B7FFFh ( 32 KB ) Trang 1 : từ B8000h - BFFFFh ( 32 KB ) Mỗi trang chiếm 32 KB,lưu chứa thông tin về 720x348 điểm sáng (pixel) với các quy đònh : Mỗi dòng trên màn hình được tạo thành từ 720 điểm sáng Màn hình có tổng cộng 348 dòng Mỗi điểm sáng chỉ có một trong hai thuộc tính : sáng hoặc tối > mỗi điểm được thể hiện bởi một bit. Nếu bit = 1 -> sáng, bit = 0 -> tối Thông tin về một dòng được ghi liên tiếp nhau trong một dãy 90 byte ( 720 bit ) theo thứ tự thể hiện trên màn hình : Bit thứ 7 ( bit cao nhất ) của byte đầu dãy biểu diễn cho điểm sáng thứ nhất của dòng Bit thứ 6 của byte đầu dãy biểu diễn cho điểm sáng thứ hai của dòng . . Bit thứ 7 ( bit cao nhất ) của byte thứ hai trong dãy biểu diễn cho điểm sáng thứ chín của dòng . Mỗi trang màn hình ( 32 KB ) được chia thành 4 trang nhỏ liên tiếp nhau đánh số từ 0-3, mỗi trang có kích thước 2000h byte. Thông tin của các dòng được lưu trong các trang theo quy tắc : Các dòng có cùng số dư khi chia số thứ tự dòng cho 4 sẽ ở trong cùng một trang.Số dư cũng chính là số thứ tự của buffer Tức là : Trang 0 chứa thông tin các dòng 0,4,8,12,16 . Trang 1 chứa thông tin các dòng 1,5,9,13,17 . Trang 2 chứa thông tin các dòng 2,6,10,14,18 . Trang 3 chứa thông tin các dòng 3,7,11,15,19 . 11.2.2Hercule registers Hercule Graphics Adapter cũng có các register giống như Color Graphics Adapter nhưng có một số khác biệt như sau : Không có Color register Các port được đònh vò tại 3Bx thay vì 3Dx Mode register được quy đònh : - Bit 1 = 0 --> Text mode - Bit 1 = 1 --> Graphics mode ( port 03BF bit 0 = 1 ) - Bit 3 : Video Enable - Bit 5 : Blink Enable - Bit 7 : Page Select ( port 03BF bit 1 = 1 ) ( Trang 0 bắt đầu từ B000:0000 ) ( Trang 1 bắt đầu từ B800:0000 ) Bit 0,2,4,6 not used Sử dụng port 03BF để xác đònh cấu hình làm việc : Bit 0 = 1 --> cho phép chuyển sang graphics mode (Thông qua bit 1 của mode register) Bit 1 = 1 --> cho phép chọn trang màn hình 79 11.2.1Hercule parameters AddressRegisterRegister typeI/O |80x25|Graph| registerNumberType| Text| mode| |----------|----------|----------------------------|-----|-----|------ 00R0Horizontal TotalW6135 | 01R1Horizontal DisplayW502D | 02R2Horizontal Sync PositionW522E | 03R3Horizontal Sync WidthW0F07 | 04R4Vertical TotalW195B | 05R5Vertical Total AdjustW0602 | 06R6Vertical DisplayedW1957 | 07R7Vertical Sync PositionW1957 | 08R8Interlace ModeW0202 | 09R9Maximum Scan Line AddressW0D03 | 0AR10Cursor Start Scan LineW0B00 | 0BR11Cursor End Scan LineW0C00 | 0CR12Start address (Hi byte)W0000 | 0DR13Start address (Lo byte)W0000 | 0ER14Cursor address (Hi byte)R/WXXXX | 0FR15Cursor address (Lo byte)R/WXXXX | 10R16Light pen (Hi byte)RXXXX | 11R17Light pen (Lo byte)RXXXX | ----------------------------------------------------------------- XX : giaự trũ tuứy choùn 11.2.2Thớ duù : hercule card sang graphics mode Graph-init proc near lea bx,graph-parm mov dx,03B4h ; Index register port mov cx,0Fh xor al,al GI1: mov ah,byte ptr cs:[bx] ; AH = Register value out dx,ax ; AL = Register Number inc bx inc al ; Taờng Register number loop GI1 mov dx,03BFh ; Configuration port mov al,3 ; Select all out dx,al mov dx,03B8h ; Set mode & page mov al,10001010b ; Choùn trang 1 (0B800:0000) out dx,al ret Graph-init endp Graph-parm db 035h,02Dh,02Eh,007h,05Bh,002h,057h,057h,002h,003h db 000h,000h,000h,000h,000h,000h . 74 CHƯƠNG 11 : VIDEO CONTROLLER Các Display Adapter ban đầu ( MDA và CGA ) của IBM PC/XT/AT dựa. 11.1COLOR GRAPHICS ADAPTER 11.1.1Cấu trúc video buffer 11.1.1.1Trong text mode Xem chương 10 11.1.1.2Trong graphics mode Video buffer có kích thước 16 KB, cho