Исправления и доработки GS
|
|
Black_Cat | Дата: Воскресенье, 22.12.2013, 23:34 | Сообщение # 1 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| 1. Решение проблемы работы оригинального GS в slave слотах NemoBus.
Оригинальный GS был разработан на заре развития шины NemoBus, и в силу плохой осведомлённости авторов GS о работе этой шины не мог с ней корректно работать. Это же относится и к реплике GS от zorel. Из-за недостаточно хорошей схемотехники оригинального GS, он устойчиво работает только в первом, т.е. master слоте шины NemoBus. Суть проблемы состоит в том, что в арбитре слотов шины NemoBus, сигнал IORQ/ немного задерживается, и при самой простой реализации арбитра, для каждого следующего слота задержка увеличивается. В результате возникает эффект, что GS нормально работает только в первом (master) слоте (где нет задержки), а в остальных программа определяет ошибку чтения флага данных порта статуса. Причиной этой ошибки является некорректно реализованый дешифратор, использующий только сигнал WR/, а RD/ не использующий. В результате такого упрощения схемотехники, если в цикле записи в порт, на слот подаётся чуть задержанный относительно сигнала WR/ сигнал IORQ/, то по завершении сигнала WR/, остающийся активным сигнал IORQ/ воспринимается как сигнал RD/, что вызывает ложную генерацию сигнала чтения из соответствующего порта, что, в случае обращения к порту #B3, приводит к сбросу флага данных порта статуса, по взведению которого программа определяет работоспособность GS. Пример доработки для устранения такой ложной генерации сигнала чтения приведён ниже:
Изменения отмечены красным цветом.
Внимание! Вышеприведённый пример в этой теме, как и другие примеры на этом форуме, это как правило не единственно возможные решения, а только демонстрация одного из множества возможных решений, предназначенная для изучения проблемы, или задачи, и возможного способа её решения. Лучший способ развития архитектуры, это не слепое копирование, а изучение вопроса и самостоятельный синтез решения, чего и рекомендую всем. Помните, что слепое копирование без изучения, в лучшем случае приводит к неоптимальности такой конструкции, а в худшем и вообще к полной или частичной её нефункциональности.
Для примера приведу ещё несколько способов решения этой задачи:
Т.к. суть проблемы в предотвращении паразитного чтения из порта #B3, а для остальных портов паразитное чтение не имеет значения, то можно подмешивать сигнал RD/ не в дешифратор, а только в сигнал чтения порта #B3. Такое решение требует дополнительного элемента ИЛИ, но зато при модернизации нужно резать только одну дорожку:
2. Решение проблемы "замораживания" триггера статусного регистра при останове процессора Спектрума.
Ещё одну ошибку в схемотехнике GS обнаружил SKV при подключении к клону с двухполевой памятью Дельта-С(75ИС). Авторы GS не учли, что он работает в несколько раз быстрее Спектрума, и возможна ситуация, когда возврат триггера статуса в неактивное состояние процессором GS невозможен, т.к. процессор Спектрума в это время уже удерживает RS входы в нуле. Такая ситуация возможна в клонах с торможением процессора на экранной памяти, как в Дельта-С(75ИС), а так же во всех оригинальных Спектрумах. Проблема состоит в том, что авторы GS сделали взведение и сброс триггеров статуса по уровню , а не по фронту. Устранить эту ошибку можно введя дифференцирующие цепочки как на схеме ниже:
Добавлено (26.06.2023, 12:13) --------------------------------------------- Добавлены замечания и примеры.
Добавлено (03.07.2023, 14:32) --------------------------------------------- Добавлен пример решение проблемы "замораживания" триггера статусного регистра при останове процессора Спектрума.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Black_Cat | Дата: Вторник, 28.01.2014, 14:05 | Сообщение # 2 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| 2. Корректный IORQGE для General Sound.
Ниже приведены два варианта исправления ошибки формирования IORQGE и ошибки, мешающей работать в slave слотах NemoBus:
Первый вариант - на минималках, позволяет быстро исправить схему. Транзистор VT2 типа КТ315А1 в корпусе ТО-92 с длинными ногами, что бы можно было поменять местами КЭ. Второй вариант снижает нагрузку на шину и повышает быстродействие формирователя IORQGE. При внесении доработок рекомендуется пользоваться корректной схемой GS. Изменения отмечены красным цветом.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Black_Cat | Дата: Пятница, 22.05.2015, 12:15 | Сообщение # 3 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| 3. Итоговая схема GS v.1.1с исправлением всех ошибок.
Я решил логически разделить топик, завершив посты с отдельными исправлениями общей итоговой схемой GS v.1.1 со всеми исправлениями и выпрямлениями небрежной авторской схемотехники. Схема приведена так же для того, чтобы желающие сделать реплику, по крайней мере не повторяли все авторские ошибки и кривизну схемотехники, на сколько это возможно без существенных изменений разводки.
Добавлено (04.07.2023, 09:00) --------------------------------------------- Исправлены вновь обнаруженные ошибки. На чертеже указана дата последней правки.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Black_Cat | Дата: Пятница, 22.12.2017, 13:23 | Сообщение # 4 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| 4. Решение проблемы cовместной работы GS с некоторыми внешними устройствами.
При эксплуатации GS, иногда при сбоях возникает необходимость его программного сброса, или отключения, дабы исключить конфликты с другими устройствами, такими как DivIDE или SounDrive, или же отключить GS от сигнала сброса компьютера. В NGS для этих целей добавили порт #33. С помощью установки разряда D7=1 этого порта в NGS производился программный сброс GS. В предлагаемой доработке я дополнил функционал NGS возможностью захвата внутренней шины и отключения процессора с одновременной блокировкой портов GS, а так же блокировкой аппаратного сброса от компьютера. По любому из сигналов D4=1 или D5=1 отключаются порты #B3, #BB и генерация IORQGE для них, так же по D4=1 происходит захват шины процессора GS, а по D5 =1 блокировка аппаратного сброса. Светодиоды индицируют захват шины процессора GS и блокировку аппаратного сброса. Схема доработки приведена ниже:
В доработке использованы незадействованные элементы, оставшиеся от предыдущей доработки. При программировании, необходимо устанавливать только указанные разряды, т.к. остальные разряды могут в дальнейшем использоваться в других целях.
Добавлено (26.06.2023, 12:13) --------------------------------------------- Обновлены схема доработки GS. Добавлена возможность блокировки аппаратного сброса GS.
Добавлено (07.07.2023, 11:57) --------------------------------------------- Несколько изменена логика блокировки портов, теперь она происходит при блокировке сброса и при захвате шины. Изменение обусловлено тем, что divIDE или подобные устройства активируются при чтении КОПа из нулевого адреса, т.е. сразу после сброса порты GS должны быть заблокированы. А смысл опции блокировки сброса в том, чтобы GS играл фоновую музыку при, и после загрузки новой программы, т.е. GS и divIDE после сброса должны работать одновременно, что возможно только при заблокированных портах GS.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Black_Cat | Дата: Воскресенье, 24.12.2017, 18:25 | Сообщение # 5 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| 5. Наращивание 62-контактного печатного разъёма ISA на 60-контактный разъёма GS.
Оригинальный GS выпускался с 60-контактным метрическим разъёмом под отечественный коннектор, который впоследствии был заменён в компьютерах на импортный 62 контактный дюймовый разъём. В результате, установка GS в новый разъём требует особой тщательности, и зачастую приводит к коротким замыканиям из-за сдвига платы в разъёме и несоответствия шага контактов. Устранить эту проблему можно припаяв к GS отрезанный от дохлой платы ISA печатный разъём. Для этого, отрезанный печатный коннектор ISA припаивается с помощью двухрядного штыревого разъёма PLD к печатному разъёму GS. Ниже, на рисунке, в разрезе показано как это сделать:
Новый разъём не только избавит вас от опасности сдвига, но и обеспечит лучший и долговечный контакт по сравнению с облуженным и постоянно окисляющимся разъёмом GS.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Black_Cat | Дата: Пятница, 14.07.2023, 03:52 | Сообщение # 6 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| 6. Итоговая схема GS v.1.3 со всеми доработками.
Надеюсь :) , что на этом, простенькие модернизации улучшающие функционал GS наконец закончились, и можно логически завершить тему итоговой схемой GS со всеми доработками. Ниже представлена итоговая схема General Sound v.1.3.
Особенности разработки.
В этой схеме я старался не уподобляться коллегам из NedoPC и не прикручивать лишних для GS сущностей, как то SD карта, mp3 плеер, FM радио, DVD проигрыватель, TV тюнер, и ещё много всяких ненужных прибамбасов, которые уже прикрутили, или ещё не успели прикрутить к NeoGS :) . По этой же причине из расширений NGS поддержаны только разряды D5,D7 порта #33, и не поддержан тот ужас, который в NedoPC именуют nedoDMA :) . Тема лишних фичей актуальна и для меня, т.к. я сам в процессе три раза прикручивал и потом удалял разные аппаратные способы сделать блокировки щелчка в колонках при инициации GS, пока в конце-концов не успокоился и не удалил всё окончательно :) , ибо простота - сестра таланта :) , или как говорил Роден в ответ на вопрос "как создать шедевр" - "просто взять мраморную глыбу и отсечь всё лишнее" :) . Этой версии GS мною присвоен номер v.1.3. Для тех, кому интересно почему именно v.1.3, я в теме про исправленную схему оригинальной GS добавил пост с эволюцией развития GS: Версия имеет на 5 корпусов больше чем у оригинала, но в тоже время на 2 корпуса меньше чем у GS v.1.2, реализованой Павлом Рябцовым, обладая при этом большим функционалом, что лишний раз демонстрирует неоптимальность подхода, которым он руководствовался, просто стягивая в одну кучу чужие доработки без их оптимизации и переработки.
Особенности отладки.
Хотя разработчики изначально использовали процессор на 10МГц, разогнанный до 12МГц, реально, для нормальной работы был необходим процессор минимум на 18МГц, который тогда был недоступен. Сейчас такие процессоры доступны, но ввиду тотальной фальсификации китайцами, процессор скорее всего будет в лучшем случае на 10МГц. Схемотехника оригигального GS была неудобна для разгона, т.к. не позволяла произвольно устанавливать частоту процессора, которая была связана с частотой прерываний, что очень ограничивало выбор как процессора, так и его частоты. В данной схеме этот недостаток устранён установкой отдельных генераторов для процессора и для прерывания. Для генератора прерывания используется доступный кварцевый резонатор на 4,8МГц, а для процессора можно выбрать абсолютно любую частоту, на которой он только сможет работать. Так же для облегчения разгона процессора, кардинально уменьшена нагрузка на его шину данных, установкой разделительного буфера.
Особенности эксплуатации.
В отличие от оригинального GS, эта версия будет работать в любом слоте NemoBus, и при этом не будет создавать конфликты на шине. Предусмотрен игольчатый разъём, дублирующий шину NemoBus v.1.2 (линий питания -5В, -12В на шине нет, при необходимости необходимо заводить их через доп. разъём) для параллельного подключения дополнительных усройств.
Внешний интерфейс:
Дополнен портом #33, в котором используются три разряда D4, D5, D7. Это позволило реализовать следующие дополнительные возможности:
1. D7=1 - программный сброс GS, позволяет перезагрузить GS, кроме порта #33, без сброса компьютера (поддержан в NGS).
2. D5=1 - программная блокировка внешнего сброса GS с одновременной блокировкой портов GS и сигнала IORQGE, кроме порта #33. Позволяет перезагрузить компьютер без сброса GS, и без конфликтов с divIDE, индицируется светодиодом VD10. Эта опция позволяет запустить проигрывание музыки на GS, после чего перезагрузить компьютер с загрузкой нужной программы и параллельным проигрыванием музыки в GS.
3. D4=1 - режим паузы, программная остановка GS путём захвата шины, с одновременной блокировкой портов GS и сигнала IORQGE, кроме порта #33. Позволяет прервать работу GS, а потом продолжить с прерванного момента, индицируется светодиодом VD11.
Внутренний интерфейс:
В расширениях памяти оригинального GS, процессору недоступна страница RAM0, поэтому из 2Mb ОЗУ ему доступно только 2016kb. В GS v.1.3 этот недостаток устранён, и процессору доступны все 2048kb ОЗУ, адресуемые разрядами D0-D6 внутреннего порта #00 (теоретически, процессору может быть доступно 4064kb ОЗУ и 32kb ПЗУ), но страница RAM0 заменена на RAM64, а при адресации страниц RAM65-RAM127 будут повторно отображаться страницы RAM1-RAM63, т.к. ОЗУ только 2Mb. Разряд D7=1 порта #00 подменяет ПЗУ GS на страницу RAM64. В отличие от NGS, где существует подобная опция, блокировка возможности записи в RAM64 не предусмотрена, т.к. не существует никаких программ, пишущих в ПЗУ GS, а следовательно и опция такая будет бессмысленна, а тратить аппаратные ресурсы на бессмысленные опции - это не наш путь :) .
Добавлено (22.02.2024, 15:00) --------------------------------------------- Во внутренний интерфейс добавлена возможность процессору GS обращаться не только к ЦАПам громкости, но и к ЦАПам звука как к портам по адресам #FC0E, #FD0E, #FE0E, #FF0E. Кроме того разделена цифровая и аналоговая земля, а так же при сбросе опорное напряжение на ЦАПах зануляется, а потом без скачка плавно восстанавливается.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
RomkaRu | Дата: Суббота, 10.02.2024, 03:21 | Сообщение # 7 |
04h
Группа: Пользователи
Сообщений: 4
Статус: Offline
| Меня интересует, какая прошивка в итоговой схеме GS v.1.3 со всеми доработками?
И еще, как я заметил неточности в схеме: 1. DD10 входы дешифратора ИД3 не соответсвуют распиновке м/с. 2. Куда исчез, если был, конденсатор C15 в цепи DD5 ТМ2? 3. И еще DD5.1 ТМ2 входы триггера /P1 и MA15 не перепутаны? 4. DD9.2 ИД14 выход /RAM1 идет на 12 вывод DD18.4 ЛЕ1?
Схему кто-нибудь повторял?
|
|
| |
Black_Cat | Дата: Четверг, 22.02.2024, 14:56 | Сообщение # 8 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| Цитата RomkaRu ( ) Меня интересует, какая прошивка в итоговой схеме GS v.1.3 со всеми доработками? Та же самая. На перспективу загрузил чуть расширенную схему, где во внутренний интерфейс добавлена возможность процессору GS обращаться не только к ЦАПам громкости, но и к ЦАПам звука как к портам, но в ПЗУ это не поддержано, при желании можете добавить в ПЗУ поддержку :) .
Цитата RomkaRu ( ) И еще, как я заметил неточности в схеме:1. DD10 входы дешифратора ИД3 не соответсвуют распиновке м/с. 2. Куда исчез, если был, конденсатор C15 в цепи DD5 ТМ2? 3. И еще DD5.1 ТМ2 входы триггера /P1 и MA15 не перепутаны? 4. DD9.2 ИД14 выход /RAM1 идет на 12 вывод DD18.4 ЛЕ1? 1. Да, действительно, исправил. 2. Это был артефакт многочисленных изменений. 3. Не перепутаны. 4. Тоже артефакт.
Да, кстати, совсем по Черномырдину, хотел как лучше - выложить схему без несущественных наворотов, но как всегда, по невнимательности выложил не совсем полную схему :) . Сейчас залил схему с наворотами, т.к. нормальной промежуточной уже нет. Там из наворотов из лишних элементов добавлена возможность процессору GS обращаться не только к ЦАПам громкости, но и к ЦАПам звука как к портам, разделена цифровая и аналоговая земля, а так же при сбросе опорное напряжение на ЦАПах зануляется, а потом без скачка плавно восстанавливается. На схеме изменил дату на 01.07.23.
Цитата RomkaRu ( ) Схему кто-нибудь повторял? . Нет, вряд ли сейчас GS в дефиците, тем более на дискретной логике
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
RomkaRu | Дата: Суббота, 24.02.2024, 11:45 | Сообщение # 9 |
04h
Группа: Пользователи
Сообщений: 4
Статус: Offline
| Да, схема стала еще лучше! :) Почему я спросил про прошивку. В описании GS портов написано:
Цитата порт 0 "расширенная память" разряды D0 - D3 переключают страницы по 32Kb страница 0 - ПЗУ разряды D4 - D7 не используются А у вас в схеме по этому порту биты D4 - D6 переключают м/с ОЗУ и бит D7 еще сигнал ROMRAM (как я понял переключение ОЗУ/ПЗУ). Это требует изменение ПЗУ?
|
|
| |
Black_Cat | Дата: Суббота, 24.02.2024, 18:45 | Сообщение # 10 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| Цитата RomkaRu ( ) А у вас в схеме по этому порту биты D4 - D6 переключают м/с ОЗУ и бит D7 еще сигнал ROMRAM (как я понял переключение ОЗУ/ПЗУ). Это требует изменение ПЗУ?
Объём памяти определяется автоматически, по идее программа должна тестировать наличие памяти до первой отсутствующей страницы, т.е. на 65 странице считая от нуля тестирование памяти должно прерваться. Сигнал ROMRAM управляется D7, т.е. соответствует страницам 128-255, которые тестом уже не должны проверяться, т.к. с 65 страницы тест должен прерваться. Т.е. на стандартный функционал GS этот сигнал никак не влияет, но для его использования надо в ПЗУ добавлять доп. функционал.Добавлено (24.02.2024, 23:51) --------------------------------------------- P.S. Правда, у того, что я написал есть один существенный недостаток - я исхожу из предположения, что тест памяти писали не рукожопы, в противном случае боюсь что этот тест остановится только досчитав до 255.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
RomkaRu | Дата: Воскресенье, 25.02.2024, 11:22 | Сообщение # 11 |
04h
Группа: Пользователи
Сообщений: 4
Статус: Offline
| Я понял. Прогнал прошивку в Z80 Simulator. Там перебор страниц идет от 0 до 63. А нужно задействовать еще хотя бы бит D6. Попытаюсь добавить это в прошивку.
|
|
| |
Black_Cat | Дата: Воскресенье, 25.02.2024, 14:01 | Сообщение # 12 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| Цитата RomkaRu ( ) Я понял. Прогнал прошивку в Z80 Simulator. Там перебор страниц идет от 0 до 63. А нужно задействовать еще хотя бы бит D6. Попытаюсь добавить это в прошивку.
Т.е. там вааще просто цикл до 63? :) . Ну тогда просто увеличить до 64. А при использовании вместо ПЗУ страницы ОЗУ в режиме ROMRAM, в ОЗУ64 надо будет грузить модифицированную прошивку для работы со страницами 129-191.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
RomkaRu | Дата: Четверг, 29.02.2024, 08:27 | Сообщение # 13 |
04h
Группа: Пользователи
Сообщений: 4
Статус: Offline
| Цитата Т.е. там вааще просто цикл до 63? :) . Да, но сначала цикл начинается с 63 до 0, а потом обратно от 0 до 63. Поясните, плиз, какое распределение памяти для ПЗУ и ОЗУ со страницами и адресами?
|
|
| |
Black_Cat | Дата: Четверг, 29.02.2024, 14:48 | Сообщение # 14 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| Цитата RomkaRu ( ) Да, но сначала цикл начинается с 63 до 0, а потом обратно от 0 до 63.Поясните, плиз, какое распределение памяти для ПЗУ и ОЗУ со страницами и адресами?
Непонятно нахрена второй раз, ну ладно :) Страницы переключаются в области #8000-#FFFF, вместо RAM0 выбирается всегда ROM, а дальше по порядку RAM1-RAM64. Т.е. надо изменить токо один байт вершины цикла с 63 на 64.
Добавлено (01.03.2024, 04:49) --------------------------------------------- Да, если интересует общая архитектура, то она просто чудовищна :) . Впечатление, что GS делали в качестве курсовика три раздолбая-радиогубителя - студенты четвёртого курса. При том начинали делать за два дня до сдачи, и всё это время не просыхая бухали. Только так можно объяснить весь этот ужОс :) . При том ужОс не токо в архитектуре, но и в схемотехнике, а в программировании, хоть и не смотрел, но уверен, что то же самое :) Нижние 16к адресного пространства занимает нижняя половина ПЗУ, так что полностью ПЗУ можно увидеть токо в страничном окне в верхних 32к. В режиме ROMRAM вместо ПЗУ встаёт страница RAM64. Следующие 16к занимает верхняя половина страницы RAM1. Опять же, нижнюю половину страницы можно увидеть токо в страничном окне, и в GS она как правило из-за этого не используется вааще. Таким образом в GS v.1.0 тупо теряются две страницы RAM0, RAM1.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
|