Неправильно работает int 10h

Тема в разделе "WASM.OS.DEVEL", создана пользователем Treant, 5 сен 2009.

  1. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Написал свой загрузчик вывожу текст через int 10h
    Тестировал на трех компах
    На одном все работает как и задумано
    На втором вобще кошмар ... выводит вместо текста букву o потом когда читаю с флешки какой то непонятный разброс "-" по экрану и снова "o" только в другом месте
    На третьем вроде норм но старое содержимое не убирается и выводится только оповещение что загрузчик загружен а потом не печатается строка, хотя курсор переводится на другую позицию.
    Вот такая проблема. Помогите кто чем может.
     
  2. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    Может, в тех компах левая BIOS? Или левая таблица символов.

    А вообще - код надо прилагать. Телепаты в отпуске.
     
  3. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Сори что так долго не отвечал, просто запорол случайно MBR на диске C и не смог восстановить...
    В аттаче сам MBR (MBR.asm/MBR.bin), boot sector (2sector.asm/2sector.bin) и прога HDHacker, чтобы это все записывать на флешку без прибавлений (WinImage своего туда заливает, чтобы файловую систему не запороть)
    Прокомментировал все, как Капитан Очевидность)
     
  4. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    фига ты выдал! А можно код попроще, типа минимальной последовательности команд в mbr, которая демонстрирует эффект? Тогда можно надеятся он будет достаточно небольшим, чтобы его заинлайнить в текст сообщения на форуме.
     
  5. reversecode

    reversecode Guest

    Публикаций:
    0
    купи себе дисковод и тестируй на дискетах
    а еще лучше на виртуальных машинах с вируальными дисками
    а флешки не все биосы поддерживают
     
  6. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Никак не могу записать на диск VMWare, подскажите как...
     
  7. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Treant

    По моему мнению этой функции вывода нужен полный адрес строки - es:bx или как там. В момент передачи управления на 7c00 вроде бы даже стек неопределен.
     
  8. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    PSR1257
    Хм... а что можно в ss положить чтобы стек работал?
    Ну как я понял стек - область памяти, ну и она должна быть не занятой.
    Можно просто к примеру 0000:9600h туда положить?
     
  9. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Нет, стек я привел для примера. Нужна инициализация сегмента где есть строка. Если (к примеру) эта функция берет его из ES:BP, то такой код должен быть рабочим:

    Код (Text):
    1. :7C00
    2.   mov  ax,cs
    3.   mov  es,ax
    4.   mov  ss,ax
    5.   mov  sp,7C00h+something
    6.   ...
    7.   mov  bp,offset String
    8.   mov  ah,...
    9.   int    10h
     
  10. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    PS Ты можешь отлаживать свой MBR/BOOT код прямо в DOS-сессии. Загрузи его в какой-нить сегмент:7C00h (например, простейший .com, который берет твой сектор к себе в cs:7C00h), далее можешь смотреть хоть отладчиком, хоть чем.
     
  11. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Точно! lodsb которая в print_string берет байт из ds:si а у меня ds судя по всему 0000
    ща попробую...
     
  12. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    или не 0000... но все равно что то не то... мб все решает BIOS
     
  13. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Только что на самом проблемном компе проверил все работает!!!
    Просто добавил:
    Код (Text):
    1. xor ax,ax
    2. mov ds, ax
     
  14. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    ... Вот только что проверил на третьем компе.
    Не получилось выводит почему то только первую надпись
    а дальше только курсор переводит, надписей нет, хотя на других двух машинах все норм
    помогайте )
     
  15. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Извините за 5 сообщений подряд, но я тут подумал так как остановка курсора без нахождения 0 невозможна а курсор явно перемещается на длину строки значит просто там черный цвет почему то выставляется... и я думаю... просто дело в том что я использую стек не настроенный на какой либо сегмент... я думаю что в том BIOS е может быть прерывание 10h расположено там куда кладутся значения переданные в стек и оно перестает работать после первой надписи. Вот такая теория.
    Как думаете такое может быть просто чтобы протестить надо на одного чела отвлекать, заставлять перезагружать комп... я не могу каждые 5 минут к нему подниматься. Нужно что нибудь существенное сделать чтобы уж наверняка, а я не знаю что... предположил вот. помогите плиз а то за душу тянет
     
  16. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    ... все исправил.
    работает и там теперь
    почему то просто загнал установку цвета в bl ближе к int 10h и все заработало... с чего бы это не пойму. Там adward bios стоит если что
     
  17. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Значит там регистр BX не сохраняется - в реализации INT 10 от adward .