Почти добился изначально намечавшейся цели - ускорить экзорциста в 2 раза относительно исходного варианта. Резервы для "не почти" есть, но мне как-то надоело.
Косметическое изменение - CRC теперь печатается большими буквами.
Вид для печати
Почти добился изначально намечавшейся цели - ускорить экзорциста в 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
Со специалистом все отлично, просто в старших адресах там ПЗУ и УВВ, что для "нового" посттестового фрагмента не подходит. Старый посттестовый фрагмент работает штатно.