You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.4 KiB
NASM
65 lines
2.4 KiB
NASM
org 0x7C00
|
|
%define SECTOR_AMOUNT 0x10 ;Precompiler defined value for easy changing
|
|
jmp short start
|
|
nop
|
|
|
|
; BPB
|
|
OEMLabel db "Example " ; Disk label
|
|
BytesPerSector dw 512 ; Bytes per sector
|
|
SectorsPerCluster db 1 ; Sectors per cluster
|
|
ReservedForBoot dw 1 ; Reserved sectors for boot record
|
|
NumberOfFats db 2 ; Number of copies of the FAT
|
|
RootDirEntries dw 224 ; Number of entries in root dir
|
|
LogicalSectors dw 2880 ; Number of logical sectors
|
|
MediumByte db 0F0h ; Medium descriptor byte
|
|
SectorsPerFat dw 9 ; Sectors per FAT
|
|
SectorsPerTrack dw 18 ; Sectors per track (36/cylinder)
|
|
Sides dw 2 ; Number of sides/heads
|
|
HiddenSectors dd 0 ; Number of hidden sectors
|
|
LargeSectors dd 0 ; Number of LBA sectors
|
|
DriveNo dw 0 ; Drive No: 0
|
|
Signature db 41 ; Drive signature: 41 for floppy
|
|
VolumeID dd 00000000h ; Volume ID: any number
|
|
VolumeLabel db "Example "; Volume Label: any 11 chars
|
|
FileSystem db "FAT12 " ; File system type: don't change!
|
|
start:
|
|
; ------------------------------------------------------------------
|
|
|
|
;Reset disk system
|
|
mov ah, 0
|
|
int 0x13 ; 0x13 ah=0 dl = drive number
|
|
jc errorpart
|
|
;Read from harddrive and write to RAM
|
|
mov bx, 0x8000 ; bx = address to write the kernel to
|
|
mov al, SECTOR_AMOUNT ; al = amount of sectors to read
|
|
mov ch, 0 ; cylinder/track = 0
|
|
mov dh, 0 ; head = 0
|
|
mov cl, 2 ; sector = 2
|
|
mov ah, 2 ; ah = 2: read from drive
|
|
int 0x13 ; => ah = status, al = amount read
|
|
jc errorpart
|
|
jmp 0x8000
|
|
|
|
|
|
errorpart: ;if stuff went wrong you end here so let's display a message
|
|
mov si, errormsg
|
|
mov bh, 0x00 ;page 0
|
|
mov bl, 0x07 ;text attribute
|
|
mov ah, 0x0E ;tells BIOS to print char
|
|
.part:
|
|
lodsb
|
|
sub al, 0
|
|
jz end
|
|
int 0x10 ;interrupt
|
|
jmp .part
|
|
end:
|
|
jmp $
|
|
|
|
errormsg db "Failed to load...",0
|
|
times 510-($-$$) db 0
|
|
;Begin MBR Signature
|
|
db 0x55 ;byte 511 = 0x55
|
|
db 0xAA ;byte 512 = 0xAA
|
|
|
|
|