membuat sistem operasi dengan fasilitas keyboard
TRANSCRIPT
TUGAS BESAR SISTEM OPERASI
MEMBANGUN KEYBOARD DIDALAM SISTEM OPERASI YUNO
DENGAN DUKUNGAN PENGERJAAN DARI LINUX MINT
Anggota Kelompok :
2017
ii
Sistem Operasi YUNO
Dalam tugas besar mata kuliah Sistem Operasi, kelompok kami akan
membuat sistem operasi yang diberi nama YUNO. YUNO adalah sebuah sistem
operasi sederhana yang memiliki fasilitas berupa keyboard. Dalam perancangan
keyboard dalam sistem operasi ini diperlukan beberapa metode seperti case, loop,
buffstr dan lain sebagainya. Selain itu, pada tampilan, tipe, dan sistem yang
digunakan dalam perancangan keyboard juga harus didefinisikan didalam file
keyboard. Dalam pengerjaan sistem operasi YUNO, Anda membutuhkan Linux
Mint dan menggunakan bahasa Assembly. Setelah itu, buat sebuah nama folder
sistem operasi bernama YUNO di bagian desktop agar pengguna lebih mudah untuk
mengakses foldernya selama pengerjaan sistem operasi ini.
Selanjutnya, Anda perlu membuat file baru dengan nama build.sh,
kernel.asm, linker.ld dan setup.sh. Sebelumnya, di bagian setup.sh diperlukan
beberapa instalasi alat seperti qemu, virtualbox, gcc dan sebagainya. Hal ini
ditunjukan pada gambar dibawah ini :
Kemudian, buat beberapa folder dengan format nama sebagai berikut :
Di bagian file kernel.asm, berikan beberapa command sebagai berikut :
Arti dari ‘bits 32’ sendiri adalah sistem operasi yang akan dibuat dengan 32
bit, align-nya sama dengan 32 bit yaitu 4 bit. Define double ‘dd’ dengan address
0x1BADB002 yang juga merupakan bootloader diarahkan untuk mengenal sistem
operasi ini sebagai operasi multi-boot. Untuk command ‘global start’ ditujukan
sebagai fungsi yang dapat mengakses linker.ld. ‘extern kmain’ sebagai fungsi yang
akan berada didalam kernel.c.
Sebelum memulai eksekusi maka perlu diberikan command ‘start’.
Selanjutnya, ‘cli’ ditujukan untuk membersihkan interupsi dimana interupsi ini
sendiri memliki beberapa terms yang didukung oleh sistem operasi YUNO untuk
melakukan beberapa pengerjaan seperti menulis di tampilan YUNO. Tetapi karena
sistem operasi ini dirancang dengan 32 bit maka service ini tidak dapat digunakan
dalam waktu lama sehingga pembersihan interupsi perlu dilakukan. Untuk ‘call
kmain’ ditujukan didalam kernel.c sebagai fungsi yang mengirimkan prosesor
untuk melanjutkan ekesekusi dari fungsi kmain dan ‘hlt’ memberhentikan kinerja
CPU dari alamat yang diberikan. Kernel juga dibagi menjadi dua bagian, bagian
pertama adalah entry point yang harus didalam alamat yang spesifik di suatu
memori dan entry point tersebut di eksekusi ke kernel.asm dan kernel.c.
Selanjutnya, buat beberapa file baru didalam folder include, diantaranya
keyboard.h, sistem.h, string,h, tampilan.h dan tipe.h.
Berikut ini adalah command dari file tipe.h :
Int8 adalah integer dari 8 bit yang berperan sebagai char samping. Unsigned
char uint8 adalah inside char dari 8 bit. Int16, int32, int64 adalah integer 16 bit, 32
bit dan 64 bit yang side short, dan unsigned int16,int32, dan int64 adalah inside
integer dari masing-masing bit. Sedangkan typedef char* adalah string pointer
Berikut ini adalah command dari file string.h :
Uint16 mengembalikan unsigned integer dari 16 bit dan menggambil ch.
String length atau strLength adalah kalkulasi banyaknya karakter yang diberikan
pengguna. While (ch[i++]) artinya I sama dengan 0 terjadi saat diakhir string.
Berikut ini adalah command dari file sistem.h :
System.h ada dua fungsi void diantaranya adalah void outportb yang
menggunakan uint8 bit didefiniskan didalam system, fungsi pertama adalah hasil
inport yang menggambil satu value dari tipe didalam integer 16 bit dan port address
dan mengembalikan value address itu kembali. Lalu, bagian volatile dilakukan
modifikasi dengan Assembly dan mengembalikannya yang terhubung ke port
spesifik yang diletakan disini. Fungsi void inportb sangat berperan penting di dalam
sistem.h karena fungsi ini dapat mengkontrol kursor apa yang dapat muncul
ditampilan dimana akan langsung ditulis ke dalam port dan void outportb bagian
volatile juga menulis ke port particular dan instruksi dengan Assembly.
Berikut ini adalah command dari file tampilan.h :
Ada beberapa fungsi yang didefinisikan di dalam tampilan.h diantaranya
void clearLine, void updateCursor, void clearScreen, void scrollUp, void
newLineCheck, void printch, dan void print. Void clearline digunakan untuk
memberikan pengaruh terhadap tampilan OS, dimana tampilan YUNO terdapat 85
kolom, 25 baris dan setiap box memiliki andil dalam mengatur karakter dan warna.
Void updateCursor adalah kursor menggunakan variable Y dan variable X sebagai
integer yang nilainya nol sebagai inisialisasi. Fungsi void ini untuk membuat
variable baru memanggil temp yang berarti unsigned sehingga variable ini akan
ambil kursor Y dikali lebar layar ditambah kursor x yang berarti fungsi ini akan
mengirimkan lokasi kursor OS ini dimana kursor ini harus melakukan port
spesifiknya (0x3D4,0x3D5) yang mengatur posisi dari kursor. Mode VGA YUNI
yang dipilih modenya juga adalah 85 x 25 x 16 color.
Void clearScreen untuk menghapus seluruh demonstrasi yang dilakukan
dengan menggunakan clearLine (clearLine 0 ke garis line pertama ke tinggi garis
layar -1). Void scroolUp untuk side uint 8 bit, membuat variable baru (vidmem)
yang mengambil value alamat layar (0xB8000). Vidmem[1] akan pindahkan
seluruh line keatas.
Void newLineCheck terjadi jika teks telah diakhir tampilan, lalu naik ke atas.
Setelah mencapai akhir tampilan layar, kata-kata tersebut akan naik keatas dengan
tidak otomatis. Sehingga diperlukan membuat fungsi lagi yaitu scrollup
Void printch adalah argument char yang akan diprint ke layar yang diberikan
beberapa kondisi. Kondisinya didefinisikan sebagai berikut :
Case 1 (0x08) untuk pindah balik ke kursor X dan akan dihapus jika bukan
case 0x09 tab button.
Case (‘\r’) adalah backslash yang start line at the beginning sehingga bisa
lihat cursor X bisa ambil 0
Case (‘\n’) adalah cursor X mengindikasi 0 sehingga bisa lompat ke kondisi
lainnya.
Default untuk print karakter dan menganti warna layar 0x30 menjadi biru
hitam dan bagian If cursor X akan naik ke atas garisnya secara otomatis jika
telah di bagian baris akhir di layar dan newLineC heck untuk memberikan
spasi kosong saat garis naik ke atas.
Void print untuk print argument tipe string yang disebut ch. Uint16 untuk
inisialisasi dan mengulang kata-kata yang diinstruksikan saat loop repeat.
Bagian command keyboard.h sebagai berikut :
Keyboard.h terhubung dengan tampilan.h, sistem.h, dan tipe.h. Fungsinya
hanya satu yaitu read string. Return ke string dan tidak ada parameter. If inport
adalah equal true dan eksekusi switch untuk 0x64 address dapat mengecek status
dari keyboard, mengetahui saat kunci ditekan dan 0x60 address untuk membaca
kode kunci itu. Dalam kode ini dirancang membaca kunci saat kuncinya
ditekan.Buffstr menjadi variabel memori yang menggunakan string sebagai buffer.
Sehingga, didalam casenya diperlukan definisi dalam setiap angka dan huruf
dengan menggunakan bilangan decimal seperti 1 untuk desimal 2 dan ENTER
unutk decimal 28.
Bagian command di file kernel.c sebagai berikut :
Didalam kernel.c, dirancang lebar tampilannya menjadi 85 sehingga ada
jarak. Command yang diizinkan terbatas, hanya ‘zee’, ‘fakultas ilmu komputer’ dan
‘kandang’ menggunakan enter untuk mengirim data. While itu adalah loop, loop
yang akan mengulang sendiri, dan membaca string dari keyboard. String-nya sama
dengen ‘zee’ yang nantinya akan mengeksekusi instruksi “Yak~ kamu telah ada di
zee”. strEql (string equal function) membandingkan dua string dan mengembalikan
satu jika stringnya sama atau nol. Jika mereka tidak memiliki jumlah karakter yang
sama dan sama ukuran karakternyo maka dibandingkan karakternya juga secara
individu.
Setelah menyelesaikan langkah diatas maka compile kernel.asm dan
kernel.c dengan menggunakan alat yang telah kita install tadi dengan command
sebagai berikut :
Gunakan command “nasm –f elf32 kernel.asm –o kasm.o” untuk
menambahkan kasm.o sebagai hasil compile-nya. “Gcc –m32 –c kernel.c –o kc.o”
untuk menambahkan kc.o sebagai hasil compile-nya.
0x100000 ini adalah address penyimpanan 100.000 hexadecimal yang
nantinya diguanakan memori tersedia untuk mengalokasikan sistem operasi ini ke
dalam alamat 0x100000 ini.
Gunakan “ld (linker) –m elf_i386 linker.ld –o kernel.bin kasm.o kc.o” untuk
menggabungkan dua input file (kasm.o dan kc.o) menjadi satu. Setelah itu, gunakan
“qemu-system-i386 –kernel kernel.bin” untuk mencetak karakter di tampilan.
Lalu, copy semua command sebelumnya ke dalam ‘build.sh’ dan atur
‘build.sh’ di menu pengaturan > permission > allow excuting file as a program
sehingga ‘build.sh’ bisa dieksekusi filenya menjadi program.
YUNO dapat menjalankan command di atas jika dibuat suatu file untuknya
maka diperlukan membuat file baru yuno > boot > grub > buat file baru bernama
grub.cfg = diseting kan agar dapat delink kesana agar dapat multiboot. Lalu, copy
‘kernel.bin’ ke dalam folder boot juga. Copy seluruh command ke build.sh.
Ffreestanding yang dimaksud dibawah ini adalah sebagai argument gcc yang
fungsinya prevent compiler dari penggunaan fungsi apapun yang didefinisikan oleh
sistem, kecuali definisi yang dibuat sendiri.
Akhir langkah :
Diakhir, sistem operasi YUNO dengan fasilitas keyboard dapat dibuat file
iso dengan cara memberikan command sebagai berikut :
Setelah file iso telah siap, jalankan sistem operasi tersebut dalam VirtualBox