Дешифрация кода команды CPU
Moderator: Lavr
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Я вот смотрю, все кто делает самодельный ЦПУ для совместимости с имеющимся
софтом добиваются совместимости с 6502 и ПК "Коммодор".
Согласен с таким решением - сильно всё упрощает.
Я хочу попробовать добиться совместимости с 8080 хотя бы частично,
то есть задейстовать хотя бы 32 команды, похожие на RISC, но чтоб было
совпадение по коду.
Начал прикидывать вариант дешифратора кода команды. Казалось мне что всё
там логично, когда, к примеру, команды разбираются программно в эмуляторе,
а тут выписал их побитно, сгруппировал какие биты за что отвечают, и что-то
не вижу явной логики - по какому признаку коды разбить на группы.
Кто-нибуть решал подобную задачу?
PS. Также, судя по всему, под управлением этого процессора (6502) работает главный злодей в фильме "Терминатор". Это заметно, когда показывается картинка "глазами робота": при этом на экране, помимо прочей информации, отображается область с листингом ассемблерной программы, содержащим характерные для 6502 команды. Удивительно, на что способен 6502, если его хорошенько разогнать!
софтом добиваются совместимости с 6502 и ПК "Коммодор".
Согласен с таким решением - сильно всё упрощает.
Я хочу попробовать добиться совместимости с 8080 хотя бы частично,
то есть задейстовать хотя бы 32 команды, похожие на RISC, но чтоб было
совпадение по коду.
Начал прикидывать вариант дешифратора кода команды. Казалось мне что всё
там логично, когда, к примеру, команды разбираются программно в эмуляторе,
а тут выписал их побитно, сгруппировал какие биты за что отвечают, и что-то
не вижу явной логики - по какому признаку коды разбить на группы.
Кто-нибуть решал подобную задачу?
PS. Также, судя по всему, под управлением этого процессора (6502) работает главный злодей в фильме "Терминатор". Это заметно, когда показывается картинка "глазами робота": при этом на экране, помимо прочей информации, отображается область с листингом ассемблерной программы, содержащим характерные для 6502 команды. Удивительно, на что способен 6502, если его хорошенько разогнать!
Last edited by Lavr on 19 Jan 2011 12:39, edited 1 time in total.
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
Возможны следующие варианты:
D7 D6
- делят на 4 группы команд (можно сказать однотипных)
D5 D4 D3
- регистр, где данные модифицируются
- регистровая пара (D5 D4) в этом случае D3 будет относиться к коду операции
- код условия в командах перехода, вызова процедур или возврата
D2 D1 D0
- регистр, откуда берутся данные
- код операции
Есть, конечно, и исключения из правила, когда все 8 бит это код операции.
D7 D6
- делят на 4 группы команд (можно сказать однотипных)
D5 D4 D3
- регистр, где данные модифицируются
- регистровая пара (D5 D4) в этом случае D3 будет относиться к коду операции
- код условия в командах перехода, вызова процедур или возврата
D2 D1 D0
- регистр, откуда берутся данные
- код операции
Есть, конечно, и исключения из правила, когда все 8 бит это код операции.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
Можно заметить ещё особенности:
команды вида 11ххх00х выбирают из стека (исключение PCHL и SPHL)
команды вида 11ххх10х кладут в стек (ещё правда и 11ххх111)
команды 11ххххх0 (кроме 11ххх110) выполняются по условию
команды 11ххх010 и 11ххх100 имеют двухбайтовый аргумент - новое значение PC (переход), ещё правда и 1100х011 и 11хх1101
в командах 00ххх110 и 11ххх110 есть однобайтовый аргумент для АЛУ
АЛУ используется в 10хххххх и 11ххх110
в командах 00хххх11 и 11хххх11 бит D3 участвует в коде операции
брать SP или PSW решается одним из старших двух бит команды
Можно созерцать таблицу команд до бесконечности
команды вида 11ххх00х выбирают из стека (исключение PCHL и SPHL)
команды вида 11ххх10х кладут в стек (ещё правда и 11ххх111)
команды 11ххххх0 (кроме 11ххх110) выполняются по условию
команды 11ххх010 и 11ххх100 имеют двухбайтовый аргумент - новое значение PC (переход), ещё правда и 1100х011 и 11хх1101
в командах 00ххх110 и 11ххх110 есть однобайтовый аргумент для АЛУ
АЛУ используется в 10хххххх и 11ххх110
в командах 00хххх11 и 11хххх11 бит D3 участвует в коде операции
брать SP или PSW решается одним из старших двух бит команды
Можно созерцать таблицу команд до бесконечности

Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
http://bashkiria-2m.narod.ru/
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Чтобы не быть голословным, я вот такую таблицу созерцаю до посинения пупа.
Я как раз по D7,D6 поделил её на четыре части, а вот дальше...
С исключениями тут, кажется, сложнее, чем с правилами.
(адреса и аргументы 0000Н и 00Н приписаны, чтоб столбец кодов можно было компильнуть для проверки)
PS. Таблицу сократил, т.к. всё разобрали.

Code: Select all
;-------------------------------
No HEX BIN COD
;-------------------------------
000 00H 0000.0000b NOP
.....
063 3FH 0011.1111b CMC
;-------------------------------
064 40H 01_00.0_000b MOV B,B
....
127 7FH 01_11.1_111b MOV A,A
;-------------------------------
128 80H 1000.0_000b ADD B
....
191 BFH 1011.1_111b CMP A
;-------------------------------
192 C0H 1100.0000b RNZ
....
255 FFH 1111.1111b RST 7
;-------------------------------
С исключениями тут, кажется, сложнее, чем с правилами.
(адреса и аргументы 0000Н и 00Н приписаны, чтоб столбец кодов можно было компильнуть для проверки)
PS. Таблицу сократил, т.к. всё разобрали.
Last edited by Lavr on 19 Jan 2011 09:06, edited 1 time in total.
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
2_HardWareMan:
Моцк свой иногда включай и читай об чем сабж...
Разрешаю, так и быть, тебе юзать твою таблицу до пенсии, речь не об ней,
хотя её все видели, когда ты ещё в кружок не умел ходить...
http://sgu-wap.narod.ru/PIC8080/KP580BM80A.htm Да :3
ДАЛЕЕ - ПО САБЖУ: дешифратор кода команды
Если регистрам A, B, C, D, E, H, L, M соответствуют коды 7, 0, 1, 2, 3, 4, 5, 6, то
лучше всего закономерность работает здесь:
Чуть хуже здесь - одно исключение:
Моцк свой иногда включай и читай об чем сабж...
Разрешаю, так и быть, тебе юзать твою таблицу до пенсии, речь не об ней,
хотя её все видели, когда ты ещё в кружок не умел ходить...
http://sgu-wap.narod.ru/PIC8080/KP580BM80A.htm Да :3
ДАЛЕЕ - ПО САБЖУ: дешифратор кода команды
Если регистрам A, B, C, D, E, H, L, M соответствуют коды 7, 0, 1, 2, 3, 4, 5, 6, то
лучше всего закономерность работает здесь:
Code: Select all
;---10-OPER-REG---------------
10_00.0_REGb - ADD REG
10_00.1_REGb - ADC REG
10_01.0_REGb - SUB REG
10_01.1_REGb - SBB REG
10_01.1_REGb - SBB REG
10_10.0_REGb - ANA REG
10_10.1_REGb - XRA REG
10_11.0_REGb - ORA REG
10_11.0_REGb - CMP REG
Code: Select all
;-------MOV-REG--REG --------------------
01_00.0_000b MOV REG,REG
118 76H 01_11.0_110b HLT (MOV M,M) - исключение!!!
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
В нулевой части D7,D6=00 логика более сложная, но фактически без исключений!!! Группы схожих кодов операций выбираются по D2 D1 D0. Регистровую пару, регистр и направление передачи, или команду определяют D5 D4 D3. Логика при этом совершенно прозрачная!!!
Если регистрам A, B, C, D, E, H, L, M соответствуют коды 7, 0, 1, 2, 3, 4, 5, 6,
а регистровым парам B, D, H, SP - 0, 1, 2, 3, то
Осталась последняя группа - 11...
Если регистрам A, B, C, D, E, H, L, M соответствуют коды 7, 0, 1, 2, 3, 4, 5, 6,
а регистровым парам B, D, H, SP - 0, 1, 2, 3, то
Code: Select all
;---------00------COD-----------
00_XX.X_000b NOP
00_RP_0_001b LXI RP,
00_RP_1_001b DAD RP
00_RP_0_010b STAX RP
00_RP_1_010b LDAX RP
00_10_0_010b SHLD 0000
00_10_1_010b LHLD 0000
00_11_0_010b STA 0000
00_11_1_010b LDA 0000
00_RP.0_011b INX RP
00_RP.1_011b DCX RP
00_RE.G_100b INR REG
00_RE.G_101b DCR REG
00_RE.G_110b MVI REG,
00_FU.N_CODb FUN___
00_00.0_111b RLC
00_01.0_111b RAL
00_00.1_111b RRC
00_01.1_111b RAR
00_10.0_111b DAA
00_11.0_111b STC
00_10.1_111b CMA
00_11.1_111b CMC
;-------------------------------
Last edited by Lavr on 23 Oct 2011 04:13, edited 3 times in total.
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Последняя часть D7,D6=11 разбивается на группы схожих кодов операций по D2 D1 D0.
Дешифрация местами менее приятная, но вполне закономерная.
b2m - спешыал тэнкс!!! Очень своевременно подтолкнул!!! 
Дешифрация местами менее приятная, но вполне закономерная.
Code: Select all
;---------11------COD-----------
xx
Z=00
C=01
PO/PE=10
P/M=11
p
N=0
Y=1
11_00.0_000b Rpxx
11_RP.0_001b POP RP
COD
11_00.1_001b RET
11_01.1_001b RET; DB 0D9H
11_10.1_001b PCHL
11_11.1_001b SPHL
xx
Z=00
C=01
PO/PE=10
P/M=11
p
N=0
Y=1
11_00.0_010b Jpxx
CO.D
11_00.0_011b JMP 0000
11_00.1_011b JMP ;DB 0CBH
11_01.0_011b OUT 00H
11_01.1_011b IN 00H
11_10.0_011b XTHL
11_10.1_011b XCHG
11_11.0_011b DI
11_11.1_011b EI
xx
Z=00
C=01
PO/PE=10
P/M=11
p
N=0
Y=1
11_00.0_100b Cpxx
11_RP.0_101b PUSH RP
11_xx.1_101b CALL
CO.D
11_00.0_110b ADI 00H
11_01.0_110b SUI 00H
11_10.0_110b ANI 00H
11_11.0_110b ORI 00H
11_00.1_110b ACI 00H
11_01.1_110b SBI 00H
11_10.1_110b XRI 00H
11_11.1_110b CPI 00H
11_NN.N_111b RST NNN
;---------11--------------------

-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
на 589 серии "электроника т3-29" - обсуждалось недавно в форуме - доволно красивая по тем временам.
так-же был учебный курс книжек (брошурок) по компьютерам - там были учебные стенды по основным процессорам, и один из примеров - микропрограммный процессор на 589 серии, исполнящий команда 580 процессора.
По поводу процессора на рассыпухе: я начинал изучать ЭВМ с "Электроника-100/16и" - таже самая Э60 как раз на рассыпухе - практически все на 155 серии - причем мелкой интеграции.
так-же был учебный курс книжек (брошурок) по компьютерам - там были учебные стенды по основным процессорам, и один из примеров - микропрограммный процессор на 589 серии, исполнящий команда 580 процессора.
По поводу процессора на рассыпухе: я начинал изучать ЭВМ с "Электроника-100/16и" - таже самая Э60 как раз на рассыпухе - практически все на 155 серии - причем мелкой интеграции.
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
aav8 - благодарю, Т3-29 у меня была и остатки по сей день есть.aav8 wrote:"электроника т3-29" - обсуждалось недавно в форуме
А вот эти брощюрки у меня есть - надо взглянуть, что-то я не припомню проaav8 wrote:учебный курс книжек (брошурок) по компьютерам - там были учебные стенды по основным процессорам
процессор на 589 серии, исполнящий команды 580 процессора.
Но за ссылку спасибо.
По поводу процессора на рассыпухе: целью того, что я пытаюсь здесь сделать -
процессор на очень доступной рассыпухе как можно ближе совместимый с 8080,
но тем не менее простой для изготовления.
ЮТ-88 меня в своё время разозлил - его позиционировали как САМЫЙ ПРОСТОЙ
КОМПЬЮТЕР.
Когда я увидел схему - хотел сжечь этот подлый журнал за обман...
Временами мне думается, что любительское компьютеростроение могло начаться
в СССР вовсе не с "Микро 80".
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
RISC-CISC
Где-то я читал, что подавляющее большинство команд i8080 - характерны для RISC-процессора, то есть короткие команды типа регистр-регистр, регистр-память. К сообществу CISC этот процессор притягивают команды работы с ячейкой памяти как с регистром. Это команды работы с псевдорегистром М. Но - не все. Так MOV A,M и MOV M,A это по сути LDAX H и STAX H - вполне RISC-команды, а вот INR M, DCR M, ADD M, SUB M и т.д. которые модифицируют М непосредственно - характерные CISC-команды.
Значит необходимо откинуть из системы команд i8080 весь комплект CISC-команд. И посмотреть, что еще можно сократить до минимума.
Попробуем придержаться следующих требований:
Главными требованиями архитектуры RISC являются:
1. Любая операция должна выполняться за один такт.
2. Система команд должна содержать минимальное количество наиболее часто используемых команд одинаковой длины.
3. Операции обработки данных реализуются только в формате регистр-регистр. Обмен между регистрами и памятью выполняется только командами загрузки-записи.
В дальнейшем эти требования были несколько смягчены. Выполнение команды за один такт стало трактоваться, как загрузка конвейера команд в темпе "команда за такт". Набор команд современных RISC-процессоров возрос.
Незыблемым для архитектуры RISC остается только требование: обработка данных ведется только командами в формате регистр-регистр.
Среди других особенностей RISC архитектур следует отметить:
наличие достаточно большого файла РОНов (32 и более регистров),
для обработки используются трехадресные регистровые команды,
команды регистр/память используются только для загрузки (Ld) РОН из памяти и сохранения (ST) содержимого РОН в памяти,
как следствие упрощения команд, использование аппаратной, а не микропрограммной логики выполнения команд.
А вот PUSH и POP - RISC-команды?
Значит необходимо откинуть из системы команд i8080 весь комплект CISC-команд. И посмотреть, что еще можно сократить до минимума.
Попробуем придержаться следующих требований:
Главными требованиями архитектуры RISC являются:
1. Любая операция должна выполняться за один такт.
2. Система команд должна содержать минимальное количество наиболее часто используемых команд одинаковой длины.
3. Операции обработки данных реализуются только в формате регистр-регистр. Обмен между регистрами и памятью выполняется только командами загрузки-записи.
В дальнейшем эти требования были несколько смягчены. Выполнение команды за один такт стало трактоваться, как загрузка конвейера команд в темпе "команда за такт". Набор команд современных RISC-процессоров возрос.
Незыблемым для архитектуры RISC остается только требование: обработка данных ведется только командами в формате регистр-регистр.
Среди других особенностей RISC архитектур следует отметить:
наличие достаточно большого файла РОНов (32 и более регистров),
для обработки используются трехадресные регистровые команды,
команды регистр/память используются только для загрузки (Ld) РОН из памяти и сохранения (ST) содержимого РОН в памяти,
как следствие упрощения команд, использование аппаратной, а не микропрограммной логики выполнения команд.
А вот PUSH и POP - RISC-команды?
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
А у 6502 декодирование команд куда как прощще...
http://ru.wikipedia.org/wiki/MOS_Technology_6502
Поэтому самодельные процессорщики в той или иной мере повторяют 6502.

Code: Select all
XXXYYYZZ
└┬┘└┬┘└┤
│ │ └── Группа команд
│ └───── Режим адресации
└──────── Код команды
Поэтому самодельные процессорщики в той или иной мере повторяют 6502.
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Уважаемый aav8!!! Вы совершенно правы!!!aav8 wrote:микропрограммный процессор на 589 серии, исполняющий команда 580 процессора

Сколько лет у меня эта книжка, а вторую главу не читал никогда…

Интересно, что год выпуска - 1988.Особенностью микроЭВМ УМПК-589, построенной на основе секционированных БИС МПК серии К589, является реализация на микропрограммном уровне системы команд микропроцессора К580ВМ80 и формирование внешних магистралей, совместимых с УМПК-80.
С.74.
Я в новогодние праздники общался с друзьями, с которыми ВУЗ заканчивал. Все они электронщики до сих пор. И задвинул я им вот эту мысль, что любительская компьютеризация СССР могла бы начаться вовсе не с "Микро-80", а скажем, с простого процессора на мелкой логике - всё равно конструкция монструозная. А они мне возразили, что - нет. И сказали, что "Микро-80" - это просто массовая реклама и возникший ажиотаж. Люди старше нас, которых ты, Лавр, хорошо знаешь (сказали мне), вполне успешно и без лишнего шума делали те же контроллеры и микропроцессорные устройства, в частности, на 589-й серии. Возможно и сама концепция "персональной ЭВМ" не была тогда столь популярной. Других интересов и забот хватало.
PS. Только вот микрокодов в этой книжке никто не приложил...

-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Что-то тормоз у меня какой-то получается...
Если сделать привязку к кодам К580ВМ80 - схемотехника дюже
усложняется...
Если привязаться к своей системе команд, ну пусть дешифруются
хотя бы вот так:
схемотехника проще, но совместимости программной никакой...
Криво-компромиссный метод: систему команд сделать свою, но
написать кросс-транслятор ассемблера 8080, чтобы хоть какой-то
софт подходил - не писАть же всё заново?
Если сделать привязку к кодам К580ВМ80 - схемотехника дюже
усложняется...
Если привязаться к своей системе команд, ну пусть дешифруются
хотя бы вот так:
Code: Select all
XXXYYYZZ
└┬┘└┬┘└┤
│ │ └── Группа команд
│ └───── Режим адресации
└──────── Код команды
Криво-компромиссный метод: систему команд сделать свою, но
написать кросс-транслятор ассемблера 8080, чтобы хоть какой-то
софт подходил - не писАть же всё заново?
-
- Maniac
- Posts: 287
- Joined: 05 Nov 2008 19:47
- Location: 81.28.208.238
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Собственная компактная система команд приводит к довольно простой схемотехнике ЦПУ,aav8 wrote:можно не придумывать как реализовать в железе систему команд какого-либо процессора, а загружать нужный микрокод.
в случае, если делаем всё только на мелкой логике.
Но тогда получается вещь в себе, для которой нет ПО.
Единственный видимый компромисс - написать кросс-транслятор для тех
программ, что есть в исходных текстах.
ЦП с загружаемой системой команд, выполненный на мелкой логике представляется мне слишком обширным схемотехнически.