phantom-84 писал(а):
А так ли необходимо использовать этот формат?
Изначально у меня был свой бутсектор для загрузки с FDD (писАл намного раньше чем ось), но потом мне надоело записывать дискеты и я решил грузиться с помощью LILO (по-дефолту идёт со Slackware Linux), а потом и с помощью ISOLINUX (по сути тот же самый SYSLINUX, только для CD)
Не знаю, канеш вовсе не обязательно делать так... Но я не вижу в этом никакой проблемы - лишь маленький header и усё...
Код:
code global _start
%ifdef USE_ROM
dw 0AA55h ;signature
db (full_size+1ffh)/200h ;size
retf
%endif
;01F1/1 ALL(1 setup_sects The size of the setup in sectors
;01F2/2 ALL root_flags If set, the root is mounted readonly
;01F4/4 2.04+(2 syssize The size of the 32-bit code in 16-byte paras
;01F8/2 ALL ram_size DO NOT USE - for bootsect.S use only
;01FA/2 ALL vid_mode Video mode control
;01FC/2 ALL root_dev Default root device number
;01FE/2 ALL boot_flag 0xAA55 magic number
jmp short _start ;0200/2 2.00+ jump Jump instruction
db 'HdrS' ;0202/4 2.00+ header Magic signature "HdrS"
dw 0204h ;0206/2 2.00+ version Boot protocol version supported
dd 0 ;0208/4 2.00+ realmode_swtch Boot loader hook (see below)
dw 1000h ;020C/2 2.00+ start_sys_seg The load-low segment (0x1000) (obsolete)
dw kver ;020E/2 2.00+ kernel_version Pointer to kernel version string
db 0 ;0210/1 2.00+ type_of_loader Boot loader identifier
db 1 ;0211/1 2.00+ loadflags Boot protocol option flags
dw (full_size+0fffh)/1000h ;0212/2 2.00+ setup_move_size Move to high memory size (used with hooks)
dd 100000h ;0214/4 2.00+ code32_start Boot loader hook (see below)
dd 0 ;0218/4 2.00+ ramdisk_image initrd load address (set by boot loader)
dd 0 ;021C/4 2.00+ ramdisk_size initrd size (set by boot loader)
dd 0 ;0220/4 2.00+ bootsect_kludge DO NOT USE - for bootsect.S use only
dw 7fffh ;0224/2 2.01+ heap_end_ptr Free memory after setup end
db 0 ;0226/1 2.02+(3 ext_loader_ver Extended boot loader version
db 0 ;0227/1 2.02+(3 ext_loader_type Extended boot loader ID
dd 0 ;0228/4 2.02+ cmd_line_ptr 32-bit pointer to the kernel command line
dd 07fffffffh ;022C/4 2.03+ ramdisk_max Highest legal initrd address
; dd 0 ;0230/4 2.05+ kernel_alignment Physical addr alignment required for kernel
; db 0 ;0234/1 2.05+ relocatable_kernel Whether kernel is relocatable or not
; db 0 ;0235/1 2.10+ min_alignment Minimum alignment, as a power of two
; dw 0 ;0236/2 N/A pad3 Unused
; dd 0 ;0238/4 2.06+ cmdline_size Maximum size of the kernel command line
; dd 0 ;023C/4 2.07+ hardware_subarch Hardware subarchitecture
; dq 0 ;0240/8 2.07+ hardware_subarch_data Subarchitecture-specific data
; dd 0 ;0248/4 2.08+ payload_offset Offset of kernel payload
; dd 0 ;024C/4 2.08+ payload_length Length of kernel payload
; dq 0 ;0250/8 2.09+ setup_data 64-bit physical pointer to linked list of struct setup_data
; dq 0 ;0258/8 2.10+ pref_address Preferred loading address
; dd 0 ;0260/4 2.10+ init_size Linear memory required during initialization
;-------------------------------------------------------------------------------
_start smsw ax
test al,1
je _init
mov al,0FEh
out 64h,al
hlt
jmp $-1
Про MultiBoot слышал, но не вникал пока еще... Спасибо за инфу, почитаю)