nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 11 Dec 2019 21:03



Reply to topic  [ 5 posts ] 
x80 - 8-битный CISC 
Author Message
Fanat
User avatar

Joined: 12 Apr 2011 21:43
Posts: 97
Location: Tashkent
Reply with quote
Сначала я пробовал адаптировать исходные ресурсы готового эмулятора.
Но вскоре написал свой собственный.

Затем используя Icarus Verilog начал разрабатывать с чистого листа.
Облачный x80 хоть и исполняет несколько инструкций, но по листингу можно видеть, что там я запутался.
Всё-таки Verilog я знаю куда хуже, чем стандартные ЯВУ…

Почему-то моделировать схему графически легче, чем Verilog листинг.
Во-первых, масштаб схемы можно изменять и визуально охватывать целиком всё. Это нельзя сделать с листингом, так как текст воспринимается всё же иначе. Даже несмотря на продвинутые редакторы с подсветкой синтаксиса и выделения модулей.
Во-вторых, путь сигнала графически просматривается моментально. Тогда как в листинге именованные проводники, даже с подсветкой, прослеживаются хуже.
В-третьих, проектирования цифровых узлов я освоил в тетрадках ещё в школе. Но обычную радиоэлектронику не одолел, так как цифра - куда проще в плане входа-выхода.
К тому же, программирование я освоил позже, чем сборку цифровых узлов с мигалками и генераторами звука или растра на ТВ.

Идеология
Процессор x80 является подправленным i8080A в плане таблицы команд.
Здесь я описывал задумку. Но, повторюсь…
Байт-код x80 более интуитивно понятный, чем у совместимых процессоров. Прежде всего, для кодирования программ голым дампом, так как ассемблер или Си - роскошь в моём случае.
У x80 код инструкций более прозрачен и шестнадцатеричные нибблы говорят сами про инструкцию.
В отличии от i8080/z80, x80 имеет только 8-битные константы поля операндов инструкции. Команды ветвления только короткие.
Система команд разрабатывалась не в угоду упрощения аппаратной реализации в перспективе, так как в XXI веке достаточно всяческих микроконтроллеров с самой разнообразной архитектурой. И как-то не красиво уже в наше время уродовать систему команд ради укорочения какого-то проводочка где-то в дешифраторе.

Префиксы
Программисту доступно 7 префиксов на прикладном уровне и дополнительный префикс на системном уровне.
Префиксы кодируются насквозь кодами 11h, 22h, 33h, 44h, 55h, 66h, 77h. Это легко запомнить и декодировать аппаратно.
Системный префикс имеет код 00h, что необычно. Для прикладной программы код 00h - операция останова «hlt». Тогда как для операционного кода останов не требуется и открывается восьмой префикс. Это единственная привилегированная операция. Но логически, если приложение прыгнуло в адрес занулённой памяти, то будет однозначный моментальный останов.

Регистры
В состав РОН входят 7 8-битных регистров - AL/BL/CL/DL/BH/CH/DH и ячейка памяти [BX] (аналог M от i8080/z80)..
Имеются и регистровые пары - BX/CX/DX. А также и указатели - SP/BP/SI/DI.
Тем самым, в распоряжении программиста имеется почти весь набор регистров x86.

Прерывания
Имеется 10 инструкций программного прерывания с кодами F0…F9, что легко запомнить.
Они легко расширяются до 80 при помощи префиксов: 11 F0…F9, 22 F0…F9, 33 F0…F9, 44 F0…F9, 55 F0…F9, 66 F0…F9, 77 F0…F9.

Константы
Коды операций 80…BF загружает непосредственную константу в поле операндов инструкции. Аппаратно схему дешифратора это упрощает.
В комбинации с префиксом команда может иметь до трёх байтов:
Code:
   04   |MOV AL,[BX]   ; Загрузка произвольной ячейки памяти в регистр #4
   A4 CE|MOV AL,0xCE   ; Загрузка непосредственной ячейки памяти в регистр #4
55 A4 CE|MOV AL,[BX-50]; Загрузка индексируемой ячейки памяти в регистр #4

Можно заметить, что добавление префикса несильно меняет логику команды.
В отличии от z80 с двумя индексными регистрами IX/IY, здесь за индексный регистр можно указывать любой из 7, почти как в x86.

Ветвления
Кодирование операций ветвлений сквозное и имеет коды BA…BF, что можно читать, например, BC как Branch by Carry.
Размах перехода у этих команд ±127 байтов, но с помощью 7 префиксов размах расширяется до ±1023 байтов.
Чтобы совершить прыжок на абсолютный адрес, необходимо его загрузить в стек и выполнить команду RET.

Постфиксы
В состав команд ветвления входят ситуации, когда команда условного перехода замыкается на себя, провоцируя бесконечный цикл.
Аппаратно на уровне загрузки кода такие случаи исключаются и преобразовываются в особые коды префиксов.
Так, «BC FE» зациклена на себя при переносе - «JC $». Однако дешифратор предотвращает это, генерируя префикс #14.
Тем самым, «BC FE» уже из команды ветвления интерпретируется как «CLC».

Аппаратная реализация
Первоначально может показаться, что аппаратно загружать в буфер инструкции из памяти, предусматривая префиксы, постфиксы и «hlt» как дополнительный префикс в режиме ядра - довольно непросто.
Однако, используя LogiSim, удалось разработать достаточно компактную схему, выполняющую все основные функции по корректной загрузке команды любой длины в буфер:

P.S.: Здесь я тренировался своим RISC, приобретая опыт работы с памятью.
Если активно заниматься проектом, можно воплотить этот x80 в рамках визуального симулятора реального времени LogiSim. Что предоставит некоторый опыт для дальнейшего перевода проекта на уровень Verilog…


Attachments:
File comment: Парсер x80-инструкций
x80-parser.gif
x80-parser.gif [ 482.08 KiB | Viewed 860 times ]


Last edited by Paguo-86PK on 01 Apr 2019 07:17, edited 1 time in total.

30 Mar 2019 04:52
Profile WWW
Fanat
User avatar

Joined: 12 Apr 2011 21:43
Posts: 97
Location: Tashkent
Reply with quote
reserved


30 Mar 2019 04:53
Profile WWW
Fanat
User avatar

Joined: 12 Apr 2011 21:43
Posts: 97
Location: Tashkent
Reply with quote
reserved


30 Mar 2019 04:54
Profile WWW
Fanat
User avatar

Joined: 12 Apr 2011 21:43
Posts: 97
Location: Tashkent
Reply with quote
reserved


30 Mar 2019 04:55
Profile WWW
Fanat
User avatar

Joined: 12 Apr 2011 21:43
Posts: 97
Location: Tashkent
Reply with quote
Практичeски год прошёл…
Так как я запутался в узле управления внешней памятью и здесь это прослеживается на cpu.v в строчках 42…98 приличным бардаком, была мысль подойти к решению этой проблемы со стороны графического дизайна принципиальной схемы. А так как серьёзная OrCAD и весит достаточно серьёзно, имея к тому же уйму багов в графическом редакторе, я решил использовать более простой инструмент - LogiSim.
Здесь я уже построил RISC и узел управления шинами более-менее работоспособный.
Однако, этот узел не применим в моём CISC и требуется заново всё разрабатывать и отлаживать.

Удалось лишь проработать узел регистрации x80-команд.
А именно:
  • IC (Instruction Code) - регистр хранения кода активной команды
  • IB (Instruction Base) - регистр хранения префикса активной команды
  • ID (Immediate Data) - регистр хранения константы активной команды
  • IA (Instruction Align) - регистр опционального выравнивания команды
 "Демонстрация CISC-схемы в LogiSim"

В принципе, можно видеть дешифрацию 21 команды в ASCII-поток под Терминал. Тем самым, получился своеобразный дизассемблер x80-команд, выполненный на аппаратном уровне с помощью трёх ПЗУ малой ёмкости. Где основная хранит обозначение мнемоники, правая хранит коды управления выборкой операндов, а нижняя ПЗУ хранит имена регистров, операций АЛУ и индексы.
Тем самым, ничего не мешает перепрошить ПЗУ уже под микрокод, а Терминал заменить исполнительным узлом управления регистрами, стеком и памятью. Правда, тогда схема разрастётся уже за пределы экрана и не будет пригодна для наглядного визуального охвата её работы в открытом виде, без упакованных модулей.

Таким образом, с помощью простого LogiSim я прощупываю пути к корректному логическому описанию моего x80 средствами Verilog, так как в LogiSim можно оперативно прервать работу схемы в любой момент и изучить всё состояние схемы в деталях, внося коррекцию без перезапуска. Тогда как в Verilog я, как разработчик, обязан чётко понимать по диаграммам что где должно переключаться в такой-то момент. А это для меня слишком затруднительно на моём текущем уровне владения Verilog.


Attachments:
File comment: Необходимые файлы для симуляции аппаратного дизассемблера x80-инструкций.
x80-logisim.zip [16.18 KiB]
Downloaded 15 times
14 Oct 2019 08:31
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 5 posts ] 

Who is online

Users browsing this forum: No registered users and 2 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

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.