2016-01-17 16 views
6

Gần đây, tôi bắt đầu phát triển một hệ điều hành trong NASM và C. Tôi đã tạo bộ nạp khởi động, hạt nhân, hệ thống tệp, v.v. Cho đến nay tôi đã sử dụng chế độ văn bản VGA trực tiếp để ghi vào địa chỉ 0x000B8000. Vì vậy, tôi quyết định chuyển sang chế độ video thay vì chế độ văn bản. Tôi đã chọn độ phân giải màn hình tối đa 320x200, nhưng sau đó tôi nhận ra rằng có ba vấn đề. Thứ nhất, chỉ có 256 màu khác nhau. Thứ hai, độ phân giải quá nhỏ. Thứ ba, ghi vào địa chỉ 0x000A0000 quá chậm. Tôi đã thử làm một số hình ảnh động, nhưng nó rất lag và đôi khi nó chờ hơn một giây trước khung tiếp theo.Chuyển sang độ phân giải cao hơn

Tôi đã tìm kiếm trên internet một số giải thích về cách chuyển sang độ phân giải cao hơn như 1920x1080 và cách sử dụng 256*256*256 màu thay vì chỉ 256. Mọi thứ tôi thấy rất khó sử dụng độ phân giải cao hơn vì bạn phải phát triển trình điều khiển cho tất cả các loại thẻ đồ họa khác nhau và đối với một số thẻ không có tài liệu, vì vậy chúng tôi phải sử dụng kỹ thuật đảo ngược.

Tôi thực sự muốn giới thiệu đồ họa độ phân giải cao cho hệ điều hành của mình. Là nó thực sự khó khăn hoặc là có bất kỳ phương pháp dễ dàng? Bất kỳ đề xuất về cách tôi có thể giải quyết điều này?

+1

Nếu bạn đang gặp sự cố khi viết mã để hiển thị hình động nhanh trên màn hình VGA 320x200 tệ hại, thì hãy thử và cải thiện màn hình đầu tiên trước khi đi tới màn hình gấp 3 lần bit trên mỗi pixel (có thể là 4 lần) và 30 (!) lần nhiều pixel hơn. – usr2564301

Trả lời

4

Gần như mọi bộ điều hợp đồ họa đều hỗ trợ ngữ nghĩa khung hình chữ VESA, bạn có thể định cấu hình hầu hết mọi chế độ video với điều đó. Hạn chế là bạn không thể sử dụng tính năng nhà cung cấp cụ thể (đồ họa tăng tốc, vv)

các VESA-Xserver ví dụ làm việc với hầu hết các bộ chuyển đổi đồ họa (nhưng những mô hình cụ thể là nhanh hơn đáng kể)

Xem thêm: https://en.wikipedia.org/wiki/VESA_BIOS_Extensions

+0

Cảm ơn bạn, nhưng tôi vẫn có một vấn đề. Tôi chuyển sang chế độ VESA 0x0118 (1024x768), nhưng nó rất chậm. Nó quá chậm đến nỗi nó vô dụng. Tôi đã cố gắng thực hiện một số điều đơn giản để kiểm tra nó. Tôi có một loạt các hình ảnh 2014x768 ở một số khu vực của RAM và tôi đã thực hiện một chương trình C đơn giản tải nó sau khi khác. Tuy nhiên, nó chờ hơn một giây trước khi tải một hình ảnh khác. Tôi chắc chắn không có vấn đề tối ưu hóa. Làm thế nào tôi có thể tăng tốc độ lên đến khoảng 60 + fps? –

1

Bạn có thể làm đồ họa VESA có độ phân giải cao trong khi lắp ráp và cần đủ nhanh (trong giai đoạn đầu khi bạn đang học và không làm những công cụ 3d rất lạ mắt, đặc biệt).

Trước hết, hãy đảm bảo bạn đang sử dụng trình mô phỏng/máy ảo tốt để thử nghiệm. Tôi đã sử dụng QEMU và đó là cách để làm chậm đồ họa chỉ ở 640x480x24bpp. Tôi chuyển sang VirtualBox và mặc dù nó khởi động khá chậm, tôi chưa bao giờ nhìn lại.

Đối với phần lập trình, tôi khuyến khích bạn xem một dự án có tên là Pure64. Bạn có thể tìm thấy nó trên GitHub. Đi tới src/init/isa.asm và nhìn vào cuối tập tin - có một số mã để khởi tạo VESA. Tôi đang thực sự sử dụng Pure64 để thiết lập một môi trường 64bit sạch và tôi đang làm đồ họa VESA vì vậy tôi có thể nói rằng nó hoạt động tốt.

Khởi động VESA bao gồm hai phần - nhận thông tin về chế độ và đặt chế độ video. Khi bạn nhận được thông tin về chế độ, bạn sẽ nhận được một Con trỏ cơ sở video đến vùng bộ nhớ liên tục và nơi bạn có thể viết các pixel của mình mà không cần chuyển đổi ngân hàng và thực hiện các công cụ phức tạp. Ít nhất ở chế độ 64 bit.

Vấn đề duy nhất tôi có với điều này là tôi không thể làm cho chế độ 32bpp hoạt động. Tôi có thể làm 24bpp, đó là RRGGBB - 3 byte cho mỗi pixel (giống như mã màu HTML/CSS). Như với tất cả mọi thứ bao gồm 3 byte trên một máy tính nhị phân, điều này làm cho một số điều phức tạp hơn một chút (ít nhất là cho người mới bắt đầu). Bắt 4 byte cho mỗi pixel để làm việc vẫn eludes tôi. Có lẽ đây là một hạn chế của VirtualBox hoặc một cái gì đó.

Điều này có nghĩa là đối với đồ họa hi-res cơ bản, không cần phải thực hiện nhiều thứ cụ thể về phần cứng. Nếu bạn đang ở trên một phần cứng hiện tại nhẹ nhàng, bạn nên làm tốt.

+0

* "phần cứng hiện tại nhẹ" * - các phần mở rộng VESA đã giống nhau ít nhất kể từ đầu những năm 90 (ngoại trừ việc bổ sung thêm một vài chế độ được hỗ trợ) nên nếu các tụ điện trên phần cứng của bạn đang hoạt động, VESA sẽ hoạt động tốt . –

Các vấn đề liên quan