Тихонечко допиливаю
свою идею.
в демке: пассивный Ксоникс (тупо чистит экран) и интерактивный Тетрис (реагирует на клавиши курсора)
Так как племянница сравнила таблицу команд с таблицей умножения, пришла мысль навесить на разработку ярлык 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 я не берусь. Просто, максимально тщательнее выискав все осечки гигантов индустрии я пытаюсь слепить нечто более "адекватное".
Вот, давно заметил, что номенклатура ЭСЛ-серии полностью индексами совпадает с западной. Как и 580- и 1810-серии. Тогда как ТТЛ и КМОП серии имеют собственные индексы (ЛА3 вместо 7400 и ТМ2 вместо 7474). Я понимаю, что в СССР индексировали, видимо, кто-то "левые" (далёкие от сути).
Но, вот скажите: С бодуна ли в Intel коду 00 в x86 назначили ADD r/m,r8???
Вот я "трезво" пытаюсь расставить все команды стройно по полочкам...
