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

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

Đ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

Kỹ thuật Đồ hoạ máy tính 8 12 640*480 1 16 8*16 - Chúng ta có thể tự hạn chế về số trang cho mỗi chế độ của màn hình. Ví dụ: - Mode E có tất cả 128000 pixel/page. Vì 8 pixel ứng với một byte trên một bit plane do đó cần 16000 byte/bit plane/ page - một trang cần 64000 byte xấp xỉ 64 kb. 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 A200 - A3F3F A400 - A5F3F A600 - A7F3F A800 - A9F3F AA00 - ABF3F AC00 - ADF3F AE00 - AFF3F Mode E: A000 - A3E7F A400 - A7E7F A800 - ABE7E AC00 - AFE7E $2. Truy cập vo bộ nhớ mn hình 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 vo bộ nhớ mn hình input AH=0Ch AL=mu BH=trang CX=x (cột) Kỹ thuật Đồ hoạ máy tính 9 DX=y (dòng) Procedure writepixel(col,row,color: integer); Var v : Registers; Begin v.ah:=$0C; v.al := color; v.bh:=0; v.cx:=col; v.dx:=row; intr($10,v); End; 2. Đọc dữ liệu của một pixel input AH=ODh BH=trang CX=x (cột) DX=y (dòng) output: AL=Color (giá trị mu của pixel) Function readpixel(col,row: integer): integer; Var v : Registers; Begin v.ah:=$0D; v.bh:=0; v.cx:=col; v.dx:=row; intr($10,v); readpixel:=v.al; end; 3. Đọc dữ liệu từ thanh ghi mu (color Register) Input: AH=10h AL=15h BX=n (số hiệu thanh ghi mu) Output: CH=độ kích hoạt mu Green CL=độ kích hoạt mu Blue DH=độ kích hoạt mu Red Type RGB_COLOR_TYP = Record Kü thuËt §å ho¹ m¸y tÝnh 10 red : Word; green : Word; blue : Word; End; Procedure read_color_reg(index: integer;Var color: RGB_COLOR_TYP); Var R : registers; Begin R.ax:=$1015; R.bx:=index; intr($10,R); color.red:=R.dh; color.green:=R.ch; color.blue:=R.cl; End; 4. Ghi mμu vμo mét thanh ghi mμu (Color Register) Input: AH=10h AL=10h 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 RGB_COLOR_TYP = Record red : Word; green : Word; blue : Word; End; Procedure write_color_reg(index: Integer;color: RGB_COLOR_TYP); Var R : registers; Begin R.ax:=$1010; R.bx:=index; R.dh:=color.red; R.ch:=color.green; R.cl:=color.blue; intr($10,R); End; C¸c vÝ dô: VÝ dô 1: §−a mét pixel vµo bé nhí mµn h×nh Kü thuËt §å ho¹ m¸y tÝnh 11 Uses Crt,dos,Graph; Var v : Registers; gd,gm,col,row,color: integer; Procedure writepixel(col,row,color: integer); Var v : Registers; Begin v.ah:=$0C; v.al := color; v.bh:=0; v.cx:=col; v.dx:=row; intr($10,v); End; Begin Write('Nhap toa do diem: '); Readln(col, row); Write('Nhap mau ve diem: '); Readln(color); gd:=0; initgraph(gd,gm,' '); writepixel(col,row,color); Readln; closegraph; End. VÝ dô 2: §äc d÷ liÖu cña mét pixel Uses Crt,dos,Graph; Var v : Registers; gd,gm,col,row,color: integer; Function readpixel(col,row: integer): integer; Var v : Registers; Begin v.ah:=$0D; v.bh:=0; v.cx:=col; v.dx:=row; intr($10,v); readpixel:=v.al; end; Begin gd:=0; initgraph(gd,gm,' '); Kỹ thuật Đồ hoạ máy tính 12 col:=320; row:=240; color:=WHITE; putpixel(col,row,color); directvideo:=false; Writeln('Mau cua diem la: ',readpixel(col,row)); Readln; closegraph; End. Ví dụ 3 : đọc nội dung thanh ghi màu thông qua ngắt Program Read_Write_Color_Registers; Uses crt,graph,dos; Type RGB_COLOR_TYP = Record red : Word; green : Word; blue : Word; End; Procedure set_mode(mode: integer); Var R : registers; Begin R.ax:=$4f02; R.bx:=mode; intr($10,R); End; Procedure writepixel(col,row,color: integer); Var R : registers; Begin R.ah:=$0C; R.al := color; R.bh:=0; R.cx:=col; R.dx:=row; intr($10,R); End; Procedure write_color_reg(index: Integer;color: RGB_COLOR_TYP); Var R : registers; Begin R.ax:=$1010; R.bx:=index; R.dh:=color.red; R.ch:=color.green; R.cl:=color.blue; intr($10,R); Kỹ thuật Đồ hoạ máy tính 13 End; Procedure read_color_reg(index: integer;Var color: RGB_COLOR_TYP); Var R : registers; Begin R.ax:=$1015; R.bx:=index; intr($10,R); color.red:=R.dh; color.green:=R.ch; color.blue:=R.cl; End; Var gd,gm,x,y,index: integer; color: RGB_COLOR_TYP; Begin clrscr; gm:=$13; set_mode(gm); directvideo:=false; index:=WHITE; read_color_reg(index,color); Writeln('3 mau cua thanh ghi mau WHITE la: '); Writeln('Red: ',color.red,'; Green: ',color.green,'; Blue: ',color.blue); Readkey; index:=Blue; color.red:=63; color.green:=0; color.blue:=63; write_color_reg(index,color); (* Ve duong thang ngang *) y:=100; for x:=0 To 319 Do writepixel(x,y,index); Readkey; gm:=3; (* Text Mode *) set_mode(gm); End. 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 Kỹ thuật Đồ hoạ máy tính 14 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 đó là các nhóm sau: 1. Nhóm general (External Register) 2. Nhóm Sequence Register 3. Nhóm CRTC Register 4. Nhóm Graphics Register 5. Attribute Register 6. Nhóm Color Register (Chỉ có ở VGA) Chú ý: Chỉ các thanh ghi của nhóm General và thanh ghi chọn màu (Color Select Register) của nhóm Attribute Register là có thể truy nhập trực tiếp vào nó thông qua cổng I/O (I/O port) nghĩa là ngời lập trình có thể dùng các lệnh In, Out để truy cập vào các thanh ghi này thông qua địa chỉ của cổng 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 vo (Write) Địa chỉ đọc ra Miscellaneous output 3C2 3CC Feature control 3DA/3BA 3CA Input Status #0 0 3C2 Kỹ thuật Đồ hoạ máy tính 15 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 vo Địa chỉ đọc ra address 3C4 3C4 Reset 0 3C5 3C5 Clock mode 1 3C5 3C5 Map mask 2 3C5 3C5 Character Map Mask 3 3C5 3C5 Memory mode 4 3C5 3C5 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 b3 b2 b1 b0 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: Tên gọi thanh ghi Chỉ số thanh ghi Địa chỉ ghi địa chỉ đọc address 3D4/3B4 3D4/3B4 Horizontal Total 0 3D5/3B5 3D5/3B5 Horizontal Display end 1 nt nt Kỹ thuật Đồ hoạ máy tính 16 Start horizontal Blank 2 nt nt end horizontal Blank 3 nt nt Start horizontal Retrace 4 nt nt end horizontal Retrace 5 nt nt vertical total 6 nt nt overflow 7 nt nt preset row scan 8 nt nt max scan line 9 nt nt cursor start A nt nt cursor end B 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 offset 13 nt nt Underline location 14 nt nt Start Vertical Blank 15 nt nt End Vertical Blank 16 nt nt Mode control 17 nt nt Line compare 18 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 Tên gọi thanh ghi Chỉ số Địa chỉ ghi Địa chỉ đọc Graphics address 3CE 3CE Kỹ thuật Đồ hoạ máy tính 17 Set/Reset O 3cf 3cf Enable Set/Reset 1 3cf 3cf Color Compare 2 3cf 3cf data Rotate 3 3cf 3cf Read Map 4 3cf 3cf Mode 5 3cf 3cf Miscelaneous 6 3cf 3cf Color don't care 7 3cf 3cf Bit Map 8 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: Tên thanh ghi Chỉ số Địa chỉ ghi vo Địa chỉ đọc ra address 3CO 3C1 Palette O ữF 3CO 3C1 Mode control 10 3CO 3C1 Overscan color 11 3CO 3C1 Color plane enable 12 3CO 3C1 Horizontal pixel paning 13 3CO 3C1 Color Select 14 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) [...]... (10 0 ,10 0) byte chứa thông tin của pixel là byte thứ k k =10 0x640 div 8 + 10 0 div 8= 8000 + 12 =8 0 12 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) Điểm 0 1 2 3 4 5 6 7 Byte Bit Plane 7 6 5 4 3 2 1 0 1 B 1 0 1 1 0 0 0 1 2 G 0 1 0 0 1 1 0 1 3 R 1 1 1 1 0 0 1 0 4 I 0 0 0 0 1 1 0 1 IRGB 010 1 011 0...Kỹ thuật Đồ hoạ máy tính 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: (R1G1B1) (RGB) Cờng độ kích hoạt 0 0 0% 0 1 33% 1 0 66% 1 1 10 0% 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... bộ nhớ màn hình thông qua các cổng (port) 1 Chế độ 320 x200 25 6 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ó 320 x200=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;... 1 0 1 3 R 1 1 1 1 0 0 1 0 4 I 0 0 0 0 1 1 0 1 IRGB 010 1 011 0 010 1 010 1 10 10 10 10 010 0 10 11 Để 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... color:=c[0] +2* c [1] +4*c [2] +8*c[3]; getdot:=color; End; Begin 23 Kỹ thuật Đồ hoạ máy tính initgraph(gd,gm,'c:\tp\bgi'); directvideo:=false; x:= 320 ;y: =24 0; putpixel(x,y,WHITE); Writeln('Mau cua diem la : ',getdot(x,y)); readkey; closegraph; End 3 Chế độ 640x480 25 6 màu (mode $10 1) Ta xét trờng hợp đọc/ghi vào bộ nhớ màn hình ở chế độ 25 6 màu theo chuẩn VESA (chú ý trong TP ứng với mode $10 1 độ phân giải... address]; End; 2 Chế độ 640x480 16 màu 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: 18 Kỹ thuật Đồ hoạ máy tính Vị trí bit = 7 - (x mod 8)... p,m: byte; ma: four_byte; Begin p:= 7-( x mod 8); m: =1; For i: =1 To p Do m:=m *2; For i:=0 To 3 Do Begin ma[i]:=(n shr i) mod 2; ma[i]:=ma[i]*m; End; read_8_pixel(x,y,b); For i:=0 To 3 Do Begin If ma[i]=0 Then b[i]:=b[i] And ($FF-m) 22 Kỹ thuật Đồ hoạ máy tính Else b[i]:=b[i] Or ma[i]; End; write_8_pixel(x,y,b); End; (**********************) Begin Set_mode( $ 12 ); y: =15 0; for x:=0 To 639 Do putdot(x,y,Magenta);... chỉ đọc ra 3C4 3C4 3C5 3C5 address Map mask 2 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: b3 b2 b1 b0 00 01, 0 010 , 010 0, 10 00 để 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... 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ẽ 20 Kỹ thuật Đồ hoạ máy tính 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 ví dụ n=5 thì n= 010 1) Procedure putdot(x,y,n: integer);... 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 19 Kỹ thuật Đồ hoạ máy tính j,address: Integer; Begin port[$3c4]: =2; address:=y*80+(x shr 3); j: =1; For i:=0 To 3 . 0 1 2 3 4 5 6 7 Byte Bit Plane 7 6 5 4 3 2 1 0 1 B 1 0 1 1 0 0 0 1 2 G 0 1 0 0 1 1 0 1 3 R 1 1 1 1 0 0 1 0 4 I 0 0 0 0 1 1 0 1 IRGB 010 1 011 0 010 1 010 1 10 10 10 10 010 0 10 11 Để ghi ra màn. A000 - A1F3F A200 - A3F3F A400 - A5F3F A600 - A7F3F A800 - A9F3F AA00 - ABF3F AC00 - ADF3F AE00 - AFF3F Mode E: A000 - A3E7F A400 - A7E7F A800 - ABE7E AC00 - AFE7E $2. . Kỹ thuật Đồ hoạ máy tính 8 12 640*480 1 16 8 *16 - Chúng ta có thể tự hạn chế về số trang cho mỗi chế độ của màn hình. Ví dụ: - Mode E có tất cả 12 8000 pixel/page. Vì 8 pixel

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

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan