Setelah kita berhasil menciptakan sebuah kanvas hitam pekat melalui manipulasi memori linear pada bagian sebelumnya, kita dihadapkan pada satu tantangan teknis: Bagaimana cara mencetak teks di atas kanvas tersebut? Secara default, firmware UEFI memiliki pengaturan warna tersendiri. Agar identitas RezaOS terlihat kontras dan estetis, kita harus melakukan konfigurasi ulang pada protokol output teks.
Bagian ini akan membedah secara mendalam peran protokol ConOut, mekanisme pewarnaan berbasis bit (Bitwise Attributes), dan penggunaan wrapper fungsi untuk mengatur estetika konsol.
1. Mengenal Protocol ConOut (Simple Text Output Protocol)
Langkah pertama dalam pengaturan teks dilakukan melalui akses ke layanan sistem berikut:
// 4. RESET SYSTEM TEXT AGAR MUNCUL
uefi_call_wrapper(SystemTable->ConOut->SetAttribute, 2, SystemTable->ConOut,
EFI_WHITE | EFI_BACKGROUND_BLACK);
Analisis Teknis:
SystemTable->ConOut: Ini adalah pointer menuju Simple Text Output Protocol. Di dalam arsitektur UEFI, protokol inilah yang bertanggung jawab untuk menangani seluruh keluaran berbasis karakter ke layar (konsol).SetAttribute: Ini adalah salah satu fungsi di dalam protokolConOut. Fungsi ini bertugas menentukan bagaimana karakter yang akan dicetak terlihat di layar, mencakup warna teks (foreground) dan warna latar belakang (background).
2. Anatomi Warna UEFI: Logika Bitwise OR
Dalam baris kode di atas, kita melihat penggunaan operator | (Bitwise OR) di antara dua konstanta: EFI_WHITE | EFI_BACKGROUND_BLACK.
Analisis Mendalam Atribut Warna:
Dalam spesifikasi UEFI, sebuah atribut warna disimpan dalam satu byte (8-bit). Pembagian bitnya adalah sebagai berikut:
- Bit 0-3 (4 bit bawah): Menentukan warna teks (Foreground). Terdapat 16 kombinasi warna (0-15).
- Bit 4-6 (3 bit tengah): Menentukan warna latar belakang (Background). Terdapat 8 kombinasi warna (0-7).
- Bit 7 (1 bit atas): Digunakan untuk efek Blink (berkedip) pada beberapa implementasi firmware.
EFI_WHITE: Biasanya bernilai0x0F(biner0000 1111).EFI_BACKGROUND_BLACK: Biasanya bernilai0x00(biner0000 0000).- Logika Penggabungan: Saat kita melakukan
0x0F | 0x00, hasilnya tetap0x0F. Namun, jika kita ingin teks putih di atas latar belakang biru (0x10), maka operasinya menjadi0x0F | 0x10 = 0x1F. Operator OR memastikan bit-bit warna teks dan latar belakang menyatu dalam satu variabel atribut tanpa saling menimpa secara merusak.
3. Eksekusi melalui uefi_call_wrapper
Sama seperti pada pencarian protokol GOP, pemanggilan fungsi SetAttribute harus dibungkus oleh uefi_call_wrapper.
Bedah Parameter:
SystemTable->ConOut->SetAttribute: Alamat fungsi yang akan dipanggil.2: Jumlah argumen yang dilewatkan ke fungsi tersebut.SystemTable->ConOut: Argumen pertama (PointerThis). Dalam standar protokol UEFI, setiap fungsi protokol selalu membutuhkan referensi ke dirinya sendiri sebagai argumen pertama (mirip denganselfdi Python atauthisdi C++).EFI_WHITE | EFI_BACKGROUND_BLACK: Argumen kedua, yaitu nilai atribut warna yang telah kita hitung.
4. Relevansi Teknis bagi RezaOS
Mengapa kita harus melakukan ini setelah membersihkan layar dengan loop hitam di Bab 5?
Secara teknis, saat kita mengisi memori video (framebuffer) secara manual dengan warna hitam, kita bekerja pada Level Grafis. Namun, fungsi Print() milik UEFI bekerja pada Level Konsol Teks. Jika kita tidak menyamakan warna latar belakang konsol teks dengan warna hitam yang kita buat di memori grafis, maka saat teks dicetak, firmware mungkin akan menggambar “kotak” warna default (misalnya abu-abu) di sekitar huruf tersebut, yang akan merusak estetika “Clean Look” yang kita inginkan.
Kesimpulan Bagian 6
Pengaturan atribut warna bukan sekadar masalah visual, melainkan sinkronisasi antara manipulasi hardware langsung (GOP) dan layanan tingkat tinggi firmware (ConOut). Dengan menetapkan teks putih di atas latar belakang hitam secara eksplisit, RezaOS memastikan bahwa seluruh elemen teks yang akan muncul nanti akan berintegrasi secara sempurna dengan kanvas hitam yang telah disiapkan sebelumnya.
Langkah Selanjutnya:
Pada bagian ketujuh, kita akan membedah logika Posisi Kursor dan Output String. Kita akan mempelajari bagaimana cara meletakkan teks tepat di tengah layar melalui kalkulasi baris dan kolom konsol.
