Görevler:
Bu dersimizde Mike OS'un en temel kısmını diğer derslerden bağımsız olarak Windows ortamında oluşturacağız. Bu ders sadece ısınmak için 😄
* İşletim sistemi mantığı
* Bir işletim sistemini ön yükleme bilgileri
* 16 bit x86 gerçek mod assembly
* Ekrana belirli konumlara yazı yazma
* Hexdecimal görüntüleyici bir programla binary dosyayı görüntüleme
* Yazılan işletim sistemini Usb belleğe kurma
* Usb belleğe kurulu işletim sistemini gerçek bir bilgisayarda başlatma
1- Öncelikle programlar:
HxD.exe --> Onaltılık düzenleyici, bir bilgisayar dosyasını oluşturan temel ikili verilerin değiştirilmesine izin veren bir bilgisayar programıdır.
nasm --> assembly Derleyicimiz
Notepad++ --> assembly dosyalarımızı düzenlemek için kullanıcaz
Rufus --> Yazdığımız ön yüklenebilir programı usb belleğe kurmak için kullanıcaz
MagicISO --> Iso dosyası oluşturabilmek için
VirtualBox --> Sanal makinamız bilgisayarı kapatmadan yazdığımız programı bilgisayarımıza kurduğumuz bu sanal bilgisayarda denicez.
Burada dikkat nasm'yi kurarken masaüsyünde oluşturduğumuz "Sistem" klasörünün içinde Nasm klasörüne kurucaz.
Programlarımızı kurduktan sonra nasm zaten klasörün içinde diğer programlarıda "Sistem" klasörüne atıyoruz.
2- boot.asm Dosyası:
Programımızı yazmak için "Sistem" klasörünün içine bir txt dosyası oluşturuyoruz.
Ve adını boot.asm yapıyoruz.
Şuan en son bu şekilde gözükmeli
Ve dosyamızın üstüne sağ tıklıyoruz sonrasında Notepad++ ile açıyoruz.
3- boot.asm düzenleme:
Notepad++ ile açtığımız boot.asm dosyazmızı düzenliyoruz.
[BITS 16] ; Işlemciye kod türü belirtilir
JMP SHORT Yukleyici_Basla
NOP
Yukleyici_Basla:
TIMES 510 - ($ - $$) db 0 ; 510 byte tamamlanır
dw 0xAA55 ; Önyükleyici olduğu tanımlanır
1. blokta işlemciye kaç bitte yazıcağımız belirtilir
2. blok program kodları yazılır
3. blok programımızı 512 byte tamamlamak için geri kalan yere 0 lar yazılır. Sonraki kodda önyüklenebilir olduğunu gösteren imzayı içerir
2. bloğa aşağıda kodlar yazılır burada temel ayarlar vardır.
MOV ax, 07C0h
ADD ax, 544
CLI
MOV ss, ax
MOV sp, 4096
STI
MOV ax, 07C0h
MOV ds, ax
Dosyanın sonuna ilk kodlardaki 2. bloğun hemen üstüne yazdıracağımız metnleri içeren değişkenler tanımlanır.
Metin1 db 'Merhaba Bilgisayar', 0
Metin2 db 'Nasilsin', 0
Metin3 db 'iyiyim', 0
Metin4 db 'Aferin Sana', 0
Metin5 db 'Ek satir', 0
Metinleri ekrana yazmak için imleci taşımalyız bunun için yeni bir fonksiyon oluşturuyoruz.
; Imlec tasınır
; G: dl = x, dh = y
; Ç: bos
ImlecTasi:
PUSHA
MOV bh, 0
MOV ah, 2
INT 0x10
POPA
RET
Ekrana yazi yazdırmak için ikinci bir fonksiyon oluşturuyoruz.
; Ekrana yazı yazdırılır
; G: si = yazi
; Ç: bos
Yazdir:
PUSHA
MOV ah, 0x0E
MOV bh, 0
.birSonrakiKarakter:
LODSB
CMP al, 0
JE .Bitir
INT 0x10
JMP .birSonrakiKarakter
.Bitir:
POPA
RET
1. blokta değerler saklanır ve ekrana yazi yazmak için ilk değerler yerleştirilir
2. blokta "LODSB" ile yazilacak karakterin içinden siradaki karakter alınır
eğer bu karakter 0 değilse ekrana yazılır ve tekrar "JMP" ile ".birSonrakiKarakter:" koduna gelinir
eğer alınan karakter ise bu eşitlik "JE" ile kontrol edilir ve koşul sağlanırsa ".Bitir" koduna gidilir
3. blokta ilk blokta saklanan değişkenlergeri yüklenir ve "RET" komutu ile çağrılan yere geri dönülür
Fonksiyonlar tamam şimid fonksiyonlarımızı çağırarak ekrana önceden belirlediğimiz değer yazılır
MOV dl, 0
MOV dh, 0
CALL ImlecTasi
MOV si, Metin1
CALL Yazdir
MOV dl, 5
MOV dh, 1
CALL ImlecTasi
MOV si, Metin2
CALL Yazdir
MOV dl, 2
MOV dh, 3
CALL ImlecTasi
MOV si, Metin3
CALL Yazdir
MOV dl, 1
MOV dh, 4
CALL ImlecTasi
MOV si, Metin4
CALL Yazdir
MOV dl, 0
MOV dh, 7
CALL ImlecTasi
MOV si, Metin5
CALL Yazdir
JMP $
Her bir blokta önce "MOV" komutları ile ilk "dl" ye x kordinat değeri "dh" ye y kordinatı kaydedilir ve "CALL" komutu ile "ImlecTasi" fonksiyonu çağrılır sonrasında tekrar "MOV" komutu ile metin değişkenleri si yazmacına (registerine =
İşlemci kaydı, bilgisayar biliminde bilgisayarda merkezi işlem birimi tarafından erişilebilen, hızlı erişilebilir bir konumdur. Bazı kayıtlar belirli donanım işlevlerine sahip olsalar da, kayıtlar genellikle az miktarda hızlı depolamadan oluşur ve salt okunur veya yazılır olabilmektedir. detaylı1 bilgi:
https://tr.wikipedia.org/wiki/%C4%B0%C5%9Flemci_kayd%C4%B1
kaydedilir. "CALL" komutu ile de bu sefer "Yazdir" fonksiyonu çagrılır.
son blokta ise JMP $ program durdurulur.
Ensonki görünüm:
[BITS 16] ; Işlemciye kod türü belirtilir
JMP SHORT Yukleyici_Basla
NOP
Yukleyici_Basla:
MOV ax, 07C0h
ADD ax, 544
CLI
MOV ss, ax
MOV sp, 4096
STI
MOV ax, 07C0h
MOV ds, ax
MOV dl, 0
MOV dh, 0
CALL ImlecTasi
MOV si, Metin1
CALL Yazdir
MOV dl, 5
MOV dh, 1
CALL ImlecTasi
MOV si, Metin2
CALL Yazdir
MOV dl, 2
MOV dh, 3
CALL ImlecTasi
MOV si, Metin3
CALL Yazdir
MOV dl, 1
MOV dh, 4
CALL ImlecTasi
MOV si, Metin4
CALL Yazdir
MOV dl, 0
MOV dh, 7
CALL ImlecTasi
MOV si, Metin5
CALL Yazdir
JMP $
; Imlec tasınır
; G: dl = x, dh = y
; Ç: bos
ImlecTasi:
PUSHA
MOV bh, 0
MOV ah, 2
INT 0x10
POPA
RET
; Ekrana yazı yazdırılır
; G: si = yazi
; Ç: bos
Yazdir:
PUSHA
MOV ah, 0x0E
MOV bh, 0
.birSonrakiKarakter:
LODSB
CMP al, 0
JE .Bitir
INT 0x10
JMP .birSonrakiKarakter
.Bitir:
POPA
RET
Metin1 db 'Merhaba Bilgisayar', 0
Metin2 db 'Nasilsin', 0
Metin3 db 'iyiyim', 0
Metin4 db 'Aferin Sana', 0
Metin5 db 'Ek satir', 0
TIMES 510 - ($ - $$) db 0 ; 510 byte tamamlanır
dw 0xAA55 ; Önyükleyici olduğu tanımlanır
4- boot.asm derleme:
cmd açılır
Not: bunun için (Windows + R) ile açılan pencereye cmd veya arama çubuğuna cmd yazarak aça bilirsiniz.
"cd Desktop/Sistem" yazarak oluşturduğumuz sistem klasörüne girilir
"nasm boot.asm -f bin -o boot.bin" ilk dosya girdi dosyasıdır -f ile çıktı türü -o ile çıktı boot.bin dosyası belirtilir.
Sistem dosyamızda yeni dosyalar oluşmuş olmalı:
5- ISO dosyası oluşturma:
sistem klasöründeki MagicISO programını açıyoruz
Yeni bir önyüklenbilir bir dosya oluşturuyoruz.
boot dosyası için Masaüstünde oluşturduğumuz boot.bin dosyasını seçiyoruz.
Dosyayı kaydete basıyoruz.
Dosyayı sistem klasörünün içine boot.iso adı ile dosyayı kaydet butonuna basıyoruz.
Dizinimzde boot.iso adlı bir dosya oluşutor.
6- boot.iso yu sanal makine ile başlatma:
Virtual box uygulamasını açıyoruz ve yeni butonuna basıyoruz
ilk pencerede ayarlarımızı yapıyor ve ileri butonuna basıyoruz.
Sonrasında ileri ileri ... ve oluştura tıklayarak sürekli ileri yapıyoruz bu aralarda ayar yapılmayacak.
Ve deneme 1 adında oluşturabildik
"deneme 1"'e çift tıklayarak başlatıyoruz.
bizden bir iso istiyor bunun için aşağıdaki gibi tıklıyoruz
VE BAŞLIYOR...
İşlem tamam 😀
7- Flash kurulumu:
Rufusu başlatıyoruz
ve aşağıdaki gibi ayarlıyoruz
Bundan sonra bilgisayarı yeniden başlatıyoruz.
usb belleği ön yüklüyoruz ve yazdığımız işletim sistemi açılıyor.
Bende bu şekil:
8- Linkler:
9- Video: