Всім привіт!
Вирішив поділитися модом ZX Spectrum Harlequin 128k до 256к.
Невелика перед історія, для чого мод взагалі потрібен. Для іншого свого проєкта я використовую асемблер ALASM, крутезне інтегроване середовище для розробки. Цей інструмент вимагає пам'яті і немало, якщо коротко, то при використанні 128к, доступно тільки 2 вікна вихідного коду, що достатньо для маленьких проєктів. В більших проєктах працювати можна, але вже не комфортно. Крім того, компіляція займає багато часу за рахунок постійної підгрузки файлів з диска.
Тому з'явилася ідея розширити об'єм пам'ять хоча б до 256Кб. Це дасть +6 вікон для редактора кода і значно пришвидшить компіляцію.
Після вивчення схеми Harlequin 128k rev 2D, виявилося, що на плату можна встановлювати два різновида пам'яті - UM61512 (64Kb) або HM628128 (128Кб).
Наскільки я зрозумів, DonSuperfo це зробив на випадок, якщо не вдасться знайти UM61512.
Ще один момент - можливо, то мені не повезло - всі 6 мікросхем виявилися битими, хоча замовляв на алі нові. Пізніше, замінив на HM628128.
Проте, 64Кб з одної та 64Кб з іншою мікросхеми не були задіяні - тому і захотілося їх якось використати в якості додаткової пам'яті.
По перше, я поцікавився, як це зроблено у пентагона, бо аласм має драйвер для пентагона до 1024Кб. Виявилося все досить просто - порт 0x7FFD для керування банками пам'яті має 2 вільних біта (6,7) і на них якраз і повішали перемикачі груп банків:
Групуються вони по вісім банків. Тепер біт 6 відповідає за нульову і першу групу з вісьми 16Кб банків.
Залишилося розробити схему, яка б при включеному 6му біті перемикала групу 0 на 1 і навпаки.
Логічно було б просто додати тригер і кинути його вихід прямо на А16 першої і другої мікросхеми, але це не так...
Проблема криється в архітектурі самого спека:
Суть така, що друга мікросхема пам'яті використовується відео підсистемою і називається contended. Це означає, що пам'ять ділиться між процесором і схемою генерації зображення на екрані. Тобто, під час доступу відео підсистеми, процесор зупиняється і відмальовуються біти на екрані, потім процесор продовжує свою роботу. Тому при доступі до пам'яті відео підсистеми, треба переключати на нульову групу банків - там де лежить відеобуфер.
Насправді, нічого складного в цьому немає - на схемі арлекіна можна знайти сигнал AL, який і відключає адрсесацію пам'яті від процесора, щоб не заважати відео підсистемі. Цей сигнал буде використаний для перекриття сигнала від тригера і скидання до нульвої групи банків.
Сама схема наведена нижче:
Потрібно лише 3 мікросхеми: 74НС74, 74НС04 і 74НС11.
Сигнал AL інвертується і через елемент AND міксується з виходом тригера - це дозволяє примусово переключатися на нульову групу банків.
Теж, вибір першого банка відбувається, якщо процесор звертається за адресами 0xC000-0xFFFF. В інших випадках, завжди буде вибрана нульова група банків.
Мікросхеми спаяв на окремомій платі для прототипування з конектором. Необхідні сигнали взяв напряму з ножок мікросхем.
Оскільки А16 у мікросхем був підтягнутий до землі, треба було скалпелем відключити пад від землі і підпаяти вивід до плати.
З мікросхемою U3x поблем не було, а от з U8x - були - цей вивід використовується, як перехідний отвір до конденсатора і резистора. Тому треба було відрізати доріжку на верхній стороні плати і підпаяти землю напряму до резистора.
Як то все виглядає, можна побачити на фото нижче:
Ну і власне, результат - АЛАСМ задетектив 256Кб:
Класні були часи, коли паяльником і парою мікрух можна було розширяти пам'ять свого компа... це вам не ваші отеті вот айфони
ZX Spectrum Harlequin 128k мод 256к
Модератор: alvis