Sabtu, 13 September 2014

Membuat Sistem Operasi Hello World Untuk Boot Flashdisk



Penjelasan
Ketika kita menyalakan komputer, CPU akan mencoba mencari ROM BIOS. Dalam memori ROM ini terdapat instruksi-instruksi untuk menyiapkan komputer sebelum kode boot sector di masukkan dalam memori. Boot sector code adalah sekumpulan kode instruksi yang disimpan pada alamat sektor pertama disk. Kode ini berisi kumpulan instruksi-instruksi yang digunakan untuk memasukkan file ke dalam memori. Karena semua disk mempunyai sektor berukuran 512 byte, maka kode boot sector yang kita buat harus berukuran 512 byte juga.
Setelah ROM ditemukan, instruksi selanjutnya dijalankan untuk melakukan POST(Power On Self Test). Tugas POST adalah memeriksa keadaan chip BIOS dan CMOS RAM. Jika tidak ditemukan masalah, berikutnya POST mencoba memeriksa perangkat keras komputer, seperti video card, disk, keyboard dan port untuk memastikan semuanya bekerja dengan baik.
Jika POST mengetahui semua hardware dalam keadaan normal dan CPU telah siap, maka POST berhenti dan berlanjut menuju BIOS untuk menentukan sistem operasi yang akan di jalankan. Biasanya BIOS menentukan urutan pencarian sistem operasi dalam disk dengan bantuan CMOS chip. Kita juga dapat mengubah urutan pencarian dengan masuk kedalam CMOS Setup atau dengan menekan F2 saat boot. Disini BIOS mencoba memeriksa disk satu per satu. Jika pada sektor pertama terdapat signature, BIOS akan memasukkan sektor tersebut ke alamat 0x7c00 dan menjalankan instruksi JMP ke alamat tersebut.

Sebelum Mulai
Sebelum memulai, saya menganjurkan anda untuk memahami bahasa assembly terlebih dahulu. Selain itu, anda harus tahu bagaimana mengatur BIOS agar USB flashdisk kita berjalan pertama kali(Yang pernah install ulang pasti tahu).
Perlu saya tekankan, bahwa percobaan ini dapat beresiko menimbulkan kehilangan data, jadi ikuti instruksi dan lakukan percobaan dengan hati-hati. Jika ada kehilangan atau kerusakan, diluar tanggung jawab saya. Saya anjurkan untuk memindahkan semua data dari Flashdisk ke komputer
Yang harus disiapkan:
  • HxD
  • NASM
  • Kode boot
  • Flashdisk
Saya berasumsi bahwa anda telah mengetahui bagaimana kode di bawah ini bekerja, jadi saya tidak akan bertele-tele menjelaskannya kepada anda. Saya hanya memberikan sedikit penjelasan dalam bentuk komentar di beberapa baris kode.
;format kode 16-bit
;ingat, bios meload bootsector pada 0x0000:0x7c00
[BITS 16]
[ORG 0x7c00]

jmp mulai
hello db "hello world",0

mulai:
mov ax,0
mov ds,ax
mov es,ax
mov ss,ax

mov sp,0xFFFF

;cetak hello world
mov si,hello
call print

;hang. Untuk berhenti, matikan PC dengan menekan tombol power
;jangan khawatir, 100% aman
hang:
    jmp hang

;fungsi untuk mencetak string
print:
    mov al,[si]
    cmp al,0
    je .ok
    mov ah,0x0e
    int 0x10
    inc si
    jmp print
.ok:
    ret

;ini membuat kode setelah dicompile menjadi 510 byte + 2 byte signature
times 510 - ($-$$) db 0
;signature harus 0xAA55
dw 0xAA55


Simpan dengan nama hello.asm
lalu compile dengan perintah nasm hello.asm

Instalasi
Untuk instalasinya, anda membutuhkan HxD dan Flashdisk yang sudah di pindah semua datanya.
  • Jalankan HxD sebagai administrator. Yaitu dengan cara klik kanan program HxD -> Run as administrator
  • Ke menu Extras -> Open disk





  • Seperti yang kita lihat “Removable Disk 1” adalah flashdisk yang telah kita tancapkan barusan.
    Jangan lupa menghilangkan centang Open as Readonly. Lalu, klik OK

  • Blok dan Copy satu sektor disk, yaitu block 0 - 1FF
  • Buat file baru. Buka menu File->New, lalu paste dan simpan dengan nama backup.bin
  • Sekarang buka file hello.asm yang sudah di compile. Setelah dicompile file ini biasanya bernama hello, tanpa ekstensi.
  • Copy semua kode hex dari file hello, lalu paste ke 1 sektor pertama (block 0 - 1FF) di Removable disk.


  • Setelah itu, save
  • Sekarang coba restart komputer dan lihat hasilnya. Jika tidak muncul, atur pengaturan booting melalui BIOS setting
Pada percobaan saya, inilah screenshot yang terlihat pada LCD laptop saya.






Untuk mengembalikan disk yang telah termodfikasi sektornya, copy data dari hasil backup tadi lalu taruh pada sektor pertama disk. Jika tidak berhasil, format saja.

Load disqus comments

0 comments