Emulate floppy (fat12) in cd (bootloader + kernel)
Posted: Tue Jan 25, 2011 1:48 am
Hi! I have so more problems.
I created a bootloader that works when I add a boot record with no emulation in application isomaster (sudo apt-get install isomaster), but I loaded the kernel. I know that I need to emulate a floppy disk with a FAT12 file system. I have used everything and i see only blank screen ...
I use ubuntu, and nasm.
This is my bootloader:
jadro111:
Pleas, help me when you know how can i do..
I created a bootloader that works when I add a boot record with no emulation in application isomaster (sudo apt-get install isomaster), but I loaded the kernel. I know that I need to emulate a floppy disk with a FAT12 file system. I have used everything and i see only blank screen ...
I use ubuntu, and nasm.
This is my bootloader:
Code: Select all
; Autor: dan-tom, 2011r.
[BITS 16]
[ORG 000h]
JMP POCZATEK
NAZWA_SYSTEMU DB 'VAECE'
WIELKOSC_SEKTORA DW 200H
WIELKOSC_CLUSTRA DB 1H
ILE_ZAREZERWOWANYCH_SEKTOROW DW 1H
ILE_TABLIC_ALOKACJI DB 2H
ILE_ELEMENTOW_KATALOGU_GLOWNEGO DW 0E0H
CALKOWITA_LICZBA_SEKTOROW DW 0B40H
MEDIA_DESCRIPTOR_BYTE DB 0F0H
ILE_SEKTOROW_NA_FAT DW 9H
ILE_SEKTOROW_NA_SCIEZKE DW 12H
ILE_GLOWIC DW 2H
ILE_UKRYTYCH_SEKTOROW DD 0H
TOTAL_SECTORS_LARGE DD 0H
NUMER_DYSKIETKI DB 0H
FLAGS2 DB 0H
SIGNATURE DB 029H
VOLUME_ID DD 0FFFFFFFFH
NAZWA_VOLUMENU DB 'VAECEDT'
NAZWA_SYSTEMU_PLIKOW DB 'FAT12 '
POCZATEK:
CLI
MOV AX, 07C0H
MOV DS, AX
MOV AX, 0H
MOV SS, AX
MOV SP, 0FFFFH
STI
MOV DX, BOOT_ZALADOWANY
CALL WYPISZ_TEKST
MOV AX, DS
ADD AX, 200H
MOV ES, AX
XOR BX, BX
MOV DX, [SEKTOR_ROOT_DIRECTORY]
MOV CL, [WIELKOSC_ROOT_DIRECTORY]
MOV CH, 0
CALL ODCZYT_Z_DYSKU
XOR DI, DI
MOV DX, JADRO
CALL SZUKAJ_JADRA
PUSH AX
XOR BX, BX
MOV DX, [SEKTOR_FAT]
MOV CL, [WIELKOSC_FAT]
MOV CH, 0
CALL ODCZYT_Z_DYSKU
MOV SI, 2000H
MOV AX, 8000H
MOV ES, AX
XOR BX, BX
POP AX
CALL WCZYTAJ_PLIK_JADRA
MOV AX, 8000H
PUSH AX
MOV AX, 0H
PUSH AX
RETF
CALL PROCEDURA_BEZ_KONCA
WYPISZ_TEKST:
PUSH BX
XOR BH, BH
MOV BL, 07H
MOV SI, DX
MOV AH, 0EH
PETLA1_1:
MOV AL, [SI]
CMP AL, 0
JE END_PETLA1_1
INT 10H
INC SI
JMP PETLA1_1
END_PETLA1_1:
POP BX
RET
CHS:
PUSH BX
MOV AX, DX
MOV BX, DX
XOR DX, DX
MOV CX, [ILE_SEKTOROW_NA_SCIEZKE]
DIV CX
INC DX
PUSH DX
XOR DX, DX
MOV CX, [ILE_GLOWIC]
DIV CX
POP CX
MOV CH, AL
MOV DH, DL
XOR DL, DL
POP BX
RET
ODCZYT_Z_DYSKU:
PETLA_ODCZYTU:
PUSH BX
PUSH CX
PUSH DX
CALL CHS
MOV AL, 1
MOV DL, 0
MOV AH, 02H
INT 13H
JNC KONIEC_P_0
MOV DX, BLAD
CALL WYPISZ_TEKST
MOV DX, BLAD_0
CALL WYPISZ_TEKST
CALL PROCEDURA_BEZ_KONCA
KONIEC_P_0:
POP DX
POP CX
POP BX
INC DX
ADD BX, 200H
LOOP PETLA_ODCZYTU
RET
SZUKAJ_JADRA:
MOV CX, [ILE_ELEMENTOW_KATALOGU_GLOWNEGO]
PETLA_S_J:
CALL POROWNAJ_NAPISY
JC NAPISY_ROWNE
ADD DI, 20H
LOOP PETLA_S_J
MOV DX, BLAD
CALL WYPISZ_TEKST
MOV DX, BLAD_1
CALL WYPISZ_TEKST
CALL PROCEDURA_BEZ_KONCA
NAPISY_ROWNE:
MOV AX, WORD [ES:DI+1AH]
PUSH AX
MOV DX, ZNALEZIONE_JADRO
CALL WYPISZ_TEKST
POP AX
RET
POROWNAJ_NAPISY:
PUSH CX
PUSH SI
PUSH DI
MOV SI, DI
MOV CX, 11
PETLA:
MOV AL, [ES:DI]
MOV AH, [DS:SI]
CMP AL, AH
JNE KONIEC_NAPISY_ROZNE
INC DI
INC SI
LOOP PETLA
STC
JMP FIN
KONIEC_NAPISY_ROZNE:
CLC
FIN:
POP DI
POP SI
POP CX
RET
PROCEDURA_BEZ_KONCA:
PETLA_GLOWNA_P_B_K:
NOP
JMP PETLA_GLOWNA_P_B_K
RET
WCZYTAJ_PLIK_JADRA:
BEGIN:
PUSH AX
MOV DX, [PIERWSZY_SEKTOR_Z_DANYMI]
ADD AX, DX
MOV DX, AX
MOV CL, 1H
MOV CH, 0H
CALL ODCZYT_Z_DYSKU
POP DX
CALL NASTEPNY_CLUSTER
CALL NORMALIZACJA_CLUSTRA
CMP AX, 0FF7H
JBE BEGIN
RET
NASTEPNY_CLUSTER:
PUSH SI
MOV AX, DX
SHR AX, 1H
ADD AX, DX
ADD SI, AX
MOV AX, [DS:SI]
POP SI
RET
NORMALIZACJA_CLUSTRA:
TEST DX, 1H
JZ PARZYSTY
SHR AX, 4H
JMP KONIEC_N_C
PARZYSTY:
AND AX, 0FFFH
KONIEC_N_C
RET
SEKTOR_ROOT_DIRECTORY DW 19
WIELKOSC_ROOT_DIRECTORY DB 14
SEKTOR_FAT DW 1
WIELKOSC_FAT DB 9
PIERWSZY_SEKTOR_Z_DANYMI DW 31
ENT DB 13, 10, 0
JADRO DB 'JADRO111COR'
BOOT_ZALADOWANY DB 'BOOTLOADER ZALADOWANY', 13, 10, 0
ZNALEZIONE_JADRO DB 'ZNALAZLEM JADRO. LADUJE FAT', 13, 10, 0
BLAD DB 'BLAD O ID: ', 0
BLAD_0 DB '0', 0
BLAD_1 DB '1', 0
TIMES 510-($-$$) DB 0
DW 0AA55H
Code: Select all
[BITS 16]
[ORG 000h]
START:
JMP POCZATEK
GOTOWOSC_SYSTEMU DB 13,10, 13, 10, 13, 13, 10, 'SYSTEM OPERACYJNY ZOSTAL ZALADOWANY POMYSLNIE', 13, 10
DB 'WERTYFIKACJA POPRAWNOSCI DZIALANIA BOOT LOADERA WYPADLA POMYSLNIE', 0
POCZATEK:
CLI
MOV AX, CS
MOV DS, AX
MOV AX, 0H
MOV SS, AX
MOV SP, 0FFFFH
STI
MOV DX, GOTOWOSC_SYSTEMU
CALL WYPISZ_TEKST
CALL PROCEDURA_BEZ_KONCA
WYPISZ_TEKST:
PUSH BX
XOR BH, BH
MOV BL, 03H
MOV SI, DX
MOV AH, 0EH
PETLA1_1:
MOV AL, [SI]
CMP AL, 0
JE END_PETLA1_1
INT 10H
INC SI
JMP PETLA1_1
END_PETLA1_1:
POP BX
RET
PROCEDURA_BEZ_KONCA:
PETLA_GLOWNA_P_B_K:
NOP
JMP PETLA_GLOWNA_P_B_K
RET