Virtual Worlds
#01
31 декабря 1999 |
|
Ассемблер - Z80 Flags: недокументированные комманды процессора Z80.
┌────────────────────────────┐ │ ░▒▒▓▒▓█ Z80-Flags. █▓▒▓▒▒░ │ └────────────────────────────┘ (C) Unknown (текст взят из спектрумовской конференции fido7.zx.spectrum) Есть еще один неосвещенный участок в процессоре Z80, кото- рый оказывает свое влияние на некоторые программы, например Sabre Wulf, Ghosts'n Goblins и Speedlock. Это недокументирован- ные флаги! Биты 3 и 5 флагового регистра F не используются. Hо они могут содержать информацию и она может быть использована, поскольку су- ществуют такие очевидные коман- ды, как PUSH AF и POP AF. Hо, тем не менее, иногда все-таки содержимое этих флагов изменяет- ся. Я нашел следующее эмпиричес- кое правило: Значения битов 7,5,3 повторяют значения соответствующих битов последнего 8-битного результата инструкции, которая меняла обыч- ные флаги. Например, после команды ADD A,B эти биты будут идентичны би- там в регистре A. Бит 7 регистра F - это знаковый бит и он, ес- тественно, по определению всегда следует этому правилу. исключе- нием является команда CP x (где x - регистр или (HL) или прямой аргумент). В этом случае биты копируются не с результата, а с аргумента. Для инструкций, которые опери- руют с двухбайтными операндами, 8 битов, подпадающие под выве- денное правило - это старшие 8 битов из 16-битного результата. Этого и следовало ожидать, пос- кольку здесь знаковым является старший 15-ый бит. Ghosts'n Goblins используют недокументированные флаги вслед- ствие ошибки программиста. В программе Sabre Wulf неес- тественно ведет себя носорог, который иногда бегает малыми кругами в углах, если знаковый бит по команде BIT вычисляется неправильно. Я процитирую: #AD86 DD CB 06 7E BIT 7,(IX+6) #AD8A F2 8F AD JP P,#AD8F Удивительный образец кода! А что же касается "Спидлока", то он выделывает такое количество непонятных и головоломных трю- ков, что для того, чтобы он ра- ботал, в эмуляторе все должно точнехонько соответствовать ре- альному Спектруму.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября