Вход

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



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

SAM style
09.02.2009, 19:58
http://samstyle.narod.ru/xpeccy/logo.png Xpeccy
Это эмулятор на основе Qt/SDL, в основном под линукс. Под винду в QtCreator (Qt + MinGW) собирается отлично, требуемо только пошаманить с %PATH% и %INCLUDE% для CMakeLists.txt
Датой рождения считается 09 февраля 2009

GitHub
http://github.com/samstyle/Xpeccy

Compiled

[ download (https://github.com/samstyle/Xpeccy/releases/) ]
[ ROMs pack (https://disk.yandex.ru/d/NhDyJ6u3NiU9HA) ] updated 25.12.2024, добавлены биосы 286/EGA

Compilation

Обязательно нужны cmake, g++, Qt5/Qt6 и SDL1/SDL2 с дев-пакетами
Необязательно - zlib
Как собирать:
git clone https://github.com/samstyle/Xpeccy.git
cd Xpeccy
mkdir build
cd build
cmake [параметры] ..
make
# для установки
sudo make install
# для создания пакета
make package

Параметры cmake
-DQTVERSION=5 Версия Qt, с которой будет собран проект. Поддерживаются 5 и 6
-DSDL1BUILD=1 собрать с использованием SDL1.2. если =0 - с SDL2
-DUSEOPENGL=1 собрать с QtOpenGL. если =0 - программная отрисовка
-DUSEQTNETWORK=1 использовать QtNetwork. Пока в зачатках. Можно цепляться по порту, указанному в настройках, но "общение" скудное
-DPACK=[rpm | deb] переопределяет формат пакета, который будет собран при make package (только в Linux)

Linux
установка осуществляется в /usr/local/bin, из пакета - в /usr/bin
директория конфигов - ~/.config/samstyle/xpeccy

Windows
папка конфигов - ./config (в том же месте, где exe-шник)

Документация от Dexus
[ ссылка (https://docs.google.com/document/d/1fmDePHvjT6i1LM_Ex78GnX4j00tKSBrx-5p11tVWfKE/edit) ]

- ZX Spectrum 48K
- Spectrum +2
- Spectrum +3
- Pentagon (128-512K)
- ZS Scorpion (256,1024) + ProfROM
- Pentagon 1024SL
- ZXM Phoenix
- Profi
- ATM Turbo 2
- ZXEvo BaseConf
- ZXEvo TSConf
- Эльф
- MSX1 (beta)
- MSX2 (beta)
- Gameboy color
- NES/Dendy (beta)
- Commodore 64 (pre-alfa)
- БК0010 (pre-alpha)
- IBM PC/AT (286й) (pre-alfa)

В окне состава ромсета на вкладке Machine добавляются его составные части - указывается файл, смещение в нём, длина загружаемых данных, а так же позиция в ПЗУ, с которой данные будут загружены (обычно кратно 16К), все значения в килобайтах (1024 байта). Все части грузятся по порядку, так что если допущено пересечение данных, то действительными будут данные с последней части в списке. Если образ ПЗУ одним файлом, будет только один пункт. Порядок ПЗУ (48й,128й,трдос,теневая страница и всё что свыше) сильно зависит от используемой модели, заранее уточняйте эту инфу в этих ваших интернетах.
Отдельными пунктами идёт ПЗУ для General Sound (32K), прошивка знакогенератора для ATM2/Evo-BaseConf (2К), для 286го - прошивка ega/vga (без неё это будет cga)
В папке конфигурации создайте файл с расширением map (например, myKeyboard.map). Это текстовый файл, в каждой строке - соответствие PC-клавиши одной или двум ZX-клавишам. Файлов может быть несколько, используемый выбирается в настройках эмулятора на вкладке Input. Обозначения клавиш и пример см. тут -> https://github.com/samstyle/Xpeccy/blob/master/keymap Всё копировать оттуда не нужно и даже вредно. В .map файле должны быть исключительно строки типа PCKey(tab)ZXKey1(tab)ZXKey2. Обозначения разделены табуляцией

А если не по умолчанию - они все настраиваются в опциях
F1....Настройка
F2....Запись диска/снапшота/ленты
F3....Загрузка чего-нибудь
F4....Стоп/воспроизведение ленты
F5....Стоп/запись на ленту
F7....Cкриншот
Alt+F7....Комбо-скриншотинг
F9....Записать измененные диски
F10....NMI (magic)
F12....Сброс
Alt+Enter....полноэкранный режим
Alt+R....сохранять/нет пропорции
Alt+F12....Сброс в ROMPage3
Pause....Пауза
ESC....Отладчик
Menu,RMB....Юзер-меню
Alt+1,2,3,4....Изменить размер окна от x1 до x4
Insert....Ускорение (аналог NumLock в Unreal).
Alt+K....Показать ZX-клавиатуру
Alt+N....Триггер нофлика
MMB захват мыши
gameboy
cursor = d-pad, z = a, x = b, enter = start
1,2,3 - trigger bg,win,spr graphics
4,5,6,7 - trigger sound channels ch1-ch4
nes
cursor = d-pad, z = a, x = b, enter = start, space = select
1,2 - trigger bg,spr graphics
3,4,5,6,7 - trigger sound channels
PageUp/PageDown....листать дизасм или дамп
Home....перейти к PC
End....поставить PC в текущую позицию
Space...поставить точку прерывания
Alt+F2...поставить/убрать точку прерывания read
Ctrl+F2...то же для write
F2....сохранить файл
F3...открыть файл
F4....перейти по адресу, указанному в команде (сохраняется история 64 переходов)
F5....вернуться к предыдущему адресу по истории
F7....выполнить команду на PC
F8....выполнить команду с пропуском call/rst/djnz/ldir-подобных
F9....оставить временный fetch-breakpoint на этом адресе и выйти
Ctrl+S....сохранить блок памяти
Ctrl+O....загрузить блок памяти
Ctrl+T....запустить трассировку
Ctrl+L....вкл/выкл отображения меток
ESC....выход

-d | --debug : после запуска сразу включить отладчик.
-p | --profile <name> : включить профиль <name>
-b | --bank <nr> : включить в окно #C000 страницу ОЗУ с указанным номером.
-a | --adr <nr> : задать адрес для загрузки (см. --file)
-f | --file <path> : загрузить бинарный файл по адресу, указаному в --adr
-s | --size <nr> : масштабирование 1..4
-n | --noflick <nr> : нофлик 0..100
-r | --ratio <bool> : сохранять ли пропорции в полноэкранном режиме
-c | --console : Windows. Создать и прикрепить к эмулятору консоль, куда иногда будут выводиться какие-нибудь сообщения
--disk 0..3|a..d|A..D : выбрать дисковод для загрузки образа
--style : MacOSX only - использовать системный стиль
--fullscreen <bool> : полноэкранный режим
--bp <adr> : установить ловушку fetch на указаный адрес
--pc <adr> : установить PC
--sp <adr> : установить SP
-l | --labels <path> : загрузить список меток формата SJASM+ (LABELSLIST).
--xmap <path> : загрузить карту памяти *.xmap
--confdir <path> : сменить каталог настроек, вместо стандартного ~/.config/samstyle/conf или ./conf

# Это не работает под шindoшs. Ну, разве что баш туда прихомячить, и то не факт
# /path/to/image и /path/to/mount - это пути к образу и точке монтирования, задаются пользователем
# делаем пустой файл нужного размера. В примере - 512 блоков по 1Мегабайту, т.е 512Мегабайт в целом
dd if=/dev/zero of=/path/to/image bs=1M count=512
# форматируем файл в FAT32
sudo mkfs.fat -F 32 /path/to/image
# если приспичит - монтируем его куда-нибудь
mkdir /path/to/mount
sudo mount /path/to/image /path/to/mount

Shadow Maker
09.02.2009, 21:38
Билд под винду надоть...

Alexandr Medvedev
09.02.2009, 21:55
Эмуль ZX под линуксА как насчёт Win32 версии?

SAM style
09.02.2009, 22:15
Под винды могу, но без звука, т.к не обучен под неё программить (в линуксовой версии я просто кидаю буфер в /dev/dsp). И ещё - либо вам придётся ставить QT4, либо перечислить мне требуемые dll-ки, я их куда-нить выложу. Обойдётся метров в 15. (qt4gui.dll 10 метровая)

added
Хотя... Под винды он собрался, но запускаться отказался.

NovaStorm
10.02.2009, 09:31
Ну если писать под Qt, есть смысл делать изначально кроссплатформенным. Со звуком правда могут быть проблемы, сможет ли phonon воспроизводить без лагов?

CityAceE
10.02.2009, 10:33
Эх, жаль, что под QT, а не под GTK.

breeze
10.02.2009, 10:37
Эх, жаль, что под QT, а не под GTK.

кстати да ;)

SAM style
10.02.2009, 10:47
Эх, жаль, что под QT, а не под GTK.
Документацию на GTK в стиле QAssistant'a найдёте - переделаю виджеты (благо их там от силы штук 5-7, если не считать дебугера и зачатков сетапа). Но после того, как вживлю ВГ93 и AY.

added
И всё же про ВГ93...
Правильно ли я понял назначение /DRQ и /INTRQ
/DRQ = 1, пока байт побитово получается с дисковода. =0 - байт получен и может быть считан
/INTRQ = 1 если этот байт с регистра 7F уже считан, =0 если не считан.

Sinus
10.02.2009, 21:34
а сорсы выложишь?

Shadow Maker
11.02.2009, 02:43
Пусть хоть снапшоты зафиксит.

newart
11.02.2009, 06:08
Автор, а какие у тебя планы относительно сабжа?
Просто поиграться или сделать, что то сопоставимое или даже превосходящее Unreal & Spectaculator?

Просто есть много фич, которые было бы удобно иметь и которых до сих пор нет ни в одном эмуле спека...

NovaStorm
11.02.2009, 08:24
gentoo ~x86, заработало. Бинари выкладивать как-то некультурно =)

SAM style
11.02.2009, 08:26
Просто есть много фич, которые было бы удобно иметь и которых до сих пор нет ни в одном эмуле спека...
Да, перечисли. Пока оно всё жестко не запроектировано, есть возможность изогнуть код. Если немного допилить, можно организовать запись на ленту даже между существующих блоков и сохранение самой ленты.
Сабж задумывался как нечто, более удобное чем Fuse (его допиливать нет желания). Unreal под wine не хочет нормально работать: нет звука, скорость срывается до 400fps...
2 ShadowMaker - это не снапшоты. Это какие-то мелочи в эмуляции или самого Z80, или входа-выхода в прерывание при IM2. Твой снапшот пока единственный, который после загрузки крючит.
Пока немного протестил, нашел кучку недочетов:
- некоторые команды не выставляют 3 и 5 бит в флагах
- У ADD A,reg и SUB reg лишнее условие на флаг P
- в SLA неправильно выставлялся Z
- надо ещё потестить BIT на предмет действия на флаги S,H,P
Сорцы поправлю и выложу вечером.

newart
11.02.2009, 10:11
например?
На вскидку:

1. Многозадачность - эмуляция сразу нескольких спектрумов с возможностью переключения на лету + опция общих/индивидуальных дисководов.
2. Скидывание скриншотов в png (с макс отпмизацией) оригинального размера.
Эмулятор "знает" какой сейчас basic файл запущен и дает его имя скриншоту + счетчик + возможность брать имя текущего образа.
3. Стабильный автозапуск basic файлов (в Spectaculatore иногда не срабатывает).
4. Скидывание готовых AY файлов.
5. Скидывание скриншотов с заданой частой кадров.
6. Загрузка след/пред образа по алф порядку в текущей папке по гор. клавишам.
(оч полезно при разборе коллекций)
7. Ремапинг дисководов (очень много старых релизов идут только с диковода А) по горю клавишам.

rasmer
11.02.2009, 19:12
Unreal под wine не хочет нормально работать: нет звука, скорость срывается до 400fps...

пользуй анрыл под виртуалбоксом... намного лучшее...

SAM style
11.02.2009, 19:33
Вобщем вот. Плюс сорцы для кошерности. Пинайте за кривость кода (а оно там есть). Всё, что начинается с vg93* - на стадии глубокой разработки, туда лучше вообще не смотреть.
А ошибка, таки да, была с загрузкой снапшотов 128K. Пофиксено, хоть и кривовато.

SAM style
12.02.2009, 17:01
Кто-нибудь может внятно объяснить, при каких условиях в каком состоянии находятся DRQ и INTRQ у ВГ93? что это DATA REQUEST (запрос данных) и INTERRUPT REQUEST (запрос прерывания) - это я понял.
Например, в тырдосе в самом начале даётся команда 8 (восстановление) и потом часто проверяется 7й бит с порта FF (INTRQ) на 0. Для чего это? Если его долго нет - выдается ошибка.

added
Временный отбой. Хороший даташит на WD1793 таки нашелся. Буду разгребать.

Sinus
13.02.2009, 12:38
поделись даташитом плиз

SAM style
13.02.2009, 17:38
Файл большой, не прикрепился. Поклал сюда: http://84.242.241.90/subs/
Даташит на англицком.

SAM style
15.02.2009, 21:54
Идём далее. Уже эмулируется ВГ93. Работать можно по прежнему только с TRD, пока без возможности его сохранения.
Подозреваю, что-то не так с дешифрацией портов доса - на скорпионе всё время теряются данные, т.к он читает-выводит и в другие порты (не ВГ-шные).
Сорцы прилагаются.

Следующий вопрос - даташит на AY. Частоты нот, огибающие, генератор шума.

added
Забыл. ВГ93 эмулится не полностью. Чтение-запись секторов работает только с одним сектором (bit4=0). Мультисекторное чтение пока не работает.

molodcov_alex
15.02.2009, 22:15
Следующий вопрос - даташит на AY. Частоты нот, огибающие, генератор шума.
Пожалуйте: http://zxpk.untergrund.net/downloads.php?id=328
(этого вполне достаточно для написания эмуля AY, проверено опытом ;) )

SAM style
17.02.2009, 22:18
Вроде, AY запиликал.
Со звуком вообще, чувствуется будет полный геморой. На работе был буфер на 20мс (или вообще выводил по заполнености от предыдущего кадра) - считай что идеально. Дома - чем дальше, тем больше звук тормозит (не успевает проиграться?), надо ставить буфер в 19.6 мс. Это при том, что на работе - Сель на 1700МГц со встроеным звуком и видео, на котором выпадают кадры, а дома E7300, SB и GF9500+дрова.
Note: когда окно неактивно, буфер не выводится. Если звук убежал - можно окошко на время покинуть (например, вывалиться в дебагер и закрыть его).

Помимо этого: пропадают низкие частоты и что-то я с шумом начудил - на слух у всего шума одна частота.

ВГ93 доэмулил, но пока что выкинул потерю данных. CRC тоже не проверяется (а по мануалу должно бы). Думаю, можно уже начинать сетуп делать.

Вопрос: АУкалка от Ямахи чем-то отличается, кроме как тактовой частотой?

Vitamin
17.02.2009, 23:39
Вопрос: АУкалка от Ямахи чем-то отличается, кроме как тактовой частотой?
Отличается. У АУ 16 уровней громкости, у ямахи - 32. В смысле дискретность изменения громкости в два раза выше. Сказывается на огибающих. Из-за этого, собсно, ямаха кажется слегка тише.

psb
18.02.2009, 09:34
Дома - чем дальше, тем больше звук тормозит
если я правильно понимаю, то дома у тебя просто ярковыраженный эффект, на работе он тоже присутствует, но в меньшей степени:) надо делать автоподстройку, только так будет нормально.

SAM style
20.02.2009, 18:50
Next...
- Зачатки настроек (F1)
- Сохранение диска в *.trd (пока только из настроек).
- Запрос на сохранение измененного диска при открытии нового.
- Выбор дискокрута при открытии по F3
- Турбо у дискокрута. При поиске поля крутится в 100 раз быстрее и нет задержек при перемещении головки.
- Настройки пока не сохраняются
Проверка на корректность диска при сохранении не производится. Предполагается, что там честные 16 секторов (заголовок+данные) на дорожку с номерами 1-16. Сектора с иными номерами пропускаются, несуществующие забиты нулями.

PS: Требуется помощь со звуком. Сам с ним мало работал.

Sinus
21.02.2009, 00:38
возьми какую-нибудь библиотеку для работы со звуком, ибо без либы только OSS просто работать.

SAM style
21.02.2009, 01:57
Убейте меня апстену! Потому что 44КГц != 44*1024 Гц. Поставил rate = 44100 (как положено) - и за 5 минут играния музыки отставания не увидел. Аллес, короче. Надо больше спать :(

boo_boo
21.02.2009, 11:03
возьми какую-нибудь библиотеку для работы со звуком, ибо без либы только OSS просто работать.
кстати да. может http://www.music.mcgill.ca/~gary/rtaudio/ подойдет?

SAM style
24.02.2009, 16:48
Вопрос к тем кто знает/видел/щупал.
Быстрее ли будет отрисовывать картику прямо в иксы, чем натягивать её на QT-шные виджеты? При масштабе х2 оно уже неприлично много времени жрёт.

Vitamin
24.02.2009, 16:57
Быстрее ли будет отрисовывать картику прямо в иксы, чем натягивать её на QT-шные виджеты? При масштабе х2 оно уже неприлично много времени жрёт.
Прямо в иксы ясно дело быстрее. Но! В таком случае кроссплатформенность идет лесом, да и обрабатывать разные глубины цвета прийдется практически вручную. Попробуй связку QT+OpenGL

boo_boo
24.02.2009, 17:20
Прямо в иксы ясно дело быстрее. Но! В таком случае кроссплатформенность идет лесом, да и обрабатывать разные глубины цвета прийдется практически вручную. Попробуй связку QT+OpenGL
еще можно попробовать впендюрить SDL-ное окно в QT, я слыхал, есть способы. (хотя проще всё делать на SDL благо для него и виджетсетов приличных хватает)

SAM style
24.02.2009, 17:23
Прямо в иксы ясно дело быстрее. Но! В таком случае кроссплатформенность идет лесом, да и обрабатывать разные глубины цвета прийдется практически вручную. Попробуй связку QT+OpenGLЯ уже начинаю подумывать отказаться от кроссплатформенности. На винде есть и анрил, и люди, которые его достругивают. Только вот маководы обделёнными останутся. Для других платформ QT, вроде как, нет.
Вобщем, попробую сначала на иксах рисовать. Если возникнут большие проблемы, буду окучивать OpenGL.

Vitamin
24.02.2009, 17:55
Вобщем, попробую сначала на иксах рисовать.
Посмотри, например, как сделано в glukalka (там напрямую в иксы). Этож ужоснах! Гораздо приятнее рисовать во внеэкранный контекст с глубиной цвета в 32 бита, а подсистема (QT/SDL/OpenGL) тебе сама переводит как надо.

Sinus
26.02.2009, 03:05
OpenGL надо очень осторожно, ибо будут проблемы у людей использующих Compiz

boo_boo
26.02.2009, 04:38
OpenGL надо очень осторожно, ибо будут проблемы у людей использующих Compiz
у людей использующих Compiz и так проблемы -- они используют Compiz :v2_devil:
но есть куча людей, у которых просто видяха слабая или дрова без нормального OpenGL, среди линухоидов это обычное дело.

вообще, наверняка и средствами QT можно увеличить производительность -- к примеру

QImage rimage = image.copy(0,0,xscrsize,yscrsize);
QPixmap pixmap = QPixmap::fromImage(rimage.scaled(int(xscrsize*zoom ),int(yscrsize*zoom),Qt::KeepAspectRatio,Qt::FastT ransformation));
сперва копирует картинку, а потом ресайзит, всё это стандартными тормозными QT-шными средствами. если вместо этого прямо во время эмулируемого хода луча совать пикселы в буфер уже с нужным зумом и в нужном формате, а потом загружать это дело в QPixmap через loadFromData, без конверсии и участия QImage-ей, по идее должно получиться быстрее.

SAM style
26.02.2009, 09:12
если вместо этого прямо во время эмулируемого хода луча совать пикселы в буфер уже с нужным зумом и в нужном формате, а потом загружать это дело в QPixmap через loadFromData, без конверсии и участия QImage-ей, по идее должно получиться быстрее.Есть такая идея. Как выяснилось, основной тормоз - в лепке QPixmap'а из QImage с ворочанием большого объёма данных. Рисовать по 4 точки на image при двойном увеличении я пробовал. Зум его самого тут почти не при чём.
PS: Рисовать по иксам бросил, вернулся на QT.
PPS: Вделал загрузку SCL, сегодня попытаюсь в SCL сохранять.
PPPS: Самооценка - эмуляция Z80 удовлетворительная, но тормозная. Эмуляция AY - отстой.

added

Новое:
- чтение и запись SCL. формат при записи определяется по расширению. неизвестное - это TRD. В SCL сохраняются только существующие файлы (удаленные выбрасываются).
- F2: записать диск A.
- 2 масштаба - двойной и обычный. 3 режима отображения бордюра: нет, половинный и полный
- Немного подрихтовал диалог открытия, чтобы несуществующие файлы не открывать.

SAM style
02.03.2009, 22:53
Next
- исправлена работа огибающей. теперь она хоть как-то звучит, хотя хрипит на некоторых частотах и, как мне кажется, не соответствует реалу чуть более чем наполовину.
- переделал формирователь звука, ибо по отжранию он был на 2 месте после формирователя картинки. кажись, чуть быстрее стало.
- по F2 можно записать снапшот 128К (sna)
- по F9 записываются измененные диски. Формат записи по прежнему определяется по расширению (trd, scl)

added

Меня терзают смутные сомнения насчет снапшотов.
Если на момент его сохранения включена 2я или 5я банка, то она дублируется в первых 48К и снапшот становится на 16К длинее? Или как?

SAM style
06.03.2009, 14:43
Предпраздничное. Скриншоты.
В вкладке video настроек можно выбрать, куда и в каком формате сохранять (все, которые умеет записывать QT + наш scr), а также один из пунктов newart'a - комбо-скриншотинг. делается определенное кол-во скриншотов с периодом в столько-то прерываний.
F8 - сделать одиночный скриншот (не работает, пока идёт комбо)
F7 - запустить комбо. сообщение его старте и окончании плюётся в консоль.
В scr записывается тот экран, который включен на момент прерывания. В остальные форматы пишется то, что видно на экране.

SAM style
11.03.2009, 16:55
Next.
Переключение между архитектурами (ZX48, ZX128, Scorpion). Соответственно, меняются их РОМ-сеты (в настройках этот комбобокс ничего не делает).
А теперь внимание! Начался файл настроек. Для нормальной работы надо сделать папку ~/.samstyle/samulator (эмуль ее сам делает, но ничего туда не пишет) и создать там файл samulator.conf такого примерно такого содержания:

[ROMSETS]

name = ZX48
basic48 = 1982.rom
trdos = trdos.rom

name = Pentagon128K
basic128 = pentagon.rom:0
basic48 = pentagon.rom:1
trdos = trdos.rom

name = Scorpion
basic128 = scorpion.rom:0
basic48 = scorpion.rom:1
shadow = scorpion.rom:2
trdos = scorpion.rom:3

zx48romset = ZX48
zx128romset = Pentagon128K
scorpionromset = Scorpion

Последние 3 параметра особенно важны, т.к по умолчанию ни одной машине ромсета не присваивается. Файлы ПЗУ должны лежать в ~/.samstyle/samulator/roms и только там. Подозреваю, мера эта временная. Сами прошивки прилагаются.

PS: Настройки обратно не пишутся.
PPS: Сообщайте о найденых багах (кроме тормозилова, с ним буду решать позже), предлагайте предложения по улучшению.

SAM style
16.03.2009, 12:22
Next
Новое:
- Пишутся-читаются основные настройки (~/.samstyle/samulator/samulator.conf)
- Навигация по ленте. Двойной клик на списке меняет текущий блок (заголовок - тоже блок!)
- Возможность отредактировать ленту (поудалять блоки :) )
- Возможность сохранить ленту в тапку. Сохраняется как из настроек, так и по F2, если она есть (число блоков <> 0)
- Возможность записи на ленту.
- Индикатор чтения и записи ленты (зеленая и красная касетки)
Кнопульки:
F4 - старт воспроизведения ленты или останов
F5 - старт записи ленты или останов
Новые блоки при записи добавляются в конец ленты. Данные для блоков берутся из выходного сигнала на мофон. С десяток тестов показал, что при стандартной записи данные сохраняются нормально с небольшим разбросом в длине сигналов (по сигналу +-3 тика, у меня расширено до +-10).

newart
16.03.2009, 14:27
Последние 3 параметра особенно важны, т.к по умолчанию ни одной машине ромсета не присваивается. Файлы ПЗУ должны лежать в ~/.samstyle/samulator/roms и только там. Подозреваю, мера эта временная. Сами прошивки прилагаются.

PS: Настройки обратно не пишутся.
Зачем повторять чужие ошибки. В Unreal это бесит.
Сделай лучше систему профилей с возможностью как ручного редактирования так и записи настроек из эмуля обратно в профиль.
При этом в комплекте должны быть распространенные профили (Pentagon/Scrop/Atm/Profi) - если юзер что то меняет то создает пользовательский профиль с возможностью старта эмуля с заданого профиля.

Добавлено через 1 минуту
+ Для AAA было бы очень полезно сделать функцию скидывания SNA в TRD в виде Basic файла.

SAM style
16.03.2009, 16:27
SNA в TRD в виде васика - это как?
Насчет профилей. Как насчет этого:
В папке настроек имеется файл profiles, в котором указано имена профилей и пути к их файлам настроек. Также в нём определён defaultprofile, который грузится при старте. Все изменения в настройках делаются только для файла текущего профиля.

newart
16.03.2009, 18:33
SNA в TRD в виде васика - это как?
Смотри тему в демах. Там упомниается плагин под FAR, можно его за основу использовать.

SNA -> Basic -> TRD нужно что бы скидывать интры отдельно от грамоздких Журналов, игр и т.д. А если оно будет еще и паковаться (hrust например) то и новые релизы так можно выпускать "на скрую руку". Тогда можно и -> TAP добавить.

SAM style
18.03.2009, 11:20
Если кто знает, покидайтесь, PLZ, ссылками на TZX-ы, в которых есть блоки сигнала, отличные от #10 и #11 (эти я сделал). В частности, интересуют блоки #12-#19. Надо на чём-то проводить эксперименты, а скачивать половину WoS в поисках нужного нет возможности.

SAM style
31.03.2009, 00:28
Little bit of optimiZZZation
На работе я "удачно" сменил себе комп, что и сподвигло меня на оптимизацию.
- QImage не рисуется, байты просто пихаются прямо в занятую им память
- Всё проецируется сразу на QLabel(основное окно) в обход QPixmap'а.
Из нового немного:
- Загрузка простых TZX'ов. Пока понимаются только блоки #10 и #11.
- При записи к имени файла дописывается расширение, если это требуется.

На досуге поигрался с OpenGL. Всё бы ничего, но:
- можно ли создать окно, у которого нельзя менять размеры? (glut)
- отрисовка массива 400*300 попиксельно кушает довольно много.

added
Только что заметил, что отрублен BDI и врублен дебажный вывод. Проморгал :(

Vitamin
31.03.2009, 12:16
- отрисовка массива 400*300 попиксельно кушает довольно много.
Рендери в память и используй ее как битмап для отображения.

SAM style
31.03.2009, 19:33
Рендери в память и используй ее как битмап для отображения.Попробую завтра на работе.
А пока - чуток багфиксов.
- неумно было запрашивать pixmap c QLabel'а, когда я его туда не натягивал. В итоге оно сегфолтилось при сохранении скриншота не в scr
- TZX-блоки #12,#13,#14,#20 (не протестил - не на чем).
- вернул BDI и почикал дебаговый вывод.

added
Опробован glDrawPixels на массиве 448*320 / RGB. Скушало 3-5% на селероне 1.7 + GF4MX(дрова 96.43.07) + RAM 512(DDR, 2100). Впечатлило по сравнению с qt-шными методами.
Первый вопрос насчёт GL остаётся в силе. На ум приходит только постоянная проверка размеров окна и резайц его обратно в случае несовпадения, но это немного не то. Я хочу, чтобы его мышой вообще нельзя было растягивать.

boo_boo
01.04.2009, 15:25
Первый вопрос насчёт GL остаётся в силе. На ум приходит только постоянная проверка размеров окна и резайц его обратно в случае несовпадения, но это немного не то. Я хочу, чтобы его мышой вообще нельзя было растягивать.
мучил glut пяток лет назад. если там ничего не поменялось, нельзя делать фиксированное окно. и вообще глют примитивен донельзя, юзай лучше QGLWidget или SDL

SAM style
01.04.2009, 18:58
А в иксах такое возможно, или же это привелегия исключительно WM? Сегодня опробовал иксовое окно с glx-содержимым + системный таймер. вроде ничего, но изредка почему-то затыкается - окно прорисовывается, а потом всё висит в ожидении эвента с сервера иксов. Исходник прилагается (переименовать в .c и компилять: g++ main.c -lX11 -lGL)
Если действительно ничего не получится, то да - QGLWidget

boo_boo
02.04.2009, 01:07
Сегодня опробовал иксовое окно с glx-содержимым + системный таймер. вроде ничего, но изредка почему-то затыкается - окно прорисовывается, а потом всё висит в ожидении эвента с сервера иксов. Исходник прилагается
затыкается при некоторых действиях с окном. судя по всему, XNextEvent-у при обработке евентов, связанных с перерисовкой окна, не нравится, когда его прерывают сигналом, в обработчике которого что-то мутится с OpenGL... и его можно понять :)

SAM style
02.04.2009, 14:03
Дело спасло это:
if (XPending(display)!=0) XNextEvent(display,&event);Событие берётся только когда оно есть.
Правда, иногда вылетает при сворачивании-разворачивании. Надо это дело контролировать.
Копаемся далее, в сторону окна фиксированного размера.
added
Если кому понадобится
XSizeHints winsize;
winsize.flags = PMinSize|PMaxSize;
winsize.min_width=448;winsize.min_height=320;
winsize.max_width=448;winsize.max_height=320;
XmbSetWMProperties(display,window,"Window name\0","\0",av,ac,&winsize,NULL,NULL);

psb
02.04.2009, 16:33
"Window name\0"
извините ламера, а зачем там \0?

SAM style
02.04.2009, 16:54
извините ламера, а зачем там \0?
http://tronche.com/gui/x/xlib/ICC/client-to-window-manager/XmbSetWMProperties.html
window_name Specifies the window name, which should be a null-terminated string.
Хотя, я может это и не так понял. Без \0 то же самое получается.

boo_boo
02.04.2009, 17:14
window_name Specifies the window name, which should be a null-terminated string ну дык в С все строковые константы автоматически нулем заканчиваюцца

Правда, иногда вылетает при сворачивании-разворачивании. Надо это дело контролировать. а если вместо традиционного цикла обрабатывать иксовые евенты в хендлере SIGALRM, после опенгэльной хни или перед ней? :v2_wacko:

SAM style
02.04.2009, 17:22
При каждом соврачивании-разворачивании выскакивает

Locking assertion failure. Backtrace:
#0 /usr/lib/libxcb-xlib.so.0 [0xb7aed767]
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_lock+0x2e) [0xb7aed81e]
#2 /usr/lib/libX11.so.6 [0xb7e3bde9]
#3 /usr/lib/libX11.so.6(XSync+0x25) [0xb7e30115]
#4 /usr/lib/libGL.so.1 [0xb7da33fa]
time left: 0
time left: 9750
Locking assertion failure. Backtrace:
#0 /usr/lib/libxcb-xlib.so.0 [0xb7aed767]
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_unlock+0x31) [0xb7aed8b1]
#2 /usr/lib/libX11.so.6 [0xb7e3bcf1]
#3 /usr/lib/libX11.so.6(XPending+0x43) [0xb7e25403]
#4 ./a.out(__gxx_personality_v0+0x513) [0x8048f8b]
#5 /lib/i686/cmov/libc.so.6(__libc_start_main+0xe5) [0xb7b05455]
#6 ./a.out(__gxx_personality_v0+0x59) [0x8048ad1]
time left - это мой дебаг. выдаёт остаток таймера после прорисовки.
Попробовал ловить UnmapNotify и не выводить содержимое, когда окна нет. От ошибки при разворачивании спасает, при сворачивании - нет. Найти бы эвент "щас хочу свернуться" (UnmapNotify начинает выдаваться уже после сворачивания)
И ещё: как правильно всё закрывать? При закрытии окна вылезает
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
after 40 requests (40 known processed) with 0 events remaining.
added
Так да. Поставил выемку эвента в обработчик - ошибки сворачивания исчезли. Но при закрытии всё осталось. Если эвенты убрать вообще - нормально закрывается.
added 2
Как корректно убить автоповтор клавиш? XAutoRepeatOff убивает вообще глобально, к тому же продолжает действовать даже после закрытия проги.
added 3
И с автоповтором разобрался. Даже зум сделал вполне приемлемо. Только вот (0,0), оказывается, в левом нижнем углу...

boo_boo
04.04.2009, 00:26
SAM style, а зачем вообще связываться с SIGALRM? можно ж:

t1 = таймер
в цикле {
разгрести иксовые эвенты
сэмулить фрейм
t2 = таймер
если (t2 - t1) > длины_фрейма то ждать (длина_фрейма - (t2 - t1))
t1 = t1 + длина_фрейма
вывести экран
}

SAM style
28.04.2009, 23:08
Давно меня тут не было...
Как запаузить прогу на энное кол-во микросекунд? Тупое do {clock2 = clock();} while ((clock2-clock1)<(CLOCKS_PER_SEC/50)); жрёт, ясно дело, дофигищи. Перехватывать закрытие окна я уже научился. Альтернативы системному таймеру пока не вижу.

Vitamin
29.04.2009, 10:13
usleep, nanosleep - засыпание на микро- и наносекунды соотвецно.

SAM style
13.05.2009, 11:55
Промежуточное.
Весь апрель занимался связкой X+glx. Почти получилось - эмуляция шла, всё рисовалось и даже пикалкой пикало. Дошел до того места, где надо интерфейс в окнах рисовать (напр, настройка) - загнулся. Скрещивать Qt с иксами не вышло(хотя идея есть), самому всё рисовать/располагать/контролировать не хочется.

Обновилось:
- главное окно на QGLWidget. Двойной размер уже не кушает столько, сколько прежде.
- новая тикалка. На первый взгляд, тикает быстрее.

Отвалилось:
- сохранение скриншотов не в scr. renderPixmap чуть не повесил всё. Пока закомментировано.
- разный размер бордюра. Ещё не придумалось, как присобачить его к новым реалиям.
- лента. К новой тикалке пока не приделана.

Планы:
- переделать нафиг звук и ВГ93. Ибо вместе жрут в полтора раза больше самой эмуляции Z80. А звук, на удивление, теперь ещё и не работает.

SAM style
18.05.2009, 15:43
Что-то не то... Я себе уже голову сломал, посему ХЕЛП, АЛЛ! Звук есть, но он через несколько секунд тухнет. Чем ниже битрейт, тем дольше оно держится, но потом громкость падает - резко и до нуля. Одна малина, что выбрасывать буфер прямо в /dev/dsp, что посредством libasound.

ЗЫ: если вместо вычисленного уровня звука в буфер ложить рандомы, то оно исправно шипит и не кашляет.

Vitamin
18.05.2009, 16:19
Навскидку- нет синхронизации. Обычная схема воспроизведения звука:
1) Дождались, пока доиграет текущий фрейм
2) Запустили воспроизведение буфера
3) Быстро начали рендерить данные _в этот же_ буфер
4) Переход на п.1.

Варианты с большим буфером (больше 20мс) и многоуровневой буферизацией чреваты запаздывающим звуком.

SAM style
18.05.2009, 16:35
Всё бы хорошо, но я там почти ничего не менял, и раньше по той же схеме оно работало:

- есть bufer[1024] (при 44100 используется 882-83)
- есть sndbufpos, отвечающий за текущую позицию в буфере. Перед каждым фреймом выводится сформированый в прошлом фрейме буфер и sndbufpos=0
- tcount считает вообще тики, как только он доходит до sndlimit, вычисляется амплитуда звука в этот момент (простейшее = beeplevel?beepvolume:0), ложится в буфер, после чего sndbufpos++, а sndlimit+=ticksatbyte (тиков на байт буфера).

Потому как шипит исправно, то видимо дело в чем-то ещё.

added
Починено.

SAM style
28.05.2009, 17:34
Back...
Кажется, возвернуто всё, что было утеряно. На радость мне кушает всё же меньше, чем версия без GL.
Из нового - расширеный спектр размера бордюра. Можно поставить от 0(без бордюра) до 100(целиком) %. Правда, на некоторых размерах картинка косит - издержки округления. Соответственно, в конфиге bordersize теперь - число от 0 до 100.

PS: Обнаружилось, что у меня дома коды для Home/End/PgUp/PgDn/Ins/Del/стрелок другие, нежели на работе. Не знаю пока, от клавы это зависит или в Qt4.5 поменяли.

SAM style
05.06.2009, 09:32
Debugger
Приступил к дебугеру. Сейчас можно посмотреть его вид (почти унреаловский) и потыкать в кнопки:
Z - выполнить команду (в call'ы заходит)
up/dn/pgup/pgdn - скроллирование дизасма.
В дизасме пока прописаны не все команды, нет [FD|DD]CB и ED. По идее главное окно при трассировке прорисовывается, так что можно следить за ходом луча :)

Следующий вопрос - можно ли какой-то функцией в Qt получить указатель на виджет окна, над которым произошел MouseEvent? Или надо для них делать свои классы со своими реакциями на события? Нужно, к примеру, для скролла листинга и дампа памяти колесом, или редактирования по клику.

Vitamin
05.06.2009, 10:38
Следующий вопрос - можно ли какой-то функцией в Qt получить указатель на виджет окна, над которым произошел MouseEvent? Или надо для них делать свои классы со своими реакциями на события?
Для конкретного экземпляра виджета подписываешься на его события и сам обрабатываешь.

SAM style
15.06.2009, 17:39
Я просто оставлю это здесь.
В довесок к сгинувшему прошлому функционалу в дебугере теперь можно:
S - записать блок памяти в файл. Память рассматривается только текущая (видимые 64К, вместе с ПЗУ)
L - погрузить блок памяти из файла.
Адрес и старт блока указываются в HEX. Блоки, вылезающие за FFFF не пишутся и не грузятся.

SAM style
18.06.2009, 13:12
Дебугеропродвижение!

+ Оно теперь может погрузить метки, сделаные в SJASM'е через LABELSLIST. Метки отображаются вместо всех возможных адресов в столбцах дизасма (jp nn, jr $+e, ld de,nn и пр). L - погрузить файл меток. Загрузка блока памяти переехала на O. формат файла: 1 строка - 1 метка (<page>:<adr&0x3fff> <name>)
+ В дампе появилось редактируемое поле ASCII (кодируется оно в IBM866).
+ Убрал оформление полей редактирования. Просто и не напряжно.

added
Блин, совсем забыл!!!
+ брыкпоинты! Ставятся и убираются кликом средней кнопкой мыши на строке дизасма.
+ возможность переместить PC в дизасме - клик правой кнопкой.

И отключайте нафиг свои компизы - двойной буферизации тут нет, с компизом будет застывшай картинка.

rasmer
18.06.2009, 18:37
32.3174
Open audio device /dev/dsp
define machines
Segmentation fault

SAM style
18.06.2009, 18:47
32.3174
Open audio device /dev/dsp
define machines
Segmentation fault

Сделай начальный файл настроек и положи ПЗУ-хи в нужное место.
http://zx.pk.ru/showpost.php?p=188315&postcount=40

added
А вообще, чтоб не париться, вот мои установки. Распаковать в ~/. В архиве скрытая папка.

ещё added
Бинарник с alsa (должно спасать от занятого /dev/dsp), двойной буферизацией (для компиза) и некоторыми исправлениями в опросе клавы для qt4.5

и на посошок
Короче, с флагами там большая жопа. Будет глобальный пересмотр. И при выполнении кода в дебугере не включается тырдос.

SAM style
22.06.2009, 18:22
Исправления косяков эмуляции.
- Каждый префикс (кроме последнего в конструкции [FD|DD]CB) увеличивает R на 1.
- Сделал увеличение R перед командой, а не после нее, так что теперь LD A,R и LD R,A работают верно
- При увеличении R сохраняет свой 7й бит (7F->00, FF->80)
- Растянул INT (в переменных определена его длина)
- IFF1 восстанавливается из IFF2 только после окончания INT (переход intupt из true в false)

Благодаря всему этому запустилась и почти до конца прошла мегадема SATISFACTION.

И пока что временный костыль:
? при LD A,[R|I] P/V отражает IFF1. Пока не догоняю, как с помощью IFF2 satisfaction может замерить число тактов между прерываниями. Или при восстановлении IFF1 IFF2 сбрасывается в 0?

SAM style
26.06.2009, 16:15
Очередной пятничный упдатес.

[+] Исправлен глюк ВГ93 с мультисекторным чтением (надеюсь, и записью). Ожидание адресного маркера и сверка требуемого сектора не поделили с собой счетчик индексных импульсов, который они используют для детекта ошибки - по даташиту 4 импульса в ходе выполнения = ошибка.
[+] Настрйки улы в закладке video. total - это вообще ширина-высота экрана; border - это расстояние слева/сверху, включая синхры; sync - длины самих синхросигналов (пока они активны, изображение не строится). Горизонтальные размеры в точках (2 точки = 1 такт проца), вертикальные - в строках.
[+] IFF1/IFF2 возвернуты и починены.
[~] дампы в дебугере урезаны до 8 байт в строке. сильно коробило меня окно в полэкрана.

на будущее - для интеграции с sjasm'ом в настройки добавлена вкладка tools, где можно указать путь к бинарнику (по умолчанию /usr/bin/sjasmplus). На данный момент бесполезная опция.
[!] обнаружена ещё одна хворь - зацикливание прерываний на себя. Пока что думаю, как продетектить, что PC вернулся из прерывания.

[:)] А, ну да. Теперь он X-PECCY ((с) rasmer)

rasmer
27.06.2009, 18:31
а где бинарнег-то?

SAM style
27.06.2009, 18:36
./zx : никуда не делся

rasmer
27.06.2009, 18:48
./zx : никуда не делсяТы сам-то в это веришь?

---------- Post added at 18:48 ---------- Previous post was at 18:46 ----------

а... всё... просто забыл за`chmod-ить...

CityAceE
30.06.2009, 05:54
Призываю (весь) лог изменений и последнюю версию программы держать в первом сообщении ветки! Так гораздо удобнее ориентироваться!

SAM style
30.06.2009, 09:31
Призываю (весь) лог изменений и последнюю версию программы держать в первом сообщении ветки! Так гораздо удобнее ориентироваться!Сделаю. Вот только соберу весь лог в большую кучу...

Aprisobal
30.06.2009, 14:18
SAM style, на VirtualBox с Ubuntu эмулятор не запустить? 3D-ускорение включено. В результате в консоли вижу "Segmentation fault". Скомпилировал исходный код - тот же результат.

SAM style
30.06.2009, 14:57
SAM style, на VirtualBox с Ubuntu эмулятор не запустить? 3D-ускорение включено. В результате в консоли вижу "Segmentation fault". Скомпилировал исходный код - тот же результат.На предыдущей странице скачай папку с настройками и распакуй в домашний каталог. Пока приходится делать это вручную при первом запуске.

Aprisobal
30.06.2009, 15:17
На предыдущей странице скачай папку с настройками и распакуй в домашний каталог. Пока приходится делать это вручную при первом запуске. Прошу прощения, не прочитал. Скачал, распаковал - все работает. Спасибо :)

SAM style
30.06.2009, 18:30
Всё убрано в первый пост. Хоткеи и лог изменений там же.

SAM style
01.07.2009, 13:10
Обновление. Добавился минимальный IDE с SJASM'ом в качестве компилятора (вызывается по F6). В проекте замутить раскраску текста проги. См.первый пост.

CityAceE
01.07.2009, 14:48
Никак не получается собрать эмулятор с ALSA - не могу понять, какой именно звуковой библиотеки не достаёт для сборки. Все библиотеки, которые на мой взгляд могли отвечать за это установил, но увы... Без ALSA собирается и запускается.



stanislav@ZX-Spectrum:~/1/zx$ make
g++ -Wl,-O1 -o zx main.o moc_classes.o qrc_zx.o -L/usr/lib -L/usr/X11R6/lib -lQtOpenGL -lQtGui -lQtCore -lGLU -lGL -lpthread
main.o: In function `EmulWindow::emulframe()':
main.cpp:(.text+0x28532): undefined reference to `snd_pcm_writei'
main.cpp:(.text+0x28552): undefined reference to `snd_pcm_recover'
main.o: In function `main':
main.cpp:(.text+0x39e3a): undefined reference to `snd_pcm_open'
main.cpp:(.text+0x39f38): undefined reference to `snd_pcm_set_params'
main.cpp:(.text+0x3a538): undefined reference to `snd_pcm_close'
main.cpp:(.text+0x3a83b): undefined reference to `snd_strerror'
main.cpp:(.text+0x3a95b): undefined reference to `snd_strerror'
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [zx] Ошибка 1

Aprisobal
01.07.2009, 15:26
Никак не получается собрать эмулятор с ALSA - не могу понять, какой именно звуковой библиотеки не достаёт для сборки. Все библиотеки, которые на мой взгляд могли отвечать за это установил, но увы... Без ALSA собирается и запускается. Установить libasound2 и libasound2-dev, а в Makefile после -lGL -lpthread добавить еще и -lasound

SAM style
01.07.2009, 15:45
Можно ведь не билдить - бинарник и так в архиве.
У меня строчка в MakeFile выглядит так

LIBS = $(SUBLIBS) -L/usr/lib -L/usr/X11R6/lib -lQtOpenGL -lQtGui -lQtCore -lGLU -lGL -lpthread -lasoundИ qmake, если он пользовался, должен быть от qt4 (qmake-qt4)

CityAceE
01.07.2009, 15:53
Установить libasound2 и libasound2-dev
Эти библиотеки и я так установил.


в Makefile после -lGL -lpthread добавить еще и -lasound
А вот это помогло! Спасибо! Собрался и заработал со звуком.


Можно ведь не билдить - бинарник и так в архиве.
У меня 64-х битная система.

CityAceE
02.07.2009, 05:05
Документацию на GTK в стиле QAssistant'a найдёте - переделаю виджеты (благо их там от силы штук 5-7, если не считать дебугера и зачатков сетапа). Но после того, как вживлю ВГ93 и AY.
Ну так как на счёт GTK? :)

SAM style
02.07.2009, 09:29
Ну так как на счёт GTK? :)Я пока только немного посмотрел доки по GTK. Понял, что будет сложнее, чем в QT. А чем QT не устраивает, кроме того, что гном не на нём построен? Просто ещё один фрэймворк в системе. Кушать не просит.

breeze
02.07.2009, 09:55
Я пока только немного посмотрел доки по GTK. Понял, что будет сложнее, чем в QT.

ничего там сложного нету, пишется на ура!


А чем QT не устраивает, кроме того, что гном не на нём построен?

я уже тебе говорил, повторюсь ещё раз, у меня в нем не работает клавиатура, хотя также PSI работает на ура. Так что либо ты опрашиваешь напрямую, либо не так обращаешься к QT.


Просто ещё один фрэймворк в системе. Кушать не просит.

вопрос кушает или нет, с современными объёмами хардов помоему уже второстепенен. :rolleyes:

CityAceE
02.07.2009, 09:55
Ну вот как раз тем и не устраивает, что Гном не на нём базируется :) Всегда приятнее пользоваться "родным" приложением.

SAM style
02.07.2009, 10:22
я уже тебе говорил, повторюсь ещё раз, у меня в нем не работает клавиатура, хотя также PSI работает на ура. Так что либо ты опрашиваешь напрямую, либо не так обращаешься к QT.
Напрямую не опрашиваю. Сейчас узнаем, в чем прблема - во мне или в QT.
emulwin.c, вторая функция с конца. допиши жирный qDebug, откомпиль и посмотри, что в консоль плюётся при нажатии кнопок:

void EmulWindow::keyPressEvent(QKeyEvent* event) {
if (event->isAutoRepeat()) return;
quint32 fullcode=event->nativeScanCode();
unsigned char code;
code=(fullcode<0x80)?fullcode:0;
qDebug()<<fullcode<<code;
switch (code) {

Если ничего - QT не реагирует на клаву (хреново). Если нули - я не так опрашиваю.

CityAceE
02.07.2009, 14:32
Запустил для пробы диски Enlight'96. Загрузчики обоих дисков выводят все надписи с артефактами. Во время декранча из динамиков слышны щелчки, а во время запуска демок вплоть до самой загрузки идёт чистый тон оставшийся от не заглушенного AY. Цифровая музыка не проигрывается. В деме Vibration в начале играет не музыка, а какие-то звуки.

SAM style
02.07.2009, 16:14
Запустил для пробы диски Enlight'96. Загрузчики обоих дисков выводят все надписи с артефактами. Во время декранча из динамиков слышны щелчки, а во время запуска демок вплоть до самой загрузки идёт чистый тон оставшийся от не заглушенного AY. Цифровая музыка не проигрывается. В деме Vibration в начале играет не музыка, а какие-то звуки.С музыкой тут не всё так гуд, как хочется. Аушник затыкается на огибающих с низкими нотами, шум вообще почти не слышен. С артефактами будем разбираться. Цифровую музыку не через что выводить - разве что пикалкой пикать. Ковоксов и подобных ещё нет.

CityAceE
02.07.2009, 16:22
Цифровую музыку не через что выводить - разве что пикалкой пикать. Ковоксов и подобных ещё нет.
На этом диске цифровая музыка гонится через AY. У меня на Скорпе без всяких ковоксов играла, только нужно было одну дорожку перерезать.

rasmer
02.07.2009, 20:06
а на пернтагонах и без перерезаний всё работало.... Как я им завидовал... пока знакомый не перепилил дорожку...

SAM style
03.07.2009, 09:38
Strange news, everyone!
Артефакты появились с версии от 2009.06.22 (где я исправил регистр R). В версии от 2009.06.18 артефактов нет. Волны меню на диске с музыкой энлайта всё равно косят, но fuck'т есть fuck'т.

Kurles
03.07.2009, 10:49
На этом диске цифровая музыка гонится через AY. У меня на Скорпе без всяких ковоксов играла, только нужно было одну дорожку перерезать.:) Причем на некоторых "пиратских" скорпионах она уже видимо была перепилена, так так музыка играла. Мне не повезло, но я как-то сумел догадаться, абсолютно не смысля в схемотехнике но представляя архетиктуру, какую дорогу надо перерезать, что бы упростить дешифрацию щас уже и не помню какого порта :)

SAM style
03.07.2009, 11:33
:) Причем на некоторых "пиратских" скорпионах она уже видимо была перепилена, так так музыка играла. Мне не повезло, но я как-то сумел догадаться, абсолютно не смысля в схемотехнике но представляя архетиктуру, какую дорогу надо перерезать, что бы упростить дешифрацию щас уже и не помню какого порта :)
А вот теперь надо сказать мне, как после перерезания шла дешифрация. Потому как для скорпиона дешифрация идёт строго по схеме зелёного, а для пентагона она вообще не особо полная.

Kurles
03.07.2009, 12:40
А вот теперь надо сказать мне, как после перерезания шла дешифрация. Потому как для скорпиона дешифрация идёт строго по схеме зелёного, а для пентагона она вообще не особо полная.Если по памяти, то из дешифрации убирали сигнал А12, и все работало. Могу и ошибаться.

SAM style
03.07.2009, 14:43
Всё равно не понимаю... В схеме зелёного A12 не участвует. Вот конец лога выводов в порты первой дигитальной музы 96-го энлайта. Дешифрация - 1:1 с схемой. Вопрос - она правильная? Если правильная, проблема в формировании звука. Если нет - в дешифрации.

Выбор FD-порта:
xx1xxx01

Дещифрация FD-портов:
00xxxxxx FD = 1FFD
01xxxxxx FD = 7FFD
10xxxxxx FD = BFFD (49149)
11xxxxxx FD = FFFD (65533)

Лог: реальный порт (дешифранутый порт) : выводимое значение
65533 ( 65533 ): 8
22269 ( 32765 ): 86
44541 ( 49149 ): 173
65533 ( 65533 ): 9
20733 ( 32765 ): 80
62461 ( 65533 ): 243
65533 ( 65533 ): 10
20733 ( 32765 ): 80
62461 ( 65533 ): 243
65533 ( 65533 ): 8
22269 ( 32765 ): 86
44797 ( 49149 ): 174
65533 ( 65533 ): 9
20733 ( 32765 ): 80
62461 ( 65533 ): 243
65533 ( 65533 ): 10
20733 ( 32765 ): 80
62461 ( 65533 ): 243
65533 ( 65533 ): 8
22269 ( 32765 ): 86
45053 ( 49149 ): 175
65533 ( 65533 ): 9
20733 ( 32765 ): 80
62461 ( 65533 ): 243
65533 ( 65533 ): 10

added
Первый пост обновлён. Почикана криворукость за последние полторы недели. Больших артефактов на дисках с энлайта уже нет. Есть маленькие - плавающая менюшка на диске с музыкой неправильно плавает.

Kurles
03.07.2009, 17:26
Всё равно не понимаю... В схеме зелёного A12 не участвует. Вот конец лога выводов в порты первой дигитальной музы 96-го энлайта. Дешифрация - 1:1 с схемой. Вопрос - она правильная? Если правильная, проблема в формировании звука. Если нет - в дешифрации.

Выбор FD-порта:
xx1xxx01

Дещифрация FD-портов:
00xxxxxx FD = 1FFD
01xxxxxx FD = 7FFD
10xxxxxx FD = BFFD (49149)
11xxxxxx FD = FFFD (65533)

Вроде все правильно. Может в зелёном скорпионе А12 не участвовал в дешифрации, а в желтом - участвовал. Просто точно знаю, что на некоторых "пиратских" скорпах надо было резать дорожку, а на некоторых - нет, у нас в городе практически кроме скорпионов спектрум-совместимых машин с => 128kb памяти и дисководом не было, мультиколор в первый раз увидел на эмуляторе :)

SAM style
03.07.2009, 18:41
Вроде все правильно. Может в зелёном скорпионе А12 не участвовал в дешифрации, а в желтом - участвовал. Просто точно знаю, что на некоторых "пиратских" скорпах надо было резать дорожку, а на некоторых - нет, у нас в городе практически кроме скорпионов спектрум-совместимых машин с => 128kb памяти и дисководом не было, мультиколор в первый раз увидел на эмуляторе :)Да не, скорпион у меня фирменный... был... с книжечкой и печатью фирмы. Если дешифрация в эмуле верная, значит пора вплотную браться за формирование звука.

CityAceE
04.07.2009, 04:51
Всё равно не понимаю... В схеме зелёного A12 не участвует.
На сколько я помню на зелёном Скорпионе цифровая музыка через AY работала по умолчанию, без всяких перерезаний дорожек. Дорабатывать требовалось только жёлтые платы.

breeze
08.07.2009, 10:25
Сейчас узнаем, в чем прблема - во мне или в QT.

ну вот вставил как ты говорил, жму клавиши курсоров, нихрена не происходит на экране :mad:


# ./zx
32.3174
Open audio device /dev/dsp
define machines
Ticks@byte = 162
Bufsize = 882
111 111
116 116
111 111
113 113
114 114
116 116
113 113
111 111
Close audio device


я так пологаю, что не стоит кодами опрашивать! возьми лучше через константы!

SAM style
08.07.2009, 13:03
ну вот вставил как ты говорил, жму клавиши курсоров, нихрена не происходит на экране :mad:
я так пологаю, что не стоит кодами опрашивать! возьми лучше через константы!
В чём дело - понял. Не работают у тебя стрелки/pgup/pgdown/home/end/и подобное. Shift+6,7 ведь действует?
У меня каждому коду клавиши (отбрасывая раскладку и модификаторы) сопоставлено, на какой полуряд и какой бит она действует. Код не занесен в таблицу, а значит он и не действует. В следующем обновлении будет, сам дома с таким столкнулся, тогда как на работе всё ОК.

SAM style
10.07.2009, 17:59
Пятничный упдатес внёс изменения в первый пост.

rasmer
10.07.2009, 18:52
До сих пор косяк регистровыми сдвигами - заметно на отцентровке строк в первой части сатисфакшена (самая первая строка - WELCOME, и где в одну букву на каждую строку - SATISFACTION)

SAM style
10.07.2009, 23:02
До сих пор косяк регистровыми сдвигами - заметно на отцентровке строк в первой части сатисфакшена (самая первая строка - WELCOME, и где в одну букву на каждую строку - SATISFACTION)Починил, в следующем обновлении будет.
А теперь рассказывайте мне, как при таком раскладе может быть звук:
регистры музпроца:
r0..6=0 (по доке нулевые ноты = нет звука вообще)
r7 = 255 (выводы звука и шума вовсюда запрещены)
r8,r9,r10 - какие-то громкости, но без использования огибающей
r11..15 = 0
r14 = 255
r15 = 0
Я потрассировал плеер на дигитальной музе Enlight'96 - меняются ТОЛЬКО громкости каналов. Откуда звук идёт и чего я не допираю?

molodcov_alex
10.07.2009, 23:06
r0..6=0 (по доке нулевые ноты = нет звука вообще)
В анриле например 0 это тоже что и 1, что-то вроде того:
if(++count >= reg){ делаем то что следуюет }
Это относится и к тонам и к шумам (насчет огибающей не помню)

SAM style
10.07.2009, 23:39
Нота 1 - это где-то 100КГц. Неслышымый уху писк. Но даже если так, регистр 7 запрещает вывод тона и шума - откуда звук появляется при незаюзаной огибающей?

breeze
11.07.2009, 00:00
Гм... запустил новую версию. Да, клава работает, но вот звук... как бы это помягче сказать... ну вообщем нет у меня /dev/dsp зато есть alsa и intel_hda ;) может сделаешь поддержку ? да заодно и в конфиг вынесешь ?

SAM style
11.07.2009, 01:02
ну вообщем нет у меня /dev/dsp зато есть alsa и intel_hda ;) может сделаешь поддержку ? да заодно и в конфиг вынесешь ?
В main.cpp:
#define ALSA 1
В настройки обязательно внесу

breeze
11.07.2009, 01:19
В main.cpp:
#define ALSA 1




main.o: In function `main':
main.cpp:(.text+0x3bf47): undefined reference to `snd_pcm_open'
main.cpp:(.text+0x3c044): undefined reference to `snd_pcm_set_params'
main.cpp:(.text+0x3c692): undefined reference to `snd_pcm_close'
main.cpp:(.text+0x3c96c): undefined reference to `snd_strerror'
main.cpp:(.text+0x3ca74): undefined reference to `snd_strerror'
main.o: In function `EmulWindow::emulframe()':
main.cpp:(.text+0x3ff14): undefined reference to `snd_pcm_writei'
main.cpp:(.text+0x3ff3a): undefined reference to `snd_pcm_recover'
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [zx] Ошибка 1


В настройки обязательно внесугут

---------- Post added at 00:16 ---------- Previous post was at 00:09 ----------

гы ) запустил добавил в Makefile -lasound

LFLAGS = -Wl,-O1 -lasound

---------- Post added at 00:19 ---------- Previous post was at 00:16 ----------

ээээ....

это так и должно быть ? убираешь мыша из области видимости окна и пропадает звук ? O_O

в логах пишет:

./zx
32.3174
libasound: open audio device...
OK
libasound: set audio paramz...
OK
define machines
Ticks@byte = 162
Bufsize = 882
ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occured
ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occured
мыша возвращаешь - опять булькает

SAM style
11.07.2009, 01:23
Звук вырубается в неактивном окне. У тебя, случайно, фокусировка не наведением мыши на окно сделана? Если так, то это в emulwin.c (убрать isActiveWindow()):

if (soundenabled && isActiveWindow() && (sndbufpos>1)) {
А это
ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occuredоно время от времени будет выплёвывать, потрескивая в эти моменты. Зависит от того, успевает старый буфер проиграться, когда уже готов новый, или нет.

breeze
11.07.2009, 01:53
Звук вырубается в неактивном окне.

эээ... это можно сделать настраиваемым ? :rolleyes:


У тебя, случайно, фокусировка не наведением мыши на окно сделана?

да нет, глюк потом сам пропал...


Зависит от того, успевает старый буфер проиграться, когда уже готов новый, или нет.

мдя...

ты в Make добавь опцию!

rasmer
11.07.2009, 02:00
эээ... это можно сделать настраиваемым ? :rolleyes:
Плюсадин!

psb
11.07.2009, 08:03
меняются ТОЛЬКО громкости каналов. Откуда звук идёт и чего я не допираю?
а мне интересно, как ты эмулил AY не понимая как он работает?
штука в том, что если в микшере все выключено, то на звуковой выход идет не 0, а значение с ЦАПа громкости. потому и играет цифровой звук. а при генерации тона или шума напряжение меняется между заданной громкостью и 0.

SAM style
11.07.2009, 11:19
а мне интересно, как ты эмулил AY не понимая как он работает?2 даташита на AY, ни в одном про это ничего не сказано. Только в одном - график выходного сигнала для огибающей при выключеных тоне и шуме.

---------- Post added at 11:19 ---------- Previous post was at 11:12 ----------

Однако, цифра зазвучала. Благодарствую. До этого был сделан вывод с ЦАП-а, но только для огибающей.

breeze
11.07.2009, 12:30
что-то уж очень долго висит подобная картиника в BV, пробовал и включать и отключать "Turbo disk speed". через секуд 10-15 сгорем пополам прочитало каталог, но выбрав любой файл получаем желтый бордюр и привет...

rasmer
11.07.2009, 12:38
А оно так пока и будет, ибо тырдосьэмулется несовсем "понастоящему" - похзоду движок как тормозит так и запускается моментально....

SAM style
11.07.2009, 13:46
А оно так пока и будет, ибо тырдосьэмулется несовсем "понастоящему" - похзоду движок как тормозит так и запускается моментально....Положим, не тырдось а ВГ93... Давно хочу основательно его перелопатить. То, что там сейчас мне ни разу не нравится.
Между делом, субботний упдатес внёс изменения в первый пост. Вылечен звук, добавлены его настройки и обработка входящих параметров при запуске (например, "./zx /some/path/snapshot.sna" сразу запустит снапшот).

SAM style
18.07.2009, 15:41
Пришёл великий субботний упдатес.
Я переделал весь ВГ93. Заработали RDS(форматил диски, проверял, читал дорожки) и BV даже на турбоскорости. Подробности в первом посте.

PS: потому как оно написано заново, где-то могут выскакивать глюки. На всём потестить возможности нет. Если будут - пишите, где.

^m00h^
29.11.2009, 13:23
Дайте линк на последнюю версию.

SAM style
29.11.2009, 15:58
В понедельник после обеда выложу то, что есть на данный момент - переделан ВГ93 (в BV не работает только смена дискокрута на обычной скорости) и выкусан дебугер (переделывается).

SAM style
30.11.2009, 13:33
Затянувшийся осенний упдатес. Смотрим первый пост.

SAM style
06.12.2009, 14:39
Update, см. первый пост.
Насчет положения user-menu. Пробовал привязать его положение к курсору, но QT следит за координатами только когда последний в пределах окна, так что получается не совсем то, что задумывалось.

SAM style
08.12.2009, 15:14
Update
Исправлена пара огрехов прошлого среза и прилеплена кемпстон-мыша

[bETA]mEN
08.12.2009, 15:27
Хотя... Под винды он собрался, но запускаться отказался.
с тех пор что-то изменилось?

SAM style
08.12.2009, 16:24
mEN;238982']с тех пор что-то изменилось?Самое слабое место - звук. Сейчас он привязан к OSS/ALSA, как под виндой выводить звук, я понятия не имею. Попробую на неделе пособирать. Не уверен, что соберётся, потому как бардак у меня в исходниках ещё тот.
ЗЫ: и как в винде поведёт себя getenv("HOME")?

Vitamin
08.12.2009, 17:04
ЗЫ: и как в винде поведёт себя getenv("HOME")?
Пусто вернет. В винде обычно юзаются переменные HOMEPATH, USERPROFILE. Для настроек программ юзается APPDATA

SAM style
09.12.2009, 17:13
Блин, с каких пор в винде std::cout<<, printf и qDebug ВООБЩЕ ничего в консоль не выводят?
Экзешник собрался, но запускаться снова отказывается. Два эксепшна я отловил с помощью wine (дожили...), от чего третий - без понятия. Wine говорит это:

wine: Unhandled page fault on read access to 0x00000004 at address 0x4289f4 (thread 0009), starting debugger...
Unhandled exception: page fault on read access to 0x00000004 in 32-bit code (0x004289f4).
Кроме виндозовского "программа завершилась с ошибкой" и её "отладочной" инфы больше ничего выудить не могу.

Vitamin
09.12.2009, 17:56
Блин, с каких пор в винде std::cout<<, printf и qDebug ВООБЩЕ ничего в консоль не выводят?
Если приложение не консольное, то ничего и не увидишь- после запуска родительский процесс не ждет завершения дочернего, потому и потоки не перехватываются. Надо собирать с поддержкой консоли. Тогда будет счастье.

SAM style
09.12.2009, 19:35
Что я могу сказать - он собрался, плюётся в косоль, запустился и... отказался реагировать на клаву. То ли дело именно в QT4.6 (4.5 mingw с gcc4.4 не признал), то ли вообще в QT под винду, но коды клавиш там другие.
А да, и он немой. :)
Если есть желающие подсобить с клавой и звуком - не откажусь.

added
Минус клава. Со звуком в винде пока непонятки. Юзаю winmm.dll (waveout). Под XP в виртуалбоксе тишина, под семёркой - треск, сквозь который пробивается звук.

mastermind
13.12.2009, 01:52
Переделал вывод картинки через opengl-текстуру (на основе кода из dosbox).
Патч: http://pastebin.com/f3e2cbc46 или см. аттач.

Без этого у меня эмулятор тормозит по полной программе, проц на 100% загружен и тормоза дичайшие (карта mobility radeon hd, 3d-драйвер - экспериментальный опенсорсный - пакет "mesa-dri-drivers-experimental" в Fedora 12). С этим патчем - загрузка CPU около 25%.

SAM style
13.12.2009, 02:26
На NVidia что с патчем, что без - загрузка примерно одинаковая. Но если на ATI это спасает, будет так, если решится одна проблемка - крайне нежелательно иконку паузы растягивать вместе со всей текстурой. В полноэкранном режиме (будет в ближайшем срезе) выглядит вообще ужасно.
И с альфа-каналом я поспешил - GL работает с RGBA, тогда как QT с ARGB, сохранения скриншотов без лишнего гемороя не получится.

mastermind
13.12.2009, 03:28
крайне нежелательно иконку паузы растягивать вместе со всей текстурой. В полноэкранном режиме (будет в ближайшем срезе) выглядит вообще ужасно.
Да, это я на скорую руку сделал, исправлю.

И с альфа-каналом я поспешил - GL работает с RGBA, тогда как QT с ARGB, сохранения скриншотов без лишнего гемороя не получится.
Не очень понял смысл вышенаписанного, но погуглив немного, вот так вроде получилось:

diff --git a/emulwin.c b/emulwin.c
index 6368e13..896e315 100644
--- a/emulwin.c
+++ b/emulwin.c
@@ -38,6 +38,8 @@ void EmulWindow::resizeGL(int width, int height) {
swapBuffers();
glClear(GL_COLOR_BUFFER_BIT);
glShadeModel(GL_FLAT);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);

http://img704.imageshack_.us/img704/9135/xpeccyalphablend.png

SAM style
13.12.2009, 13:15
Не очень понял смысл вышенаписанного...В частях работы с GL формат везде указан как GL_RGBA, т.е в порядке R,G,B,A. Чтобы сделать скриншот, я средствами QT делаю из тех же самых данных картинку и сохраняю её в заданном формате. Проблема в том, что QT формат RGBA при этом не понимает - ему нужен ARGB.
Пока что убрал альфа-канал вообще, RGB принимает и GL, и QT.

Кстати, update в первом посте.

mastermind
13.12.2009, 22:35
Кстати, у меня эмуль все равно сильно тормозит (хотя теперь он по крайней мере стал хоть как-то юзабельным), дело уже не в отрисовке, emulframe() (без paintmain()) работает существенно больше 20 мс :( (25-70 где-то), пытаюсь разобраться чего там можно соптимизировать. Процессор Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz (ноутбучный), система 64-битная.
Больше всего, похоже, кушает эмуляция BDI:
http://img15.imageshack_.us/img15/5488/xpeccycallgrind.png

SAM style
14.12.2009, 00:11
Судя по процентам, сам tick() жрёт добрую половину. Там отрисовывается картинка - эмулится ход луча. Процедурина вызывается ок.71680 раз за прерывание, и прорисовывает ок 143000 точек в памяти (а потом прорисованое успешно натягивается на окно), попутно "тикая" другими устройствами - ВГ93, мофоном (запусти ещё мофон на play - тоже скушает неслабо), звукогенератором...[COLOR="Silver"]

added
Если убрать вычисления цвета точки экрана и оставить только бордюр, потребление на моём домашнем компе падает с 28-30% до 16-17%.

added
Mastermind, попробуй версию от 14 декабря - как пойдёт? У меня на ноут ATI-шные дрова не легли, проверить не могу.

SAM style
30.12.2009, 00:40
Вымученный новогодний упдатес. Переписан весь Z80, кое-что даже выправилось, а кое-что - наоборот

^m00h^
05.01.2010, 01:56
Ubuntu 9.10, при запуске выдает:

odept@odept-desktop:~/xpeccy$ ./xpeccy
./xpeccy: error while loading shared libraries: libQtOpenGL.so.4: cannot open shared object file: No such file or directory

SAM style
05.01.2010, 02:03
Потому что от Qt зависит. Ставь libqt4-core, libqt4-gui, libqt4-opengl и libasound2 (если вдруг нет), а потом отпишись о тормозах...

^m00h^
05.01.2010, 20:55
Проинсталил все вышеперечисленное. Тоже самое.

SAM style
05.01.2010, 21:37
Сейчас проверил - libQtOpenGL.so.4 (лежит тут - /usr/lib/libQtOpenGL.so.4.5.3) содержится в libqt4-opengl. У меня Debian, но, думаю, с Ubuntu не очень большая разница. Либо в новой убунте опять кучу всего сломали...

^m00h^
05.01.2010, 22:20
У меня /usr/lib/libQtOpenGL.so.4.5.3 вообще нету, только такие:

/usr/lib/libQtOpenGL.so.4
/usr/lib/libQtOpenGL.so.4.5
/usr/lib/libQtOpenGL.so.4.5.2

SAM style
05.01.2010, 22:41
libQtOpenGL.so.4 есть, пусть и чуть старее. Значит, должно подхватываться. Странно.

^m00h^
05.01.2010, 22:47
У меня кстати 64 bit, может в этом дело ?

SAM style
05.01.2010, 22:53
Кстати да... Я ж под 32-битной сижу и компилю. Всё ясно. Пересобери.

SAM style
11.01.2010, 12:45
Опосляновогодний упдатес. Главный прорыв - отказ от OpenGL в пользу SDL. Смотрим первый пост.

SAM style
15.01.2010, 19:47
Маленький упдатес. Вернуто всё кроме фуллскрина.

Sinus
16.01.2010, 00:35
а в чём проблема с фуллскрином то? ты ж теперь под SDL вроде пишешь.

SAM style
16.01.2010, 10:40
Просто пока не осилил. Только влез в SDL, раньше ничего на нём не делал. Но насколько я понял, он не растягивает картинку до размера экрана, а пробует менять разрешение экрана до размера картинки:


http://www.libsdl.org/cgi/docwiki.cgi/SDL_SetVideoMode
SDL will attempt to use a fullscreen mode.
If a hardware resolution change is not possible (for whatever reason),
the next higher resolution will be used and the display window
centered on a black background.

Sinus
16.01.2010, 11:54
Но насколько я понял, он не растягивает картинку до размера экрана, а
пробует менять разрешение экрана до размера картинки:

ну собственно да. это и правильно.
а растягивать картинку это 1) выглядит голимо 2) без аппаратного ускорения тупит сильно

есть только один момент - в SDL есть функция перехода в фуллскрин / из него (SDL_WM_ToggleFullscreen). так вот, она работает только под X11 и не работает под виндой. так что делай SDL_FreeSurface и пересоздавай сурфейс с помощью SDL_SetVideoMode.

SAM style
16.01.2010, 16:38
Опробовал. Результаты пока ужасные.
1. Картинка ужасно размыта (да, LCD)
2. Один раз на вызов диалога установок отреагировал вылетом обратно в оконный режим, но потом мышь за пределы окна не отпускал (видимо, думая что он ещё полноэкранный)
3. Второй раз не вылетал никуда - остался в полноэкранном, но ничего не сделал. Конечно, моё упущение, что он кроме как закрытием окна прибивается только killall'ом, зато после прибития его таким способом разрешение не поменялось. Юзайте кеды в 320x240 - потеха та ещё :)

Sinus
16.01.2010, 17:05
1. Картинка ужасно размыта (да, LCD)

делай у себя scale2x, scale3x и scale4x - чтоб более "квадратно" и менее размыто было.



2. Один раз на вызов диалога установок отреагировал вылетом обратно в оконный режим, но потом мышь за пределы окна не отпускал (видимо, думая что он ещё полноэкранный)

ну это что-то у тебя в коде походу.


3. Второй раз не вылетал никуда - остался в полноэкранном, но ничего не сделал. Конечно, моё упущение, что он кроме как закрытием окна прибивается только killall'ом, зато после прибития его таким способом разрешение не поменялось.


надо перед выходом восстанавливать оконный режим.

Q-Master
17.01.2010, 16:13
Собрал под линухом на PowerPC BigEndian машине. Выяснилось 2 проблемы:
1) При компиляции пишет вот это:
src/debuger.c: In member function ‘DasmRow DebugWin::getdisasm()’:
src/debuger.c:214: warning: comparison is always false due to limited range of data type
src/debuger.c:220: warning: comparison is always false due to limited range of data type

2) показывает в результате сборки то что в аттаче и хрюкает динамиком вот с такими надписями в консоль:
......
4:256
4:256
4:256
4:256
4:256
4:256
4:256
ALSA lib pcm.c:7234:(snd_pcm_recover) underrun occured
4:256
4:256
......

SAM style
17.01.2010, 16:37
BigEndian... Запишем, надо будет вставить #if/else/endif в нескольких местах.
В debuger.c в тех местах char сравнивается с 0. Я опять что-то не то сделал?
Хрюкает - значит, не укладывается вовремя. Он слишком прожорливый. С переменным успехом борюсь с этой фигнёй.
4:256 - это я забыл убрать... первое число - нажатый модификатор SDL, второй - KMOD_LALT

Q-Master
18.01.2010, 09:33
BigEndian... Запишем, надо будет вставить #if/else/endif в нескольких местах.
В debuger.c в тех местах char сравнивается с 0. Я опять что-то не то сделал?
Хрюкает - значит, не укладывается вовремя. Он слишком прожорливый. С переменным успехом борюсь с этой фигнёй.
4:256 - это я забыл убрать... первое число - нажатый модификатор SDL, второй - KMOD_LALT
Ты проверяешь меньше-ли нуля чар. Но поскольку в некоторых компиляторах как опция стоит что чар и ансигнед чар это одно и то-же, то мы получаем что это условие никогда не сбудется. Лучше его в этом месте привести к инту, например так: int btt = (int)bt; ну и btt потом сравнивать с нулем уже.
Самое-то смешное, что я клавиатуру не трогал.

SAM style
18.01.2010, 11:10
Ещё интереснее, что в SDL_keysym.h маски 4 на модификаторы тоже нет.
Если ничего не забыл, Little/Big Endian имеет значение только в структуре Z80 (vars.h) в записях вида:

union {ushort bc; struct {uchar c,b;};};
И второе - у меня много где char юзается именно как signed. Придётся ещё кучу всего переделывать...

Vitamin
18.01.2010, 11:34
И второе - у меня много где char юзается именно как signed. Придётся ещё кучу всего переделывать...
Для чего? Для экономии памяти и скорости? Так int работает по любому быстрее и он гарантированно знаковый.

SAM style
18.01.2010, 12:41
Наверное, по привычке экономлю.

Q-Master
18.01.2010, 18:27
сигнед чар есть зло. а экономии в реальности не выходит, ибо цомпилер добавляет сам до 32 бит. 8)

SAM style
27.01.2010, 18:47
Упдатес, однако...
Основное, чем занимался - сортировал исходники. Изменениям подверглись окна настроек, дебугера и разработки.

mungo
28.01.2010, 14:19
Чисто юзерское пожелание. Эмулей много, может есть смысл скринов пару выложить, чтоб те, кто еще не пробовал, знал бы хотя бы, как это выглядит?

SAM style
28.01.2010, 14:37
OK, выложу. Только, кажется мне, под линукс эмулей чуть менее чем два - фузе и мой с остальными (скопом потянут на целый по функциональности).

PS: vBulettin делает из картинок плохорассматриваемую кашу. Почто ограничение на PNG 19.5 Кб?

mungo
28.01.2010, 15:17
Еще есть fbzx и spectemu. Первый без тыр-доси, второй - вообще непонятный.

Sinus
28.01.2010, 15:24
под линукс эмулей чуть менее чем два - фузе и мой с остальными
ээ.. ну ладно..

SAM style
28.01.2010, 17:21
ээ.. ну ладно..Извиняюсь, забыл совсем... тогда чуть менее чем три :) Но у тебя же написано, что он сугубо пентагон эмулирует.

Sinus
30.01.2010, 03:45
как говорит алексеенко, пентагон - это спектрум. а всякие там +2, +3 - это эмуляторы.
бред, конечно :) но для ex-USSR это действительно так

Dart Alver
31.01.2010, 23:42
Скажите куда кидать прогу эмуля или без разницы. У меня, откуда ни запускал, консоль выдает "ошибка сегментирования" (Брал бинарник из первого поста, папку .samstyle распаковал в домашнюю директорию, qt в наличие, линь - mopslinux 6.0 , ) :confused:
Вот и еще, чем собирается исходник ? А то собрать тоже не вышло :(

SAM style
01.02.2010, 01:26
Разве что ALSA нет. Тогда в установках надо поставить OSS или, на худой конец, NULL. Невозможность открыть звуковой вывод пока что игнорируется, отсюда и фигня.

Dart Alver
03.02.2010, 22:18
Разве что ALSA нет. Тогда в установках надо поставить OSS или, на худой конец, NULL. Невозможность открыть звуковой вывод пока что игнорируется, отсюда и фигня.
ALSA есть . Впрочем на OSS и NULL та же фигня... :(

SAM style
03.02.2010, 22:47
Если есть возможность собрать (если нет - пиши, как ругается, будем собирать) так:

make clean
qmake -project CONFIG+=debug
makeто неплохо было бы пройтись дебугером (gdb например) и высветить, на чём валится.
Раньше сегфолты были на незаданной машине или ромсете, сейчас могли быть на неоткрытом аудиовыводе, но первое я поборол изрыганием ошибки в консоль, а второе отметается (на NULL уж точно должно работать).

Dart Alver
04.02.2010, 00:02
Вауууу....... мне похоже надо с qt разбираться, она у меня в /opt/qt4 и настройки хватает под другую фичу ))))))))))))

SAM style
04.02.2010, 15:23
Маленький упдатес.

destruct0r
05.02.2010, 18:10
SAM style, а соберёте под win32?

SAM style
05.02.2010, 19:29
Соберу, когда решу несколько вопросов:

* под иксами я встраиваю SDL-окошко в QX11EmbedContainer, по докам под Windows такого в Qt нет. Можно показывать собственно окно SDL, но возникает вопрос о модальности остальных окон относительно него.
* и пара маленьких вопросов - другая таблица кодов клавиш и с WaveOut я пока не очень разбирался.

Вообще, под винду собирались декабрьские версии (на OpenGL), но не работала клава и трещал звук.

phant0m
06.02.2010, 22:38
Звук потрескивает. Можно ли это исправить? (Ubuntu 9.10)

SAM style
07.02.2010, 00:38
С oss не потрескивает (зато запаздывает). Выдай параметры проца, видео и часто ли трещит.
ЗЫ: И не ноут ли? На ноутах ситуёвина вообще тяжёлая.

phant0m
07.02.2010, 08:25
SAM style, Трещит часто и тормозит. А вообще и в других эмуляторах трещит.

amd62 x2 4400+
GeForce 8800GTS
Не ноут.

SAM style
07.02.2010, 09:48
Полгода назад - на Celeron 1.7MHz и GF4MX потрескивало очень редко, в основном при перетаскивании окна. Так что ищи проблему у себя. В Убунте 9.10, поговаривают, со звуком не всё ладно было.

Vitamin
07.02.2010, 10:14
Полгода назад - на Celeron 1.7MHz и GF4MX потрескивало очень редко, в основном при перетаскивании окна. Так что ищи проблему у себя. В Убунте 9.10, поговаривают, со звуком не всё ладно было.
У тебя вывод происходит одним куском.


void oss_play() {
if (snd->audio!=0) write(snd->audio, &snd->sndbuf[0], snd->sbptr - &snd->sndbuf[0]);
}


Система совершенно не гарантирует, что весь его за раз примет. Надо писать до тех пор, пока у тебя не закончится буфер:


std::size_t toWrite(buf.size() * sizeof(buf.front()));
const uint8_t* data(safe_ptr_cast<const uint8_t*>(&buf[0]));
while (toWrite)
{
int res(::write(DevHandle.Get(), data, toWrite * sizeof(*data)));
DevHandle.CheckResult(res >= 0, THIS_LINE);
toWrite -= res;
data += res;
}

SAM style
08.02.2010, 18:12
Упдатес. Pentagon1024SL2.x Подозреваю, что неполноценный, но метр памяти есть, рамдиск определяется и 16-колор работает.

phant0m
08.02.2010, 20:30
С апдейтом у меня совсем звук пропал, а в глюке почти всегда при коротком нажатии ВВЕРХ или ВНИЗ зеленая полоска сама начинает бегать по кругу.

SAM style
08.02.2010, 21:02
Если есть возможность пересобрать, то на sound.cpp:

56c56,59
< outsys->open();
---
> if (!outsys->open()) {
> printf("Can't open sound system. Reset to NULL\n");
> outsys = &outsyslist[0];
> }

Если будет выброс в консоль и вывод в NULL - эмуль не может открыть устройство.
А с клавой... Если переключиться на другое окно, потом на эмуль - фигня останется?
PS: Сколько ни стучал по клаве как можно короче - в глюке полоска передвигается не боле чем на 1 шаг. Так что пока нипанятна...

phant0m
08.02.2010, 21:36
SAM style, переключение окон помогает.

Пересобрать пока не могу (неумею)

Переключил на OSS - стало как раньше, звук появился со щелчками и тормозами

SAM style
08.02.2010, 22:01
Значит, либо SDL не генерирует эвент "отпускание клавиши", либо эмуль на этот эвент не реагирует. В следующем срезе сделаю поболе дебажного вывода, будем диагностировать.

---------- Post added at 22:54 ---------- Previous post was at 22:42 ----------

Можешь посмотреть, сколько эмуль проца жрёт?

---------- Post added at 23:01 ---------- Previous post was at 22:54 ----------

И, кстати, стоп... Проц у тебя 64-битный, а сама ось какая?

phant0m
08.02.2010, 22:26
SAM style, проц amd64 x2, но ось 32 бит.

Посмотрел загрузку проца - неслабо хавает, зачастую свыше 50, порой свыше 60%.

SAM style
08.02.2010, 22:54
Трещит из-за чрезмерной жручести. Попробую переделать, чтобы треска не было, но появится заикание.
Хотя, странно это...
Дома Core2Duo E7300 2.66, Nvidia GT240 (ранее был 9500GT), Debian testing 32bit - жрет максимум 25% (в спокойном состоянии 18%)
На работе Pentium4 2.8, видео встроеное Intel (точно не помню), ось такая же - не более 32%

SAM style
11.02.2010, 17:01
Небольшой упдатес. В ходе работы мозгового вещества выяснилось, что много кушает формирование звука (заполнение буфера). На работе при отключеном звуке прожорливость падает с 35 до 20% проца. Буду работать над этим.

phant0m
11.02.2010, 19:20
SAM style, не могу запустить после апдейта: "Can't find current machine"

SAM style
11.02.2010, 21:28
прочитай первый пост (WARININGS) и отредактируй ~/.samstyle/samulator/samulator.conf на предмет current = и memory = в секции [MACHINE].

Vitamin
11.02.2010, 21:44
Небольшой упдатес. В ходе работы мозгового вещества выяснилось, что много кушает формирование звука (заполнение буфера). На работе при отключеном звуке прожорливость падает с 35 до 20% проца. Буду работать над этим.
Прогони под профилировщиком. Благо в gcc с этим проблем вообще никаких. А еще под valgrind тоже. Судя по исходам, достаточно много потенциальных и фактических утечек памяти.

SAM style
11.02.2010, 23:34
gprof мне рассказал то, что я и так знаю:

% cumulative self self total
time seconds seconds calls ms/call ms/call name
23.84 2.42 2.42 99348523 0.00 0.00 Video::tick()
23.45 4.80 2.38 99348523 0.00 0.00 AYProc::tick()
14.38 6.26 1.46 99348523 0.00 0.00 Floppy::tick()
11.43 7.42 1.16 99348523 0.00 0.00 VG93::tick()
8.67 8.30 0.88 12685462 0.00 0.00 Z80::ticks(unsigned char)
6.60 8.97 0.67 99348523 0.00 0.00 Sound::tick()
5.02 9.48 0.51 9142806 0.00 0.00 Z80::exec()
1.87 9.67 0.19 49674261 0.00 0.00 Tape::tick()
1.67 9.84 0.17 10975345 0.00 0.00 Z80::read(unsigned short, unsigned char)
valgrind много ругался, послал меня куда подальше :(, но утечку показал небольшую.

Vitamin
12.02.2010, 00:14
gprof мне рассказал то, что я и так знаю:
У меня другое получилось:


time seconds seconds calls ms/call ms/call name
19.40 1.45 1.45 10932965 0.00 0.00 Z80::ticks(unsigned char)
18.66 2.84 1.39 82001923 0.00 0.00 Video::tick()
13.83 3.87 1.03 82001923 0.00 0.00 AYProc::tick()
12.55 4.80 0.94 82001923 0.00 0.00 VG93::tick()
9.80 5.53 0.73 82001923 0.00 0.00 Sound::tick()
4.70 5.88 0.35 6499121 0.00 0.00 Z80::exec()
4.30 6.20 0.32 82001923 0.00 0.00 Floppy::tick()
2.15 6.36 0.16 41000961 0.00 0.00 Tape::tick()
2.01 6.51 0.15 526219 0.00 0.00 BDI::in(int)
1.88 6.65 0.14 1 140.00 140.00 Sound::defpars()
1.88 6.79 0.14 1 140.00 140.00 Floppy::step(bool)
1.75 6.92 0.13 std::vector<TapeBlock, std::allocator<TapeBlock> >::push_back(TapeBlock const&)
0.94 6.99 0.07 506185 0.00 0.00 AYProc::getvol()
0.81 7.05 0.06 9001997 0.00 0.00 Memory::rd(unsigned short)
0.81 7.11 0.06 8998720 0.00 0.00 Z80::read(unsigned short, unsigned char)
0.67 7.16 0.05 6499121 0.00 0.00 DebugWin::findbp(BPoint)
0.67 7.21 0.05 Tape::rectick()
0.54 7.25 0.04 9044452 0.00 0.00 Memory::getptr(unsigned short)
0.54 7.29 0.04 572 0.07 12.43 EmulWin::emulframe()
0.40 7.32 0.03 1258389 0.00 0.00 Z80::getopt(unsigned char)
0.27 7.34 0.02 542464 0.00 0.00 Z80::anda(unsigned char)


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

Да, кстати- бросай эту "экономию". Передавать целочисленный параметр через unsigned char- это тормозно и глупо. Самый оптимальный вариант- юзать std::size_t/std::ptrdiff_t (заtypedef'ить если влом много печатать) или unsigned/int на худой конец.

SAM style
14.02.2010, 23:36
Упдатес. Убиение AYProc::tick(), изменение формирования AY/YM звука.

phant0m
18.02.2010, 19:47
SAM style, переселился на Debian Squeeze. Загрузка проца в среднем - 70% с запущенным образом. Звук лучше не стал.

SAM style
18.02.2010, 20:13
Дровинки на видео от производителя поставлены? Слабо, но надеюсь, что часть вины на их отсутствии. Если не подтвердится - случай странный, машина у тебя не такая и слабая.

---------- Post added at 21:13 ---------- Previous post was at 21:08 ----------

К слову, у меня что на дровах nvidia, что на иксовых nv - почти одинаково, в районе 16-20%.
А без образа у тебя как?

phant0m
18.02.2010, 20:29
SAM style, NVIDIA Driver Version: 190.53
Без образа - ~60

Q-Master
19.02.2010, 13:34
У меня и подавно все жуть как небыстро.

SAM style
19.02.2010, 14:01
Да, он тормоз. :v2_sick:
Разберусь с делами - распотрошу его ещё раз.

phant0m
19.02.2010, 18:01
Q-Master, да, пока не очень хорошо. Однако поддерживаю SAM style и надеюсь он доработает эмулятор ZX-Spectrum для LINUX, которые и так редкость.

mungo
25.02.2010, 11:27
SAM style, посмотрел на твои исходники... Вот просто интересно - а почему ты (как и другие) не попробуешь сделать тактовую синхронизацию через rdtsc? Это конечно привязывает к данному компу, но точнее растактовки быть не может...

SAM style
11.03.2010, 17:02
Небольшие багоправки (упдатесом это не назовёшь).
rdtsc - это сильно... Токмо такая точность не особо нужна.
Временно работа над эмулем приостановлена в пользу проекта на ZX.

nzeemin
06.05.2010, 15:20
Извиняюсь что влезаю. Изучаю сейчас Qt в плане перевода своих эмуляторов на него.

Заметил что в Xpeccy для организации вызова фреймов эмулирующей части используется QTimer. Не изучалось ли -- насколько он вообще приемлемо работает?

Сам думаю встроится как-нибудь в основной цикл обработки сообытий -- например, написанием своего QEventLoop.

SAM style
21.06.2010, 15:33
Good news, everyone.
Три дня переписывания и неделя отладки новой эмуляции Z80 принесла плоды - это чудище стало тормозить куда меньше и уже работает у меня на ноутбуке. Обновление в первом посте.

---------- Post added at 15:33 ---------- Previous post was at 15:31 ----------

ЗЫ: QTimer работает сносно, как мне кажется...

Q-Master
21.06.2010, 16:16
Не собирается:
qmaster@Deb-G5-QM:~/--/xpeccy$ qmake

qmaster@Deb-G5-QM:~/--/xpeccy$ make
/usr/bin/uic-qt4 ui/develwin.ui -o ui_develwin.h
/usr/bin/uic-qt4 ui/selname.ui -o ui_selname.h
/usr/bin/uic-qt4 ui/setupwin.ui -o ui_setupwin.h
/usr/bin/uic-qt4 ui/umadial.ui -o ui_umadial.h
g++ -c -pipe -O2 -fno-optimize-sibling-calls -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -Isrc -Isrc/z80 -I. -I. -o bdi.o src/bdi.cpp
g++ -c -pipe -O2 -fno-optimize-sibling-calls -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -Isrc -Isrc/z80 -I. -I. -o debuger.o src/debuger.cpp
In file included from src/debuger.cpp:1:
src/video.h:9:18: error: SDL.h: Нет такого файла или каталога
In file included from src/debuger.cpp:1:
src/video.h:39: error: ISO C++ forbids declaration of ‘SDL_Surface’ with no type
src/video.h:39: error: expected ‘;’ before ‘*’ token
src/video.h:40: error: ‘SDL_Color’ does not name a type
src/debuger.cpp: In member function ‘DasmRow DebugWin::getdisasm()’:
src/debuger.cpp:236: warning: comparison is always false due to limited range of data type
src/debuger.cpp:242: warning: comparison is always false due to limited range of data type
src/debuger.cpp: In member function ‘void DebugWin::switchbp(BPoint)’:
src/debuger.cpp:335: error: ‘printf’ was not declared in this scope
make: *** [debuger.o] Ошибка 1

---------- Post added at 16:12 ---------- Previous post was at 16:11 ----------

без qmake - собирается, но вот это:
src/debuger.cpp:236: warning: comparison is always false due to limited range of data type
src/debuger.cpp:242: warning: comparison is always false due to limited range of data type
остается

---------- Post added at 16:16 ---------- Previous post was at 16:12 ----------

Program received signal SIGSEGV, Segmentation fault.
0x10041764 in Tape::sync() ()
(gdb) bt
#0 0x10041764 in Tape::sync() ()
#1 0x1003e06c in Sound::sync() ()
#2 0x1004dfb8 in Z80::exec() ()
#3 0x10018544 in EmulWin::emulframe() ()
#4 0x1006572c in EmulWin::qt_metacall(QMetaObject::Call, int, void**) ()
#5 0x0f0a15d0 in QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/lib/libQtCore.so.4
#6 0x0f0b423c in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
#7 0x0f1173d0 in QTimer::timeout() () from /usr/lib/libQtCore.so.4
#8 0x0f0bdfc4 in QTimer::timerEvent(QTimerEvent*) () from /usr/lib/libQtCore.so.4
#9 0x0f0af960 in QObject::event(QEvent*) () from /usr/lib/libQtCore.so.4
#10 0x0f37c6a8 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#11 0x0f384148 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
#12 0x0f09ad80 in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4
#13 0x0f0d59b8 in ?? () from /usr/lib/libQtCore.so.4
#14 0x0f0d1804 in ?? () from /usr/lib/libQtCore.so.4
#15 0x0e81d6c0 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#16 0x0e822368 in ?? () from /lib/libglib-2.0.so.0
#17 0x0e822508 in g_main_context_iteration () from /lib/libglib-2.0.so.0
#18 0x0f0d1288 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#19 0x0f451110 in ?? () from /usr/lib/libQtGui.so.4
#20 0x0f098a1c in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#21 0x0f098fc8 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#22 0x0f09f6d4 in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4
#23 0x0f37c780 in QApplication::exec() () from /usr/lib/libQtGui.so.4
#24 0x10027ef0 in main ()

SAM style
21.06.2010, 16:20
/usr/bin/qmake-qt4 -unix INCPATH+=/usr/include/SDL/ LIBS+=-lSDL\ -lasound OBJECTS_DIR=./obj -o Makefile xpeccy.pro
Qt 4.6.3 - недавно заметил, что собранное с 4.6 на более ранних версиях не работает.
С предупреждением в debugger.cpp снова забыл :)
строка 233: signed char bt;

Q-Master
21.06.2010, 16:26
Ну и мне так и не удалось попасть в Глюк.

SAM style
21.06.2010, 16:28
Ну и мне так и не удалось попасть в Глюк.Блин, действительно... Внесу в TODO. Но он у тебя хоть запустился?

Q-Master
21.06.2010, 16:30
Qt у меня 4.6.3-1
Глючит оно - ужас. Мне так и не удалось в нескольких случаях добиться от него банального ресета. Забивает весь экран 0 0 0 0 0 0 0 0 0 0 и continue?

SAM style
21.06.2010, 16:40
Qt у меня 4.6.3-1
Глючит оно - ужас. Мне так и не удалось в нескольких случаях добиться от него банального ресета. Забивает весь экран 0 0 0 0 0 0 0 0 0 0 и continue?Только в теневую страницу и тырдос хреново ресетится. В басики - нормально.

---------- Post added at 16:40 ---------- Previous post was at 16:36 ----------

Это обновление чуть менее чем полностью состоит из переписанного z80. Старых глючков ещё море.

phant0m
21.06.2010, 19:00
Запускается, работает, но при движении мышкой часто бывают щелчки.

SAM style
21.06.2010, 21:49
Запускается, работает, но при движении мышкой часто бывают щелчки.Какая конфигурация компа и насколько эмуль жрет проц? Память не критична, он не более 40-50М кушает.

phant0m
21.06.2010, 23:16
SAM style, до 40 прыгает (amd x2 4400+, 2048MB, GeForce 8800GTS)

SAM style
21.06.2010, 23:50
SAM style, до 40 прыгает (amd x2 4400+, 2048MB, GeForce 8800GTS)У меня так на ноуте (прыгает в районе 30-40%), а ведь там проц послабее будет и дрова не поставлены...

phant0m
22.06.2010, 00:22
SAM style, Fuse ~10.

Q-Master
22.06.2010, 11:40
У меня на квад G5 2.5ГГц от 29 до 41 процента от 1 ядра. В целом 10-12%.

SAM style
03.07.2010, 16:15
News
Версия под Win собралась, но мне нужна помощь гуру, ибо задолбался уже msdn читать...
1. Связано с отсутствием в виндовом Qt embed-контейнера.
В качестве главного окна использую QDialog, куда через SetParent встраивается окно SDL. Проблема - у них разные фокусы. Т.е если перетащить окно за заголовок, у внутренней части теряется фокус, и она не реагирует на клавиатуру.
Выход подозреваю, но сомневаюсь - главным оставить само окно SDL и как-то разрулить модальность остальных окон относительно него.
2. WaveOut трещит, но не постоянно - раз в 2-3 секунды. Бился долго и упорно, ничего не получилось.

nzeemin
03.07.2010, 19:30
News
1. Связано с отсутствием в виндовом Qt embed-контейнера.
В качестве главного окна использую QDialog, куда через SetParent встраивается окно SDL. Проблема - у них разные фокусы. Т.е если перетащить окно за заголовок, у внутренней части теряется фокус, и она не реагирует на клавиатуру.

setFocusProxy не помогает?

SAM style
03.07.2010, 19:57
Надо не-Qt (SDL) окно всторить в Qt-окно (QDialog). setFocusProxy, похоже, работает сугубо внутри Qt.
Второй вариант - сделать Qt окно (настройки, файловые диалоги) модальным относительно не-Qt окна (SDL). Смотрю на setWindowModality(Qt::ApplicationModal), но опробовать пока нет возможности. Ещё подозреваю, что это можно сделать средствами WinAPI - HWND окон получить несложно.

Alexandr Medvedev
04.07.2010, 15:00
Версия под Win собраласьНу наконец-то дождались.
А где её посмотреть, чё-то ссылку я не нашёл?

SAM style
04.07.2010, 16:08
Ну наконец-то дождались.
А где её посмотреть, чё-то ссылку я не нашёл?
Со звуком (как всегда) громадные проблемы. Могу выложить, но звука при этом не будет. Надоть (на посмотреть)?

[bETA]mEN
04.07.2010, 20:06
Могу выложить
хочется посмотреть, даже если есть серьёзные глюки.

SAM style
04.07.2010, 20:25
zip 5,5 метров вместе с нужными dll-ками (QtCore, QtGui, SDL).
ТУТ (http://rghost.ru/2072325)
Серьёзные недоделки уже говорились - он немой и главное окно можно вытащить вперёд других диалогов - эмуляция в это время идти не будет, но на кнопки оно реагирует. А в остальном болеет тем же самым, что и линуксовая версия...

[bETA]mEN
04.07.2010, 21:42
для запуска еще нужны libgcc_s_dw2-1.dll и mingwm10.dll

SAM style
04.07.2010, 22:24
mEN;297040']для запуска еще нужны libgcc_s_dw2-1.dll и mingwm10.dll
Доставлено

Alexandr Medvedev
07.07.2010, 17:59
zip 5,5 метровСкачать не получается, всё время одно и тоже:
Все слоты бесплатного скачивания заняты. Пожалуйста попробуйте еще раз через некоторое время.Других ссылок нету?

[bETA]mEN
07.07.2010, 18:41
Других ссылок нету?
http://rghost.ru/2072325

Alexandr Medvedev
09.07.2010, 19:21
Скачался наконец-то.
Эмуль приятно удивил тем что довольно шустрый хотя это наверное из-за отсутствия звука.
Теперь минусы:
- полное отсутствие документации, хотя бы о клавишах управления надо написать
- в настройках в строках где пути вместо русских букв мусор
- (пожалуй самое смешное) тест by Ivan Roschin выдаёт @#$%& emulator detected
- ошибки эмуляции TR DOS
не работает RDS 3.1 (не видит диск)
Steep Format 5.1 даже не загружается
FUT по команде check disk не видит диск
Это то что удалось найти сразу, может со временем ещё что всплывёт.
И сильно нехватает поддержки расширенных форматов FDI, UDI, TD0 на них много софта со сложными защитами.

SAM style
09.07.2010, 20:54
На слове "шустрый" я аж прослезился... :) Всегда считал его тормозом
При sound=enabled звуковой буфер всегда формируется, но при output=NULL он никуда не выводится.
- "документация" в первом посте темы.
- Согласен, упустил.
- Эмуляция ВГ93 ой как далеко от идеала. Да и в Z80 есть спорные моменты.
При прогонке дисковых утилит пробовал отключать турбо в BDI? При турбо диск не всегда равномерно "крутится".

Alexandr Medvedev
10.07.2010, 13:12
На слове "шустрый" я аж прослезился...Я хотел сказать что для эмулятора портированного с другой ОС скорость довольно неплохая, хотя конечно в отличие от родного для Win32 UnrealSpeccy этот эмуль сильно тормозит.
При прогонке дисковых утилит пробовал отключать турбо в BDI?Не, чё-то не догадался. Отключил, проверил снова -- ошибки остались.
Так что ждём новую версию.

SAM style
12.07.2010, 20:10
Кстати, Александер, можно ссылку на тест Рощина? Посмотрел на его сайте - не нашёл. Надеюсь, узнаю оттуда много нового и интересного.

Alexandr Medvedev
12.07.2010, 22:01
можно ссылку на тест Рощина?Это и не тест как таковой, просто на долю секунды в заставке выскакивает результат проверки на эмулятор, большенство импортных эмулей на нём палятся, а наши в основном проходят.

SAM style
12.07.2010, 23:06
Его можно хотя бы отдебажить - увидеть, почему ругается и что не сходится.

SAM style
14.07.2010, 23:27
Небольшой упдатес. В первый пост добавлен экзешник для винды (конфиг и либы на прошлой странице), уже со звуком, но от там УЖАСНЫЙ - не получается у меня что-то...
С RDS разобрался - если голова дискокрута находилась на 0 дорожке, команда восстановления заканчивалась слишком быстро, и RDS повисал.

---------- Post added at 23:27 ---------- Previous post was at 23:00 ----------

И ещё - для любителей острых ощущений и желающих помочь в файле bdi.h определено BDINEW - если оно 1, используется новый алгоритм работы с BDI, но он крайне нестабильный - кое-как работает только в turbo-режиме, и то не всегда.

SAM style
15.07.2010, 22:27
Допиливание вчерашнего (см.первый пост). Check в FUT-е уже работает. Со Steep Format проблема посерьёзнее - надо дебажить с самого начала, т.к после загрузки он порывается выполнять мусор в конце памяти.

SAM style
31.08.2010, 00:17
RC2 - обновил эмуляцию ВГ93. Судя по докам, эта более правильная, но сомнения имеются.
По этому поводу есть кучка вопросов, на которые гугль мне не ответил:
1. Длина индексного импульса при 300 оборотах в сек?
2. Сколько думает дисковод между подачей на него HLD и приходом в состояние HRDY (т.е как быстро он готов при опускании головы)?
3. CRC полей на диске для меня вообще тёмный лес.

SAM style
01.09.2010, 10:17
Update
Закрались сомнения насчет цикла обработки INT в режиме IM2. По раскопанной информации он длится 19 тактов (7 на приём сигнала, 3+3 на выборку адреса, 3+3 на сохранение PC) - при этом нормально срабатывает тест скорости памяти в SATISFACTION, но в последних 2 частях RAGE бордюр смещен направо. Если выставить длину приёма в 15 тактов, RAGE работает как надо, но в SATISFACTION начинается разброс, что сказывается на части с мультиколором.

Sinus
01.09.2010, 13:05
19 тактов, это верняк.
возможно, у тебя косяк в чём-нибудь другом (или другая какая-нибудь комманда неправильно работает, или неправильно отрисовывает).

molodcov_alex
01.09.2010, 14:10
SAM style, А не в хальте ли дело, вроде ж совейтстский Z80 по другому HALT обрабатывает?
Хотя эксперимент показывает что в данном случае по барабану.

Sinus
01.09.2010, 14:25
вся разница между нормальным z80-ым halt-ом и советским (кстати, не любым), в том, что на некоторых советских процах halt игнорировал IFF1, и не работало DI : HALT

приходилось приучать себя писать DI : JR $

upd:
какая-то ерунда с форумом творится, уже второй раз сообщения отправляются по 2 раза. приходится потом удалять.

SAM style
01.09.2010, 15:13
На примете у меня есть пара моментов, которые могут оказывать влияние:

1. Судя по схемам ZS256 и Pent128K при построении экрана байт изображения считывается на 4 точки (2 такта) раньше его реального положения, а потом задерживается, атрибут считывается прямо перед отображением. У меня они оба считываются одновременно - перед отображением левой точки знакоместа.
2. Бордюр меняется сразу после записи в #FE. Кажется, не везде это так.
3. Не исключаю того, что какая-то команда врёт в тактах. Несколько раз проверял, но мог что-то и упустить.

У меня пока что тоже HALT игнорирует IFF1 (надо бы исправить) - на прерывании проскочит, но обработки не будет.

Sinus
01.09.2010, 15:37
а сделай плиз скриншот как в RAGE смещён бордер

molodcov_alex
01.09.2010, 15:48
Pent128K
У пентагона вообще нет порядка в считывании. Если есть возможность он считывает точки и аттрибуты по очереди каждые 2 точки экрана. Если же процессор в это время ломится в память, то ему один такт уступается на доступ.
Вроде такое я накурил из схемы когда Speccy2007 курочил.

SAM style
01.09.2010, 15:57
а сделай плиз скриншот как в RAGE смещён бордерВ скролле по бордюру буквы исчезают раньше края и и иногда там мелькает лишнее. В предпоследней и последней части бордюр стабильный (не дрожит), но смещён и, по моему, всегда на одно и то же число точек

Sinus
01.09.2010, 16:06
да, смещено достаточно сильно.
а у тебя какая длина инта и когда он начинается?

SAM style
01.09.2010, 16:46
горизонтальная геометрия: 64 точки невидимые (синхр) + 64 бордюр + 256 экран + до конца бордюр = 448.
вертикальная: 32 невидимые (синхр) + 48 бордюр + 192 экран + до конца бордюр = 320.
INT приходит вместе с вертикальной синхрой (когда отрисована последняя точка) и длится 32 такта (64 точки)

Копнул http://www.worldofspectrum.org/rusfaq/index.html - увидел, где промазал. Левый бордюр в пентагоне 72 точки, а не 64 - у меня получается, что экран смещен налево, а не бордюр направо. Приду домой - надо будет проверить.

---------- Post added at 16:46 ---------- Previous post was at 16:43 ----------

PS: хотя, первые 2 картинки это не объясняет

Sinus
01.09.2010, 16:57
когда я делал zemu, я всяких доков не читал, чисто на эксперименте:

71680 - число тактов во фрейме
68069 - начало инта
32 - длина инта
64 линии сверху - бордер
каждая строка - 224 такта
33 такта с начала строки - бордер
128 тактов далее - экран
далее - бордер

скорее всего эти выкладки неправильные, но всё работает очень точно (только иногда бордюр на пиксель влево-вправо не совпадает с экраном)

SAM style
01.09.2010, 17:48
У пентагона вообще нет порядка в считывании. Если есть возможность он считывает точки и аттрибуты по очереди каждые 2 точки экрана. Если же процессор в это время ломится в память, то ему один такт уступается на доступ.
Вроде такое я накурил из схемы когда Speccy2007 курочил.Вот этого никогда не мог понять. Например, в ld (nn),hl подряд идут 2 цикла записи в память (write(nn,L), write(nn+1,H)) - каждый занимает по 3 такта. Итого - 6 тактов, в течение которых проц "ломится в память". За это время по идее должно отрисоваться 12 точек. Может стать так, что считать байт/атрибут знакоместа (или хотя бы пары-другой точек) у видеосистемы вообще не получится? И что тогда - разрыв изображения в этом месте/эффект дождя/smth else?

Sinus
01.09.2010, 18:44
пентагон (реальный) у меня был буквально месяц, так что знаниями не обладаю.

знаю что в байте во время чтения данных видеоконтролеером, от проца просто отключается CLK. возможно, именно с этим, связано существование медленной памяти.

в кае как-то мудрёно, через WAIT.


Например, в ld (nn),hl подряд идут 2 цикла записи в память (write(nn,L), write(nn+1,H)) - каждый занимает по 3 такта. Итого - 6 тактов, в течение которых проц "ломится в память".

судя по диаграммам z80, в каждом из 4х 3х-тактовых блоков (2 на чтение адреса + 2 на запись значения) запись/чтение происходят на третий тик (запись чуть больше, чтение вообще по спаду T3).