Seri Bedah Kode RezaOS — Bagian 5: Inisialisasi Kanvas dan Manipulasi Memori Pixel-Buffer

Setelah berhasil mengekstrak metadata grafis dan menentukan alamat fisik memori video pada bagian sebelumnya, langkah taktis berikutnya dalam pengembangan RezaOS adalah membersihkan layar. Proses ini bukan sekadar estetika, melainkan langkah penting untuk memastikan tidak ada data sampah (garbage data) dari sisa-sisa proses booting firmware yang tertinggal di layar.

Bagian ini akan membedah secara mendalam logika pengisian memori video, kalkulasi volume piksel, dan cara kerja penulisan data langsung ke perangkat keras grafis.


1. Kalkulasi Volume Piksel: Resolusi vs Kapasitas Memori

Sebelum melakukan iterasi warna, program harus menentukan berapa banyak data yang perlu ditulis. Hal ini dilakukan melalui baris berikut:

// 3. ISI LAYAR DENGAN HITAM (Clean Look)
UINT32 TotalPixels = Height * PixelsPerScanLine;

Analisis Teknis:

Sebagaimana telah dibahas di Bab 4, memori video tidak selalu memiliki ukuran yang sama persis dengan resolusi visual layar. Oleh karena itu, perhitungan TotalPixels menggunakan variabel PixelsPerScanLine, bukan Width.

  • Logika Perhitungan: Jika monitor memiliki resolusi 1920×1080 tetapi memiliki padding memori sehingga PixelsPerScanLine bernilai 2048, maka kita harus mengalokasikan iterasi untuk 2048 piksel per baris.
  • Keamanan Memori: Menggunakan Height * PixelsPerScanLine memastikan bahwa setiap byte di dalam framebuffer dibersihkan secara merata, mencegah adanya garis-garis sampah visual di tepi layar yang sering muncul jika kita hanya menggunakan Width.

2. Memahami Notasi Warna Hexadecimal (0x00000000)

Kode ini menggunakan nilai 0x00000000 untuk merepresentasikan warna hitam:

// Warna Hitam = 0x00000000

Analisis Teknis:

Dalam sistem warna 32-bit (True Color) yang digunakan oleh UEFI, setiap piksel terdiri dari 4 byte. Struktur standarnya adalah BGRR (Blue, Green, Red, Reserved/Alpha).

  • Pemecahan Byte:
    • 0x00 pertama: Intensitas Biru (0)
    • 0x00 kedua: Intensitas Hijau (0)
    • 0x00 ketiga: Intensitas Merah (0)
    • 0x00 keempat: Reserved atau saluran Alpha (0)
  • Kombinasi Warna: Karena seluruh saluran warna memiliki intensitas minimum (nol), maka perpaduan yang dihasilkan adalah Hitam Pekat. Jika kita ingin mengubah layar menjadi Putih, kita akan menggunakan nilai 0x00FFFFFF.

3. Iterasi Memori: Loop vs Performa Hardware

Baris inti untuk membersihkan layar adalah sebuah looping sederhana yang bekerja pada tingkat alamat memori:

for (UINT32 i = 0; i < TotalPixels; i++) {
    VideoBuffer[i] = 0x00000000;
}

Analisis Teknis:

  • Linear Array Access: Karena VideoBuffer telah kita deklarasikan sebagai pointer UINT32, bahasa C memungkinkan kita memperlakukannya seperti sebuah array raksasa. VideoBuffer[i] secara otomatis akan menghitung alamat memori dengan rumus: $Alamat = BaseAddress + (i \times 4 \text{ byte})$.
  • Direct Memory Access (DMA): Proses ini menulis data langsung ke RAM kartu grafis. Kecepatan proses ini sangat bergantung pada kecepatan bus PCIe dan kecepatan memori video (VRAM) pada perangkat keras tersebut.
  • Efisiensi Single Loop: Dibandingkan menggunakan nested loop (loop di dalam loop) untuk koordinat X dan Y, penggunaan single loop linear jauh lebih cepat karena CPU dapat melakukan optimasi pembacaan memori secara berurutan (sequential memory access), yang sangat ramah terhadap mekanisme cache CPU.

4. Mengapa “Clean Look” Itu Penting?

Tanpa proses inisialisasi ini, layar komputer saat menyala akan menampilkan pola acak berwarna-warni yang merupakan residu listrik atau data dari aplikasi UEFI sebelumnya. Dengan mengisi seluruh framebuffer dengan nilai nol (hitam), kita menciptakan sebuah “kanvas kosong” yang siap digunakan. Hal ini memberikan kesan profesional pada RezaOS, seolah-olah sistem tersebut benar-benar mengambil alih kontrol penuh atas mesin sejak detik pertama.


Kesimpulan Bagian 5

Bab ini menjelaskan transisi dari pengambilan informasi menuju aksi nyata terhadap perangkat keras. Melalui manipulasi memori linear dan pemahaman tentang format warna 32-bit, RezaOS kini telah berhasil mengamankan area visual dan siap untuk menampilkan elemen-elemen antarmuka seperti teks dan loading bar pada tahapan bedah kode selanjutnya.


Langkah Selanjutnya:

Pada bagian keenam, kita akan membedah proses Restorasi Teks dan Atribut Warna. Kita akan melihat bagaimana RezaOS menginstruksikan sistem untuk mencetak teks dengan skema warna spesifik di atas latar belakang hitam yang baru saja kita buat.