From: Baris Metin (baris@gelecek.com.tr)
Date: Mon 19 Aug 2002 - 19:02:06 EEST
Content-Type: text/plain; charset=iso-8859-9
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Mon, Aug 19, 2002 at 01:46:25PM -0000 , Halil Demirezen :
> Selam konularla alakali deil ama,
>=20
> linux daki bootstrap kodunu inceledim ve bir kac tane daha kod inceledeim=
farkli=20
> os larin bootstraplerini. anladigim kadariylar...
>=20
[SNIP]=20
> boylece belirtigimiz sayida sector floppy veya hdiskten 3000h segment li =
adrese=20
> atiliyor. diskten sector okuma veya jmp etme konusunda bir sorum yok fak=
at
> bootstrap kodu icindeki bir offset degerli msg i ekrana bios interruplari=
ile yazdiramiyorum.
Selamlar,
Murat'in dedigi gibi int10 isini gorecektir. Nasm ile calisirken
ugrastigim bir kodu ekte gonderiyorum. Bol bol comment var icinde zaten
anlatmaya gerek yok.
iyi calismalar,
--=20
Baris Metin
GELECEK A.S.
-- Attached file included as plaintext by Ecartis --
; Baris Metin
; ------------------------------------------------------
; Bootsector 512 byte olmali.
; Son iki byte'da 0xAA55 degerleri bulunmali...
[BITS 16] ; Bios 16-bit real mode'da baslasin.
[ORG 0] ; Data offset = 0
; daha sonra registerlari 0x7c00'a kaydiracagiz.
jmp basla ; basla'ya atla ve islemleri gerceklestir.
; Kullanilan veriler
; ------------------
bootdrv db 0 ; baslangic aygitimiz.
bootmsg db 'Baris Metin boot sector',13,10,0
rebootmsg db 'Bilgisayari bastan baslatmak icin. Bir Tusa basin...',13,10,0
biseybisey db 'Buradan sonra istedigini yapabilirsin. Boot sector bitti. Mesela gidip biryerden bir cekirdek yukle ve ona jmp et.',13,10,0
; Kullanilacak fonksyonlarimiz...
;*******************************************
message: ; ds:si 'yi ekrana yaz.
lodsb ; ds:si 'deki byte 'i al'ye aktar.
or al,al ; karakter 0 ise son demektir
jz done
mov ah,0eh ; karakteri ekrana yaz.
mov bx,0007 ; attribute
int 0x10 ; BIOS'u cagir.
jmp message ; jmp ile tekrar message'i cagirarak diger karaktere gec.
done:
ret
; ********************************************************************
getkey:
mov ah, 0 ; bir tusa basilmasini bekle.
int 016h
ret
; ********************************************************************
reboot:
mov si, rebootmsg ; rebootmsg'yi ekrana yaz.
call message
call getkey ; bir tusa basilmasini bekleyen fonk.'u cagir.
db 0EAh ; makina dili: FFFF:0000 (reboot)'a atla.
dw 0000h
dw 0FFFFh
; reboot yapidigi icin bu fonk.'da "ret" gerekmiyor.
; Boot islemi icin ana gorev burada yapiliyor.
; ********************************************
basla:
mov ax,0x7c0 ; BIOS ilk olarak bizi 0x7c00'a atiyor.
mov ds,ax ; bu yuzden yum datamiza 0x7c0'a atiyoruz.
mov [bootdrv], dl ; dl hangi surucu (device) dan boot ettigimizi tutuyor.
; bu bilgiyi ondan aliyoruz.
cli ; bir stack olusturacagiz interruptlari temizle...
mov ax,0x9000 ; stack icin tipik bir yermis burasi.
mov ss,ax
mov sp,0xffff ; Tum segmenti kullanalim.
sti ; interruptlari yerine koy.
; Protected mode'da islemci interruptlari disable edecektir aslinda.
mov si,bootmsg ; baslangic mesajini yazdir.
call message
mov si,biseybisey ; buradan sonra istedigimizi yapabiliriz.
; Kernel'i yuklemek ve ona jump etmek gibi.
call message
call getkey
call reboot
times 510-($-$$) db 0 ;510 byte'i 0 (sifir)'lar ile doldur
dw 0xAA55 ; ve son iki byte'a magic degerleri koy.
; bios 511 (55) ve 512. (AA) byte'larda bu magic
; degerleri arar.
-- Attached file included as plaintext by Ecartis --
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)
Comment: Baris Metin - http://metin.org
iD8DBQE9YRZ+9d0Ui5CybXkRAgamAKCO2jPDpEVQu7KfZzGLK+sXj9FygwCglzte
lta981BSyAVMcoMoPaeWxqQ=
=TUX6
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
Liste üyeliğiniz ile ilgili her türlü işlem için
http://liste.linux.org.tr adresindeki web arayüzünü kullanabilirsiniz.
Listeden çıkmak için: 'linux-request@linux.org.tr' adresine,
"Konu" kısmında "unsubscribe" yazan bir e-posta gönderiniz.
-----------------------------------------------------------------------