[bETA]mEN, а где можно взять этот самый Emulator detecor ?
Вид для печати
[bETA]mEN, а где можно взять этот самый Emulator detecor ?
Ну не знаю почему, но у меня нагрузка на проц ниже 80% не падает (при выборе файла ниже 60%). Картинка прилагается. Наверное комп слабоват.
Sorry, не земетил.
Вот ещё исходник выложенной чуть выше эмуляторопроверялки.
Мож пригодится.
Код:org #6000
;чистим экран
di
ld hl,#5aff
ld (hl),#7
dec hl
bit 3,h
jr nz,$-5
xor a
ld (hl),a
or (hl)
dec hl
jr z,$-3
;устанавливаем im 2
ld hl,#fd00
ld de,#fd01
ld b,e
ld c,l
ld (hl),#fe
ld a,h
ld i,a
ldir
ld a,#c3 ;jp nn
ld (#fefe),a
ld hl,imob
ld (#feff),hl
im 2
;декрюнчим кучу NOP'ов
ld hl,#8000
ld de,#8001
ld bc,#7dff
ld (hl),0 ;nop
ldir
ld (hl),#c9 ;ret
ei
;матюгаемся
ld e,0
ld hl,sysmes
call prn
;заносим в счетчик начальное значение
ld a,#ff
ld (count),a
halt
ld b,20
;вызываем 20 раз кучу NOP'ов
w1 call #8000
djnz w1
di
ld a,(count)
;декрюнчим кучу команд EI (не путать с
;Eternity Industry ;) )
ld hl,#8000
ld de,#8001
ld bc,#7dfE
ld (hl),#FD ;EI
ldir
ld c,a
ld a,#ff
ld (count),a
ei
halt
ld b,20
;вызываем 20 раз кучу комад EI
w2 call #8000
djnz w2
di
;сравниваем число интов в первом
;и втором случаях с точностью до ё 1 int'a
ld a,(count)
sub c
inc a
cp 3
;если cf=1, то мы под эмулем, т.к.
;z80 во время команды EI не реагирует
;на прерывания => число интов на реальном
;спектруме в первом и втором замерах
;отличается более чем на 1
PUSH AF
ei
;также если во время прихода прерывания
;выполнялась команда ld a,i (ld a,r),
;процессор посчитает, что прерывания
;запрещены
LD E,0
ld bc,0
w3 ld a,i
jp po,real1
djnz w3
dec c
jr nz,w3
inc e
real1 push de
;снова матюгаемся
ld e,#40
ld hl,report
call prn
ld b,40
call pause
pop de
pop af
rl e
xor a
or e
;если в первом и во втором тестах
;результаты соответствуют реальному
;z80, то печатаем об этом
ld hl,realmes
jr z,real
;иначе печатаем, что нас эмулируют
ld hl,emulmes
real ld e,#60
call prn
;печатаем press any key
ld b,100
call pause
ld hl,anykey
call prn
;опрашиваем any key
key xor a
in a,(#fe)
cpl
and 31
jr z,key
;выходим в бейсик или куда-нибудь еще
di
ld a,#3f
ld i,a
im 1
ei
ret
;процедура печати стринга в верхнюю
;треть экрана методом телетайпа
;hl- asciiz-строка
;е-мл. байт
prn ld a,(hl):inc hl
or a
ret z
push hl
ld b,5
add a,a
ld l,a
cp " "*2
jr z,prn0
ld c,40
xor a
beep ld b,c
xor #18
out (#fe),a
djnz $
dec c
jr nz,beep
inc b
prn0 halt
djnz prn0
ld h,0
add hl,hl
add hl,hl
ld a,h
add a,#3c
ld h,a
ld b,4
ld d,#40
prn1 ld a,(hl)
ld (de),a
inc l
inc d
djnz prn1
ld b,4
prn2 ld a,(hl)
srl a
or (hl)
ld (de),a
inc l
inc d
djnz prn2
pop hl
inc e
jr prn
;мессаги
sysmes db " 2000 Brainwave of X-Project. "
db "System checking! Please wait... ",0
report db "System checking repot:",0
emulmes db " Warning! General failure: "
db "CPU not found! Press F1 for "
db "software emulation... ;-) ",0
realmes db "Congratulations!!! Test detected"
db "the Real ZX-Spectrum. May be. ;)",0
anykey db "Press any key to exit...",0
pause halt
djnz pause
ret
;обработчик прерываний
imob push af
ld a,#3e
count equ $-1
inc a
ld (count),a
pop af
ei
ret
не работают:
GRID PROTECTION SYSTEM 1 /2 /3
Master Copy 2.0
Format Utility 2.01
Хочу высказать своё страстное пожелание. Предыстория которого состоит в том, наверное, что я не в состоянии приспособить ни zEmu, ни unreal к тому, чтобы их можно было скомпилировать с использованием имеющегося у меня MS VC++.NET 7.1.3088. Да и фиг с ним, не люблю я эту среду, и не горю желанием вносить сам какие-либо изменения, да и сам язык С/C++ мне неприятен. А суть проблемы вот в чём. Уже давно, когда я только начал клепать EmuZWin, у меня возникла простая идея сверки эмуляторов. Но применить её я смог только к различным версиям своего собственного эмулятора. Решение крайне простое. Всё, что нужно, это режим трассировки с выдачей в лог-файл состояния процессора после каждой инструкции. Лучше, конечно, чтобы состав информации был конфигурируемый, хотя бы из ini-файла. Для скорости вовсе необязатльно выдачу в файл выполнять на каждой команде, можно копить в буфере и выдавать за раз 1000 или 100 строк. Ну вот, например:
0038: dT=11 AF=0044 BC=0100 DE=01FF HL=2233 IX=4000 IY=456E I=39 R=76
Сразу скажу: выдаются сотни мегабайт за секунды. Ну и что. Зато, при наличии такого лога можно выполнить покомандную сверку работы двух эмуляторов, начиная с некоторого места. И сверка сводится к сравнению логов трассировки, начатой с одного и того же места, после загрузки одного и того же снапшота. Сравнение может делать специально написанная утилита, которая просто построчно сравнивает два текстовых файла, и показывает их, выделяя отличающиеся строки красным цветом. У меня на сайте есть такая утилита, DiffLines. Намного тупее любой сравнивалки текстов, но позволяет достаточно быстро сравнивать и просматривать пары гигабайтных файлов.
Моё пожелание: сделайте доброе дело, добавте такой режим трассировки в отладчик. Это несложно: вам - полчаса работы, последователям вашим - огромное облегчение. Меня, в принципе, устроит любой формат строки, лишь бы он был достаточно ясен при простом взгляде на строку текста. 16-ричных значений достаточно было бы, для скорости (через тот же ини-файл) имеет смысл задавать, что выводить:
- адрес PC выводится всегда, иначе смысла мало
- опкод (можно байт, или 2 первых байта по адресу PC)
- dT - разница в тактах (время выполнения тольо что исполненной команды)
- регистры (AF, BC, DE, HL)
- IX, IY (вместе или по одному)
- I
- R
- содержимое памяти по заданному адресу (2 байта).
Чуть-чуть продвинутый вариант (его можно сделать единственным): многократное выполнение команды HALT отображается 1 раз.
Имя файла трассировки- устроит любое фиксированное имя, или конфигурируемое из ini-файла. Очередная трасиировка просто дописывает выдачу в конец файла, если он существует. По крайней мере у меня - так.
Угумс, запускаешь. И получаешь:
C:\Games\ZXEmulators\us>C.bat
C:\Games\ZXEmulators\us>rc settings.rc
'rc' is not recognized as an internal or external command,
operable program or batch file.
C:\Games\ZXEmulators\us>call compile ms emul.cpp /link settings.res
'compile' is not recognized as an internal or external command,
operable program or batch file.
C:\Games\ZXEmulators\us>
Я же говорю: с С не работаю, за исключением поковыряться в проекте, уже приспособленном к IDE MS VC++.
Добавлено через 9 минут
Да дело даже и не в этом. Одна и та же вещь в разных эмуляторах может быть реализована не только на разных языках, но и совершенно разными алгоритмами. При наличии стандарта на трассировку можно было бы просто сверять результат, и в чужие исходники вовсе нет нужды заглядывать, достаточно понять, в чём ошибка у себя, и поправить свой код.
ок, добавлю трассировку
Спасибо. Без трассировки туго бывает: пока найдёшь место, где всё уехало вбоки, иногда дни проходят. С трассировкой нужное место за минуты отыскивается. Комп, правда, мощный нужен, ну да это сейчас не проблема.
колобок не работал из-за неполной эмуляции LD A,I / LD A,RЦитата:
А что там с шибками в эмуляции TR DOS, все нашлись?
туда же и тест эмуль / спек.
ВГшка пока в процессе, но не приоритетно.
0038: dT=11 AF=0044 BC=0100 DE=01FF HL=2233 IX=4000 IY=456E I=39 R=76
А, кстати, про SP забыл. Куда-нибудь тоде добавьте, например, после IY. Если будет конфигурация, то для SP лучше отдельный пункт.
Вот прикрутил сабж.
патч во вложении.
Согласно рекомендации Sinus - переделал патч:
Сабж для отображения кириллических имен файлов в UTF локали:
подоспела новая версия с целой пачкой фиксов и импрувментов.
скачать можно с http://detstwo.com/pub/zemu/
крутую ридмишку забыл дома, по-этому побыстрому исправил старую, вечером (или завтра) перевыложу с правильной ридмишкой.
кратко:
Ещё вспомнил что сделал турбо (до 4x), на кнопке F2 либо программно по стандарту Pentagon1024sl2.2Код:[add] поддержка скролла на мышке (спасибо Doctor Max-у).
[add] поддержка русского в линуксе (UTF-8 локаль only) (спасибо Doctor Max-у).
[fix] добавлен символ '_' (подчёркивание) и пофикшена позиция '-' (минуса)
[add] cpu trace (идея Vladimir Kladov-a).
[upd] более-менее нормальный дебаггер.
[add] поддержка MAPROM (маппинг 0 банки памяти на место ПЗУ).
[add] поддержка мегабайта по стандаргу Pentagon1024sl2.2
[fix] глюки в эмуляции LD A,R / LD A,I
В отличие от реального пентагона и UnrealZX турбо по умолчанию выключена (хотя, возможно, она включается не аппаратно, а gluk-ом, лень проверять)
P.S. ВГ-шку пока не трогал. В следующей версии. Возможно.
а слабо было аффтару libz80ex сообщить о глюках?
тудыть, пишешь для них опенсурс, бессонных ноченек не досыпаешь, а они хоть бы весточку фидбека в ответ..
и еще, насчет патченной libz80ex у тя на сайте. цитата из GNU GPL:
и это тру! ибо очень муторно diff-ом выгребать измененияЦитата:
You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
по следам твоих правок зарелизил 0.16ю версию либы. вместо твоей ф-ии z80ex_noint_once(), в смысле которой посторонний чел без поллитры не разберется, сделал z80ex_int_possible(), которая возвращает тру если на данном шаге возможно прерывание. собрал zemu с этой версией (поправив имя ф-ии) -- работает. заодно поправил глюк в NMI, там IFF1 в IFF2 не пихалось.
UPD о, кажись нашел баг в дебаггере -- иногда дизассемблер не совпадает с PC. например, PC=чегототам, а дизассемблер идет с чегототам-1, а там какая-нить многобайтовая инструкция, которая перекрывает PC
да я хотел нормально патч оформить, да всё времени не было.Цитата:
а слабо было аффтару libz80ex сообщить о глюках?
тудыть, пишешь для них опенсурс, бессонных ноченек не досыпаешь, а они хоть бы весточку фидбека в ответ..
тобишь помечать изменения и ставить дату?Цитата:
You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
замечательно :) следующую версию буду собирать с ней.Цитата:
по следам твоих правок зарелизил 0.16ю версию либы.
есть такое дело. пока ломает фиксить :)Цитата:
UPD о, кажись нашел баг в дебаггере -- иногда дизассемблер не совпадает с PC. например, PC=чегототам, а дизассемблер идет с чегототам-1, а там какая-нить многобайтовая инструкция, которая перекрывает PC
Hi, %username%
новая эмулятора версия вышла: http://detstwo.com/pub/zemu/
win32 бинари пока не готовы.
Добавлено через 2 минутыКод:####################
## Version 0.9992 ##
####################
(!) справедливость восстановлена, и теперь можно брать lib_z80ex с сурсфорджа (версия >= 0.16)
[fix] несколько багов в дебаггере
[add] да, да, да. это свершилось. а именно - поддержка ленты в виде .tap файлов.
немного о кнопках в файл-браузере;
S - сохранить диск
E - вынять диск
D - вынять кассету
R - перемотать кассету в начало
T - start/stop кассеты
W - поставить/убрать WR-protect на текущий диск
UP, DOWN, HOME, END, PGUP, PGDN - выбирать файл в списке
LEFT, RIGHT - выбирать дисковод
BACKSPACE - вверх на уровень
ENTER - выбрать что-нибудь ^_^
забыл вставить в римишку:
* F4 - турбо до 4x
* если идёт загрузка с ленты и включен max speed, то если лента закончится, max speed автоматически выключается. мне так удобно.
Это мега зло! но мы только что с матами напополам собрали сие чудо под FreeBSD 6.3 - осталось доделать этот скрипт ) и выложить на суд общественности ;) если кому это надо конечно...
ура, загрузка с ленты! аффтару респект и уважуха!
просек фишку с "несовпадением" PC и дизасма -- это происходит, когда на момент нажатия F4 был отработан префикс, а команда после префикса еще нет. так что я был неправ, все совпадает и дизасмится на ура, разве что вызов дебаггера можно откладывать до завершения команды для пущей кошерности ;)
win32 версия 0.9992, брать как обычно на http://detstwo.com/pub/zemu/
exactly, только мне нравится эта фишка, позволяет более точно дебагится.Цитата:
просек фишку с "несовпадением" PC и дизасма -- это происходит, когда на момент нажатия F4 был отработан префикс, а команда после префикса еще нет. так что я был неправ, все совпадает и дизасмится на ура, разве что вызов дебаггера можно откладывать до завершения команды для пущей кошерности
сейчас я сделал две плюшки:
1) если это похоже на такую комманду, то коричневым будет подсвечено, но жёлтой рамочки не будет (она кагбэ внутри)
2) если совсем никак нельзя нормально отдизассемблить, чтоб не терялся курсор, то будет вставлятся "DB XX" (так же будет работать если перейти на адрес с помощью "GoTo Address")
приделал вот реальный джойстик к сабжу. пока только кемпстон.. во вложении все сорцы собсно zemu, мои правки помечены как //[boo_boo]
если чо не пашет, проверьте сперва, что не забыли скопировать секцию "Joysticks/Kempston" в конфиг, и что номер джойстика в системе (от нуля считаеца) там соответствует ;)
Во-первых хочется сказать большое спасибо sinus'у и boo_boo за огромный объем работ :v2_wink2:. К слову сказать, fuse даже рядом не стоял с zemu, а то, что zemu работает в линуксе, тем более достаточно стабильно, делает его практически бесценным :-). Но все же, есть и минусы, которые сразу бросаются в глаза (достоинств программы не касающиеся) и о которых хотелось бы сказать, чтобы еще более популяризовать проект:
1. скрипты compile.sh просто ужасные. Я не так давно пересел на убунту, но даже в ней скрипты вылетают с кучей ошибок, даже не компиляции, а синтаксиса sh.
2. библиотека lib_wd1793 по умолчанию компилится как статическая, а в команде сборки указывается как -lunrealwd1793, что по умолчанию предполагает динамическую линковку. compile.sh не отрабатывает и не копирует библиотеку в соответствующие каталоги, сборка завершается достаточно плачевно..
3. библиотека z80ex, выложенная вместе с архивом zemu, не собирается нормально на x86_64 архитектуре, т.к. пытается слинковать динамическую библиотеку из объектных файлов, полученных без применения ключа -fPIC.
4. в скрипте compile.sh явно указана i585 архитектура в параметре CFLAGS и CXXFLAGS, что делает сборку zemu на 99% невозможной для пользователей ОС на архитектуре x86_64, которых становится все больше..
В связи с этим пожелание: думаю все это можно исправить за пару-тройку вечеров, переведя проект на autotools. Тем более, что все зависимости уже находятся внутри проекта.
И неплохо было бы поместить проект на sourceforge или подобный хостинг, а то на данный момент обнаружить его можно лишь случайно..
На данный момент чтобы собрать проект нужно быть либо программистом, либо очень продвинутым пользователем, знающим хотя бы основы unix. На сборку может потребоваться от 5 минут(для программера) до +бесконечности для того, у кого нет опыта ручной сборки программ..
точно, спасиб :) версию на сорсфордже обновил
Добавлено через 7 минут
оно конечно традиционно, и все такое, но уж очень монструозно для такой простой вещи, как сборка ИМХО ;)
сделав один проект с автотулзами, забыл о них как о страшном сне в пользу православных мейкфайлов. надо б на досуге scons или cmake попробовать, может там все не так мрачно..
скажите что за ошибки и вышлите исправленные варианты мне на email плиз.
это наверное какая-то особенность бубунты.Цитата:
2. библиотека lib_wd1793 по умолчанию компилится как статическая, а в команде сборки указывается как -lunrealwd1793, что по умолчанию предполагает динамическую линковку. compile.sh не отрабатывает и не копирует библиотеку в соответствующие каталоги, сборка завершается достаточно плачевно..
gcc достаточно умный чтоб слинковать статически, и везде где я пробовал (debian, freebsd, gentoo, win/mingw) нормально линковало.
compile.sh внутри lib_wd1793 должен копировать либу в папку внитри zemu, а в compile.sh который в zemu указан путь к дополнительным либам.
есть такое дело. однако если их не прописывать, то по умолчанию во многих системах будет компилироваться под generic процессор, что весьма отрицательно скажется на производительности.Цитата:
4. в скрипте compile.sh явно указана i585 архитектура в параметре CFLAGS и CXXFLAGS, что делает сборку zemu на 99% невозможной для пользователей ОС на архитектуре x86_64, которых становится все больше..
не не не дэвид блэйн, только не autotools :)Цитата:
В связи с этим пожелание: думаю все это можно исправить за пару-тройку вечеров, переведя проект на autotools. Тем более, что все зависимости уже находятся внутри проекта.
что-нибудь другое бы, менее монструозное.
есть причины по которым я не могу это сделать.Цитата:
И неплохо было бы поместить проект на sourceforge или подобный хостинг, а то на данный момент обнаружить его можно лишь случайно..
хочется чтоб такого не было, но и чтоб всё было более чем доступно и понятно.Цитата:
На данный момент чтобы собрать проект нужно быть либо программистом, либо очень продвинутым пользователем, знающим хотя бы основы unix. На сборку может потребоваться от 5 минут(для программера) до +бесконечности для того, у кого нет опыта ручной сборки программ..
для меня даже make-файлы являются абсолютно неочевидной вещъю, что уж говорить про autotools.
кстати, а что говорит `/bin/sh --version`? может статься, в убунте sh это не bash, как обычно в линухах, а че-нить другое..
почитал про cmake -- судя по всему, более вменяемо, чем автотулзы :). Sinus, глянь на екзампл, может, тебе понравится: http://www.cmake.org/HTML/Examples.html
cmake-проект для zemu должон быть ненамного сложнее этого екзампла.
сделайте плиз 0ю банку пзу :v2_thumb:
0 банка ПЗУ это что?
"кэш" что-ли, когда озу мапится вместо пзу? дык есть такое, по пентагону сл.
это вот:
0 sys
1 trdos
2 128
3 48