📺 الأرشيف الكلاسيكي: تشريح drivers/vga.rs (التعريف البدائي)
هذا الملف يعتبر "أثراً تاريخياً" من الأيام الأولى لكتابة النواة، قبل اختراع التجريد العتادي HAL وقبل نقل الشاشة إلى خادم مستقل (display_server).
الكتابة المباشرة في الذاكرة (The Hardcoded Way)
في أجهزة x86، كارت الشاشة يراقب العنوان الفيزيائي 0xB8000. أي شيء يكتب هناك يظهر على الشاشة فوراً! كنا قد كتبنا كائناً يطبع الحروف ويدير السطور والألوان بطريقة مدمجة جداً داخل النواة:
rust
pub struct Writer {
col: usize, row: usize, fg: Color, bg: Color,
}
impl Writer {
pub fn write_byte(&mut self, byte: u8) {
// ... (معالجة السطور)
let buffer = unsafe { &mut *(0xb8000 as *mut Buffer) };
unsafe {
// نكتب الحرف مع دمج لون النص ولون الخلفية في بايت واحد (Color Attribute)
core::ptr::write_volatile(
&mut buffer.chars[row][col],
VgaChar { ascii: byte, color }
);
}
}
}لماذا هجرناه؟
إذا قررنا تشغيل هذا النظام على جهاز (Raspberry Pi - ARM)، فإن العنوان 0xB8000 قد يكون مخصصاً لشيء آخر تماماً، وسينفجر النظام! لذلك قمنا بعزل هذا الكود المزعج ونقلناه إلى arch/x86_64/vga_output.rs خلف درع الـ HAL، لتبقى ملفات النواة نظيفة وتعمل على أي جهاز في العالم بأناقة!