Thiết bị quang~
Ngày nay đĩa quang được sử dụng rất phổ biến, chúng có mật độ ghi thông tin cao hơn đĩa từ thông thường rất nhiều. Ban đầu các đĩa quang được chế tạo và phát triển nhằm ghi các chương trình truyền hình sau đó được sử dụng làm phương tiện nhớ ...
Ngày nay đĩa quang được sử dụng rất phổ biến, chúng có mật độ ghi thông tin cao hơn đĩa từ thông thường rất nhiều. Ban đầu các đĩa quang được chế tạo và phát triển nhằm ghi các chương trình truyền hình sau đó được sử dụng làm phương tiện nhớ ngoài cho máy tính.
* Nguyên lý chế tạo (ghi)
Người ta tạo ra các đĩa CD ROM bằng cách dùng một tia laser mạnh đốt cháy các hốc đường kính 1μm trên một đĩa chủ, từ đĩa chủ này tạo ra khuôn để tạo ra các bản copy trên các đĩa chất dẻo. Sau đó người ta phủ lên một lớp nhôm mỏng rồi một lớp chất dẻo trong suốt lên trên lớp nhôm để bảo vệ.
Các hốc bị đốt gọi là các pits (tí hiệu 0), phần không bị đốt gọi là các lands (tín hiệu 1), chúng có độ tương phản khác nhau do đó có thể phân biệt được pits và lands.
* Tổ chức thông tin
Thông tin trên CDROM được tổ chức theo một đường xoắn ốc duy nhất. Dữ liệu ghi từng nhóm 24 byte, mỗi byte đầu tiên được mở rộng thành 14 bit. Ba bit đặc biệt được bổ xung vào giữa các nhóm và một byte đồng bộ được bổ xung để tạo thành 1 frame. Một nhóm 98 frame tạo thành 1 block chứa 2 KB dữ liệu của người sử dụng. Mỗi CDROM chứa 270.000 block, cho dung lượng là 553 MB.
* Cách đọc thông tin
Các đĩa CDROMs được đọc bằng thiết bị như máy ghe nhạc CD, dùng một đầu dò (detector) đo năng lượng phản xạ từ bề mặt đĩa khi chiếu lên bề mặt một tia laser công xuất nhỏ. Dữ liệu được đọc với vận tốc tuyến tính không đổi là 57 inches/sec, cho ta tốc độ đọc ghi dữ liệu là 153,60 KB/sec
* Ưu điểm, nhược điểm và cách khắc phục:
Ưu điểm : công nghệ chế tạo CDROM bằng cách dập khuôn do đó giá thành 1 CDROM rất rẻ, ngoài ra việc đọc dùng tia laser không cần sự tiếp xúc cơ khí, bề mặt có sự bảo vệ do đó có độ tin cậy cao, dung lượng lớn nên được sử dụng rộng rãi.
Nhược điểm : việc dập khuôn khó đạt được độ chính xác cao và đồng đều do vậy các thông tin số thường có nhiều lỗi.
Khắc phục : đầu đọc trong ổ đĩa thường có một gương chính xác, được điều khiển bởi một cơ cấu servo nhằm bám sát bề mặt đĩa, bù trừ cho các lỗi sản xuất. Thứ hai sử dụng loại mã sửa sai tốt hơn khi ghi thông tin.
Chúng ta có thể sử dụng một số ngắt để lập trình trực tiếp với cả đĩa cứng và đĩa mềm.
BIOS : Ngắt 13 h cho cả đĩa cứng và đĩa mềm
Ngắt 41h chỉ tới bảng thông số của đĩa cứng 1
Ngắt 46h chỉ tới bảng thông số của đĩa cứng 2
DOS : Ngắt 25h đọc trực tiếp từ đĩa cứng
Ngắt 26h ghi trực tiếp vào đĩa cứng.
Lập trình ngắt trong PASCAL
Việc gọi ngắt trong PASCAL cũng được thực hiện theo mẫu trên.Song phải theo một số quy định sau:
- Các lệnh được sử dụng là các lệnh của PASCAL. Lệnh gán tương đương với lệnh MOV trong ASSEMBLY
- Nếu sử dụng hệ đếm thập lục phân,thì phải cài đặt dấu ‘$’ đứng trước mỗi số đó.
- Muốn tác động trực tiếp tới các thanh ghi của bộ vi xử lý ,ta phải sử dụng biến có kiểu là REGISTERS. kiểu này được quy định trong UNIT DOS như sau:
+ Kiểu REGISTERS được khai báo trong UNIT DOS:
TYPE
REGISTERS=RECORD
CASE integer OF
0:(AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags:word);
1:(AL,AH,BL,BH,CL,CH,DL,DH:Byte);
END;
+ Các thanh ghi của bộ vi xử lý được quy định bằng các tên biến. Muốn truy nhập đến các biến này, ta phải quy định về kiểu bản ghi. Ví dụ : R là biến kiểu REGISTERS
=>R.AH:=$01; hoặc with R do AH:=$01;
- Muốn gọi ngắt trong PASCAL, có thể sử dụng thủ tục:
INTR(<số hiệu ngắt>,<biến kiểu REGISTERS>);
Ví dụ : R là biến kiểu REGISTERS => INTR($ 10,R);
- Riêng với số hiệu ngắt 21h ta có thể sử dụng thủ tục
MSDOS(<biến kiểu RETERGES>);
Ví dụ: INTR($21,R); <=>MSDOS(R);
Một số ngắt thông dụng
Ngắt 21h: Ngắt chức năng của DOS
Hàm 01h: Vào một kí tự từ bàn phím và hiển thị ra màn hình
Mô tả | Ví dụ minh hoạ |
Vào: AH=01hRa: AL=Mã ASCII của kí tự nhập vào | MOV AH,01HINT 21HMOV ktu,AL |
Hàm 02h: In một ký tự ra màn hình văn bản
Vào AH=02hDL= mã ASCII của kí tự nhập vàoRa Không | MOV AH,02H ;In ra màn hìnhMOV DL,’A’ ; chữ ’A’INT 21H |
Hàm 08h: Vào một kí tự từ bàn phím,không hiển thị kí tự ra màn hình
Vào AH=01hRa AL= mã ASCII của kí tự nhập vào | MOV AH,08HINT 21HMOV ktu,AL |
Hàm 09h: In một chuỗi kí tự ra màn hình
Vào AH=09hDS:DX=Con trỏ đến chuỗi kết thúc bằng ‘$’ Ra Không | MOV AH,09HLEA DX,chuỗiINT 21H |
Hàm 4Ch: Kết thúc chương trình .EXE
Vào : AH=4ChRa : Không | MOV AH,4CHINT 21H |
Hàm 2Ah: Xác định ngày tháng
Vào : AH=2AhRa : AL=ngày trong tuần(0-6)CX=năm(1980-2099)DH=tháng(1-12)DL=ngày(1-31) | R.AH:=$2AINTR($21,R)Ngay-tuan:=R.AL;Nam:=R.CX;Thang:=R.DH;Ngay:=R.DL; |
Hàm 2Bh: Đặt ngày tháng (Đặt lại ngày hệ thống)
Vào : AH= 2BhCX=năm(1980-2099) DH=tháng(1-12) DL= ngày(1-31)Ra : AL=0 nếu ngày hợp lệ;AL=FFh nếu ngày không hợp lệ | R.AH:=$2B;Nam:=R.CX;Thang:=R.DH;Ngay:=R.DL;INTR($21,R);IF R>AL=0 then write(‘OK!’);Else write(‘Not OK!’); |
Hàm 2Ch: Xác định thời gian hệ thống
Vào: AH=2ChRa : CH=giờ(0-23) CL=phút(0-59)DH=giây(0-59)DL=phần trăm giây(0-99) | R.AH:=$2C;NTR($21,R);Gio:=R.CH;Phut:=R.CL;Giay:=R.DH;Phan_tram:=R.DL |
Hàm 2Dh: Đặt thời gian (Đặt lại thời gian hệ thống)
Vào: AH=2DhCH=giờ(0-23)CL=phút(0-59)DH=giây(0-59)DL=phần trăm giây(0-99)Ra : AL=0 nếu thời gian hợp lệAL=FFh nếu thời gian không hợp lệ | R.AH:=$2D;R.CH:=gio;R.CL:=phut;R.DH:=giay;R.DL:=phan_tram;INTR($21,R);If R.AL=0 then write(‘OK!’)Else write(‘Not OK!’); |
Hàm 30h: Xác định số phiên bản của DOS
Vào : AH=30hRa : BX=0000hCX=0000hAL=số trước dấu phẩyAH=số sau dấu phẩy | R.AH:=30HINTR($21,R);Ver1:=R.AL;Ver2:=R.AH;Write(‘MS_DOS Version ‘,ver1,’,’,ver2) |
Hàm 36h: Xác định dung lượng còn trống trên đĩa
Vào :AH=36hDL=ổ đĩa(0_mặc định;1_A;1_B;...)Ra : BX=Số liên cung chưa dùngCX=Số byte/cungDX=Số liên cung / đĩaAX=FFFFh nếu ổ đĩa không hợp lệ=số cung/liên cung(hợp lệ) | R.AH:=36H;R.DL:=1;INTR($21,R);Free_cyl:=R.BX;Bps:=R.CX; {byte per sector}Cpd:=R.DX; {cylinder per dick}If AX=$FFFF then write(‘No Dick’)Else spc:=R.AX; {sector per cylinder); |
Ngắt 10h: Ngắt màn hình
Hàm 00h: Chọn chế độ hiển thị cho màn hình
Vào: AH=0hAL=chế độ03h:Text 80*25*1612h:Grapt 640*480*1613h: Grapt 320*200*256Ra : Không | R.AH:=0h;R.AL:=mode;INTR($10,R); |
Hàm 02h: Dịch chuyển Con trỏ
Vào: AH=02hBH=trang sốDH=hàngDL=cộtRa : Không | R.AH:=02h;R.BH:=trang;R.DH:=hang;R.DL:=cot;INTR($10,R) |
Hàm 06h: Cuốn màn hình hay cửa sổ lên một số dòng xác định
Vào: AH=06hAL=số dòng cuốn(=0;toàn bộ)BH=thuộc tính của dòng trốngCH,DL=dòng,cột góc trên tráiDL,DL=dòng,cột góc dưới phải Ra: Không | R.AH:=06h;R.AL:=so_dong;R.BH:=thuoc_tinh;R.CH:=dong1;R.CL=cot1;R.DH:=dong2;R.DL=cot2;INTR($10,R); |
Hàm 07h: Cuốn màn hình hay cửa sổ xuống một dòng xác định
Vào : AH=07hAL=số dòng cuốn(=0;toàn bộ)BH=thuôc tính các dòng trốngCH,CL=dong,cột góc dưới phảiRa : Không | R.AH:=07h;R.AL:=so_dong;R.BH:=thuoc_tinh;R.CH:=dong1;R.CL=cot1;R.DH:=dong2;R.DL=cot2;INTR($10,R); |
Hàm 09h: Hiển thị kí tự với thuộc tính tại vị trí Con trỏ
Vào: AH=09hAL=mã ASCII của kí tựBH=trang sốBL=thuộc tính(text); màu(graph)CX=số lần viết kí tựRa :Không | R.AH:=09h;R.AL:=kitu;R.BH:=0; {trang so 0}R.BL:=mau;R.CX=solan;INTR($10,R); |
Ngắt 16h: Ngắt bàn phím
Hàm 00h: Đọc kí tự từ bàn phím
Vào : AH=00hRa :AH=mã quét của phímAL=mã ASCII của kí tự | R.AH:=00h;INTR($16,R);R.AH:=ma_scan;R.AL:=ma_ascii; |
Hàm 02h: Lấy các cờ bàn phím
Vào : AH=02hRa : AL=các cờBit 7: insert; bit 6:capslock; bit 5:numlock; bit 4:scrollock | R.AH:=00h;INTR($16,R);R.AH:=ma_scan;R.AL:=ma_ascii; |
Ngắt 33h: Ngắt con chuột
Hàm 00h: Khởi tạo chuột
Vào : AX=00hRa : AX=FFFFh không nhận chuột | R.AX:=00h;INTR($33,R);if R.AX=FFFFh then WRITE('Khong khoi tao duoc chuot!'); |
Hàm 01h: Hiện trỏ chuột
Vào : AX=01hRa : Không | R.AX:=01h;INTR($33,R); |
Hàm 02h: ẩn trỏ chuột
Vào : AX=02hRa : Không | R.AX:=02h;INTR($33,R); |
Hàm 03h: Trạng thái nhấn chuột
Vào : AX=03hRa : CX,DX=toạ độ ảo của chuột.BX=trạng thái nút chuột nhấnbit 0: Nút tráibit 1: Nút phảibit 2: Nút giữa | R.AX:=03h;INTR($33,R);X=R.CX shl 3+1;Y=R.DX shl 3+1;if (R.BX and 1)=1 then WRITE('Phim trai chuot!!!'); |