Kamus Wajib Programmer Low-Level: Daftar Kode Sakti BIOS (x86 Real Mode)

Dalam pemrograman Assembly x86, kita berkomunikasi dengan hardware melalui mekanisme Interupsi (INT). Setiap perangkat keras memiliki “Nomor Telepon” (Interrupt Number) sendiri, dan setiap “Nomor Telepon” memiliki daftar “Menu Layanan” (nilai register AH).

Tentu kita harus mengetahui kode-kode untuk berinteraksi dengan Interrupt tersebut

Berikut adalah tiga pilar utama yang harus dikuasai: Video, Disk, dan Keyboard.

1. Layanan Video (Video Services)

Panggilan Utama: INT 0x10

Layanan ini mengontrol apa yang tampil di monitor. Ini adalah “kartu grafis” primitif Anda.

Kode Menu (AH)Nama FungsiDeskripsi & Kegunaan
0x00Set Video ModeMengubah mode layar.
AL=0x03: Mode Teks Standar (80×25 karakter).
AL=0x13: Mode Grafis VGA (320×200 piksel, 256 warna). Penting untuk membuat game/GUI.
0x02Set Cursor PositionMemindahkan kursor ke koordinat tertentu.
DH: Baris (Row).
DL: Kolom (Column).
BH: Nomor Halaman (biasanya 0).
0x03Get Cursor PositionBertanya “Di mana kursor sekarang?”.
• BIOS akan menjawab dengan mengisi DH dan DL dengan koordinat saat ini.
0x0ETeletype Output(Yang Anda pakai sekarang) Mencetak karakter + geser kursor otomatis.
0x09Write Character & AttributeMencetak karakter dengan WARNA.
AL: Karakter.
BL: Kode Warna (misal 0x04 = Merah).
Catatan: Kursor tidak geser otomatis.

2. Layanan Penyimpanan (Disk Services)

Panggilan Utama: INT 0x13

Ini adalah layanan paling vital. Tanpa ini, bootloader Anda tidak bisa memuat Kernel (inti OS) dari hard disk ke RAM.

Peringatan: Hati-hati menggunakan fungsi tulis (0x03). Salah parameter bisa menghapus data partisi komputer Anda. Gunakan Virtual Machine (QEMU/VirtualBox) untuk keamanan.

Kode Menu (AH)Nama FungsiDeskripsi & Kegunaan
0x00Reset Disk SystemMeminta disk drive untuk kalibrasi ulang (head reset). Dilakukan sebelum membaca disk untuk memastikan drive siap.
0x02Read Sectors(Sangat Penting) Membaca data dari Disk ke RAM.
AL: Jumlah sektor yang mau dibaca.
CL: Nomor Sektor (mulai dari 1).
CH: Nomor Cylinder/Track.
DH: Nomor Head.
ES:BX: Alamat RAM tujuan (Buffer).
0x03Write SectorsMenulis data dari RAM ke Disk. Parameter sama dengan Read Sectors.
0x08Get Drive ParametersBertanya spesifikasi disk (berapa jumlah track/head). Berguna untuk mendeteksi kapasitas hard disk.

3. Layanan Keyboard (Input Services)

Panggilan Utama: INT 0x16

Bagaimana OS Anda menerima ketikan pengguna? Lewat interupsi ini.

Kode Menu (AH)Nama FungsiDeskripsi & Kegunaan
0x00Read Key (Blocking)Komputer akan BERHENTI (Pause) sampai user menekan tombol.
• Jika tombol ditekan, kode tombol (ASCII) disimpan di AL.
0x01Get Key Status (Non-Blocking)Mengecek “Apakah ada tombol yang ditekan?” tanpa menghentikan program.
• Berguna untuk membuat game (agar karakter tetap bergerak meski tombol tidak ditekan).

4. Layanan Sistem (System Services)

Layanan serba-serbi untuk mengontrol motherboard.

Panggilan (INT)Kode Menu (AH)Nama FungsiDeskripsi
INT 0x19Reboot SystemMemaksa komputer restart (Warm Boot). Berguna jika OS mengalami error fatal.
INT 0x150x86Wait (Sleep)Menyuruh prosesor tidur selama sekian mikrodetik.
CX:DX: Durasi waktu tunggu.
INT 0x12Get Memory SizeMengetahui berapa banyak RAM (Conventional Memory) yang tersedia.

Tips Profesional: Referensi Pamungkas

Di dunia pemrograman sistem, tidak ada orang yang menghafal semua kode ini di luar kepala. Para profesional menggunakan “Kitab Suci” yang disebut RBIL (Ralf Brown’s Interrupt List).

Jika Anda ingin mencari fungsi yang aneh-aneh (misalnya mendeteksi Mouse atau memutar suara speaker beep), struktur pencariannya selalu sama:

  1. Tentukan Perangkat (INT berapa?)
  2. Tentukan Fungsi (AH berapa?)
  3. Siapkan Parameter (Isi register AL, BX, CX, dll sesuai buku manual).