nedoPC.org

Community for electronics hobbyists, established in 2002
Last visit was: 27 Jul 2024 01:57
It is currently 27 Jul 2024 01:57



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

Joined: 06 May 2022 08:39
Posts: 17
Подключение 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

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

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


You do not have the required permissions to view the files attached to this post.


14 Jul 2023 01:44
Writer

Joined: 06 May 2022 08:39
Posts: 17
Фото доработки. Разрез отмечен.
Attachment:
04_Доработка Дельты.jpg

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

Обновление 19.06.2024. Внедрять этот вариант доработки не следует, т.к. в данном случае схемотехника Дельты-С повторяет оригинальный Спектрум-48, и следовательно, обеспечивает совместимость с оригинальным программным обеспечением:
- Оригинальная ULA останавливает Clock Z80 сразу по выставлению адреса медленного поля (А14=1, А15=0), соответственно перехватываются и обращения к портам с таким адресом.
- Кроме того, ULA останавливает Clock Z80 при обращении к порту #FE (A0=0, IORQ=0). Эта остановка в Дельте-С не реализована.
Attachment:
05_Visio_Арбитр МП 2.jpg

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


You do not have the required permissions to view the files attached to this post.


Last edited by SKV on 19 Jun 2024 04:14, edited 4 times in total.



14 Jul 2023 01:54
Writer

Joined: 06 May 2022 08:39
Posts: 17
Attachment:
07_Visio_Дешифратор GS.jpg

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

Attachment:
09_Нижняя сторона GS.jpg


You do not have the required permissions to view the files attached to this post.


14 Jul 2023 01:59
Writer

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

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

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

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


You do not have the required permissions to view the files attached to this post.


14 Jul 2023 02:04
Writer

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

Attachment:
14_ Провалы INT.png

Длительность импульса 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


You do not have the required permissions to view the files attached to this post.


14 Jul 2023 02:10
Writer

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

Attachment:
17_Дребезг INT 74АСТ04 1,8мкс.png

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

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


You do not have the required permissions to view the files attached to this post.


14 Jul 2023 02:21
 [ 6 posts ] 

Who is online

Users browsing this forum: Claude AI [Bot] and 5 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

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