странная ошибка

Тема в разделе "WASM.ASSEMBLER", создана пользователем Hell_Knight, 20 окт 2010.

  1. Hell_Knight

    Hell_Knight New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2009
    Сообщения:
    51
    Ситуация такая:
    код срабатывает каждый раз по разному,
    проверял, что находится в памяти, выяснилось, что там вся матрица верна и действительно там присутствует
    данный код тестировал в досе, только вместо страничной адресации я использовал сегментную
    он действительно работал корректно...
    подскажите пожалуйста, в чем может быть проблема
     
  2. Sasha7b9

    Sasha7b9 New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2010
    Сообщения:
    105
    А как он по-разному срабатывает-то?
     
  3. Hell_Knight

    Hell_Knight New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2009
    Сообщения:
    51
    изложу корректнее))
    пишу свою исследовательскую ОС, включил режим TrueColor32 1024x768
    я перешел в защищенный режим и включил страничную адресацию
    принялся за разработку планировщика, по ходу дела возникла нужда в отладке,
    ну или хотя бы что бы можно было выводить значения регистров на экран (отрисовка)
    начал тогда писать процедуру для вывода на экран значения регистра
    в коде я постарался всё подробно прокомментировать, что бы вопросов не было

    приведенный код: код отрисовки символа по битовой матрице, матрица составлена корректно, тестировал в DOS
    1 - рисуем пиксель
    0 - ничего не делаем

    в конце добавил код для вывода полоски на экране, что бы наглядно просмотреть работу
    запускаю это всё добро под виртуальной машиной VMware 7.1
    в итоге что получил:
    пиксели появляются в области символа (16х24) в верхнем левом углу экрана (как надо)
    но они в совокупности не формируют нужный символ, а лишь какой-то беспорядоченный набор точек
    причем при помощи проверочной полоски проверял, что иногда проверочная строчка выводилась, не на нужной высоте
    т. е. она должна вывестись во вертикале на 24 пикселе, но она рандомно выводится)))

    надеюсь я понятно всё изложил
     
  4. Hell_Knight

    Hell_Knight New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2009
    Сообщения:
    51
    причем, иногда вообще ничего не выводит...
    в чем может быть этот странный парадокс
    в такой же схеме выводил фоновое изображение на экран, всё работало, однако я выводил изображение уже не ввиде битовой матрицы, а уже готовые пиксели, т. е. из bmp-файла уже готовое изображение...
     
  5. Hell_Knight

    Hell_Knight New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2009
    Сообщения:
    51
    вот, как выглядит моя битовая матрица(массив)
    я использую в своем код размер 16х48 бит
    принцип таков, я покажу на примере 8х8

    [0][0][0][1][1][0][0][0]
    [0][1][1][0][0][1][1][0]
    [0][1][0][0][0][0][1][0]
    [1][0][0][0][0][0][0][1]
    [1][0][0][0][0][0][0][1]
    [0][1][0][0][0][0][1][0]
    [0][1][1][0][0][1][1][0]
    [0][0][0][1][1][0][0][0]

    считываю байт, получаю первые 8 бит
    далее в соответствии установлен или нет, я рисую пиксель или нет
    по такому принципу у меня построен вывод символа...
    но я только не пойму в чем ошибка

    фоновое изображение я выводил так же с помощью видеобуфера, увеличивая после каждых 1024 пикселей
    указатель на видеобуфер в таблице страниц на 0x1000 (т. е. 4кб или 4*1024 по 4 байта на пиксель)
    и изображение прекрасно отображалось, правда я тодга использовал просто копирование туда данных,
    у меня было готово изображение(обработанный bmp-файл)
     
  6. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    По адресу [0x102000-4] находится элемент таблицы страниц, соответствующий 0x3FF000, что ли? Тогда после его изменения нужно сообщить процессору, что таблица страниц изменилась, командой invlpg. Иными словами, после обеих команд mov edi,0x3ff000 нужно вставить invlpg [edi].
     
  7. Hell_Knight

    Hell_Knight New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2009
    Сообщения:
    51
    ДА!!!!
    Спасибо diamond, что не поленился разобраться в моём бредовом однако описани)))
    И действительно!
    По ходу дела CPU использовал TLB и поэтому у меня получалась какая-то бредятина
    Огромное спасибо, забыл я про этот TLB