Основная загрузочная запись на флешке не работает
Я изучаю программирование на чистом аппаратном обеспечении (без ОС) и имею проблему с загрузкой с флэш-накопителя (используя Kingston DT101 G2 8Gb). Исходный код, который не был заархивирован, и я не могу сейчас воспроизвести его в точности так, как он был:(, отлично работал как в эмуляторе (последний Bochs), так и на живом оборудовании. После этого было добавлено больше функциональности (подпрограммы вывода дампа и загрузки секторы с флэш-накопителя с использованием функции 42h из int 13h), которая отлично работала в Bochs, но не работала на живом компьютере - компьютер перезагружался при попытке его запустить, поэтому я сократил код до некоторой простейшей формы, которая у меня была в начале и в модифицированном сегменте регистров инициализации. Вот как это выглядит сейчас:
load_address equ 0x7c00 ;was used earlier but not now, just keeping it if anything
use16 ;we start in real mode
bootloader_start:
cli
;setting up the segments
xor ax, ax
mov ss, ax
mov sp, 0x7c00
push word 0x7c0
pop ds
push ds
push word continue
retf
continue:
sti
;copying CS into video memory to check it value (blue background)
mov ax, 0xb800
mov es, ax
mov ax, cs
push ax
mov ah, 0x17
mov [es:0], ax
pop ax
mov al, ah
mov ah, 0x17
mov [es:2], ax
;infinit loop
jmp short $
current_tty_address: ;was used earlier
dw 0
boot_drive_number: ;was used earlier
db 0
padding:
;padding to sector size - 2
times 510-($-$$) db 0
dw 0xaa55 ;mbr identifier
;if comipling for Bochs, padding to hard disk image size (flat mode, 10Mb)
%ifdef BOCHS
padding2:
times 512 * (17 * 4 * 306 - 1) db 0
%endif
Но это не сработало должным образом. Он помещает символ в первую позицию экрана (0, 0), но следующая позиция просто черная (но должна иметь по крайней мере синий фон, независимо от того, какой код символа). Более того, один и тот же код, записанный на флэш-накопителе другого размера (Kingston DT101 G2, 32Gb), выдает сообщение "Отсутствует операционная система...". Я пробовал разные варианты, но все еще не могу сделать эту работу и не могу понять, что происходит. Это проблема с флешкой? Можно вспомнить, что несколько месяцев назад я пробовал LinuxLive с той же моделью флэш-памяти, и после 4 - 5 запусков он просто перестал загружаться. Вот что я использую: Модель компьютера: HP EliteBook 8440p; (Offlease); Процессор: Intel Core i5 M520 2,40 ГГц, 2 ядра; BIOS: Hewlett-Packard 68CCU Вер. F.0D, 14/07/2010 (не знаю, было ли оно обновлено); Компилятор: NASM; Программное обеспечение для работы с дисками: DiskProbe V 1.0 (R. Eugene-Baucom, Microsoft)
Пожалуйста, помогите мне понять, что происходит. Большое спасибо.
1 ответ
Это была моя очень глупая ошибка... Потому что, когда я ничего не увидел в списке физических дисков Disk Probe, вместо того, чтобы угадать запуск Disk Probe от имени администратора, я выбирал из списка логических томов. Таким образом, инструмент записал в сектор 0 активного раздела вместо записи в сектор 0 всего диска. Это отлично работало с жестким диском, но с обоими флешками я использовал что-то не так (несовместимость между BIOS и Windows + Disk Probe при обработке таблицы разделов, может быть, или что-то вроде этого). Так что, к счастью, проблема была очень простой. Спасибо всем за ваши усилия.