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




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

Похожие статьи:
Инструментарий - Статья о инструментальной системе для СПЕКТРУМА "THE GRAPHIC ADVENTURE CREATOR".
Железо - Программируемый параллельный интерфейс КР580ВВ55А.
Дисскуссия - IMB vs SPECCY.
Разное - Дилерская_сеть.
Конец - Главный редактор.

В этот день...   8 мая