nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 27 Apr 2024 09:49



Reply to topic  [ 6 posts ] 
Подключение GS к Дельте-С. Конструктивные недочёты GS. 
Author Message
Writer

Joined: 06 May 2022 08:39
Posts: 12
Reply with quote
Подключение 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
Attachment:
01_Двойные байты.jpg
01_Двойные байты.jpg [ 102.35 KiB | Viewed 2683 times ]

Осциллограмма замороженного WR. Сверху вниз:
1. WR, он же CSD, он же вход S на DD5:1
2. Clock на главном Z80
3. Вход R на DD5:1
4. Выход Q на DD5:1
Attachment:
02_Останов Clock.png
02_Останов Clock.png [ 46.31 KiB | Viewed 2683 times ]

Доработка Дельты.
Вариант 1.
Для устранения замороженных циклов IORQ достаточно ввести в арбитр медленного поля цепочку IORQ+ЛН1+ЛЛ1. Требуется один разрез, свободные элементы есть тут же в Дельте. Обращаю внимание, что IORQ необходимо брать непосредственно с Z80, а не OUT IORQ с выхода арбитра ZX-Bus.
После этой доработки GS начинает работать безупречно.
Attachment:
03_Visio_Арбитр МП 1.jpg
03_Visio_Арбитр МП 1.jpg [ 36.58 KiB | Viewed 2683 times ]


14 Jul 2023 01:44
Profile
Writer

Joined: 06 May 2022 08:39
Posts: 12
Reply with quote
Фото доработки. Разрез отмечен.
Attachment:
04_Доработка Дельты.jpg
04_Доработка Дельты.jpg [ 478.85 KiB | Viewed 2682 times ]

Вариант 2.
Также я приготовил вариант доработки для полного высвобождения IORQ от остановки Clock, т.е. остановку по условию А14+А15+фронт MREQ. Но этот вариант остался мною непроверен, т.к. требует разреза в недоступной дорожке под брюхом DD30 между пинами 13-2.
Можно обойтись без выпаивания DD30, откусив пин 13 над платой и подпаяв к нему новый проводок сверху.
Attachment:
05_Visio_Арбитр МП 2.jpg
05_Visio_Арбитр МП 2.jpg [ 223.24 KiB | Viewed 2682 times ]

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 на выходе из диода
Attachment:
06_RAM1 1,4V после диодов.png
06_RAM1 1,4V после диодов.png [ 35.98 KiB | Viewed 2682 times ]


Last edited by SKV on 14 Jul 2023 02:23, edited 1 time in total.



14 Jul 2023 01:54
Profile
Writer

Joined: 06 May 2022 08:39
Posts: 12
Reply with quote
Attachment:
07_Visio_Дешифратор GS.jpg
07_Visio_Дешифратор GS.jpg [ 126.15 KiB | Viewed 2682 times ]

Итого требуется разместить 3 дополнительных чипа: ЛА2, ЛН1, ЛИ1. Для этого используем макетную плату, т.к. свободных элементов в GS недостаточно:
- ЛН1 DD17:4
- ЛИ1 DD38:3 от IORQGE
- ЛИ1 DD38:4 можно высвободить, используя сигнал RAM1
Attachment:
08_Верхняя сторона GS.jpg
08_Верхняя сторона GS.jpg [ 902.27 KiB | Viewed 2682 times ]

Attachment:
09_Нижняя сторона GS.jpg
09_Нижняя сторона GS.jpg [ 1.06 MiB | Viewed 2682 times ]


14 Jul 2023 01:59
Profile
Writer

Joined: 06 May 2022 08:39
Posts: 12
Reply with quote
5) Размах тактового генератора GS DD17. Сигнал INT.
При использовании в этой позиции 1533ЛН1 размах выходных импульсов 12МГц равен 3,3V. Резистор R38 позволяет приподнять её кверху в диапазон 0,4..3,7V.
Attachment:
10_ Clock 3,3V_1533 (3х470 Ом).png
10_ Clock 3,3V_1533 (3х470 Ом).png [ 46.49 KiB | Viewed 2682 times ]

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

Этот размах можно получить, применив 1531ЛН1 (74F04). Подтягивающий резистор R38 должен быть уменьшен до 180 Ом.
Attachment:
11_Clock 4,3V_74F_187 Ом.png
11_Clock 4,3V_74F_187 Ом.png [ 46.35 KiB | Viewed 2682 times ]

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


Attachments:
12_Clock 5V_74ACT.png
12_Clock 5V_74ACT.png [ 53.52 KiB | Viewed 2682 times ]
14 Jul 2023 02:04
Profile
Writer

Joined: 06 May 2022 08:39
Posts: 12
Reply with quote
Помимо генерации Clock, DD17 является источником импульсов INT 37,5 кГц. Во входной RC-цепи отсутствует обратный диод, из-за чего на вход ЛН1 проходят отрицательные выбросы -1,1V, которые искажают выходной сигнал ЛН1, формируя в нём провалы. Для ТТЛ-серий на входе допускаются отрицательные выбросы -1,2V, а для КМОП (74АСТ04) уже только -0,5V. Поэтому в любом случае параллельно R8 полезно запаять обратный диод, забытый разработчиком GS.
Attachment:
13_Отриц. выбросы после RC.png
13_Отриц. выбросы после RC.png [ 37.6 KiB | Viewed 2682 times ]

Attachment:
14_ Провалы INT.png
14_ Провалы INT.png [ 37.91 KiB | Viewed 2682 times ]

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


14 Jul 2023 02:10
Profile
Writer

Joined: 06 May 2022 08:39
Posts: 12
Reply with quote
От применённой серии зависит ещё и характер обратного фронта импульса INT. Самый лучший он на 1533ЛН1. На 74F04 на этом участке возникает дребезг - многократные переходы, ещё сильнее дребезг в случае 74ACT04. Поэтому в своём GS я оставил DD17 74F04 как тактовый генератор, а сигнал INT вынес на свободный элемент 1533ЛН1 из доработки схемы дешифратора.
Attachment:
16_ Дребезг INT 74F 2,3мкс.png
16_ Дребезг INT 74F 2,3мкс.png [ 37.9 KiB | Viewed 2682 times ]

Attachment:
17_Дребезг INT 74АСТ04 1,8мкс.png
17_Дребезг INT 74АСТ04 1,8мкс.png [ 38.17 KiB | Viewed 2682 times ]

6) Расширитель
В настоящее время доступен только расширитель 2МВ, который требует предварительной доработки GS, описанной Евгением Мучкиным.
Attachment:
18_Visio_Расширитель 2МВ.jpg
18_Visio_Расширитель 2МВ.jpg [ 211.63 KiB | Viewed 2682 times ]

Использование такого расширителя уменьшает совместимость, т.к. некоторые программы под 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.


14 Jul 2023 02:21
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 6 posts ] 

Who is online

Users browsing this forum: No registered users and 38 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.