[ Oliver Sorgens @ 12.11.2006. 08:35 ] @
Teo bih pitati da li neko zna kako se mogu izvrsavati bios-ovi prekidi u linuxu s obzirom da radi u protected modu, da li ima neki drajver za to ili nesto sto bi to moglo da omoguci. A takodje i instrukcija out (mislim na x86) ne moze da se koristi dok se kernelu ne kaze da moze da koristi portove (C funkcija), a ja ocu da sve to moze. Koliko sam ja nasao i vidim da mi samo DOS preostaje. Ali ako neko zna nesto o tome....
[ Srđan Krstić @ 16.11.2006. 10:30 ] @
Ne znam za C, ali kada iz assemblera pozoves neki interrupt zar nece on sam da TRAP-uje u kernel (protected mode)? Ili nisam razumeo tacno sta hoces? A sto se tice out funkcije, zar ne bi mogao da je koristis ako sam udjes u protected mode (promenis PE flag u CR0 registru). I u tom slucaju naravno ne zaboravi cli/sti da ti ne bi dosao interrupt dok si u "critical region"-u. Ne znam da li ti ovo pomaze, kazi ako nisam dobro ukapirao sta ti treba... (P.S. sve ovo mozes da pozoves iz C-a kroz inline assembly)
[ Oliver Sorgens @ 17.11.2006. 12:03 ] @
Evo ti primers sta hocu:

Ocu da korisenjem prekida int10h iscrtam jedan karakter na ekranu u nekoj boji i sl. (to sam vec radio u dos-u)
[ MyDuck @ 22.11.2006. 18:09 ] @
U linux-u se sve radi preko kernel system calls. Programirani prekid kao sto je int 10h se direktno poziva samo u toku butovanja i on radi u real modu i zbog toga ga je nemoguce pozvati iz linux protected moda. Evo ti tabela kernel sistemskih poziva http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html . Pozivaju se sa int 80h(ko sto je u DOS-u int 21h) uz odgovarajucu popunu registara. Ukoliko zelis da radis grafiku (crtas, menjas boje itd.) sa asemblerom moras koristiti drajvere (pogledaj vesafb framebuffer device driver, radi sa vesa 2.o grafickim kartama). Evo ti i adresa gde mozes pogledati kako da koristis drajvere uz pomoc sistemskih poziva http://asm.sourceforge.net/articles/fb.html .

Za ispisivanje karaktera na ekranu nije potrebno pozivati drajvere jer postoji sistemski poziv za to. Evo kako se to radi za nasm kompajler koji podrzava intel sintaksu :

section .text
global _start ;must be declared for linker (ld)

_start: ;tell linker entry point

mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel

mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel

section .data

msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string

[Ovu poruku je menjao MyDuck dana 22.11.2006. u 19:22 GMT+1]