Внутреннее устройство МК. Сделать свой собственный МК

Флейм в чистом виде - все что угодно...
Но - в рамках закона :)
Rokl
Друг Кота
Сообщения: 5232
Зарегистрирован: Пт авг 25, 2006 09:26:19
Откуда: Москва

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Rokl »

КРАМ писал(а):
Rokl писал(а):Z80 тоже 4 битный процессор (имеет 4 битное АЛУ), который используется до сих пор. :)

Это с какого перепуга?
Zilog Z80 - ВОСЬМИРАЗРЯДНЫЙ микропроцессор.

В том вся фишка, что 4 битный проц Z80 быстрее 8 битного I8080.
А Вики в данном случае вас вводит в заблуждение.
Z80 проц по АЛУ 4х битный.
Реклама
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

Вот уже двадцать лет пытаюсь разработать свой процессор. Мечта, так сказать.
И вот на днях, кажется, удалось разработать систему команд.
Немного легенды...
Когда в журнале РАДИО прочёл статью "пишем перемещаемые программы", стал думать, а почему в КР580ВМ80А не имеется встроенных возможностей? (про Z80 я ещё не знал)
Ну, стал пытаться в тетрадке "доработать" систему команд. Так родилась первая мечта иметь "допиленный" ВМ80...

Почему i8080A, а не продвинутый Z80?
Он проще для воспроизведения в эмуляторе и в ПЛИС. Нет ничего лишнего.

Собственно, точную логическую копию ВМ80 я не задумываю. Это лишь подобие клона.
1. Система команд совместима лишь на уровне ассемблера:
1.1. 00 - HLT (а не NOP оригинала), 80 - NOP, FF - RET --- так логичнее и удобнее;
1.2. Команды условного возврата (Rcnd) исключены, их заменяют JR $+1 --- удобно, убедитесь сами;
1.3. Команд JMP/CALL так же нет, без них легко обойтись --- показано ниже;
1.4. Развита работа со стеком, имеются PUSH IW и даже XCHG IP,[SP] --- заменяет тот CALL.
2. ALU должно работать, скорее, как в x86 --- поддержка флагов большинством вычислений:
2.1. Портировать программы с i8080 можно только фрагментами и перебивая с нуля.
3. Думаю, можно ли повысить производительность?
3.1. Работать не по фронтам тактовых импульсах, а на полупериодах (posedge / negedge).
4. Добавить подобие "защищённого" режима:
4.1. Ввести дополнительные указатели команд и стека для системы;
4.2. Добавить генерацию "исключений" по доступу к портам и несуществующих команд.

Зачем это надо?
Думаю, это увлекательно.
Для внутренних проектов.
Есть довольно удачный пример

Предварительный дизассемблер - видно по листингу, насколько легка дешифрация!
Реклама
petrenko
Друг Кота
Сообщения: 5322
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение petrenko »

Paguo-86PK писал(а):...
Почему i8080A, а не продвинутый Z80?
Он проще для воспроизведения в эмуляторе и в ПЛИС. Нет ничего лишнего.*...
*_Вынужден Вас несколько огорчить - лишнего там хватает, увы, а вот кое чего более нужного - как раз не хватает.. ( в т.ч. неабсолютных вызовов и переходов )
Просто у Вас ,видимо, недостаточно информации о других архитектурах ...
Что-нибудь слыхали об TMS9900 ,например ? :roll:
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

petrenko писал(а):*_Вынужден Вас несколько огорчить - лишнего там хватает, увы, а вот кое чего более нужного - как раз не хватает.. ( в т.ч. неабсолютных вызовов и переходов )
Просто у Вас ,видимо, недостаточно информации о других архитектурах ...
Что-нибудь слыхали об TMS9900 ,например ? :roll:
Хм, вроде бы знаком...
Просто я рос и воспитывался на CISC'ах. Начиная с ВМ80 с дальнейщим переходом на ВМ86...

Как я уже сказал, это - хобби и для "внутренних проектов".
Согласитесь, за 20 лет безуспешных набросков, это - первая устойчивая.

1 байт - 172 команды (пересылки, АЛУ, стек);
2 байта - 48 команд (пересылки, АЛУ, короткие Jcnd/Ccnd, средних 16 абсолютных CALL 0000..FFF0 (4096 векторов));
3 байта - 3 команды (PUSH addr, PUSH word ptr [addr], POP word ptr [addr]).

(JMP addr - это две PUSH addr + RET; CALL addr - это две PUSH addr + XCHG [SP],IP;
CALL - два байта - 1001YYYY VVVVVVVV - переход на VVVVVVVVYYYY0000 - кратность 16;
CALL - три байта - 0HHH0HHH 1001YYYY VVVVVVVV - переход на VVVVVVVVYYYYHHH0 - кратность 2)

К тому же, я убеждён, что от неверной расстановки команд зависит не сколько сложность дешифрации, сколько оптимизация алгоритмов. Так:
00 - команда HLT - если указатель команд прыгнет в рандомный адрес с нулями, возникнет останов (исключение);
FF - команда RET - в командах коротких Jcnd с замыканием на самих себя образуется 8 Rcnd и 8 строковых префиксов REPcnd...
Также, короткие CALL с замыканием нас себя - 16 расширенных операций вызова микрокода (DAA, MUL, DIV и т.д.

Итого, 223 команды (+8 Rcnd), 7 префикс-расширителей (около 172 комбинаций)... ~395 команд (~403 команды + 24 расширенных).

К тому же, на уровне ассемблера всё совместимо с i8080 и, как правило, i8086... Поэтому, портировать фрагменты алгоритмов - проще...

Я вот хочу спросить...
Возможно ли, применяя приёмы современных технологий, укоротить цикл? А то операции доступа к памяти очень много тактов требуют (мне удавалось в Verilog укорачивать до 2 тактов)...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение YS »

00 - команда HLT - если указатель команд прыгнет в рандомный адрес с нулями, возникнет останов (исключение);
Правда, пустой FLASH - это чаще всего 0xFF.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение pyzhman »

Человек 20 лет положил, а вы изгаляетесь.
Docendo discimus
Реклама
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

YS писал(а):
00 - команда HLT - если указатель команд прыгнет в рандомный адрес с нулями, возникнет останов (исключение);
Правда, пустой FLASH - это чаще всего 0xFF.
Именно!
Если 00-HLT и FF-RET, при неправильном "прыжке" или срыве стека будет либо возврат, либо останов...
Кстати, я всегда думал об этом и не мог понять, почему у всех процессоров не могли зафиксировать за этими кодами строго эти операции? Это и минимальная совместимость, и минимальная защита.

Ещё если положить LOOP $+1 - получается возврат из подпрограммы, если счётчик отличен от 0...
Это же много недокументированных и не встроенных, но очевидных и 100% рабочих операций.
Если бы в x86-семействе было FF-RET, 74 FF был бы RZ, а E2 FF - RCXNZ и т.д.

Команды, блин, с бодуна они расставляли! Додумались же в 00 пихнуть ADD...

Не согласны со мной?
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение YS »

при неправильном "прыжке" или срыве стека будет либо возврат, либо останов...
Возврат куда? Вы уверены, что адрес возврата в таких условиях будет корректен?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

YS писал(а):
при неправильном "прыжке" или срыве стека будет либо возврат, либо останов...
Возврат куда? Вы уверены, что адрес возврата в таких условиях будет корректен?
Немного теории:
В x86 код FF - комплекс операций (push/pop/inc/dec/call), а код 00 - add al,[eax].
В ВМ80 код FF - RST 7 (call 0038h), а код 00 - nop.
Когда происходит сбой и прыжок на подобные зоны:
В x86 от кода FF можно ждать чего угодно, включая и call; а от 00 - допустить генерацию исключения.
В ВМ80 код FF вызовит подпрограмму, а после - дальше; код 00 - то же самое, но без подпрограммы.

В моём же случае, когда код FF - ret, возврат может быть корректным, а может и нет. В любом случае, процессор будет прыгать рандомно по памяти. А это - нестабильная ситуация. В конце концов наткнётся на 00.

Я думал на эту тему давно.
1. Думаю, можно ввести внутренний флаг валидности подпрограммы. Иными словами, при входе в подпрограмму флаг устанавливается и должна быть хотя бы одна любая операция, кроме FF для сброса этого флага. Затем, ret смотрит на этот флаг. Если сброшен, обрабатывается стандартно. Иначе, генерируется исключение. Всё просто.
Если ret будет выставлять этот флаг, то выполнить 2 операции ret вподряд будет невозможно. Это надо просто учитывать при построении вложенных подпрограмм.

2. Или за флаг можно использовать первый бит указателя стека sp. Так как по-хорошему, указатель стека должен быть выравнен по модулю 2, операции push/pop/call/ret должны вырабатывать исключение, если стек "кривой". Тем самым, программа может проверять, каким образом попал процессор сюда: выходом из подпрограммы или линейно. Тем самым, исключение гарантировано при первом же push/pop/call/ret.

Устойчивые варианты? Мне нравится №2.
Последний раз редактировалось Paguo-86PK Вс мар 29, 2015 20:08:59, всего редактировалось 1 раз.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение YS »

А не лучше сделать 0xFF NOP'ом, чтобы процессор спокойно дошел до конца памяти и перезагрузился, если уж вышел за пределы программы? Или вообще ввести инструкцию аппаратного сброса с опкодом 0xFF.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

YS писал(а):А не лучше сделать 0xFF NOP'ом, чтобы процессор спокойно дошел до конца памяти и перезагрузился, если уж вышел за пределы программы? Или вообще ввести инструкцию аппаратного сброса с опкодом 0xFF.
Вы шутите?
Я хоть и разрабатываю модель "шуточного" процессора, но и забочусь о безопасности тоже. Причём, минимальными затратами.
Тем более делать по FF - сброс? Вы читали о моей "идеалогии"?
Я сказал: Операции, используемые часто, должны иметь короткий код. Так, DAA - редкостная пакость! И clc/stc тоже не часто. Выделяемых под них кучу байтов.

Вы же предлагаете отвести под разовую операцию сброса целых 8 бит опкода??? :shock:
Спойлер
Я думал на эту тему давно.
1. Думаю, можно ввести внутренний флаг валидности подпрограммы. Иными словами, при входе в подпрограмму флаг устанавливается и должна быть хотя бы одна любая операция, кроме FF для сброса этого флага. Затем, ret смотрит на этот флаг. Если сброшен, обрабатывается стандартно. Иначе, генерируется исключение. Всё просто.
Если ret будет выставлять этот флаг, то выполнить 2 операции ret вподряд будет невозможно. Это надо просто учитывать при построении вложенных подпрограмм.

2. Или за флаг можно использовать первый бит указателя стека sp. Так как по-хорошему, указатель стека должен быть выравнен по модулю 2, операции push/pop/call/ret должны вырабатывать исключение, если стек "кривой". Тем самым, программа может проверять, каким образом попал процессор сюда: выходом из подпрограммы или линейно. Тем самым, исключение гарантировано при первом же push/pop/call/ret.

Устойчивые варианты? Мне нравится №2.


Последний раз редактировалось Paguo-86PK Вс мар 29, 2015 23:08:59, всего редактировалось 1 раз.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение YS »

Нет, не шучу, а пытаюсь применить принцип максимизации ошибки (который, как известно, относится к best practices). Если ситуация вышла из под контроля - эффект должен быть максимально заметен и максимально безвреден.

Вы сами говорите, что в вашем случае
процессор будет прыгать рандомно по памяти.
И куда он прыгнет при этом - непонятно, что случится в результате такого прыжка - тоже. Самый логичный выход в том случае, если программа "потерялась" - отослать ее в начало, как по мне. В вашем же случае перемещение точки выполнения окончательно выйдет из-под контроля, причем так, что это может быть не сразу заметно и проявляться как трудновылавливаемый глюк.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
petrenko
Друг Кота
Сообщения: 5322
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение petrenko »

Paguo-86PK писал(а):...

Я вот хочу спросить...
Возможно ли, применяя приёмы современных технологий, укоротить цикл? А то операции доступа к памяти очень много тактов требуют (мне удавалось в Verilog укорачивать до 2 тактов)...
Сударь, хорошо, что Вы не огорчились и знаете другие архитектуры. :)
Ну попробуем тогда Вас удивить, что ли .. :dont_know:
Дело в том, что даже с технологиями конца 1970-ых годов вполне можно достичь {одна команда}=>{одна микрокоманда}>{один цикл} ,да с конвейеризацией. 8)
( Неужели Вы и об военных "буржуинских" разработках осведомлены и не удивитесь ? ... )
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

YS писал(а):Нет, не шучу, а пытаюсь применить принцип максимизации ошибки (который, как известно, относится к best practices). Если ситуация вышла из под контроля - эффект должен быть максимально заметен и максимально безвреден.

Вы сами говорите, что в вашем случае
процессор будет прыгать рандомно по памяти.
И куда он прыгнет при этом - непонятно, что случится в результате такого прыжка - тоже. Самый логичный выход в том случае, если программа "потерялась" - отослать ее в начало, как по мне. В вашем же случае перемещение точки выполнения окончательно выйдет из-под контроля, причем так, что это может быть не сразу заметно и проявляться как трудновылавливаемый глюк.
Я думал на эту тему давно.
1. Думаю, можно ввести внутренний флаг валидности подпрограммы. Иными словами, при входе в подпрограмму флаг устанавливается и должна быть хотя бы одна любая операция, кроме FF для сброса этого флага. Затем, ret смотрит на этот флаг. Если сброшен, обрабатывается стандартно. Иначе, генерируется исключение. Всё просто.
Если ret будет выставлять этот флаг, то выполнить 2 операции ret вподряд будет невозможно. Это надо просто учитывать при построении вложенных подпрограмм.

2. Или за флаг можно использовать первый бит указателя стека sp. Так как по-хорошему, указатель стека должен быть выравнен по модулю 2, операции push/pop/call/ret должны вырабатывать исключение, если стек "кривой". Тем самым, программа может проверять, каким образом попал процессор сюда: выходом из подпрограммы или линейно. Тем самым, исключение гарантировано при первом же push/pop/call/ret.

Устойчивые варианты? Мне нравится №2.


Последний раз редактировалось Paguo-86PK Вс мар 29, 2015 23:08:59, всего редактировалось 1 раз.
Причём, я не готовлю проект в NASA, чтобы надёжность повысить до такой степени :kill:
petrenko писал(а):
Paguo-86PK писал(а):...

Я вот хочу спросить...
Возможно ли, применяя приёмы современных технологий, укоротить цикл? А то операции доступа к памяти очень много тактов требуют (мне удавалось в Verilog укорачивать до 2 тактов)...
Сударь, хорошо, что Вы не огорчились и знаете другие архитектуры. :)
Ну попробуем тогда Вас удивить, что ли .. :dont_know:
Дело в том, что даже с технологиями конца 1970-ых годов вполне можно достичь {одна команда}=>{одна микрокоманда}>{один цикл} ,да с конвейеризацией. 8)
( Неужели Вы и об военных "буржуинских" разработках осведомлены и не удивитесь ? ... )
Тягаться с иженерами Intel, Sun, AMD?

Просто спросил про простейщие приёмы. Самый просто - расширить считываемое слово до 2-4 байтов. Тогда "шагать" по операциям можно методом сдвига... И на простые операции будет уходить, да, по такту...
Как тут?

Разрабатываю Дизассемблер - можно заглянуть внуть. Там всё проще простого.
Дешифрация устроена подобно Verilog для удобности портирования...
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

Не прошло и года...

Итак, как я уже сказал, взял за основу процессор i8080 и полностью реорганизовал таблицу команд.
Написал дизассемблер. Но, как оказалось, дешифратор команд довольно просто доработать от показа мнемоники к непосредственному описанию алгоритма эмуляции каждой из команд.
Хотя, на данный момент многие команд недописаны или глючат. Но, "приветствие" уже пишет адаптированный фрагмент "оконной" печати текста от "РК".

Файл содержит всего 782 строки. Дешифратор работает в "духе" Verilog: Бит 0, бит 1, неопределённость X.(зачем именно так: планирую отладить в js и перенести в Verilog)
Можно убедиться, что всё написал как попало и очень быстро. Однако, работает...
Расчитан под экран 1280x1024.
(ассемблер ещё не делал, но существующий собственный x80-ассемблер легко перестроить под него)

Текущая версия

Процессор реально 8-битный: Команды с 16-битными операндами исключены (jmp/call/lxi).
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

Paguo-86PK писал(а):Не прошло и года...

Итак, как я уже сказал, взял за основу процессор i8080 и полностью реорганизовал таблицу команд.
Написал дизассемблер. Но, как оказалось, дешифратор команд довольно просто доработать от показа мнемоники к непосредственному описанию алгоритма эмуляции каждой из команд.
Хотя, на данный момент многие команд недописаны или глючат. Но, "приветствие" уже пишет адаптированный фрагмент "оконной" печати текста от "РК".

Файл содержит всего 782 строки. Дешифратор работает в "духе" Verilog: Бит 0, бит 1, неопределённость X.(зачем именно так: планирую отладить в js и перенести в Verilog)
Можно убедиться, что всё написал как попало и очень быстро. Однако, работает...
Расчитан под экран 1280x1024.
(ассемблер ещё не делал, но существующий собственный x80-ассемблер легко перестроить под него)

Текущая версия

Процессор реально 8-битный: Команды с 16-битными операндами исключены (jmp/call/lxi).
С нуля переписал основные части. Все команды описываются на одной странице на уровне макро-записей. Эмуляция оптимизирована: Все комбинации команд заранее заносятся в массив и готовы к исполнению непосредственно через eval().
Текущая версия
pcb432
Мудрый кот
Сообщения: 1808
Зарегистрирован: Пт мар 26, 2010 17:16:52
Откуда: Kazan

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение pcb432 »

Вот уже двадцать лет пытаюсь разработать свой процессор. Мечта, так сказать.
И вот на днях, кажется, удалось разработать систему команд.
:shock:
А жизни хватит?
Не до практической реализации, а хотя бы для более менее вменяемой схемы,
хотя бы минимальной документации, понятной некоторой части аудитории.
Да и зачем это, если это никогда не будет воплощено?
Тешить свое самолюбие и на так сказать на закате жизни, доставать с антресолей
пухлую, пыльную папку с пожелтевшими, полуистертыми листочками и бормотать -
осчастливить мог весь мир, интел даже в подметки не годится, но никто меня не понял и т.п.
За следующие хх-цадь лет электроника технологически еще скакнет дальше
и авр и пик будут восприниматься как сейчас 580 процесор.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Леонид Иванович »

Зажрались. Ничего полезного делать уже надо, другие сделают. Да?
Аватара пользователя
a_klyuev
Друг Кота
Сообщения: 3085
Зарегистрирован: Вт дек 25, 2012 14:51:33
Откуда: Санкт-Петербург

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение a_klyuev »

Paguo-86PK, не слушай никого. Допилишь процессор, потом одноименный комп начнешь на ем изобретать. Тут правда, для чистоты замысла нужно будет еще улучшенные варианты ВВ55, ВГ75, ВТ57 изобрести до кучи. Когда и их допилишь, тут уже можно и к "ZX Spectrum 48K" приступать.
Processor not found. Loaded software emulation ......
Аватара пользователя
Paguo-86PK
Опытный кот
Сообщения: 811
Зарегистрирован: Чт авг 19, 2010 23:49:19
Откуда: Ташкент
Контактная информация:

Re: Внутреннее устройство МК. Сделать свой собственный МК

Сообщение Paguo-86PK »

Тихонечко допиливаю свою идею.
в демке: пассивный Ксоникс (тупо чистит экран) и интерактивный Тетрис (реагирует на клавиши курсора)
Так как племянница сравнила таблицу команд с таблицей умножения, пришла мысль навесить на разработку ярлык RISC-процессора, но с поправкой - Rebused Instruction Set Computer. Так как MISC'и тоже имеют несколько понятий. И звучит несколько эзотерично: Компьютер с ребусной системой команд.

На днях нашёл способ организации портов ввода-вывода без ввода специальных команд. Просто взять и все попытки доступа к ячейкам памяти за пределами 64кб обрабатывать за порты.
Помните, проблема x86 с выходом за границы пространства сегмента за 1Мб была решена расширением до 1088Кб. Здесь же похожая ситуация.
На примере Z80 это представляется так: Если IX=0FFFFh, индексная операция LD (IX+$01),A с перескоком на 0000h выставит флаг (в моём случае) переполнения и обеспечит доступ к порту #00.
Особенно со стеком: Если SP=0FFFFh, тот любой POP вернёт не содержимое памяти, а внутреннее состояние (аналог CPUID) с запоминанием позиции. Т.е. 10 POP вернёт 10 служебных слов. При SP=0 команды PUSH также управляют служебными регистрами.
Почему я иду таким путём? Помните, я высказывал собственное недовольство, что некоторые рудиментные x86-операции (AAA, AAS, AAD, AAM и т.д.) практически не используются, а сожрали драгоценные байты системы команд (в x64 всё зачистили, выбросив и INC/DEC)? И многие команды тоже нельзя использовать (CLI, STI, HLT и остальные) прикладному коду. Потому я решил пойти этим путём: Выход к портам доступен через "визовую систему бюрократии" (как в жизни). Доступ к служебным данным (счётчик тактов, регистр отладки, режим "реального i8080" - как в x86) - всё через переполнение стека...

Так же ввёл обратные операции АЛУ:

Код: Выделить всё

   6B|SUB AL,CL ; AL = AL - CL
44 6B|SUB    CL ; AL = CL - AL
Но пока это ещё всё сыро, так как реверсные SUB, SBB и CMP ещё нормально. А вот ADD, ADC, AND, OR, XOR - без эффекта. Пустая трата длины кода. Думаю, ввести на их место в случае реверса команды NXOR, NOR, NAND или такие же операции, но без возврата результата (как в x86 AND и TEST).

Код: Выделить всё

   6C|AND AL,CL ; AL = AL & CL
44 6C|AND    CL ; Flags of (AL & CL) (like x86-TEST)
   6A|ADD AL,CL ; AL = AL + CL
44 6A|ADD    CL ; Flags of (AL + CL) (vs CMP-action)
На счёт ВГ75: Есть мысль упростить её (давненько видел datasheet японского дисплея) и управлять режимами кодом Джонсона:

Код: Выделить всё

i8275 CRT-Controller: Simply version
00000000: Stop/Init - Останов/Сброс
000000nn: -reserved- - Здесь
000001nn: -reserved- - где-то должны
00001nnn: -reserved- - быть команды управления курсором,
0001nnnn: -reserved- - пакетами ПДП и
0010nnnn: -reserved- - чтения позиции светового пера (координат мыши)
0100nnnn: Lines [1..16]-1 - Число линий знакоряда
01nnnnnn: Rows [16..64]-1 - Число знакорядов в кадре <16 бессмысленно
1000nnnn: -reserved-
1nnnnnnn: Cols [16..80]-1 - Число знакомест в кадре <16 бессмысленно
1101nnnn: -reserved- - Также где-то надо сунуть
1110nnnn: -reserved- - управление режимами атрибутов или
1111nnnn: -reserved- - режим 256 символов без атрибутов
(вообще-то есть мысль вынести регистры позиции курсора и кодовых таблиц прямо в пакет ПДП: Расширить буфер кадра на десяток байтов, где просто указывается и позиция курсора, и кодовая страница. без всякого дурацкого программирования портов)

P.S.: Переплюнуть Intel я не берусь. Просто, максимально тщательнее выискав все осечки гигантов индустрии я пытаюсь слепить нечто более "адекватное". :write:
Вот, давно заметил, что номенклатура ЭСЛ-серии полностью индексами совпадает с западной. Как и 580- и 1810-серии. Тогда как ТТЛ и КМОП серии имеют собственные индексы (ЛА3 вместо 7400 и ТМ2 вместо 7474). Я понимаю, что в СССР индексировали, видимо, кто-то "левые" (далёкие от сути). :dont_know:
Но, вот скажите: С бодуна ли в Intel коду 00 в x86 назначили ADD r/m,r8??? :beer:
Вот я "трезво" пытаюсь расставить все команды стройно по полочкам... :idea:
Ответить

Вернуться в «МЯЯЯУ!»