Аппаратные расширения для продвинутых клонов (Пентагон, Profi, Scorpion): нестандартный опыт и инженерные тонкости

TapeLoader

Форумчанин
Пользователь
Сообщения
29
Счётчик реакций
41
Очки
840
Всем привет!

Просматривая обсуждение редких плат вроде Sibstar 128c, возник вопрос, который, думаю, будет интересен не только коллекционерам железа, но и программистам, и инженерам.

Мы хорошо знаем стандартный набор периферии для классического Spectrum: интерфейсы Beta-128, Kempston Joystick, простейшие ЦАП/АЦП. Однако более продвинутые клоны — Пентагон, Profi, Scorpion и им подобные — за счет измененной схемотехники и декодера адреса часто предоставляли куда более гибкую и «открытую» системную шину. Это открывало двери для создания и подключения нестандартных устройств, выходящих за рамки обычного спектрумовского экосистемы.

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

Предлагаю обсудить по пунктам:

1. Личный опыт и железо. Какие нестандартные (не массовые) устройства вам доводилось подключать или разрабатывать для Пентагона, Profi, Scorpion? Это могли быть:
· Самодельные или мелкосерийные контроллеры (например, для специфических датчиков, шаговых двигателей).
· Экзотические карты расширения памяти сверх стандартных 512/1024кб.
· Цифровые порты ввода-вывода (через КР580, 8255 или на ПЛИС), используемые для уникальных задач.
· Любые другие девайсы, которые не работали бы на оригинальном Speccy 48K.
2. Документация и «матчасть». Существует ли где-то в открытом доступе или личных архивах полноценная техническая документация по организации шины конкретных клонов? Не только распиновка разъема, но и временные диаграммы, особенности дешифрации адреса, нюансы использования сигналов (например, M1, IORQGE на Profi). Где искать эти данные?
3. Проблемы совместимости и борьба с ними. Классическая проблема: устройство, заточенное под ZX Spectrum 48K, отказывается корректно работать на клоне (или наоборот). С какими типичными ситуациями сталкивались? Конфликты по портам ввода-вывода, разные тайминги доступа к памяти, иная реакция на немаскируемые прерывания (NMI)? Какие были способы диагностики и обхода этих проблем — перепайка джамперов, написание отдельного драйвера, аппаратная доработка?
4. Современные проекты и потенциал. Ведутся ли сегодня (или планируются) какие-то интересные проекты по созданию новых устройств, которые бы максимально использовали возможности шины именно продвинутых клонов? Например, быстрые SD-картридеры с DMA, простые сетевые адаптеры или что-то более экзотическое. В чем видите главный инженерный вызов и интерес в такой разработке сегодня?
5. Программистский взгляд. Для тех, кто писал софт под такие устройства: насколько сложнее/интереснее было программировать, зная о расширенных возможностях железа? Может, есть примеры кода (на ассемблере), демонстрирующие работу с нестандартными портами или банками памяти?
 
В чем видите главный инженерный вызов и интерес в такой разработке сегодня?
5. Программистский взгляд. Для тех, кто писал софт под такие устройства: насколько сложнее/интереснее было программировать, зная о расширенных возможностях железа? Может, есть примеры кода (на ассемблере), демонстрирующие работу с нестандартными портами или банками памяти?
Инженерный интерес , как будующего инженера, для меня представляет только изучение каких-то новых технологий. Думаю как разберусь со спеком запилить для него видеоадаптер с hdmi на fpga. - вполне реальная задача для того что бы пощупать что такое fpga.
Как человека который немножко могёт в асм (для x86 по крайней мере) для меня представляет интерес именно та зона где софт соприкасается с железом - то есть когда ты не просто пишешь какую то логику , а когда твой код можно "пощупать" осциллографом, что в рамках программирования под x86 не очень то получается. Вот , скоро надеюсь буду и под z80 писать =)
 
Основная сложность при программировании под нестандартные устройства на клонах — отсутствие унификации в декодировании адреса порта ввода-вывода. На оригинальном Spectrum всё просто: чтобы выбрать конкретную линию, мы выставляем на шину адреса A8-A15 соответствующий байт. На клонах этот принцип часто ломается.

1. Практический пример: «Слепое» сканирование шины

Перед написанием драйвера под неизвестное железо полезно понять, какие порты вообще «откликаются». Вот основа для такой утилиты. Она перебирает возможные адреса и пытается считать байт, фиксируя те, где ответ отличается от FF (подтяжка к питанию) или где есть стабильная картина.
Код:
; Z80 ASM: Сканер портов ввода. Результат — дамп считанных значений.
    LD HL, RESULT_BUFFER  ; Буфер для результатов (256 байт)
    LD BC, 0FF00h         ; B=255 (счётчик), C=0 (стартовый порт)
    LD D, 0               ; D=0 (для записи)

SCAN_LOOP:
    IN A, (C)             ; Пытаемся считать байт из порта (C)
    LD (HL), A            ; Сохраняем результат
    INC HL
    INC C                 ; Переходим к следующему порту (0..255)
    DJNZ SCAN_LOOP        ; Повторяем 256 раз

    ; Далее можно вывести буфер RESULT_BUFFER на экран или сохранить на диск.
    ; Ненулевые, не-FF значения — кандидаты на «живые» порты.

Важно: На некоторых клонах (особенно с расширенной памятью) активное чтение с «несуществующих» портов может привести к глюкам. Делайте это на «голом» железе без сторонних резидентов.

2. Работа с КР580ВВ55 (аналог i8255)

Упоминали эту микросхему. Её логика стандартна, но адресация портов на каждом клоне своя. Если вы вычислили базовый адрес (допустим, #XX), то:

· #XX — Порт A (обычно на выход)
· #XX+1 — Порт B (обычно на вход)
· #XX+2 — Порт C
· #XX+3 — Регистр управления (задает режимы работы портов)

Код инициализации ВВ55 на выход (порт A) и вход (порт B):
Код:
LD BC, XX03h          ; B=0, C=адрес регистра управления (база+3)
    LD A, 10000010b       ; Бит 7=1 (режим), Порт A=Mode0, вывод (бит6=1, бит5=0),
                          ; Порт B=Mode0, ввод (бит2=0), Порт C(нижн.)=вывод (бит0=0)
    OUT (C), A
После инициализации запись в порт A (OUT (C), data) установит логические уровни на его выводах, а чтение порта B (IN A, (C), где C=база+1) считает состояние входов.

3. Ключевой вопрос совместимости: Конфликт по NMI

Одна из самых коварных проблем при подключении устройств к продвинутым клонам — немаскируемое прерывание (NMI).

· Оригинальный Spectrum его почти не использовал.
· Многие клоны (Пентагон, Profi) используют NMI для реализации мультизадачности, драйверов дисковода или видеоэффектов.
· Ваше устройство, генерирующее NMI (например, по событию), может вступить в конфликт с этой системой и «положить» ОС.

Что делать:

1. Изучить документацию клона. На что заведено NMI?
2. Предусмотреть возможность отключения генерации NMI с устройства (джампером или отдельной командой).
3. В коде драйвера крайне аккуратно обрабатывать свои NMI, сохраняя и восстанавливая все регистры, и выполняя минимально необходимую работу.
 
Она перебирает возможные адреса и пытается считать байт, фиксируя те, где ответ отличается от FF (подтяжка к питанию) или где есть стабильная картина.
На 48 фирме по идее должно выдать кучу несуществующих портов.
 
Инженерный интерес , как будующего инженера, для меня представляет только изучение каких-то новых технологий. Думаю как разберусь со спеком запилить для него видеоадаптер с hdmi на fpga. - вполне реальная задача для того что бы пощупать что такое fpga.
Как человека который немножко могёт в асм (для x86 по крайней мере) для меня представляет интерес именно та зона где софт соприкасается с железом - то есть когда ты не просто пишешь какую то логику , а когда твой код можно "пощупать" осциллографом, что в рамках программирования под x86 не очень то получается. Вот , скоро надеюсь буду и под z80 писать =)
приходи на stm32 под асмом :-) я сейчас вот задумал скрестить 407zgt z80 и ssd1963 на 7"... правда спек там будет скорее всего без демосцен, и потом все таки хочется cpm машину получить (экран позволит 80 символов в строке)
 
Основная сложность при программировании под нестандартные устройства на клонах — отсутствие унификации в декодировании адреса порта ввода-вывода. На оригинальном Spectrum всё просто: чтобы выбрать конкретную линию, мы выставляем на шину адреса A8-A15 соответствующий байт. На клонах этот принцип часто ломается.

1. Практический пример: «Слепое» сканирование шины
не сработает эта задумка
просто потому что многие порты у спектрума работают только на ввод или только на вывод...
так что задумка красива, но не для спектрума - там экономия привела к полной невозможности определения доступных портов...
проще проверять по спискам....
 
Назад
Вверх