Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[asm] Bootloader wywala

Ostatnio zmodyfikowano 2012-10-29 19:50
Autor Wiadomość
bingo009
Temat założony przez niniejszego użytkownika
[asm] Bootloader wywala
» 2012-09-24 17:26:29
Witam, piszę sobie prostego bootloadera, aby lepiej zrozumieć programowanie w Asmie, lepiej poznać sprzęt i zrozumieć OS'y od zakrytej strony. No więc i tak się dziwie, że pisze to sam, a nie z jakiegoś tutoriala, tylko wyszukuje w internecie przerwania i je wykorzystuje. Zaczęło się niewinnie, uruchomienie trybu tekstowego 80x25, i napisanie pojedynczego znaku. Dobra, działa, więc postanowiłem stworzyć proceduję write_char, która nie dość, że zajmuje się wpisywaniem znaku, to w dodatku przesuwa kolumnę o 1 w prawo, lecz dodałem też osłonę, która powoduje, że jeżeli liczba kolumn jest większa od 25, to zeruje ją i daje następny wiersz. Tylko, że teraz bootloader się nie uruchamia, przez program Bosch. Najpierw pisze Press F12 to Boot Menu, a potem odrazu program staje i w konsoli jeden za drugim wywala takie teksty:
[CPU0 ]LAR not regonized in real or virtual-8086 mode

O co to biega?

 start_boot:
; Setting on TextMode
xor ah, ah
mov al, 03h
int 10h
xor al, al

; Cleaning the registers
xor ah, ah
xor al, al
xor bl, bl
xor cx, cx

call write_char

; Infinity loop
 boot:
jmp boot

; Write a 0's 510b
times 510-($-$$) db 0
; Bootloader flag 2b
dw 0AA55h











; Writing a simple char and add 1 do cursor position
 write_char:
; Writing a simple char
mov ah, 09h
mov al, 'V'
xor bh, bh
mov bl, 07h
mov cx, 1
int 10h

; Get cursor position
xor al, al
xor bl, bl
xor cx, cx
mov ah, 03h
int 10h

; Add cursor position, if column == 25, then start next row and reset column
mov ah, 02h
add dl, 1
int 10h
cmp dl, 25
ja reset_column
ret

reset_column:
add dh, 1
xor dl, dl
mov ah, 02h
int 10h
ret

Żeby nie było, nie zamierzam napisać czegoś na miarę Linux, bo to by zajęło dłuugie lata, poprostu chcę się pobawić trochę sprzętem i sam posterować tym wszystkim. Użyłem tagów C++, aby kod był łatwiejszy do analizy.

Edit: Chyba wiem o co biega. Instrukcja call zapisuje na stosie adres powrotu, problem w tym, że nie zdefiniowałem żadnego stosu. Pewnie o to chodzi. Cóż pomyłka, w Windows stos był z góry ustalony, zapomniałem, że tu musze sam zdefiniować stos.
P-65478
RazzorFlame
» 2012-10-25 19:33:19
Och stary nie wiem co z twoim błędem ale dam ci rade. Jeśli znasz się dość dobrze na na C++ (i jakiejś bibliotece do GUI) to radziłbym ci w miarę poznawania nowych słówek (w ASM ocz.) zrobić program który tłumaczy twoje własne komendy (które by ci najbardziej pasowały + łatwiej się odczytać w kodzie) na kod w ASM'ie. NP: W jednej kolumnie okna (chodzi o EditBox) byś pisał kod (twoje komendy) a w drugim EditBoxie byś widział kod w języku ASM.
P-67500
bingo009
Temat założony przez niniejszego użytkownika
» 2012-10-25 21:30:24
Taki pseudo język programowania? No cóż myślałem nad tym, Asembler mimo wszystko może się przydać jeszcze. A dzięki pisaniu tego systemu poznałem go o wiele lepiej, niż podczas pisania kursów. W sumie to GUI niepotrzebne, mógłbym napisać taki bardzo prosty kompilator, który czyta plik źródłowy, zapisuje do tablicy komendy, tłumaczy je na ASM i zapisuje do nowego pliku.
P-67512
crash
» 2012-10-26 00:04:23
Bawię się bootloaderem napisanym przez znajomego, ale że on ciągle chleje, to się nie idzie z nim zgadać. Możesz podać, jak skonfigurowałeś bosza (bochssrc.txt) ? Krew mnie zalewa, głównie dlatego, że za diabła ten program nie chce odpalić bootloadera i kernel.bin'a dołączonego do niego. Powymieniałbym się doświadczeniami, ale asm to jeszcze dla mnie czarna magia, zdecydowanie bardziej czarna niż Pascal/C kiedyś, kiedyś
P-67531
DejaVu
» 2012-10-26 00:13:57
Sam bym chętnie poczytał jakie fragmenty kodu należy umieścić w bootloaderze i dlaczego :)
P-67532
crash
» 2012-10-26 00:38:12
Podrzucę kod bootloader;a jak tylko dowiem się, czy mogę go opublikować. Chociaż do niedawna był dostępny na sourceforge, nie chcę oberwać po uszach za upublicznianie nie swoich prac :)
P-67535
Mrovqa
» 2012-10-26 08:17:35
@DejaVu pierwszy link w google'u po wpisaniu 'bootloader c++'
Miałem kiedyś ten artykuł sobie przeczytać, ale po prostu nie miałem czasu. Teraz sobie o tym przypomniałem, więc rzuciłem linkiem. Mam nadzieję, iż się spodoba ;)
P-67537
CodeMeister
» 2012-10-27 11:16:01
Zaraz pewnie 'jak grzyby po deszczu' będą się pojawiać tematy typu "Jak napisać własnego OSa"...

Sam kiedyś chciałem :)
P-67633
« 1 » 2
  Strona 1 z 2 Następna strona