Setelah keberhasilan sinkronisasi atribut warna pada bagian sebelumnya, tahap selanjutnya dalam pengembangan RezaOS adalah menempatkan informasi identitas sistem pada posisi yang tepat di layar. Pada fase ini, pengembang harus memahami perbedaan mendasar antara sistem koordinat Piksel (grafis) dan sistem koordinat Karakter (teks).
Bagian ini akan membedah secara mendalam fungsi SetCursorPosition, pemetaan baris dan kolom pada konsol UEFI, serta teknik estetika dalam penyajian informasi identitas sistem.
1. Dualitas Sistem Koordinat: Teks vs Grafis
Satu hal yang sering membingungkan dalam pengembangan bootloader adalah adanya dua sistem koordinat yang berjalan secara paralel namun memiliki skala yang berbeda:
- Sistem Koordinat Grafis (GOP): Berbasis piksel, misalnya 1920×1080. Koordinat (0,0) adalah piksel di pojok kiri atas.
- Sistem Koordinat Teks (ConOut): Berbasis karakter (kolom dan baris). Standar dasar UEFI biasanya menyediakan mode 80 kolom dan 25 baris.
Dalam kode RezaOS, kita melakukan estimasi penempatan teks agar terlihat berada di tengah layar secara visual. Meskipun layar memiliki ribuan piksel, konsol hanya melihat puluhan kolom. Oleh karena itu, angka koordinat yang digunakan dalam fungsi teks jauh lebih kecil dibandingkan koordinat grafis.
2. Analisis Fungsi SetCursorPosition
Untuk memindahkan kursor teks ke posisi tertentu, kita menggunakan layanan dari protokol ConOut:
uefi_call_wrapper(SystemTable->ConOut->SetCursorPosition, 2, SystemTable->ConOut, 35, 10);
Bedah Parameter Teknis:
SetCursorPosition: Fungsi ini menginstruksikan pengontrol tampilan untuk memindahkan insertion point teks ke koordinat spesifik.35(Column): Menentukan posisi horizontal. Dalam standar 80 kolom, nilai 35 berada mendekati titik tengah horizontal layar.10(Row): Menentukan posisi vertikal. Dalam standar 25 baris, nilai 10 berada di area tengah-atas layar.uefi_call_wrapper: Seperti pada bagian sebelumnya, fungsi ini menjamin integritas pemanggilan fungsi lintas konvensi (ABI) antara kompilator dan firmware.
3. Eksekusi Output Identitas Utama
Setelah kursor berada di posisi yang diinginkan, identitas sistem dicetak menggunakan fungsi Print:
Print(NAMA_OS);
Analisis Mendalam:
Fungsi Print yang disediakan oleh pustaka GNU-EFI adalah fungsi tingkat tinggi yang membungkus layanan OutputString milik UEFI.
- Abstraksi:
Printjauh lebih fleksibel karena mendukung format specifiers (seperti%d,%s, atau%r) mirip denganprintfpada standar C. - Data Type: Karena
NAMA_OStelah kita definisikan dengan awalanL(Unicode/UCS-2) di Bab 1, fungsiPrintdapat memproses karakter tersebut dan menampilkannya di layar tanpa terjadi encoding error.
4. Diferensiasi Visual: EFI_LIGHTGRAY dan Versi Sistem
Untuk menciptakan hierarki visual yang profesional, RezaOS tidak menggunakan warna yang sama untuk semua teks. Informasi versi dibuat lebih redup agar fokus utama tetap pada nama sistem:
uefi_call_wrapper(SystemTable->ConOut->SetAttribute, 2, SystemTable->ConOut,
EFI_LIGHTGRAY | EFI_BACKGROUND_BLACK);
uefi_call_wrapper(SystemTable->ConOut->SetCursorPosition, 2, SystemTable->ConOut, 30, 12);
Print(VERSI_OS);
Analisis Estetika Teknis:
EFI_LIGHTGRAY: Memberikan kontras yang lebih lembut dibandingkanEFI_WHITE. Ini adalah teknik desain standar untuk membedakan antara judul utama dan sub-informasi atau status.- Penyesuaian Koordinat: Perhatikan bahwa kolom diubah menjadi 30 dan baris menjadi 12. Karena teks
VERSI_OS(“System Initializing…”) lebih panjang daripadaNAMA_OS(“RezaOS”), kita harus menggeser kolom lebih ke kiri (dari 35 ke 30) agar teks tersebut tetap terlihat seimbang di tengah layar.
Kesimpulan Bagian 7
Manajemen posisi kursor adalah jembatan antara kekosongan layar hitam dan antarmuka yang informatif. Dengan memahami perbedaan skala antara sistem koordinat teks dan grafis, serta menerapkan diferensiasi warna melalui atribut, RezaOS berhasil menampilkan identitas sistem yang elegan dan terstruktur secara proporsional di tengah layar.
Langkah Selanjutnya:
Pada bagian kedelapan, kita akan memasuki salah satu bagian paling kompleks dan menarik: Kalkulasi Geometri Loading Bar. Kita akan kembali ke dunia piksel untuk merancang koordinat sebuah batang kemajuan yang presisi secara matematis.
