Это _они_ называют ;)
Вид для печати
Это _они_ называют ;)
эка народ на хабре тема про 6502 разворошила ;) я, кстати, с него начинал писать на ассемблере на незабвенном Агате. И ник мой vlad6502 кагбэ намекает ;)
Модуль CPU размеры 160х144.45 мм
Собрал и запустил последний модуль Микро-80 - динамическое ОЗУ. Отклонения от оригинала минимальны - лишь добавил возможность использовать несколько типов микросхем памяти: 565РУ3, РУ6 и РУ5. На плате размещен один банк памяти, что дает 16КБ/64КБ ОЗУ в зависимости от типа примененных микросхем. При желании набрать 64КБ на РУ3 (чтобы максимально соответствовать оригиналу), конструктив модуля позволяет присоединить сверху еще одну плату с тремя банками памяти. Для защиты от пропадания питания -5В использовал реле (аналогично процессорному модулю).
Модуль динамического ОЗУ может работать в пересекающемся адресном пространстве с модулем ОЗУ-ПЗУ, при этом приоритет имеет модуль ОЗУ-ПЗУ (используются сигналы БЛКВХ и БЛКВЫХ)
С памятью дисплейного модуля ($E000..$EFFF) модуль динамического ОЗУ работает в параллель: запись производиться одновременно в оба модуля, а чтение выполняется только из модуля динамического ОЗУ (дисплейный модуль не позволяет читать из его видеопамяти). Таким образом, можно организовать скроллинг содержимого экрана, нужно лишь слегка подправить соответствующую подпрограмму Монитора.
Сборка заняла 38 часов, модуль запустился сразу же. Единственный нюанс, с которым предстоит разобраться - компьютер не хочет запускаться без статического ОЗУ по адресу $F000...$F7FF (рабочая область Монитора)
P.S. В оригинальной статье "Радио" N10, 1983г. допущена неточность во временной диаграмме сигналов (Рис.3): вместо сигнала "D6 выв.9" изображен сигнал с инверсного выхода этого же триггера ("D6 выв.8").
Красивые платы, Микро-80 в массы ? ;)
Отладил модуль сопряжения с магнитофоном. На этой же плате смонтирован интерфейс клавиатуры, панелька под дополнительные порты 580ВВ55 и остается еще достаточно места для расширений, например, 580ВИ53 и 580ВВ51. На монтаж ушло 14 часов.
В качестве накопителя использовал профессиональный кассетный диктофон Marantz-PMD222 (моно - широкая дорожка записи, сквозной канал, 2 скорости).
Изначально пробовал запись / чтение с константами, рассчитаными по формулам из журнала Радио. Для моего случая (частота кварца 20 МГц, тактовая частота процессора - 2,5 МГц) это: константа записи = 40*Ftakt/2 = 40*2,5/2 = 50 = $32, константа воспроизведения = 1,5*константа записи = 1,5 * 50 = 75 = $4B
Компьютер данные не считывал... Тщательно перепроверив работоспособность модуля, но так и не добившись считывания данных, пошел другим путем: записывая на ленту последовательность байтов $22, подобрал константу записи для достижения скорости обмена 1500 бит/сек. Затем, методичным перебором константы чтения от $2F и выше, добился считывания с ленты и определил "коридор" рабочих значений константы чтения. Финальным вариантом взял значение середины "коридора". В результате мои рабочие константы выглядят следующим образом: константа записи = $30 -> $F75D - близка к расчетной; константа воспроизведения = $36 -> $F75C - существенно отличается от расчетной. Интересно, почему ?
В качестве эксперимента попробовал работу на пониженой скорости ленты 2,38 см/сек - все читается без проблем. Есть идея в дальнейшем соорудить интегрированый накопитель на микрокассете.
Чтобы проверить надежность магнитофонного интерфейса (при ремонте компаратора или самого магнитофона, например) мы на кружке генерировали рандомное содержимое объемом не менее 32КБ а уже его выгружали и загружали. Если считалось 2 раза подряд без ошибок - то все пучком. Было всякое, зато магнитофонные интерфейсы всегда работали на ура. Касаемо самих констант, то тут есть несколько нюансов. Во-первых, зависит от реализации в машинном коде. Например, у принятого манчестера в РКшке, Орионе и Специалисте выгрузка длиннее загрузки, поэтому константа выгрузки заметно меньше константу загрузки. Причем, она несколько нелинейна, если изменять скорость между 0.5х и 2х.
Если ГФ24, то тактовая будет 20/9=2,222222МГц.
В Микро-80 тактовый генератор на рассыпухе на основе ИЕ5. 20 МГц / 8 = 2,5 МГц
Для проверки качества считывания я использовал образы Монитора и Бейсика (он у меня зашит в ПЗУ). На приаттаченом скриншоте как раз отображен процесс чтения / записи образа Монитора с последующим сравненинем считаных данных с оригиналом.
После пары вечеров шаманства запустил на своей Микро-80 Монитор, совместимый с Монитором Радио-86РК (см.Радио N11 1989 г.).
Теоретически, это должно дать возможность запускать программы, разработанные для Радио-86РК, но практически без адаптации не обойтись, т.к. большинство программ работают напрямую с видеопамятью. Тем не менее, появляются достаточно полезные функции, недоступные в оригинальном мониторе: управление верхней границей памяти, подсчет контрольной суммы, директива R чтения с внешнего ПЗУ.
Журнальный вариант Монитора у меня работать напрочь отказался, пришлось прибегнуть к реверсному инжинирингу и пультовой отладке. На удивление, при всей стройности и элегантности кода, я обнаружил довольно грубую ошибку - сразу после сброса и настройки указателя стека идет обращение к функции вывода строки на экран, которая использует ряд переменных, инициализация которых происходит несколько позже;) А так как среди этих переменных есть довольно важные, отвечающие за вызов внешних обработчиков, то поведение программы становиться непредсказуемым.
Легким движением меняем порядок блоков и получаем приглашение Монитора к вводу директив!
Поигравшись с оригинальным вариантом, обнаружил, что проблема проявляется в зависимости от типа ОЗУ по адресу $F000-$F800. Разные паттерны начального состояния микросхем ОЗУ после включения питания делают эту ошибку малозаметной на динамических РУ5 и повторяемо воспроизводимой на статике 537РУ10. Возможно, из-за этого авторы, отладившие программу на РУшках и не выявили данный огрех.
PS: В присоединенном архиве:
- M80_RK86-original.bin - оригинал РК86 монитора
- M80_RK86-modified.bin - подкорректированый мною (кроме исправления ошибки изменена высота экрана на 24 строки и изменены адреса дополнительной ВВ55 так, что ее выводы A0,A1 можно подключать к шине адреса без инверторов, см.схему в Радио N11 89г.)
- Monitor M80_RK86 Disassembled.asm - дизассемблированый мною монитор
- Modify original RK86 compatibe monitor v1.1.docx - инструкция по in-place корректировке оригинального бинарника в HEXредакторе
По совету друзей приобрел автомобиль Москвич новой модели!Адаптировал под свой Микро-80 отличную разработку Алексея vinxru "Контроллер SD-карты для компьютера Апогей БК01Ц (Радио 86РК)". Контроллер смонтировал привычной мне технологией МГТФ, дополнительный 580ВВ55 расположил на плате ввода-вывода.
Прошивку Atmega8 использовал без изменений, а вот в sdbios.rk, boot.rk, shell.rk нужно было внести изменения из-за отличий в видеоконтроллере и способе адресации портов в Микро-80. Моя версия работает с РК-86 совместимым Монитором, под ним сразу запустились несколько программ, в том числе даже игра Volcano.
Спору нет. Очень красивые платы. Словно 8 битный арт.
Виктор, раскройте секрет таких красивых толстых контактных дорожек. Это полигонами или линиями контактными нарисовано? Сколько в среднем времени уходит наьодну плату?
Потихоньку реализовываю свою давнюю идею - интегрированый накопитель на магнитной ленте для компьютера Микро-80. После некоторых раздумий, решил остановиться на варианте с микрокассетой. С одной стороны -теплый ламповый звукистинно механический девайс, винтажный носитель информации, с другой - компактные размеры.
Лентопротяжку использовал от какого-то автоответчика, оказалась как раз подходящая для моих целей - вполне приличный бронзовый маховик тонвала, возможность полного логического управления, датчик для счетчика ленты. И уж совсем невероятное - настоящая стирающая головка, а не постоянный магнит, как принято во многих микрокассетных девайсах.
Логику управления и интерфейс с Микро-80 реализован на Atmegа8, это мой первый AVRовский проект. На данный момент реализовано управление ЛПМ в автономном режиме, сейчас работаю над интеграцией с компьютером - контроллер будет цепляться на шины данных и адресов и синхронизироваться сигналом готовности ГТ.
Также планирую реализовать индикатор уровня записи-воcпроизведения на линейном светодиодном индикаторе.
Здорово! Я такое провернуть хотел в 90х на основе внезапно появившегося ЛПМ от Веги 122ой. Атмег тогда не было, да...
Блин, красотою опередил! ;) Как раз делаю аналогичное для "Аюши", но на жёсткой логике, бо с контроллерами пока сложности...
Изначально тоже обдумывал вариант на рассыпухе, но в конце-концов решил совместить прятное с полезным - разобраться как готовить AVR ;) Ну и миниатюризация тоже не последнее значение имела.
В идеале можно было еще стабилизацию скорости вращения реализовать на микроконтроллере, но пришлось бы городить дополнительный датчик в кинематику.
Наоборот, надо сверху к ним подлететь, взять, и перенести на другую сторону вулкана.
А, вот оно как!
Я конечно догадывался что надо как-то спасать, но пытался "взять" челов как обычно (прикоснувшись) и в результате убивался.
Потом заметил что от погибшего "душа" отделяется (или что это такое?), ну и подумалось что может надо таким образом переправить их сразу на небеса, минуя неприятную смерть от лавы. Тоже не вышло...
А оказывается надо как в Cyclone поверху хватать...
Надо будет кстати проапгрейдить Циклон, нарисовать в нём вулкан и чтоб извергался...
Не буду заводить новую тему по Микро-80, спрошу здесь.
Судя по имеющимся фотографиям экрана Микро-80, курсор на нем смещен на одну позицию влево относительно позиции курсора в ОЗУ курсора.
Навскидку что-то не понимаю, как это реализовано в схеме. Если кто-нибудь разбирался или имеет реальный Микро-80, подскажите, как курсор будет себя вести, если находится в первой позиции строки либо в первой позиции экрана?
В общем, ситуация аналогична атрибутам на том же РК и т.п.
И в ЮТ-88, я так понимаю, курсор ведет себя точно так же?
Ну дык родной брат же :)
artyr_n, ошибся почтой [email protected]
artyr_n, а у вас плата разведена полность по схемам журнала радио ?
artyr_n, спасибо большое. Я почему-то думал что у вас все разведено ))
Мне тут попалась вот эта плата ,по ней в будущем хочу развести модули памяти для оригинального микро-80. Платы статической и динамической памяти. Интересно само расположение и разводка платы в области чипов ОЗУ ,это я и собираюсь применить для разводки свой платы.
https://preview.ibb.co/gtFUc9/52148297.jpg
https://preview.ibb.co/eHV6Pp/52148297_1.jpg
ram_scan, до этого разводка у меня получалась 4х слойной ,а тут всего два слоя и умещенно все.
Поставлю эту клавиатуру :)
Где то был даже корпус от нее.
Клавиатура то что надо
Начал детально изучать схему модуля видео-адаптера и у меня возникли некоторые трудности в области памяти. В связи с этим прошу мне подсказать правильно ли я понимаю.
Сделал таблицу соответствий/соотношений выводов у всех микросхем памяти.
Увидел следующее:
D16;D15;D24;D23 - 1е выводы идут в шину 7 ,а вот D14;D13;D12;D11;D10;D9;D22;D21;D20;D19;D18;D17 - 1е выводы идут в шину 6 - 1й вывод это А5
D16;D15;D24;D23 - 2е выводы идут в шину 6 ,а вот D14;D13;D12;D11;D10;D9;D22;D21;D20;D19;D18;D17 - 2е выводы идут в шину 7 - 2й вывод это А6
D16;D24 единственные на схему у которых 3й вывод идет в шину 14 ,у всех остальных 3й вывод идет в шину 13 - 3й вывод это чтение/запись
1. Соединяются ли выводы D16;D15;D24;D23 вместе ?
2. Верно ли я понимаю что А5 и А6 соединены ?
https://i.ibb.co/KyPDkPT/IMG-20190420-040115-HDR.jpg
Есть у кого оригинал собранного компьютера?
Реально ли с нуля собрать его сейчас?