Да уж, мощно я стормозил. Можно еще так сказать - команды в первой строке требуют 2 доступа к памяти, а во второй - 1, хотя может это не так важно, как то что они на 2 такта медленнее.
Вид для печати
Фишка в том, что в случае 5-ти тактовой команды три такта ожидания достаются следующей за ней команде, а в случае 7-ми тактовой - один такт самой команде (при выборке операнда).
Если продолжить сдвигать фазу начала теста, то там период 8 тактов:
spdtest - есть разница 5 и 7 тактовых
spdtest2 - нет разницы 5 и 7 тактовых
добавим еще nop - есть разница 5 и 7 тактовых
добавим еще nop - нет разницы 5 и 7 тактовых
...
Зависит от того, на какой байт 7-ми тактовой команды выпадает момент возникновения прерывания.
Я могу сделать у себя 100% как на реале в обоих случаях, но тогда видео неминуемо съезжает как было до улиточных исправлений.
После переделки системы прерываний я наблюдаю у себя какие-то глюки, связанные с тем, что необработанный запрос на прерывание так и висит, и срабатывает после разрешения прерываний. Однако запрос на прерывание через какое-то количество тактов снимается, и если за это время разрешения прерываний не было, то оно и не должно возникнуть. Никто не задавался вопросом, как долго активен сигнал INT?
---------- Post added at 01:58 ---------- Previous post was at 01:45 ----------
Разобрался, вроде. Запрос снимается запрещением прерываний, т.е. либо когда процессор начал обработку, либо по команде DI. О как.
Я в свое время пришел к такому же выводу. Запрос сбрасывается сигналом INTE.Цитата:
Разобрался, вроде. Запрос снимается запрещением прерываний, т.е. либо когда процессор начал обработку, либо по команде DI. О как.
Блин, с комбинацией Вектор+Z80 конфуз вышел, прерывания вообще пропали, пришлось сегодня опять обновить эмулятор на сайте.
Прогнал тесты скорости на своем векторе. Выложил в картотеку очередную версию Vector Speed Test от ivagor-а
По результатам проверки самопала Vadikа обратил внимание на одну вещь, которую я не совсем верно написал в readme к vst (мог бы и раньше обратить, в b2m z80 также работает). Tim0xA, если не сложно, поправь:
Было:
"Максимальная тактовая частота, до которой (включительно) тест будет корректно определять быстродействие всех команд - 6,5 МГц."
Надо сделать:
"Максимальная тактовая частота, до которой (включительно) тест будет корректно определять быстродействие всех команд - 5,7 МГц."
извеняюсь,может не по теме. А как в эмуляторах в конфигурации с Z80 сбрасывается тригер прерывания? Ведь у z80 нет выхода INTE.
Vadik, а ты смотрел схемы адаптеров z80 для вектора?
Омский - обязательно посмотри дополнение по поводу доделывания обработки прерываний в Вектор-USER, номер 28-29, стр. 6 (страница 118 djvuшного документа)
Владимирский
Кишиневский
Спасибо большое, я просто забыл про эти схемы. Попробую сделать по "Омски"
Насколько я понимаю, исходный вариант обработки прерываний в Омском адаптере (опубликован в Вектор-USER 26-27) не годится, если запускать программы, использующие команды z80 с префиксами. Доработка из Вектор-USER 28-29 нормальна для 3 МГц, а для других частот - не факт.
Обновил VV, поправил команду MOV B,B в ВМ80 и ВМ1, она у меня выполнялась за 0 тактов :), команда типа как пустая, но она же есть.
ВМ1 тоже скоректировал в плане прерываний.
Tim0xA, Обнови эмуль
Ramiros, подправишь несколько растактовок для z80? Если ориентироваться на Вектор-USER 15 (хотя можно взять любую доку с растактовками по циклам) и результаты vst (названия команд приведу как у КР580, надеюсь это никого не смутит :) ):
... - есть у тебя/должно быть
inr m и dcr m - 12/16
ldhl и shld - 16/20
push - 12/16
r* Y - 12/16
xthl - 20/24
---------- Post added at 15:58 ---------- Previous post was at 15:47 ----------
Еще две команды пропустил
c* Y - 20/24
call - 20/24
Г-н Alexis прогнал 8080 Exerciser на National Semiconductor INS8080A. Результаты полностью совпадают, поэтому приводить их нет смысла. Скоро будут результаты на AMD 8080A и Intel 8080A, но по-моему не стоит ожидать чего-то шокирующего =)
у меня еще вот такой вот проц лежит, можно сказать нулевый, это предшественник КР580ВМ80А
А у мну старее:v2_tong2:
Я этот процик на улице нашел случайно:v2_laugh:
ALEXEY.GORDEEV, :)
http://s50.radikal.ru/i130/1001/9f/b404aa47440ct.jpg
Почему-то дата в другом формате
А сохранились все тесты, которые мелькали в этой ветке? Как их найти?
А можно список огласить? Часть наверно мои были, если найду - выложу.
ivagor, я таким образом нахаляву надеялся еще и список выудить ;)
Слегка доработал экзорциста.
1. Изменен постестовый фрагмент. Теперь должно корректно работать не только на 8080 но и на 8085 и 580ВМ1, причем без индивидуальных масок.
2. Теперь в каждой строке (рассчитано на 80 символов) результаты двух групп команд, что позволяет с большим запасом уместить на одном экране все результаты, без "уезжания" первых двух строк.
3. Немного ускорено вычисление CRC. В целом резервы программы по ускорению еще большие.
Исходник прилагается. В заголовке я никакой инфы не дописал, только выше в посте. Покореженные мной фрагменты отметил так
;!!!{
;!!!}
Заодно просьба к b2m - как я понял, в отладчике emu такты считает 32битный счетчик. Если это так, то желательно бы увеличить до 64 разрядов.
Добился ощутимого ускорения - на треть, в абсолютном исчислении аж на 4 часа. Резервы для дальнейшего ускорения определенно еще есть.
Почти добился изначально намечавшейся цели - ускорить экзорциста в 2 раза относительно исходного варианта. Резервы для "не почти" есть, но мне как-то надоело.
Косметическое изменение - CRC теперь печатается большими буквами.
А этот экзор только для вектора или можно к любым компам адаптировать?
Он для CP/M, ничего специфичного для вектора там нет. Сайт проекта. Отмечу, что на сайте нет результатов 1821ВМ85, которые получил dk_spb. Зато там есть интересные результаты AMDшных клонов, которые оказались не 100% клонами.
Важный момент - мои варианты переделаны так, чтобы корректно сохранять значение всех флагов без маскировки. Из за этого результаты на 8080 и подобных будут совпадать с оригинальным вариантом, а на 8085 и КР580ВМ1 будут отличаться в лучшую сторону :)
---------- Post added at 15:35 ---------- Previous post was at 15:22 ----------
От CP/M (или от чего-то эмулирующего CP/M) требуются только ДВЕ функции - печатать текстовой строки и символа.
Столкнулся с интересным моментом. Насколько я понял, при очень большой тактовой эмулируемого вектора в emu время прогона ощутимо зависит от быстродействия эмулирующего компа. В результате проскочившая в одном месте абсолютная величина выигрыша обновленного эксисайзера под вопросом, а вот относительные выигрыши по времени примерно верны.
Не прошло и полгода - определил время прогона 8080exe7.com на векторе - 1 час 44 минуты и примерно 10 секунд. Замерял в v06cc и VV6.82.
Время прогона оригинального эксисайзера на векторе (VV6.82) - 3 часа 1 минута
В связи с тестом на специалисте нужно отметить, что измененный посттестовый (после iut) фрагмент в 8080exe7 не для всех компов годится. Он был введен для корректного тестирования продвинутых клонов ВМ80 (ВМ85, ВМ1) и нормально работает на векторе и его клонах, но на специалисте есть проблема с inx sp/dcx sp
Самый простой вариант - откатить изменение постестового фрагмента, т.е. после
В выложенном exe7 такКод:iut: ds 4 ; max 4 byte instruction under test
;#idb ld (spat),sp replaced with the following code
;#idb Must be very careful to preserve registers and flag
;#idb state resulting from the test. The temptation is to use the
;#idb stack - but that doesn't work because of the way the app
;#idb uses SP as a quick way of pointing to memory.
;#idb Bit of a code smell, but I can't think of an easier way.
А в исходном было такКод:;!!!{
shld SetHL1+1
pop h
push psw
xthl
shld spat-2
lxi h,0
; jc temp1 ;jump on the state of the C flag set in the test
dad sp ;this code will clear the C flag (0 + nnnn = nc)
; jmp temp2 ;C flag is same state as before
;temp1: dad sp ;this code will clear the C flag (0 + nnnn = nc)
; stc ;C flage needs re-setting to preserve state
;temp2:
shld spat
;#idb
lxi sp,spat-2
; push psw ; save other registers
push b
push d
; lhld temp
SetHL1:
lxi h,0
;!!!}
push h
Т.е. если планируется использовать 8080exe7 не на векторе или его клонах, то лучше вернуть посттестовый фрагмент к исходному виду. При этом выигрыш по скорости останется, но тестирование ВМ1 и ВМ85 будет некорректным, как и с оригинальным эксисайзером.Код:shld temp
lxi h,0
jc temp1 ;jump on the state of the C flag set in the test
dad sp ;this code will clear the C flag (0 + nnnn = nc)
jmp temp2 ;C flag is same state as before
temp1: dad sp ;this code will clear the C flag (0 + nnnn = nc)
stc ;C flage needs re-setting to preserve state
temp2: shld spat
lhld temp
;#idb
lxi sp,spat
push psw ; save other registers
push b
push d
push h
Со специалистом все отлично, просто в старших адресах там ПЗУ и УВВ, что для "нового" посттестового фрагмента не подходит. Старый посттестовый фрагмент работает штатно.