|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
|
Page 1 of 1
|
[ 7 posts ] |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
4-bit Системы команд
Размещаю здесь для обсуждения системы команд 4-битных самодельных ЦПУ, популярных в сети.
Первая - от восьмиразрядного, но автор использовал только старший ниббл.
Titan - The 8 bit TTL Processor
http://marc.cleave.me.uk/cpu/index.htm
Viktor's Amazing 4-bit Processorhttp://www.vttoth.com/vicproc.htmThe 16 machine instructions are as follows: Galactic Electronics Projects - 4 bit CPUhttp://www.galacticelectronics.com/Simple4BitCPU.HTMLBelow is a summary of the available instructions: As you can see, there are 15 instructions shown here instead of 16. One other instruction, FETCH, is used by the micro-instruction logic and should never be used by a program. Gakken GMC-4http://www.jambell.com/GMC-4/The GMC-4 understands about 30 instructions. Of these, 15 are accessed using a single hex value and the remainder are accessed by prefixing a hex value with hex E (i.e. E0 - EF) Program code table: | | | | Code: Code Mnem. Action Result Flag Detail 0 KA K->Ar 0, 1 The pressed key from the hex keypad is saved to the A register. If a key is not pressed, the Flag is set to 1, otherwise it is 0. 1 AO Ar->Op 1 The 7-segment readout displays the value currently contained in the A register. 2 CH Ar<=>Br Yr<=>Zr 1 Exchange the contents of the A and B registers, and the Y and Z registers. 3 CY Ar<=>Yr 1 Exchange the contents of the A and Y registers. 4 AM Ar->M 1 Write the contents of the A register to data memory (memory address is 50 + Y register). 5 MA M->Ar 1 Write the contents of data memory (50 + Y register) to the A register. 6 M+ M+Ar->Ar 0, 1 Add the contents of data memory (50 + Y register) to the A register. If there is overflow, the Flag is set to 1, otherwise 0. 7 M- M-Ar->Ar 0, 1 Subtract the contents of data memory (50 + Y register) from the A register. If the result is negative, the Flag is set to 1, otherwise 0. 8 TIA [ ] [ ] -> Ar 1 Transfer immediate to the A register. 9 AIA [ ] Ar + [ ] -> Ar 0, 1 Add immediate to the A register. If there is overflow, the Flag is set to 1, otherwise 0. A TIY [ ] [ ] -> Yr 1 Transfer immediate to the Y register. B AIY [ ] Yr + [ ] -> Yr 0, 1 Add immediate to the Y register. If there is overflow, the Flag is set to 1, otherwise 0. C CIA [ ] Ar != [ ] ? 0, 1 Compare immediate to the A register. If equal, Flag reset to 0, otherwise set to 1. D CIY [ ] Yr != [ ] ? 0, 1 Compare immediate to the Y register. If equal, Flag reset to 0, otherwise set to 1. E --- --- --- Extended code. See table below. F JUMP [ ] [ ] 1 Jump to the immediate address if the Flag is 1, otherwise just increment the program counter. The Flag is then set to 1. Note that this is an absolute address. That is, JUMP [0] [2] will change the address pointer to hex address 0x02. You can jump both forward and backward in program space. | | | | |
Extended code table.: 4-bit DUO 128 Elitehttp://web.mac.com/teisenmann/iWeb/elitepage/machinecode.html
Если у кого есть материалы и ссылки на другие интересные системы - размещение
их здесь - приветствуется.
|
17 Jun 2011 07:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Simplex-III
http://members.iinet.net.au/~daveb/simplex/simplex.html
Registers
Symbol Function Length
Instruction Format Instructions Where the target of an operation is shown as z, c this means the C (condition) bits are affected, as well as loading a result into z. The instruction assignments are as follows: | | | | Code: Code Mnemonic Function Notes 0 ADD ro + q => ro, c 1 ST ro => q 2 LD q => ro, c 3 XOR ro XOR q => ro, c 4 AND ro AND q => ro, c 5 LCP ro AND q => c ie as 8086 TEST instruction 6 ADS ro + q => q, c 7 SUB ro - q => ro, c 8 CMP ro - q => c 9 JI/JIL q => s See below for side effects A CTS q + 1 => q, c Always 1-byte operand only B SET Set values for operand length, interrupt terminate, etc. C RTL ro + ro => ro, c Add to itself, ie shift left D BC s +/- l => s Direction, and condition set by Ro, Ri bits E LDI l => ro, c F MIR ro + l => rx, c NB Effectively moves Ro to Rx | | | | |
Side effects of the JI/JIL instruction. If Ro=X1, X2, or X3, store S in Ro (ie save subroutine link). Then or otherwise, q => s (indirect jump). If this instruction is executed in interrupt level, BOTH S registers are loaded. Home-Built TTL CPUhttp://cpuville.com/Home-Built TTL CPU is a 16-bit instruction word width. With 16 instructions, this means a 4-bit operation code, and a 12-bit operand:
|
17 Jun 2011 09:38 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В 4-битной системе у нас есть следующие воможности:
16 команд - мы решили было, что такой набор нас функционально не устроит.
Но VituZz внёс следующее предложение:
| | | | Code: По системе команд (если ограничиться 16-ю командами): 0 - MOV A, M - скопировать аккумулятор в память 1 - MOV M, A - скопировать в аккумулятор из памяти 2 - ADD A, M - сложить аккумулятор с памятью 3 - SUB A, M - вычесть из аккумулятора память 5 - OR A, M - A=A И M 4 - AND A, M - A=A ИЛИ M 6 - JNZ M - перейти, если не равно 0 7 - JNC M - перейти, если нет переноса 8 - JMP M - перейти 9 - RLC - сдвинуть влево по кольцу, C в кольце A - RAL - сдвинуть влево по кольцу, C не в кольце B - CALL M - вызвать ПП C - RET - вернуться D - PUSH A - A в стек E - POP A - из стека в A F - NOP - Нет операции M здесь может быть как абсолютный адрес, так и относительный; второе мне кажется предпочтительней. | | | | |
31 команда (с одним префиксом).
46 команд (с двумя префиксами).
В качестве префиксов удобно использовать 0EH, 0FH.
Добавлю здесь для сравнения ещё и систему команд PIC.
И предлагаю определится с системой команд для 4-бит CPU.
Мне лично не хватает PUSH и POP, но при коротком стеке и большом наборе
регистров общего назначения без них обойтись можно, хотя и неудобно...
PS. У PIC-а странное вычтание: аккумулятор из аргумента, а не наоборот, как обычно привыкли...
PPS. Адресацию сразу предлагаю абсолютной, относительная сразу предполагает сумматор с РС.
|
22 Jul 2011 03:17 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В принципе даже схемотехника прототипа даёт нам возможность сделать
инструкции 8-битными:
ОЗУ инструкций
ПЗУ микрокоманд
|
22 Jul 2011 04:02 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 864
|
На соседнем форуме делают эмуляцию дисплея 15ИЭ-00-013, который использовался с компьютерами ДВК, ДВК-2. Мне показалось, что система команд процессора этого дисплея тоже подходит под понятие 4-х битной:
Есть и схема этого дисплея.
Структура системы больше похожа на гарвардскую, т.к. в адресном пространстве процессора только ПЗУ программы. ОЗУ дисплея внешнее, с доступом через порты. А для программы вообще нет ОЗУ, но есть 32 регистра общего назначения, организованные в 2 банка по 16.
Помнится Lavr интересовался, как ему сделать возврат из п/п. Так вот тут сделано, я считаю, достаточно оригинально. Несмотря на то, что АЛУ и акк. у него восьмибитные, регистры тут 12-ти битные, как и счётчик команд. А команда загрузки регистра 8-ми битной константой записывает старшие 4 бита регистра из старших 4-х бит PC. Эти старшие 4 бита регистра используются только в команде JMI.
Таким образом, перед вызовом п/п мы записываем в регистр адрес возврата и переходим на п/п. А возврат осуществляется переходом на адрес в регистре. Что-то подобное и мы обсуждали.
Ещё тут используется пропуск следующей команды в зависимости от условия, как в некоторых микроконтроллерах.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
04 Apr 2013 09:53 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22616 Location: Silicon Valley
|
в пиках вроде бы так и сделаны дальние переходы
|
04 Apr 2013 10:19 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вопрос с возвратом из п.п., как мне показалось, я довольно скромно аппаратно разрешил
для своего поделия...
Но я остался совершенно недоволен индексным доступом. А это, собственно, весьма
важный механизм для той цели, с которой я затеял конструирование своего 4-битника.
И тут мне повернулась под руку вся обширная информация по 6502, которому я ранее
совершенно внимания не уделял.
Поэтому я и занялся сейчас им, поскольку с индексными способами в нём - богато!
И неожиданно 6502 показался мне очень интересным! В нём заложен минимализм,
к которому я схемотехнически стремлюсь.
Но сейчас меня всё подталкивает к отказу от жесткого числа тактов, в команде, как у меня
было изначально запланированно...
Но я на это никак решиться не могу, поскольку это хоть и упрощает микрокод, но снова
ведёт к аппаратному усложнению вокруг ПЗУ микрокоманд.
Многопараметровая и сильно взаимосвязанная вещь - конструкция процессора получается...
В одном месте - сэкономишь, в другом всё распухнет.
Вон я тут задал вопрос итальянцу про размер его программного счетчика - так он
руками замахал - 256 байт ему типа хватает на всё - про всё...
Понятно... даже глядя в 6502, - двумя половинками РС по 4 бита управляться легче,
нежели тремя 4-битными частями РС.
Но у 6502 я хочу как-то позаимствовать главное: раз уж я заложился в конструкции
на 4096 байт ОЗУ - вот его и надо использовать во всю ширь, а не добавлять регистры.
Конечно это прийдется продумать не раз, но есть в идеологии 6502 некая
подкупающая простота. Хотя после Интела он кажется странным...
Наверное, выросшим на 6502 Интел кажется громоздким и неуклюжим...
_________________ iLavr
|
04 Apr 2013 14:17 |
|
|
|
Page 1 of 1
|
[ 7 posts ] |
|
Who is online |
Users browsing this forum: No registered users and 27 guests |
|
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
|
|