• Thứ Bảy, 20/11/2010 08:10 (GMT+7)

    Lập trình ANSI C nhận diện card màn hình, mouse, keyboard, đọc/ghi và format đĩa

    Câu hỏi :

    Xin hỏi code ANSI C nhận diện card màn hình, mouse, keyboard, đọc/ghi và format đĩa. Code chạy không cần hệ điều hành, nói rõ hơn là máy mới ráp chưa cài bất kỳ hệ điều hành nào.



    Trả lời :

    Tùy theo yêu cầu người dùng, họ sẽ gắn vào máy nhiều thiết bị I/O (nhập xuất) khác nhau. Ngay cả 1 thiết bị I/O cụ thể (thí dụ như card màn hình) cũng có nhiều hãng chế tạo khác nhau, mỗi hãng chế tạo nhiều thế hệ (model) card (thiết bị I/O) khác nhau. Do đó viết chương trình nhận diện và điều khiển trực tiếp thiết bị I/O bởi người dùng là không nên làm vì nếu có viết được, chương trình sẽ phụ thuộc hoàn toàn với 1 thiết bị cụ thể, như thế khi thay thế thiết bị khác (chắc chắn sẽ xảy ra), chương trình cũ sẽ lỗi thời và không hoạt động được nữa.

    Để giải quyết vấn đề trên, hãng nào lắp máy tính, hãng đó sẽ phải viết module phần mềm quản lý trực tiếp các thiết bị phần cứng trên máy mình. Module này trên máy PC được gọi là BIOS (Basic Input/Output System) và được ghi trong ROM của máy đó (ta gọi là ROM BIOS). BIOS chứa nhiều hàm chức năng, mỗi hàm thường được kích hoạt bằng cơ chế ngắt quảng (interrupt) và sẽ quản lý 1 thiết bị I/O cụ thể. Thí dụ ngắt 13h phục vụ việc quản lý các thiết bị chứa tin như đĩa cứng, đĩa mềm,... Ngắt 10h phục vụ quản lý card màn hình. BIOS còn chứa trình boot máy, trình này làm nhiều công việc trên nhiều bước. Thí dụ bước đầu tiên là nhận diện và kiểm tra sơ bộ các thiết bị thiết yếu nhất có hoạt động tốt không như CPU, bộ nhớ RAM, bàn phím, màn hình,...

    Hệ điều hành MSDOS/Windows/Linux cũng không truy xuất trực tiếp phần cứng của máy, chúng chỉ truy xuất thiết bị thông qua dịch vụ của BIOS hay của module device driver đi kèm theo thiết bị. Còn chương trình ứng dụng thì truy xuất phần cứng thông qua dịch vụ của hệ điều hành để code của ứng dụng độc lập hoàn toàn với phần cứng cấp thấp và nhờ vậy, khi thay đổi phần cứng thì phần mềm ứng dụng tiếp tục chạy tốt chứ không cần phần hiệu chỉnh gì cả.

    Tóm lại, nếu chưa có yêu cầu đặc biệt gì, bạn nên đọc chương trình mã máy trong ROM BIOS để biết cách thức cụ thể về việc nhận diện và truy xuất từng thiết bị I/O của máy. Còn nếu bạn là người tự thiết kế và chế tạo máy tính mới, bạn phải biết máy của mình dùng các thiết bị nào, mỗi thiết bị có tính chất vật lý cụ thể nào, từ đó bạn viết các đoạn chương trình nhận diện và truy xuất các thiết bị đó. Tuy nhiên để làm tốt cả 2 công việc: thiết kế chế tạo phần cứng, viết phần mềm truy xuất các thiết bị do tự mình lắp đặt, bạn cần học hỏi để trang bị cho mình nhiều kiến thức chi tiết về phần cứng và lập trình, các kiến thức mà bạn cần trang bị tương đương với kiến thức được trang bị cho 1 sinh viên kỹ sư công nghệ thông tin thuộc ngành kỹ thuật máy tính của một vài trường đại học ở Việt Nam, còn hầu hết các sinh viên ngành công nghệ thông tin khác đều chỉ được trang bị chủ yếu kiến thức lập trình ở cấp ứng dụng.

    Chuyên mục: Lập trình