Пишу значит я свою ОС с FAT12 и кароче по идее вторичный загрузчик должен загрузить ядро и я пишу: Code (Text): include "load_file.inc" call LoadRoot ; Load root directory table mov bx, 0 ; BX:BP points to buffer to load to mov bp, 0x800 mov si, ImageName ; our file to load call LoadFile ; load our file cmp ax, 0 ; Test for success je EnterStage3 ; yep--onto Stage 3! mov si, msgFailure ; Nope--print error call print_text mov ah, 0 int 16h jmp 0ffffh:0000h EnterStage3: call 0x800 но ядро не загружается тоесть просто выводится ошибка о том что ядро не загружается и всё. http://paste.org.ru/?h7l1zt - Floppy.inc http://paste.org.ru/?xkg04s - вот тут процедура чтения и загрузки файла load_file.inc http://paste.org.ru/?tjkdaf - вторичный загрузчик http://paste.org.ru/?h8ivob - ядро http://file.qip.ru/file/ahQB7pI8/MyOS_1.html - исходники моей ОС так всеже как правильно загрузить ядро в реальном режиме работы проца?
bochs ваще не грузит мою операционку тока пишет типа No bootable device. так что пока гружу операционку в VirtualBox
NoName Настраивал но бесполезно всеравно не грузит да и даже qemu не грузит образ дискеты типа fatal: no bootable device вот тока VirtualBox норм грузит
вот кстате конфиг bochs display_library: win32, options="legacyF12" romimage: file=D:\bios.bin vgaromimage: file=D:\vgabios.bin memory: guest=512, host=256 floppya: 1_44=D:\floppy.img, status=inserted floppyb: 1_44=b:, status=inserted boot: floppy
Наверно будет смешно но оказывается в qemu и в bochs не грузилось из за того что там у меня было db 0xAA, 0x55 а надо db 0x55, 0xAA тока сча обнаружил это... хотя я грузил и на реальном железе и на virtualbox и там и там норм грузится... но не в этом дело сча мне как то надо ядро загрузить!
(0) [0xfffffff0] f000:fff0 (unk. ctxt): jmp far f000:e05b ; ea5be000f0 вот на этой строке останавливается отладка а так вот весь лог отладчика http://paste.org.ru/?o9eiel хотя в коде jmp far f000:e05b вообще такого нет
Надо трассировать знакомые участки кода до того места где возникает не то что должно быть. Попробуй поставить бряки (если незнаешь точных адресов можно поставить большой цикл и в отладчике нажать CTRL+C, а потом бряк по понятному адресу).
NoName а как поставить эти бряки? break адрес? и вообще как трассировать? я ведь впринцыпе тока в virtualbox ОС тестировал так что про bochs немногое знаю
MeGaCoDeR если с бряками не дружишь, то самый простой способ - вывод на экран сообщения, когда прошли какое то место в коде. Тем самым узнаешь где же оно в конце перестало выводиться.
ну я короче в графическом отладчике запустил там тоже останавливается на адресе jmp far f000:e05b и всё потом нажимаю Continue ОСь выводит сообщение о том что типа ядро не найдено хотя оно есть в директории и в отладчике останавливается на адресе 000fe86d jmp .-15 (0x0000e860) ну и всё
Все вопрос закрывается... Ядро оказывается не загружалось из-за того что не правильно был настроен стек у меня он так был: Code (Text): mov ax, 0x500 mov ss, ax mov sp, 03feh ; top of the stack. ; set data segment: xor ax, ax mov ds, ax а надо было так: Code (Text): cli ; запретить прерывания xor ax, ax mov ds, ax mov es, ax mov ax, 0x0 mov ss, ax mov sp, 0xFFFF sti ; разрешить прерывания