Вложение 56139
Из-за чего такое смещение в tst8253?
Вид для печати
Вложение 56139
Из-за чего такое смещение в tst8253?
Посмотрел код этого теста...
Ничего "страшного" там не увидел, просто в режиме делителя тактовой частоты, и в одном и том-же цикле считываются значения делителя. Даже не знаю, что этим тестом можно проверить... он (ВИ53) ведь с тактовой частотой процессора от одного генератора/делителя синхрой питается... Даже если изменить общую частоту (12МГц), тест по любому должен показать эти-же самые циферки...
Или я чего-то не понимаю... ???
Тест может показать точность эмуляции самой ВИ53 и процессора (правильность длительности - в тактах, выполнения некоторых команд).
Но если в своей сборке использовать уже готовые модели (блоки/модули), то...
В доке (брошурке) на ВИ53 сказано, что новые значения для делителя принимается не сразу после записи...
Может он уже чего "медленно" считал, и не сразу на "новый режим" вышел, поэтому и сдвиг...
Exolon заработал. Пришлось написать новую модель ВИ53 с нуля.
KTSerg,
тем не менее этот тест показывает одну недокументированную особенность. Нигде в даташитах не сказано, что при работе с однобайтным счетчиком, другой байт обнуляется. Вот в модели от svofski он не обнуляется, и потому если данный тест запустить после других тестов, получаются неправильные значения, в отличие от реала.
Я в своей модели обнуляю, и тест работает всегда одинаково.
Правда, данные всё так же сдвинуты. Но это, я думаю, из-за сдвига фазы частоты таймера.
Крут. Молодца, разобрался в проблеме.
По сдвигу данных в тесте, не уверен, что фаза частоты могла бы дать такую погрешность, тут явно либо рано, либо поздно начинает считать относительно записи в него начальных значений...
Может эмуляция проца не точная, ну например команда записи в порт выполняется не положенные ей количество тактов, а в один, потом просто задержки... Ну или что-то в этом духе...
KTSerg,
Я сильно сомневаюсь в неточности модели процессора, поскольку использую модель, основанную на реверсе реального кристалла.
Я сейчас доделываю ВИ53, а потом попробую разобраться.
Может в тесте используется прерывание 50гц и этим объясняется задержка.
Не, в этом тесте первой командой идёт DI, и больше они не разрешаются. Так что в самой программе задержек ни каких не должно быть. Смущает стабильность сдвига значений, это должно однозначно на что-то указывать...
Посмотрел код теста I8253 , в нём запись и чтение значений счётчиков синхронизированы с прерываниями.
Может действительно на результат (сдвиг) прерывания как-то влияют... но это возможно только если есть какая-то ошибка в эмуляции схемы... возможно.
- - - Добавлено - - -
Попробуй ради интереса вот этот тест, загружать его нужно с адреса 0000.
Я добавил в начало ожидание прерывания и переход к тесту после прерывания.
Хотя ожидание нужно было воткнуть непосредственно перед работой с ВИ53, а так там ещё экран очищается...
KTSerg,
придется изменить систему загрузки для этого теста. .c00 - это стандартное расширение для Вектора для загрузки с 0 адреса?
- - - Добавлено - - -
в общем, твой тест выдает числа начиная с 15.
- - - Добавлено - - -
подвигал я фазу частоты таймера - не помогло. Прочно начинается с 15.
вот эта конструкция:
как бы не совсем понятная. Если дается комманда LATCH ( 0 -> port8 ), то согласно даташиту надо считывать 2(!) байта (ибо какой смысл делать latch для одного единственного байта), а считывается только 1 байт. В общем-то это не нарушает алгоритм моей модели, ибо при latch счетчик отправленных байтов сбрасывается.Код:L2 XOR A,A
OUT (#08),A
IN A,(#0B)
PUSH AF
DEC B
JP NZ,L2
Еще один момент, который не освещен в даташите - это момент того самого latch. Непонятно когда именно происходит фиксация считываемых данных: при комманде latch или при считывании первого байта.
- - - Добавлено - - -
Я говорю что вижу на экране. На экране первое число 15 (не F). Числа шестнадцатеричные, но без h.
- - - Добавлено - - -
то же самое.
Поскольку считывание происходит сразу после программирования таймера, то очистка экрана тут неважна. Прерывания запрещены - и этого достаточно для 100% повторения.
В этом тесте программируется только младший байт счётчика и считывать старший не имеет смысла, он всегда будет 00.
Когда происходит фиксация, это ты скоро выяснишь :)
На счёт стандартности расширения с00 - както не задумывался, поставил "на автомате"... надо у гуру спросить где посмотреть список всех стандартных для Вектора расширений.
Разница между файлами с расширениями rom и r0m - первые грузятся с 100h, вторые с 0h.
- - - Добавлено - - -
Кстати, сейчас смотрю даташит на 82с53, там написано, что сигнал (вход) GATE влияет на счётчики (старт, рестарт и пр.), а он по схеме вектора зависит от сигнала F50Гц (КСИ)...
Может в этом собака порылась... ???
Ох ни фига-себе...
GATE на ВИ53 это системный сброс Вектора... т.е. аппаратный сброс на ВИ53 заведён, только на пересчёт во время работы он не сможет повлиять (т.к. его нет во время работы)...