Вход

Просмотр полной версии : Xpeccy



Страницы : 1 2 [3] 4 5 6 7 8 9 10 11 12

Q-Master
13.08.2012, 22:32
Вшитый ром только один, остальные пользователь сам добавляет. В хомяке удобнее тем, что без лишних движений можно добавить-удалить-переименовать. Хотя не очень удобно, если в системе более одного пользователя, но и тут можно симлинком обойтись.

Лучше таки в /usr/share стандартный набор и остальное в хомяке уже по желанию.

SAM style
08.09.2012, 21:06
build 20120908 Добавлен covox. Работает на пентагоне (порт FB) и скорпионе (порт DD), на остальных - нет.Сборка под win32 будет позже, когда реализую хоть какую-нибудь схему soundrive

psb
09.09.2012, 01:40
не нашел на speccy.info про этот эмулятор... есть супер-предложение: добавить его туда;)

SAM style
09.09.2012, 19:09
build 20120909 Soundrive. Режимы работы выбираются там же, где была галка ковокса. 1.05mode2 может играть как ковокс, но только в один канал, тогда как просто ковокс играет в моно, на оба канала. Громкость регулируется ползунком для бипера. Работает только на пентагоне. На скорпионе порт DD обрабатывается как порт FB пентагона, т.е только как ковокс.
win32 - http://rghost.ru/40273142
Насчет speccy.info - лучше, чтобы эту статью создавал не я, а то сильно субъективно выйдет.

SAM style
22.09.2012, 21:17
build 20120922 Выравнивание бордюра по 4 такта (оригинальный ZX, Scorpion) [zebest] Слегка переделано окно настройки. Редактор ромсетов в отдельном окошке. Пофиксен расширенный режим памяти для +2/+3 [zebest] На галку Contended memory не смотреть - всё равно медленная память не работаетwin32 - http://rghost.ru/40516835

[Bug] Встретились dsk со спидлоком, эмуль такие на прожёвывает и валится из-за блока Offset-Info в конце, который ошибочно принимается за Track-Info. В дополнение, поврежденные сектора не эмулируются.

osa
25.09.2012, 21:34
http://habrahabr.ru/post/152219/#habracut
пропиарьтесь, господа!

SAM style
26.09.2012, 00:00
Справедливости ради надо сказать, что deb я все-таки собрал
build 20120925 - http://rghost.ru/40576671
Надеюсь, зависимости не переврал

Zorki-4k
26.09.2012, 01:08
Debian 6.0.1
Пакет поставился. Ромы в папку конфигов положил, xpeccy.conf создал.
Не запускается, а ругается:
dic@debian:~$ xpeccy
Using Qt painter
Using SDL ver 1.2.15
Using Qt ver 4.6.3
Using z80ex ver 1.19
add Profile: default : xpeccy.conf
add Layout: default
xpeccy: symbol lookup error: xpeccy: undefined symbol: _ZN9QListData11detach_growEPii

SAM style
26.09.2012, 07:43
Значит, таки Qt нужно старше (в testing-е 4.8.2). Либо собирать и опакечивать на младших версиях.

Vitamin
26.09.2012, 09:15
Против этих танцев с зависимостями только одно средство- линковать все статически. Весит, правда, дофига.

SAM style
26.09.2012, 18:57
Задебутстрапил стабильный дебиан, чрутнулся, собрал бинарник, запакетил. Там Qt 4.6.2, на тестинге (Qt 4.8.2) завелось без лишних вопросов.
Qt 4.6.2 build - http://rghost.ru/40588184

Zorki-4k
26.09.2012, 19:16
SAM style, да, теперь заработало.

Q-Master
26.09.2012, 21:00
Против этих танцев с зависимостями только одно средство- линковать все статически. Весит, правда, дофига.

Прям со всем линухом. 8)

Vitamin
27.09.2012, 09:31
Прям со всем линухом. 8)
Со всем не получится, уже пробовал:)

SAM style
30.09.2012, 21:58
build 20120930 У кемпстон-мыши появилось колесо Во вкладке Input опций - настройки для мыши Много переделал, чтобы оно компилировалось в QtCreator'е с msvc2008, и оно даже собралось, но по нескольким вопросам я с этим фашистом всё равно не сошёлся, поэтому под windows всё продолжает собираться с mingw
win32 build - http://rghost.ru/40668680

[bug]Настройки мыши как будто не читаются из конфига - при каждом запуске сбрасываются. Fixed, на github'е.
[bug]Галка Contended memory мало того, что работает неправильно, так ещё и влияет на формирование звука. Так что не включайте.

zebest
30.09.2012, 22:53
ну вот, хоть в одном эмуле увидел, как это правильно дОлжно колесико-то работать...
Да, в тесте-то колесо работает сразу, независимо от захвата мыши).

SAM style
30.09.2012, 22:56
Да, в тесте-то колесо работает сразу, независимо от захвата мыши).
Блин, сколько сразу набаговал... К следующей сборке исправлю.

SAM style
02.10.2012, 16:58
build 20121002 Манагер геометрий экрана. Находится во вкладке Video опций - три кнопки рядом с комбобоксом. Как выглядит редактор - см. картинку Пофиксены всплывшие баги с мышью - неверное выставление в настройках и работающее без захвата колесо. Исправлена порча звука при юзании медленной памяти (сама она, как водится, не работает правильно)win32 - http://rghost.ru/40701185
deb i386 - http://rghost.ru/40701198

Q-Master
02.10.2012, 20:58
Попробовал последнюю git-ревизию. На Qt-отрисовке звук щелкает на альзе и тормозит на SDL. В SDL-отрисовке на альзе арбайт в 22050, в 44100 - тормозит, на SDL работает отлично и в 44100. Нифига не понял почему.
Не понял как в глюке включить мышь. Указиметр есть, но он не двигается. Видимо надо где-то что-то включить, кроме галки enable у мыши.
Ну и гигантская просьба. Сделай плиз в попап-меню ресет. У меня на ф12 забиндено другое и лезть менять кнопки куда-то не хочется.

SAM style
02.10.2012, 21:16
Попробовал последнюю git-ревизию. На Qt-отрисовке звук щелкает на альзе и тормозит на SDL. В SDL-отрисовке на альзе арбайт в 22050, в 44100 - тормозит, на SDL работает отлично и в 44100. Нифига не понял почему.
Не понял как в глюке включить мышь. Указиметр есть, но он не двигается. Видимо надо где-то что-то включить, кроме галки enable у мыши.
Ну и гигантская просьба. Сделай плиз в попап-меню ресет. У меня на ф12 забиндено другое и лезть менять кнопки куда-то не хочется.
Отрисовка по Qt требует больше ресурсов, чем по SDL. Да и сам эмуль вообще получился слишком прожорливый на мой взгляд.
Сброс в меню вынесу, с выбором части ПЗУ.
Мышь захватывается и отпускается средней кнопкой.

SAM style
03.10.2012, 16:59
build 20121003 Подменю Reset в попап-меню. default сбрасывает в ту часть ПЗУ, которая выставлена в настройках, ROMpageN - в страницу N Найден .z80, сделаный в стелсе, который ломает полностью описание самого формата .Z80 - на нём мой эмуль падал. Сейчас не падает, но есть всё равно отказывается. Попутно нашел пару ошибок в обработке .z80

SAM style
26.10.2012, 18:26
build 20121026 Корректная смена частоты вывода звука без изменения системы вывода - параметры менялись, но устройство не переоткрывалось Некоторое перетряхивание геометрии. default возвращена к прежней (64 точки на HBlank и 72 на левый бордюр).
build 20121027 Исправлена некорректная загрузка больших *.scl
[ win32 (http://samstyle.narod.ru/xpeccy/xpeccy_20121027_win32.zip) ] [ deb i386 (http://samstyle.narod.ru/xpeccy/Xpeccy_20121027_i386.deb) ]

scl^mc
28.10.2012, 17:37
в первом посте ссылка на либы для вынь-версии битая :(

SAM style
28.10.2012, 17:43
Случайно удалил с фтп. Перезалил.

SAM style
05.11.2012, 00:17
build 20121105 Alt+N - переключение нофлика на лету В меню добавлен пункт Layout для быстрой смены геометрии экрана Название текущей геометрии отображается в заголовкех При закрытии с измененными дисками и выводом звука в SDL последний не затыкался
[ win32 (http://samstyle.narod.ru/xpeccy/xpeccy_20121105_win32.zip) ] [ deb i386 (http://samstyle.narod.ru/xpeccy/Xpeccy_20121105_i386.deb) ]

PS: Архив с dll-ками пропадает, потому как на фтп народа нельзя хранить файлы больше 5М :)
PPS: Кажется, я осилил отрисовку EGA-режима ATM.
PPPS: Да и текстовый режим тоже :)

Q-Master
06.11.2012, 22:35
Мне вот интересно, а чего такого юзается в том-же Project ROBO что и на xpeccy, и на fuse, и на zemu оно загружается, начинает что-то распаковывать и сбрасывается. У пентевы не такой маппинг памяти как у 1024sl чтоли?

Blade
06.11.2012, 22:54
Q-Master, ну так xpeccy и fuse пентеву не эмулируют, поэтому и сбрасывается. Там используется графрежим 320х200 16c и страницы памяти во всех окнах переключаются.

Q-Master
07.11.2012, 21:50
Q-Master, ну так xpeccy и fuse пентеву не эмулируют, поэтому и сбрасывается. Там используется графрежим 320х200 16c и страницы памяти во всех окнах переключаются.

16c эмулит zemu, но похоже проблема с подключением страниц памяти куда-попало. А дока есть как оно сделано? Я в фузе попробую допилить. 8) Ну и для сабжа будет полезно.

SAM style
07.11.2012, 22:53
Ну и для сабжа будет полезно.Удваиваю.
К слову, ALT+0 теперь циклически переключает видео-режимы Normal > 16col > atm-ega > atm-text

Blade
08.11.2012, 01:25
А дока есть как оно сделано? Я в фузе попробую допилить. 8) Ну и для сабжа будет полезно.
Вот здесь все написано:http://nedopc.com/zxevo/rom/zxevo_base_configuration.pdf

SAM style
08.11.2012, 16:59
Вот здесь все написано:http://nedopc.com/zxevo/rom/zxevo_base_configuration.pdfЕщё запутанее, чем в ATM2... Пилю пока последний. Результаты как-то не очень...
--
разобрался (?) с адресацией нечетных столбцов текстового режима, теперь куда лучше, только без палитры...

Q-Master
08.11.2012, 20:11
Ещё запутанее, чем в ATM2... Пилю пока последний. Результаты как-то не очень...

Тебе еще-бы профи впилить вместе с его видео-режимами и винтом и будет вообще супер. Я хоть родный комп вспомню. 8)

ZXMAK
09.11.2012, 10:10
разобрался (?) с адресацией нечетных столбцов текстового режима, теперь куда лучше, только без палитры...

а как у тебя реализовно обновление маппингов памяти для ATM2? Можешь код показать?

SAM style
09.11.2012, 12:49
а как у тебя реализовно обновление маппингов памяти для ATM2? Можешь код показать?
Оно ещё плохо работает. Из начального меню нормально выходит только в CP/M, остальное сбрасывается в 48й.
А вообще примерно так:
При выводе в FFF7 значение записывается в ZXComp::memMap[adr], где adr = 0.rom2.a15.a14 (как в самом ATM, там записывается в две РУ2).
При выводе в порты FF77,FFF7,7FFD вызывается zxMapMemory, которая распихивает нужные страницы по банкам. Если PEN=0, во все 4 ставится ROM3 (ПЗУ больше 64К для АТМ2 пока не сделал), иначе - по значениям, записанным в memMap[], порт 7FFD и сигналу dosen - биты расписаны в доке к АТМ2 (http://atmturbo.nedopc.com/atmdscr.htm) и статье в Inferno 02 (http://www.zxpress.ru/article.php?id=4495)

SAM style
09.11.2012, 23:18
Оно ещё плохо работает.А не, уже почти работает! С палитрой и правильным переключением ПЗУ. Pang и BallQuest запустились.
build 20121109 Собственно, АТМ 2+. Память 1024К; ПЗУ до 512К; граф.режимы: ega, текст, стандартный - только мультиколор проверить не на чем, поэтому его нет; наверное HDD - выбрать интерфейс ATM в вкладке опций. Диски CP/M не читаются. АЦП нет. В ромсете присутствует пункт font - это 2К прошивка с шрифтом для текстового режима АТМ Загрузка trd больше не проверяет, что это действительно диск TR-DOS
Выставлять маленькую ширину бордюра не рекомендуется - в текстовом режиме из-за экрана, вылезшего вниз, эмуль может завалиться.
[ win32 (http://samstyle.narod.ru/xpeccy/xpeccy_20121110_win32.zip) ][ deb x86 (http://samstyle.narod.ru/xpeccy/Xpeccy_20121110_i386.deb) ]

[bETA]mEN
10.11.2012, 14:01
Или я чего то не понял, но почему basic48 стартует только если закружен в страницу basic128?

SAM style
10.11.2012, 14:05
mEN;551257']Или я чего то не понял, но почему basic48 стартует только если закружен в страницу basic128?В ATM порядок страниц не такой, как в обычных пентагоно-скорпионах - то что написано в опциях, для него недействительно:
0: basic48
1: trdos
2: basic128
3: cp/m
Вдобавок, при старте принудительно активируется режим CP/M, и сброс идёт всё равно в 3ю страницу.
Выбирай в ромсете single file и сам файл с прошивкой. (тестировалось с последним xbios и bios_1_07_13)

[bETA]mEN
10.11.2012, 14:27
Да у меня чудеса не только в с ATM:

http://img820.imageshack_.us/img820/576/clipboard01ie.png (http://img820.imageshack_.us/i/clipboard01ie.png/)

http://img826.imageshack_.us/img826/87/clipboard02hi.png (http://img826.imageshack_.us/i/clipboard02hi.png/)

SAM style
10.11.2012, 14:33
mEN;551261']Да у меня чудеса не только в с ATM:Мой косяк. Не инициализирую маску для номера страницы ПЗУ. Если ромсет состоит из отдельных файлов, она остаётся не установленой. Для одного файла устанавливается при загрузке.
Исправлено. В 48К действуют страницы 1 и 3 (не-тырдос и тырдос)
[ win32 (http://samstyle.narod.ru/xpeccy/xpeccy_20121110_win32.zip) ][ deb x86 (http://samstyle.narod.ru/xpeccy/Xpeccy_20121110_i386.deb) ]

Q-Master
10.11.2012, 23:22
2SAM style:
При сборке с SDL:
[ 31%] Building CXX object CMakeFiles/xpeccy.dir/src/emulwin.cpp.o
/home/qmaster/--/FF4/Xpeccy/src/emulwin.cpp: In function ‘void doSDLEvents()’:
/home/qmaster/--/FF4/Xpeccy/src/emulwin.cpp:769:12: error: ‘SDLK_N’ was not declared in this scope
make[2]: *** [CMakeFiles/xpeccy.dir/src/emulwin.cpp.o] Ошибка 1
make[1]: *** [CMakeFiles/xpeccy.dir/all] Ошибка 2
Таки надо SDLK_n а не SDLK_N.
PS: А приаттач куданить ПЗУхи атмные нужные.
А еще ты сломал TR-Dos. Оно перестало загружать хоть что-либо. Постоянная Retry,Abort,Ignore

SAM style
10.11.2012, 23:50
Таки надо SDLK_n а не SDLK_N.
PS: А приаттач куданить ПЗУхи атмные нужные.
А еще ты сломал TR-Dos. Оно перестало загружать хоть что-либо. Постоянная Retry,Abort,Ignore
Мда, давно SDL-версии не собирал...
Прошивки АТМ - http://atmturbo.nedopc.com/atmshem.htm#roms - там и ПЗУ, и шрифт.
Тырдос не трогал. Косяк не исключаю, но из-за смены железа во время работы. Я для разных машин использую профили, а не меняю всё на одном.

SAM style
11.11.2012, 15:31
Оказывается, CP/M вроде как работает, я просто сначала не разобрался. Диск, загруженный в эмулятор на A: видится из CP/M как B:
Принц персии играется. Color Fight загрузился, но какое там управление - хрен разберешься.

Moro
11.11.2012, 16:40
Диск, загруженный в эмулятор на A: видится из CP/M как B:
Точно так же и на оригинальной машине.

Q-Master
11.11.2012, 16:49
Мда, давно SDL-версии не собирал...
Прошивки АТМ - http://atmturbo.nedopc.com/atmshem.htm#roms - там и ПЗУ, и шрифт.
Тырдос не трогал. Косяк не исключаю, но из-за смены железа во время работы. Я для разных машин использую профили, а не меняю всё на одном.

Дело не в профилях. Я просто загружаю кспекки и всавляю диск. Сразу получаю проблему. Профиль и машину не меняю вообще.

SAM style
11.11.2012, 17:00
Дело не в профилях. Я просто загружаю кспекки и всавляю диск. Сразу получаю проблему. Профиль и машину не меняю вообще.А я не наблюдаю проблему... Единственное, что могу предположить - посмотри в опциях->Storage->Disk интерфейс Beta-disk. На чистом профиле он выключен.
--
Хотя не, без него даже в тр-дос бы не вошло... Разве только если сбрасываться в него с выключенным бета-диском.
Попутно нашел ещё недочет - в 48К сброс должен происходить именно в 1 страницу. Если сбрасываться в 0ю, сброс всё равно пройдет в 1ю, но тр-дос не будет активироваться.

SAM style
12.11.2012, 20:27
А вот ещё вопрос - на сайте недопц к ZXEvo прилагаются только файлы прошивок альтеры. А отдельно ПЗУ (*.rom) где-то имеются или подойдут от обычного пентагона?

Q-Master
12.11.2012, 20:28
А я не наблюдаю проблему... Единственное, что могу предположить - посмотри в опциях->Storage->Disk интерфейс Beta-disk. На чистом профиле он выключен.
--
Хотя не, без него даже в тр-дос бы не вошло... Разве только если сбрасываться в него с выключенным бета-диском.
Попутно нашел ещё недочет - в 48К сброс должен происходить именно в 1 страницу. Если сбрасываться в 0ю, сброс всё равно пройдет в 1ю, но тр-дос не будет активироваться.
Вчера пробовал. Если подключить в профиле АТМ винч, то при первом-же к нему обращении - сегфолт.
Вторая проблема: в текст-моде атм-а слева не видно 1 знакоместо.
Не понял куда класть xbios 8.
Да. В АТМ режиме дырдос работает без проблем. Включил пентагон 1024сл в отдельном профиле. Включил все что надо. глюк-бут матерится на нулевой сектор.

Blade
12.11.2012, 20:34
А отдельно ПЗУ (*.rom) где-то имеются или подойдут от обычного пентагона?
От Пентагона не подойдут. Вот ПЗУ :http://nedopc.com/zxevo/rom/evoreset05.zip

SAM style
12.11.2012, 20:34
Не понял куда класть xbios
Все пзу в ~/.config/samstyle/xpeccy/roms (.\config\roms для windows) - списки строятся из содержимого этого каталога.

Вторая проблема: в текст-моде атм-а слева не видно 1 знакоместо.
Изображение соответсвует unreal-у. атрибут верхней левой позиции находится в стренице по смещению #21c0, далее идёт уже #01c1,#21c1,#01c2... Т.е ячейка #01c0 за атрибут вообще не отвечает! Сам в культурном шоке - в доке написано по-другому.

Да. В АТМ режиме дырдос работает без проблем. Включил пентагон 1024сл в отдельном профиле. Включил все что надо. глюк-бут матерится на нулевой сектор.Сегодня наблюдал схожее - сразу в CP/M диск не читался, но если зайти-выйти в тырдос, начинал. Углубил сброс BDI. Попробуй сегодняшний билд
А HDD у меня толком никогда не тестировалось. :(

От Пентагона не подойдут. Вот ПЗУ :http://nedopc.com/zxevo/rom/evoreset05.zip
Премного благодарен. Пока Ева сбрасывается в свой сервис (но иногда зависает на HALT-е). Выходит в 48К, 128К, тр-дос. Отправляет тупого юзера поспать... SD-карты нет, NVRAM с часами нет, HDD нет, порты состояний не все читаются.

SAM style
13.11.2012, 16:12
Первые шаги с PentEvo :) Куда указываю - переходит, диски читает. Почему-то нет AY-звука, хотя в его порты всё исправно пишется. CMOS пока работает как 256 байт дополнительной памяти, часы не тикают, да и содержимое нигде не сохраняется при закрытии. HDD и SDcard ещё нет.
Попробовал загрузить ProjectRobo - несистемно виснет на вызове 3D13 в загрузчике. До 4 вызовов нормально, потом зависаем. Хотя, если выключить Disk->Turbo, всё грузится, только с палитрой немного не то...

Q-Master
13.11.2012, 19:49
Все пзу в ~/.config/samstyle/xpeccy/roms (.\config\roms для windows) - списки строятся из содержимого этого каталога.


Это я понял. Там файл сильно больше 64к



Изображение соответсвует unreal-у. атрибут верхней левой позиции находится в стренице по смещению #21c0, далее идёт уже #01c1,#21c1,#01c2... Т.е ячейка #01c0 за атрибут вообще не отвечает! Сам в культурном шоке - в доке написано по-другому.


Т.е. у меня правильно не видится 1 левый столбец?



Сегодня наблюдал схожее - сразу в CP/M диск не читался, но если зайти-выйти в тырдос, начинал. Углубил сброс BDI. Попробуй сегодняшний билд
А HDD у меня толком никогда не тестировалось. :(


Попробовал. Ресет сервис стандартный посылает лесом. Диск не видится. Причем похоже только в пентагон вариантах.



Премного благодарен. Пока Ева сбрасывается в свой сервис (но иногда зависает на HALT-е). Выходит в 48К, 128К, тр-дос. Отправляет тупого юзера поспать... SD-карты нет, NVRAM с часами нет, HDD нет, порты состояний не все читаются.

Хм. В селекторе в гуе у тебя ее нет и выбрать не получается. Соответственно проверить не могу.

SAM style
13.11.2012, 19:59
Это я понял. Там файл сильно больше 64кПоддерживаются файлы до 512К - просто надо указывать их как Single File. Первые 16К пойдут в страницу 0, следующие -в 1, итд до 31.

Т.е. у меня правильно не видится 1 левый столбец?Если занести байт в ячейку (+#1c0) - он начинает отображаться в левом верхнем углу экрана. Возьми STS и потыкай байты в нужные места. Режимы видео переключаются по Alt+0 - даже не обязательно АТМ ставить. А ещё слишком маленький процент бордюра может съесть края широкого экрана.

Попробовал. Ресет сервис стандартный посылает лесом. Диск не видится. Причем похоже только в пентагон вариантах.Подтверждено. Посылает. Из тр-дос та же фигня. Турбо-нетурбо значения не имеет. Записано в проблемы :(

Хм. В селекторе в гуе у тебя ее нет и выбрать не получается. Соответственно проверить не могу.Надо собрать дебажную версию (cmake -DCMAKE_BUILD_TYPE=Debug). Сегодня около 17:00 по М-ве залил более-менее рабочую версию. При попытке вывести байт в ковокс рухнет из-за assert-а - по недосмотру порт не реализован.
Или без дебага - залезть в xcore/hardwares.cpp и в самом конце убрать #if-#endif вокруг строки с добавлением PentEvo

Q-Master
13.11.2012, 20:20
Поддерживаются файлы до 512К - просто надо указывать их как Single File. Первые 16К пойдут в страницу 0, следующие -в 1, итд до 31.


Ага. Понятно.



Если занести байт в ячейку (+#1c0) - он начинает отображаться в левом верхнем углу экрана. Возьми STS и потыкай байты в нужные места. Режимы видео переключаются по Alt+0 - даже не обязательно АТМ ставить. А ещё слишком маленький процент бордюра может съесть края широкого экрана.


Такое впечатление что у меня левый столбец за пределами окна вообще. В аттаче скриншот.



Подтверждено. Посылает. Из тр-дос та же фигня. Турбо-нетурбо значения не имеет. Записано в проблемы :(


Ок.



Надо собрать дебажную версию (cmake -DCMAKE_BUILD_TYPE=Debug). Сегодня около 17:00 по М-ве залил более-менее рабочую версию. При попытке вывести байт в ковокс рухнет из-за assert-а - по недосмотру порт не реализован. Ну, или залезть в xcore/hardwares.cpp и в самом конце убрать #if-#endif вокруг строки с добавлением PentEvo

Я уже собрал. А нормально что в project robo фон моргает всеми цветами радуги как бешеный? Я все глаза сломал.

SAM style
13.11.2012, 20:27
Такое впечатление что у меня левый столбец за пределами окна вообще. В аттаче скриншот.Border size поболе поставь - это действительно "съедено". Границы обрезки вычисляются по экрану 256x192, ega и текстовый шире.

Я уже собрал. А нормально что в project robo фон моргает всеми цветами радуги как бешеный? Я все глаза сломал.Ненормально. У меня не как бешеный, но раз в минуту подмигивает. И цвет у него не такой, как на скриншотах из темы игры. И робот сам вправо стреляет...
Пока непонятных проблем там ещё несколько.

sergio78
13.11.2012, 21:03
Прошу прощения, за беспокойство, но позвольте разок спросить. я смотрю здесь стоящий эмуль под линукс будет. А меня сейчас черти дернули его (линукс) на один из компов накатить. сейчас Агилья, но может перенакачу спецсборку альт с tde столом. Смотрю ещё, что скоро и penteva эмулиться будет, что очень хорошо. Ставил эмуль испанца, не понравился мне он. мне вообще унреал нравится, но deathsoft c TS-labs=ом ненашутку сцепились, и давно уже обсирают друг друга, вместо того , чтобы унрил доработать и портануть. всё это чую, что надолго, и по этому вот хочу поюзать хpeccy. но смотрю, инсталер под deb. на оффициальном сайте никаких ссылок на буилд, и описаний как устанавливать и какиеe у всего требования? Можно по этому всему немножко уточнить, если не сильно конечно оно напрягает.

SAM style
13.11.2012, 21:22
Прошу прощения, за беспокойство...Вкратце процесс получения исходников и компиляции описан в первом посте этой темы. Точные названия нужных для сборки пакетов могу сказать только для дебиана и убунты. Для Агилии и Альта в тему надо кастануть адептов этих дистрибутивов.
И, на мой взгляд, эмуль жрет как не в себя. Как минимум, нужен проц уровня P4 или Core2Duo. На P3 он шёл с громким скрипом.

sergio78
13.11.2012, 22:24
Вкратце процесс получения исходников и компиляции описан в первом посте этой темы. Точные названия нужных для сборки пакетов могу сказать только для дебиана и убунты. Для Агилии и Альта в тему надо кастануть адептов этих дистрибутивов.
И, на мой взгляд, эмуль жрет как не в себя. Как минимум, нужен проц уровня P4 или Core2Duo. На P3 он шёл с громким скрипом.

Подопытный пк, хлам athlonxp 2800 c 1 гигом, и geforce 6600. По скорости, как раз в самый минимум, должно сносно работать. но в линуксе сам ничего собирать ещё не умею, и пока времени на изучение этого нелёгкого дела, у меня нет. Я думал, разпаковнный .deb инсалятор, скопировать, и оно так запаказывает. ладно, спасибо большое, за ответ. пока обожду, может тут ещё кто, соберет .rpmу

SAM style
13.11.2012, 23:10
Подтверждено. Посылает. Из тр-дос та же фигня. Турбо-нетурбо значения не имеет. Записано в проблемыПроблема с Pent1024SL локализована - был конфликт EFF7 с портами BDI. Сегодня-завтра залью исправленное.

---------- Post added at 22:26 ---------- Previous post was at 22:24 ----------


Подопытный пк, хлам athlonxp 2800 c 1 гигом, и geforce 6600. По скорости, как раз в самый минимум, должно сносно работать. но в линуксе сам ничего собирать ещё не умею, и пока времени на изучение этого нелёгкого дела, у меня нет. Я думал, разпаковнный .deb инсалятор, скопировать, и оно так запаказывает. ладно, спасибо большое, за ответ. пока обожду, может тут ещё кто, соберет .rpmу
В принципе, можно попробовать бинарник из deb-а запустить, доставив либы, которые он хочет. Только он там 32-битный.

---------- Post added at 23:10 ---------- Previous post was at 22:26 ----------

1.Project Robo пишет в AY по порту BEFD, а не BFFD.
2.Во-вторых, я сам виноват - не надо было ставить "неизвестный порт" как FF - из-за этого недекодированные порты гадили в палитру.

sergio78
13.11.2012, 23:18
32 бита как раз и надо только. athlonxp amd64 ещё не поддерживает, и sse2 тоже, которое вроде как новые gсс обязательно требуют.

SAM style
14.11.2012, 01:06
build 20121113 PentEvo - начало (пары полезных вещей ещё нет). Звук таки заработал, палитра в норме. Project Robo грузится и с турбо-bdi. Нашелся конфликт по портам в Pent1024SL Максимальная частота проца - 14МГц Для P1024SL и PentEvo реализованы порты CMOS. Время тикает всегда и на всех профилях, независимо от паузы эмулятора. В начале почти все ячейки CMOS занулены, сохранения содержимого ещё нет. Работают только часы, дата не меняется. Для АТМ2 доступны объёмы памяти 128, 256, 512, 1024 К. Правда, CP/M 256 определяет как 512
[ win32 (http://samstyle.narod.ru/xpeccy/xpeccy_20121113_win32.zip) ][ deb x86 (http://samstyle.narod.ru/xpeccy/Xpeccy_20121113_i386.deb) ]

James DiGreze
14.11.2012, 18:00
Сэм, сегодня качнул deb, но он таки не поставился. :(
Дистр Ubuntu 12.04 под Celeron2000/768/NVidia 5200.
Пишет: "Внутренняя ошибка" и "Не удалось открыть файл «/home/user/downloads/xpeccy_20121113_i386.deb»."
Вопрос: как можно ещё попробовать?

SAM style
14.11.2012, 18:15
Название пакета начинается с большой буквы (используй автодополнение по Tab).
Только что скачал пакет, поставил себе на дебиан без проблем. Значит, с ним всё нормально.
В убунте есть устаовщик deb-ов, просто 2 раза кликни на нём.

James DiGreze
14.11.2012, 19:17
Короче ага, в общем через центр ни в какую не ставилось, а по right mouse button выбрав инсталлер GDebi. Ща будем посмотреть. Пасиб!

Q-Master
14.11.2012, 19:56
Пишет: "Внутренняя ошибка" и "Не удалось открыть файл «/home/user/downloads/xpeccy_20121113_i386.deb»."
Вопрос: как можно ещё попробовать?

В консоли sudo dpkg -i /home/user/downloads/Xpeccy_20121113_i386.deb.

---------- Post added at 19:56 ---------- Previous post was at 19:47 ----------


Border size поболе поставь - это действительно "съедено". Границы обрезки вычисляются по экрану 256x192, ega и текстовый шире.
Ненормально. У меня не как бешеный, но раз в минуту подмигивает. И цвет у него не такой, как на скриншотах из темы игры. И робот сам вправо стреляет...
Пока непонятных проблем там ещё несколько.
Попробовал новую сборку. В проджект робо перестал моргать экран как бешеный.
Звук теперь завывает. Особенно если частота проца не 3.5 мгц в настройках

Vitamin
14.11.2012, 23:02
И, на мой взгляд, эмуль жрет как не в себя. Как минимум, нужен проц уровня P4 или Core2Duo. На P3 он шёл с громким скрипом.
Прогнал профилирование. Функция vidSync (жрущая 70% времени) - это какой-то ахтунг. Проверять видеорежим на каждое рисование пиксела- это ж ужоснах. Полиморфизм спасет отцов русской демократии.

SAM style
14.11.2012, 23:23
Прогнал профилирование. Функция vidSync (жрущая 70% времени) - это какой-то ахтунгСпасибо, кэп!
Пока склоняюсь к такому варианту: в структуре Video будет указатель на функцию прорисовки нужного числа точек для конкретного режима. При смене режима указатель меняется на нужную функцию. Прорисовка точек = вызов функции по этому указателю.
Помнится, и во времена одного видеорежима она неслабо кушала :)

Vitamin
14.11.2012, 23:33
Пока склоняюсь к такому варианту: в структуре Video будет указатель на функцию прорисовки нужного числа точек для конкретного режима. При смене режима указатель меняется на нужную функцию. Прорисовка точек = вызов функции по этому указателю.
У меня, помницца, одно время была идея рисовать экран в пакетном режиме. Но это требует некоторого анализа исполняемых операций (в принципе, он и так делается). Вкратце- пока не дошли до команды, влияющей на изображение (запись в видеопамять, вывод в порт и т.п), экран не рисовать. Сложности разве что с определением факта записи в видеостраницу.

SAM style
15.11.2012, 00:16
У меня, помницца, одно время была идея рисовать экран в пакетном режиме. Но это требует некоторого анализа исполняемых операций (в принципе, он и так делается). Вкратце- пока не дошли до команды, влияющей на изображение (запись в видеопамять, вывод в порт и т.п), экран не рисовать. Сложности разве что с определением факта записи в видеостраницу.У меня отрисовка выдаёт ещё и сигналы INT и конец кадра.
Я как-то пробовал делать подобное - отрисовывать только на моментах записи в порты и память, но на число отрисованых точек ориентируется добрая половина всего остального (формирование звука, синхронизация ленты, гс, флоп-контроллер...) и получался такой разлад, что я сделал всё обратно. Именно на число отрисованых точек, чтобы не зависеть от частоты проца.

Vitamin
15.11.2012, 00:33
У меня отрисовка выдаёт ещё и сигналы INT и конец кадра.
Я как-то пробовал делать подобное - отрисовывать только на моментах записи-чтения в порты и память, но на число отрисованых точек ориентируется добрая половина всего остального (формирование звука, синхронизация ленты, гс, флоп-контроллер...) и получался такой разлад, что я сделал всё обратно. Именно на число отрисованых точек, чтобы не зависеть от частоты проца.
Имхо, надо ориентироваться на абсолютные таймстемпы. Наносекундной точности с лихвой хватает (1 такт проца- почти 286нс, есть запас для оверклока; 1 пиксел экрана- почти 1мкс). Я так у себя сделал и без проблем с производительностью и кодированием можно синхронизировать 3 независимые частоты (ay+z80+sound). Целочисленная арифметика опять же.

SAM style
15.11.2012, 17:20
А вот и нифига. Если вместо всего while (vid->pixcount >= 1) {...} вызывать функцию по указателю, соответствующую режиму, эта черная дыра начинает хавать даже чуть больше. Надо меньше sync-ать, но на большие расстояния.

Vitamin
15.11.2012, 18:03
А вот и нифига. Если вместо всего while (vid->pixcount >= 1) {...} вызывать функцию по указателю, соответствующую режиму, эта черная дыра начинает хавать даже чуть больше. Надо меньше sync-ать, но на большие расстояния.
В дебаге профиль сними чтоб было более ясно. Ну и пореже вызывать эту функцию, соотвеццно.

SAM style
15.11.2012, 19:44
На работе снимал показания по загружености в top-е (на профилер уже времени не было) - примерно +1%.
Дома прошелся валгриндом. В старом варианте self(vidSync) = 27.7%, с заменой на вызов функции self(vidDrawNormal) = 22.6%.
Топ мне врёт?

Vitamin
15.11.2012, 20:51
Дома прошелся валгриндом. В старом варианте self(vidSync) = 27.7%, с заменой на вызов функции self(vidDrawNormal) = 22.6%.
Топ мне врёт?
А причем тут валгринд? Он вроде для других целей предназначен.
Топу вообще доверять в таких вопросах не стоит (динамическое изменение частоты проца сводит достоверность на нет). Лучше вычленить проверяемый код в автотест и его гонять под профилировщиком или time на худой конец.

SAM style
15.11.2012, 21:14
valgrind --tool=callgrind - не?
QtCreator: анализ - профилер функций valgrind

Vitamin
15.11.2012, 23:51
vallgrind --tool=callgrind - не?
QtCreator: анализ - профилер функций valgrind
Там больше на использование кэша профилирование.

SAM style
17.11.2012, 01:27
Там больше на использование кэша профилирование.Тогда gprof? Выдаёт схожие проценты.

Vitamin
17.11.2012, 15:54
Тогда gprof? Выдаёт схожие проценты.
Ну раз результат получается в целом одинаковый, значит надо использовать то, что удобнее. gprof требует спецсборки, но работает почти на той же скорости, callgrind медленный, но не требует пересборки и т.п.
5% прироста скорости- это хорошо:)

siril
27.11.2012, 10:20
Ого! Так ведь это потенциально первый эмуль спектрума под мак с отладчиком?

Пробовал под MacOSX собирать? (Могу попробовать под руководтством автора пособирать).

mastermind
27.11.2012, 10:22
Ого! Так ведь это потенциально первый эмуль спектрума под мак с отладчиком?
Еще есть: http://zx-pk.ru/showthread.php?t=2480

SAM style
27.11.2012, 10:29
Ого! Так ведь это потенциально первый эмуль спектрума под мак с отладчиком?

Пробовал под MacOSX собирать? (Могу попробовать под руководтством автора пособирать).
Пробовал, но по незнанию быстро сдулся. Завести удалось максимум хакинтош 10.5. cmake, qt, sdl водрузил. А вот что с компилятором делать? Повсеместно нахваливают xcode, но официально его не получить - надо быть эпл-девелопером, более-менее современные версии с рутрекера требуют 10.6 и выше.
Дебагер, кстати, сырой и почти неудобный.

SAM style
27.11.2012, 12:16
10.5 много лет томуу назад ставили, сейчас есть установленный и 10.6 и 10.7 последний, ну а 10.8 чет как то лень ставить...
xcode тоже вроде не проблема найти, даже и находил, может и ставил. Вот только отлаживать нечего).
если под АМД - то да, последние версии трудно заводить, а под интел проблем вроде особых нету...
Ну и насколько я знаю, под маком пользуют SpecEmu через wine. Работает.
У меня скачаны iso-образы 10.6 и 10.7, но ни в виртуалбоксе, ни на ноуте они не завелись. Везде Intel, только видяха на ноуте ATI

ram_scan
27.11.2012, 18:48
Так вроде под яблоко православный GCC вполне себе существуэ и здравствуэ (да и CLang вроде тоже, не брульянт конечно, но на сегодняшний день вполне работоспособно). За ICC я также вроде слышал, но врать не буду. Так что не xcode единым...

---------- Post added at 21:48 ---------- Previous post was at 21:45 ----------

PS: я бы на яблочников на самом деле не ориентировался. Народу полпроцента, геморрою с портированием может быть по пояс, плюс менталитет. Под iOS еще есть смысл огород городить наверное, но в ихнем аппсторе на копилефт лицензии строгое табу.

mastermind
27.11.2012, 18:50
А xcode это разве не IDE к clang/LLVM просто? LLVM и clang же во многом эпплом разрабатываются/спонсируются.

EDIT: Ну да, так и есть в общем-то: http://en.wikipedia.org/wiki/Xcode

The Xcode suite includes a modified version of the GNU Compiler Collection as well as, in Xcode 3.1 and later, the llvm-gcc compiler, with front ends from the GNU Compiler Collection and a code generator based on LLVM,[3] and, in Xcode 3.2 and later, Apple's LLVM Compiler, with the clang front end and a code generator based on LLVM, and the Clang Static Analyzer
...
As of version 4.2 the Apple LLVM Compiler became the default compiler.[10] LLDB became the default debugger as of Xcode 4.3.
Там же кстати написано что оно доступно в app store бесплатно.

ram_scan
27.11.2012, 18:59
У их там в пропиертарщине на самом деле свои плюшки и заморочки. То есть вроде у опенсорцного и ихнего компилятора ноги растут из одного места, начинаешь сравнивать, тут прагма в фирмовом дополнительная полезная, тут языковая конструкция реализована по дефолту.

Это мне в свое время какой-то хелловорлд затребовалось под win32 собрать, студию тырить было негде да и не хотелось (людЯм отдавать надо результат было), поставил опенватком. Вроде posix, C99, все дела. Граблей насобирал...

---------- Post added at 21:59 ---------- Previous post was at 21:55 ----------

То есть если есть возможность под макосью собрать муль GCC то я бы собирал GCC. Может быть с установкой компилятора бубна больше, зато потом с диалектами бубна меньше.

Q-Master
27.11.2012, 22:26
Пробовал, но по незнанию быстро сдулся. Завести удалось максимум хакинтош 10.5. cmake, qt, sdl водрузил. А вот что с компилятором делать? Повсеместно нахваливают xcode, но официально его не получить - надо быть эпл-девелопером, более-менее современные версии с рутрекера требуют 10.6 и выше.
Дебагер, кстати, сырой и почти неудобный.

xcode - кал несусветный. Убог чуть больше чем полностью, даже по сравнению с старым kdevelop. Под мак без проблем можно из портов юзать sdl. cmake и qt там так-же есть без каких-либо проблем.
Эпл-девелопером можно легко стать без каких-либо уплат и пр. Сам XCode бесплатен.
По факинтошу не скажу. Надо искать и качать ИМХО именно факинтош.
Если будет время - попробую собрать на работе xpeccy.

SAM style
27.11.2012, 22:46
Если будет время - попробую собрать на работе xpeccy.
Сразу собрать не получится.
Где в маках принято хранить настройки? Пути задаются в initPaths() в settings.cpp.
+ в нескольких местах в исходниках if-else-endif по принципу win32-неwin32, в других - более жестко (win32/linux).

siril
28.11.2012, 09:50
SAM style, раньше, чтобы стать AppleDeveloper'ом и получить дистрибутив XCode достаточно было просто зарегистрироваться на developer.apple.com (заодно получаешь и AppleID, который можно использовать в MacAppStore).

Сам XCode (как IDE) для разработки/сборки не необходим. С ним устанавливаются консольные DevelopersTools и проч. стандартные *nix'овые (BSD*) инструменты для сборки.

Однако для удобства сборки и для того, чтобы просто можно было настроить внешний вид/главное меню, ресурсы приложения - можно воспользоваться и XCode.

Сборки хакинтоша с приемлемым уровнем геморроя могут установиться только на компьютеры с intel-процами. На AMD лучше даже не начинать ставить - так как и в самой системе MacOSX и в программах под неё придётся перехватывать команду cpuid, на которую завязана оптимизация производительности. Естественно MacOSX и программы под неё про AMD-процессоры ничего не знают и будут взрываться при каждом удобном случае.

Самый простой способ - это скачать готовый образ виртуалки с установленными DeveloperTools и XCode: http://rutracker.org/forum/viewtopic.php?t=3768015

tnt23
13.12.2012, 23:57
Мопед не мой, просили кинуть пару фоток :)

"1. эмулятор zx spectrum. собран из исходников (xpeccy 0.3) и работает на АРМе iMX535 (1GHz). В эмуляторе есть поддержка TRDOS, куда подсунут образ с игрушками."
http://ic.pics.livejournal.com/jury093/14891470/42072/42072_original.jpg

"2. плата, на которой это запущено"
http://ic.pics.livejournal.com/jury093/14891470/41901/41901_original.jpg

SAM style
24.12.2012, 22:31
Подброшу... Эмуляции SD-карты уже хватает, чтобы грузить образы в Еве. Есть ли какие-то проги, желательно для Евы, чтобы поширее отдебажить работу с карточкой?

Q-Master
25.12.2012, 00:21
А я не понял, почему у тебя звукогенерацию-то в отдельный поток нельзя вынести? Там-же нет привязок никаких к таймингам.

SAM style
26.12.2012, 21:21
Там-же нет привязок никаких к таймингам.К состоянию AY/GS/beep/tape/SDrive/whatever в конкретный момент эмуляции? Есть конечно. А если ты про вывод, то вывод в SDL вполне себе оторван от цикла эмуляции.
А пока update Базовая эмуляция SD-карточки, работает на PentEvo. Сэмулировано чуть меньше, чем половина команд, но этого хватает для загрузки образов. Выбор образа, объёма и залочение карты - на вкладке Storage->SDCard cmos теперь сохраняется. Файлы лежат там же, где конфиги и называются ${PROFILE_NAME}.cmos. Загружаются на старте эмуля и сохраняются при закрытии. Если эмуль убить, cmos не сохранится.
В *nix создать чистый образ можно так:
dd if=/dev/zero of=sdcard.img bs=1M count=256
mkfs.vfat sdcard.img, а потом примонтировать его и накидать внутрь файлов. Как то же самое сделать в windows - хз

[ deb x86 (http://rghost.ru/42534519) ][ win32 (http://rghost.ru/42534592) ]

TSL
28.12.2012, 17:29
Хай. ТСконфу эмулить буишь? =)

newart
28.12.2012, 19:36
[ deb x86 ][ win32 ]

https://dl.dropbox.com/u/6439155/ssssssssss.png

Q-Master
29.12.2012, 00:14
К состоянию AY/GS/beep/tape/SDrive/whatever в конкретный момент эмуляции? Есть конечно. А если ты про вывод, то вывод в SDL вполне себе оторван от цикла эмуляции.


Да почему у тебя эмуляция AY к чему-то привязана-то? Оно-ж просто тактуется и все. Пока не понимаю почему отвязать-то нельзя.

SAM style
29.12.2012, 08:58
Хай. ТСконфу эмулить буишь? =)
В первую очередь хочу заставить нормально работать HDD.
Для эмуляции TS нужны спецификации, и чем подробнее, тем лучше.

QtCore4.dllВ первом посте ссылки на либы для винды.

---------- Post added at 08:58 ---------- Previous post was at 08:38 ----------


Да почему у тебя эмуляция AY к чему-то привязана-то? Оно-ж просто тактуется и все. Пока не понимаю почему отвязать-то нельзя.Заполнение буфера привязано к состоянию AY и к текущему "времени" эмуляции, т.к. за кадр нужно положить в буфер 882 (44100 / 50) байт. Всё - напрямую AY и CPU связаны только чтением-записью регистров. Догонка AY производится только во время записи байта в буфер.

Q-Master
30.12.2012, 15:21
Заполнение буфера привязано к состоянию AY и к текущему "времени" эмуляции, т.к. за кадр нужно положить в буфер 882 (44100 / 50) байт. Всё - напрямую AY и CPU связаны только чтением-записью регистров. Догонка AY производится только во время записи байта в буфер.

Почему оно линейно-то в одном потоке делается? Я ну никаких проблем до сих пор так и не углядел. Синхронизацию потоков сделать очень легко. Почему ты привязан к 44100 тоже не очень ясно. Вынести генерацию и проигрывание в отд. поток с синхронным стартом по началу кадра и окончанием генерации по заполнении нужного кол-ва байт ну никаких проблем.

SAM style
30.12.2012, 15:33
Почему оно линейно-то в одном потоке делается? Я ну никаких проблем до сих пор так и не углядел. Синхронизацию потоков сделать очень легко. Почему ты привязан к 44100 тоже не очень ясно. Вынести генерацию и проигрывание в отд. поток с синхронным стартом по началу кадра и окончанием генерации по заполнении нужного кол-ва байт ну никаких проблем.К 44100 не привязан - промежутки между байтами в буфере вычисляются. В идею, вроде, въехал. После НГ попробую.
Там вообще много бардака за 4 года накопилось...

perestoronin
30.12.2012, 21:37
"1. эмулятор zx spectrum. собран из исходников (xpeccy 0.3) и работает на АРМе iMX535 (1GHz). В эмуляторе есть поддержка TRDOS, куда подсунут образ с игрушками."

"2. плата, на которой это запущено"
(http://zx.pk.ru/showpost.php?p=559096&postcount=591)


FreeScale iMX536 (ARM Cortex-A8 1000MHz, FPU, VPU, 3D&2D graphics processors, DDR2, SATA, SD, Ethernet, LCD, 2 x LVDS, 2 x HS USB, RS232, I2C, SPI ...)
256M DDR2
256M NAND flash
SATA HDD connector
Ethernet 100/10M
Audio CODEC
SPDIF out
High Speed USB-host, High Speed USB-Host/OTG/Device
SD/MMC card, RS232
74 линии I/O


http://starterkit.ru/html/images/products/sk_imx53.png (http://starterkit.ru/html/index.php?name=shop&op=view&id=67)

http://starterkit.ru/html/images/products/sk_imx53_bot.png (http://starterkit.ru/html/index.php?name=shop&op=view&id=67)

Жаль, что для этого изделия на дешевой массовой модели SoC ARM (еще и старой к тому же), ценник далеко не "демократичный" навешен в 6500рублей.

Q-Master
31.12.2012, 20:34
К 44100 не привязан - промежутки между байтами в буфере вычисляются. В идею, вроде, въехал. После НГ попробую.
Там вообще много бардака за 4 года накопилось...

Только не забудь что это касается всего звука вообще. ГСку можно всю в отд. поток выносить целиком. А то у меня на 4 ядрах эмуль тормозит исключительно из-за однопоточности.

SAM style
01.01.2013, 13:26
Так-с...
Со звуком получилось довольно просто с использованием сигналов-слотов Qt.
С GS как-то двуяко. Синхронизировать надо во время чтения-записи в его порты и в момент записи сэмпла в звуковой буфер. Второй вариант автоматически выполняется в другом потоке, а первый - не очень.
PS: пока никуда не закоммитил.

Q-Master
01.01.2013, 23:35
Так-с...
Со звуком получилось довольно просто с использованием сигналов-слотов Qt.
С GS как-то двуяко. Синхронизировать надо во время чтения-записи в его порты и в момент записи сэмпла в звуковой буфер. Второй вариант автоматически выполняется в другом потоке, а первый - не очень.
PS: пока никуда не закоммитил.

Ну с ГС легко. На изменения регистров вешаешь кондишн и все. Зато весь звук отдельно. Я-бы вообще все генераторы звуков сделал как отдельные потоки. Тогда синхронизация только по фрейму и регистрам с основным потоком. Ну и оптимальнее всего заюзан проц.
PS: Коммить давай уже. 8)

SAM style
01.01.2013, 23:54
PS: Коммить давай уже. 8)Фазы AY и так высчитываются только при заполнении буфера, на записи в регистры фиксируется момент записи и период.
Beep/SDrive выносить в отдельный поток - явно лишнее.
Ещё мофон может издавать звуки, но там тоже не особо много кушается.
С GS ещё пораскину мозгом.
PS: закоммитил сегодняшнее.

Q-Master
02.01.2013, 19:50
Фазы AY и так высчитываются только при заполнении буфера, на записи в регистры фиксируется момент записи и период.
Beep/SDrive выносить в отдельный поток - явно лишнее.
Ещё мофон может издавать звуки, но там тоже не особо много кушается.
С GS ещё пораскину мозгом.
PS: закоммитил сегодняшнее.

Я собрал. Звук хрипит по-прежнему непонятно почему. При этом ты сломал SDL 8) и каким-то макаром сделал более быструю Qt отрисовку. У меня теперь работает в Qt все ок и видео не тормозит.

SAM style
02.01.2013, 22:46
Я собрал. Звук хрипит по-прежнему непонятно почему. При этом ты сломал SDL 8) и каким-то макаром сделал более быструю Qt отрисовку. У меня теперь работает в Qt все ок и видео не тормозит.
Тысяча чертей! Да, SDL сломан - не обрабатываются события. Закомментировал одну строку, когда эксперименты проводил. Залил исправленное.
Трещит оно всё потому же - кроме заполнения звукового буфера, всё остальное до сих пор в одном потоке. Работаю над тем, чтобы разорвать собственно эмуляцию и обработку всякой околоэмуляторной нечисти.

---------- Post added at 21:31 ---------- Previous post was at 20:13 ----------

Не-SDL звук хрипит, сбита синхронизация.
При отсутствии образа SD-карты применение опций всё валит.

---------- Post added at 22:46 ---------- Previous post was at 21:31 ----------

Во, так должно быть лучше. Эмуляция отдельно от обновления экрана; GS синхронизируется не на все in/out, а только на свои; звук починен обратно; на тормоза из-за эмуляции звук должен вытягиваться (конец недозаполненного буфера забивается последним сэмплом);
Закоммичено.

Q-Master
03.01.2013, 13:27
Тысяча чертей! Да, SDL сломан - не обрабатываются события. Закомментировал одну строку, когда эксперименты проводил. Залил исправленное.
Трещит оно всё потому же - кроме заполнения звукового буфера, всё остальное до сих пор в одном потоке. Работаю над тем, чтобы разорвать собственно эмуляцию и обработку всякой околоэмуляторной нечисти.

---------- Post added at 21:31 ---------- Previous post was at 20:13 ----------

Не-SDL звук хрипит, сбита синхронизация.
При отсутствии образа SD-карты применение опций всё валит.

---------- Post added at 22:46 ---------- Previous post was at 21:31 ----------

Во, так должно быть лучше. Эмуляция отдельно от обновления экрана; GS синхронизируется не на все in/out, а только на свои; звук починен обратно; на тормоза из-за эмуляции звук должен вытягиваться (конец недозаполненного буфера забивается последним сэмплом);
Закоммичено.
Резюме: Скорость возросла. Звук по-прежнему хрипит (SDL). Не икает, а именно хрипит. Причем если в настройках переключиться с 14.0МГц на 3.5МГц прямо во время игры, то звук становится сразу практически вменяемым. Надо проверять либо порядок (endiannes), либо размеры буферов.
Под ALSA звук вроде-бы не хрипит, зато икает. Такое впечатление что просто нехватает буфера для проигрывания, либо проигрывается быстрее чем расчитано и буфер кончается раньше чем должен, но и зацикливания не происходит.
SDL-отрисовка работает, но тупит раз в 5 сильнее чем Qt-отрисовка. Как у тебя так получилось - хз. 8)
Плюсом, сделай плиз в опциях еще и 48000. На некоторых современных встроенных звуковухах ресампл из 48000 в 44100 работает хреново.

SAM style
03.01.2013, 14:52
Закоммитил следующее Добавлен вывод на 48000Гц Обновление окна выведено в свой поток. Если до следующего раза нарисоваться не успело, оно пропускается.
Обновления каких-нибудь либ были? Если да, можно попробовать пересобрать эмуль целиком (make clean && make). У меня иногда такое бывает после обновления - звук заикается, кнопки не работают...
Чтобы узнать степень заполнения буфера, можно в sound.cpp в sndFillToEnd() раскомментить строку printf("tail: %i\n",sndChunks - smpCount);. Если в консоль польются нули - буфер заполняется как надо. sndChunks - вычисленное кол-во сэмплов в буфере на 1/50 сек, smpCount - счетчик сэмплов, в начале кадра обнуляется.

tnt23
04.01.2013, 13:10
Жаль, что для этого изделия на дешевой массовой модели SoC ARM (еще и старой к тому же), ценник далеко не "демократичный" навешен в 6500рублей.

Кто же вам мешает купить более современную и дешевую? а если нет, то взять и сделать?

Q-Master
04.01.2013, 19:45
Закоммитил следующее Добавлен вывод на 48000Гц Обновление окна выведено в свой поток. Если до следующего раза нарисоваться не успело, оно пропускается.
Обновления каких-нибудь либ были? Если да, можно попробовать пересобрать эмуль целиком (make clean && make). У меня иногда такое бывает после обновления - звук заикается, кнопки не работают...
Чтобы узнать степень заполнения буфера, можно в sound.cpp в sndFillToEnd() раскомментить строку printf("tail: %i\n",sndChunks - smpCount);. Если в консоль польются нули - буфер заполняется как надо. sndChunks - вычисленное кол-во сэмплов в буфере на 1/50 сек, smpCount - счетчик сэмплов, в начале кадра обнуляется.

Теперь по пунктам. Либы не обновлялись. Вчера игрался с кодом и смотрел что как.
Первое:


if ((err = snd_pcm_set_params(alsaHandle,SND_PCM_FORMAT_U8,SN D_PCM_ACCESS_RW_INTERLEAVED,sndChans,sndRate,1,100 000)) < 0) {
последнее число, а именно 0.1 сек - слишком большая задержка и в результате у меня звук играется не подряд, а с паузами. При этом, если эту задержку уменьшить, то щелчки учащаются.
Второе:


SDL_MixAudio(stream,sndBuffer,len,SDL_MIX_MAXVOLUM E);

Вот эту строку надо заменить на простое
memcpy(stream, sndBuffer, len);. Исходя из документации MixAudio нужен только если идет микширование каналов. У тебя его нет. Ты микшишь до этого в момент генерации.
Третье:
Под SDL такое впечатление что звук играет медленнее, как-бы заторможенно. При этом он еще и хрипит. Такое ощущение что там либо с порядком байт что-то не то, либо он модулируется чем-то... Я не понял в чем дело пока. Надо пытаться слить буфер в файл и попробовать так проиграть.

TSL
05.01.2013, 20:11
[QUOTE=SAM style;562697]Для эмуляции TS нужны спецификации, и чем подробнее, тем лучше.[COLOR="Silver"]
ОК, со временем будут.

SAM style
08.01.2013, 13:55
Собрал накопленное с предыдущего раза.
[ win32 (http://samstyle.narod.ru/xpeccy/xpeccy_20130108_win32.zip) ][ deb x86 Qt (http://samstyle.narod.ru/xpeccy/Xpeccy_20130108_i386.deb) ]

ram_scan
08.01.2013, 15:19
становится сразу практически вменяемым. Надо проверять либо порядок (endiannes), либо размеры буферов.
Под ALSA звук вроде-бы не хрипит, зато икает. Такое впечатление что просто нехватает буфера для проигрывания, либо проигрывается быстрее чем расчитано и буфер кончается раньше чем должен, но и зацикливания не происходит.

В исходники не глядел (не под рукой), можно на пальцах как работа с буфером сделана ? По уму нужно делать два буфера, и пока один проигрывается заполнять второй, а потом менять их местами.

Кстати есть мысль что эмуляцию AY лучше попробовать сделать через OPL2 (11-голосным FM синтезатором можно выкружить очень много, а по ресурсожоркости копейки). Тем более что он во всех звуковухах урожденно YM3812 совместимый и так или иначе преемственность есть нативная.

SAM style
08.01.2013, 17:32
В исходники не глядел (не под рукой), можно на пальцах как работа с буфером сделана ? По уму нужно делать два буфера, и пока один проигрывается заполнять второй, а потом менять их местами.На пальцах всё, кроме SDL действует так: есть таймер, по сигналу которого буфер отправляется на проигрывание и выдаётся сигнал на начало эмуляции (от INT до INT), во время эмуляции этот же буфер заполняется. Для SDL работает его собственный callback.
Надо попробовать с двумя буферами. Хотя, мне всё равно сложно решать проблему, не имея её - даже на ноутбуке (2-ядерник intel), когда с отрисовкой по Qt эмулятор жрёт 45%, звук не хрипит и не заикается!

Q-Master
09.01.2013, 00:16
На пальцах всё, кроме SDL действует так: есть таймер, по сигналу которого буфер отправляется на проигрывание и выдаётся сигнал на начало эмуляции (от INT до INT), во время эмуляции этот же буфер заполняется. Для SDL работает его собственный callback.
Надо попробовать с двумя буферами. Хотя, мне всё равно сложно решать проблему, не имея её - даже на ноутбуке (2-ядерник intel), когда с отрисовкой по Qt эмулятор жрёт 45%, звук не хрипит и не заикается!

Да не в скорости проца проблема. Проблема заключается в том, что у тебя генерация буфера привязана к 50Гц, а реально он может проигрываться быстрее. Вот похоже у меня такая фигня с ALSA и происходит. Что с SDL не так я пока не знаю. Небыло времени для экспериментов. Плюс к тому, у тебя циклический буфер нихрена не циклический 8). Я не вкурил нафига ты его сбрасываешь каждый раз после проигрывания.
Посмотри сорцы zemu. Там правда только SDL версия, но там у меня все работает как часы.

ram_scan
09.01.2013, 06:34
Тут важно понять, хрипит из-за клиппинга, или заикается из-за того что успевает выплюнуть буфер раньше чем новый подготовится.

В первом случае причиной может быть целочисленное переполнение из-за микширования и/или ресэмплинга, второй вобщем-то очевиден сам по себе.

SAM style
10.01.2013, 17:06
Попробуем так... build 20130110 За кадр звуковой буфер не заполняется больше положеного. ALSA выводит звук так же, как SDL - из кольцевого буфера в промежуточный вытаскивается определенное кол-во байт и отправляются на проигрывание Исправил переинициализацию памяти выше 128К при смене профиля. Возможность всегда запускаться на профиле default, а не на последнем выбраном (галка Options->Xpeccy->Profiles->Start on default)

Q-Master
11.01.2013, 00:23
Тут важно понять, хрипит из-за клиппинга, или заикается из-за того что успевает выплюнуть буфер раньше чем новый подготовится.

В первом случае причиной может быть целочисленное переполнение из-за микширования и/или ресэмплинга, второй вобщем-то очевиден сам по себе.

В альзе заикается из-за того, что есть пауза между выводами в аудиобуффер. В СДЛ хрипит, но я не знаю почему. Буду играться.

ram_scan
11.01.2013, 05:59
ALSA выводит звук так же, как SDL - из кольцевого буфера в промежуточный вытаскивается определенное кол-во байт и отправляются на проигрывание

Вот два буфера как раз нужны чтобы ничего не вытаскивать и не складывать. Поменял указатель - буфер новый вместо старого. пока один играется, второй наполняется.

А кстати зачем буфер именно кольцевой ? При переполнении буфера звук все равно испортится, только в случае кольцевого буфера у него будет съедаться начало, а в случае линейного - конец. Что при восприятии на слух абсолютно не принципиально, все равно будет "дырка" в звуке, но линейный буфер проще закодить и работать с ним быстрее из-за отстутствия "заворота".

SAM style
11.01.2013, 11:00
А кстати зачем буфер именно кольцевой ?SDL принципиально устанавливает свою длину буфера, немного больше той, которая нужна для проигрывания 1/50 сек. И процедурину проигрывания вызывает сам, независимо от моего таймера. Так что лучше пусть бегут по кругу, чем тягать туда-сюда кусок недоигранного.

Vitamin
11.01.2013, 11:11
А что у тебя вынесено в отдельный поток? Непосредственно генерация звука или воспроизведение результата этой генерации?

SAM style
11.01.2013, 11:48
А что у тебя вынесено в отдельный поток? Непосредственно генерация звука или воспроизведение результата этой генерации?
В процедурине на событие таймера 20мс:
Буфер дозаполняется, если не полностью заполнился, отправляется играть.
Выдаётся сигнал на отрисовку окна (если она закончилась с прошлого раза)
Выдаётся сигнал на начало эмуляции (тоже если закончилась)
Изнутри эмуляции через эн-ные промежутки сэмулированного времени выдаётся сигнал "положить очередной сэмпл в буфер".

Сигналы привязаны к соответствующим слотам и обрабатываются главным циклом Qt - судя по докам, каждый в своём потоке.

Vitamin
11.01.2013, 12:04
Сигналы привязаны к соответствующим слотам и обрабатываются главным циклом Qt - судя по докам, каждый в своём потоке.
Вот что-то насчет этого есть сомнения. Цикл, получается, должен созавать по потоку на каждого подписчика.

SAM style
11.01.2013, 13:14
Вот что-то насчет этого есть сомнения. Цикл, получается, должен созавать по потоку на каждого подписчика.
Да, сфэйлил. Опытным путём проверил - даже 2 разных объекта не одновременно выполняют слоты.

Vitamin
11.01.2013, 13:24
Да, сфэйлил. Опытным путём проверил - даже 2 разных объекта не одновременно выполняют слоты.
Распараллеливание эмуляции не такая простая задача, как кажется.

Единственная идея была- все влияющие на звукогенерацию выводы в порт ставить в очередь вместе с временнОй меткой и рендерить либо в конце фрейма (для однопоточного режима) либо по мере поступления (для двухпоточного, но возможны затраты на синхронизацию).

Например, вот как делается рендеринг AY в ZXTune.
На вывод в порт зовется метод:


virtual void RenderData(const DataChunk& src)
{
BufferedData.Add(src);
}

Т.е. ничего не делаем, просто ставим в очередь.

Когда у нас конец фрейма, можно проанализировать очередь и выбросить всякие левые устройства (например, не было вывода в порт ковокса, нафига его микшировать?). Потом просто все элементы очереди обрабатываются:



void RenderChunks(Renderer& render)
{
for (const DataChunk* it = BufferedData.GetBegin(), *lim = BufferedData.GetEnd(); it != lim; ++it)
{
RenderSingleChunk(*it, render);
}
BufferedData.Reset();
}


где


void RenderSingleChunk(const DataChunk& src, Renderer& render)
{
render.SetNewData(src);
if (!Clock.HasOutputBefore(src.TimeStamp))
{
return;
}
Clock.SetFrameEnd(src.TimeStamp);
MultiSample result;
while (const uint_t toEnd = Clock.GetTicksToFrameEnd())
{
const uint_t toSound = Clock.GetTicksToSample();
const uint_t toTick = 1 + std::min(toSound, toEnd);
render.Tick(toTick);
if (Clock.Tick(toTick))
{
render.GetLevels(result);
Target->ApplyData(result);
}
}

SAM style
11.01.2013, 15:36
По ходу, для потоков надо всё переделывать.
Созданный с pthread_create поток помирает, когда вызываший его метод заканчивает работу, даже если сам pthread_t определен вне этого метода? Например, внутри обработчика таймера я создаю поток, обновляющий окно. Некоторое время он работает, но потом вдруг перестаёт - экран не обновляется, хотя звук идёт.

Vitamin
11.01.2013, 15:52
Созданный с pthread_create поток помирает, когда вызываший его метод заканчивает работу, даже если сам pthread_t определен вне этого метода? Например, внутри обработчика таймера я создаю поток, обновляющий окно. Некоторое время он работает, но потом вдруг перестаёт - экран не обновляется, хотя звук идёт.
Ну этот поток все равно должен когда-то прерваться, так что проверь сначала логику и логами или отладчиком узнай причину выхода. Просто так завершаться ничего не должно.

Q-Master
12.01.2013, 01:10
Вставлю свои 10 копеек. Сделал я в SDL выводе заодно и заливку в файл. Вот что происходит если нет никакого звука:


00083D14 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083D40 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083D6C 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083D98 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083DC4 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083DF0 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083E1C 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083E48 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083E74 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083EA0 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083ECC 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00083EF8 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F ????????????????????????????????????????????
00


Это генерит конкретно вот этот вот кусок кода:

gsPair gsvol = gsGetVolume(zx->gs);
levl += gsvol.left * gsVolume / 100.0;
levr += gsvol.right * gsVolume / 100.0;
У меня появилось сильностойкое подозрение что проблема в 8-битном звуке. Попробую переделать на 16 бит и посмотреть.

SAM style
16.01.2013, 12:25
build 20130115 Вернул формирование звука обратно Заодно избавился от щелчков в некоторых случаях (смена состояния паузы эмуляции) Вроде, получилось вывести обновление окна в отдельный поток, осталось получше подобрать время задержки между проверками сигнала на обновление
А 8-битный звук у меня был с самого его появления. Раз раньше играло ровно, то проблема все-таки не в этом.
[ deb x86 (http://rghost.ru/43084462) ][ win32 (http://rghost.ru/43084489) ]

жуки
при изменении палитры (ATM2, Evo) рушится (фикс залит на гитхаб). Дело сугубо SDL-овое, из-за смены палитры. Собранных файлов выше не касается.

mungo
07.02.2013, 10:49
Попытался запустить в режиме пентагона, но на этапе подстановки ромов стал в ступор: как их правильно расставить? Что значат эти пейджи и цифирьки рядом?
И кста обидно, что нужно диски заново подставлять в тырдос - не запоминает на выходе...

SAM style
07.02.2013, 10:58
Попытался запустить в режиме пентагона, но на этапе подстановки ромов стал в ступор: как их правильно расставить? Что значат эти пейджи и цифирьки рядом?
*.rom - файлы лежат в ${CONFIGDIR}/roms. ${CONFIGDIR} - директория конфигов, зависит от оси и указана в первом посте темы.
Обычно страницы распределены так:
Page0 - бейсик-128
Page1 - бейсик-48
Page2 - теневое ПЗУ
Page3 - TRDOS
Цифры справа от названия файлов - это номер части. 0 значит, что берутся первые 16К из файла, 1 - 16К начиная со смещения 16К, 2 - 16К начиная со смещения 32К итд.
Если файл ПЗУ собран в один (64К, 128К итд), его можно указать как single file - тогда первые 16К файла пойдут в Page0, вторые - в Page1 итд до конца (максимум 512К)

SAM style
07.02.2013, 11:32
... и да, в старых версиях эти пЕйджы были явно подписаны. Но ху дожнику - виднее:)В ПЗУ ATM2, например, страницы идут в другом порядке. Я поэтому и сменил на номера, чтобы не было путаницы.

SAM style
28.02.2013, 21:42
build 20130228.
Перевел основу синхронизации всего и вся на якобы-наносекунды (такт на 3.5МГц = 280нс). Прироста скорости от перехода на целочисленный тип не особо заметил. Если изображение не изменилось, окно не обновляется. А вот этим удалось сбросить немного.
Собрал из хлама старый Селерон-1200. Теперь буду бороться с тормозами на Ъ-тормозящем железе :)
Всем весны.
[ deb x86 Qt (http://yadi.sk/d/jY4kyvv52xoaU) ][ win32 (http://yadi.sk/d/vm2YkFvu2xoa2) ]

Vitamin
28.02.2013, 22:03
Собрал из хлама старый Селерон-1200. Теперь буду бороться с тормозами на Ъ-тормозящем железе
Тормознее (и универсальнее для теста разных платформ) qemu пока ничего не видел:)

Q-Master
01.03.2013, 23:11
2 SAM style: АААААААААААААААААА!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!! Ты починил звук!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

SAM style
02.03.2013, 10:22
2 SAM style: АААААААААААААААААА!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!! Ты починил звук!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Фигасе O_o
Я в пятницу пытался переделать звук на 2 буфера. OSS у меня в последнее время не открывается, ALSA нормально заработала, SDL начал трещать. Вернул обратно до понедельника.

Q-Master
02.03.2013, 18:47
Фигасе O_o
Я в пятницу пытался переделать звук на 2 буфера. OSS у меня в последнее время не открывается, ALSA нормально заработала, SDL начал трещать. Вернул обратно до понедельника.

Ну вот внезапно оно перестало хрипеть и на альзе и на сдл. Я сам удивился.

Sexton
02.03.2013, 20:40
Автор, ты чрезвычайно крут! Который месяц наблюдаю и все больше восхищаюсь! Сам работаю программистом, занимаюсь QT в том числе, и все равно восхищаюсь! Очень приятно смотреть на то как постепенно становилось сознание, понимание. Респект! Даль нейших успехов!

Vitamin
02.03.2013, 21:14
Прироста скорости от перехода на целочисленный тип не особо заметил.
Версия для АРМ слегка ускорилась, но все равно пока не юзабельно.

SAM style
02.03.2013, 22:51
Версия для АРМ слегка ускорилась, но все равно пока не юзабельно.Ну, оно пока даже на 1200МГц еле пыхает.
Сбацал тест, проверяю жручесть отдельных процедур с разными параметрами. Например, если убрать проверку на 4Т-бордюр, vidSync на i5 сбрасывает где-то 10%.

Vitamin
02.03.2013, 22:55
Ну, оно пока даже на 1200МГц еле пыхает.
Дык у меня АРМ 700МГц. Это эквивалентно где-то 300МГц для x86_64 в области эмуляции z80+ay. Только что бенчмарк гонял.

Q-Master
03.03.2013, 16:40
2 SAM style: А ты не думал нативно на Qt еще сделать звук? Что-нить из серии QIODevice и QAudioOutput.

SAM style
06.03.2013, 20:33
build 20130306
Путём прописывания себе волшебных автопенделей я его все-таки ускорил почти на треть. И памяти он стал жрать меньше.

[ deb x86 Qt (http://yadi.sk/d/bqglSaK335oUw) ][ win32 (http://yadi.sk/d/XtIHnMnG35oUg) ]

Vitamin
06.03.2013, 22:38
С SDL не линкуется:

emulwin.cpp:(.text+0x4fc): undefined reference to `vidGetScreen'

Вообще, кто из них (Qt/SDL) быстрее по графике?

Q-Master
06.03.2013, 22:45
build 20130306
Путём прописывания себе волшебных автопенделей я его все-таки ускорил почти на треть. И памяти он стал жрать меньше.

[ deb x86 Qt (http://yadi.sk/d/bqglSaK335oUw) ][ win32 (http://yadi.sk/d/XtIHnMnG35oUg) ]

30% CPU на моем quad G5 2.5ГГц. 8) Звук пока не сломался и все работает. Заметил что у тебя он создает пустой файл без названия, каждый раз при запуске.

SAM style
06.03.2013, 22:50
С SDL не линкуется:

emulwin.cpp:(.text+0x4fc): undefined reference to `vidGetScreen'

Вообще, кто из них (Qt/SDL) быстрее по графике?
Сейчас исправлю. Много переделал уже дома, тут с Qt собирается.

---------- Post added at 22:50 ---------- Previous post was at 22:48 ----------


30% CPU на моем quad G5 2.5ГГц. 8) Звук пока не сломался и все работает. Заметил что у тебя он создает пустой файл без названия, каждый раз при запуске.
Возможно, это образ HDD. Пока что убери интерфейс винта в None, всё равно не работает как положено.

Vitamin
06.03.2013, 22:51
Сейчас исправлю. В заголовочном осталась отсылка, саму функцию ликвидировал.
Пока собираю с Qt под арм. Как в этом вашем cmake заюзать кросс-тулчейн? А то грустно по полчаса строить на устройстве когда можно за минуту на обычном компе.

SAM style
06.03.2013, 23:19
Пока собираю с Qt под арм. Как в этом вашем cmake заюзать кросс-тулчейн? А то грустно по полчаса строить на устройстве когда можно за минуту на обычном компе.
Это бесполезно. Он не НАСТОЛЬКО ускорился, чтобы там нормально заработать.

---------- Post added at 23:19 ---------- Previous post was at 22:57 ----------

Собрал на селероне-1200. С SDL отрисовкой голый 48К вполне так работает. Видяха Radeon 9200, но дрова иксовые. Звука не слышно. По ходу, встроеная звуковуха дохлая.

Vitamin
06.03.2013, 23:24
Это бесполезно. Он не НАСТОЛЬКО ускорился, чтобы там нормально заработать.
Ну прогресс чуствуется. Звук гудит 50Гц, независимо от частоты- хз что это. Профилирование собрать?

SAM style
06.03.2013, 23:36
Ну прогресс чуствуется. Звук гудит 50Гц, независимо от частоты- хз что это. Профилирование собрать?
Если эмуляция кадра не укладывается в 1/50 сек, звуковой буфер дополняется тишиной и выводится. Остаток эмуляции заполняет буфер заново и опять не до конца, дополняется тишиной и снова выводится.
Решение не лучшее, но пока что так. Я это трещание словил и на Core2Duo, когда в соседнем экране работал виртуалбокс, а в опере играл флэш.

Vitamin
07.03.2013, 00:33
Попробуй небольшое ускорение z80ex. На арме выигрыш около 5% на рендере AY с дигитальным музоном. Аффтар в принципе согласен с такими изменениями, но пока сам не делает.

Q-Master
07.03.2013, 08:50
Возможно, это образ HDD. Пока что убери интерфейс винта в None, всё равно не работает как положено.

У меня он выключен. Волшебный файл без имени с 0 размером все-равно создается.
Теперь о грустном:
Под Qt отрисовка медленнее на 10% (29-31% CPU), но звук практически идеален в любом варианте исполнения.
Под SDL отрисовка 17-21% CPU, но зато сильно хрипит звук. Такое впечатление что к нормальной частоте подмешивается еще помеха какая-то. Проблема есть при любом звуковом выводе.

SAM style
07.03.2013, 09:11
У меня он выключен. Волшебный файл без имени с 0 размером все-равно создается.Если PentEvo, то возможно это ещё и образ SD-карты. Хотя, вроде, делал проверки на пустой путь...
Со звуком довольно странно. Пока нет идей.

SAM style
07.03.2013, 10:36
Трудно сказать насчет трети, особенно на стандартном компе 6ядер\6гигов, разниЦЦу трудно заметить невооруженным взглядом, но вот на одноведренном "старичке" АМэДе Атхлон 3000+(1800 Мгц реальная) предыдущая версия грузила проц 92-99% (дальше уже не видно. предел:), а эта 32-42%
ps - в тесте Рощина полосочки таки сломанные...)

Pentium(R) Dual-Core CPU E5200 @ 2.50GHz.
Замер врмени выполнения zxExec:
на старом варианте - 210-220 нс
на новом - 120-130 нс
Про полосочки в курсе. Они убираются, если записывать байт на 1 такт после команды. А это как-то неправильно. В RAGE в последней части бывает расхождение экран-бордюр в 1 пиксел, но не всегда.

Q-Master
08.03.2013, 21:20
Если PentEvo, то возможно это ещё и образ SD-карты. Хотя, вроде, делал проверки на пустой путь...
Со звуком довольно странно. Пока нет идей.

Проверю. А вот со звуком действительно странно. Но подозрение в том, что чуток не укладывается во фрейм при SDL отрисовке и где-то какой-то слот тормозит.

SAM style
26.03.2013, 16:49
build 20130326 на тестирование, поэтому пока не собираю готовое.
Если в cmake задать -DZ80EX_BUILD=no, вместо z80ex будет собран свой Z80 (с блэкджеком и шлюхами) - по большей части скопирован с z80ex и скрещен с тем, что было раньше, но зато оптимизирован для эмулятора. Работает быстрее, но возможны болячки. Глюки, которые вылезли сразу, я законопатил. Дизасм тоже свой, проверялся поверхностно.
В первую очередь кастуется Q-Master для проверки эндиановости. На LE работает.

bugz
ZYX при запуске файла зависает

Q-Master
26.03.2013, 22:47
build 20130326 на тестирование, поэтому пока не собираю готовое.
Если в cmake задать -DZ80EX_BUILD=no, вместо z80ex будет собран свой Z80 (с блэкджеком и шлюхами) - по большей части скопирован с z80ex и скрещен с тем, что было раньше, но зато оптимизирован для эмулятора.
В первую очередь кастуется Q-Master для проверки эндиановости. На LE работает.

Ну что я могу сказать. На BE работает на ура. Кушает проца несколько меньше чем предыдущий вариант.
Из проблем:
1) по-прежнему создает файл без имени 0го размера при каждом запуске в текущей директории.
2) по-прежнему при SDL рендерере работает быстрее, но звук (в режиме пентевы, на ксониксе например под атм-турбо) хрипит и тормозит. В обычном spectrum режиме вроде не хрипит.

SAM style
26.03.2013, 23:20
Не, не всё работает. При запуске файла в ZYX в том месте, где прерывания должны быть запрещены, они разрешены, и по INT начинается полёт в никуда (IM2 с I=0). Пока отлаживаю.

---------- Post added at 23:17 ---------- Previous post was at 22:50 ----------

Fixed. На входе в INT не сбрасывались IFF1, IFF2. Закоммичено, ZYX работает. Заодно пофиксены тайминги LD (IX+e),n - были лишние 3 такта

---------- Post added at 23:20 ---------- Previous post was at 23:17 ----------

Большая частота, соответственно, и кушает больше. 3.5 и 14 МГц различаются по общей жручести в 1.7-1.9 раз. С пустым файлом буду копать завтра.

SAM style
27.03.2013, 10:54
Собрал последнее. Может, кто-то что-то выловит (кроме того, что в тесте Рощина полоски остались и от SD-карты без образа получается пустой файл без имени).
[ deb x86 Qt (http://yadi.sk/d/SL4pI-Iu3_M0i) ][ win32 (http://yadi.sk/d/MuT9PMfL3_Luw) ]

SAM style
27.03.2013, 18:09
build 20130327
Выпилил создание файла sd-карты при его отсутствии. Имя не было пустым, оно состояло из 1 пробела - это уже ошибка обработки конфига.

zebest
27.03.2013, 18:19
Z80 Test Suite - Z80 MEMPTR test - 4 ошибки, предыдущая версия была без ошибок,
ну в Z80 Flags test ошибки и так были, тУт трудно сказать, уменьшилось ли их количество или увеличилось.

SAM style
27.03.2013, 20:11
MEMPTR : выловлены ошибки на ex (sp),* и out (c),*. Закомичено.
С флагами надо сравнивать то, что было и то, что стало. В прошлый раз это списалось на то, что тест писан под конкретную модификацию Z80. В процессе я вызывал все команды со всеми возможными AF и сравнивал все регистры с z80ex и своего z80 - там несоотвествий не было. Отдельно вызывались add hl,bc adc hl,bc и sbc hl,bc с bc=#8000 и разными HL. Тоже всё было 1:1

---------- Post added at 20:11 ---------- Previous post was at 19:21 ----------

Ну, и в довесок перестали нормально играться rzx, даже те, которые на z80ex игрались. Хотя, это не из-за самого Z80

Q-Master
27.03.2013, 21:34
Большая частота, соответственно, и кушает больше. 3.5 и 14 МГц различаются по общей жручести в 1.7-1.9 раз. С пустым файлом буду копать завтра.

Ну в Qt отрисовщике-то все ок. Хрип начинается только в SDL.

SAM style
27.03.2013, 21:58
Ну в Qt отрисовщике-то все ок. Хрип начинается только в SDL.Кроме создания окна, вот всё их отличие во время работы:
#ifdef XQTPAINT
update();
#else
SDL_UpdateRect(surf,0,0,0,0);
#endif
Я пока не знаю, что за аномалия у тебя наблюдается.

SAM style
29.03.2013, 21:13
http://www.z80.info/z80arki.htm. В архитектуре присутствует регистры WZ и WZ'. По описанию это MEMPTR, смутило наличие его в альтернативном наборе. Таки есть MEMPTR' ?

Vitamin
29.03.2013, 22:20
А можно набор флагов для сборки с максимальной скоростью? А то я до сих пор не понял что быстрее- qt или sdl:)

SAM style
29.03.2013, 22:45
cmake -DDRAWING=SDL -DZ80EX_BUILD=no ${PATH_TO_CMAKELISTS}
Обновление окна происходит только когда содержимое меняется. Пусти что-нибудь динамичное, разница заметна станет.

Vitamin
30.03.2013, 00:09
Если собрать просто с SDL, то пока на 700МГц АРМ не тянет. Щаз соберу с максимальными опциями, посмотрю что будет.

ram_scan
01.04.2013, 05:55
http://www.z80.info/z80arki.htm. В архитектуре присутствует регистры WZ и WZ'. По описанию это MEMPTR, смутило наличие его в альтернативном наборе. Таки есть MEMPTR' ?

Не суть важно. Реализовать можно и так и сяк, ибо напрямую программно он не доступен, а его "тень" в регистре флагов все равно после выставления адреса на шину постоянно актуальная. Как было схемотехнически проще (разориться на мультиплексирование отдельного регистра, или мультиплексировать хором все, разорившись на дополнительный регистр) это по месту смотреть надо уже. Мне кажется что с одним регистром проще.

В I8080 этот регистр назывался M и был в единственном числе.

SAM style
22.04.2013, 15:50
build 20130422 Слегка перетряс загрузку-сохранение конфига профиля. Поначалу могут быть косяки с номером банка для сброса. Если кто что ещё заметит - сообщите. На вкладке Storage в опциях появилась галка Restore media. Пути файлов ленты и дисков сохраняются в конфиге профиля и при его загрузке восстанавливаются, если накопитель свободен.
[ deb x86 Qt (http://yadi.sk/d/5_KBstJK4FzN1) ][ win32 (http://yadi.sk/d/3vVy9-fC4FzNN) ]

SAM style
30.04.2013, 16:43
build 20130429 Fixed : если использовалось несколько профилей железа, при закрытии эмулятора портились конфиги тех, которые не были задействованы. Теперь конфиги всех профилей загружаются при запуске эмулятора. Если прифиль используется только один, то было пофиг
[ deb x86 Qt (http://yadi.sk/d/SmiMBbzc4TWo8) ][ win32 (http://yadi.sk/d/dQWM8CVS4TXBc) ]

organism
30.04.2013, 19:21
64бит?
мож уже обсуждалось, извините за возможный баян

SAM style
30.04.2013, 19:30
64бит?
мож уже обсуждалось, извините за возможный баянВо время праздников поставлю на ноут 64-битный stable, сделаю.

Q-Master
30.04.2013, 20:41
Сборка deb powerpc

SAM style
03.05.2013, 13:17
build 20130503 Продолжаю вылавливать наделанные баги в профилях. В неактивных на момент запуска профилях не грузился ромсет. В быстром меню появился пункт Video mode, из которого можно быстро переключиться на нужный режим. No screen по всему экрану отображает только бордюр. Надо заметить, что при программном переключении режима он таки сменится. Наконец, сборка под архитектуру amd64 (x86_64)
Начал раскапывать TS-конфу. С растровым изображением, вроде разобрался. Палитра упирается в noflic, без него 256 цветов сделать вполне реально.

[ deb x86 (http://yadi.sk/d/UVDSACcH4X5ev) ][ deb amd64 (http://yadi.sk/d/KwqXt7MJ4X5gv) ][ win32 (http://yadi.sk/d/Q2jgX7Fu4X5iD) ]

BYTEMAN
03.05.2013, 13:21
а под mips для sgi indy собрать можно?

esl
03.05.2013, 15:28
подскажите а где взять и как сконфигурить ромы
а то не очень понятно для тех кто вне темы ...

взял ромы из unreal
но куда их подключать не понятно ...


size name
16 128tr!.rom
16 1982.rom
16 1982.ROM
16 2006.ROM
16 48for128.rom
16 DOS6_10E.ROM
64 GLUKATM.ROM
16 GLUKPEN.ROM
32 gs105a.rom
16 QC_3_05.rom
64 scorpion.rom


как например из этого сделать ромы для пентагона
и как включить TS ....

SAM style
03.05.2013, 15:34
а под mips для sgi indy собрать можно?
Это такой (http://ru.wikipedia.org/wiki/SGI_Indy)? Может и соберётся, только будет неюзабелен.

SAM style
03.05.2013, 15:42
подскажите а где взять и как сконфигурить ромы
а то не очень понятно для тех кто вне темы ...

взял ромы из unreal
но куда их подулючать не понятно ...


как например из этого сделать ромы для пентагона
и как включить TS ....
Кидай их все в ~/.config/samstyle/xpeccy/roms
Затем в настройках (F1) на вкладке Machine жми плюс в строке Romsets, вводи имя ромсета и составляй его. single file это одним большим файлом, separate files - указываешь отдельно для первых 4 страниц ПЗУ файл и 16К часть из него. ПЗУ GS - отдельно.

TS включается на вкладке Sound. Выбираешь тип и звучание (стерео) каждого чипа и TS ставишь NedoPC

BYTEMAN
03.05.2013, 15:50
Это такой? Может и соберётся, только будет неюзабелен.
да, именно такой. Неюзабелен ибо производительности не хватит?

esl
03.05.2013, 15:51
так и делал, просто куда конкретно надо подключать какие ромы ...

вот описание из unreal


[ROM.pentagon]
title=Pentagon-128 + TR-DOS
128=128tr!.rom
sos=48for128.rom
dos=dos6_10e.rom
sys=glukpen.rom

как это соответсвует page 0..page3 ?

SAM style
03.05.2013, 16:00
так и делал, просто куда конкретно надо подключать какие ромы ...
как это соответсвует page 0..page3 ?
У всех, кроме ATM2, Евы и буржуйских плюсов так:
Page 0 = Basic128 (128) = 128tr!.rom:0
Page 1 = Basic48 (sos) = 48for128.rom:0
Page 2 = Shadow (sys) = glukpen.rom:0
Page 3 = DOS (dos) = dos6_10e.rom:0
Почему поменял на номера - уже говорил. Попались клоны, на которых этот порядок был другим.

---------- Post added at 16:00 ---------- Previous post was at 15:57 ----------


да, именно такой. Неюзабелен ибо производительности не хватит?
Не хватит, судя по всему. Витамин пробовал его на АРМ'е 700МГц - мало хорошего. :(

alone
03.05.2013, 18:58
Закрались сомнения насчет цикла обработки INT в режиме IM2. По раскопанной информации он длится 19 тактов (7 на приём сигнала, 3+3 на выборку адреса, 3+3 на сохранение PC) - при этом нормально срабатывает тест скорости памяти в SATISFACTION, но в последних 2 частях RAGE бордюр смещен направо.
Насколько я помню, в Rage на реальном пентагоне бордер смещён на 2 пикселя (у авторов был не пентагон, а скорпион с доработкой). Точная настройка бордера под реальный пентагон - в интре к Sinclair Club #5.

Где качнуть ромы, в частности шрифт для АТМ?

SAM style
03.05.2013, 19:04
Насколько я помню, в Rage на реальном пентагоне бордер смещён на 2 пикселя (у авторов был не пентагон, а скорпион с доработкой). Точная настройка бордера под реальный пентагон - в интре к Sinclair Club #5.

Где качнуть ромы, в частности шрифт для АТМ?
Тому посту более 2 лет. С тех пор многое поменялось. Сейчас RAGE на 1 точку разъезжается.
А ПЗУ и шрифт вот... http://atmturbo.nedopc.com/atmshem.htm

ZXMAK
03.05.2013, 19:21
Тому посту более 2 лет. С тех пор многое поменялось. Сейчас RAGE на 1 точку разъезжается.
А ПЗУ и шрифт вот... http://atmturbo.nedopc.com/atmshem.htm

где именно? проверил у себя - вроде все совпадает:

http://savepic.org/3421095.png

SAM style
03.05.2013, 19:26
где именно?
Это у тебя совпадает. У меня - не очень и, что странно, не всегда. Тест Рощина с полосками тоже не прокатывает. Причину пока не нашёл, только костыль для прикрытия.

alone
03.05.2013, 19:27
Почему-то вместо мультиколора на АТМ2 включается текстмод. Половина эффектов в The Board II в каше :(

SAM style
03.05.2013, 20:00
Почему-то вместо мультиколора на АТМ2 включается текстмод. Половина эффектов в The Board II в каше :(
Давай её сюды. Буду проверять. HDD, кстати, тоже не трогай - оно почти не работает.
ЗЫ: ошибку нашёл.

ZXMAK
03.05.2013, 20:06
держи, прогнал в ZXMAK2 - все эффекты работают :)

SAM style
03.05.2013, 20:32
Починено. win32 (http://yadi.sk/d/sMyjXrTu4XcME). Остальные сборки будут потом.

SAM style
07.05.2013, 23:48
Во как я сегодня перегрел мозг! Доделаю отражения тайлов-спрайтов и можно будет играть в uwol. Бомберман пока криво идёт.
http://188.64.131.186/pix/12.jpg

SAM style
09.05.2013, 18:51
build 20130509 Эмуляция TS-конфы для ознакомления. Не полная, но хватит, чтобы поиграть в uwol с небольшими глюками. Bomberman грузится, но указатель в меню не двигается (кемпстон?) Подправил HWmulticolor у ATM2 Пофиксено неадекватное сохранение в опциях режима турбо FDC Может, багов наплодил...
В тайло-спрайтовом режиме жручесть возрастает в пару раз, позже переделаю отрисовку графики. В uwol через тайлы иногда просвечивает экран под ними (fixed). HDD в TS-конфе нет, SD-карты нет... Без самого автора конфы как-то сложно вникать.

[ win32 (http://yadi.sk/d/KneOMWL34iHtC) ][ deb x86 Qt (http://yadi.sk/d/AnOxgmJj4iHuk) ][ deb amd64 Qt (http://yadi.sk/d/M2ndDXUn4iHw6) ]

Blade
09.05.2013, 19:44
В uwol через тайлы иногда просвечивает экран под ними.
Бит NOGFX порта VConfig реализован? В Uwol графический режим отключается, отображаются только тайловые слои и спрайты.

SAM style
09.05.2013, 19:47
Бит NOGFX порта VConfig реализован? В Uwol графический режим отключается, отображаются только тайловые слои и спрайты.Похоже, оно и есть. Благодарствую, в следующей сборке будет реализован. Хорошей документации по тайло-спрайтам нет, до чего дошёл своим ходом - то сделал.

SAM style
13.05.2013, 20:02
build 20130513 Ускорена отрисовка тайлов и спрайтов TS-конфы Исправлена пара неточностей в отрисовке тайлов
[ deb x86 (http://yadi.sk/d/PdZY6g2e4nVwy) ][ deb amd64 (http://yadi.sk/d/znt9fuNT4nVzc) ][ win32 (http://yadi.sk/d/Ir9_VRJm4nW0m) ]

PS: Интересно, почему 64-битная версия на том же самом железе кушает проца 2-3 раза больше, чем 32-битная?

Blade
13.05.2013, 20:25
Как ПЗУ подключается?

SAM style
13.05.2013, 20:31
Как ПЗУ подключается?
Скидать все *.rom в ~/.config/samstyle/xpeccy/roms (linux) либо .\config\roms (windows). В настройках (F1) у строки Romset нажать [+], ввести имя нового ромсета, потом нажать "редактировать" (рядом с [+]) и поставить либо Single File (когда всё ПЗУ одним файлом), либо Separated Files (когда страницы ПЗУ в разных файлах). Там же выбираются ПЗУ для GS и знакогенератора ATM2 (PentEvo).

Vitamin
13.05.2013, 20:32
PS: Интересно, почему 64-битная версия на том же самом железе кушает проца 2-3 раза больше, чем 32-битная?
Проверь размер выравнивание членов структур и размер операндов всяких там умножений-делений в самых жрущих кусках кода. Если надо, могу прогнать профилирование на арме- там такие вещи очень четко видятся.

Blade
13.05.2013, 20:37
Выбираю Single File, указываю tsbios.rom (порядок страниц:BIOS,TR-DOS,BASIC128,BASIC48). Не запускается, показывает цветные квадратики.

SAM style
13.05.2013, 20:43
Выбираю Single File, указываю tsbios.rom (порядок страниц:BIOS,TR-DOS,BASIC128,BASIC48). Не запускается, показывает цветные квадратики.Сбрось в тырдос (Page1). Старт с 0 страницы пока что не всегда работает. Пока не все порты полноценно реализованы.

---------- Post added at 20:43 ---------- Previous post was at 20:41 ----------


Если надо, могу прогнать профилирование на арме- там такие вещи очень четко видятся.Если тебе не трудно...

Blade
13.05.2013, 21:00
Бордюр неправильный. Должен быть черный.
http://f14.ifotki_.info/thumb/d15328a1571b4f4dce9bd407f82001dac383b0151124450.pn g (http://ifotki_.info/14/d15328a1571b4f4dce9bd407f82001dac383b0151124450.pn g.html)
И с fps что-то не то. Плавности нет.

SAM style
13.05.2013, 21:27
Бордюр неправильный. Должен быть черный.А я ещё более странные глюки ловлю... Сыровато. В режиме x1 тайлы и спрайты вообще не показываются.
http://188.64.131.186/pix/13.png

[21:50] Сделал показывание спрайтов и тайлов в режиме x1
[22:02] Нашёл косяк с бордюром

Blade
13.05.2013, 22:57
В Bomberman'е неправильно вертикальный скролл работает. Снизу должна картинка с меню выезжать, вместо этого мусор какой-то.

Bomberman грузится, но указатель в меню не двигается (кемпстон?)
Там PS/2 клавиатура опрашивается (ячейки #F0..#FF Глюк часов)

SAM style
13.05.2013, 23:14
Там PS/2 клавиатура опрашивается (ячейки #F0..#FF Глюк часов)Ясно, буду копать в эту сторону. Когда сделаю, заработает и более половины игр под CPM на ATM2 - там та же фигня.

Q-Master
13.05.2013, 23:22
У меня при попытке подсунуть ts-bios.rom показывает лишь черный квадрат и белый бордюр. Как уж только не ресетил. Собирал origin/master.
В режиме пентево в глюке в бейзконфе пишет NONE. Это нормально?
И вообще я нифига не понял с этими конфами...

Vitamin
13.05.2013, 23:25
Если тебе не трудно...
Особо ничего интересного нет, посему кидаю прямо сюда. Все, что больше 1%.
Просто запуск и выход:


Flat profile:

Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
23.90 1.30 1.30 6220800 0.00 0.00 vidDrawNormal
18.75 2.32 1.02 614726 0.00 0.00 vidSync
9.74 2.85 0.53 448914 0.00 0.01 zxExec
6.43 3.20 0.35 448914 0.00 0.00 cpuExec
5.88 3.52 0.32 1016670 0.00 0.00 memRd
5.70 3.83 0.31 1016670 0.00 0.00 memrd
5.33 4.12 0.29 emuThreadMain(void*)
2.39 4.25 0.13 71443 0.00 0.01 sndSync(int)
2.21 4.37 0.12 142886 0.00 0.00 aymGetVolume
2.02 4.48 0.11 163550 0.00 0.00 memwr
1.47 4.56 0.08 142886 0.00 0.00 aymSync
1.47 4.64 0.08 448914 0.00 0.00 bdiSync
1.47 4.72 0.08 vidDrawBorder
1.29 4.79 0.07 163550 0.00 0.00 memWr
1.29 4.86 0.07 72686 0.00 0.00 tapSync


Запуск, подключение образа, загрузка, сохранение снапшота, выход:


Flat profile:

Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
22.05 5.47 5.47 35404660 0.00 0.00 vidDrawNormal
17.69 9.86 4.39 5505912 0.00 0.00 vidSync
12.82 13.04 3.18 4937034 0.00 0.00 zxExec
9.75 15.46 2.42 4937034 0.00 0.00 cpuExec
7.21 17.25 1.79 emuThreadMain(void*)
5.60 18.64 1.39 7010016 0.00 0.00 memRd
3.67 19.55 0.91 4937034 0.00 0.00 bdiSync
3.31 20.37 0.82 7010016 0.00 0.00 memrd
2.72 21.05 0.68 406611 0.00 0.00 sndSync(int)
1.73 21.48 0.43 vidDrawBorder
1.61 21.88 0.40 4937034 0.00 0.00 memGetCellFlags
1.01 22.13 0.25 813222 0.00 0.00 aymGetVolume


По поводу функции vidDrawNormal. Вместо кучи проверок на каждый пук лучше используй полиморфизм по полной- для рисования в каждой области экрана отдельная функция с одной (максимум- двумя) проверками на позицию и соответствующей сменой "рисовальщика". Ты ж его уже и так используешь для разных видеорежимов:)

SAM style
13.05.2013, 23:46
vidDrawBorder - а это кто? У меня таких не водится.
И результаты как бы не отвечают на вопрос "почему x86_64 ест больше, чем x86".
С отрисовкой тоже покопаюсь...

---------- Post added at 23:46 ---------- Previous post was at 23:41 ----------


В режиме пентево в глюке в бейзконфе пишет NONE. Это нормально?Знать бы из какого места берётся то, что должно показываться.

Vitamin
14.05.2013, 00:23
vidDrawBorder - а это кто? У меня таких не водится.
Водится:) Похоже на какой-то заглушечный вывод одного бордюра без экрана.


И результаты как бы не отвечают на вопрос "почему x86_64 ест больше, чем x86".
64-битная версия просаживается на vidSync, а 32-битная на vidDrawNormal. В этой самой vidSync просто куча всяких сравнений, сопровождающихся чтениями (по 32 бита, что для 64-битной платформы является невыровненным). Попробовал поменять все критические int в структуре на size_t - получил ускорение:) Вплоть до некорректности результатов- проц перестал переключаться на повышенную частоту и показатели процессорного времени стали выше, чем в основном тесте. Но vidDrawNormal переместилась в лидеры.

SAM style
14.05.2013, 00:29
Водится:) Похоже на какой-то заглушечный вывод одного бордюра без экрана.Странно. QtCreator не нашёл. Сам грепнул по всему src - нашёл...

SAM style
14.05.2013, 15:57
Где бы поподробнее почитать про опрос ps/2 клавы через cmos - коды, как строится буфер, что происходит при нажатии-отпускании? По результатам работы TSСonf-Unreal'а вытянул только коды клавиш, и они не совпадают с теми, что есть в доке к ATM2...
PS: Скролл заставки в бомберману починил, только всё равно экран сначала заливается сиреневым, а потом поверх вылезает картинка. В самой игре всё пердит, тормозит и переливается - много глюков эмуляции.

[00:02] Нашёл тут... http://www.computer-engineering.org/ps2keyboard - может, пригодится

Q-Master
14.05.2013, 23:31
Знать бы из какого места берётся то, что должно показываться.
Так это насколько я понял прошивка для avr.
Таки TSконфа у меня вообще не арбайт.

SAM style
14.05.2013, 23:48
Так это насколько я понял прошивка для avr.
Таки TSконфа у меня вообще не арбайт.
Каким-то образом прошивка ПЗУ берёт эти данные для отображения на экране - вот только как?
Похоже, сброс в биос TS-конфы пытается загрузиться с HDD/SD-карты и при неудаче выводит сообщение в текстовом режиме, которого у меня ещё нет - тут будет черный экран. Попробуй посбрасываться в разные страницы ПЗУ (0-биос, 1-тырдос, 2-basic128, 3-basic48). В консоль не плюётся ничего типа "TS in ..." или "TS out ..."?

SAM style
15.05.2013, 17:06
build 20130515 (только в git)
- Частично реализована PC-клавиатура (только TSConf), в бомбермана уже можно погонять.
- Реализованы порты строки INT-а, всвязи с этим слегка переделана работа с сигналом - его снова генерит видеосистема, проц отвечает уходом в обработку, конец кадра определяется по сэмулированному времени.

Глюки, происхождение которых я не знаю:
- В бомбермане на неиспользуемом месте вместо черного лезет сиреневый цвет.
- Иногда в бомбермане отображатся мусор от прошлого экрана или прошлых запусков. Свалил бы это на очистку памяти биосом, но проявляется уже в первый раз, когда жмёшь старт. Подозреваю DMA

mungo
15.05.2013, 17:43
А можно выложить емулятор кучей с ромами и библиотеками и рабочими настройками? Прошлые потерял, теперь даже ромы выставить в нужном порядке не могу...

ZXMAK
15.05.2013, 18:00
А можно выложить емулятор кучей с ромами и библиотеками и рабочими настройками? Прошлые потерял, теперь даже ромы выставить в нужном порядке не могу...

+1 не запускается - не находит qt библиотеки

SAM style
15.05.2013, 19:26
+1 не запускается - не находит qt библиотекиВ первом посте ссылка на либы для windows. Разве что z80ex уже не нужен. Все *.rom и состав ромсетов выложу, когда дома буду.

---------- Post added at 19:26 ---------- Previous post was at 18:05 ----------

Ромы и секция [ROMSETS] из config.conf лежат тут (http://yadi.sk/d/b5gZSePz4rlY0)

Blade
15.05.2013, 23:23
Каким-то образом прошивка ПЗУ берёт эти данные для отображения на экране - вот только как?

Это все читается из Глюк часов. Как читать написано здесь:zxevo_base_configuration.pdf (http://nedopc.com/zxevo/rom/zxevo_base_configuration.pdf) стр.27-28. Там же написано про чтение PS/2 клавиатуры.

Еще у меня есть подозрение, что скролл экрана реализован неправильно. Как работает вот эта программа?

SAM style
15.05.2013, 23:31
Еще у меня есть подозрение, что скролл экрана реализован неправильно. Как работает вот эта программа?
Картинка с Марио уезжает наверх, в то же время поверх неё сверху вниз построчно рисуется та же картинка. А как должно быть?
В debug-сборке с SDL нажимая Alt+стрелки можно вручную изменять смещения экрана с шагом 16 точек.

Blade
15.05.2013, 23:34
Должно быть так: http://rghost.ru/46026681

SAM style
16.05.2013, 00:22
Должно быть так: http://rghost.ru/46026681
Так... верх картинки отрисовывается со смещением 0. Затем до самого низа смещение ОДИНАКОВОЕ (меняется только при переходе на бордюр). Как при этом может рисоваться одна и та же линия, если текущая строка меняется, а смещение - нет? Или положение INT-а влияет на смещение картинки?

Blade
16.05.2013, 01:20
Там два счетчика. Один для формирования растра, считает от 0 до 319. Он же определяет положение ИНТа. Другой счетчик линий в битмапе. После окончания бланка он загружается из регистра GYOffs, и каждую строку увеличивается на 1 при отрисовке экрана (не бордюра). Если во время отображения кадра изменить значение GYOffs, то в начале следующей строки произойдет перезагрузка счетчика линий битмапа значением из регистра GYOffs. То есть, если каждую строку записывать в GYOffs одно и то же значение, на экране будет рисоваться одна и та же строка битмапа.

Еще несколько замечаний: в режиме 16с экран начинается со страницы кратной 8 (В VPage отбрасываются 3 младших бита), в режиме 256с экран начинается со страницы кратной 16 (В VPage отбрасываются 4 младших бита). При активном NOGFX рисуется бордюр на весь экран.

SAM style
16.05.2013, 09:15
Done. Поболее бы таких тестов, на которых можно отлаживать.
Меня больше волнует мусор и сиреневый цвет где попало в бомбермане.

Blade
16.05.2013, 09:35
Нужна сборка под Win32.

SAM style
16.05.2013, 10:03
Нужна сборка под Win32.Вечером будет. Пока доделываю CMOS и PC-клаву.

mungo
16.05.2013, 10:05
Подсунул ром от своего реала с тырдос 5.04Т. Если диск не вставлен, пишет, что не читается сектор 9. На реале пишет - нет диска. Судя по дизасму тырдоса, у вас не правильно с точки зрения 5.03-5.04 трдоса эмулируется бит BUSY в ВГ93.

SAM style
16.05.2013, 10:19
Подсунул ром от своего реала с тырдос 5.04Т. Если диск не вставлен, пишет, что не читается сектор 9. На реале пишет - нет диска. Судя по дизасму тырдоса, у вас не правильно с точки зрения 5.03-5.04 трдоса эмулируется бит BUSY в ВГ93.Это я знаю. До FDC процесс переделки ещё не дошёл. Хорошо, что он ещё читает вставленные дискеты :)

SAM style
16.05.2013, 19:10
build 20130516 Для TSConf вделал счетчик строк экрана и его поведение, как было описано Blade. За одним исключением - сейчас параметры применяются сразу, а не на следующей строке. В настройках на вкладке Machine появилась галка OS time in CMOS - все временные ячейки будут браться из текущего времени системы. Расширена эмуляция PC-клавиатуры и чтение её кодов через CMOS Вделано чтение версии бутлоадера и конфы PentEvo из CMOS (вообще, работает на любом железе). Даты поставил последние с сайта nedopc.
[ win32 (http://yadi.sk/d/zF7SoCIN4to02) ][ deb x86 (http://yadi.sk/d/blHnSTWY4to1u) ][ deb amd64 (http://yadi.sk/d/IqIgBMIE4to4c) ]

SAM style
16.05.2013, 20:46
Не понял. В завиртуаленой винде мусора на экране нет...

Q-Master
16.05.2013, 23:21
Не понял. В завиртуаленой винде мусора на экране нет...

Скажи откуда скачать это все и я попробую у себя сборку из мастера.
Мда. Что-то у меня вообще все сломалось. Теперь ни один из режимов не работает вообще. После ресета либо матрас, либо цветные квадраты.
Простые пентагон и атм2 работают. пентево - нифига.

SAM style
16.05.2013, 23:55
Мда. Что-то у меня вообще все сломалось. Теперь ни один из режимов не работает вообще. После ресета либо матрас, либо цветные квадраты.
Простые пентагон и атм2 работают. пентево - нифига.
Странно. Пересобрал заново, удалил все конфиги, сделал ромсет на пентэву (File:zxevo.rom, GS:gs104.rom, Font:SGEN.rom), выбрал его и железо PentEvo, сбросил - работает. В video.h есть эндиано-зависимые строки, но сделаны точно так же, как в z80.h, и отвечают за сдвиг слоёв TS-конфы.

Кстааати. Была одна глючная версия, которая портила в конфигах архитектуру и ромсет. Проверь в настройках - не сбито ли? Это было примерно тогда, когда появилось сохранение путей ленты и дисков. Если ромсет или его файлы не найдены, ПЗУ забивается 0xFF - это приводит к матрасу.

Blade
17.05.2013, 09:09
Не понял. В завиртуаленой винде мусора на экране нет...
На реальной винде тоже мусора нет. Только если в отладчик войти, то бордюр сиреневым становится. Еще кнопка escape до программы не доходит. В Bombermane пауза из-за этого не включается.

SAM style
17.05.2013, 09:27
На реальной винде тоже мусора нет. Только если в отладчик войти, то бордюр сиреневым становится. Еще кнопка escape до программы не доходит. В Bombermane пауза из-за этого не включается.Искаженный цвет в отладчике - это остатки от того времени, когда не было TS-конфы. В других машинах это вызывает затемнение, при отладке можно видеть как луч проходит по картинке и "осветляет" её.
Esc у меня забиндено на вызов отладчика. Можно запаузить сам эмулятор (кнопка Pause)

Q-Master
17.05.2013, 21:37
Странно. Пересобрал заново, удалил все конфиги, сделал ромсет на пентэву (File:zxevo.rom, GS:gs104.rom, Font:SGEN.rom), выбрал его и железо PentEvo, сбросил - работает. В video.h есть эндиано-зависимые строки, но сделаны точно так же, как в z80.h, и отвечают за сдвиг слоёв TS-конфы.

Кстааати. Была одна глючная версия, которая портила в конфигах архитектуру и ромсет. Проверь в настройках - не сбито ли? Это было примерно тогда, когда появилось сохранение путей ленты и дисков. Если ромсет или его файлы не найдены, ПЗУ забивается 0xFF - это приводит к матрасу.

Ну вот непонятно. Матрас-то необычный. В скорп-пррофе пишет что кмос чексум еррор 8).
К тому-же все остальные конфы работают на ура.

SAM style
17.05.2013, 21:49
Ну вот непонятно. Матрас-то необычный. В скорп-пррофе пишет что кмос чексум еррор 8).
К тому-же все остальные конфы работают на ура.
Кинь все *.conf из ~/.config/samstyle/xpeccy, проверю их и на них.
Доступ к CMOS в скорпе идёт через SMUC, а с этим делом у меня пока не всё гладко

SAM style
18.05.2013, 19:16
Нашёл причину сиреневого мусора. Кто-нибудь может рассказать, почему это:
memcpy(comp->mem->ramData + dadr, comp->mem->ramData + sadr,lcnt);работает по-разному в Windows и Linux? Разрядность линукса значения не имеет.

Blade
18.05.2013, 19:23
Области перекрываются? Это не оно: http://corum.mephist.ru/index.php?showtopic=28621
Если DMA используется для очистки экрана, а memcpy слишком умный и выбирает направление копирования, то DMA может работать неправильно.

SAM style
18.05.2013, 19:49
Области перекрываются? ...слишком умный...Всё с ним ясно. Больше не буду memcpy для перекрывающихся участков пользовать.

psb
18.05.2013, 20:06
Больше не буду memcpy для перекрывающихся участков пользовать.
так это и нельзя делать. а если надо - memmove.

SAM style
18.05.2013, 20:17
так это и нельзя делать. а если надо - memmove.Считать с источника в буфер, а потом бухнуть буфер в точку назначения - тоже выйдет не то. Остановился на побайтовом переносе в цикле.

Q-Master
19.05.2013, 22:08
Кинь все *.conf из ~/.config/samstyle/xpeccy, проверю их и на них.
Доступ к CMOS в скорпе идёт через SMUC, а с этим делом у меня пока не всё гладко

Прикладываю.
ЗЫЖ А ты на бухальт не собираешься?

SAM style
19.05.2013, 22:40
Прикладываю.
ЗЫЖ А ты на бухальт не собираешься?
Выяснено:
Удали pentevo.cmos - что-то там не стыкуется, с твоим мусорит, без него запускается.
TSLab запустилось в basic128 (rompage3). Если у тебя не идёт - проблема не в конфигах, на неделе пересмотрю ещё раз.
Катаюсь я только на ЦЦ, и то не каждый год.

PS : Я слегка намудрил с TMPage - не с той страницы бралась карта тайлов - починено и закоммичено.

SAM style
21.05.2013, 18:23
Я чего-то не понимаю. В доке к PentEvo написано, что используется расширенный режим доступа к HDD - Nemo и NemoA8 сразу, и он "никак специально не включается, просто сразу есть".
Как при этом определяется старший порт регистра данных? При старте ПЗУ пользует A8 (ld bc,#0010 ; inir ; inir), при попытке HDD boot из меню - A0, причём полные адреса портов FF10 (младший) и FF11 (старший). Чем FF10 из первого примера (2й шаг каждого inir) отличается от FF10 из второго, ведь адреса одинаковые, а функции разные?

Blade
21.05.2013, 18:59
Там не NemoA8, а Nemo-DIVIDE.

SAM style
21.05.2013, 19:36
Там не NemoA8, а Nemo-DIVIDE.
То есть, при вводе с 0x10 первый байт - это младший, следующий с того же порта - старший, потом снова младший... А при выводе наоборот - при записи в 0x10 сначала записывается старший, потом младший, потом снова... A8 не участвует. Чтение/запись порта 0x11 оперирует с старшим байтом и насильно устанавливает триггер, что следующий байт через 0x10 - младший. Так я понимаю?

Blade
21.05.2013, 20:02
По документации вот так:

В расширенном режиме синхронизация выдачи младшего или старшего байтов (а также записи сначала младшего, а потом старшего байта) в начале чтения или записи сектора осуществляется в момент доступа в порты #30, #50 и т.д. (любые IDE-порты кроме #10 и #11).

Q-Master
21.05.2013, 21:44
Выяснено:
Удали pentevo.cmos - что-то там не стыкуется, с твоим мусорит, без него запускается.
TSLab запустилось в basic128 (rompage3). Если у тебя не идёт - проблема не в конфигах, на неделе пересмотрю ещё раз.


ага. удалил. заработало после этого. А что дальше с tsevo делать? 8)



Катаюсь я только на ЦЦ, и то не каждый год.


А чего так?

SAM style
21.05.2013, 22:21
ага. удалил. заработало после этого. А что дальше с tsevo делать? 8)В tsevo дальше посмотреть на uwol и bomberman'а. Вроде, ещё одна игруха от робАта была, но сейчас не могу найти.
Игры тут - http://tslabs.info/forum/viewforum.php?f=11&sid=08b349ad89647016c07ab939f522d8ba

А чего так?Тупо лень :)

SAM style
21.05.2013, 23:15
Так... Я создал образ hdd, разметил его fdisk-ом, каким-то чудом с помощью dd и mkfs.vfat создал на нём fat32-раздел, примонтировал его, покидал внутрь несколько *.scl, сделал каталог (т.к. пзу евы не умеет без каталогов в корне) и... запустил! По крайней мере на чтение HDD в PentEvo работает.
Кстати, если на HDD раздел не отформатирован, ПЗУ Евы начинает тупить.

ZXMAK
21.05.2013, 23:34
Я чего-то не понимаю. В доке к PentEvo написано, что используется расширенный режим доступа к HDD - Nemo и NemoA8 сразу, и он "никак специально не включается, просто сразу есть".
Как при этом определяется старший порт регистра данных? При старте ПЗУ пользует A8 (ld bc,#0010 ; inir ; inir), при попытке HDD boot из меню - A0, причём полные адреса портов FF10 (младший) и FF11 (старший). Чем FF10 из первого примера (2й шаг каждого inir) отличается от FF10 из второго, ведь адреса одинаковые, а функции разные?

там порт данных хитро работает, можно писать по очереди 10/11, а можно подряд в 10 все писать :)

SAM style
21.05.2013, 23:37
там порт данных хитро работает, можно писать по очереди 10/11, а можно подряд в 10 все писать :)
Я уже с этим триггером разобрался. Что-нибудь кроме HDDoct для "потестить hdd" есть?
NB : если запускать ProjectRobo с образа SDC/HDD, остаются открытыми теневые порты, опрос кемпстона превращается в кашу.

Q-Master
22.05.2013, 18:21
@SAM style:
Забавно:
file = fopen(dev->image,"rb");
if (file == NULL) {
printf("Can't creae HDD image file\n");
dev->type = IDE_NONE;
}

Зачем у тебя файл HDD открывается в ридонли?
И что за модное слово "creae"? Если в rb, так уж лучше "open", если ты писать хочешь, то надо wb+, а если создавать, то тогда ab+.

SAM style
22.05.2013, 18:36
Забавно:
file = fopen(dev->image,"rb");
if (file == NULL) {
printf("Can't creae HDD image file\n");
dev->type = IDE_NONE;
}
Выдернуто из контекста, строки перед этим тоже важны. При чтении сектора образ открывается на чтение; если не открылся - его нет, делается попытка его создать и открыть снова; если и вторая попытка провалилась - в этом месте его нельзя создать.
Это всё ещё будет пересматриваться, я только добрался до интерфейса между компом и самим HDD, по этому поводу...
build 20130522 Починен косяк с страницей карты тайлов в TSConf Корректрный выбор устройства master/slave Корректный выбор старшей половины регистра данных в ATM2 IDE В PentEvo работает Nemo-divide с автоматическим триггером старшего-младшего байта регистра данных. Интерфейс HDD надо выставить Nemo Шаманства с парой флагов регистров ошибки и состояния
HDDoctor работает с Nemo и c ATM2. Со SMUC-ом пока не особо.
[ deb x86 (http://yadi.sk/d/Jjpz3L6S54BqW) ][ deb amd64 (http://yadi.sk/d/XeW4ZevC54Bt6) ][ win32 (http://yadi.sk/d/NflF-AaH54BvK) ]