Запустил последний релиз neonbtl (preview-130 от 3 июня), загрузил Аспект, галка "MSX Mouse" в эмуляторе стоит, мышиный курсор на экране вижу, но он не двигается. Что я делаю не так?
Вид для печати
Только сейчас заметил не понятную фигню с загрузкой с образа дискеты.
Win7/64. Скачал две версии эмулятора v06x.
В папки: "v06x-godot-7" и "v06x-8b8-win64". Где-то писали, что они интерфейсом и плюшками должны отличаться.
После запуска эмулятора, выбираю образ дискеты (через иконку в интерфейсе), F11 или "ВВОД" - в эмуляторе из папки "v06x-8b8-win64" появляется загрузочная сетка с изображением дискеты, и ни чего дальше не происходит. Как будто системные дорожки не записаны.
А в эмуляторе из папки "v06x-godot-7", с того-же образа дискеты, грузится без проблем.
KTSerg, разговор можно сделать предметным, отправив мне каким-то образом образ диска.
Решил попытаться разобраться.
Перепробовал больше десятка разных образов дискет - ни с одной не грузится.
И тут заметил, что я в интерфейсе выбираю образ диска "В:" - где дискета нарисована.
А диск "А:" оказывается меняется под иконкой "кассеты" :) после чего он меняется на "дискету".
Если выбираю образ для диска "А:" - то с него начинает грузиться.
НО для версии "v06x-godot-7" это не было проблемой, и эмулятор загружает систему с диска "В:", если диск "А:" не определён, а оказалось, что версия "v06x-8b8-win64" так не умеет.
Так что можно сказать, что я немного разобрался и в интерфейсе эмулятора, и со своим его не пониманием.
Пардон за кипиш.
Аа.. хм. Это скорее говорит о запутанности интерфейса. Я чего-то не уверен, что система могла грузиться с диска B:, скорее всего там была какая-то ошибка, из-за которой диск B: попадал в A:
С выбором дискет я столкнулся, когда тестировал воспроизведение wav-файлов программой "Wave AY".
Из тех эмуляторов, которые пробовал, в v06x самый "чистый" звук, в остальных эмуляторах ещё почему-то, после окончания работы программы, из динамиков слышен довольно громкий шум/свист.
Шоб не возиться с образами дискет и командами МикроДос, (а так-же подключением к реалу кучи железа в виде контроллеров, доп. блока питания, ...) по обкусывал в исходнике программы "Wave AY" все команды связанные с ДОСом, приклеил к плееру один из WAV-файлов, сделал "ROM".
И сравнил его воспроизведение в эмуляторах и на реале.
С моей субъективной точки зрения, наиболее близкое к реалу качество звука у "v06x".
Чтобы понять, что за "фоновый свист" в эмуляторах, при воспроизведении wav-файлов, сделал wav-ку с постоянной громкостью (с тишиной). В эмуляторах Emu и vv - "фоновый свист" сохранился. Подключил осциллогаф на аудио-выход компа, частота "свиста" ~11КГц. Т.е. можно сделать вывод, что это ВИ53 "свистит", т.к. она используется, для отсчёта интервалов.
Загрузил тест в реал, потыкал осциллогафом по выходам ВИ53 - "не свистит".
Много тестировали эмуляцию ВИ53, и тут снова, что-то "вылезло".
В Emu80 - вообще этим плеером, wav-ки не воспроизводит, т.к. прога зависает на чтении ВИ53, не вылавливает условие окончания интервала.
Таймер в любом случае ШИМит на какой то частоте за границей слышимости, но в эмуляторе VV звук воспроизводится с частотой 44КГц, а то что слышно в виде свиста это скорее всего биение частоты ШИМа при ресэмплировании к частоте 44КГц. В VV есть фильтр который настроен на подавление частот выше 20КГц, но в данном случае он почти бесполезен.
Пытался разобраться, почему Emu80 зависает на чтении регистров ВИ53 в программе "Wave AY".
Из описания ВИ53:
Скрытый текст
Цитата:
Существуют задачи, в которых процессор должен периодически считывать содержимое счетчиков
каналов. Примером такой задачи может служить счет событий. Во время работы счетчика его текущее
содержимое может быть передано в буферный и прочитано двумя способами: при помощи обычной операции
чтения или с помощью специальной схемы "чтения на лету", активизируемой вводом специального
управляющего слова.
При первом способе для обеспечения стабилизации показаний счета работа счетчика должна быть
приостановлена подачей на управляющий вход уровня "0" (в режимах 0, 2, 3, 4) или с помощью внешней
логической схемы, приостанавливающей подачу импульсов на тактовый вход канала.
[свернуть]
Кусок кода "Wave AY":
Скрытый текст
Код:;
MVI A,00000100B ; "чтение на лету"
OUT 008H
PAUSE1:
IN 00BH
ANA A
JNZ PAUSE1
[свернуть]
Когда закомментировал установку режима "чтение на лету" - программа перестала зависать.
При установленном режиме "чтение на лету" - из регистров постоянно читалось записанное в них значение, как будто ВИ53 вообще не уменьшает значение счетчика.
- - - Добавлено - - -
Тогда я переживаю, почему на реале, я вообще ни чего не увидел на выходах ВИ53. Там была стабильная "1".
В исходнике "Wave AY" заменил режим "2" работы таймера на "0"-режим, и в эмуляторе "Emu" фоновый свист полностью пропал.Цитата:
но в эмуляторе VV звук воспроизводится с частотой 44КГц, а то что слышно в виде свиста это скорее всего биение частоты ШИМа при ресэмплировании к частоте 44КГц. В VV есть фильтр который настроен на подавление частот выше 20КГц, но в данном случае он почти бесполезен.
Вечером попробую в других эмуляторах.
Чтобы понять, почему на моём реале таймер молчит "как партизан", пришлось доставать логер, вешать его на ВИ53, накидать программку, которая переключает режимы таймера, и смотреть выходы каналов на фоне тактовой частоты 1.5МГц.
Получается, что если надо просто совсем заткнуть таймер, то нужно все каналы настроить на режимы 1 или 5. Для их активации используется передний фронт сигнала разрешения счёта, а на Векторе он всегда в "1", но и счётчики видимо будут стоять.
Во вложении, архив с rom-ом и исходником программы, краткое описание в txt, и скриншоты логгера.
Задавал каждому каналу разный режим, загружал в счётчики значение 0008h.
Получилось два теста, по три режима в каждом.
Реал Вектор06ц.02.
Я с этого ВИ53 просто ......
Скорее всего это нужно было в тему теста ВИ53, закинуть. Но и во всех эмуляторах картинка отличается.
Причину понять не могу.
Вроде реал 02-ой и v06x совпадают, но в v06x скрол экрана сдвинут, на реале верхняя строка FF, а v06x - верхняя строка 00.
Самая близкая к ним картинка на Emu.
Накидал тест, который между прерываниями постоянно считывает значения счётчиков таймера и отображает считанное на экране (старший байт левее, младший правее).
По приходу прерывания, меняется режим, в счётчик записывается FFFFh всё повторяется.
Я так и не смог изменить/задать значение счётчиков в режимах 1 и 5 !!!
При переключении в режимы 1 или 5 из других режимов, счётчики тупо продолжают считать (уменьшаться) начиная с последнего значения, которое осталось от предыдущего режима, не принимая новые значения.
А в режиме 3 таймер вообще считает в два раза быстрее чем в остальных режимах.
Значение счётчика считанное сразу после записи и перед заменой режима выводятся в отдельный столбик.
Сделал скриншоты с экрана реальных простого Вектора и 02-го, и нескольких эмуляторов.
Офигел, от того, что скриншоты реальных отличаются.
Причину придумать не могу.
Думал, что отличия скорее всего могут быть связаны с разными кварцами, но кпроц и таймер от одного кварца таковую получают, значит расхождения не может быть.
В архиве rom, исходник и скриншоты.
Судя по всему, нашлась причина "фонового свиста" при воспроизведении wav-файлов, в оригинальном плеере "Wave AY", в эмуляторах "Emu" и "VV".
Судя по всему, если в эмуляторе Emu80 решится проблема с "чтением на лету", то в нём "фонового свиста" не будет.
Накидал ещё один тест для ВИ53, который перезаписывает счётчик таймера, когда его старший байт становится равным 00h.
В тесте перебираются режимы 0,2,3,4. Для перехода между режимами используются клавиши "УС" и "СС" (типа 0 "УС" 2 "СС" 3 "УС" 4 "СС").
В режиме 0 горит "РУС/LAT" - для обозначения начала цикла теста.
А сейчас о результатах.
На реале 02-ом, в v06x и Emu80 - только в режиме "3" на выходе видим меандр; в остальных режимах "тишина", на осциллографе - прямая линия, нет ни каких импульсов.
В эмуляторах Emu и VV - в режиме "3" на выходе видим меандр; в режимах 2 и 4, на осциллографе - видим импульсы, во вложении фото экрана осциллографа.
Во вложении rom теста и исходник.
KTSerg, Спасибо за тестик, благодаря ему удалось обнаружить ошибку. Обновил VV, ссылка в подписи.
мысли о МикроДосе
Я вот думаю, оригинальная утилита была для МикроДоса, и в ней нет отключения таймера. Значит, скорее всего, МикроДос которым пользовался автор утилиты, сам отключал таймер после вызова "RST 0" - выхода из утилиты.
Но в том МикроДосе, который я пробовал, писк оставался, значит тестируемый МикроДос не отключал таймер.
Интересно, каким МикроДосом пользовался автор утилиты. К сожалению, на образе дискеты с утилитой в Базисе, нет МикроДоса. Значит остаётся надеяться на знатоков, разбиравших МикроДосы, и знающих, есть-ли такие версии, которые при перезапуске инициализируют таймер.[свернуть]
Всё ломаю голову, что такое "чтение на лету" в ВМ53...
В утилите "Wave AY", оно используется как функция. Типа включил один раз до начала цикла чтения регистров, и наслаждайся "чтением на лету".
А вот ни фига подобного...
"Чтение на лету" это только команда (разовая акция) блокирующая изменение буфера чтения регистров, пока он не будет прочитан. Т.е. по этой команде, сам счётчик продолжает изменяться, а буфер чтения нет, он ждёт когда его прочитают.
Уже сделал один тест на реале и вроде подтвердил эту догадку.
Нужно уточнить и проверить некоторые детали. Когда проверю, выложу результаты.
Смысл в том, что ты читаешь 16-битное значение атомарно. Команда копирует значение счетчика в защелку. Защелку можно потом читать долго и медленно, она будет содержать значение, которое было в нее сфотографировано в момент команды. Таймер при этом продолжает счет без останова.
Чтение на лету, это какое то неправильное название. В нормальной литературе эта команда называется "Защелка", предназначена для корректного чтения 16ти битного счетчика, т.к. его чтение проходит в два шага, и содержимое счетчика за это время успеет изменится.
Я когда исходник смотрел, удивился, зачем дают команду защелку, а потом чуть ли не бесконечно читают счетчик :)
На русском мало подробной инфы по ВИ53. Впервые нашел упоминание про этот режим, и в доках он именно так (чтение на лету) и называется.
Я вот совсем не изучал ВИ53 так глубоко. Когда изучал исходник, думал "так и надо", а внятного объяснения в доках не нашел.Цитата:
Я когда исходник смотрел, удивился, зачем дают команду защелку, а потом чуть ли не бесконечно читают счетчик :)
Вот и пытаюсь "совместить круг с квадратом"... , а оно в голове ну ни как не укладывается.
Да ещё результаты тестов на всех эмуляторах разные, что не добавляет ясности.
Ну, возникшие у меня вопросы по поводу ВИ53 и режима "защёлки" (чтения на лету), я кажется снял с повестки дня.
По ходу тестирования, наткнулся на условие, которое даёт сбой в эмуляторе Emu80.
И собственно тест во вложении - это иллюстрация условия для сбоя.
Тест следующий:
Левые две колонки - это 255 значений счётчика ВИ53 считанные без использования команды "защёлки".
Следующие две колонки - 128 (верхних) значений счётчика ВИ53 считанные с использованием команды "защёлки", и нижние 127 значений считано снова без использования команды "защёлки".
Правые колонки - это собственно "XRA" - разница между предыдущими, для наглядности.
Пояснение моего мнения по поводу Emu80.
Команда "Защёлка" работает, если ей пользоваться, или не пользоваться.
А вот если как в утилите "Wave AY" - один раз дал команду и забыл про неё... тут возникает проблема, т.к. команда "защёлка" оставляет значение счётчика заблокированным, даже после того как оба байта считаны. Хотя блокировка должна сниматься после чтения всех байт заявленных в слове управления.
Во вложении rom теста и скриншот с реала 02-го.
В 90-ых, у меня был знакомый, которому я передавал свои программы для бета-тестирования.
Он каждый раз ухмылялся, и говорил, что тестировать штатные возможности нет смысла, типа я сам их уже проверил, пока кодил.
И начинал извращаться, задавая не штатные опции, нажимая не предусмотренные комбинации клавиш, и т.д. и т.п. ...
Вот решил я проверить, как работает команда "защёлка", если её не правильно применять...
Тест во вложении, вариация предыдущих:
Счётчик настроен на работу в режиме "слово" - 2-Байтный счётчик.
Левые две колонки - чтение регистров ВИ53 без использования "защёлки".
Следующие две колонки - чтение регистров ВИ53, с командой "защёлка" перед чтением каждого байта.
Правые колонки - "XRA" - разница между предыдущими, для наглядности.
Аааагаааа, ни кто не думал, что над ВИ53 издеваться будут :v2_tong2:
Во вложении rom теста, исходник и скриншот с реала 02-го.
Дополнительный тест показал, что если "защёлка" уже активирована, то последующая подача этой команды просто игнорируется (реальным ВИ53), а не приводит к очередной фиксации нового значения счётчика (как в эмуляторах).
http://bitsavers.trailing-edge.com/c...ual_197509.pdf
Страница 2-13 HALT SEQUENCES -- вербальное описание.
Таблица инструкций на странице 2-18 показывает что делают все инструкции на каждом такте каждого цикла, HLT тоже.
Рисунок 2-12 на странице 2-14 показывает блок-схему состояний при исполнении HLT. Рисунок 2-11 на той же странице -- временная диаграмма входа в режим HALT.
svofski, я правильно понимаю что HLT выполняет 2 машинных цикла, и зацикливается в Twh в ожидании прерывания?
parallelno, насколько я могу судить по всем доступным мне материалам, да.
svofski, тогда получается что в твоём эмуляторе ошибка. Если я не ошибаюсь то у тебя HLT зацикливается на первом машинном цикле.
Если я правильно понимаю логику кода, то у тебя HLT зацикливается после исполнения 4 тактов. А по идее должно выполниться 8 и далее зациклится выполняя по 4 такта. Или я ошибаюсь?