4-bit Processor

4-битные микроконтроллеры и микропроцессоры (прошлое, настоящее, будущее)

Moderator: Lavr

Александр А.
Senior
Posts: 165
Joined: 25 Jan 2015 11:38
Location: 109.225.59.224

Post by Александр А. »

Можно считать последнюю версию схемы отправной для разводки плат ?
Просто Александр.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Александр А. wrote:Можно считать последнюю версию схемы отправной для разводки плат ?
Пока еще нет... никак не соберусь на последний рывок, чтобы закрыть этот вопрос.
Но все выложенные в открытый доступ варианты - рабочие.
Просто всё не совсем то, чего я в итоге хочу добиться.
iLavr
Александр А.
Senior
Posts: 165
Joined: 25 Jan 2015 11:38
Location: 109.225.59.224

Post by Александр А. »

Вроде бы разобрался. Интересно, может ли машина командовать чем-то сложнее светодиодов.

Заодно прямо в руки упали симпатичные клавишные переключатели от старой вычислительной техники. Пригодятся.
Просто Александр.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Александр А. wrote:Вроде бы разобрался. Интересно, может ли машина командовать чем-то сложнее светодиодов.
Вполне может: лифтом, стиральной машинкой и всем другим, где не надо шибко много математики.
Ибо в оригинальном наборе инструкций только INR и DCR - а значит и сложение/вычитание - в циклах.

Главное, по поводу чего я тут копья ломал, так это нормальные вызовы подпрограмм
и косвенная адресация - этого очень не хватает в простых конструкциях, и что
является очень полезным для таких простых конструкций, на мой взгляд.
iLavr
Александр А.
Senior
Posts: 165
Joined: 25 Jan 2015 11:38
Location: 109.225.59.224

Post by Александр А. »

Вот и хорошо. Будем думать.

В соседней ветке EDUC-8 превосходит этот проект, но сколько там корпусов логики :-? ! Схемы у буржуев это вообще тихий ужас.
Просто Александр.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Александр А. wrote:В соседней ветке EDUC-8 превосходит этот проект, но сколько там корпусов логики :-? !
Схемы у буржуев это вообще тихий ужас.
С учетом того что EDUC-8 урезанный до 8 бит вариант 12-битной PDP-8/S, так что в схеме видны
его атавизмы, всё не так уж проблематично.

Автор EDUC-8 старался опираться на широко доступную элементную базу, поэтому в схеме много
ЛА3, и если опираться на подходящую логику, то схемы там вполне приличные. А с учетом того,
что я не поленился их перерисовать по отечественному ГОСТ-у, то сборка всего проекта достаточно
проста с учетом того, что автор оригинала предусмотрел тестирование поблочно.
iLavr
Александр А.
Senior
Posts: 165
Joined: 25 Jan 2015 11:38
Location: 109.225.59.224

Post by Александр А. »

Медленно вырисовывается конструкция со сменными платами (одна?) и плата передней панели с переключателями, индикаторами и закладками на будущее. И, похоже, кое-где придётся "нищебродить" чуть дальше :lol: ЛА3 и ЛН1 "нищим" просто так не отдают.
Просто Александр.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re:

Post by Lavr »

Lavr wrote:По электрической схеме у меня, наконец, всё срослось!
И даже косвенная адресация получилась, на мой взгляд, нескольно необычно,
но довольно просто и эффективно.
Я Вам скажу честно, когда я наконец понял, что достиг тех схемных решений,
над которыми ломал тут голову, я вдруг ощутил - что тошнит меня уже от этой штуки. :-?

И я дал себе от неё отдых - позволив себе заняться чем-то другим...
Наткнулся я в своём компьютере на эти все материалы, посмотрел, прочитал и понял, что уже не тошнит, а даже интересно! :wink:
И собственный текст читается как чей-то посторонний, а значит к результатам можно теперь относиться критически...

Напомню, чем всё закончилось на предыдущем этапе: я пришел к выводу, что при той же сложности схемы, 8-битный
процессор позволяет сделать схему более эффективной и простой.
Решение, которое теперь положено в основу, это некоторая смесь из EDUC-8 и микро-ЭВМ типа MCS-48 (1816ВЕ48).
От EDUC-8 взята 8-битность и (если хотите и от PDP-8) та мысль, что никаких лишних регистров общего назначения
нам не нужно, раз уж у нас есть память. У MOS 6502, кстати, эта мысль также сквозит.
А от микро-ЭВМ типа MCS-48 (1816ВЕ48) взята мысль уложить КОП+АДРЕС в 2 байта, а не в одно слово, как я пытался ранее.

Аппаратно я достиг косвенной адресации даже проще чем в EDUC-8 - работа над ним мне очень помогла...
А проще вышло, поскольку косвенная адресация реализована не истинно, как в EDUC-8 и PDP-8 - т.е.
"взять адрес из ячейки и записать его в программный счетчик", а несколько более простым схемотехнически
способом, после которого я и понял, что достиг чего хотел, но без сильного усложнения схемы.

На данный момент у меня получилась следующая система команд, которая реализуется аппаратно весьма
просто всем тем аппаратным обеспечением, которое уже было здесь ранее отработано практически.

Image

Как видно - с адресом работает группа команд, для которых старший ниббл первого байта - это КОП (код операции),
а младший ниббл + следующий байт - это адрес 12 бит.
Когда старший ниббл достигает значений E и F - он становится префиксом.
Таким образом получаются два набора префиксных команд: с префиксом E - двухбайтовые, и тут я даже растерялся
от обилия возможностей - сиреневым цветом выделены команды, которые пока не определены... :D

Группа команд с префиксом F - однобайтовые, и тут все вроде уложилось по минимуму.

Image

Флаги для анализа: "нуль", "перенос" и "знак". Аппаратно и "четность" результата анализировать можно,
но тут как раз четность и не влезла в набор команд.

NEG = CMA + INR A - вызывает у меня сомнение в необходимости, но пока оставил...

Если кому-либо эта тема спартански-нищебродского аппаратно, но достаточно удобного для работы
с ним проца всё ещё интересна, готов выслушать все советы, пожелания и критические замечания.


PS. При "утряске" в железо система команд претерпела ряд изменений.
От некоторых команд пришлось отказаться для упрощения аппаратной
реализации.


Регистров всего два: А - аккумулятор, В - буфер считанного из памяти байта.
Они примыкают к АЛУ, но В выполняет еще и ряд функции манипуляции
с адресами.
Р - флаг четности числа, то есть, самый младший бит.
От СМР пришлось также отказаться с целью упрощения. В PDP-8 и EDUC-8 это
делают обычным вычитанием.

Цвета битов кода команды обозначают примерную дешифрацию групп и самих команд.

Image
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Система команд вновь подверглась "перетряске" по мере вписывания её в железо.
Причины таковы, что на сложную команду порой не хватает тактов цикла и приходится
разбить её на две.
Чтобы было понятно, в чем суть, к АЛУ теперь примыкают два регистра: А (аккумулятор)
и В (буфер считанного байта из памяти).
Поэтому операции типа ADD.SEG_ADDR - сложение А с содержимым ячейки памяти
выполняются как:

Code: Select all

LDA.SEG_ADDR;   непосредственная загрузка MEM -> A
LDB.SEG_ADDR;   непосредственная загрузка MEM -> B
ADD_B


Я также переделал АЛУ согласно вот этим соображениям:
viewtopic.php?f=92&t=9386&start=120
и АЛУ сократилось до 11 корпусов!!! :kruto: Это вполне приемлемо для недо-ЦПУ!

Но негативные последствия следующие:
1. нельзя сделать CMP.SEG_ADDR и CPI_BYTE т.к. регистр А при вычитании разрушается.
Г-н Петренко предложил вычитать А из В для этих операций, но это усложняет АЛУ,
которое я так удачно упростил.
Думаю, не будет большим грехом делать CMP и CPI как в PDP-8:

Code: Select all

STA.SEG_ADDR;   непосредственное сохранение A -> MEM
SUI_BYTE 
LDA.SEG_ADDR;   непосредственная загрузка MEM -> A
2. Для упрощения АЛУ я исключил лишние манипуляции с флагом переноса С,
и теперь сложение и вычитание - всегда с учетом флага переноса С, как в 6502.
Но в 6502 это никому не мешало, поэтому для аппаратной простоты так и будет.

Ну и последнее: поскольку команды уже априори двухбайтные (однобайтной будет только
одна группа с префиксом), то неожиданно пришла в голову вот такая упрощающая мысль:
8 однобайтных команд SKIP Х можно заменить одной двухбайтной SKIP_BYTE ,
(где BYTE - флаги).

В результате всё уложилось как на картинке ниже, но вновь остались незадействованные коды
операций. Возможно, следует их использовать в механизме прерываний - над ним я пока не думал.

Хотелось бы услышать комментарии и, возможно, полезные предложения по системе команд.

Image

По вопросу схемы: полной схемы у меня сейчас и у самого нет. Работаю с тремя кусками:
АЛУ, узел микрокоманд, узел адресации. Они похожи на те решения, которые в топике
есть, но "вписывая" в железо команды, схемы приходится "подпиливать" на ходу. :D

Вот моё пожелание добавить INR A, DCR A, не изменяя B - это еще один вентиль в схему АЛУ
и еще одна линия, которой надо управлять посредством микрокоманд.


P.S. Но пока что вся схема предварительно укладывается в количество корпусов, меньшее 90.
Это, собственно, и вызывает мой энтузиазм: сделать лучше, чем EDUC-8/PDP-8 на меньшем
количестве корпусов.


P.P.S. При существующем железе можно добавить ROL и ROR регистра В.
А также IN и OUT - с регистром В, что мне кажется полезным для загрузки/выгрузки побайтной,
если в А - счетчик, не изменяющий состояние В.
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: 4-bit Processor

Post by jdigreze »

Мне вот почему-то подумалось, что пока может быть NOP'ы и оставить? Так вот с ходу сложно представить, чего было бы удобно.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Да я тоже уже склоняюсь к мысли, что может быть NOP'ы и оставить... :(
У 6502 тоже "пустых команд" было с избытком, причем они были даже не NOP'ы! :D
Но просто немного обидно - для 48 команд пришлось вести 2 префикса, и вдруг - NOP'ы и оставить... :-?

Я понимаю, что человеку "постороннему" трудно предложить что-то полезное неожиданно,
но просто я уже столько раз уложил команды в железо, что просто сразу представляю, во
что обходится реализация той или иной команды.

Поэтому "посторонний" взгляд на систему команд мне и нужен - типа как если кто-то смотрит,
как на готовое изделие и видит - не хватает "вот такой полезной команды".

Я вот до последнего момента не предполагал, что 8 однобайтных команд SKIP Х можно заменить
одной двухбайтной SKIP_BYTE, (где BYTE - флаги).
A пришел к такой мысли в личной беседе с г-ном Петренко, хотя он мне советовал SKIP
по любому из 8 битов аккумулятора, типа TEST BIT.

Так что "посторонний отвлеченный взгляд" для меня очень полезен!
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-bit Processor

Post by Shaos »

Может чтение-запись портов ввода-вывода добавить? И позиционировать это как микроконтроллер :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Shaos wrote:Может чтение-запись портов ввода-вывода добавить? И позиционировать это как микроконтроллер :)
Sorry, не сразу заметил...
Так есть уже чтение-запись портов ввода-вывода системе команд:
INP_BYTE
OUT_BYTE

где BYTE - номер порта 0...256, команды работают с аккумулятором.
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 4-bit Processor

Post by Shaos »

Lavr wrote:
Shaos wrote:Может чтение-запись портов ввода-вывода добавить? И позиционировать это как микроконтроллер :)
Sorry, не сразу заметил...
Так есть уже чтение-запись портов ввода-вывода системе команд:
INP_BYTE
OUT_BYTE

где BYTE - номер порта 0...256, команды работают с аккумулятором.
и точно :obye:

P.S. может команды изменения направления отдельных сигналов ввода-вывода сделать как в микроконтроллерах?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 4-bit Processor

Post by Lavr »

Вся неприятность, что вводимые команды должны как бы "вписаться в группу".
А группа - коп_byte .
В противном случае усложняется дешифрация, а этого не хотелось бы... :esad:

P.S. То есть получается такая неприятная вешь - если команда не влезла в свою группу,
от нее либо приходится отказаться, либо выкинуть из группы другую команду.
Это потому как неполностью микрокодовая реализация, частично хардверная.
Чтобы была полностью микрокодовая реализация - надо третье ПЗУ микрокоманд вводить,
а это более неприятно, чем лишний дешифратор.
iLavr