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. |
|
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. |
|
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. |
|
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ś |
|
DejaVu |
» 2012-10-26 00:13:57 Sam bym chętnie poczytał jakie fragmenty kodu należy umieścić w bootloaderze i dlaczego :) |
|
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 :) |
|
Mrovqa |
» 2012-10-26 08:17:35 |
|
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 :) |
|
« 1 » 2 |