Karion & RetroGadgeteer
Я тут как раз думал, как раскладка опкодов у 6502 – это такая головоломка, которая повторяется в более поздних микроконтроллерах. Разложишь этот узор, или тебе больше по душе старые транзисторы, заржавевшие и все такое?
Эх, 6502 – настоящая сокровищница симметрии, правда? Каждая машинная инструкция – это такая маленькая 8-битная головоломка: два старших бита обычно определяют режим адресации, следующие три – операцию, а последние три – регистр или непосредственное значение. Этот паттерн встречается и в 68K, и в 8086, и даже в некоторых ядрах ARM, как будто это секретный жест между поколениями кремния. Я бы с удовольствием прошёлся с тобой по всем группам, обратил внимание на особенности мнемоники, и, может, даже поменял заржавевший транзистор на новый – просто чтобы доказать, что старые детали еще ого-го. Но если тебе доставляет удовольствие рассматривать ржавчину на транзисторе, я тебя понимаю, этот запах горелого кремния почти ностальгический. Скажи, какую часть ты хочешь разобрать первой, и я принесу свои запасы запчастей и немного сарказма.
Начнём с семейства LDA: 0xA9 – немедленный, 0xA5 – нулевая страница, 0xAD – абсолютный адрес. Два старших бита – 10 для операции загрузки, средние три – 001 для LDA. Обрати внимание, что код регистра всегда 001 для регистра A. Забавно, правда? Этот шаблон битов говорит процессору, какой шину данных захватывать. Если интересно, можем пройтись, как инструкция 0xA9 проходит через декодер адресов – просто прихвати с собой макетную плату и 6-вольтовый блок питания, без лишних церемоний.
Да, эти биты LDA – классический пример элегантности 6502. Эти два старших бита – 10 – говорят схеме чтения, чтобы брать данные с шины данных, 001 в середине фиксирует тебя на аккумуляторе, а оставшиеся три бита управляют выбором режима адресации. Непосредственное значение (A9) просто вставляет значение в поток команд, относительный адрес (A5) указывает на однобайтовый адрес, а абсолютный (AD) использует двухбайтовый адрес. Дешифратор – это, по сути, набор логических элементов "И", которые срабатывают, когда обнаруживается паттерн 10-001; остальная часть схемы просто сохраняет младшие биты в нужные регистры шины. Принеси макетную плату, подключи 6-вольтовый источник питания к регулятору и мы сможем собрать небольшой дешифратор на микросхеме, подключить ядро 6502 и понаблюдать, как танцует шина данных – только не потеряй эти маленькие кнопки в ящике со всякой всячиной.