Forum Coders' city Strona Gwna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UytkownicyUytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj si, by sprawdzi wiadomociZaloguj si, by sprawdzi wiadomoci   ZalogujZaloguj 

Potrzebuj szybkiej odpowiedzi na moje pytanie... Zasady

[NASM] Bootloader



 
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Elektronika, programowanie niskopoziomowe
Zobacz poprzedni temat :: Zobacz nastpny temat  
Autor Wiadomo
nwxxeh



Doczy: 21 Kwi 2007
Posty: 824

PostWysany: Sob Mar 31, 2012 3:49 pm  OP    Temat postu: [NASM] Bootloader Odpowiedz z cytatem Pisownia

Znalazem fajny przykad bootloadera i dokumentacje przerwa w BIOSie w wikipedii.

Prbowaem przerobi kod bootloadera, aby zacz robi co wicej ni wywala "Hello World":
Kod:
[BITS 16]    ;szesnastobitowiec :D
[ORG 0x7C00]    ;offset

CALL DrawTenLines    ;rysujemy
JMP $         ;zwieszamy

DrawOneLine:
MOV EAX, 0x00 ;x = 0

nextpixel:
MOV AH, 0x09 ;numer funkcji - WritePixelOnScreen [wiki]
MOV AL, 0x05 ;kolorek - Magenta
MOV BH, 0x00 ;Numer strony
MOV CX, [EAX] ;x
MOV DX, [EBX] ;y
INT 0x10 ;Przerwanie video - BIOS
ADD EAX, 0x01 ;Dodajemy jeden :D
CMP EAX, 0x10 ;if (x == 10) {
JE exitfunc ;wyjdz z funkcji } else {
JNE nextpixel ;nastepny pixel }
exitfunc: ;wychodzimy :D
RET

DrawTenLines: ;rysujemy kilka linii, ale nie dziesiec :D
MOV EBX, 0x00 ;y = 0
CALL DrawOneLine
MOV EBX, 0x01 ;y = 1
CALL DrawOneLine
MOV EBX, 0x02 ;y = 2
CALL DrawOneLine
MOV EBX, 0x03 ;y = 3
CALL DrawOneLine
MOV EBX, 0x04 ;y = 4
CALL DrawOneLine
MOV EBX, 0x05 ;y = 5
CALL DrawOneLine
RET

;Data

TIMES 510 - ($ - $$) db 0    ;Wypelniacze
DW 0xAA55            ;Sygnaturka bootu :D


Lecz jest problem - kod nie dziaa - tzn. nie drukuje linii, tylko dziaa fragment:
Kod:
JMP $         ;zwieszamy


W czym jest problem? Poprawiaem kilka rzeczy. Testowane na VirtualBoxie.

EDIT: Kompiluj z -f bin / wywietlanie tekstu dziaa bezbdnie
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
biernik



Doczy: 06 Wrz 2008
Posty: 1148
Skd: 6359'39''N 2238'11''W

PostWysany: Sob Mar 31, 2012 4:08 pm      Temat postu: Re: [NASM] Bootloader Odpowiedz z cytatem Pisownia

Nie analizowaem kodu, tylko pierwsze co si rzuca w oczy:
nwxxeh napisa:
CMP EAX, 0x10 ;if (x == 10) {

_________________
I like cheese.
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
nwxxeh



Doczy: 21 Kwi 2007
Posty: 824

PostWysany: Sob Mar 31, 2012 5:02 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

EDIT: biernik, co nie tak w tym kodzie?

Testowaem inny kod:
Kod:
[BITS 16]    ;16bit
[ORG 0x7C00]    ;offset

MOV AH, 0x00
MOV AL, 0x13
MOV AX, 0x4F02
MOV BX, 0x102
INT 0x10
MOV AH, 0x09 ;WritePixelOnScreen [wiki]
MOV AL, 0x05 ;color - White
MOV BH, 0x00 ;page no.
MOV CX, 1 ;x
MOV DX, 1 ;y
INT 0x10 ;interrupt
MOV CX, 2 ;x
MOV DX, 1 ;y
INT 0x10 ;interrupt
MOV CX, 3 ;x
MOV DX, 1 ;y
INT 0x10 ;interrupt
JMP $         ;hang

;Data

TIMES 510 - ($ - $$) db 0    ;filler
DW 0xAA55            ;boot signature


Ten kod daje to co wida w zaczniku.

Po 2-gie w pierwszym kodzie zapomniaem da zmiany trybu video, ale teraz te nie dziaa :/



bios_video.png
 Opis:
To co wychodzi.

Pobierz
 Nazwa pliku:  bios_video.png
 Wielko pliku:  6.38 KB
 Pobierano:  208 raz(y)

Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
biernik



Doczy: 06 Wrz 2008
Posty: 1148
Skd: 6359'39''N 2238'11''W

PostWysany: Sob Mar 31, 2012 6:25 pm      Temat postu: Odpowiedz z cytatem Pisownia

nwxxeh napisa:
EDIT: biernik, co nie tak w tym kodzie?

No to, e 0x10 != 10 :)

_________________
I like cheese.
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
nwxxeh



Doczy: 21 Kwi 2007
Posty: 824

PostWysany: Sob Mar 31, 2012 6:42 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

BIG EDIT: Problem cakowicie rozwizany, dziaa (poniej dziaajcy kod):
Kod:
[BITS 16]   ;16bit
[ORG 0x7C00]    ;offset

MOV AH, 0x00 ; change video mode
MOV AL, 0x13 ; 0x13
INT 0x10 ; interrupt
CALL DrawTenLines   ;lets draw
JMP $       ;hang it

DrawOneLine:
MOV CX, 0x00 ;x = 0

nextpixel:
MOV AH, 0x0C ;func number - WritePixelOnScreen [wiki]
MOV AL, 0x05 ;color - Magenta
MOV BH, 0x00 ;page no
INT 0x10 ;Video interrupt - BIOS
ADD CX, 0x01 ;add one :D
CMP CX, 10 ;if (x == 10) {
JE exitfunc ;exit function } else {
JNE nextpixel ;next pixel }
exitfunc: ;exit :D
RET

DrawTenLines: ;draw some lines
MOV DX, 0x00 ;y = 0
CALL DrawOneLine
MOV DX, 0x01 ;y = 1
CALL DrawOneLine
MOV DX, 0x02 ;y = 2
CALL DrawOneLine
MOV DX, 0x03 ;y = 3
CALL DrawOneLine
MOV DX, 0x04 ;y = 4
CALL DrawOneLine
MOV DX, 0x05 ;y = 5
CALL DrawOneLine
RET

;Data

TIMES 510 - ($ - $$) db 0   ;filler
DW 0xAA55           ;boot signature
Powrt do gry
Zobacz profil autora Wylij prywatn wiadomo
Wywietl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Gwna -> Elektronika, programowanie niskopoziomowe Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Moesz pisa nowe tematy
Moesz odpowiada w tematach
Nie moesz zmienia swoich postw
Nie moesz usuwa swoich postw
Nie moesz gosowa w ankietach
Moesz dodawa zaczniki na tym forum
Moesz pobiera pliki z tego forum




Debug: strone wygenerowano w 0.17190 sekund, zapytan = 13
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |