Evolusi Firmware: Bedah Teknis BIOS vs. UEFI bagi Pengembang Low-Level

Kompilasi oleh : Reza Ervani bin Asmanu

Dalam hirarki sistem komputer, firmware adalah jembatan pertama yang menghubungkan silikon perangkat keras dengan logika perangkat lunak. Bagi pengembang yang bergelut di bidang Operating System Development (OSDev) atau pemrograman bare-metal, memahami perbedaan antara BIOS dan UEFI bukan sekadar pilihan, melainkan keharusan arsitektural.

1. Arsitektur CPU dan Segmentasi Memori

Legacy BIOS: Belenggu 16-bit Real Mode

Saat komputer dengan BIOS dinyalakan, prosesor x86 memulai eksekusi dalam Real Mode 16-bit. Ini adalah mode warisan dari prosesor Intel 8086.

  • Limitasi 1 MB: Dalam mode ini, CPU hanya dapat mengalamatkan memori hingga 1 MB (0x00000 – 0xFFFFF).
  • Segmentasi: Alamat memori dihitung menggunakan rumus $Address = (Segment \times 16) + Offset$. Hal ini membuat pengelolaan memori menjadi kompleks karena keterbatasan ukuran segmen (64 KB).
  • Alamat Statis: BIOS selalu mencari sektor pertama disk dan memuatnya tepat ke alamat fisik 0x7C00.

UEFI: Kebebasan 64-bit Long Mode

Berbeda dengan BIOS, UEFI modern umumnya memulai eksekusi langsung dalam Long Mode (64-bit) atau minimal Protected Mode (32-bit).

  • Flat Memory Model: Tidak ada lagi segmentasi rumit. Pengembang dapat langsung mengakses ruang alamat memori yang sangat luas (hingga Terabyte).
  • Dynamic Loading: Kode tidak lagi dipaku pada alamat 0x7C00. Firmware UEFI memiliki manajer memori yang mengalokasikan ruang bagi berkas .efi secara dinamis.

2. Mekanisme Komunikasi: Interupsi vs. Protocol

BIOS: Interrupt Vector Table (IVT)

BIOS menyediakan layanan dasar melalui Software Interrupts. Daftar layanan ini disimpan dalam Interrupt Vector Table (IVT) di alamat 0x0000:0000.

  • Cara Kerja: Pengembang mengisi register tertentu (seperti AH, AL, DX) kemudian memanggil instruksi INT. Contohnya, INT 0x10 untuk video atau INT 0x13 untuk disk.
  • Kekakuan: Interupsi ini sangat bergantung pada status register CPU dan tidak mendukung pemrograman berorientasi objek atau struktur data yang kompleks.

UEFI: System Table dan Protocol

UEFI menggunakan pendekatan Service-Oriented. Komunikasi dilakukan melalui System Table.

  • Boot Services & Runtime Services: UEFI menyediakan tabel besar yang berisi pointer (alamat memori) ke fungsi-fungsi tertentu.
  • Protocol: Layanan dikelompokkan dalam protokol (seperti Graphics Output Protocol atau Simple Text Input Protocol). Untuk menggunakan layanan, Anda mencari alamat protokolnya di System Table, lalu memanggil fungsi tersebut seperti fungsi pada bahasa C.

3. Storage dan Organisasi Berkas

MBR (Master Boot Record) pada BIOS

  • Sektor Tunggal: BIOS hanya membaca 512 byte pertama dari disk. Kode bootloader harus muat di ruang yang sangat sempit ini atau melakukan chain-loading ke sektor berikutnya.
  • Partisi Terbatas: MBR hanya mendukung maksimal 4 partisi primer dan kapasitas disk hingga 2 TB.

GPT dan FAT32 pada UEFI

  • File System Aware: UEFI memiliki driver bawaan untuk membaca sistem berkas FAT32. Artinya, bootloader tidak lagi berupa biner mentah di sektor tersembunyi, melainkan sebuah berkas biasa di dalam partisi.
  • GPT (GUID Partition Table): Mendukung partisi yang hampir tak terbatas dan kapasitas disk yang jauh melampaui 2 TB. UEFI akan mencari jalur /EFI/BOOT/BOOTX64.EFI secara otomatis untuk memulai proses boot.

4. Tantangan Implementasi: Calling Convention

Salah satu hal yang paling mengejutkan bagi pengembang yang pindah dari BIOS ke UEFI adalah aturan pemanggilan fungsi (Calling Convention).

Catatan Teknis: Pada BIOS 16-bit, argumen fungsi dilewatkan melalui register atau stack tanpa aturan yang sangat ketat. Namun, pada UEFI x64, Anda wajib mengikuti Microsoft x64 Calling Convention.

AturanDeskripsi
Register UtamaEmpat argumen pertama wajib berada di RCX, RDX, R8, dan R9.
Shadow SpacePemanggil (caller) wajib menyisakan 32 byte ruang kosong di stack sebelum memanggil fungsi.
Stack AlignmentStack pointer (RSP) harus selaras pada kelipatan 16-byte sebelum instruksi call.

Kesimpulan: Mana yang Harus Dipilih?

Bagi pengembang yang sedang belajar dasar-dasar arsitektur prosesor x86, BIOS adalah laboratorium terbaik karena sifatnya yang transparan dan “mentah”. Anda belajar mengendalikan setiap bit register tanpa perantara.

Namun, untuk kebutuhan sistem modern yang memerlukan keamanan (Secure Boot), skalabilitas, dan efisiensi memori, UEFI adalah standar masa kini yang mutlak dikuasai. Memahami keduanya memberikan Anda pandangan 360 derajat tentang bagaimana komputer tumbuh dari sekadar mesin 16-bit menjadi superkomputer 64-bit yang kita gunakan hari ini.


Referensi Tambahan untuk Pengembangan

  • Emulator: QEMU adalah standar emas untuk menguji kedua jenis firmware ini di lingkungan Linux seperti Fedora.
  • Firmware: Gunakan paket EDK2-OVMF untuk simulasi UEFI yang akurat di lingkungan virtual.