Вход

Просмотр полной версии : Вопросы по Вектору (для эмулятора)



Saar
19.02.2016, 11:48
Решил написать эмулятор Вектор 06 на FPGA.
Поскольку данного компьютера у меня никогда не было, я плохо разбираюсь в тонкостях его железа.

Вот первая проблема:
Не пойму как программируется палитра. Понял только что цвет записывается в порт 0xC, но не могу понять куда записывается адрес цвета.

Может кто подскажет?

svofski
19.02.2016, 12:58
Saar, адресом цвета является код выводимого в настоящий момент пикселя, или цвет бордюра. Обычно палитра программируется во время обратного хода луча, в это время активен бордюр.

Не хочу отвадить от благородного порыва, но Вектор на FPGA уже есть :)

Saar
19.02.2016, 14:23
svofski,
Я в курсе что есть для DE1. Во-первых: там всё основано на использовании SRAM, а сам код очень сильно запутан и на мой взгляд слишком усложнен. Всё то хозяйство довольно сложно портировать на плату без SRAM.
Во-вторых: я уже сделал эмулятор Апогея, а потому есть уже костяк, на который хочу навесить дополнения чтобы получить Вектор 06.
Потом, я не хочу портировать КНГМД отчасти из-за того что довольно сложно реализовать это на SDRAM (придется делить SDRAM шины между двумя процессорами), от части из-за не нужности. Мне хочется играть в игрушки, а не программированием заниматься.
На моей FPGA плате уже есть диспетчер файлов и потому закинуть приложение внутрь эмулируемого компьютера через готовое OSD гораздо проще чем эмулировать КНГМД.

Так как адрес цвета-то выставить?
Означает ли это что, в момент вывода бордюра я должен быстро перебрать все индексы цвета бордюра занося при этом значение цвета в порт 0xC?

- - - Добавлено - - -

Еще вопрос:
Игры для Вектор 06 я нашел ввиде ROM файлов. Это дамп памяти что-ль?
Достаточно залить файл с адреса 0x100 в память Вектора (вычитал из темы эмулятора DE1, но не уверен что правильно)?

- - - Добавлено - - -

Еще непонятно по поводу ПЗУ.
Оно при загрузке торчит с 0 адреса, но в отличие от других компов не мапится постоянно на 0xFxxx, а остается внизу. Так?
А когда оно отключается (чтобы освободить вектора)?
Если ROM файлы загружаются с 0x100, то получается что при записи в область ПЗУ, запись происходит в теневое ОЗУ по тем же адресам?

artyr_n
19.02.2016, 14:51
После ресета чтение идет из ПЗУ а запись по тем же адресам идет в ОЗУ. В ПЗУ находится загрузчик в 2Кб версии с магнитофона, квазидиска, флопика, сети, модуля ПЗУ. После загрузки программы вызывается опять ресет но при этом не очищается память и отключается ПЗУ, программа стартует. ПЗУ остается отключенным так как там только начальный загрузчик, ни монитора ни служебных подпрограмм там нет.

- - - Добавлено - - -

http://asdasd.rpg.fi/~svo/scalar/ware/572/
не знаю видели Вы это или нет там с второго номера идет техническое описание вектора.

svofski
19.02.2016, 15:01
vector06cc поддерживает платы с SDRAM усилиями ivagor-a. Например, он работает на китайской WxEDA, в которой SRAM-a нет в принципе.


Так как адрес цвета-то выставить?
Означает ли это что, в момент вывода бордюра я должен быстро перебрать все индексы цвета бордюра занося при этом значение цвета в порт 0xC?
Да, программы для Вектора так и делают. Как правило они это делают сразу в начале обработки прерывания. В это время луч еще находится за границей экрана и этот процесс незаметен внешне. Разработчики Вектора допустили какой-то огрех в этой части схемы, поэтому на очень многих Векторах запись в этот порт работает ненадежно. Обычно программы делают out $0c по нескольку раз подряд, чтобы сработало наверняка.



Игры для Вектор 06 я нашел ввиде ROM файлов. Это дамп памяти что-ль?
Да. Дамп лент как их загружает в память загрузчик.



Оно при загрузке торчит с 0 адреса, но в отличие от других компов не мапится постоянно на 0xFxxx, а остается внизу. Так?
А когда оно отключается (чтобы освободить вектора)?
ПЗУ подключено только на чтение вплоть до нажатия БЛК+ВВОД (или БЛК+СБР? тут я могу ошибаться, реал давно не трогал). После включения и сброса, ПЗУ подключено, но запись в его адреса приводит к записи в ОЗУ. Нажатие волшебной клавиши запуска программы запускает защелку, которая отключает доступ ПЗУ загрузчика. Система остается в таком состоянии до полного сброса. Программно это сделать никак нельзя.

- - - Добавлено - - -


http://asdasd.rpg.fi/~svo/scalar/ware/572/
не знаю видели Вы это или нет там с второго номера идет техническое описание вектора.

Техническое описание рекомендуется как дополнение к схемам http://asdasd.rpg.fi/~svo/scalar/search/?query=%D0%A1%D1%85%D0%B5%D0%BC%D1%8B. Все вместе достаточно полно описывает устройство компьютера.

То, чего там может не быть, а если есть, может не бросаться в глаза: по-моему в каком-то из альбомов схем есть дамп ПЗУ, которое раздает управляющие сигналы RAS/CAS и циклы ожидания. Это важно для точной эмуляции. Упрощая, можно сказать, что число тактов в каждом машинном цикле на Векторе округляется вверх до числа кратного четырем. То есть цикл, который выполняется за 4 такта на Векторе выполнится за 4, а тот, что выполняется за 5 тактов, на Векторе съест все 8.

Saar
19.02.2016, 15:29
Забавно. На моей памяти, это первый комп, в котором полностью отключается ПЗУ и прога остается сама с собой без какого либо БИОСа.

artyr_n
19.02.2016, 16:15
без какого либо БИОСа.
и знакогенератора

svofski
19.02.2016, 16:44
Любоваться на знакогенератор при загрузке с кассет -- это самый восторг.

Saar
20.02.2016, 03:41
Нужно больше деталей о запуске программ и отключении ПЗУ.
Правильно ли я понял, что последовательность такая:
1) Холодный старт с ПЗУ в 0 адресах.
2) ПЗУ при старте прописывает в 0 адрес что-то типа JMP 0x100
3) Далее грузится прога
4) при нажатии специальных кнопок отключается ПЗУ и производится reset
5) комп опять стартует с 0 адреса, но уже с ОЗУ где прописано JMP 0x100

Так?

- - - Добавлено - - -

В какой момент приходит INT?
- в момент первой после последней отображаемой строки битового поля (начало vborder)
- в момент окончания нижнего бордюра (начало vblank)
- в момент начала вертикального синхроимпульса

svofski
20.02.2016, 04:06
Похоже. Только по-моему про JMP 0x100 — это лишнее, по крайней мере я такого не помню. Загрузчик просто чистит память (если нажата УС, то не чистит). По окончании загрузки всюду, куда не было что-то загружено, будут нули, то есть NOP-ы. Процессор после сброса с отключенным ПЗУ сам дотикивает до начала программы.

Вообще ROM-файлы это большое упрощение. Стандартный загрузчик читал файлы по блокам, блоки делились на подблоки. Каждый блок имел свой адрес и он мог указывать на любое место в памяти, в том числе ничто не запрещало грузиться с адреса 0. Смотри соседнюю тему про тайны лентозаписи.

Вот стандартный загрузчик, дизассемблированный и подробно откоментированный http://asdasd.rpg.fi/~svo/scalar/ware/544/

- - - Добавлено - - -


В какой момент приходит INT?
Через "приблизительно некоторое время" после начала VSYNC. IRQ удерживается продолжительное время. Точное попадание в этот момент —*одна из самых больших головных болей Векторовских эмуляторописателей.

У меня это тут:
https://github.com/svofski/vector06cc/blob/projects/src/DE1/vector06cc.v#L651
(задержка на 28 процессорных тактов, держится активным 191 такт).

Как в других эмуляторах это реализовано я не знаю, хотя, есть порыться здесь на форуме, может быть можно найти наши обсуждения в процессе поиска истины.

KTSerg
20.02.2016, 07:57
Если мне мой склероз изменил, поправьте.
В Векторе, сброс процессора осуществляется двумя специальными кнопками "ВВод" и "Сбр"-сбрс (про схемную блокировку этих кнопок "Блк" можно упустить). Обе эти кнопки одинаково сбрасывают процессор, и заставляют его начать выполнять программу с адреса 0.
Но при нажатии кнопки "ВВод" включается аппаратное микширование памяти ОЗУ и ПЗУ, при котором чтение из памяти происходит из ПЗУ (первоначально было первые 512Байт, дорабатывали до как минимум 2КБ) - по остальным из ОЗУ, а запись по любому адресу в ОЗУ.
При нажатии "Сбр" отключалось ПЗУ, в остальном обычный сброс процессора.

Любые изменения состояния памяти совершает только программа, ну там очистка/заполнение...

Соответственно: При нажатии ВВод - сброс процессора и переход к выполнению программы с адреса 0, при этом подключена ПЗУ.
Когда программа в ПЗУ выполнила свою роль загрузки информации в ОЗУ, в первоначальном варианте Вектора происходило зацикливание исполняемой программы с миганием светодиода - что указывало на успешную загрузку информации. В дальнейшем сделали доработку, которая при мигании светодиода (при подключенном ПЗУ) имитировала нажатие кнопки "Сбр". Это вызывало сброс процессора (с отключением ПЗУ) и соответственно выполнение программы расположенной в ОЗУ. Если программа грузилась с адреса 100h, то процессор по любому сначала выполнял команды с адреса 0 (если загрузчик там чистил, то там NOP-ы и процессор "добегал" до загруженной программы и начинал её выполнять. Но в загрузчике была "закладка" - нажав кнопку "Ус" можно было отменить очистку памяти перед загрузкой инфы. Тогда в ОЗУ оставалась программа которая могла быть расположена с адреса 0. После загрузки инфы и "Сбр" процессора соответственно происходил "перехват" управления старой программой... со всеми вытекающими...

Saar
20.02.2016, 14:33
Правильно ли я понимаю, что клавиатура идентична Радио86РК (в том числе и распределение по портам) за исключением дополнительных кнопок БЛК, СБР, ВВОД?

- - - Добавлено - - -

Поделитесь, кто знает, тестовой программой где можно протестировать все компоненты компьютера.

artyr_n
20.02.2016, 14:48
http://asdasd.rpg.fi/~svo/scalar/categories/48/

KTSerg
20.02.2016, 15:01
Кстати, я ещё не понял, в чём заключается проблема с определением - когда приходит INT ?
Он ведь приходит с кадровым синхроимпульсом, разве не так?
Посмотрю ещё схемы, сравню старый и 02ой... забыл уже подробности, а доработку КСИ вот вроде недавно делал... :(

Saar
20.02.2016, 15:19
разница с клавиатурой Радио86 заключается лишь в поменянных местами первым и вторым столбцами.

svofski
20.02.2016, 15:39
Кстати, я ещё не понял, в чём заключается проблема с определением - когда приходит INT ?
Трудно объяснить. Я тоже так думал, но когда дошло дело до изощренных программ, которые делают нетривиальные вещи типа мультиколора, изменение режима в разных частях экрана итп, стало понятно, что есть какие-то тонкости.

Анализ схем всегда приветствуется.

KTSerg
20.02.2016, 20:06
Трудно объяснить. Я тоже так думал, но когда дошло дело до изощренных программ, которые делают нетривиальные вещи типа мультиколора, изменение режима в разных частях экрана итп, стало понятно, что есть какие-то тонкости.
Анализ схем всегда приветствуется.
Судя по всему проблема приходит из реализации обработчика прерывания самого процессора...
Я уже не помню (могу путать) 580ый вообще в этом отношении (растактовка) документирован?

svofski
20.02.2016, 21:40
Может быть, хотя разъезд чего-то очень большой получается. Если бы в пределах одной инструкции, я бы понял. Про документацию к сожалению не помню. Есть смысл штудировать оригинальную инструкцию от 8080A, там все чрезвычайно подробно расписано.

Saar
21.02.2016, 01:33
оригинальную инструкцию от 8080A
а ссылкой не поделитесь? мне не удалось найти хорошую инструкцию на 8080.

svofski
21.02.2016, 01:57
Вот талмуды. В каком именно из них уже не подскажу. Скорее всего они частично себя повторяют.
http://bitsavers.trailing-edge.com/pdf/intel/MCS80/

Saar
21.02.2016, 03:54
svofski,
в вашем эмуляторе тормоза правильные? 256-цветное демо правильно отображается?

Вы упомянули про версию вашего эмулятора для SDRAM. Не могли бы дать ссылку, а то я не смог найти.
Хочу портировать на свою плату для сравнений.

svofski
21.02.2016, 04:46
Да, все тормоза у меня хорошие ;)

Вот текущая версия, где собраны вместе DE1-SRAM, DE1-SDRAM и WXEDA (тоже SDRAM):
https://github.com/svofski/vector06cc/tree/projects

Если что-то не пойдет, это еще необкатанный вариант, то вот исходные ветки:
https://github.com/svofski/vector06cc/tree/sdram - DE1 с SDRAM
https://github.com/svofski/vector06cc/tree/wxeda-cycloneiv - вариант порта на совсем другую плату с SDRAM и Cyclone IV

Saar
21.02.2016, 04:49
svofski,
порекомендуйте на чем проверить режим 512х256?

- - - Добавлено - - -

svofski,
можете ткнуть в то мест где у вас в коде тормоз написан?

svofski
21.02.2016, 05:22
https://github.com/svofski/vector06cc/blob/projects/src/DE1/vector06cc.v#L322
Это просто счетчик. Когда старшие три разряда == 3'b101, процессору дозволено общаться с миром. В настоящем Векторе функцию этого блока выполняет ПЗУ РЕ-какое-то-там. Оно же дирижирует RAS/CAS.
Про клоки еще немножко здесь, правда скорее всего диаграмма немного устарела https://github.com/svofski/vector06cc/blob/wiki/ImplementationNotes.md
Ну и вообще, на этой вики собрано некоторое количество информации, которая может случиться полезной.

Режим 512х256:
Бейсик "Корвет" http://asdasd.rpg.fi/~svo/scalar/ware/96/
Мелкие демки http://asdasd.rpg.fi/~svo/scalar/ware/106/
Minesweeper http://asdasd.rpg.fi/~svo/scalar/ware/57/
Пещера http://asdasd.rpg.fi/~svo/scalar/ware/356/
Комбинированный режим http://asdasd.rpg.fi/~svo/scalar/ware/95/

Saar
21.02.2016, 10:22
Правильно ли я понимаю, что из-за отсутствия ПЗУ (оно отключается после загрузки приложений) каждая прога извращается по-своему с КНГМД?
В БК0011М я сделал просто - перехватываю точки входа ПЗУ на чтение и запись блоков. Таким образом мне не надо эмулировать регистры КНГМД.
На Векторе, я так понимаю, это невозможно сделать. Придется эмулировать регистры, если захочу эмулировать КНГМД. так?

svofski
21.02.2016, 12:40
Правильно, да.

Saar
21.02.2016, 13:46
Есть ли какие демки или тесты, где я бы смог проверить правильность INT и вообще какие-нибудь бордюрные эффекты?
256 цветов я уже проверил - правильно отображается.

svofski
21.02.2016, 14:50
Multicolor (текст на бордюре): http://asdasd.rpg.fi/~svo/scalar/ware/32/
Black Ice (сегмент с телевизором): http://asdasd.rpg.fi/~svo/scalar/ware/4/
Мощный тест от ivagor-a специально придуманный и воплощенный для наших нужд: http://asdasd.rpg.fi/~svo/scalar/ware/861/

Еще программы, которые могут быть полезными в качестве тестов:
Exolon, в основном таймер. Здесь счетчик заводится синхронно с разверткой и опрашивается для определения текущей позиции луча: http://asdasd.rpg.fi/~svo/scalar/ware/405/
Pillars, доставили в свое время как тест CPU: http://asdasd.rpg.fi/~svo/scalar/ware/484/
Тест CPU: 8080 Exerciser: https://github.com/begoon/8080ex1 — для него нужен Микродос, но можно запустить с квазидиска.
Когда появится дисковод: SkyNet http://asdasd.rpg.fi/~svo/scalar/ware/8/ — от этого творения меня в дрожь бросает, потому что оно не очень короткое, детектирует глюки эмуляции как правило ближе к концу, а проблемы были совершенно неочевидные. Сейчас помню смутно одну — что-то с переключением страниц квазидиска.

- - - Добавлено - - -

Вот ключевые для SkyNet коммиты:

https://github.com/svofski/vector06cc/commit/8674d03598b467bc14e4a35658978a3324dd013d
https://github.com/svofski/vector06cc/commit/ebc2cff60519a2222c606d701797a6aac7c6c8a2
https://github.com/svofski/vector06cc/commit/43bf30d03b166f3b2d2dea3071829608d3fa4880

Saar
21.02.2016, 18:00
Я использую модель ВМ80А от Vslav, которая основана на реверсе, в отличие от T80.
Думаю, с растактовкой инструкций проблем не должно быть.

А вот с Exolon беда какая-то. После нажатия на RUS на экране где выбор 1, 2, 3, 4, начинаются жуткие глюки на экране. Много всякого мусора начинает летать. Не могу понять из-за чего. Я уже перепробовал кучу игр и все они работают нормально. А тут ужас какой-то. Чего такого используется в данной игре?

- - - Добавлено - - -

Black Ice, к сожалению требует FDD. Хотя на самом деле это нафиг не нужно судя по размеру. Но второй файл пожат загрузчиком, поэтому увы...

тест от ivagor почти правильный. На один символ пришлось подвинуть INT.

- - - Добавлено - - -

Pillars запустился без проблем. Что, как я понял, показывает правильную работу процессора от Vslav.

- - - Добавлено - - -

Демка Multicolor отработала без нареканий. Сравнивал с Emu от b2m.

- - - Добавлено - - -

Exolon использует Квазидиск?
К сожалению не нашел хороших тестов квазидиска. Есть два теста в той библиотке откуда все ссылки здесь. Но они тупые какие-то. Что-то там пишут, читают. Однако, я исправил уже пару ошибок, которые нашел чисто визуально в коде. При этом оба теста никаких ошибок не показывали.

svofski
21.02.2016, 18:08
Модель Vslav конечно точнее. Хотя мой вариант T80 тоже уже неплохо допилен. Исходный вариант в роли Z80 может и ничего, но в качестве 8080 совершенно не годился.

Чего такого используется в данной игре?
Таймер.

- - - Добавлено - - -

Въедливый тест таймера: http://asdasd.rpg.fi/~svo/scalar/ware/650/

Saar
21.02.2016, 18:36
Въедливый тест таймера: http://asdasd.rpg.fi/~svo/scalar/ware/650/
да, с таймером беда у меня. Хотя, модель ваша используется.
Надо разбираться.

svofski
21.02.2016, 23:44
Я, вообще говоря, не помню, совпадает ли этот тест в моем Векторе на 100%. Он очень въедливый ;)

Saar
22.02.2016, 08:29
svofski,
проверьте тесты у себя.
у меня получается так:
если запустить tst8253 сразу после запуска эмулятора, то значения похожи на настоящие, только сдвинуты.
Если потом запустить како-то другой тест из набора, например, i8253, а потом опять tst8253, то значения будут странные, состоящие только из 88, 48 и еще пары на 8 заканчивающиеся. Такое впечатление что ВИ53 не перепрограммируется заново.

KTSerg
22.02.2016, 20:51
...
Через "приблизительно некоторое время" после начала VSYNC. IRQ удерживается продолжительное время. Точное попадание в этот момент —*одна из самых больших головных болей Векторовских эмуляторописателей.
У меня это тут:
(задержка на 28 процессорных тактов, держится активным 191 такт).
...

Почитал я доки на 8080... посмотрел графики... схемы Вектора...
Не нашел ничего говорящего о том, что процессор так долго не реагирует на INT...
"28 процессорных тактов" - это 28 импульсов тактовой частоты 3МГц ???
И "держится активным 191 такт" - это входной сигнал INT остаётся в высоком уровне 191 импутьс частоты 3МГц ???

Судя по докам, входной INT опрашивается в 3-ем такте (выполнения команд) и уже через 1 такт делает активным INTE - запрет прерывания, который в схеме Вектора через триггер отключает водной INT...

В общем ни найдя ни в доках, ни в схеме ничего "криминального", вздохнул, расчистил завал на столе и собрал разобранный Вектор (02ой). Подключил логгер (25МГц) к выводам INT, INTE, F1, F2 (процессора, тактовые - до инверторов в низковольтовой части), и к D89.5 - где в схеме подписано "F50Гц"...
Результат такой, INTE появляется через 1.25 мкс после F50Гц. Т.е. через 4 такта (импульса частоты 3МГц) процессор уже блокирует (отключает через триггер) входной INT.

Т.е. я пока не могу понять необходимость указанных задержек 28 и 191 такт...

svofski
23.02.2016, 00:18
Saar, мне сейчас несподручно все подключать. Может быть ivagor сможет быстрее проверить, если у него найдется минутка.

- - - Добавлено - - -

KTSerg, спасибо, это очень интересно. Возможно это связано с какими-то особенностями моего генератора развертки. А сколько времени удерживается INT, если INTE не появляется?

Saar
23.02.2016, 04:03
вот что у меня с Exolon:
https://mega.nz/#!AdBHFATb!CahoIsUS9PfLF0wOXWGg2M1Job0xsvS5nkbNt-tvsvM

может это и не таймер? такое впечатление что переключают плоскости.


Воообще, схема формирования INT у Вектора довольно простая. Я посмотрел на схему и написал полный аналог:


reg INT = 0;
always @(posedge retrace, negedge cpu_inte) begin
if(!cpu_inte) INT <= 0;
else INT <= 1;
end


Retrace у меня длится 10 строк. А длительность INT регулируется сигналом INTE.

KTSerg
23.02.2016, 06:45
... Возможно это связано с какими-то особенностями моего генератора развертки. А сколько времени удерживается INT, если INTE не появляется?
Да, у меня то-же эта мысль появилась, что у тебя задержки просто компенсируют разницу в формировании длительности КСИ.
Про INT уже ответили. Он поступает на процессор с триггера. Фронт "F50Гц" перебрасывает триггер, и на процессор поступает INT. Появление INTE на выходе проца - сбрасывает триггер, и INT с проца снимается, до следующего фронта "F50Гц".
Кстати, INTE - это аппаратный сигнал, но и программные DI/EI его то-же формируют, на сколько я понял.

Saar
23.02.2016, 07:33
INTE - это аппаратный сигнал, но и программные DI/EI его то-же формируют
INTE - единолично управляется командами DI/EI. Больше ничем.
На Радио86РК на этом выходе висит динамик, и звук формируется как раз этими DI/EI командами.

KTSerg
23.02.2016, 08:22
Возможно так оно и есть, я не претендую на знание английского, что-бы быстро уточнить этот вопрос в дата-шитах, и сложным программированием на Векторе занимался 20лет назад и не помню деталей (подробностей работы с прерываниями).
Но отключение INTE (переход в 0) через 4 такта после прихода фронта INT - проявление аппаратной зависимости этих сигналов, на мой взгляд. Поскольку 4 такта - это одна команда, и она навряд-ли будет DI, с моей точки зрения.
Хотя я могу путать с другими процами, у которых внешнее прерывание формирует аппаратный запрет прерываний, и по окончании обработки прерывания его приходится всегда разрешать, иначе следующего не наступит.

ivagor
23.02.2016, 08:43
Может быть ivagor сможет быстрее проверить
ivagor смог - v06cc совпадает с результатами реала

Saar
23.02.2016, 09:16
ivagor,
а если запустить tst8253, потом что-то другое из пакета тестов, а потом снова tst8253?

- - - Добавлено - - -

KTSerg, просто первая команда в обработчике прерываний обычно всегда DI. Она однобайтная и вполне вписывается в несколько тактов.

ivagor
23.02.2016, 09:29
Запустил tst8253 (все OK), I8253 (ОК), опять tst8253 - цифры другие, не как на фото с железного 06Ц

- - - Добавлено - - -


первая команда в обработчике прерываний обычно всегда DI
не всегда, а скорее очень редко, потому что там di не нужен

KTSerg
23.02.2016, 10:07
Провёл эксперимент на реал Векторе (02).
Написал программку:
.org 0
EI
HLT
JMP 0

.org 38h
RET
.

Это просто цикл прерываний.
Результат такой:
Через 4 такта после фронта "F50Гц", "INTE" падает в "0" и отключает "INT".
INTE восстанавливается в "1" через 44 такта.

Если убрать EI (заменить NOPом, или вроде пробовал JMP 0001) - прерывания никогда не наступают.

Если вставлять "NOP" между HLT и JMP 0 - это приводит к тому, что каждый NOP задерживает восстановление INTE на 4 такта.

Если заменить
RET
на
EI
RET
т.е. разрешить прерывания сразу после перехода к ним, то INTE восстанавливается через 20 тактов.

Т.е. INTE - падает в 0 (запрет прерываний) как программный, так и аппаратный выходной сигнал процессора, поскольку я не использовал DI, а он сам срабатывал.
И разрешать прерывания на Векторе нужно программно - обязательно (если они нужны).
Вроде на процах Мега есть специальная команда выхода из прерывания, которая кроме обычного RETURN сама выполняет ещё и EI, но я опять-же могу путать... склероз аднака... :(

Saar
23.02.2016, 10:40
опять tst8253 - цифры другие, не как на фото с железного 06Ц
ага.. значит хоть в этом у меня нет расхождения.

А почему так? Тесты вроде ваши. Вы полностью прописываете все регистры или что-то забываете?
А на реальном Векторе есть возможность так же запустить tst8253 после других тестов?

- - - Добавлено - - -

KTSerg,
ну тогда значит сам процессор принудительно выдает DI при наступлении прерываний, а обработчик прерываний значит обязан выполнить EI перед выходом, чтобы вновь разрешить прерывание.

KTSerg
23.02.2016, 11:07
...
А на реальном Векторе есть возможность так же запустить tst8253 после других тестов?
...
Запускал сейчас через загрузчик (ЛВС) эти тесты в указанной последовательности.
Каждый раз результаты как на картинках.
С учётом того, что на ВИ53 не заведено системного сброса, можно сделать предположение, что указанные тесты корректно его перепрограммируют на реал. Векторе.

ivagor
23.02.2016, 11:14
А почему так? Тесты вроде ваши.
Нет, те тесты не мои и я в них не разбирался. Недавно я сделал пару-тройку тестов ВИ53, но они только на форуме, не в картотеке.
Реала у меня уже несколько лет нет, но KTSerg проверил, спасибо ему

Saar
23.02.2016, 14:26
Получается, что модель ВИ53 где-то глючит.

- - - Добавлено - - -

Однако, это не отвечает на вопрос почему Exolon так глючит у меня.

- - - Добавлено - - -

ivagor,
а дайте ссылки на ваши тесты. Или лучше сюда залейте чтобы все в одно место.
Я протестирую их у себя и может тогда будет ясно (с вашей помощью) где у меня проблемы.

ivagor
23.02.2016, 15:40
chkvi53_2 (http://zx-pk.ru/showthread.php?t=11029&p=851432&viewfull=1#post851432), chkvi53_weirdbinbcd (http://zx-pk.ru/showthread.php?t=11029&p=854153&viewfull=1#post854153). Но эти тесты не сильно важны для нормальной работы классических программ, в основном пробовал детектить эмулятор. Для второго теста нет результата реального вектора.

Дмитрий2012
23.02.2016, 16:11
Для второго теста нет результата реального вектора.
Результат с реала Вектор-06Ц: 2014
http://i75.fastpic.ru/thumb/2016/0223/40/4eff978a631b2b73d494d6729b634740.jpeg (http://fastpic.ru/view/75/2016/0223/4eff978a631b2b73d494d6729b634740.jpg.html)

b2m
23.02.2016, 22:43
вот что у меня с Exolon:

может это и не таймер? такое впечатление что переключают плоскости.
Таймер, таймер. П/п обслуживания прерывания лезет в порты, а поскольку они совмещённые для клавы и экрана, результат - на экране.

Saar
24.02.2016, 09:15
56139
Из-за чего такое смещение в tst8253?

KTSerg
25.02.2016, 20:55
Посмотрел код этого теста...
Ничего "страшного" там не увидел, просто в режиме делителя тактовой частоты, и в одном и том-же цикле считываются значения делителя. Даже не знаю, что этим тестом можно проверить... он (ВИ53) ведь с тактовой частотой процессора от одного генератора/делителя синхрой питается... Даже если изменить общую частоту (12МГц), тест по любому должен показать эти-же самые циферки...
Или я чего-то не понимаю... ???
Тест может показать точность эмуляции самой ВИ53 и процессора (правильность длительности - в тактах, выполнения некоторых команд).
Но если в своей сборке использовать уже готовые модели (блоки/модули), то...
В доке (брошурке) на ВИ53 сказано, что новые значения для делителя принимается не сразу после записи...
Может он уже чего "медленно" считал, и не сразу на "новый режим" вышел, поэтому и сдвиг...

Saar
27.02.2016, 06:31
Exolon заработал. Пришлось написать новую модель ВИ53 с нуля.


KTSerg,
тем не менее этот тест показывает одну недокументированную особенность. Нигде в даташитах не сказано, что при работе с однобайтным счетчиком, другой байт обнуляется. Вот в модели от svofski он не обнуляется, и потому если данный тест запустить после других тестов, получаются неправильные значения, в отличие от реала.
Я в своей модели обнуляю, и тест работает всегда одинаково.
Правда, данные всё так же сдвинуты. Но это, я думаю, из-за сдвига фазы частоты таймера.

KTSerg
27.02.2016, 07:15
Exolon заработал. Пришлось написать новую модель ВИ53 с нуля.
...
Правда, данные всё так же сдвинуты. Но это, я думаю, из-за сдвига фазы частоты таймера.

Крут. Молодца, разобрался в проблеме.

По сдвигу данных в тесте, не уверен, что фаза частоты могла бы дать такую погрешность, тут явно либо рано, либо поздно начинает считать относительно записи в него начальных значений...
Может эмуляция проца не точная, ну например команда записи в порт выполняется не положенные ей количество тактов, а в один, потом просто задержки... Ну или что-то в этом духе...

Saar
27.02.2016, 08:07
KTSerg,
Я сильно сомневаюсь в неточности модели процессора, поскольку использую модель, основанную на реверсе реального кристалла.
Я сейчас доделываю ВИ53, а потом попробую разобраться.

Может в тесте используется прерывание 50гц и этим объясняется задержка.

KTSerg
27.02.2016, 08:48
KTSerg,
... Может в тесте используется прерывание 50гц и этим объясняется задержка.
Не, в этом тесте первой командой идёт DI, и больше они не разрешаются. Так что в самой программе задержек ни каких не должно быть. Смущает стабильность сдвига значений, это должно однозначно на что-то указывать...

Посмотрел код теста I8253 , в нём запись и чтение значений счётчиков синхронизированы с прерываниями.
Может действительно на результат (сдвиг) прерывания как-то влияют... но это возможно только если есть какая-то ошибка в эмуляции схемы... возможно.

- - - Добавлено - - -

Попробуй ради интереса вот этот тест, загружать его нужно с адреса 0000.
Я добавил в начало ожидание прерывания и переход к тесту после прерывания.
Хотя ожидание нужно было воткнуть непосредственно перед работой с ВИ53, а так там ещё экран очищается...

Saar
27.02.2016, 10:12
KTSerg,
придется изменить систему загрузки для этого теста. .c00 - это стандартное расширение для Вектора для загрузки с 0 адреса?

- - - Добавлено - - -

в общем, твой тест выдает числа начиная с 15.

- - - Добавлено - - -

подвигал я фазу частоты таймера - не помогло. Прочно начинается с 15.

KTSerg
27.02.2016, 10:31
...
подвигал я фазу частоты таймера - не помогло. Прочно начинается с 15.
15 - отображается на экране, типа 15h ? или на экране 0F ?

Попробуй этот вариант, он не чистит экран, а сразу после прерывания начнет работать с ВИ53.
Проверил на своём рел., оба модифицированных теста дают числа начиная с 0С.

Saar
27.02.2016, 10:41
вот эта конструкция:


L2 XOR A,A
OUT (#08),A
IN A,(#0B)
PUSH AF
DEC B
JP NZ,L2

как бы не совсем понятная. Если дается комманда LATCH ( 0 -> port8 ), то согласно даташиту надо считывать 2(!) байта (ибо какой смысл делать latch для одного единственного байта), а считывается только 1 байт. В общем-то это не нарушает алгоритм моей модели, ибо при latch счетчик отправленных байтов сбрасывается.
Еще один момент, который не освещен в даташите - это момент того самого latch. Непонятно когда именно происходит фиксация считываемых данных: при комманде latch или при считывании первого байта.

- - - Добавлено - - -


15 - отображается на экране, типа 15h ? или на экране 0F ?
Я говорю что вижу на экране. На экране первое число 15 (не F). Числа шестнадцатеричные, но без h.

- - - Добавлено - - -


Попробуй этот вариант, он не чистит экран, а сразу после прерывания начнет работать с ВИ53.
то же самое.

Поскольку считывание происходит сразу после программирования таймера, то очистка экрана тут неважна. Прерывания запрещены - и этого достаточно для 100% повторения.

KTSerg
27.02.2016, 11:01
В этом тесте программируется только младший байт счётчика и считывать старший не имеет смысла, он всегда будет 00.
Когда происходит фиксация, это ты скоро выяснишь :)
На счёт стандартности расширения с00 - както не задумывался, поставил "на автомате"... надо у гуру спросить где посмотреть список всех стандартных для Вектора расширений.
Разница между файлами с расширениями rom и r0m - первые грузятся с 100h, вторые с 0h.

- - - Добавлено - - -

Кстати, сейчас смотрю даташит на 82с53, там написано, что сигнал (вход) GATE влияет на счётчики (старт, рестарт и пр.), а он по схеме вектора зависит от сигнала F50Гц (КСИ)...
Может в этом собака порылась... ???

Ох ни фига-себе...
GATE на ВИ53 это системный сброс Вектора... т.е. аппаратный сброс на ВИ53 заведён, только на пересчёт во время работы он не сможет повлиять (т.к. его нет во время работы)...

Saar
27.02.2016, 11:25
хмм.. только сейчас заметил.. а значения у меня 2 раза медленнее уменьшаются.

Так.. тут наступает недокументированная особенность.
В режиме меандра счетчик уменьшается 2 раза быстрее разве?? Я вижу что в модели от svofski счетсик уменьшается на 2 за каждый тик.
Но в доках нигде не сказано что счетчик должен так уменьшаться. Там лишь сказано что первая половина out = 1 а вторая половина out =0.
Где правда??

- - - Добавлено - - -


GATE на ВИ53 это системный сброс Вектора...
сомнительная польза от этого.. Пнуть возможно зависший таймер?


KTSerg,
можешь сделать фотку с экрана реального вектора с одним из твоих последних тестов?

b2m
27.02.2016, 11:42
Но в доках нигде не сказано что счетчик должен так уменьшаться. Там лишь сказано что первая половина out = 1 а вторая половина out =0.
Где правда??
Правда в том, что результирующая частота на выходе должна быть одинаковой, как в режиме делителя частоты, так и в режиме меандра. А вот как это достигается, это уже второй вопрос. В режиме меандра таймеру приходится срабатывать в два раза чаще, поэтому счётчик уменьшается в два раза быстрее, т.е. на 2 за один такт. Причём, если делитель нечётный, то один полупериод будет на 1 такт длиннее, т.е. в первом полупериоде первый такт уменьшит счётчик на 1, а во втором полупериоде младший бит сбросится в 0 уже при загрузке счётчика.

Saar
27.02.2016, 11:49
b2m,
судя по tst8253.txt - это ваш тест. tst8253.jpg - это с реального Вектора фотка?

KTSerg
27.02.2016, 11:53
вот эта конструкция:


L2 XOR A,A
OUT (#08),A
IN A,(#0B)
PUSH AF
DEC B
JP NZ,L2

...
Еще один момент, который не освещен в даташите - это момент того самого latch. Непонятно когда именно происходит фиксация считываемых данных: при комманде latch или при считывании первого байта.
...
Можно попробовать вставить NOP между OUT и IN в указанный участок и сравнить результаты реала и эмулятора...

b2m
27.02.2016, 11:56
Да, я просил, чтобы это запустили на реальном векторе, когда были непонятки с режимом меандра.

KTSerg
27.02.2016, 12:01
На моём картинка полностью совпадают с фоткой приложенной к тесту.

- - - Добавлено - - -

На диаграммах к режиму 3 , так и нарисовано, что значение счётчика уменьшается на 2 каждый тактовый импульс.

b2m
27.02.2016, 12:07
Еще один момент, который не освещен в даташите - это момент того самого latch. Непонятно когда именно происходит фиксация считываемых данных: при комманде latch или при считывании первого байта.
Фиксация происходит при команде latch. Точнее, при этой команде устанавливается флаг, который запрещает обновление регистра считываемых данных значением счётчика. После чтения нужного количества байт флаг сбрасывается и этот регистр опять обновляется каждый такт. Если не давать команду latch, то может получиться так, что старший байт считается уже после изменения счётчика и он будет на 1 меньше ожидаемого. Например в момент чтения младшего байта в регистре было 0500, а в момент старшего уже 04FF, и программа получит ложное значение счётчика 0400.

- - - Добавлено - - -

По поводу того, что происходит, если в режиме двух байт после команды latch будет считан только один байт, а затем снова будет дана команда latch, тестов не проводилось. На мой взгляд, вторая команда latch ничего не даст, и считается предыдущее значение.

Saar
27.02.2016, 12:10
b2m,
ну зачем latch нужен объяснять мне не надо. Вроде не совсем глупый ;)

- - - Добавлено - - -


На диаграммах к режиму 3 , так и нарисовано, что значение счётчика уменьшается на 2 каждый тактовый импульс.
диаграмма в англязычной книге на 8253 имеет пронумерованные такты с шагом 1 для режима 3.

Но я уже понял что в реальности идет уменьшение на 2 за такт. Я уже переделал и теперь практически совпадает. Начинается с 0A вместо 0С. Что уже почти совпадает.

b2m
27.02.2016, 12:13
Начинается с 0A вместо 0С. Что уже почти совпадает.
После команды инициализации счётчика, счёт начинается не сразу, а через один такт. Видимо какие-то внутренние перемещения данных.

Saar
27.02.2016, 12:18
Вот, фотка из книги:
56178

- - - Добавлено - - -


После команды инициализации счётчика, счёт начинается не сразу, а через один такт. Видимо какие-то внутренние перемещения данных.
да, это понятно.. Я еще не тестировал на пограничные условия свою модель ВИ53.

- - - Добавлено - - -

b2m,
кстати, по поводу инициализации.
В моей модели сделано так: после записи Control Word, счетчик останавливается и ждет первой записи в счетчик (обоих байтов, если выбран 2-байтный режим записи). После чего начинается счет.
А как в реале? В даташите на этот счет ничего не сказано.

KTSerg
27.02.2016, 12:22
А вот из того, что я смотрел...

b2m
27.02.2016, 12:33
ну зачем latch нужен объяснять мне не надо
Я это написал, чтобы было понятно, что в любом случае считывается не само значение счётчика, а его копия.

Я вот тут сейчас подумал, и мне показалось, что счёт всё-таки начинается сразу после загрузки счётчика, просто в регистр для чтения данные попадают на 1 такт позже, т.к. обновление и счётчика, и регистра происходит по одному тактовому импульсу.

- - - Добавлено - - -


А вот из того, что я смотрел...
Это более правильная картинка.
Должна быть ещё картинка с нечётным делителем, там числа типа такие: 5 4 2 4 2 5 4 2 4 2 ...

- - - Добавлено - - -


кстати, по поводу инициализации.
В моей модели сделано так: после записи Control Word, счетчик останавливается и ждет первой записи в счетчик (обоих байтов, если выбран 2-байтный режим записи). После чего начинается счет.
А как в реале? В даташите на этот счет ничего не сказано.
Вроде во всех даташитах сказано, что счёт останавливается после загрузки управляющего слова. И это, кстати, достаточно часто используется, чтобы выключить звук в компах, где gate постоянно разрешён, а выход идёт напрямую на динамик.

KTSerg
27.02.2016, 12:35
Попробовал вставить NOPы.
Если вставить между перед OUT, или между OUT и IN разницы в показаниях не будет. Так что значение для чтения фиксируется на OUTе.

Saar
27.02.2016, 12:41
Так что значение для чтения фиксируется на OUTе.
либо режим latch игнорируется при 1-байтном режиме.

Хорошо бы после latch поставить много NOP и считать. А потом убрать latch (NOPы оставить) и считать снова.
Потом то же самое сделать с 2-байтным режимом.

KTSerg
27.02.2016, 13:10
Я в английском не силён, может тут есть что полезное.

- - - Добавлено - - -

Чё он их так уменьшает? :(

Saar
27.02.2016, 13:25
KTSerg,
Скрин ну очень мелкий чтобы читать. Выложи лучше книжку сюда. Видно очень подобное описание 8253.

- - - Добавлено - - -

нашел этот даташит:
http://pdf.datasheetarchive.com/indexerfiles/Scans-052/DSAIH00054971.pdf

- - - Добавлено - - -

еще один нашел:
http://www.sharpmz.org/download/8253.pdf

KTSerg
27.02.2016, 13:31
Ага, первый - это именно тот файл из которого я давал скрины.

Saar
27.02.2016, 16:03
мыло, мочало - начинаем всё сначала...
Придется перечитать даташиты что я нашел. Вот уже вычитал важное уточнение: Note that the internal counters are reset to 0000H during control word setting.

- - - Добавлено - - -

я так понял из новых доков, что значение счетчика при чтении всегда на такт раньше чем реальное значение. Видимо, поэтому у меня начинается с 0A вместо 0C.

- - - Добавлено - - -

у меня возник вопрос про это однотактовое отставание.
Не могу найти ответ в доках.

1) Что происходит в тех режимах в конце, когда счетчик дотикивает до 0 и останавливается? Читаемое значение останавливается на 1 или через такт тоже становится 0?
2) При загрузке начального значения, читаемое сразу выставляется и не меняется 2 такта или выставляется через такт?

- - - Добавлено - - -

С tst8253 разобрались. Теперь правильно показывает.

а вот тест I8253 из того же пакета тестов:
56184
Отсутствуют значения 01 и 05, при том, что остальные значения правильные.

А должны ли 01 и 05 присутсвовать, если GATE всегда 1? В этих режимах счет запускается фронтом GATE.

KTSerg
27.02.2016, 16:20
Судя по диаграммам:
Новое значение заносится в регистры при следующем спаде тактовой частоты после записи этого значения в счётчик.
Если при очередном спаде такта достигается 0, значение счётчика сразу обновляется.
Если заносится нечётное значение, 0 и 1 на выходе имеют разную длину (на 1 такт).
На диаграммах указаны значения счётчика без младшего бита (стр.724 файла где сканы страниц).
Видимо для определения достигло ли значение счётчика минимального значения младший бит учитывается...
Не могу сообразить...
Получается так, если при очередном вычитании 2 из счётчика результат 0, то в счётчик заносится значение, которое в него записывали (может быть не чётным). А если получилось FFh (перенос - на единицу меньше 0-ля) то в счётчик заносится значение на 1 меньше чем записывали (чётный вариант значения - без младшего бита)...

Saar
27.02.2016, 16:43
KTSerg,
я не понял на какой вопрос ты отвечал ;)
Вроде ничего такого я не спрашивал.
По поводу значений я разобрался. В доке от Сименса написано, что читаемое значение всегда на шаг отстает от реального.
И вопрос был про то, что получается в этом отстающем значении при пограничных условиях (начало и конец).
Еще в доках от ОКИ написано, что значение 0 никогда не считывается. Что подразумевает, что счет останавливается на 1, при реальной остановке на 0.
Но у меня нет реального железа чтобы проверить это.

- - - Добавлено - - -

Если про 3 режим: то там оказалось всё проще. Если значение нечетное, то от него отнимается либо 1 (out=1) либо 3 (out=0), а далее по два до нуля.

KTSerg
27.02.2016, 16:52
...
Отсутствуют значения 01 и 05, при том, что остальные значения правильные.
А должны ли 01 и 05 присутсвовать, если GATE всегда 1? В этих режимах счет запускается фронтом GATE.
Значит на GATE приходят импульсы. Там кроме системного ресета ещё какой-то импульс через кондёр заведён...
Пока логгером посмотреть не могу.

Saar
27.02.2016, 17:17
возвращаясь к тесту, где у меня FFFF в 01 и 05 режиме.
Я не могу понять каким образом там получается A10B (на оригинале), когда как там заносится значение FFFF в счетчик и сразу же считывается. Как?? как он успевает дотикивать до A10B??

- - - Добавлено - - -


Там кроме системного ресета ещё какой-то импульс через кондёр заведён...
я посмотрел по схеме. Ничего там кроме ресета не заведено. Да и стремно было бы если на ресет какие-то импульсы приходили бы.

Но при всём при этом я не понимаю как там после заноса FFFF в счетчик и считыванием в следующей комманде получается A10B... Не успеет он так быстро дотикать.

- - - Добавлено - - -

b2m,
в чем секрет такой скорости в режимах 1 и 5?

KTSerg
27.02.2016, 17:43
Ты смотрел схему Вектора 02го ?
D65.06 -> D66.13

Saar
27.02.2016, 18:21
KTSerg,
хм.. у меня схемы все от первой версии.
где взять 02?

p.s. нашел

- - - Добавлено - - -

у меня плохая схема 02.. числа очень плохо видны :(

- - - Добавлено - - -

Тут даже если на gate что-то тикает (в чем я сильно сомневаюсь), получить A10B сразу после записи в счетчик просто невозможно!

KTSerg
27.02.2016, 18:24
Я немного подправил тест i8253.
В нём первоначально сразу после записи в счётчики считывались значения, потом ожидание двух прерываний и снова считывание (вторая пара).
Я исправил, что-бы считывал сразу два раза без прерываний.
Получилось, что во всех режимах разница между первой и второй парой одинакова, но счёт в режимах 1 и 5 начинается не с записанного FFFFh а с A111h !!!
Вот попробуй, когда запустятся 1й и 5й режимы, у меня на реале такой результат:
FFF9 00
FFD5
A10B 01
A0E7
FFF9 02
FFD5
FFF4 03
FFAC
FFF9 04
FFD5
A10B 05
A0E7
FFF9 06
FFD5
FFF4 07
FFAC

Saar
27.02.2016, 19:54
KTSerg,
у меня совпадает с твоими данными за исключением 1 и 5 режимов. В 1 и 5 у меня FFFF всегда, ибо в доках сказано что счет начинается только когда GATE переходит из состояния 0 в 1. Других данных у меня нет. Я даже не знаю что можно сделать.

А ты можешь еще исследовать 1 и 5? Например, замени в tst8253 режим на 1 или 5. Посмотри какие значения будут считываться.

Тут бы b2m помог. У него в EMU тесты как на реальном железе показывают.
Но он пока молчит...

- - - Добавлено - - -

о! наткнулся на тему про ви53.
там svofski пишет:
"Еще интересный момент, который не выкопаешь ни в какой доке. После первого теста в режиме "0" счетчик продолжает считать. Дальше тест программирует его на режим "1" и загружает в него значение $FFFF. Но, поскольку сигнал GATE в Векторе всегда "1", это число не переписывается во внутренний счетчик и счет продолжается как будто бы записи не было. Самое занятное в том, что операция установки режима в "1" все же останавливает счетчик, а загрузка значения, которое в него так никогда и не попадает, продолжает счет. "

Вот, это похоже на правду :)

- - - Добавлено - - -

Получается, что если Gate=1 то при переключении режима на 1, останавливает счет, а занесение любого значения в счетчик продолжает счет со старого значения. Типа, бага..
В доках, кстати, диаграммы рисуют варианты запуска режима 1(и 5) когда GATE=0 вначале, а потом переходит в 1.

- - - Добавлено - - -

в общем, сэмулировал я этот глюк.
Но вместо A10B у меня A109. И в десятичном тесте тоже на 2 меньше.
Где-то я не задерживаю достаточно.
Попробую отыскать эти 2 такта.

KTSerg
27.02.2016, 20:03
Да, скорее всего это так и есть.
Я уменьшил начальные значения счётчиков с FFFF на AAAA и все считанные значения уменьшились пропорционально, похоже что в 1 и 5 режимах новые значения действительно не записываются.
Посмотрел схему от простого Вектора, там GATE = системный сброс, просто вырабатывается. На схеме 02го там ещё чего-то дополнительно накручено... пытался разобраться... утонул в развилках...

- - - Добавлено - - -

Я логгером осматривал ВИ53ю может это поможет.
Дело в том, что сигнал CS длится 2 такта CLK.
Может счёт останавливается на нём?

- - - Добавлено - - -

Верхний график это CLK.
Ниже GATE.
Потом CS, RD, WR.

Saar
27.02.2016, 22:20
Дело в том, что сигнал CS длится 2 такта CLK.
Может счёт останавливается на нём?
не. Это чисто для разрешения работы с шиной данных. На счет CS не влияет.
Я один такт нашел. Остался еще один. Можно конечно и так оставить, ибо вряд ли это где-то используется.

Ramiros
27.02.2016, 23:47
Я один такт нашел. Остался еще один. Можно конечно и так оставить, ибо вряд ли это где-то используется.

Используется как минимум в деме Skynet для детекта эмулятора, в общем то дема все равно работает, но как бы намекает на то, что лучше ее на реале смотреть ))

b2m
27.02.2016, 23:53
Получается, что если Gate=1 то при переключении режима на 1, останавливает счет, а занесение любого значения в счетчик продолжает счет со старого значения. Типа, бага..
Не бага, а фича :)
Мы же вроде разобрались выше, что установка режима останавливает счёт, а загрузка делителя - разрешает. Вот только загружается не сам счётчик, а регистр, откуда в режимах отличных от 1 и 5, загружается счётчик (либо сразу после загрузки делителя, либо когда он доходит до нуля). Особенность режимов 1 и 5 в том, что счётчик загружается из регистра (куда загружен делитель) по фронту gate (т.е. аппаратный строб). До этого момента он просто продолжает считать дальше, даже когда дойдёт до нуля. А срабатывание таймера, а именно заём переноса при переходе через ноль, в этих режимах на выходе никак не отражается, пока не было строба запуска.

Т.е. схематично можно изобразить канал таймера как: [регистр делителя] -> [счётчик] -> [регистр latch]
Пишем мы в регистр делителя, а читаем из регистра latch.

KTSerg
28.02.2016, 05:36
Вспомнил блин - "в схеме 02го к системному сбросу ещё намешано", это схема автоматического системного сброса после загрузки программы... Т.е. пока ПЗУ подключена можно ещё и программно, через порт, системный сброс организовать...

Saar
28.02.2016, 08:01
Ramiros,
а эту демку можно без FDD запустить? Как вариант с квазидиска?

- - - Добавлено - - -


Не бага, а фича
это фича для всяких детекторов эмулятора.
А если с точки зрения полезности- то это бага. Счетчик в режимах 0,1,4,5 не останавливается в конце, как должно быть. Более того в режимах 1 и 5 счет возобновляется без строба GATE. То есть с точки зрения программной, использовать такой чип нельзя. Нельзя проконтроллировать был ли GATE строб, например. А так же нельзя проверить дотикал ли счетчик до 0.
Глюк на глюке...

b2m
28.02.2016, 11:56
А если с точки зрения полезности- то это бага. Счетчик в режимах 0,1,4,5 не останавливается в конце, как должно быть. Более того в режимах 1 и 5 счет возобновляется без строба GATE. То есть с точки зрения программной, использовать такой чип нельзя. Нельзя проконтроллировать был ли GATE строб, например. А так же нельзя проверить дотикал ли счетчик до 0.
Глюк на глюке...
С точки зрения полезности, режимы с аппаратным стробом вполне выполняют свою миссию: загружаем делитель, и после поступления строба на gate сигнал на выходе появится через заданное нами время. Больше от этих режимов ничего не требуется. В конце-концов, это таймер, а не счётчик. Чтение внутреннего значения счётчика - это просто фича, которая может пригодиться в некоторых случаях.

Ramiros
28.02.2016, 21:30
Ramiros,
а эту демку можно без FDD запустить? Как вариант с квазидиска?


Сомневаюсь, а как она в квазидиск попадет?

svofski
28.02.2016, 22:08
Точно нет. SkyNet пользуется квазидиском как расширением памяти и подгружает части с дискеты. Как вариант можно делать дамп памяти в эмуляторе когда загружена нужная часть, патчить запуск и заливать полученный препарат в свой эмулятор. С какими-то программами я так делал.

Saar
29.02.2016, 19:01
Буду думать на счет FDD. Слишком муторно его эмулировать из-за отсутствия стандартного ПЗУ.


svofski,
В какой момент сдвиг экрана прописывается в регистры? У меня в PDIZZY на начальной заставке экран сдвинут на пополам. Потом следующая заставка нормально. А когда игра начинается, то опять пополам экран.

- - - Добавлено - - -

фигня какая-то непонятная с этим PDIZZY.
На первой заставке и в самой игре игран сдвинут наполовину, и ничего не помогает. Пробовал прописывать сдвиг перед началом отображения непосредственно битов дисплея. Потом в момент приходя кадрового импульса. Потом в момент окончания кадрового импульса. Ничего не помогает.

- - - Добавлено - - -

Я так понял, что если я закину весь образ диска в SDRAM, то эмуляция ВГ93 сильно упростится. Можно взять модуль WD1793.v и сделать так чтобы просто читать SDRAM согласно CHS.

- - - Добавлено - - -

в PDIZZY непонятная фигня. Если нажать одну из курсорных кнопок, то изображение правильное. А при отпускании опять наполовину сдвигается.

- - - Добавлено - - -

судя по SignalTap, момент фиксации сдвига экрана должен быть в начале следующей строки после начала VSync. PDIZZY держит регистр сдвига примерно с 630 пиксела (всего 768) строки где начался VSync до примерно 320 пиксела следующей строки.
Правда, во время игры почему-то проскакивают кадры где регистр сдвига не выставляется и на экране мелькает сдвиг в этот момент.

Что ей не хватает?

- - - Добавлено - - -

нет.. я был не прав.. Я думал что FE это смещение, но оказалось что это часть опроса клавиатуры. После опроса клавиатуры выставляется 7F и держится весь кадр. После VSync прогоняется ноль по этому регистру последовательно (опрос клавы)и в конце опять 7F на весь кадр.
А ведь должно быть FF. Почему игра выставляет 7F??

- - - Добавлено - - -

разве что используется трюк с переключением выхода ВВ55 на вход и использованием резисторов подтяжки на 1.

- - - Добавлено - - -

Нет.. не используется этот трюк.. При опросе клавы режим 8A, а после - 88. Всё стандартно. При этом запись в порт 3 только при опросе клавиатуры.
Регистр сдвига просто не записывается никогда.... Что за бред?

Ramiros
29.02.2016, 20:30
регистр 03 он выбирает строку для сканирования клавиатуры, и в это же время задает смещение экрана (регистр двойного назначения), но т.к. опрос клавы всегда выполняется во время обратного хода луча, то безобразия с экраном не видно, а когда кадр уже рисуется лучем клавиатура уже прочитана.

Такие глюки чаще бывают, если 580ВВ55 эмулируется не полностью или с ошибками.

Saar
29.02.2016, 21:04
Ramiros,
учитывая что эмулятор у меня практически рабочий, то мне конечно же известна особенность двойного назначения этого порта.

Однако, это не объясняет почему PDIZZY не заносит смещение экрана после сканирования клавиатуры. Какие могут быть хитрости работы с регистром смещения? На ум приходит переключение порта 3 на ввод, что аналогично выводу FF в порт 3. Однако, это не так. Режим прописывается 88.
Я не понимаю как экран может быть в правильном положении если в порту торчит число 7F.

ivagor
29.02.2016, 21:23
0E24 mvi a,88h
0E26 out 0
в порте 3 остается 0

Saar
29.02.2016, 21:44
ivagor,
Установка режима сбрасывает порты в FF?

ivagor
29.02.2016, 21:53
Поленился смотреть даташит, цитата из
Щелкунов, Дианов "Микропроцессорные средства и системы", стр. 99
При записи нового управляющего слова все буферные регистры портов устанавливаются в 0

svofski
29.02.2016, 22:16
регистр 03 он выбирает строку для сканирования клавиатуры, и в это же время задает смещение экрана (регистр двойного назначения), но т.к. опрос клавы всегда выполняется во время обратного хода луча, то безобразия с экраном не видно, а когда кадр уже рисуется лучем клавиатура уже прочитана.

Такие глюки чаще бывают, если 580ВВ55 эмулируется не полностью или с ошибками.

Уточнение, этот регистр используется для задания скролла (начального значения счетчика строк) только в один момент (чтобы не соврать, не скажу когда именно). Когда развертка уже запущена, туда что ни пиши, на прокрутке это сказаться не может.

b2m
29.02.2016, 23:51
только в один момент (чтобы не соврать, не скажу когда именно)
У меня в эмуляторе этот момент совпадает с началом отображения верхней линии. Артефактов вроде не заметно. Но, как всегда, найдётся какой-нибудь ivagor, и сделает тест, запустив который получишь разные картинки на реале и в эмуляторе :)

svofski
01.03.2016, 02:59
У меня в эмуляторе этот момент совпадает с началом отображения верхней линии. Артефактов вроде не заметно. Но, как всегда, найдётся какой-нибудь ivagor, и сделает тест, запустив который получишь разные картинки на реале и в эмуляторе :)

Так, но у меня еще добавлена задержка
https://github.com/svofski/vector06cc/commit/66eade27b059ca99c8abd489d77eb53a74f2e1d5
почему я это сделал, хоть убей не могу вспомнить. Скорее всего это были не навороченные демки, а какая-то с виду безобидная программа, которая например слишком много времени проводила в обработчике прерывания и делала загрузку скролла в самом конце. Одна из таких зловредных программ, кстати, это Бейсик Корвет. Там как-то очень странно опрашивается клавиатура. Помню, что он долгое время у меня дергался экраном, пока я что-то не сделал. Может быть это оно и есть.

ivagor
01.03.2016, 06:43
найдётся какой-нибудь ivagor, и сделает тест, запустив который получишь разные картинки на реале и в эмуляторе
Таки да, нашелся, причем аж в 2009 (http://zx-pk.ru/showthread.php?t=11066&p=225110&viewfull=1#post225110). На данный момент в vv и v06cc все ОК, в emu разница на 4 такта.

Saar
01.03.2016, 11:59
У меня в эмуляторе этот момент совпадает с началом отображения верхней линии.
Имеется ввиду линия с битами, или линия бордюра?
Я пока сделал в начале отображения именно линии с битами.

Как вообще лучше называть часть экрана с битами для краткости? Экран, дисплей - это общее название включающее и бордюр...

- - - Добавлено - - -

ivagor,
я не понял что должно происходить на экране. Там говорится про какие-то скачки. У меня ничего не скачет и картинка идентична первой по вашему линку.
На emu от b2m та же самая картинка и ничего не скачет.

- - - Добавлено - - -

а... нашел кнопки управления в этом ребусе :)

у меня так же как в реале получается:
1й скачок - из 13 в 14
2й скачок - из 17 в 18

- - - Добавлено - - -

svofski,
Я видел эту конструкцию у вас. Выходило что запись происходит где-то в строке, когда уже выводятся биты. Мне показалось это странным.

- - - Добавлено - - -

svofski, b2m
наверное вопрос к вам. По поводу FDD.
Какой размер сектора используется в Векторе? Наверное, стоит уточнить: какой размер сектора используется в имиджах FDD?
Есть ли у FDD файла заголовок и где взять описание если заголовок имеется?

svofski
01.03.2016, 12:06
Я потому и не советую. Когда я делал свой Вектор, информации было очень мало, все приходилось собирать по крупицам. Не было ни тестов, ни реала, эмуляторы тогда были все только глючные. Даже схем было не найти. Поэтому у меня залипло много артефактов, результатов поиска на ощупь. Эта задержка как и та, что в прерывании, странная и может быть их вместе можно сократить одну с другой.

Хорошо бы иметь настоящий большой тест, в котором собрано все вместе. Тогда можно было бы быстро проверять, сломал чего-то, или нет. А так это минное поле.

- - - Добавлено - - -

Про флоп:
https://github.com/svofski/vector06cc/tree/projects/firmware/floppysrc
fddimage.h описывает заголовок
fddimage.c собственно
config.h определяет в частности размер сектора. Вроде бы он мог быть разным, но фактически образы fdd все 1024.

Saar
01.03.2016, 12:47
fddimage.h описывает заголовок
это заголовок вашей внутренней структуры, а не файла.
Судя по коду, у FDD нет заголовка, а конфигурация фиксированная:


#define FDD_SECTOR_SIZE 1024U
#define FDD_NSIDES 2U
#define FDD_NSECTORS 5U
#define SECTOR_SIZE_CODE 3U // 0 = 128, 1 = 256, 2 = 512, 3 = 1024

а количество трэков вычисляется делением длины файла на длину трэка в байтах.

Еще вопрос возник:
а нужно эмулировать задержки готовности позиционирования на трэк и времени поиска сектора?
Просто я планирую работать с образом, который целиком в SDRAM. Естетсвенно, задержек тут быть не может.
А вот как программы на это будут реагировать?
Еще думаю сделать чтение данных сектора в ритме как читает их прога в Векторе. То есть без потери данных если не успела.

svofski
01.03.2016, 13:11
А, ну да. Сам файл вообще просто данные сплошным потоком. Задержки вроде не должны быть важны, у дисковода они тоже не жесткие.

Saar
01.03.2016, 13:25
svofski,


uint32_t offset = FDD_NSIDES*fdd->cur_track + (1-fdd->cur_side);

сначала в файле идет side=1 а потом side=0?


offset += fdd->cur_sector - 1;

нумерация секторов с 1?

вообще расположение данных в FDD имидже получается так:
байты 0-1023
сектора 1-5
стороны 1-0 (наверное 1-2?)
Трэки 0-(сколько влезет)

правильно?

svofski
01.03.2016, 14:45
Saar, мне сейчас ответить на этот вопрос не проще, чем случайному прохожему с улицы =)
Но вроде все сходится.

Ramiros
01.03.2016, 15:43
задержки важны, иначе куча прог не заработает

Saar
01.03.2016, 17:31
svofski,
в wd1793.v выключена поддержка мультисекторного чтения/записи. Оно нигде в Векторе не используется?

- - - Добавлено - - -

Ramiros,
понятно.. Но я пока без задержек сделаю чтобы просто концепт отладить. Потом добавлю задержки.

- - - Добавлено - - -

нет ли каких тестов контролера дисков?
Что-нить ввиде ROM, который читает что-то посекторно и всякие биты готовности опрашивает?

svofski
01.03.2016, 17:47
Ответ про мультисекторность дать невозможно. Наверное мне не попадалось. Может быть там есть какие-то проблемы с этим связанные, может быть просто почему-то не практично.

Про тесты дисковода не слышал. Но если загрузчик долетел до конца, значит уже почти все работает. Он читает что-то посекторно и биты готовности опрашивает. Для отладки я печатал в последовательный порт.

Saar
01.03.2016, 20:18
svofski,
zagr512.hex поддерживает загрузку с FDD?
Там должно быть изображение дискеты если ВГ93 правильно работает?

- - - Добавлено - - -

svofski,
На вашем эмуляторе SkyNET демка работает?

svofski
01.03.2016, 21:04
Да.
Да.
Да.

Saar
02.03.2016, 15:09
Блин... нужна дисковая утилита, которая позволяет читать заданный сектор на диске и выводить его дамп на экран.

Вроде частично заработало, но не могу понять проблему. Даже SkyNET запускается, но до первого обращения к диску. Потм ошибки сыпятся.
У меня нет возможности выводить лог в UART. Есть возможность смотреть только в SignalTap, но его недостаточно.

А вот утилита типа какого-то редактора диска очень помогла бы. Только естественно ее загрузить смогу либо из ROM либо из EDD.

- - - Добавлено - - -

Удалось пофиксить одну из проблем. Теперь микродос из EDD не выдает ошибки при запуске. Читает каталог и запускает проги.

SkyNET всё так же выдает "отсутсвует файл TDEMO1.SN0".

Ramiros, Судя по автаре, вы - один из создателей Skynet демки? В чем там загвоздка в поиске этого файла?

- - - Добавлено - - -

вот ошибка:
56242
T - это наверное трэк. S - сектор.
O - номер ошибки? Что такое 46 ошибка?
ST - ???

Странно что на 0 дорожке 1 сектора какая-то ошибка. Не думаю, что диск загрузился бы если бы там была ошибка...

svofski
02.03.2016, 15:09
Saar, поздравляю! Это уже очень много.

Хорошо бы иметь возможность посмотреть на тот кусок кода, который грузит TDEMO1.SN0. Скорее всего эмулятор слишком быстро выставляет бит готовности операции, а там цикл ожидания завершения написан в расчете на то, что начальное состояние "не готов".

Saar
02.03.2016, 15:36
svofski,
наверное, проще сначала ошибку МикроДОС пофиксить. Может тогда и SkyNet заработает.
Вы расшифровать текст ошибки со скрина можете?

- - - Добавлено - - -

эх... утилиту бы для чтения посекторного...

Ramiros
02.03.2016, 15:53
Ramiros, Судя по автаре, вы - один из создателей Skynet демки? В чем там загвоздка в поиске этого файла?


К сожалению я не имею отношения к созданию этой демы, а на аватаре она только потому, что она мне больше всех понравилась :)

KTSerg
02.03.2016, 17:37
...Странно что на 0 дорожке 1 сектора какая-то ошибка. Не думаю, что диск загрузился бы если бы там была ошибка...
Это ошибка на квазидиске (диск С), скорее всего контрольные суммы не совпадают, других ошибок на квазидиске наверное и нет...
А с "дисковода" не грузится?
Вместо утилитки, может кусок загрузчика использовать? Там думаю простое посекторное чтение дискеты, как раз будет понятно, нужны ли задержки в ожидании готовности.
Кстати что-то про готовность я вспоминаю, что некоторые программы очень критично к этому делу относились, а некоторым было фиолетово... что-то было такое, когда низкоуровневое чтение/запись дискет изучал для создания защиты от копирования файлов...

Saar
02.03.2016, 18:32
Это ошибка на квазидиске (диск С), скорее всего контрольные суммы не совпадают, других ошибок на квазидиске наверное и нет...
А с "дисковода" не грузится?
это ошибка дисковода. Загрузился я как раз с дисковода.
На счет задержек маловерятно. Не думаю что МикроДОС будет извращаться с задержками. Тем более он же загрузился как-то... Что-то я упускаю...

- - - Добавлено - - -


диск С
Диск А.

KTSerg
02.03.2016, 18:48
Диск А.
???
Где на твоём скрине?
"BDOS ERROR ON C: DISK ERROR"

Или я не туда смотрю???

Кстати, ты квазидиск форматируешь когда первый раз после включения ось грузишь?

Извиняюсь, на счёт "ты" надеюсь без обид?

Saar
02.03.2016, 20:48
Извиняюсь, на счёт "ты" надеюсь без обид?
мне всё равно. Я могу и на ты. Просто знаю что не все это любят ;)


"BDOS ERROR ON C: DISK ERROR"
черт.. слона я и не приметил. Вообще, я гружусь с диска А.
А квазидиск есть, но он естественно не форматирован.

Как его отформатировать?
А вообще, еще интересует как очистить квазидиск если в него что-то загружено? Может какую-то кнопку держать в момент загрузки?
У меня не было Вектора, поэтому всяких простых вещей я не знаю..

- - - Добавлено - - -

загрузил EDD с микродос в квазидиск.
Ошибка ушла! Правда, сама игра не запускается. Показывает пару заставок и опять сначала начинается..

Но SkyNET и с квазидиском не запускается..

- - - Добавлено - - -

О! нашел одну проблему - забыл про команду READ ADDRESS.

- - - Добавлено - - -

УРА! Заработала Skynet!

b2m
02.03.2016, 21:02
УРА! Заработала Skynet!
Поздравляю! А до какого места доходит, прежде чем зависнуть? :)

Saar
02.03.2016, 21:22
Вопросы по работе с квазидиском еще актуальны. Очень хочется узнать как форматировать квазидиск и очищать (чтобы была возможность грузиться с FDD).

- - - Добавлено - - -

b2m,
Дык, уже не виснет. Вся демка до конца проиграла.

- - - Добавлено - - -

звук в Skynet какой-то перегруженный. В других прогах AY нормально звучит.

KTSerg
02.03.2016, 21:51
Вопросы по работе с квазидиском еще актуальны. Очень хочется узнать как форматировать квазидиск и очищать (чтобы была возможность грузиться с FDD).
...
Загрузчик сначала опрашивает клаву, вот например последовательность обработки из заводского загрузчика
=================
читать код клавиши
клавиша F1
переход на кассету
клавиша F2
переход на ППЗУ и кассету
клавиши F1 и F2
переход на дисковод
проверка наличия квазидиска
переход на квазидиск
проверка локальной сети
переход на адаптер локальной сети
проверка наличия дисковода
переход на дискету
...
======================
Если взять обычный случай, при наличии ОСи в квазидиске, будет грузиться с него.
Если при этом нажать Ф1 будет ждать с магнитофона.
Если нажаты Ф1 и Ф2 то загрузка с дисковода (при наличии контроллера, иначе дальше по приоритету).

Когда стартует ОСь нужно нажать "УС" - это заставит ОСЬ отформатировать квазидиск.
Первой командой должна быть запись ОСи на квазидиск (если она там нужна, что-бы не грузиться с дискеты).
Поскольку загрузчик не интеллектуален, то ОСь должна быть записана на квазидиск физически первой, если сначала записать что-то другое, а потом ОСь - загрузчик её не увидит.
Команда стандартная, но её параметры зависят от размера файла ОСи, (типа 1 45 os.com или 1 48 os.com).

- - - Добавлено - - -

Нашел описание к одному из загрузчиков, выдержка:
===
3.3. Режимы работы (задаются при перезагрузке путем удержания клавиш):
КЛАВИША РЕЖИМ
нет - квазидиск
F1 - магнитофон
F2 - МППЗУ
F1+F2 - дисковод
F2+F3 - жесткий диск
F1+F3 - сетевой адаптер
AP2 - загрузка из РС через порты ПУ-LPT

Если для загрузки выбрано неподключенное устройство, загрузка будет
производиться со следующего подключенного устройства согласно приоритету.

Удерживание клавиши УС при перезагрузке отменяет очистку ОЗУ (кроме
экранной области c адресами 0C000H-0DFFFH).
======
Т.е. если УС нажата при старте самого загрузчика, он не очистит память компа (кроме экрана для загрузочной сетки).
А если УС нажата после загрузки в память ОСи и при её старте, то форматируется квазидиск.

Saar
02.03.2016, 23:32
Переделал ресет чтобы на клаву не действовал. Теперь есть возможность использовать все эти комбинации кнопок при ресете.

svofski
02.03.2016, 23:34
УРА! Заработала Skynet!
Принимай поздравления! И что, даже портрет домашнего доктора обводится кружком без проблем и пиксель поперек Sunami не вылезает? =)


Не думаю что МикроДОС будет извращаться с задержками.
Это не извращение с задержкой. То есть, это не вычисление временного интервала. Просто в начале цикла, который ждет окончания выполнения операции, берется значение регистра в расчете, что оно будет одним ("не готово"), а оно оказывается "готово". Сколько то раз цикл крутится, регистр не обновляется и принимается решение, что все сломалось. Я точно сталкивался с этим где-то, но где именно, не могу уже вспомнить. Ну, раз нет такой проблемы так и прекрасно.

Saar
03.03.2016, 00:10
Эмуляцию жесткого диска я делать точно не буду :)
Можно еще подумать о полноценной поддержке дисков, чтобы можно было писать на них. Но это потом.
Надо теперь поближе познакомиться с играми и демками для Вектора.

- - - Добавлено - - -


И что, даже портрет домашнего доктора обводится кружком без проблем
угу. вроде выглядет как надо.


и пиксель поперек Sunami не вылезает? =)
а это где?

И что там за некролог такой. Реально все померли или какой прикол?


Просто в начале цикла, который ждет окончания выполнения операции, берется значение регистра в расчете, что оно будет одним ("не готово"), а оно оказывается "готово".
Это я в курсе. Поэтому у меня имеются задержки на перемещение головки. И следовал вашим комментариям в wd1793.v :) Погоняю на разных играх - там видно будет.

- - - Добавлено - - -

А что за формат у некоторых приложений такой?
Вот у Lyra-II: файл lyra-ii.com (ну это понятно, просто rom) и еще непонятный lyra-ii.ovr - куда его пихать?

svofski
03.03.2016, 00:36
а это где?
Там же в сцене с групповым портретом, первый зловещий симптом, как я помню — это съехавший пиксель, или целая группа, на лице Sunami. Потом, когда рисуется пентиумный кружок, все зависало с гудением из AY. Мы это выуживали всей гурьбою на протяжении очень долгого времени. Мне с DE1 было тяжелее всех, потому что ускорения не было, а выжидание этого момента с некоторых пор стало чуть менее захватывающим, чем на это расчитывали авторы SkyNet. По-моему там было сразу несколько причин. Какие-то из них были связаны с флагами в некоторых инструкциях, какие-то с формированием сигнала STACK.


И что там за некролог такой. Реально все померли или какой прикол?
Это потому что SkyNet, Терминатор и все такое. Но вообще ни с одним из авторов связаться по-моему так и не получилось. Из Векторовских авторов той эпохи я смог связаться только с S.E.S. и какие-то из его работ нашлись благодаря его сотрудничеству.


И следовал вашим комментариям в wd1793.v
Я рад, что все это кому-то пригодилось. И мне тоже удобней на ты ;)

KTSerg
03.03.2016, 05:44
Эмуляцию жесткого диска я делать точно не буду :)
Хотя схема там элементарная, несколько микросхем рассыпухи и можно подключать старый винт или CF-карту через IDE-CF переходник.
Но мне показалось, что софт сыроват, не удобно пользоваться и тёрлись "дискеты" пару раз...


А что за формат у некоторых приложений такой?
Вот у Lyra-II: файл lyra-ii.com (ну это понятно, просто rom) и еще непонятный lyra-ii.ovr - куда его пихать?
Это файл подкачки видимо, для самой игрушки. Ось с таким расширением ничего не делает, вроде.
Глянь диски с Паскалем или Си, ещё больше всяких расширений увидишь. :)

- - - Добавлено - - -


...
Это не извращение с задержкой. То есть, это не вычисление временного интервала. Просто в начале цикла, который ждет окончания выполнения операции, берется значение регистра в расчете, что оно будет одним ("не готово"), а оно оказывается "готово". Сколько то раз цикл крутится, регистр не обновляется и принимается решение, что все сломалось. ...
Во, во, во что-то именно подобное, программа не проверяла на конкретное состояние (готов) флагов контроллера, а просто запоминала "первоначальное" и в цикле считывая ждала, что он (регистр состояния) изменится... а потом происходил анализ изменений флагов...

Saar
03.03.2016, 13:45
И мне тоже удобней на ты
Ок. Договорились :)


По-моему там было сразу несколько причин. Какие-то из них были связаны с флагами в некоторых инструкциях, какие-то с формированием сигнала STACK.
Но у меня же модель от Vslav, созданная по реальному железу в отличие от Т80, созданного по функциональному описанию.
В общем, та сцена, на мой взгляд выглядит идеально.

В принципе мой проект готов к релизу на гитхабе. Надо код немного отрихтовать. Подумать о подключении Z80.


Ось с таким расширением ничего не делает, вроде.
Глянь диски с Паскалем или Си, ещё больше всяких расширений увидишь.
Дык, почему тогда из этого FDD не сделали. Я так понимаю, без диска это не загрузить. Интересно, есть ли утилиты для PC для создания FDD из россыпи таких файлов?



Хотя схема там элементарная, несколько микросхем рассыпухи и можно подключать старый винт или CF-карту через IDE-CF переходник.
Но мне показалось, что софт сыроват, не удобно пользоваться и тёрлись "дискеты" пару раз...
Эмуляция HDD, на мой взгляд, однозначно требует поддержку записи на него. А это в основном нужно когда предполагается активная работа на Векторе. Я же рассматриваю Вектор только с точки зрения проигрывания существующих игр и демок, поэтому HDD с записью выглядит лишне тут.
Кстати, а делал ли кто большой виртуальный МППЗУ со сборником лучших игр, утилит и т.д.? В принципе, МППЗУ можно сделать неограниченного размера.

- - - Добавлено - - -

МикроДОС - это вообще атас полный если судить по формату диска. И почему никто не сделал нормальную ДОС для Вектора? Вон для БК несколько было сделаных. И я свою ДОС сделал для БК, которая с винтом замечательно работала.

- - - Добавлено - - -

svofski,
твой T8080 будет работать в режиме Z80 если Mode := 0?
Думаю использовать твою переделку T80, раз уж ты там все сигналы сделал совместимыми с ВМ80.

- - - Добавлено - - -

Не.. не работает что-то T8080... Не любитель я этих "иголочных" нестандартных сигналов. Надо мучить, вероятно T80a модель и переделывать под сигналы ВМ80.

ivagor
03.03.2016, 14:18
В v06cc svofski кроме штатного t80 в режиме 8080 работали:
1. Проц Vslava. Реализовал не все режимы (очень медленный, пошаговый), но основной и турбо работали
2. Проц b2mа. В связи с отсутствием некоторых сигналов торможение было не совсем точным, но это был первый проц, с которым мне удалось запустить sdram
3. t80 в режиме z80. Ничего не менял, только mode. Проверил одну или две свои конверсии под z80, они работали

- - - Добавлено - - -

Еще пара слов про взаимодействие с fdd при использовании разных процов
1. С вариантом Vslavа проблем не было
2. Вариант b2m не работал с эмуляцией fdd svofski на de1, что-то там с задержками при доступе к памяти, но работал на de2-115 при организации прозрачного доступа к озу
3. Насчет t80 в режиме z80 не помню, возможно я его пробовал только с экспериментальным гибридом v06cc svofskи с xsd b2mа

Saar
03.03.2016, 14:35
для Z80 стандартный 2кб загрузчик подходит?

ivagor
03.03.2016, 14:42
В основном да, но будет проблема с загрузкой с ленты

Saar
03.03.2016, 17:01
это как раз не проблема, ибо нет у меня загрузки с ленты :)

KTSerg
03.03.2016, 17:17
... Интересно, есть ли утилиты для PC для создания FDD из россыпи таких файлов? ...

Ну дык, плагин для Far-a с образами дискет работает http://asdasd.rpg.fi/~svo/scalar/ware/810/.
На этом форуме (в ветке спектрума) универсальный образочитатель делали, вроде спрашивали про форматы образов Вектора, может уже и добавили...

Saar
04.03.2016, 00:49
Не получается прикрутить 2 процессора. Компилируется криво. Видимо по таймингам не проходит. А как правильно тайминги расписывать - я так и не научился... :(

- - - Добавлено - - -

Вопрос про ВВ55 возник. Не могу найти ответ в доке.
Что читается из порта включенного на вывод? То, что записал туда?

То есть, Порт А запрограммирован на выход и записано, скажем число 55. При чтении порта А прочитается 55, 00 или FF?

Ramiros
04.03.2016, 07:25
Насколько я помню, да, читается то что записано в порт, это относится к чипам с буквой А. на первых ревизиях (без А) говорят что не читается, вернее читаются 00.

Saar
04.03.2016, 12:36
Спросил это потому что в Болдердаше (тот что с БК содран) не было скроллинга пока я не сделал чтение записанного значения.

- - - Добавлено - - -

svofski, ivagor,
есть ли какой-то простой способ объявления global clock в Quartus II?
Например, есть некий сигнал clk. Как его объявить правильно как global clock если не вдаваться в подробности. А то я почитал про это - там тьма-таракань вплоть до перечисления что он должен связывать. Поэтому хочется какую-то простую универсальную форму объявления клоков для SDC файла. В идеале с wildcart. Типа *clk* - чтобы автоматом объявлялись все клоки.

svofski
04.03.2016, 12:55
В assignment editor-e атрибут GLOBAL CLOCK. В .qsf файле это записывается так:

set_instance_assignment -name GLOBAL_SIGNAL "GLOBAL CLOCK" -to "clockster:clockmaker|clk30"

Saar
04.03.2016, 19:05
svofski,
а если этот clk30 уходит в другой модуль, то нужно еще одну строку писать с точным именем сигнала?

- - - Добавлено - - -

столкнулся с глюком интересным. Если я подключаю КНГМД, то демка MCOLOR перестает работать. При запуске бесконечно мигает начальный экран демки.
Отключаю регистры КНГМД - демка работает.

svofski
04.03.2016, 22:20
Сигнал по источнику определяется, он всегда один. Все остальное — это просто провода. Глобалклоки разводятся по приоритетной шине.

Black Cat / Era CG
05.03.2016, 01:09
Интересно, есть ли утилиты для PC для создания FDD из россыпи таких файлов?
Есть моя, та, ссылка на которую у меня в подписи. Однако, так как особого желания поддержки Вектора общественность не выразила, поддержка достаточно крива. Сейчас специально проверил на последней релиженной версии, с дисками от Вектора утилита вроде работает, НО:
- на баги никто не проверял, поэтому заранее извиняюсь.
- есть небольшая тонкость: для того чтобы утила поняла образ, его расширение надо поменять либо на kdi, либо на odi (у обоих этих форматов инфа о строении диска, как и у Вектора хранится в самом начале диска). Так же нет возможности создать новый образ, но всегда можно открыть готовый, удалить оттуда файлы и накидать других.
Возможно, в скором времени зарелижу последнюю версию (она пока есть у пары человек) и можно заняться Вектором плотнее, если, конечно, нужно.

Saar
05.03.2016, 17:15
С помощью FAR плагина записал файлы b-ice (на диск lyra2md - там много свободного места). Запускаю b-ice - пишет no fdd!
почему так?

- - - Добавлено - - -

Запустил! Демка при старте запихивает 00 в данные FDC и при чтении ожидает получить 00. Потом то же самое с FF.
С цветными полосами имеются проблемы. Буду думать как исправить.

- - - Добавлено - - -

Не могу понять причину расхождения.

в BORD.ROM тесте у мня правильное отображение черного отрезка (от середины 6 до середины F).
А вот в 256 цветном тесте и в b-ice мультиколорный эффект сдвинут примерно на 8 точек (если в 256х256) вправо.
Как так может быть?
Я могу подвинуть INT и в b-ice эффект будет на месте, но тогда в bord.rom отрезок тоже сдвинется и будет уже неправильно отображаться.

- - - Добавлено - - -

вот так в b-ice:
56282

в bord.rom идентично реальному Вектору.

- - - Добавлено - - -

Если только информационная часть экрана задержана на байт когда как бордюр выводится без задержки.
Проверял ли кто какова разрешающая способность Вектора в изменении цвета на информационной части экрана и на бордюре?

Ramiros
05.03.2016, 17:56
Все мультиколорные проги выходят из HALT по прерыванию и дальше до вывода нужных цветов идет тупо отсчет тактов. Каждая команда всегда выполняется за определенное число такотв. Судя по твоей картинке у тебя где то лишние 4 такта натикали, ищи команду, которая лишние такты съела.

Saar
05.03.2016, 21:27
Ramiros,
У меня подозрение что дело не в командах. Тем более я сильно сомневаюсь что модель процессора от Vslav добавляет какие-то такты. Там если саму модель глянуть, видно что на реверсе построено.
А потом, если бы какая команда неправильно работала, то это вылезло бы более серьезно где-то. А у меня получается так что именно внутри информационной части экрана есть общий сдвиг относительно бордюра. При этом и b-ice и 256-color выводятся корректно если не обращать внимание на этот горизонтальный сдвиг.
Думаю, где-то я упускаю регистр задержки.
А еще возможно цвет бордюра через регистр задержки/квантования проходит. Это как у меня в спектруме было: я сначала сделал реакцию бордюра в любой момент на изменение, а оказалось что изменение фиксируется лишь каждый 8-й такт. Вот и тут есть подозрение что реакция бордюра не мгновенная.

- - - Добавлено - - -

вот, уже вырисовывается то, о чем я говорил.
По схеме индекс цвета бордюра приходит на сдвиговые регистры и на выходе появляется через 8 тактов. Как раз те, что нехватает.
Похоже, в bord.rom преключаются не значение цвета(было бы изменение мгновенное), а его индекс (изменение через 8 пикселей).

- - - Добавлено - - -

Регистр скролла по всей видимости записывается в счетчик за 8 тактов (пикселей) до его реального использования.

svofski
06.03.2016, 14:35
Saar, бобро пожаловать в наш клуб. Теперь ты тоде знаешь, что в Векторе все не так просто, как может показаться на первый взгляд ;)

Saar
06.03.2016, 19:50
Не могу понять что демке mcolor не нравится в моем FDC. Причем тут вообще регистр FDC - непонятно..

- - - Добавлено - - -

конкретно порт 0x19 почему-то не нравится демке.

KTSerg
06.03.2016, 20:42
Не могу понять что демке mcolor не нравится в моем FDC. Причем тут вообще регистр FDC - непонятно..
конкретно порт 0x19 почему-то не нравится демке.
Может внимательнее посмотреть на дешифратор этого адреса, может он срабатывает ещё и на другие адреса или обращение к памяти... ну что-то в этом духе...

Saar
07.03.2016, 00:26
Короче, картина немного другая вырисовывается:
Поменял загрузчик на 512 байтный, который не умеет грузиться с FDC. И демка стала работать.
Но от этого яснее не стало.

Как загрузчик может влиять на дальнейшую работу программы?
Может я что-то упускаю при инициализации?

- - - Добавлено - - -

блин... ерунда какая-то..
После некоторых игр демка запускается даже при включенном FDC (в моем эмуляторе можно загрузить и запустить ROM во время работы без выхода в ПЗУ загрузчика).
Где-то что-то не ресетится правильно. Но при этом я не могу понять каким образом FDC влияет на прогу, его не использующую. У FDC нет DMA и он никак не вмешивается в работу если не опрашивать его регистры и не записывать в них...
При этом другие программы работают...

svofski
07.03.2016, 01:11
Не исключено, что M/COLOR просто читает из этого порта, думая, что там будет $FF.

Saar
07.03.2016, 12:34
Я думаю, что проблема в другом. Я экспериментально выяснил, что для загрузчика достаточно только запись и чтение регистра сектора (0x19) чтобы определить наличие FDC и вывести изображение дискеты.
Думаю, это активирует какие-то настройки в других устройствах, которые и воздействуют на демку. Думал, что может быть таймер - но его полное отключение не изменило ситуацию. То, что с 512 байтным загрузчиком без поддержки FDC (с с его наличием) не создает проблемы mcolor - как бы указывает что FDC не является непосредственной причиной а лишь триггером каких-то скрытых изменений.
Значит надо копать загрузчик и смотреть что там происходит при наличии FDC.
Нет ли где дизассемблированного с комментариями стандартного 2КБ загрузчика?

ivagor
07.03.2016, 12:41
Базовый 512 с исходником (http://asdasd.rpg.fi/~svo/scalar/ware/544/), базовый 2048 с исходником (http://asdasd.rpg.fi/~svo/scalar/ware/545/)

Saar
07.03.2016, 12:43
Кстати, помнится я высказывал предположение, что загрузчик прописывает JMP 100 в нулевой адрес, но было высказано сомнение в этом.


seg000:02B8 ld a, 0C3h
seg000:02BA ld (sub_0), a
seg000:02BD ld hl, 100h
seg000:02C0 ld (sub_0+1), hl

KTSerg
07.03.2016, 13:11
Кстати, помнится я высказывал предположение, что загрузчик прописывает JMP 100 в нулевой адрес, но было высказано сомнение в этом. ...

Зачем Тимошенко Александр (aka TIMSoft) это сделал не совсем понятно, поскольку это не совсем корректно.
Он предположил, сто Ось всегда будет грузиться с адреса 100h, но это не совсем так.
Утилита записи на системные дорожки даёт возможность указать начальный адрес загружаемой программы, и он может быть любой (с шагом 100h) и этот адрес записывается в служебную область дискеты. Нормальный загрузчик читает эти данные и использует их по назначению.
Соответственно установка в "нулевой" адрес команды перехода, в общем случае лишняя примочка, и указывает на НЕ универсальность данного загрузчика с дискеты.

ivagor
07.03.2016, 13:21
Насколько я понимаю, автор 512 - Темиразов, 2048 - Соколов и Темиразов. Tim0xA дизассемблировал 2048, а 512 вероятно дизасмил Михаил Таланов

KTSerg
07.03.2016, 13:48
Вот блин, а я мучился не мог понять, почему в эмуляторах с образа дискеты ОСь не грузится с нулевого адреса...
Когда я это указываю в образе дискеты.
А в них используется загрузчик 32К с аналогичными "заглушками"... :(
Saar, спасибо за инфу, буду знать/учитывать...

Saar
07.03.2016, 15:19
правильно ли я понимаю, что если дискеты нет в дисководе, то загрузчик зацикливается в этом месте?


RAM:043F ld a, (word_DED0)
RAM:0442 out (1Ch), a
RAM:0444 in a, (1Bh)
RAM:0446 rlca
RAM:0447 ret nc
RAM:0448 jp sub_43F


- - - Добавлено - - -

KTSerg,
тот кусок был из другого загрузчика (zagr512), из эмулятора svofski. Он по внутренностям отличается от того что дал ivagor в котором нет данной конструкции.

- - - Добавлено - - -

Охренеть! Проблема в PPI2 (USER PPI). Если загрузчик находит FDC то он не инициализирует PPI2 и mdemo глючит. Если FDC загрузчик не находит (или держать F2) то PPI2 инициализируется и mdemo работает.
Вот как в той истории "корова пёрнула - рога отвалились". Причем тут PPI2 - непонятно.

KTSerg
07.03.2016, 16:01
Действительно "зацикливается".
А кто такой PPI2 ???

Saar
07.03.2016, 16:23
А кто такой PPI2 ???
Вторая К580ВВ55А на портах 04-07. Та, что для всяких расширений.

- - - Добавлено - - -

Слишком много источников звука у Вектора получается. 4 бипера + AY.
Не хотелось бы жертвовать общей громкостью из-за резервирования старших битов под сумму.
Хочу сделать так:
если у каналов ВИ53 включен не 3 режим или таймер остановлен, то выходы ВИ53 не суммируются в общем звуке. Это даст более высокую громкость AY.

Кто как думает? Разумно предположить что если у ВИ53 не 3 режим, то звук не генерится? Вроде иголки длительностью 700нс (во всех режимах кроме 3) не должны быть слышны.

KTSerg
07.03.2016, 16:27
На первых Вектор-ах стояли реле, для управления магнитофоном. Это реле то-же пробовали использовать для "басов" :)

ivagor
07.03.2016, 16:42
если у ВИ53 не 3 режим, то звук не генерится?
Я использовал режим 0 для организации 2х битного ЦАПа и для ШИМа (большая часть примеров выложена на форуме). В v06cc этот режим толком не поддержан

Saar
07.03.2016, 17:52
Я использовал режим 0 для организации 2х битного ЦАПа и для ШИМа (большая часть примеров выложена на форуме). В v06cc этот режим толком не поддержан
у меня своя реализация ВИ53. Дайте ссылки на ваши примеры - я попробую.

ivagor
07.03.2016, 18:15
5 уровневый ЦАП 56312, запись с реала (http://zx-pk.ru/showthread.php?t=20691&p=570014&viewfull=1#post570014)
ШИМы на ВИ53 тут (http://zx-pk.ru/showthread.php?t=11029&p=838558&viewfull=1#post838558) и дальше по ветке, записей с реала нет.

- - - Добавлено - - -

и я тоже не против на ты

Saar
07.03.2016, 18:37
ivagor,
работают все примеры твои.
woMail - громко, но грязновато.
скаченные из указанной темы тоже работают. Тихо, но довольно чисто. Один из них свистит, но, как я понял, так было задумано.

ivagor
07.03.2016, 18:54
Интересно будет попробовать, когда доделаешь и (если) выложишь исходник

Saar
07.03.2016, 19:08
Конечно выложу. Я все свои FPGA проекты на github выкладываю.

- - - Добавлено - - -

Хочу в качестве вишенки вставить расширенный загрузчик на 32кб и можно выкладывать. Вроде все детские болезни пофиксил.
Думал сделать поддержку МППЗУ, но так и не нашел хороший сборник как это сделано на Апогее.

ivagor
07.03.2016, 20:50
В одной из версий для de1-soc я добавлял к v06cc загрузчик на 32 и простое (кишиневское) внешнее пзу. Это довольно удобно, если нужно постоянно грузить одну программу (и плисина с большой памятью или приделан лоадер с sd). А сложное (омское) внешнее пзу вроде так никто и не сэмулировал

Saar
07.03.2016, 21:03
А у меня внезапно вопрос возник: чтение из квазидиска через стэк доступно в тех адресах что ПЗУ лежит когда загрузчик активен?


А сложное (омское) внешнее пзу вроде так никто и не сэмулировал
да ну, что там сложного? Только какой смысл делать, если нет больших наборов отобранных программ ввиде ПЗУ?
Там 3 или 4 примера ПЗУ на 64кб каждое и всё. Нет никакого смысла. Проще уж на дискету накидать на 900кб.

ivagor
07.03.2016, 21:15
Насчет доступа к квазидиску при подключении пзу 32 - помню, что пришлось что-то доделать в квазидиске, причем сначала я примерно про это же прочитал пост Syntalа про combodevice, только сейчас я забыл, в чем там была проблема.

"Простое"/"сложное" пзу - это я условно, а никто не сэмулировал скорее всего потому, что никому не надо.

В качестве хранилища игрушек имхо хорошо подошел бы образ винта, но дос под hdd не такой удобный, как хотелось бы

- - - Добавлено - - -

Нашел ссылку на тот пост (http://zx-pk.ru/showthread.php?t=8635&p=699930&viewfull=1#post699930) про КД и пзу32

KTSerg
07.03.2016, 21:30
Конечно выложу. ... Вроде все детские болезни пофиксил. ...
А как дела с конфликтом между PPI2 и контроллером дисковода?

Saar
07.03.2016, 22:48
ivagor,
я вспомнил что проблема с квазидиском может возникнуть если забыть про стэковый доступ.
Это хорошо что я вспомнил, поскольку эта же проблема есть при любом размере ПЗУ. даже с 512. А я как-то упустил это. И только при 32кб вспомнил.


А как дела с конфликтом между PPI2 и контроллером дисковода?
Конфликта между FDC и PPI2 не было. Был глюк в демке mcolor, которая, видимо что-то ожидает увидеть на PPI2, однако при этом не инициализирует PPI2. В общем, раньше у меня были порты закольцованы (выход на вход), а теперь просто 0 на вход поставил по всем портам PPI2.

Saar
08.03.2016, 11:36
и плисина с большой памятью или приделан лоадер с sd
я делаю эмулятор для MiST платы. Там все загрузки с SD "бесплатные" благодаря наличию хорошей поддержки со стороны внешнего ARM чипа. Достаточно обозвать файл на SD <core_name>.rom и он автоматически пошлется в FPGA при старте. Закидывать файлы в FPGA так же легко через OSD. В общем, этим никаких проблем.
На DE1 приходится городить огород ввиде дополнительных виртуальных MCU. И то, если по ресурсам влезет. Хотя, наличие SRAM должно сильно помочь в этом. Но пока никто не написал универсальное решение для работы с OSD где можно выбрать нужный эмулятор а так же файлы для него.

ivagor
08.03.2016, 12:04
пока никто не написал универсальное решение для работы с OSD где можно выбрать нужный эмулятор а так же файлы для него
Для de1 это в принципе невозможно, не на чем запустить выбиральщик, только на самой плисине.
В принципе нечто подобное возможно для de1-soc

Saar
08.03.2016, 21:38
Что-то я запутался с этими джойстиками.
Есть ли где хорошая информация по всем типам джойстиков Вектора?
В первую очередь интересует инфа с точки зрения программирования на векторе: порты, биты, состояния.

- - - Добавлено - - -

С джойстиком ПУ разобрался. Остались еще УСПИД и П.

- - - Добавлено - - -

Хм нашел другой документ. Там джойстик ПУ обзывается как УСПИД. Это тот, что на 7 порту.
Есть джойстики на порту 6 с выбором между 1 и 2 на порту 5 - эти джойстики как называются?
Есть джойстики на отдельных портах E и F - эти как называются?

- - - Добавлено - - -

Ок. разобрался со всеми джойстиками.

- - - Добавлено - - -

выложил свой проект: https://github.com/sorgelig/Vector06_MIST

- - - Добавлено - - -

А возможности кировского квазидиска используются где-то? Имею ввиду биты 6 и 7 для задания окна для обращения как к ОЗУ.