Написал свой загрузчик вывожу текст через int 10h Тестировал на трех компах На одном все работает как и задумано На втором вобще кошмар ... выводит вместо текста букву o потом когда читаю с флешки какой то непонятный разброс "-" по экрану и снова "o" только в другом месте На третьем вроде норм но старое содержимое не убирается и выводится только оповещение что загрузчик загружен а потом не печатается строка, хотя курсор переводится на другую позицию. Вот такая проблема. Помогите кто чем может.
Может, в тех компах левая BIOS? Или левая таблица символов. А вообще - код надо прилагать. Телепаты в отпуске.
Сори что так долго не отвечал, просто запорол случайно MBR на диске C и не смог восстановить... В аттаче сам MBR (MBR.asm/MBR.bin), boot sector (2sector.asm/2sector.bin) и прога HDHacker, чтобы это все записывать на флешку без прибавлений (WinImage своего туда заливает, чтобы файловую систему не запороть) Прокомментировал все, как Капитан Очевидность)
фига ты выдал! А можно код попроще, типа минимальной последовательности команд в mbr, которая демонстрирует эффект? Тогда можно надеятся он будет достаточно небольшим, чтобы его заинлайнить в текст сообщения на форуме.
купи себе дисковод и тестируй на дискетах а еще лучше на виртуальных машинах с вируальными дисками а флешки не все биосы поддерживают
Treant По моему мнению этой функции вывода нужен полный адрес строки - es:bx или как там. В момент передачи управления на 7c00 вроде бы даже стек неопределен.
PSR1257 Хм... а что можно в ss положить чтобы стек работал? Ну как я понял стек - область памяти, ну и она должна быть не занятой. Можно просто к примеру 0000:9600h туда положить?
Нет, стек я привел для примера. Нужна инициализация сегмента где есть строка. Если (к примеру) эта функция берет его из ES:BP, то такой код должен быть рабочим: Код (Text): :7C00 mov ax,cs mov es,ax mov ss,ax mov sp,7C00h+something ... mov bp,offset String mov ah,... int 10h
PS Ты можешь отлаживать свой MBR/BOOT код прямо в DOS-сессии. Загрузи его в какой-нить сегмент:7C00h (например, простейший .com, который берет твой сектор к себе в cs:7C00h), далее можешь смотреть хоть отладчиком, хоть чем.
Точно! lodsb которая в print_string берет байт из ds:si а у меня ds судя по всему 0000 ща попробую...
Только что на самом проблемном компе проверил все работает!!! Просто добавил: Код (Text): xor ax,ax mov ds, ax
... Вот только что проверил на третьем компе. Не получилось выводит почему то только первую надпись а дальше только курсор переводит, надписей нет, хотя на других двух машинах все норм помогайте )
Извините за 5 сообщений подряд, но я тут подумал так как остановка курсора без нахождения 0 невозможна а курсор явно перемещается на длину строки значит просто там черный цвет почему то выставляется... и я думаю... просто дело в том что я использую стек не настроенный на какой либо сегмент... я думаю что в том BIOS е может быть прерывание 10h расположено там куда кладутся значения переданные в стек и оно перестает работать после первой надписи. Вот такая теория. Как думаете такое может быть просто чтобы протестить надо на одного чела отвлекать, заставлять перезагружать комп... я не могу каждые 5 минут к нему подниматься. Нужно что нибудь существенное сделать чтобы уж наверняка, а я не знаю что... предположил вот. помогите плиз а то за душу тянет
... все исправил. работает и там теперь почему то просто загнал установку цвета в bl ближе к int 10h и все заработало... с чего бы это не пойму. Там adward bios стоит если что