С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Да, я, кажется, в курсе: Все эти конвейеры, суперскалярности и пр…
Речь идёт именно о чистом 8-битном CISC (без суперскалярного RISC-ядра внутри).
И, теоретически, его на ИМС ТТЛ собрать можно.
Конечно, он будет побольше схемы того же «Микро-80», но, как можно заметить, архитектура - масштабируема в обе стороны: Можно выполнить и с 4-разрядными РОН на К1533ИР39…
GCC ещё в прошлом веке компилировал для виртуальной машины с 4G регистров, а потом отображал виртуальные регистры на физические, а что не влезло -- на стек. Сейчас в любом ведрофоне Dalvik с той же концепцией. А зачатки -- это ещё доисторический ископаемый SPARC, а точнее -- Berkeley RISC Machine, скоро полвека ей ужё будет.
Историю надо знать.
абсолютно НЕ важно какая разрядность и вид команд - от слова СОВСЕМ. к примеру кеш-память применяли как минимум в 70г.
Сейчас я над этим и работаю (в зомби-режиме - жарко очень), так как Гугл-Силикон пока ещё принимает заявки…
А с другой стороны, как бы там ни было, а тема посвящена именно Концептуальному Процессору!
Т.е. процессор разрабатывается именно как с дружелюбным машинным кодом, в стиле WYSIWYG (что видите - то имеете) жанра "Акына" (что вижу - то и пою)…
Он, процессор, не задумывался для полёта в космос.
А задумывался так, чтобы даже домохозяйка могла бы разобраться в нём.
(Правда, префиксы и маргиналы как-то уж сильно всё подзапутали, но концепцию не нарушают.)
Только в свете новых открытий (маргиналов и безразмерного регистрового файла) ещё JavaScript-эмулятор подтянуть надо, так как это какой-то «8-битный мэйнфрейм» получается (привет, CRAY!)…
P.S.: Те, кто «в теме» (дамп-кодирования) - поймут и тему подхватят…А большего и не ожидается…Код:0000 DD D3 08 3F LEA D3,TEXT 0005 F8 18 INT F818 0007 00 HLT 0008 48 45 4C 4C 4F 00 TEXT: DB "HELLO",0
Эмулятор на BASH: BashEmu.zip
(Клавиша F7 - строчный ассемблер)
Последний раз редактировалось Alikberov; 04.07.2023 в 08:05. Причина: закачал эмулятор на BASH
Те, кто «в теме» (дамп-кодирования) - поймут и тему подхватят…Для тех, кто дружит с Raspberry Pi и его богатым периферийным интерфейсом, был написан черновой вариант эмулятора на BASH: BashEmu.zipКод:0000 DD D3 08 3F LEA D3,TEXT 0005 F8 18 INT F818 0007 00 HLT 0008 48 45 4C 4C 4F 00 TEXT: DB "HELLO",0
Конечно, эмулятор ещё не отлажен и не полный. Но базовые принципы понять позволяет.
- F1 - Справка
- F2 - Режим "классический" и "стандартный"
- F3 - Один шаг эмуляции/отладчика
- F4 - Редактор дампа ОЗУ (встроенный)
- Shift+F4 - редактор дампа файла ПЗУ (внешним hexcurse)
- F5 - Сброс эмуляции
- F6 - Исполнение кода до команды HLT
- F7 - Строчный ассемблер с записью кода команды на текущую позицию IP
Ограниченно и с глюками поддерживает указатели и маргиналы.
Но, как понимаете, Bash - не среда для разработки подобных эмуляторов: Следует использовать Python хотя бы.
Эмулятор писался с целью глубокого изучения самого Bash для большего его освоения.
murgatroid_79(10.07.2023)
Благодаря расширению доступности нейросетей DeepSeekChatGPT в этом году удалось концептуально продвинуться.
Прежде всего, нейросеть подобрала наиболее подходящее наименование архитектуры.
WYSIWISC - What You See Is What It Should Compute (Что Видите, То Вычисляете)
Аналогично WYSIWYG, но более низкого фундаментального уровня.
И помогла упаковать всё описание процессора в шаблон:Можно заметить, что в отличии от множества известных архитектур (INTEL, MOTOROLA, SUN), которые так кратко не уместишь в описательный шаблон, здесь WYSIWISC описывается практически полностью (за исключением префиксов).Код:Условные сокращения: 1. io = 0xio, где i, o — BCD. 1.1. HLT/JMP (= 0x00). 1.1.1. Без префикса: IP → D0, IP ← 0x0000 (вызов БСВВ). 1.1.2. С префиксом `#Di+o`: D0 ← IP, IP ← Di+o (JMP). 1.2. Префиксы `#Di+o` (`[Di+o]`) (≠ 0x00). 2. TS = 0xTS, где T, S ∈ {0xA, 0xB, 0xC, 0xD}. 2.1. TR = TS, но S ≠ T. 2.2. TN = TS, но S = T. 3. Tn = 0xTn допускается после TS, если T совпадает с T из TS. 3.1. Tm = Tn Tn ... допускается после TS, если T совпадает с T из TS. 3.2. Выбирает T за основной операнд. 4. Rn = 0xRn допускается после TS, если R ≠ T из TS. 4.1. Rm = агрегация Rn Rn ... допускается после TS, если R ≠ T из TS. 4.2. Загружает R в основной операнд. 5. vF → Загружает Nv в T, если контекст TN. 5.1. wF = агрегация vF vF ... → Загружает Nw в T, если контекст TN. 6. vF → Сохраняет T в Rv, если контекст TR. 7. vU = 0xnU, где v — BCD, U ∈ {0xA–0xE}. 7.1. v → индекс S в контексте TS. 7.2. если T в TS = A и Rn = A0, U → {INC, DEC, CLR, SET, EOR} 7.3. если S в TS = A, 0U → {INC, DEC, CLR, SET, EOR} с условием CF 7.4. в остальных случаях U → ADC, SBB, AND, OR, EOR Архитектура: 1. Регистр A0 → PSW. 1.1. Биты 0, 1, 2, 3 → флаги ZF/DF, CF, VF/BF, NF/AF. 1.1.1. Без префикса - управление флагами. 1.1.1.1. 0xCE → CLC (Carry Erase) 1.1.1.2. 0xCF → CMC (Carry Flip) 1.1.1.3. 0xAE → CLA (Absolute Erase) 1.1.2. С префиксами - управление потоком. 1.1.2.1. 0x12 0xCE → JNC #D1+2 1.6. Не операнд АЛУ. 1.6.1. TS = AX, Rn = A0 → vU унарная (INC, DEC, CLR, SET, NOT). 1.6.2. TS = XA → 0U условная унарная (INC, DEC, CLR, SET, NOT). 2. Регистр D0...D9 2.1. Регистровые пары B0C0...B9C9 Стек: 1. Реализуется пользователем, указатель — любой удобный регистр. 2. D0 ← IP при JMP/HLT, подпрограммы должны сохранять D0. 3. RET = JMP #D0+1.
С кодированием префиксов нейросеть так и не смогла справиться, хотя логика там не такая сложная (онлайн вариант и для эмулятора DELEGATE.RKR.zip).
Но, нейросеть помогла подобрать условному термину маргиналы более понятный - делегаты.
Делегат
Говоря простым языком,делегат - это удалённый префикс, который подставляется в текущую инструкцию по ссылке, адресуемой любой регистровой парой.
Нейросеть как бы и понимает общие принципы работы делегатов, но не может в своём опыте (БД) найти нечто подобное в известных ей десятках архитектур.Код:90 90 80 80 76 54 32 10 00 DEF 98#D7+D5+D3+D1+6420 LEA D98,[<D7+D5+D3+D1+6420>] 12 34 56 78 90 A1 MOV #D1+D3+D5+D7+D9+24680,A1 MOV [D1+D3+D5+D7+D9+24680],A1 90 90 80 80 A2 MOV 98#,A2 MOV [<D7+D5+D3+D1+6420>],A2 90 90 80 80 12 34 56 78 90 A3 MOV 98#D1+D3+D5+D7+D9+24680,A3 аналогично MOV ES,D98 и MOV ES:[D1+D3+D5+D7+D9+24680],A3 90 90 80 80 12 34 56 78 90 CE JNC 98#D1+D3+D5+D7+D9+24680 MOV PSW,[<D7+D5+D3+D1+6420>] и JNC #D1+D3+D5+D7+D9+24680
Рассмотрим на примерах:
- «HLT #D7+6» → «JMP #D7+6» → Останов текущей цепочки инструкций с ветвлением на вектор
- «HLT 8#D7+6» → «DEF 8#D7+6» → Операция останова работает как предопределение регистра - «D8 = IP»
- «HLT 8#» → «DBG 8#» → Операция останова работает как прерывание на отладку удалённой инструкции
- «MOV A9,#D7+6» → «MOV A9,[D7+6]» → Чтение ячейки локальной памяти
- «MOV A9,8#» → «MOV A9,[CALL D8]» → Чтение ячейки по вектору, который предопределил «DEF» (аналогично «DBG», но выполняется только префикс)
- «MOV A9,8#D7+6» → «MOV A9,D8:[D7+6]» → Обращение к сегменту глобальной памяти
В общем, понять более-менее можно, думаю.
P.S.: Как видите, всё достаточно необычно и нейросеть спотыкается по любому пустяку. Просит показать ей 100500 примеров как надо и как не надо кодировать, чтобы обучиться данной архитектуре.
Электроника КР-03; ZX-Spectrum "Ленинград-48"; Atari-130XE; Поиск-1...
andrews(12.06.2025)
Как это ни странно, в рамках поисков внеземных цивилизаций как раз и начиналась разработка прототипа данного процессора.
Начнём с самого простого: Инструкции с машинным кодом 0x00:То есть, в большинстве архитектур нулевой код несёт предсказуемое поведение процессора, за исключением x86 с его ADD
- i8080 / z80 - NOP (вполне очевидное и интуитивно понятное соответствие)
- i8086 / x86 - ADD (соответствие вообще не очевидно)
- MOS 6502 - BRK (вполне очевидное и интуитивно понятное соответствие)
- MIPS - NOP (вполне очевидное и интуитивно понятное соответствие)
- MOS 68000 - неопределённая инструкция / исключение (вполне очевидное и интуитивно понятное соответствие)
После просмотра фильма "День независимости", а позже - Трансформеров с их эпическим заявлением, что современные процессоры - тупо копируются с инопланетных
Я задумался, а какой могла быть система кодирования инструкций в идеальном случае?
- Исключаем "эзотерику битовых полей"
- Расставляем инструкции в таблице стройными блоками
- Делаем акцент на интуитивное понимание кода
Как представитель цивилизации Планеты Земля с бытовой десятичной системой счисления, я разработал дешифратор команд именно с основанием 10 и получил шесть блоков инструкций:
- CTX - Селектор контекста
- REG - Селектор регистра
- FLG - Управление флажками
- ALU - Операции АЛУ
- HLT/INT - Программное прерывание
- DLG - Делегаты / Префиксы вектора
Тем самым, вся суть идеи основывалась на том, чтобы сделать пародию на Java-машину, но которая управляется кодированием почти на человеческом языке.
(Прототип в Logisim стабильно работал и вполне соответствовал данной парадигме.)
Ведь индустриально мы давно преодолели практические трудности построения ЭВМ и пора бы задуматься об эстетики машинного кода.
P.S.: Теоретически, такой машинный код не стыдно показать и Искусственному Интеллекту, так как красивее в индустрии не имеется.
Однако, нынешнее поколение нейросетей обучается именно на уродливом индустриальном кодировании и не готовы принимать машинный код эстетически.
Электроника КР-03; ZX-Spectrum "Ленинград-48"; Atari-130XE; Поиск-1...
DeepSeek хорошо работает как помощник и интересный инструмент в умелых руках. Вопрос только в том, что когда Вы ее чему-то новому научите не станет ли это доступно всем?
Кстати DeepSeek довольно хорошо умеет писать кросс-ассемблеры и простые консольные симуляторы. Другое я пока не успел попробовать.
Последний раз редактировалось andrews; 12.06.2025 в 13:18.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)