Ynicky, а почему все регистры по сбросу в FF?
Ynicky, а почему все регистры по сбросу в FF?
няз IR тоже надо занулить, а FFFF достаточно AF и SP, остальные не определены
это в случае нормального резета, а то есть еще и "особенный"
http://www.primrosebank.net/computer...cial_reset.htm
Прихожу без разрешения, сею смерть и разрушение...
andrews(12.01.2020), NEO SPECTRUMAN(12.01.2020)
Симулятор вытягивает 10 МГц. Z80 почти готов, ПЗУ стартует, надо клавиатуру прикрутить.
Пока с новыми инструкциями мыслю "ортогонально", не экономя байты, потом буду пытаться уменьшать и ускорять.
"add BC,0x12345678" занимает 8 байт. Такты пока не считаю вообще
Схема "классическая": B, C, вместе BC, плюс старшие байты, 2 штуки.
Инструкции Z80 имеют доступ к B, C, BC. Новые инструкции по умолчанию имеют доступ к 32-битному BC, префиксами можно урезать до 16 и 8 бит. Доступ к регистру B и к старшим байтам буду потом по потребности думать отдельно.
Возник вопрос.
Как назвать 32-битные регистры?
EAA, EBC, EDE, EHL, EIX... (extended)?
WAA, WBC, WDE, WHL, WIX... (wide)?
QAA, QBC, QDE, QHL, QIX... (quad byte)?
Или логично, как в Neon-e:
Код:[S0 S1 S2 S3] [ D0 ][ D1 ] [ Q0 ]
Больше игр нет
я за extended
да и q w менее удобны для набора
- - - Добавлено - - -
вот это выглядит несколько странно
тк у А нет 16 битного....
ну кроме AF
может просто EA ?
ну и нужно думать как работать со 2-м байтом ааAa
который не адресуется ни второй половиной аа
ни средствами старых команд z80
и нужно этот 16битный АА как то обзывать
детекчу у х86 w для обозначения word'
но WA смотрится не очень
ну и нужен какойнить AH...
Последний раз редактировалось NEO SPECTRUMAN; 16.01.2020 в 12:08.
Да там и так куда ни поверни - везде Интел получается
Хочется сохранить названия регистров.
Может.
Там ещё много вопросов по ходу дела...
Надо, наверное, начать ассемблер. Там сразу станет понятно чего не хватает.
Натыкать костылей, запустить, потом думать как сделать по уму.
- - - Добавлено - - -
А вообще зачем нужен этот AH? Ну я ещё понимаю BC использовать как два 8-битных, или EBC как два 16-битных...
Можете пример привести где это потребуется?
Последний раз редактировалось Bolt; 16.01.2020 в 18:40.
а сходу наверно нет
будет затык если понадобится обработать 8 битными командами второй младший байт
который не получится отколупать из 32 битного числа
если подумать роль 16 битного А
выполняет пара hl
может и 32 битные пусть работают только с ebc ede ehl ?
может еще добавить регов
Если народ уже добрался до команд длиной по 8 байт, то есть некоторые способы более компактного кодирования. Будем считать, что адрес и данные имеют разрядность по 16 бит и попробуем запихать в них 4 команды (про байты для примера забудем). Первая идея, это сделать 4 перезагружаемых таблицы и по группе в 4 разряда выбирать команду в длинном формате (или сразу микрокод). Но это много ресурсов и мало толка, поэтому попробуем закодировать команды честно. Сделаем 4x2 устройств, каждое выполняет свою операцию и записывает результат в регистр - он же первый операнд для следующей операции, то есть его кодировать не нужно. Для максимальной ортогональности вторым операндом будет любое из устройств и на его кодирование нужно 3 бита. Последний бит будет будет выбирать какое из двух устройств работает в данном такте, а какое отдыхает. Если вторым операндом оказывается это же устройство, то может выполняться какая-то специальная операция, к примеру обнуление регистра для устройства OR или установка в -1 для AND. Список операций выполняемых устройствами может быть к примеру таким:
SUB1/ADD
SUB2/NOR
LD3/ST
LD4/LDI/JMP(условный)
Операции ADD/SUB добавляют/вычитают что-то к своему регистру, при ссылке на себя каких-то особых действий не требуется. NOR просто пример побитовой операции, вместо него и ADD вполне может оказаться более полезным что-то другое. Операции LD в свой регистр загружают данные из памяти, а адрес берут из указанного в команде регистра, особых действий при ссылке на себя для них тоже не требуется, хотя можно что-то и придумать. Для операции ST не хватает второго операнда, поэтому операнд указывает сохраняемые данные, а адрес будем брать к примеру из SUB1. Дополнительно данные копируются в связанный с ST регистр, на случай если кому-то вдруг опять понадобятся.
Для команды JMP ссылка на себя превращает её в команду LDI которая загрузит следующее слово программы просто как константу. Остальные значения могут, либо указывать один из флагов формируемых устройствами, а адресом берём загруженное LDI. Или флагом всегда будет перенос к примеру из SUB2, тогда адрес перехода можно будет брать из регистров.
Ну а если не экономить биты, то можно к примеру поделить 64 бита на 16 групп по 4 бита, и сделать 16 таблиц по 16 ячеек как в первом варианте. Тогда можно будет выполнять по 16 операций за такт, хотя конечно не все из них будут полезны для вычислений.
Последний раз редактировалось blackmirror; 17.01.2020 в 21:47.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)