Вопрос только в том, устанавливается ли AC после INR. У меня устанавливается.
Вид для печати
В T80 тоже устанавливается. Мне кажется, что автор книги имел под рукой примерно столько же компьютеров на 8080-м процессоре, сколько мы имеем сейчас. Возможности проверить вовремя у него не было и он обобщил все в безопасную сторону.
Иначе выходит, что в 8080 отдельная дорожка для INR/DCR, которая минует АЛУ. Это легко представить для 16-битных инструкций, которые вообще вписать было тяжело в общую канву, но зачем бы делать что-то отдельное для инструкции, суть которой сложить регистр с константой? То есть сделать то, что АЛУ уже прекрасно делать умеет.
С другой стороны, сложить любой регистр с константой и положить результат в тот же регистр. Можно ли было в 8080 переключить шины таким образом, чтобы результат АЛУ попал при этом не в аккумулятор — вот в чем вопрос. Если нельзя, то отдельная дорожка для INR/DCR оправдана. Я не очень в это верю, но все могло быть. Tim0xA, доставай уже паяльник и чини Вектор :)
---------- Post added at 14:59 ---------- Previous post was at 14:48 ----------
Так, ну вот, написал — теперь можно и почитать. Оказывается все, что мы гадаем, было расписано в 1976-м году. Просто это было давно и далеко. Итак, читаем, 8080 Instruction Set Summary например, про инструкцию ANA:
Цитата:
...бла бла бла...
The CY flag is cleared and AC set (8085), The CY flag is cleared and AC set to the OR'ring of bits 3 of operands (8080)
Цитата:
DAD...
Only the CY flag is affected
(Еще на мысль о реюзе АЛУ с задвиганием результата наводит то, что в 8080 INR/DCR требуют 5 циклов на исполнение)Цитата:
INR r
All condition flags except CY are affected.
Цитата:
CMA
No flags are affected
Ну и так далее. Про AC после вычитания дополнительных ремарок, правда, нет. А остальное вполне все прозрачно.Цитата:
STC,CMC
CY is set/complemented. No other flags are affected
Ну хоть на это есть документальное подтверждение. Могли бы и в Intel 8080 Assembly Language Programming Manual об этом упомянуть, но почему-то не стали.
Вообщем, пока про инверсию флага AC в командах вычитания нигде информации не обнаружено, можно считать, что это наше коллективное форумное открытие. svofski, переводи все на английский и пиши в Intel - может нам нобеля дадут. 35 лет народ истины не знал, все на DAA валили ;)
Я пока написал только Ивану Варфоломееву, автору 8080 Еьерцисера. Послал ему скриншоты и вообще расписал какие вы все тут молодцы. Он очень рад -- по-моему у него до сих пор не было данных с реальных процессоров.
---------- Post added at 16:31 ---------- Previous post was at 16:29 ----------
Паяльник уже горяч? |:)
Иван ожил от наших результатов. Сидит хакает свой эмулятор прямо в хаку: чего-то у него в DAA не сходится. Знакомо, да? Респекты передал.
Эх, когда я соберусь :D Но паяльник ты все-таки начинай греть.
Ян проапдейтил Еьерсисер и страничку результатов:
http://www.idb.me.uk/sunhillow/8080exerciser/index.html
Как всегда, в области никому не нужного барахла мы впереди планеты всей. Ни одного компьютера с оригинальным 8080 пока не обнаружилось :D
Цитата:
Exerciser for a KR580VM80A CPU baseline
This Russian CPU is, supposedly, a gate level clone of the original Intel 8080 (and from the results here it looks quite likely that is an accurate description). It will be nice to confirm this by comparing the exerciser results from other 8080 CPUs.
Many thanks to Alexander Timoshenko who ran the exerciser on a Vector-06c and provided some screenshots of the results. He, and some other Vector-06c fans, also tracked down a problem that seems to be a common error among 8080 emulators; my emulation certainly failed because of it! Thanks also to Viacheslav Slavinsky who forwarded the results to me, and provided some extremely helpful advice.
А насколько наш КР580ВМ80А точный клон i8080 ? Вроде как его скалывали 1:1 сошлифовкой.
У меня есть заводская дока на наш КР580ВМ80А. Не поможет ?
Я капаю на моск всем ютубберам, которые хвастаются своими работающими компами на 8080. Тест-экзесисер очень дотошный, так что мы скоро все узнаем.
Чето у меня растровые эффекты в разных прогах с разной фазы получаются, немогу свести к общему знаменателю, походу у меня какая то команда выполняется больше или меньше тактов чем на самом деле. b2m, если нежалко, огласи свою растактовку.
Растактовка указана в Вектор-USER 15 стр. 3
Там, вроде, только одна опечатка: CALL ADR 17 24
Я не думаю, что у кого-либо возникли сомнения по поводу этой опечатки :)
---------- Post added at 17:24 ---------- Previous post was at 17:19 ----------
Вот ещё от коллеги svofski эта же статья
Там исправлено.
Есть еще опечатка: вместо "ORA R 4 4" написано "ORA M 4 4".
Ай-яй-яй, и у svofski тоже :)
Поправил. Вообще этой таблицей я только для отсчета улиток пользуюсь.
при выходе из режима HALT по прерыванию дополнительно 4 такта тратятся или нет?
почему я об этом спрашиваю - как я понимаю любой растровый эффект должен начинаться с выхода по прерыванию из режима HALT, если же проц в режим останова незагонять, то прерывание может возникнуть в тот момент когда выполняется инструкция более 4 тактов, и произойдет сдвиг программы относительно луча на N кратное 4 тактов, что будет вызывать дрожжание картинки, или я неправ?
Скорее всего так и есть. Вряд ли есть программы с растровыми эффектами, которые не ждали бы прерывания в HLT. Впрочем, после b2m'овского рассчета съезда задержки по таймеру я уже ничему не удивляюсь: так ведь можно и вообще без прерывания растровые эффекты делать.
На сайте http://www.idb.me.uk/sunhillow/8080exerciser/index.html обновление. Появились результаты и тесты для 8085 и 8080.
http://forum.ixbt.com/topic.cgi?id=8:21341-3
Цитата:
когдато ходили байки что проц 8080 украли и везли на подводной лодке, америкосы на своих подводных лодках гнались, но не догнали
:v2_laugh:Цитата:
По байкам лодку догнали и окружили, но наши какимто способом выкрутились - проц толи вертолетом из под носа америкосов забрали, толи еще както, подробности истории уже не помню, чтото там весёлое вобщем было
А проц потом скопировали, вначале даже не разбирались особо в его схемотехнике, потом разобрались и начали свои модификации делать.
Это взрыво-мозговая ветка.
Меня на этой странице удивила фраза "Была даже примерная копия TI TMS9918A - 1809ВГ3 (16-битный „контроллер ЭЛТ“)"
Хотя учитывая процент пурги, который там есть, это скорее опечатка.
Эта информация есть в книжке "Все отечественные микросхемы" изд.Додэка
http://publ.lib.ru/ARCHIVES/D/%27%27...EKA%27%27.html
стр.112
Спасибо, я в первый раз настолько не поверил, что даже искать не стал. Еще здесь одну строчку инфы нашел: http://www.laborant.ru/el_kompon/023.htm. А так по всем ссылкам только данные о соответствии 1809ВГ3 и 9918, в продаже их нигде не увидел. Непонятно, когда они производились, в каком количестве, да и производились ли вобще.
Странно, что для российских условий скопировали (?) 9918A, который выдает композитный сигнал NTSC с 525 строками.
Еще удивительнее с 16 разрядностью. Сложили разрядность шин данных чтения и записи в видеопамять? Еще бы прибавили разрядность шины для связи с процессором, получили бы 24 :)
http://velopiter.spb.ru/forum/index....o=439467&rid=0
:v2_clap2:Цитата:
при повторе 580ВМ80 были обнаружены странные глюки (ошибки проектирования), наши подумали, что где-то недоглядели и плохо скопировали. После этого наши микросхему доработали и сделали 580ВМ80А.
Дальше уже американцы занимались точно тем же, послойно сошлифовывали наш чип и фотографируя (электронным микроскопом) топологию каждого слоя, после чего долго удивлялись и восторгались, как здорово советские электронщики внесли в топологию интелевского процессора около 50 улучшений и исправили несколько десятков американских ошибок. Дальше америкозы быстренько свернули выпуск i8080 и выпускали i8080A
Надеюсь, никто не думал, что уже все сэмулировано точно?
Сделал тестик Вложение 13887, который проверяет, сколько команд выполнится между прерываниями. Там не все команды, надоело их вбивать. А для тестирования jmp, call, ret и т.п. надо доделывать. Вот результат с реала:
Вложение 13884
Тест прогонял 2 раза, результаты оба раза абсолютно идентичные, поэтому привел только 1 картинку.
Как оказалось, до сих пор можно программно отличить реал от эмуляторов. Мало того, можно отличить b2m от VV.
EI - это жесть, похоже во всех эмуляторах при выполнении (или после выполнения) EI проверяется приход прерывания, даже если следующая команда тоже EI. А на реальном КР580 при выполнении EI приход прерывания не проверяется, у меня так и в книжке написано. В итоге, пока область EI в тесте не заканчивается, прерывание не обрабатывается.
Чтобы картина была более полной, сделал вариант теста Вложение 13888, в котором перед тем как пойдет основная группа команд добавлен один nop. Результат с реала:
Последняя проверка - заменил EI на EI + NOP (генерацию соответственно поправил) - стало как в эмуляторе - 1D38. Т.е. когда EI разбавлены NOPами процессор может после NOPа все же обработать прерывание.
Надеюсь, уважаемые разработчики эмуляторов учтут эту особенность КР580.
Вот убей не помню, зачем я в mov a,a сделал 4 такта как у NOP, но это оказалось неправильно :)
Доделываю тест (добавляю команды и немного повышаю универсальность), попробовал в эмуляторах с z80. Растактовка z80 для вектора вызывает уныние и в b2m (все совсем плохо) и в VV (некоторые команды). Зато в b2m для z80 реализована особенность обработки прерываний при выполнении ei.
Текущий вариант теста работоспособен до 6 МГц включительно, в связи с этим обнаружилась проблема с последними версиями b2m. Конфиг вектора с z80 на 6 МГц еще работает в версии 06.10.2009 и уже не работает в версии 12.10.2009. Это не связано с тестом, просто конфиг не запускается.
Отсканировал фрагмент книжки Вложение 13893, стр. 61-62.
По z80 datasheet. Стр. 14 бумажного документа (стр. 10 pdfa) - табличка. У EI и DI звездочки, снизу примечание
*indicates interrupts are not sampled at the end of EI or DI
По ВМ1 вряд ли удастся найти источники, только проверять на реале, если он будет. Еще 1821ВМ85 меня интересует.
VV 5.94 на сайте!
Исправлена система прерываний.
---------- Post added at 09:55 ---------- Previous post was at 09:52 ----------
ivagor, респект за тесты!
Кстати, как подключил Вектор? Через тюнер? Делал ли доработку синхронизации?
b2m и Ramiros - спасибо за доработки.
Однако разница с реалом осталась. Если приглядитесь к картинке с результатами spdtest, для 8 тактных команд наблюдются колебания в одну команду:
ADD M, MOV M, MVI R - 1D38
INR R, INX, MOV R, SPHL - 1D39
Проверял несколько раз - результат аналогичный, т.е. для определения реал/эмулятор это можно использовать. Я не утверждаю, что именно эти команды всегда выполняются "чуть быстрее" или прерывание для них таинственным образом "растягивается", скорее всего это результат стечения каких-то обстоятельств. Если добавить один nop (см. spdtest2) то результаты становится гладкие как в эмуляторе (скриншот с результатом spdtest2). Есть какие-нибудь идеи почему так происходит?
Через тюнер. Синхру не дорабатывал, зажал на векторе яркость, кадры медленно плывут. Записываю короткий фрагмент, выбираю оттуда "правильный" кадр. Такая вот технология. Купил 2 155ЛЕ1, теперь надо искать, кто мне ее впаяет.
Закономерность только одна: команды в первой строке выполняются на "нормальном" процессоре за 7 тактов, во второй - за 5. Видимо, это как-то влияет на возникновение прерывания. Точнее, это влияет на то, какая команда будет "ждать" пару тактов - последняя до прерывания, или первая после.