4-bit Processor
Moderator: Lavr
-
- Senior
- Posts: 165
- Joined: 25 Jan 2015 11:38
- Location: 109.225.59.224
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
-
- Senior
- Posts: 165
- Joined: 25 Jan 2015 11:38
- Location: 109.225.59.224
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Вполне может: лифтом, стиральной машинкой и всем другим, где не надо шибко много математики.Александр А. wrote:Вроде бы разобрался. Интересно, может ли машина командовать чем-то сложнее светодиодов.
Ибо в оригинальном наборе инструкций только INR и DCR - а значит и сложение/вычитание - в циклах.
Главное, по поводу чего я тут копья ломал, так это нормальные вызовы подпрограмм
и косвенная адресация - этого очень не хватает в простых конструкциях, и что
является очень полезным для таких простых конструкций, на мой взгляд.
iLavr
-
- Senior
- Posts: 165
- Joined: 25 Jan 2015 11:38
- Location: 109.225.59.224
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
С учетом того что EDUC-8 урезанный до 8 бит вариант 12-битной PDP-8/S, так что в схеме видныАлександр А. wrote:В соседней ветке EDUC-8 превосходит этот проект, но сколько там корпусов логики!
Схемы у буржуев это вообще тихий ужас.
его атавизмы, всё не так уж проблематично.
Автор EDUC-8 старался опираться на широко доступную элементную базу, поэтому в схеме много
ЛА3, и если опираться на подходящую логику, то схемы там вполне приличные. А с учетом того,
что я не поленился их перерисовать по отечественному ГОСТ-у, то сборка всего проекта достаточно
проста с учетом того, что автор оригинала предусмотрел тестирование поблочно.
iLavr
-
- Senior
- Posts: 165
- Joined: 25 Jan 2015 11:38
- Location: 109.225.59.224
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re:
Наткнулся я в своём компьютере на эти все материалы, посмотрел, прочитал и понял, что уже не тошнит, а даже интересно!Lavr wrote:По электрической схеме у меня, наконец, всё срослось!
И даже косвенная адресация получилась, на мой взгляд, нескольно необычно,
но довольно просто и эффективно.
Я Вам скажу честно, когда я наконец понял, что достиг тех схемных решений,
над которыми ломал тут голову, я вдруг ощутил - что тошнит меня уже от этой штуки.![]()
И я дал себе от неё отдых - позволив себе заняться чем-то другим...

И собственный текст читается как чей-то посторонний, а значит к результатам можно теперь относиться критически...
Напомню, чем всё закончилось на предыдущем этапе: я пришел к выводу, что при той же сложности схемы, 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 - т.е.
"взять адрес из ячейки и записать его в программный счетчик", а несколько более простым схемотехнически
способом, после которого я и понял, что достиг чего хотел, но без сильного усложнения схемы.
На данный момент у меня получилась следующая система команд, которая реализуется аппаратно весьма
просто всем тем аппаратным обеспечением, которое уже было здесь ранее отработано практически.

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

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

Флаги для анализа: "нуль", "перенос" и "знак". Аппаратно и "четность" результата анализировать можно,
но тут как раз четность и не влезла в набор команд.
NEG = CMA + INR A - вызывает у меня сомнение в необходимости, но пока оставил...
Если кому-либо эта тема спартански-нищебродского аппаратно, но достаточно удобного для работы
с ним проца всё ещё интересна, готов выслушать все советы, пожелания и критические замечания.
PS. При "утряске" в железо система команд претерпела ряд изменений.
От некоторых команд пришлось отказаться для упрощения аппаратной
реализации.
Регистров всего два: А - аккумулятор, В - буфер считанного из памяти байта.
Они примыкают к АЛУ, но В выполняет еще и ряд функции манипуляции
с адресами.
Р - флаг четности числа, то есть, самый младший бит.
От СМР пришлось также отказаться с целью упрощения. В PDP-8 и EDUC-8 это
делают обычным вычитанием.
Цвета битов кода команды обозначают примерную дешифрацию групп и самих команд.

iLavr
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: 4-bit Processor
Система команд вновь подверглась "перетряске" по мере вписывания её в железо.
Причины таковы, что на сложную команду порой не хватает тактов цикла и приходится
разбить её на две.
Чтобы было понятно, в чем суть, к АЛУ теперь примыкают два регистра: А (аккумулятор)
и В (буфер считанного байта из памяти).
Поэтому операции типа ADD.SEG_ADDR - сложение А с содержимым ячейки памяти
выполняются как:
Я также переделал АЛУ согласно вот этим соображениям:
viewtopic.php?f=92&t=9386&start=120
и АЛУ сократилось до 11 корпусов!!!
Это вполне приемлемо для недо-ЦПУ!
Но негативные последствия следующие:
1. нельзя сделать CMP.SEG_ADDR и CPI_BYTE т.к. регистр А при вычитании разрушается.
Г-н Петренко предложил вычитать А из В для этих операций, но это усложняет АЛУ,
которое я так удачно упростил.
Думаю, не будет большим грехом делать CMP и CPI как в PDP-8:
2. Для упрощения АЛУ я исключил лишние манипуляции с флагом переноса С,
и теперь сложение и вычитание - всегда с учетом флага переноса С, как в 6502.
Но в 6502 это никому не мешало, поэтому для аппаратной простоты так и будет.
Ну и последнее: поскольку команды уже априори двухбайтные (однобайтной будет только
одна группа с префиксом), то неожиданно пришла в голову вот такая упрощающая мысль:
8 однобайтных команд SKIP Х можно заменить одной двухбайтной SKIP_BYTE ,
(где BYTE - флаги).
В результате всё уложилось как на картинке ниже, но вновь остались незадействованные коды
операций. Возможно, следует их использовать в механизме прерываний - над ним я пока не думал.
Хотелось бы услышать комментарии и, возможно, полезные предложения по системе команд.

По вопросу схемы: полной схемы у меня сейчас и у самого нет. Работаю с тремя кусками:
АЛУ, узел микрокоманд, узел адресации. Они похожи на те решения, которые в топике
есть, но "вписывая" в железо команды, схемы приходится "подпиливать" на ходу.
Вот моё пожелание добавить INR A, DCR A, не изменяя B - это еще один вентиль в схему АЛУ
и еще одна линия, которой надо управлять посредством микрокоманд.
P.S. Но пока что вся схема предварительно укладывается в количество корпусов, меньшее 90.
Это, собственно, и вызывает мой энтузиазм: сделать лучше, чем EDUC-8/PDP-8 на меньшем
количестве корпусов.
P.P.S. При существующем железе можно добавить ROL и ROR регистра В.
А также IN и OUT - с регистром В, что мне кажется полезным для загрузки/выгрузки побайтной,
если в А - счетчик, не изменяющий состояние В.
Причины таковы, что на сложную команду порой не хватает тактов цикла и приходится
разбить её на две.
Чтобы было понятно, в чем суть, к АЛУ теперь примыкают два регистра: А (аккумулятор)
и В (буфер считанного байта из памяти).
Поэтому операции типа 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 корпусов!!!

Но негативные последствия следующие:
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
и теперь сложение и вычитание - всегда с учетом флага переноса С, как в 6502.
Но в 6502 это никому не мешало, поэтому для аппаратной простоты так и будет.
Ну и последнее: поскольку команды уже априори двухбайтные (однобайтной будет только
одна группа с префиксом), то неожиданно пришла в голову вот такая упрощающая мысль:
8 однобайтных команд SKIP Х можно заменить одной двухбайтной SKIP_BYTE ,
(где BYTE - флаги).
В результате всё уложилось как на картинке ниже, но вновь остались незадействованные коды
операций. Возможно, следует их использовать в механизме прерываний - над ним я пока не думал.
Хотелось бы услышать комментарии и, возможно, полезные предложения по системе команд.

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

Вот моё пожелание добавить INR A, DCR A, не изменяя B - это еще один вентиль в схему АЛУ
и еще одна линия, которой надо управлять посредством микрокоманд.
P.S. Но пока что вся схема предварительно укладывается в количество корпусов, меньшее 90.
Это, собственно, и вызывает мой энтузиазм: сделать лучше, чем EDUC-8/PDP-8 на меньшем
количестве корпусов.
P.P.S. При существующем железе можно добавить ROL и ROR регистра В.
А также IN и OUT - с регистром В, что мне кажется полезным для загрузки/выгрузки побайтной,
если в А - счетчик, не изменяющий состояние В.
iLavr
-
- God
- Posts: 1388
- Joined: 02 Jan 2006 02:28
- Location: Abakan
Re: 4-bit Processor
Мне вот почему-то подумалось, что пока может быть NOP'ы и оставить? Так вот с ходу сложно представить, чего было бы удобно.
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: 4-bit Processor
Да я тоже уже склоняюсь к мысли, что может быть NOP'ы и оставить...
У 6502 тоже "пустых команд" было с избытком, причем они были даже не NOP'ы!
Но просто немного обидно - для 48 команд пришлось вести 2 префикса, и вдруг - NOP'ы и оставить...
Я понимаю, что человеку "постороннему" трудно предложить что-то полезное неожиданно,
но просто я уже столько раз уложил команды в железо, что просто сразу представляю, во
что обходится реализация той или иной команды.
Поэтому "посторонний" взгляд на систему команд мне и нужен - типа как если кто-то смотрит,
как на готовое изделие и видит - не хватает "вот такой полезной команды".
Я вот до последнего момента не предполагал, что 8 однобайтных команд SKIP Х можно заменить
одной двухбайтной SKIP_BYTE, (где BYTE - флаги).
A пришел к такой мысли в личной беседе с г-ном Петренко, хотя он мне советовал SKIP
по любому из 8 битов аккумулятора, типа TEST BIT.
Так что "посторонний отвлеченный взгляд" для меня очень полезен!

У 6502 тоже "пустых команд" было с избытком, причем они были даже не NOP'ы!

Но просто немного обидно - для 48 команд пришлось вести 2 префикса, и вдруг - NOP'ы и оставить...

Я понимаю, что человеку "постороннему" трудно предложить что-то полезное неожиданно,
но просто я уже столько раз уложил команды в железо, что просто сразу представляю, во
что обходится реализация той или иной команды.
Поэтому "посторонний" взгляд на систему команд мне и нужен - типа как если кто-то смотрит,
как на готовое изделие и видит - не хватает "вот такой полезной команды".
Я вот до последнего момента не предполагал, что 8 однобайтных команд SKIP Х можно заменить
одной двухбайтной SKIP_BYTE, (где BYTE - флаги).
A пришел к такой мысли в личной беседе с г-ном Петренко, хотя он мне советовал SKIP
по любому из 8 битов аккумулятора, типа TEST BIT.
Так что "посторонний отвлеченный взгляд" для меня очень полезен!
iLavr
-
- Admin
- Posts: 24011
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: 4-bit Processor
Может чтение-запись портов ввода-вывода добавить? И позиционировать это как микроконтроллер 

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: 4-bit Processor
Sorry, не сразу заметил...Shaos wrote:Может чтение-запись портов ввода-вывода добавить? И позиционировать это как микроконтроллер
Так есть уже чтение-запись портов ввода-вывода системе команд:
INP_BYTE
OUT_BYTE
где BYTE - номер порта 0...256, команды работают с аккумулятором.
iLavr
-
- Admin
- Posts: 24011
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: 4-bit Processor
и точноLavr wrote:Sorry, не сразу заметил...Shaos wrote:Может чтение-запись портов ввода-вывода добавить? И позиционировать это как микроконтроллер
Так есть уже чтение-запись портов ввода-вывода системе команд:
INP_BYTE
OUT_BYTE
где BYTE - номер порта 0...256, команды работают с аккумулятором.

P.S. может команды изменения направления отдельных сигналов ввода-вывода сделать как в микроконтроллерах?
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: 4-bit Processor
Вся неприятность, что вводимые команды должны как бы "вписаться в группу".
А группа - коп_byte .
В противном случае усложняется дешифрация, а этого не хотелось бы...
P.S. То есть получается такая неприятная вешь - если команда не влезла в свою группу,
от нее либо приходится отказаться, либо выкинуть из группы другую команду.
Это потому как неполностью микрокодовая реализация, частично хардверная.
Чтобы была полностью микрокодовая реализация - надо третье ПЗУ микрокоманд вводить,
а это более неприятно, чем лишний дешифратор.
А группа - коп_byte .
В противном случае усложняется дешифрация, а этого не хотелось бы...

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