Есть ли какой-то шаблон в макете кода операции z80?

Я пытаюсь написать эмулятор для z80, и мне интересно, есть ли какой-либо конкретный макет кода операции (т.е. все ли инструкции ld имеют определенный бит). Я просмотрел здесь, но если есть признаки закономерности, я не еще не нашел.

Есть? Если есть, приведите несколько примеров.


person S.S. Anne    schedule 21.04.2019    source источник
comment
Связанная документация является шаблоном. Что именно вы ищете и почему?   -  person Progman    schedule 21.04.2019
comment
Я надеялся на какой-то способ оптимизации. Например, если во всех инструкциях X к значению Z добавляется номер регистра Y, и если Y одинаков для каждой инструкции, я мог бы легко реализовать эмулятор и уменьшить размер кода. Как бы то ни было, мне придется выполнять каждую инструкцию вручную.   -  person S.S. Anne    schedule 21.04.2019
comment
Я не в состоянии дать полноценный ответ, но да, есть много шаблонов. Например, для ld [reg8],[reg8] код операции — %01xxxyyy, где xxx соответствует первому операнду, а yyy — второму. b=000, c=001, ..., l=101, (hl)=110 и a=111. Исключением является halt, который равен 76 и соответствует ld (hl),(hl). Это может быть более полезным для вас: tutorials.eeems.ca/ASMin28Days/ref/z80is. html   -  person Zeda    schedule 22.04.2019
comment
Эта страница ссылается на это.   -  person Alexey Frunze    schedule 22.04.2019
comment
Благодарю вас! Эти ссылки полезны.   -  person S.S. Anne    schedule 22.04.2019


Ответы (1)


Вы правы, есть закономерность. Эта страница:

http://www.z80.info/decoding.htm

объясняет кодировку различных инструкций Z80, как документированных, так и недокументированных.

Например, инструкция ld c, d кодируется как LD r[y], r[z] с полем x (два старших бита) кода операции, установленным в 1, и трехбитными полями y и z (биты 3-5 и 0-2 соответственно). к 1 и 2.

Чтобы дать вам пример того, как это можно реализовать в эмуляторе, вот ссылка на мою реализацию декодера: z80.h.

person Ivan Kosarev    schedule 12.05.2019