Skip to content

🖥️ بيكاسو النواة: تشريح arch/vga_output.rs ​

هذا الملف هو التطبيق الفعلي (Implementation) لطبقة التجريد العتادي TextOutput التي طلبناها في hal/mod.rs.

السحر المباشر للذاكرة ​

في أجهزة x86 العادية، بطاقة الشاشة تضع نافذة صغيرة في الذاكرة الفيزيائية عند العنوان المكتوب بالدم: 0xB8000. كل بايت نضعه في هذه الذاكرة، سيقوم كارت الشاشة فوراً بعرضه على الشاشة، بلا شاشات تحميل ولا تعقيدات!

rust
const VGA_BUFFER: *mut u8 = 0xB8000 as *mut u8;

pub struct VgaTextOutput;

impl TextOutput for VgaTextOutput {
    fn write_char(&mut self, c: u8) {
        unsafe {
            // البايت الأول: الحرف الفعلي (الآسكي)
            *VGA_BUFFER.add(cursor) = c;
            // البايت الثاني: لون الخلفية ولون النص (مثلاً أبيض على أسود = 0x0F)
            *VGA_BUFFER.add(cursor + 1) = 0x0F;
        }
        cursor += 2; // تحريك المؤشر
    }
}

هذا الملف يعزل القذارة العتادية (Hardcoded Memory Addresses) داخل مجلد arch/x86_64، لكي تظل بقية النواة نظيفة وتستخدم كائن out.write_str() بأناقة تامة.

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