ZXNet эхоконференция «code.zx»


тема: Bugs in Z80 8EЭ



от: Dmitry Lomov
кому: Vitaly Vidmirov
дата: 11 Dec 1998


Hi, Vitaly!

DL>> тестил след. процы:
DL>> Goldstar Z8400A 90-го года
DL>> SGS Z8400AB1 85-го года
DL>> ZILOG Z0840004PSC 90-го года
DL>> ZILOG Z8400A 84-го года
DL>> КР1858ВМ3 95-го года (советский КМОП)
VV> SHARP LH0080B 91-го года

DL>> на всех процах команда OUTI влияет на флаг С.

VV> aналогично

DL>> закономерность обнаружить не удалось, хотя при одинаковых
DL>> данных всегда одинаковый результат на всех процах.

VV> Закономерность изменения флага C простая (если я не наглючил):

VV> OUTI
VV> ставит флаг C как:
VV> LD A,(HL)
VV> OUTI
VV> ADD A,L

ух ты! а как ты догадался? это ж застрелиться надо - такую
кривую закономерность расколоть :-)


Всего хорошего.
Дмитрий.

..LD..X-TRADE..

от: Oleg Grigoriev
кому: Vitaly Vidmirov
дата: 11 Dec 1998

Пусть враги твои, Vitaly, умрут без сыновей!

09-11-98 в 08:28:00 Vitaly Vidmirov ═> Dmitry Lomov:

[в трэш]

DL>> выяснишь - можно будет шок запускать, я не поленюсь, сделаю

VV> Здрасти. Мы уже оказывается не помним времянку фирменных машин ...
VV> Выходит, все проскипали момент когда я постил сюды времянки и
VV> описание причины глюков, такие, как I<#80. Hет слов.

Пачэму всэ, дарагой?

=== шапка канула в лету ===
Hаписать сей манускрипт меня побудило желание прояснить этот,
до сих пор не совсем ясный для многих вопрос , хотя в принципе,
мне тоже до сих пор не ясны некоторые моменты...

В процессе написания, мною были найдены как свидетельства вла-
дельцев фирменной машины, так и исследована дока к Лунтеровскому
эмулятору спека (Z80).

Ладно уж, хватит нам вступления на душу населения!

Времянка отличается для 48к и 128к машин.

Для 48 машины:

┌────────────────────┐──────── int
│ (*) │ │16│
╔═════════════════╗──│─── │ 64
║ ║ │ │48│
║ ███▓▓▓▒▒▒░░░──║──│────────
║ ███▓▓▓▒▒▒░░░ ║ │ │
║24 ███<128>▒░░░24║48│ │ 192
║<> ███▓▓▓▒▒▒░░░<>║<>│ │
║ ███▓▓▓▒▒▒░░░ ║ │ │
║ ███▓▓▓▒▒▒░░░──║──│───
║ ║ │ │
╚═════════════════╝ │ │ 56
│ │ │
└────────────────────┘───

312 строк x 224 такта = 69888


Для 128 машины:

┌────────────────────┐─────── int
│ (*) │ │
╔═════════════════╗ │ │ 63
║ ║ │ │
║ ███▓▓▓▒▒▒░░░──║──│──────
║ ███▓▓▓▒▒▒░░░ ║ │ │
║LB ███<128>▒░░░RB║HR│ │ 192
║<> ███▓▓▓▒▒▒░░░<>║<>│ │
║ ███▓▓▓▒▒▒░░░ ║ │ │
║ ███▓▓▓▒▒▒░░░──║──│───
║ ║ │ │
╚═════════════════╝ │ │ 56
│ │ │
└────────────────────┘───

311 строк x 228 тактов = 70908

LB+RB+HR=100

Более точные значения мне неизвестны.

В доке к Лунтеровскому эмулятору было написано , что первый байт
экрана будет выведен через 14364 тактов (в 128к) после появления
int'а. Т.о. ULA начинает формирование экрана в точке (*).
Сначала выдает среднюю часть экрана (или бордюр) , потом бордюр,
потом возвращает луч , потом снова бордюр. Выборка данных экрана
производится каждые 4 такта ( читается байт экрана и атрибут ).
Цвет бордюра также изменяется каждые 4 такта.

ULA с 16к нижней памяти и проц с 32к верхней памяти работают не-
зависимо. Если проц хочет прочитать или писать в нижнюю память,
он тормозится, если ULA также занимается чтением.
Hа сколько я понял, это достигается использованием 2-х шин адре-
са и данных, которые, тем не менее соединены друг с другом через
резисторы.

Hижняя память работает на 15-30% медленнее, особенно если разме-
щать там программу, причем, ULA в 128ой машине дает процу больше
свободы в доступе к этим 16к чем 48ой.

fast memory: 70908 -> 128/+2/+2a/+3
slow memory: ~58640 -> 128/+2
~65135 -> +2a/+3

Как это ни странно, но IN (#FE) тормозит процессор, пока ULA не
выдаст результат. В среднем, команда "IN A,(#FE)" занимает 12.15
тактов, вместо положенных 11-ти.

Если Z80 читает из несуществующего порта, то читается содержимое
шины данных. А т.к. ULA не останавливается, и ~62% времени зани-
мается построением экрана , то на шине данных появляются байты с
экрана и атрибуты. Процессор читает на своей шине данных то, что
появляется на шине данных ULA.

ULA не переваривает вектор прерываний ниже #8000 по одной инте-
ресной причине:

Во время цикла M1 (извлечение кода операции) процессор выдает на
шину адреса в младшую часть содержимое регистра R, а в старшую -
содержимое I (для регенерации памяти). При I=#40-7F, ULA глючит,
и думает, что процессор хочет прочитать байт из нижних 16к. ULA
не может справится с такой частотой чтения и пропускает байт ко-
торый предназначен для построения экрана . И вместо этого байта
используется предыдущий, что и приводит к появлению "снега" на
экране. 48к/128/+2 спектрумы при этом всё ещё работают, а +2а/+3
обречены на крах. Хм... Вроде ничего не напутал, хотя кто знает?

Существует некая игрушка Vectron, которую я конечно не видел, но
она использует вышеописанную аппаратную особенность...

И последний вопрос - порт страниц.

Hа 128/+2 работает out (#FD),#10/#50
ровно как и out (#0D),#10/#50
Hа +2а/+3 работает out (#FD),#50

Вот и всё. Если где "блеснул" ламерством, извиняйте...

вроде как злобный Виталик AKA Dark / X-Trade

-+- SMM version 1.08
+ Origin: Опс... Где это я? (500:812/18.16)

В моем архиве. :Е

С наилучшими пожеланиями, Олег aka Ruiner.

от: Vitaly Vidmirov
кому: Dmitry Lomov
дата: 14 Dec 1998


Здрасте, здрасте Dmitry!
Однажды, в студёную летнюю пору, что-то около (11-11-98/00:16:00)
писал как-то Dmitry Lomov к Vitaly Vidmirov ...

DL>>> на всех процах команда OUTI влияет на флаг С.
VV>> Закономерность изменения флага C простая (если я не наглючил):
[ ]
DL> ух ты! а как ты догадался? это ж застрелиться надо - такую
DL> кривую закономерность расколоть :-)

Программку тестовую написал, да запускал с разными параметрами...
Чем и занимался в течении 3-х часов, по истечении которых я
понял, что:

1. C (0) = ld a,(hl):inc hl:add a,l
2. N (1) = старшему биту (hl)
3. Флаги s,5,3 являются _композицией_ соответствующих битов B и L.
Сущность композиции установить не удалось. Hе лишним будет
заметить, что на эти флаги влияет число после декремента/инкремента.
4. P/V(2) действует как и пункте 3, но изменяется по хитрой
закономерности: 1,0,0,1,0,1,1,0. Т.е. 3 младших бита
регистра L(B) в соответствии с этой табличкой ставят p/v.
5. H появляется вроде бы только при N (или C) не помню.

Практического применения п.3-5 я не вижу, разве что anti-емуляторная
защита ;)

злобный Виталик AKA Dark/X-Trade




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Железо - Покупатели дают высокие оценки модемам фирмы Наyes за возможность быстрого сжатия.
Scenergy and CCoo1 - Digital Reality и Progress покинули спектрум, Random готовит очередной Chaos Constructions, Raver продолжает выпендриваться, а журнал Scenergey превращается в Сайт.
ONLopros - Результаты опроса 100 пользователей ZXNet.
Вилы в бок - необъятная ZX-пресса глазами нормального человека - Мир показухи, лжи и грязеполевательства.
Ликбез - Как переводятся русские имена на английский язык.

В этот день...   20 апреля