SDL chính thức hỗ trợ DOS: Hồi sinh hệ điều hành cổ điển với khả năng đồ họa và âm thanh hiện đại
Thư viện phát triển đa nền tảng SDL vừa bổ sung hỗ trợ hoàn chỉnh cho hệ điều hành DOS. Bản cập nhật cho phép các nhà phát triển chạy ứng dụng trên nền tảng cũ với hỗ trợ đồ họa VGA/VESA, âm thanh Sound Blaster và các thiết bị ngoại vi, đánh dấu một cột mốc thú vị cho cộng đồng lập trình retro.

Thư viện SDL (Simple DirectMedia Layer), một công cụ phổ biến trong việc phát triển game và ứng dụng đa phương tiện, vừa có một bước tiến ngoạn mục nhưng cũng đầy hoài niệm: chính thức hỗ trợ hệ điều hành DOS.
Một pull request lớn đã được hợp nhất vào kho lưu trữ chính của dự án, mang lại khả năng chạy SDL trên nền tảng DOS một cách hoàn chỉnh. Đây là kết quả của nỗ lực tập hợp từ nhiều nhà phát triển, bao gồm AJenbo, icculus, madebr, glebm và jayschwa, cùng với sự đóng góp quan trọng từ ccawley2011 trong khâu kiểm thử.
Màn hình DOS hiển thị thông tin hệ thống
Các tính năng được hỗ trợ
Bản port này được đánh giá là "hoàn chỉnh" với việc hỗ trợ hầu hết các phần cứng và tính năng cốt lõi của SDL:
- Đồ họa (Video): Hỗ trợ VGA và VESA 1.2+ framebuffer. Bao gồm màu RGB, màu 8-bit indexed với lập bảng màu VGA DAC, và khả năng lật trang phần cứng (hardware page-flipping) với đồng bộ hóa dọc (vsync). Trạng thái VBE cũng được lưu và khôi phục khi thoát.
- Âm thanh (Audio): Hỗ trợ dòng card Sound Blaster kinh điển, bao gồm Sound Blaster 16 (steo 16-bit lên đến 44.1 kHz), Sound Blaster Pro (stereo 8-bit lên đến 22 kHz), và Sound Blaster 2.0/1.x (mono 8-bit). Tất cả đều hoạt động thông qua DMA điều khiển bởi IRQ với bộ đệm kép tự động khởi tạo.
- Nhập liệu (Input): Hỗ trợ bàn phím PS/2 với mã quét mở rộng, chuột qua INT 33h và cần điều khiển gameport qua BIOS INT 15h với tự hiệu chỉnh.
Giao diện cấu hình và kiểm tra trên môi trường DOS
Chi tiết kỹ thuật và Thách thức
Việc đưa một thư viện hiện đại như SDL vào môi trường DOS đòi hỏi nhiều kỹ thuật lập trình cấp thấp thú vị:
- Đa luồng (Threading): Sử dụng bộ lập lịch hợp tác (cooperative scheduler) thông qua setjmp/longjmp với vá stack. Hỗ trợ mutexes, semaphores, TLS và condition variables.
- Bộ đếm thời gian (Timer): Sử dụng bộ đếm thời gian gốc dựa trên PIT (Programmable Interval Timer) thông qua hàm uclock() của DJGPP với độ phân giải khoảng 1.19 MHz.
- Hệ thống tệp: Hỗ trợ GetBasePath và GetPrefPath thông qua searchpath() của DJGPP, với các thao tác tệp POSIX làm dự phòng.
Những gì chưa được bao gồm
Mặc dù rất đầy đủ, bản port này vẫn bỏ qua một số tính năng do hạn chế của môi trường DOS hoặc khó khăn trong việc kiểm thử:
- Ghi âm âm thanh: Chỉ hỗ trợ phát lại (playback).
- Tải thư viện chia sẻ: Không hỗ trợ SDL_LoadObject.
- Thời gian: Sử dụng lại gettimeofday của Unix thông qua lớp POSIX của DJGPP.
Cách biên dịch
Để xây dựng SDL cho DOS, các nhà phát triển cần sử dụng chuỗi công cụ biên dịch chéo CMake với DJGPP:
cmake -S. -Bbuild-dos \
-DCMAKE_TOOLCHAIN_FILE=build-scripts/i586-pc-msdosdjgpp.cmake \
-DCMAKE_BUILD_TYPE=Release
cmake --build build-dos -j$(nproc)
Đây là một tin tuyệt vời cho cộng đồng yêu thích máy tính cổ điển (retro-computing) và những người muốn phát triển phần mềm chạy trên phần cứng thực tế hoặc thông qua giả lập như DOSBox. Bản cập nhật này dự kiến sẽ xuất hiện trong phiên bản SDL 3.6.0.
Bài viết liên quan

Công nghệ
Ember Smart Mug 2 giảm giá sâu: Món quà hoàn hảo để Mẹ luôn thưởng thức cà phê nóng
24 tháng 4, 2026
Công nghệ
Binh lính Mỹ bị bắt vì cáo buộc kiếm lời 410.000 USD từ thông tin mật trên Polymarket
24 tháng 4, 2026

Công nghệ
Diatec, công ty sở hữu thương hiệu bàn phím cơ FILCO, chính thức ngừng hoạt động
24 tháng 4, 2026
