|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Gigatron (компьютер на рассыпухе)
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
| | | | Lavr wrote: Аппаратно устранить эту ситуацию можно двумя затратными способами: первый - укоротить цикл чтения разными RC-цепями, чтобы он влезал точно в такт Gigatron-а, второй - отделить выход SRAM от общей шины с помощью шинных формирователей, то есть: не пускать " хвост" на общую шину по завершению такта чтения. И то и другое требует аппаратного усложнения... | | | | |
Сработали, как ни странно, оба способа: сначала добавил шинные формирователи, но показалось, что глюк кое-где проскакивает, после этого укоротил цикл чтения до 3/4 от оригинала, глюк исчез, но посмотрел сигналы - от импульсов /WR пробивает иголоки на /OE ... Возможно, если их убрать, шинные формирователи будут излишни... P.S. Убрал, шинные формирователи, оставил лишь укороченный цикл чтения: Глюка чтения из памяти нет, хотя иголки по /OE остались. Пусть пока так будет.
_________________ iLavr
|
06 Oct 2020 04:25 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем-то аппаратный недо-стек Gigatron-а практически процентов так на 80 близок к завершению: В стековую область 0100H...01FFH четко заносится адрес возврата, сам стек сохраняется в Zero Page. Глюк, связанный с чтением памяти, я устранил, значит считываться адрес возврата должен без проблем. Осталось кое-что по мелочевке подчистить и будет Gigatron с аппаратным недо-стеком... Недо-стек - поскольку отдельный регистр стека я вводить не стал, его функции там, где это необходимо, выполняет регистр Х, содержимое которого сохраняется в Zero Page.
_________________ iLavr
|
06 Oct 2020 05:03 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А кто-нибуть встречал динамичные не-текстовые игрушки на 2-строчном 16-символьном LCD-дисплее? В LCD можно свои шрифты произвольные загружать и воспроизводить подобие анимации... В Proteus есть такой пример: Рот с палкой, которого они называют "Пэкман" съедает текстовую строку. Я погуглил и нашел одну игрушку такого плана - на Ардуино: Игра называется "Hill Run 2". https://create.arduino.cc/projecthub/PunkyMunky64/lcd-hill-run-v2-runner-game-1b0523Но что-то мне играшка не понравилась... Может кому встречались другие?
_________________ iLavr
|
08 Oct 2020 16:04 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Закончил я аппаратный недо-стек Gigatron-а, на первый взгляд - всё работает корректно, но надо будет протестировать всё на каком-то реальном примере... Пока делал недо-стек, просто забодал меня вот этот тупенький узел Gigatron-а: Как изменишь тактовую частоту - так надо подобрать задержку, иначе - поплыла вся врем Янка... Ясно, что на фиксированной тактовой частоте - это простой способ создать двухфазную последовательность тактовых импульсов, и в Gigatron-е довольно жесткая привязка импульсов CLK1 и CLK2: По фронту CLK1 - начинается такт и на шину выдаётся состояние одного из источников сигнала. По фронту CLK2 - результат операции записывается в один из регистров. За время между фронтами CLK1 - CLK2 должно успеть сработать самодельное АЛУ. И, наконец, по спаду CLK1 - происходит запись в память, а чтение из памяти, как я ранее выяснил всегда надо закончить до конца такта, воизбежание конфликта на шине. В общем, выкинул я этот сомнительный узелок, формирующий CLK1 - CLK2 и приделал нормальный формирователь двухфазной последовательности тактовых импульсов, где все сигналы синхронно привязаны друг к другу: Частоту тактового генератора, правда, пришлось увеличить вдвое, но зато узел позволяет теперь формировать из следующего набора частот: практически любые необходимые синхроимпульсы, что позволило убрать из схемы всякие задержки - аналоги RC-цепей.
_________________ iLavr
|
10 Oct 2020 11:43 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Переделал я эти команды аппаратно следующим образом, вторая группа: Это команды для сохранения РС в стек и сохранения самого временного указателя стека - Х в Zero Page. Команда ST Y,[00,X] к стеку отношения не имеет, просто удобно в схемотехнику легла... Из первой группы команд лишь две команды было сравнительно нетрудно переделать для извлечения из стека адреса возврата: Остальные команды - так и оставил неиспользуемыми... Новая система команд и её аппаратная поддержка полностью совместимы с оригинальным Gigatron-ом, но с помощью новых команд осуществить вызов подпрограммы и возврат из неё существенно проще, нежели чем при чисто программной реализации стека возвратов: Пока заметен один небольшой недостаток этого решения, следующие команды: не должны попадать на границу сегмента, т.к. в этом случае сегмент адреса возврата запишется в стек неверно, и возврат из подпрограммы произойдет не по адресу вызова. Есть одна мысль, как устранить это аппаратно, хотя в принципе это не так уж и страшно для процессора, в котором приходится следить за коротким переходами BRA в пределах сегмента, но попробую устранить этот маленький дефект...
_________________ iLavr
|
10 Oct 2020 14:27 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Не стал я фиксить этот дефект - пусть будет фичей этого процессора. И у оригинального MOS 6502похожие заморочки с пересечением границы сегмента были. Здесь как ни крути, но в момент выполнения JMP программный счетчик никак не указывает на адрес возврата, а указывает на команду после JMP, а её этот процессор в силу особенностей своей архитектуры выполняет сразу же на адресе перехода, и лишь потом сам код по адресу перехода... Поэтому адрес возврата при возврате из подпрограммы приходится корректировать программно. Если группа команд сохранения адреса возврата : находится в одном сегменте, то стек вполне замечательно работает! Собственно за такими мелочами должен следить компилятор ассемблера, ведь даже у х86 компилятор отслеживает адреса коротких JMP, и предупреждает если JMPS out of range. В архиве - проект модели Gigatron-а с аппаратным недо-стеком: Вызовов подпрограмм там достаточно, а игрушку псевдографическую я писать не стал ( хотя в коде есть попытка начать), поскольку на эрзац-ассемблере делать это неудобно, а хобби предполагает, что задача решается с удовольствием. Чтобы не писать длинных простыней, как стек приделан аппаратно, прикладываю также документ, где всё подробно написано: Писал я его сугубо для себя, поскольку если пару дней отвлекешься, уже забываешь, что и как там в проекте сделано, а со временем сейчас напряженно у меня. P.S. На схеме видно, что кнопка "7" зашунтирована переключателем - это для режима пошаговой отладки.P.P.S. А жалко вобще, что я поздно внимание обратил на Gigatron, его перерисовать бы заново, чтобы получился нормальный недо-6502 без ненужных костыликов. Ресурс такой у Gigatron-а есть!
_________________ iLavr
|
11 Oct 2020 14:56 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Обдумываю возможность реконструировать Gigatron в недо-RISC-компьютер принстонской архитектуры, чтобы была возможность исполнять его собственную систему команд из ОЗУ, а ПЗУ команд включить в карту памяти в качестве Монитора, ну или BIOS. В чем смысл этой затеи: на данный момент из 256 команд Gigatron-а по меньшей мере 138 не используют операнд в качестве второго байта. Конечно, стОит учитывать частоту вызова команд в реальной программе, но так или иначе значительный объём ПЗУ команд пустует, поскольку у 138 команд из 256 аргумент чисто фиктивный.
_________________ iLavr
|
17 Oct 2020 07:52 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В общем-то сама идея тут достаточно проста и понятна: если в ПЗУ команды и данные следуют друг за другом, то в том случае, когда декодер команды (в Control Unit) обнаруживает код, которму необходимы данные, то есть, двухбайтную команду, он должен перенаправить строб записи в регистр данных, а у регистра команд строб записи в этот момент заблокировать. Честно говоря, это всё можно уложить в один такт, но есть одно усложняющее обстоятельство. В существующей схемотехнике команда и данные появляются одновременно и за первую четверть такта должно успеть сработать АЛУ, поскольку после первой четверти такта происходит запись результата на выходе АЛУ в один из регистров или аккумулятор. Этого не избежать - данные всегда проходят через АЛУ, даже если надо всего лишь записать их в регистр или память. Запись в память начинается с середины такта, так что временн Ые привязки в такте довольно жесткие. Поэтому я решил ввести дополнительный такт для чтения данных в двухбайтной команде. В этом случае диаграмма по тактам будет следующая: в начале такта код команды фиксируется в регистр команд, программный счетчик РС при этом указывает уже на следующий байт в ПЗУ - следующая команда или данные для текущей команды. Если декодер команды (в Control Unit) обнаружил код, которму необходимы данные ( двухбайтную команду), он блокирует импульсы записи в регистры и ОЗУ, и перенаправляет строб записи в регистр данных. После того, как данное зафиксировано, выполняется обычный такт ЦПУ с этим данным и командой. Аппаратно пришлось несколько схитрить, поскольку " вставить такт" схемотехникески получалось громоздко. И я решил не " вставлять такт", а наоборот - " блокировать ненужный". Схемотехнически получилось весьма просто: Первоначально на выход ПЗУ подключены оба регистра - команд и данных, но запись в них осуществляется через мультиплексор, которым управляет дополнительный D-триггер U8:A, включенный как счетчик до двух. Если ничего не подключить дополнительно, то работать эта схема будет так: четный байт записывается в регистр команд, а нечетный - в регистр данных. Эту логику корректирует детектор двухбайтного кода U7:A ( code detector). Для простоты эксперимента принято, что команды типа xxxx.xx11b - двухбайтные. Поэтому детектор двухбайтного кода запрещает переключаться счетчику U8:A для всех команд, кроме двухбайтных. Поскольку команда типа xxxx.xx11b - каждая четвертая, на осциллограмме видно, что лишь каждый четвертый импульс CLK1 перенаправляется в регистр данных и блокируется для регистра команд. Если внимательно посмотреть проект: то можно увидеть откуда у данной схемы такая необычная фишка: выполнить команду после инструкции перехода JMP, ту, что была прямо за ней по коду. Дело в том, что счетчик типа 74LS161 - полностью синхронный, и когда выполняется команда JMP, на выходе ПЗУ приготовлена уже эта самая следующая команда. Команда JMP выставляет на входы счетчиков адрес перехода и устанавливает разрещение параллельной записи, но счетчик 74LS161 - полностью синхронный, поэтому адрес перехода запишется в него только по фронту CLK1, но этот же фронт защелкнет в регистр команд тот байт, который уже был на готове, то есть байт, непосредственно следующий за командой JMP xxH. Если применить счетчики типа 74LS193 ( 555ИЕ7), а я уже делал это в схеме для регистра Х, то этого эффекта не будет - параллельная запись в счетчик типа 74LS193 - асинхронна, не зависит от тактовых сигналов и имеет над ними преимущество. Другое дело, что совершенно понятно, почему в оригинальной схеме применены счетчики типа 74LS161 - на высокой тактовой частоте 6.25 МГц все 4 счётчика РС переключаются строго одновременно, а счетчики типа 74LS193 - не полностью синхронные: при каскадировании имеют задержку на каждый корпус. Но мне кажется, в данной схеме это непринципиально, поскольку считываем байт из ПЗУ мы всегда при установившемся адресе, и по этому же фронту счетчик увеличивает своё значение - к следующему фронту наверняка уже будет стабильно удерживать адрес.
_________________ iLavr
|
19 Oct 2020 04:11 |
|
|
1N4148
Writer
Joined: 17 Aug 2021 01:10 Posts: 12
|
Всем добра. С интересом прочитал эту тему, но мало что понял, потому как в теории не силен. Но хотелось бы задать несколько вопросов по железу, так как есть у меня плата для Гигатрона, и вот думаю, стоит ли браться за сборку. Был бы признателен получить ответ от квалифицированных специалистов.
1. Микросхемы. В оригинале и в продаваемом наборе использована HCT-серия. Также авторы собрали один экземпляр на советской 555-ой серии, ну и все работает. Однако у меня нет полного комплекта микросхем из одной серии, а получается набрать солянку из HC, HCT, LS, ALS, AC. Заведется ли такой набор? В Спектруме (собирал Harlequin) такой вариант работает, а как здесь? Не будет ли проблем?
2. SRAM. У авторов 62256 с временем доступа 55 нс. У меня есть только 62C256 45 нс. Подойдет ли такая замена?
3. ROM. Подойдет ST M27C1024-10F1 с досупом 35 нс?
4. Проблема найти кварц на 6.25 МГц. Нельзя ли собрать, к примеру, генератор на 25 МГц и использовать делитель на 4?
Заранее благодарю за ответ.
|
17 Aug 2021 02:23 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Безусловно, браться за сборку стОит! Конструкция очень интересная, заодно и опыта наберётесь! Только не делайте популярную глупость: " если есть плата, я воткнул все микросхемы... а оно и не работает!" Собирайте последовательно, поблочно, каждый раз проверяя работоспособность по Proteus-модели. Смешивать серии обычно не рекомендуется, но здесь я не вижу ничего слишком критичного. Железных гарантий дать не могу, но советую начать сборку как я объяснил выше. Естественно, неплохо иметь осциллограф для наладки, вслепую может и не получиться... Подойдёт. Подойдёт. Можно! Не стОит благодарности!... Как шутит один мой близкий друг:" Лучше маленький рубль, чем большое спасибо!"
_________________ iLavr
|
18 Aug 2021 06:02 |
|
|
1N4148
Writer
Joined: 17 Aug 2021 01:10 Posts: 12
|
Постараюсь не делать. Как показывает опыт, собрать конструкцию это лишь половина дела, или даже меньшая ее часть. На запуск и отладку часто уходит больше времени. Я так понимаю, что при смешивании серий нарушается Божественная Гармония, и конструкция начинает стремиться к Хаосу. Однако заметил, что зарубежные коллеги часто вообще не заморачиваются по этому поводу и ставят всё, что под руку попадется. Что ж, поступлю так же. Осциллограф есть, но аналоговый. Теплый ламповый. Кварц вроде нашел, должен отписаться поставщик. Надеюсь обойтись без делителя. Так-то вроде все найду для сборки, но неожиданно всплыла еще одна проблема. Когда собирал Спектрум, то пришлось еще и программатор для прошивки УФ-ПЗУ собрать, Willem. Я что-то был уверен, что 27С1024 он шьет, а оказалось - нет, не шьет. Вернее, может, но только с 16-бит адаптером. Так что теперь и адаптер, видимо, придется собирать Так как рубль я передать не могу, то примите все-таки мою благодарность за развернутый ответ. Гран мерси.
|
18 Aug 2021 07:02 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Божественная Гармония в этом случае совершенно не при чем. У разных серий разные задержки распространения, нагрузочные способности, а порой и логические уровни. Поэтому могут неожиданно вылезти иголки, случиться непредвиденные гонки и т.п. Вот тут как раз всё с точностью до наоборот. Все знают, что смешивать серии не есть хорошо, но это не божественный закон, просто когда ставишь другую серию, следует подумать, к чему это может привести. Gigatron, как и другие любительские компьютеры не полностью синхронный, и иголки в нём точно могут случиться, даже в Proteus-модели это видно. Другое дело, к чему это приведёт? Может безболезненно обойтись, а может проблему создать. Да "аналоговый" - это совсем не порок! Я сам больше люблю аналоговые. Главное, чтобы полоса была хотя бы 10 МГц, ну и не забудьте, что в цифровых схемах на таких частотах желательно щупать щупом 1:10.
_________________ iLavr
|
18 Aug 2021 11:26 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Программатор Willem v.3m выделил в отдельный топик.
_________________ iLavr
|
17 Sep 2021 05:07 |
|
|
1N4148
Writer
Joined: 17 Aug 2021 01:10 Posts: 12
|
Подскажите, а почему авторы выбрали SRAM (LY62256PL-55LLI) с временем доступа именно 55 нс? В DIP-корпусах такие труднодоступны, может, можно заменить на 70 нс?
|
13 Dec 2021 02:44 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я так думаю, что авторы выбрали SRAM (LY62256PL-55LLI) с временем доступа именно 55 нс в DIP-корпусе, потому как для них эти SRAM труднодоступными не были. Тем более, что авторы продавали наборы для сборки Gigatron-а, и очевидно не испытывали трудностей со SRAM. В этом очень легко убедиться самому! Берёте модель Gigatron-а из этого топика, в свойствах SRAM выставляете параметр 70 нс, и смотрите - будет модель работать, или нет...
_________________ iLavr
|
13 Dec 2021 04:56 |
|
|
Who is online |
Users browsing this forum: No registered users and 1 guest |
|
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
|
|