Мои планы, которые я пока отложу ради починки и админства

Jul 04, 2023 11:22

Про Z80 - есть один на 8 МГц из модема и пять - на 20 МГц, все в корпусах QFJ aka PLCC, под них есть панельки. В DIP-40 тоже есть, но они медленные, ну их.

К такому Z80 хочется память, сравнимая по скорости, основная часть памяти пусть будет статическая. Аналогично Z80чё-тоIO с портами и ещё такая микросхема ком-порта как в PC. Всё тоже в QFJ. Z80 IO точно работает на 8 МГц. Между Z80 и памятью (а так же всем остальным) естественно шинный буфер и страничная адресация - по жирному - вся память поделена на страницы, любую можно переключить. Скорее всего по 16 к, но вкуснее даже по 8. Если 16, то 2 старших бита адреса - номер (места) страницы, страниц всего 256, получается 22 бита (или 21 если по 8). Или старший бит - признак RO или режим RO для каждого (номера) страницы содержит какой-то отдельный порт. В лучшем случае это 4 мегабайта, в худшем - 1 (бит на RO, страницы по 8 килобайт). RO-пригодится (имитация ПЗУ, чтоб не испортить), но не обязателен.

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

Назовём этот режим системным - в нём на начальные адреса принудительно включена нулевая страница и разрешен доступ к портам ввода вывода (включая порты переключения страниц, ну только самый первый банк "не работает" - пока из системного режима не выйдем). То есть из несистемного режима видны какие-то 64 килобайта (может даже на самом деле 16 или 8 - одна страница во всех окнах) и всё, до остальных не добраться, наружу тоже не постучать никак, портов нет. Как работать - вопрос отдельный (ниже).

Системный режим включается при поступлении прерывания или выполнении команды RST - причём с задержкой, чтобы программа сохранила стэк в свою память, а потом уже продолжила работу в нулевой странице. Раз мы хотим "ловить" RST, то нам нужен дешифратор выполняемых команд (кстати, типовая штука в мире Z80) - это GAL/PAL и пара-тройка триггеров - для префиксов. Имеет смысл ловить не просто RST а RST с префиксом, чтоб уж не конфликтовать ни с чем. Выход из системного режима - RET или RETI с префиксом. Вход в системный режим подразумевает сохранение решительно ВСЕХ регистров, начиная с SP и такое же восстановление. Ну да, можно восстановить другой контекст (и другую конфигурацию страниц памяти) и переключить задачу. Всё, у нас многозадачность и защита портов и памяти.

Шинный буфер данных позволяет такую штуку - если вдруг он почему-то не откроется при чтении команды, то резисторы, притягивающие шину данных процессора к нулю дадут этому процессору честный NOP. В несистемном режиме буфер __почему-то__ не откроется для команд EI DI IM0 IM1 IM2 LR I, A и LD R, A (вроде всё). Некоторые из них с префиксом, но NOP с тем же префиксом остаётся NOPом, я проверял. Таким образом ничего несистемная программа испортить не сможет - ни прерывания отключить/перенастроить, ни даже регенерацию динамической памяти поломать. В несистемном режими можно гонять CP/M, BIOS сократится до нескольких RST с префиксом, так что ОС получит очень большой кусок памяти. Некоторые программы от Радио-86РК тоже пойдут при модификации монитора, но без прямой работы с видео памятью (точнее - можно раз в несколько секунд проверять и отрисовывать картинку на настоящем экране - для игр точно не пойдёт, а вот для разных графиков - вполне).

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

Программа-минимум была - запустить компьютер Гранта Сирла - делается плата с компортами, ОЗУ, ПЗУ и дешифраторами адресов/портов. Потом она пойдёт как переферийная с небольшими переделками (другие адреса и порты будут, горячий/холодный reset уйдёт в другое место), так что кое-что на ней будет сделано не намертво, а с джамперами и контрольными точками. Когда всё это счастье запустится, можно уже вставлять между процессором и периферией шинные буфера, добавлять страницы и делать прочие последовательные трансформации.

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

И вот тут родилась такая идея - взять ПЗУ "Монитора" от Радио-86РК, добавить 32Кб памяти, схему сброса... или даже взять 64Кб, вверх записать "монитор", снизу JMP F800, сбросить процессор и немного подождать (я не помню, может ли инициализация хм.. "портов" зависнуть, но это легко и проверить и поправить). В районе видеопамяти должна появиться надпись со стрелочкой. Дальше уже добавлять ВВ55, а AVR пусть поработает видеовыходом (как я вчера написал) до заворачивания всего счастья под гипервизор. Да, проверить буфер данных и адреса тоже получится, даже в режиме ПДП.

Про собственно планы и ближайшие действия - каждое действие даст какой-то результат.
1. купить красивую винтажную резисторную сборку и добавить её к процессору, чтоб проводки шины данных не шли сразу от него к разъёму, а была средняя точка для подпайки; ну и просто сборка там нужна.
2. сделать тактовый генератор, включить процессор и увидеть, как он перебирает ножками, когда на шине данных ноли.
3. на переферийной плате спаять ОЗУ на 128 Кб, (панельку для) ПЗУ на 256, ВВ55, может ямаховский синтезатор и панельки для контроллеров портов - чтоб как минимум шина данных и старшие адреса шли по правильным местам; оставить место для дешифратора.
4. на "отладочной" плате от AVR "жёстко" припаять все провода полной шины адреса (вот все 22 разряда), шины данных, управления, то, что не используется с разъёма вывести на "гребёнки", аналогично неиспользуемые ноги AVR, припаять разъём программирования и UART.
5. подключить к отладочной плате с AVR периферийную плату, поиграть с памятью, убедиться, что всё работает, попробовать прочитать/почистить/прошить ПЗУ. Может быть поуправлять аппаратными ком-портами платы.
6. подключить к отладочной плате плату процессорную. Имитировать контроллером маленькую память и пару портов, "помигать светодиодиком" - тут не на настоящей тактовой частоте, а раз так в 10-1000 меньше.
7. собрать все три платы, скоммутировав ОЗУ на всё адресное пространство, остановить процессор, заполнить память "монитором", сбросить процессор и немного подождать, потом посмотреть, что там получилось; возможно зануляя части монитора (выкинув инициализацию видео, если там есть циклы), добиться появления приглашения в видеопамяти.
8. на буферной плате собрать буферы и порты переключения страниц плюс схему для выбора ПЗУ при сбросе, "системный режим" пока не сделан (просто торчит контакт).
9. подключить отладочную плату вместо процессорной через буфер к периферийной. Попереключать банки, убрать системный режим, обломаться переключать.
10. собрать все четыре платы паравозиком, настроить банки, убрать системный режим, удостовериться, что буферы работают прозрачно, то есть приглашение Радио-86РК в видеопамяти есть.
Пока как-то так.

ФиксикиПокусали, ХочетсяСтранного, Планы, КомпьютерноеЖелезо

Previous post Next post
Up