User Tag List

Показано с 1 по 2 из 2

Тема: Подключение GS к Дельте-С. Конструктивные недочёты GS.

  1. #1

    Регистрация
    14.07.2022
    Адрес
    г. Краснокамск
    Сообщений
    2
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Подключение GS к Дельте-С. Конструктивные недочёты GS.

    Подключение General Sound к Дельте-С на 75 микросхемах.
    Конструктивные недочёты General Sound.


    Версия статьи с иллюстрациями здесь.

    Содержание:
    1) Подключение General Sound к Дельте-С на 75 микросхемах.
    2) Обратное вычитывание мода. Ошибки в «Руководстве по программированию GS».
    3) Оригинальный GS: закоротки на печатном разъёме, отсутствие дорожки WR на расширитель, отсутствие подтяжки Reset, незадействованные контакты питания.
    4) Доработка дешифрации и исключение диодной логики.
    5) Размах тактового генератора GS. Сигнал INT.
    6) Расширитель.

    Благодарю за помощь Black Cat, Евгения Мучкина, Reddie.
    ***
    1) Подключение General Sound к Дельте-С на 75 микросхемах.

    Симптомы.
    General Sound хаотично ведёт себя при исполнении любых модов, в лучшем случае проигрывая несколько начальных нот, а в остальном издавая скрипы и паузы. При этом он безупречно исполняет сэмплы (Krakout, Saski). Z-Player и любые другие плееры/трекеры хаотично сбоят, зависая в произвольные моменты. Z-Player неверно определяет модель GS и тактовую частоту.

    Причина.
    Арбитр медленного поля памяти в Дельте-С останавливает Clock процессора по комбинации адреса А14=1 А15=0 (для 128К CAS0=1 CAS1=0), когда такой адрес попадает на момент выхода луча с бордюра, не разделяя, собирается ли процессор исполнять MREQ или IORQ, или он прямо сейчас находится в процессе исполнения IORQ. Последний случай и оказался критическим для работы GS.

    При остановке главного Z80 во время исполнения цикла IORQ+RD или IORQ+WR замирает в активном состоянии выход главного дешифратора GS DD6. Он в свою очередь продолжает удерживать включенным R или S вход триггера флагов GS DD5. Поэтому на момент прихода ответной команды от GS на переустановку/сброс флага оба RS-входа в DD5.1 или в DD5.2 оказываются активными и данный триггер принимает неопределённое состояние. Флаг D7 или D0 захватывается процессором GS повторно. Если это исполнение команды CSC/CSD, то повторно захватывается байт из регистра команд/данных. В случае загрузки мода это означает хаотическое вклинивание двойных байтов, т.е. порчу загружаемого файла.

    Для предотвращения таких состояний напрашивается использовать триггер, аналогичный ТМ2, но с тактированием RS-входов фронтами, а не уровнями. Однако такого чипа в семействе почему-то не предусмотрено.

    Скрин вклинившегося байта в теле мода. Здесь:
    HLS - адрес ячейки в Спектруме
    HLG - адрес ячейки в GS
    DS - cодержимое ячейки в Спектруме
    DG - содержимое ячейки в GS
    <01 Скрин Двойные байты>

    Осциллограмма замороженного WR. Сверху вниз:
    1. WR, он же CSD, он же вход S на DD5:1
    2. Clock на главном Z80
    3. Вход R на DD5:1
    4. Выход Q на DD5:1
    <02 Осц. Замороженный WR>

    Доработка Дельты.
    Вариант 1.
    Для устранения замороженных циклов IORQ достаточно ввести в арбитр медленного поля цепочку IORQ+ЛН1+ЛЛ1. Требуется один разрез, свободные элементы есть тут же в Дельте. Обращаю внимание, что IORQ необходимо брать непосредственно с Z80, а не OUT IORQ с выхода арбитра ZX-Bus.
    После этой доработки GS начинает работать безупречно.
    <03_Схема Арбитр МП1>

    Фото доработки. Разрез отмечен.
    <04_Фото доработки>

    Вариант 2.
    Также я приготовил вариант доработки для полного высвобождения IORQ от остановки Clock, т.е. остановку по условию А14+А15+фронт MREQ. Но этот вариант остался мною непроверен, т.к. требует разреза в недоступной дорожке под брюхом DD30 между пинами 13-2.
    Можно обойтись без выпаивания DD30, откусив пин 13 над платой и подпаяв к нему новый проводок сверху.
    <05_Схема Арбитр МП2>

    2) Обратное вычитывание мода. Ошибки в «Руководстве по программированию GS» (за авторством Stinger).

    В ходе поиска описанной причины мне пришлось написать программу для загрузки тестового мода, обратного вычитывания из GS и побайтного сравнения.

    Команда #30 Load Module в руководстве описана верно, но все команды чтения из памяти GS описаны с ошибками.

    Команды #15 Get memory block и #17 Peek from address мне оживить не удалось - при чтении из одной и той ячейки ROM они выдают каждый раз новое значение, то есть читают вообще не ячейку.

    В команде #1A Peek from (DE) address ошибку я устранил - она должна завершаться WD, а не WN.

    В руководстве нет информации, по какому адресу в GS хранится единственный загружаемый мод. Это страница 2, адрес #8000.

    Чтобы произвести обратное вычитывание мода из GS в Спектрум, необходимо:
    - Командой #12 OUT to 0 port включить страницу 2. Изначально туда включена страница 0 (ROM).
    Цикл:
    - Командой #18 Load DE Pair передавать адрес ячейки, начиная с #8000.
    - Исправленной командой #1A Peek from (DE) address читать значение ячейки.

    3) Оригинальный GS: закоротки на печатном разъёме, отсутствие дорожки WR на расширитель, отсутствие подтяжки Reset, незадействованные контакты питания.
    - При втыкании платы в ZX-Bus главный Z80 отказался запускаться, выдавая чёрный квадрат.
    Причина оказалась в наличии закороток из волосков металлизации на кромке печатного разъёма, в том числе между незадействованным в GS пином +5В и битом адреса. Повезло, что не на пине +12В.
    - Второй недочёт оригинальной платы - отсутствие дорожки WR на пин 34 расширителя от DD15, ножка 27.
    - GS изначально позиционировался разработчиком как устройство с раздельным сбросом: «загрузить свой любимый модуль, сбросить Спектрум, загрузить
    ассемблер и творить под любимую музыку.» Однако в схеме отсутствует необходимый для раздельного сброса GS резистор 10К, подтягивающий Reset к +5V, работающий в паре с конденсатором С21А. Если для подтяжки шины данных применяется резисторная сборка с 10 ножками, то можно использовать её свободный резистор.
    - на печатном разъёме GS задействован лишь один контакт +5V, также удивляет почти полное отсутствие блокировочных конденсаторов. Полезно подпаять оставшиеся два контакта +5V и один контакт GND. С нижней стороны GS это делается очень просто.

    4) Доработка дешифрации и исключение диодной логики.
    Решение разработал Black Cat.


    - В ZX-Bus с несколькими слотами и арбитром IORQ на ЛЛ1 за счёт задержек распространения возникает сдвиг между IORQ и WR. Этот сдвиг DD6 ошибочно воспринимает как команду на чтение из GS. Поэтому необходимо ввести сюда RD.

    - IORQGE должен формироваться комбинацией Адрес + Нет M1, до прихода IORQ.
    Выборка дешифратора = этот же сигнал + IORQ.
    При наличии арбитра на ЛЛ1 третье состояние IORQGE не требуется. Поэтому лишний элемент в виде транзистора или ЛП8 можно не впаивать.

    - Осциллограмма сигнала RAM1 на входе и выходе диодного ИЛИ показывает, что диодная логика не имеет права на жизнь. Она должна быть заменена на ЛА2 и элементы ЛИ1.
    Сверху вниз:
    3. RAM1=4,6V на входе в диод
    1. В1Х=1,4V на выходе из диода
    <06_Осц. RAM1>
    <07_Схема Доработки GS>

    Итого требуется разместить 3 дополнительных чипа: ЛА2, ЛН1, ЛИ1. Для этого используем макетную плату, т.к. свободных элементов в GS недостаточно:
    - ЛН1 DD17:4
    - ЛИ1 DD38:3 от IORQGE
    - ЛИ1 DD38:4 можно высвободить, используя сигнал RAM1

    <08_Фото Верхняя сторона GS>
    <09_Фото Нижняя сторона GS>

    5) Размах тактового генератора GS DD17. Сигнал INT.
    При использовании в этой позиции 1533ЛН1 размах выходных импульсов 12МГц равен 3,3V. Резистор R38 позволяет приподнять её кверху в диапазон 0,4..3,7V.
    <10_Осц. Размах 1533ЛН1 + 470 Ом>

    Если заглянуть в даташит Z80, то он предъявляет особые требования к уровню Clock:
    - нижняя точка не выше 0,4V
    - верхняя точка не ниже Uпит - 0,6V =4,4V
    Итого размах импульсов 4V.

    Этот размах можно получить, применив 1531ЛН1 (74F04). Подтягивающий резистор R38 должен быть уменьшен до 180 Ом.
    <11_Осц. Размах 74F04 + 180 Ом>

    Также я экспериментировал с 74ACT04 на этой позиции (применённой в реплике ZXM-GS). Она требует и других номиналов резисторов в обвязке. КМОП-серия обеспечивает размах 5V, но вследствии высокого быстродействия чрезвычайно склонна к дребезгу и дополнительным переходным процессам. Поэтому вариант с 74F04 я считаю наилучшим.
    <12_Осц. Размах 74ACT04>

    Помимо генерации Clock, DD17 является источником импульсов INT 37,5 кГц. Во входной RC-цепи отсутствует обратный диод, из-за чего на вход ЛН1 проходят отрицательные выбросы -1,1V, которые искажают выходной сигнал ЛН1, формируя в нём провалы. Для ТТЛ-серий на входе допускаются отрицательные выбросы -1,2V, а для КМОП (74АСТ04) уже только -0,5V. Поэтому в любом случае параллельно R8 полезно запаять обратный диод, забытый разработчиком GS.
    <13_Осц. RC-выбросы>
    <14_Осц. Провалы в INT>

    Длительность импульса INT (нулевой его уровень) должна составлять 32 такта = 2,7мкс (а в идеале формироваться не RC-цепочкой, а триггером ТМ2+ЛЛ1+IORQ+M1).
    Номиналы R8 C18 зависят от применённой серии ЛН1 - чем быстрее серия, тем короче импульс INT при тех же номиналах. Для 1533ЛН1 номиналы 470 Ом 6,8 нФ. Для 74F04 подойдут штатные номиналы 470 Ом 10 нФ.
    <15_Осц. Итоговый INT 1533ЛН1 2,7мкс>

    От применённой серии зависит ещё и характер обратного фронта импульса INT. Самый лучший он на 1533ЛН1. На 74F04 на этом участке возникает дребезг - многократные переходы, ещё сильнее дребезг в случае 74ACT04. Поэтому в своём GS я оставил DD17 74F04 как тактовый генератор, а сигнал INT вынес на свободный элемент 1533ЛН1 из доработки схемы дешифратора.
    <16_Осц. Дребезг INT 74F04 2,3мкс>
    <17_Осц. Дребезг INT 74ACT04 1,8мкс>

    6) Расширитель
    В настоящее время доступен только расширитель 2МВ, который требует предварительной доработки GS, описанной Евгением Мучкиным.
    <18_Схема Доработка под расширитель 2МВ>

    Использование такого расширителя уменьшает совместимость, т.к. некоторые программы под GS (Saski) отключаются, увидев нестандартное значение страниц RAM (62 вместо 3 или 14).

    В отличие от базовых 3 страниц, 62 страницы расширителя чрезвычайно долго проходят стартовый тест. Поэтому с расширителем надо либо использовать прошивку 1.05b, где тест памяти отключен (если работа расширителя полностью отлажена), либо применить светодиодную индикацию о готовности GS после сброса, используя выход триггера DD5.1 и транзистор VT2, оставшийся от IORQGE. DD5.1 всегда принимает определённый уровень по завершении стартового теста.

    Если планируется использование GS только с расширителем, то резистор 680 Ом в разрез можно не запаивать. Также можно не запаивать нижний чип RAM DD15, т.к. он исключается из работы битом D2 в переключателе банков.

    При наладке расширителя следует иметь в виду, что в отсутствии питания чипы
    RAM расширителя просаживают уровни подключенной шины данных до 2,5V, т.е. приводят её в неработоспособность.

    Мне свой экземпляр расширителя запустить так и не удалось. При его втыкании стартовый тест GS не находит ни одной страницы RAM, тест завершается выпадением какого-нибудь из разрядов шины данных в 2,5V вместо нормального уровня 4V - явление из предыдущего абзаца.

    После напайки на плате GS электролита 470 мкФ и поднятия размаха Clock до нормы (обе эти меры показали результат независимо друг от друга), расширитель начал запускаться, но GS с ним работает крайне нестабильно, запинаясь и зависая. Возможно, перегружается шина данных, и следует отделить расширитель от базовой платы через буфер на 1533АП6 или 1531АП6.

    Эти 4 пользователя(ей) поблагодарили SKV77 за это полезное сообщение:

    Djoni(14.07.2023), Gutten(14.07.2023), reddie(14.07.2023), SERGEY256(14.07.2023)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как один из соавторов вышеупомянутой игры (ее демки, точнее) Saski , в оправдание такого ее "поведения" скажу, что в те годы далеко не все имели ГС с базовым 512к модулем, ибо даже без модуля ГС был дороговатой игрушкой. У меня модуль был (и есть), однако вряд ли кто-то в те годы думал, что когда-то память нарастят до двух мегабайт поэтому тест определения карты был сделан довольно тупо.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Подключение YM2149F к Дельте-С (52ИС)
    от marinovsoft в разделе Дельта-С
    Ответов: 14
    Последнее: 08.03.2016, 23:30
  2. Цветное изображение на Дельте-С
    от Slava95 в разделе Дельта-С
    Ответов: 25
    Последнее: 23.12.2013, 17:18
  3. Ответов: 11
    Последнее: 22.04.2013, 14:01
  4. Подключение 3.5/5.25 к PC
    от DINAMIX в разделе Внешние накопители
    Ответов: 29
    Последнее: 16.03.2008, 16:18
  5. Прицепление "ПОЗИТРОНА" к Дельте
    от ALEXEY.GORDEEV в разделе Несортированное железо
    Ответов: 21
    Последнее: 11.12.2007, 06:14

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •