🖥️ بيكاسو النواة: تشريح 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() بأناقة تامة.