ZX Spectrum Harlequin 128k мод 256к
Додано: 24 вересня 2023, 17:06
Всім привіт!
Вирішив поділитися модом 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к.
Невелика перед історія, для чого мод взагалі потрібен. Для іншого свого проєкта я використовую асемблер 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Кб:
Класні були часи, коли паяльником і парою мікрух можна було розширяти пам'ять свого компа... це вам не ваші отеті вот айфони