Насчет разницы между CPI/CPIR CPD/CPDR мне это как-то очень подозрительно. Откуда это вдруг процессору известно, что предыдущая выполнявшаяся команда тоже была CPIR или CPDR, а не другая какая-нибудь. (В том смысле, что он ведь их по одной выполняет) Или он держит где-то у себя такой флажок. Или как получается, что он сбрасывает только для CPIR которая только 1 раз отрабатывает, но берет из HL (допустим) в других случаях. Ведь он при повторном исполнении если бы не знал что перед этим тоже была CPIR опять бы его сбросил. С командой CPDR все понятней если CPD ничего не трогает.
Надо бы еще добавить "двойные" тесты, когда после "сброса" или "установки" флажков вполняется сначала CPI, а потом опять CPI или CPIR. Вообще, нужно смотреть все комбинации:
CPI : CPI
CPI : CPD
CPI : CPIR (BC=1)
CPI : CPIR (BC=2)
CPI : CPDR (BC=1)
CPI : CPDR (BC=2)
CPD : CPI
CPD : CPD
CPD : CPIR (BC=1)
CPD : CPIR (BC=2)
CPD : CPDR (BC=1)
CPD : CPDR (BC=2)
CPIR (BC=1) : CPI
CPIR (BC=1) : CPD
CPIR (BC=1) : CPIR (BC=1)
CPIR (BC=1) : CPIR (BC=2)
CPIR (BC=1) : CPDR (BC=1)
CPIR (BC=1) : CPDR (BC=2)
CPIR (BC=2) : CPI
CPIR (BC=2) : CPD
CPIR (BC=2) : CPIR (BC=1)
CPIR (BC=2) : CPIR (BC=2)
CPIR (BC=2) : CPDR (BC=1)
CPIR (BC=2) : CPDR (BC=2)
CPDR (BC=1) : CPI
CPDR (BC=1) : CPD
CPDR (BC=1) : CPIR (BC=1)
CPDR (BC=1) : CPIR (BC=2)
CPDR (BC=1) : CPDR (BC=1)
CPDR (BC=1) : CPDR (BC=2)
CPDR (BC=2) : CPI
CPDR (BC=2) : CPD
CPDR (BC=2) : CPIR (BC=1)
CPDR (BC=2) : CPIR (BC=2)
CPDR (BC=2) : CPDR (BC=1)
CPDR (BC=2) : CPDR (BC=2)
Разумеется HL должен показывать куда-нибудь туда, где A <> (HL) при всех сравнениях (можно вроде бы уже считать, что этот случай эквивалентен последнему выполнению). Из таких тестов можно:
1) получить подтверждение, что такая память у процессора о предыдущей команде есть;
2) узнать, различает ли он 2 команды CPIR : CPIR, CPI : CPI и т.д. или считает их продолжением цепочки. Кстати, можно бы еще для интереса сразу воткнуть что-нибудь нейтральное между и посмотреть еще такие тройные тесты:
CPI : NOP : CPI
CPIR (BC=1) : NOP : CPIR (BC=1)
CPIR (BC=2) : NOP : CPIR (BC=1)
CPIR (BC=2) : NOP : CPIR (BC=2)
3) учитывает ли этот гипотетический флажок две разные команды LDIR действительно по разным адресам как одну длинную команду LDIR.
INI/IND/OUTI/OUTD вместе с R уже не так интересны. А вот CPI/CPIR не очень устраивает. Заодно надо бы подергать HL в разные места памяти, пусть покажет, действительно ли из HL берутся флажки (из HL+1 в смысле?).




Ответить с цитированием