Skip to content

📺 الأرشيف الكلاسيكي: تشريح 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، لتبقى ملفات النواة نظيفة وتعمل على أي جهاز في العالم بأناقة!

تم تطويره بحب بواسطة مجتمع Qtoom.