Автор Тема: Отказ запуска spectrum-fuse  (Прочитано 19608 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #15 : 03.05.2020 19:01:01 »
Юра , вот еще очень интересный эмулятор Спектрума :
https://aur.archlinux.org/packages/unreal-speccy-portable
Может быть тебе пригодится для портирования под Альт.
Работает как под X-сами так и в чистой консоли ( через фреймбуффер ) , 128 с TR-DOS - ом из коробки , встроенная возможность грузить программы из сети. Если будешь смотреть то все настройки вызываются по Esc ( особенно полноэкранка без сглаживания радует ).
Однозначно пойдет в Ледяной , но может и тебя заинтересует  :-)

Unreal интересный эмулятор. Могу ошибаться, но если мне не изменяет память, в нём есть поддержка KAY-1024. KAY производил Nemo (Питер). И Nemo же разработал контроллер HDD под iS-DOS. Его схему когда-то печатали в спектрумовской электронной прессе.

Оффлайн kostyalamer

  • Мастер
  • ***
  • Сообщений: 432
    • Сайт клуба активных пользователей ALT Linux
Re: Отказ запуска spectrum-fuse
« Ответ #16 : 03.05.2020 20:15:54 »
Unreal интересный эмулятор.
Да он действительно интересный , насчет поддержки KAY не уверен , но у него есть service-rom в который я глубоко не лазил.
Archlinux  / Altlinux Free Mate p8

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #17 : 03.05.2020 21:04:22 »
Unreal интересный эмулятор.
Да он действительно интересный , насчет поддержки KAY не уверен ,
но у него есть service-rom в который я глубоко не лазил.

Да, это я перепутал с UnrealSpeccy:
http://speccy.info/UnrealSpeccy

но у него есть service-rom в который я глубоко не лазил.

Тот самый gluck.rom:
http://speccy.info/Mr_Gluk_Reset_Service
http://speccy.info/Mr_Gluk

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 284
Re: Отказ запуска spectrum-fuse
« Ответ #18 : 04.05.2020 07:32:37 »
у него есть service-rom в который я глубоко не лазил.
Плюс ко всему, имеется встроенный отладчик, реализованный непосредственно в самом эмуляторе, а не как программа для Z80. Насколько помню, как минимум он позволял отлаживать ПЗУ, как в STS, и при этом никак не определяется отлаживаемым кодом.

это я перепутал с UnrealSpeccy:
Unreal и UnrealSpeccy — это один и тот же легендарный эмулятор (просто он изначально был только для альтернативной ОС). См. в авторах SMT. Он может вообще всё, даже выдавал 50 Герц развёртку, если монитор поддерживал.
« Последнее редактирование: 04.05.2020 07:34:25 от trs »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #19 : 04.05.2020 08:31:38 »
это я перепутал с UnrealSpeccy:
Unreal и UnrealSpeccy — это один и тот же легендарный эмулятор (просто он изначально был только для альтернативной ОС). См. в авторах SMT. Он может вообще всё, даже выдавал 50 Герц развёртку, если монитор поддерживал.

Понятно. Спасибо.
По Unreal* я очень по верхам. В основном использовал Z80Stealth.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #20 : 04.05.2020 09:29:54 »
Юра , вот еще очень интересный эмулятор Спектрума :
https://aur.archlinux.org/packages/unreal-speccy-portable

Воткнул по-быстрому дебьяновский пакет на посмотреть:
- Прогнал через alien.
- Установил с --nodeps.

Впечатления:

Плюсы:
- Чистый AY-звук. Чёткое разделение каналов.
- Окно плавно масштабируется.
- В Unreal Speccy Portable, версия GLUK свежее: в Unreal Speccy Portable - 6.61, в Spectrum-fuse-1.5.7 - 6.3R.

Минусы:
(в игрушке Space Crusade у меня проверяются эмуляторы на вшивость. Собственно не на самой игрушке, а на демо-заставке от Max Iwamoto в SRUS_48)
- Не нашёл конфига.
- Пикселы размыты.
- При одинаковом размере окон spectrum-fuse и Unreal Speccy Portable, если в spectrum-fuse явно заметен только дёрганый попиксельный скролл бегущей строки, то в Unreal Speccy Portable заметно больше дёргает всё что скролл. И не только бегущей строки. А скроллинг должен быть плавным.
- На HD Graphics 5500 есть еле заметный тиринг. Если окно развернуть в полный экран, он будет заметен больше. Впрочем при трёхкратном масштабировании окна spectrum-fuse, тиринг заметен и в нём. (подсунуть Option "SwapbuffersWait" "false" ?).
« Последнее редактирование: 04.05.2020 09:46:16 от Speccyfighter »

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 284
Re: Отказ запуска spectrum-fuse
« Ответ #21 : 04.05.2020 11:24:12 »
- Не нашёл конфига.
Нашёл в ~/.usp/unreal_speccy_portable.xml
Меню настроек вызывается клавишей ~ (Ё) или Esc (то есть клавиши по сравнению с оригинальной версией изменили).
Там же отключается фильтрация (размытость) пикселей. В оригинальной версии количество фильтров было больше, да и вообще настроек (можно было выбрать даже количество тактов процессора за кадр  http://proube1.narod.ru/unrealini.html). Частота кадров не меняется (для идеальной картинки надобно 50 Герц, как на ТВ в оригинале).
« Последнее редактирование: 04.05.2020 11:44:28 от trs »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #22 : 04.05.2020 12:07:24 »
О! Спасибо. То шо надо:
- Фильтрация отключает размытие пикселов.
А то изображение как на мониоре у которого съехала фокусировка.

Юра , вот еще очень интересный эмулятор Спектрума :
https://aur.archlinux.org/packages/unreal-speccy-portable

Минусы:
...
- На HD Graphics 5500 есть еле заметный тиринг. Если окно развернуть в полный экран, он будет заметен больше. Впрочем при трёхкратном масштабировании окна spectrum-fuse, тиринг заметен и в нём. (подсунуть Option "SwapbuffersWait" "false" ?).

Не-а. Вертикальная синхронизация ушла, но это не спасает.
Дёргание попиксельного скроллинга, который на хардовом Спэке мягкий, заметен настолько, что это сильно режет глаз.  Причём он ощутимо заметней чем в fuse.
В принципе если на демах не зацикливаться, то мешать не должно (не будет?).

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #23 : 04.05.2020 12:38:21 »
Unreal Speccy Portable
(unreal-speccy-portable_0.0.83_amd64.deb через alien)

Шо оно хочет:
$ ldd-requires /usr/lib/unreal-speccy-portable/unreal_speccy_portable
Архитектура двоичного файла соответствует ОС
Уже установлены все библиотеки
$ ldd /usr/lib/unreal-speccy-portable/unreal_speccy_portable
/usr/lib/unreal-speccy-portable/unreal_speccy_portable: /usr/lib64/libcurl.so.4: no version information available (required by /usr/lib/unreal-speccy-portable/unreal_speccy_portable)
linux-vdso.so.1 (0x00007ffed596b000)
libSDL2-2.0.so.0 => /usr/lib64/libSDL2-2.0.so.0 (0x00007f5e39341000)
libGLESv2.so.2 => /usr/lib64/libGLESv2.so.2 (0x00007f5e3932d000)
libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x00007f5e392a5000)
libz.so.1 => /lib64/libz.so.1 (0x00007f5e39288000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f5e39082000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f5e39068000)
libc.so.6 => /lib64/libc.so.6 (0x00007f5e38ea8000)
libm.so.6 => /lib64/libm.so.6 (0x00007f5e38d12000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f5e38d0d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5e38cec000)
librt.so.1 => /lib64/librt.so.1 (0x00007f5e38ce2000)
libGLdispatch.so.0 => /usr/lib64/libGLdispatch.so.0 (0x00007f5e38c26000)
libnghttp2.so.14 => /usr/lib64/libnghttp2.so.14 (0x00007f5e38bfc000)
libidn2.so.0 => /lib64/libidn2.so.0 (0x00007f5e38bdc000)
libpsl.so.5 => /usr/lib64/libpsl.so.5 (0x00007f5e38bd5000)
libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f5e38b44000)
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f5e38876000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f5e38828000)
libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x00007f5e387d9000)
liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x00007f5e387c9000)
libbrotlidec.so.1 => /usr/lib64/libbrotlidec.so.1 (0x00007f5e387ba000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5e39499000)
libunistring.so.2 => /lib64/libunistring.so.2 (0x00007f5e38638000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f5e38556000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f5e3851f000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f5e38519000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f5e38509000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f5e384ef000)
libsasl2.so.3 => /lib64/libsasl2.so.3 (0x00007f5e384d0000)
libbrotlicommon.so.1 => /usr/lib64/libbrotlicommon.so.1 (0x00007f5e384ad000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f5e384a4000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f5e38479000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f5e38441000)
libpcre.so.3 => /lib64/libpcre.so.3 (0x00007f5e383fa000)
$ apt-cache depends unreal-speccy-portable
unreal-speccy-portable-0.0.83-2@1588568888
  Требует: </bin/sh>
    sh-4.4.23-alt1:sisyphus+221902.500.4.1@1550587242
  Требует: </lib64/ld-linux-x86-64.so.2>
    glibc-core-6:2.27-alt12:p9+243233.100.2.1@1577350190
  Требует: <libGLESv2.so.2()(64bit)>
    libGLES-7:1.1.1-alt1:sisyphus+224993.100.4.1@1552634540
  Требует: <libSDL2-2.0.so.0()(64bit)>
    libSDL2-2.0.10-alt1:p9+236883.200.7.1@1576060760
  Требует: <libc.so.6(GLIBC_2.14)(64bit)>
    glibc-core-6:2.27-alt12:p9+243233.100.2.1@1577350190
  Требует: <libc.so.6(GLIBC_2.2.5)(64bit)>
    glibc-core-6:2.27-alt12:p9+243233.100.2.1@1577350190
  Требует: <libc.so.6(GLIBC_2.3)(64bit)>
    glibc-core-6:2.27-alt12:p9+243233.100.2.1@1577350190
  Требует: <libc.so.6(GLIBC_2.3.4)(64bit)>
    glibc-core-6:2.27-alt12:p9+243233.100.2.1@1577350190
  Требует: <libc.so.6(GLIBC_2.4)(64bit)>
    glibc-core-6:2.27-alt12:p9+243233.100.2.1@1577350190
  Требует: <libcurl.so.4()(64bit)>
    libcurl-7.65.0-alt1:p9+229801.100.1.1@1558513332
  Требует: <libcurl.so.4(CURL_OPENSSL_3)(64bit)>
  Требует: <libgcc_s.so.1(GCC_3.0)(64bit)>
    libgcc1-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libstdc++.so.6(CXXABI_1.3)(64bit)>
    libstdc++6-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libstdc++.so.6(CXXABI_1.3.8)(64bit)>
    libstdc++6-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libstdc++.so.6(GLIBCXX_3.4)(64bit)>
    libstdc++6-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libstdc++.so.6(GLIBCXX_3.4.11)(64bit)>
    libstdc++6-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libstdc++.so.6(GLIBCXX_3.4.14)(64bit)>
    libstdc++6-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libstdc++.so.6(GLIBCXX_3.4.15)(64bit)>
    libstdc++6-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libstdc++.so.6(GLIBCXX_3.4.20)(64bit)>
    libstdc++6-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libstdc++.so.6(GLIBCXX_3.4.21)(64bit)>
    libstdc++6-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libstdc++.so.6(GLIBCXX_3.4.9)(64bit)>
    libstdc++6-8.4.1-alt0.p9.1:p9+247559.100.2.1@1585587756
  Требует: <libz.so.1()(64bit)>
    zlib-1.2.11-alt1:sisyphus+221902.6000.4.1@1550600768
  Требует: <rtld(GNU_HASH)>
    glibc-core-6:2.27-alt12:p9+243233.100.2.1@1577350190
  Требует: <rtld(GNU_UNIQUE)>
    glibc-core-6:2.27-alt12:p9+243233.100.2.1@1577350190
$ apt-cache depends unreal-speccy-portable | grep -v '^unre\|Требует' | awk -F ':' '{print $1}' | sort -u
    glibc-core-6
    libcurl-7.65.0-alt1
    libgcc1-8.4.1-alt0.p9.1
    libGLES-7
    libSDL2-2.0.10-alt1
    libstdc++6-8.4.1-alt0.p9.1
    sh-4.4.23-alt1
    zlib-1.2.11-alt1

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #24 : 04.05.2020 20:13:49 »
- Не нашёл конфига.
Нашёл в ~/.usp/unreal_speccy_portable.xml

:-) Смотрю на всё это и понимаю, почему пользователь Линукс не хочет лезть в конфиги.
Шо, вот эту хрень разгребать?, - да нафик он ему упёрся этот xml!
$ cat .fuserc
<?xml version="1.0"?>
<settings>
  <accelerateloader>1</accelerateloader>
  <aspecthint>1</aspecthint>
  <autoload>1</autoload>
  <autosavesettings>0</autosavesettings>
  <beta128>0</beta128>
  <beta12848boot>1</beta12848boot>
  <bwtv>0</bwtv>
  <competitioncode>0</competitioncode>
  <competitionmode>0</competitionmode>
  <confirmactions>1</confirmactions>
  <covox>0</covox>
  <detectloader>1</detectloader>
  <didaktik80>0</didaktik80>
  <disciple>0</disciple>
  <diskaskmerge>1</diskaskmerge>
  <divide>0</divide>
  <dividewriteprotect>0</dividewriteprotect>
  <divmmc>0</divmmc>
  <divmmcwriteprotect>0</divmmcwriteprotect>
  <doublescanmode>1</doublescanmode>
  <drive40maxtrack>42</drive40maxtrack>
  <drive80maxtrack>84</drive80maxtrack>
  <embedsnapshot>1</embedsnapshot>
  <speed>100</speed>
  <fastload>1</fastload>
  <fbmode>320</fbmode>
  <rate>1</rate>
  <fullscreen>0</fullscreen>
  <fuller>0</fuller>
  <interface1>0</interface1>
  <interface2>1</interface2>
  <issue2>0</issue2>
  <kempston>0</kempston>
  <joystickprompt>0</joystickprompt>
  <joystick1fire1>4096</joystick1fire1>
  <joystick1fire10>4096</joystick1fire10>
  <joystick1fire11>4096</joystick1fire11>
  <joystick1fire12>4096</joystick1fire12>
  <joystick1fire13>4096</joystick1fire13>
  <joystick1fire14>4096</joystick1fire14>
  <joystick1fire15>4096</joystick1fire15>
  <joystick1fire2>4096</joystick1fire2>
  <joystick1fire3>4096</joystick1fire3>
  <joystick1fire4>4096</joystick1fire4>
  <joystick1fire5>4096</joystick1fire5>
  <joystick1fire6>4096</joystick1fire6>
  <joystick1fire7>4096</joystick1fire7>
  <joystick1fire8>4096</joystick1fire8>
  <joystick1fire9>4096</joystick1fire9>
  <joystick1output>0</joystick1output>
  <joystick2fire1>4096</joystick2fire1>
  <joystick2fire10>4096</joystick2fire10>
  <joystick2fire11>4096</joystick2fire11>
  <joystick2fire12>4096</joystick2fire12>
  <joystick2fire13>4096</joystick2fire13>
  <joystick2fire14>4096</joystick2fire14>
  <joystick2fire15>4096</joystick2fire15>
  <joystick2fire2>4096</joystick2fire2>
  <joystick2fire3>4096</joystick2fire3>
  <joystick2fire4>4096</joystick2fire4>
  <joystick2fire5>4096</joystick2fire5>
  <joystick2fire6>4096</joystick2fire6>
  <joystick2fire7>4096</joystick2fire7>
  <joystick2fire8>4096</joystick2fire8>
  <joystick2fire9>4096</joystick2fire9>
  <joystick2output>0</joystick2output>
  <joystickkeyboarddown>97</joystickkeyboarddown>
  <joystickkeyboardfire>32</joystickkeyboardfire>
  <joystickkeyboardleft>111</joystickkeyboardleft>
  <joystickkeyboardoutput>0</joystickkeyboardoutput>
  <joystickkeyboardright>112</joystickkeyboardright>
  <joystickkeyboardup>113</joystickkeyboardup>
  <kempstonmouse>0</kempstonmouse>
  <keyboardarrowsshifted>1</keyboardarrowsshifted>
  <latetimings>0</latetimings>
  <mdrlen>180</mdrlen>
  <mdrrandomlen>1</mdrrandomlen>
  <melodik>0</melodik>
  <mouseswapbuttons>0</mouseswapbuttons>
  <moviestopafterrzx>1</moviestopafterrzx>
  <multiface1>0</multiface1>
  <multiface128>0</multiface128>
  <multiface1stealth>0</multiface1stealth>
  <multiface3>0</multiface3>
  <opus>0</opus>
  <paltv2x>1</paltv2x>
  <phantomtypistmode>Auto</phantomtypistmode>
  <plus3detectspeedlock>1</plus3detectspeedlock>
  <plusd>0</plusd>
  <printer>0</printer>
  <graphicsfile>printout.pbm</graphicsfile>
  <textfile>printout.txt</textfile>
  <rawsnet>0</rawsnet>
  <recreatedspectrum>0</recreatedspectrum>
  <rom1280>128-0.rom</rom1280>
  <rom1281>128-1.rom</rom1281>
  <rom16>48.rom</rom16>
  <rom48>48.rom</rom48>
  <rombeta128>trdos.rom</rombeta128>
  <romdidaktik80>didaktik80.rom</romdidaktik80>
  <romdisciple>disciple.rom</romdisciple>
  <rominterfacei>if1-2.rom</rominterfacei>
  <rommultiface1>mf1.rom</rommultiface1>
  <rommultiface128>mf128.rom</rommultiface128>
  <rommultiface3>mf3.rom</rommultiface3>
  <romopus>opus.rom</romopus>
  <rompentagon10240>128p-0.rom</rompentagon10240>
  <rompentagon10241>128p-1.rom</rompentagon10241>
  <rompentagon10242>trdos.rom</rompentagon10242>
  <rompentagon10243>gluck.rom</rompentagon10243>
  <rompentagon5120>128p-0.rom</rompentagon5120>
  <rompentagon5121>128p-1.rom</rompentagon5121>
  <rompentagon5122>trdos.rom</rompentagon5122>
  <rompentagon5123>gluck.rom</rompentagon5123>
  <rompentagon0>128p-0.rom</rompentagon0>
  <rompentagon1>128p-1.rom</rompentagon1>
  <rompentagon2>trdos.rom</rompentagon2>
  <romplus20>plus2-0.rom</romplus20>
  <romplus21>plus2-1.rom</romplus21>
  <romplus2a0>plus3-0.rom</romplus2a0>
  <romplus2a1>plus3-1.rom</romplus2a1>
  <romplus2a2>plus3-2.rom</romplus2a2>
  <romplus2a3>plus3-3.rom</romplus2a3>
  <romplus30>plus3-0.rom</romplus30>
  <romplus31>plus3-1.rom</romplus31>
  <romplus32>plus3-2.rom</romplus32>
  <romplus33>plus3-3.rom</romplus33>
  <romplus3e0>plus3e-0.rom</romplus3e0>
  <romplus3e1>plus3e-1.rom</romplus3e1>
  <romplus3e2>plus3e-2.rom</romplus3e2>
  <romplus3e3>plus3e-3.rom</romplus3e3>
  <romplusd>plusd.rom</romplusd>
  <romscorpion0>256s-0.rom</romscorpion0>
  <romscorpion1>256s-1.rom</romscorpion1>
  <romscorpion2>256s-2.rom</romscorpion2>
  <romscorpion3>256s-3.rom</romscorpion3>
  <romspecse0>se-0.rom</romspecse0>
  <romspecse1>se-1.rom</romspecse1>
  <romspeccyboot>speccyboot-1.4.rom</romspeccyboot>
  <romtc2048>tc2048.rom</romtc2048>
  <romtc20680>tc2068-0.rom</romtc20680>
  <romtc20681>tc2068-1.rom</romtc20681>
  <romts20680>tc2068-0.rom</romts20680>
  <romts20681>tc2068-1.rom</romts20681>
  <romusource>usource.rom</romusource>
  <rs232handshake>0</rs232handshake>
  <rzxautosaves>1</rzxautosaves>
  <compressrzx>1</compressrzx>
  <simpleide>0</simpleide>
  <slttraps>1</slttraps>
  <sound>1</sound>
  <soundforce8bit>0</soundforce8bit>
  <soundfreq>44100</soundfreq>
  <loadingsound>1</loadingsound>
  <speakertype>TV speaker</speakertype>
  <speccyboot>0</speccyboot>
  <speccyboottap>tap0</speccyboottap>
  <specdrum>0</specdrum>
  <spectranet>0</spectranet>
  <spectranetdisable>0</spectranetdisable>
  <machine>pentagon</machine>
  <graphicsfilter>2x</graphicsfilter>
  <statusbar>1</statusbar>
  <separation>ABC</separation>
  <strictaspecthint>0</strictaspecthint>
  <tapetraps>1</tapetraps>
  <unittests>0</unittests>
  <usource>0</usource>
  <volumeay>100</volumeay>
  <volumebeeper>100</volumebeeper>
  <volumecovox>100</volumecovox>
  <volumespecdrum>100</volumespecdrum>
  <writableroms>0</writableroms>
  <cmosz80>0</cmosz80>
  <zxatasp>0</zxatasp>
  <zxataspupload>0</zxataspupload>
  <zxataspwriteprotect>0</zxataspwriteprotect>
  <zxcf>0</zxcf>
  <zxcfupload>0</zxcfupload>
  <zxmmc>0</zxmmc>
  <zxprinter>1</zxprinter>
</settings>
$ cat .usp/unreal_speccy_portable.xml
<?xml version="1.0" encoding="UTF-8"?>
<UnrealSpeccyPortable>
    <Options>
        <window_state>position(10, 60); size(856, 703); maximized(0)</window_state>
        <web_browse_last_item></web_browse_last_item>
        <last_file>/home/wilder/zx-spectrum/soft/games/SCRUS_48.SCL</last_file>
        <save_slot></save_slot>
        <joystick>kempston</joystick>
        <sound_chip>ay</sound_chip>
        <ay_stereo>abc</ay_stereo>
        <full_screen>off</full_screen>
        <zoom>small border</zoom>
        <filtering>off</filtering>
        <black_and_white>off</black_and_white>
        <gigascreen>off</gigascreen>
        <fast_tape>on</fast_tape>
        <auto_play_image>on</auto_play_image>
        <mode_48k>off</mode_48k>
        <reset_to_service_rom>off</reset_to_service_rom>
    </Options>
</UnrealSpeccyPortable>

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 284
Re: Отказ запуска spectrum-fuse
« Ответ #25 : 11.05.2020 12:30:29 »
Как я писал выше, оригинальный UnrealSpeccy позволял выбрать видеорежим с частотой вертикальной развёртки 50 Герц, что соответствует "железному" ZX-Specrum, но в портабельной версии данную возможность убрали.

Набросал patch, помимо переключения "окно/полный экран" теперь перебираются все возможные видеорежимы с частотой 50Гц. Правда, не понял, есть ли данный эмулятор в виде пакета для ALT, и с какими опциями собирается, если есть. Исходил из того, что они аналогичны https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=unreal-speccy-portable потому изменения добавлены для SDL2 (имейте ввиду, что я не специалист по этой библиотеке).

Оригинальный ZX-Spectrum выводит изображение с частотой развёртки 50 Герц.
Добавляем поддержку аналогичных режимов в эмулятор.
Опцию "full screen" заменяем на "video mode", позволяющую устанавливать
подходящие полноэкранные режимы помимо "родного" для Рабочего стола.

Signed-off-by: Sergei A. Trusov <sergei.a.trusov@ya.ru>
---
diff --git a/platform/sdl2/sdl2_video.cpp b/platform/sdl2/sdl2_video.cpp
index 41798e5..684a01b 100644
--- a/platform/sdl2/sdl2_video.cpp
+++ b/platform/sdl2/sdl2_video.cpp
@@ -91,26 +91,125 @@ private:
  const char* FormatStr() const { return "position(%d, %d); size(%d, %d); maximized(%d)"; }
 } op_window_state;
 
-static struct eOptionFullScreen : public xOptions::eOptionBool
+static struct eOptionVideoMode : xOptions::eOptionString
 {
- virtual const char* Name() const { return "full screen"; }
+ virtual const char* Name() const { return "video mode"; }
  virtual int Order() const { return 32; }
- virtual void Set(const bool& v)
+ // Признак полного экрана (эмулируем xOptions::eOptionBool)
+ operator bool() const { return mode.w != 0; }
+ // Вызывается из xOptions::Load() при чтении файла конфигурации.
+ // При наличии валидной опции присваиваем требуемый режим.
+ virtual void Value(const char* v)
  {
- eOptionBool::Set(v);
- Apply();
+ applied = false;
+ mode = {};
+ if(strlen(v))
+ {
+ SDL_DisplayMode conf = {};
+ if(sscanf(v, FormatStr(), &conf.w, &conf.h, &conf.refresh_rate) == 3)
+ {
+ mode = conf;
+ eOptionString::Value(v);
+ return;
+ }
+ }
+ eOptionString::Value(WindowedStr());
+ }
+ void Set(const SDL_DisplayMode& new_mode, bool already_applied = false)
+ {
+ mode = new_mode;
+ if(*this)
+ {
+ char buf[5+sizeof('*')+4+sizeof('@')+3+sizeof('\0')];
+ sprintf(buf, FormatStr(), mode.w, mode.h, mode.refresh_rate);
+ eOptionString::Value(buf);
+ }
+ else
+ eOptionString::Value(WindowedStr());
+ applied = already_applied;
+ if(!already_applied)
+ Apply();
+ }
+ virtual void Change(bool next = true)
+ {
+ // Если не произойдёт переключения на иной режим, используется Окно.
+ SDL_DisplayMode new_mode = {};
+ // Окно => полный экран, "родное" разрешение Рабочего стола.
+ if(*this == false)
+ SDL_GetDesktopDisplayMode(SDL_GetWindowDisplayIndex(window), &new_mode);
+ // "Родное" разрешение Рабочего стола => ТВ-режим 50Гц.
+ // Ищем режим с подходящей развёрткой.
+ else
+ {
+ int didx = SDL_GetWindowDisplayIndex(window);
+ int numDispModes = SDL_GetNumDisplayModes(didx);
+ SDL_DisplayMode em;
+ bool next50 = false;
+ for(int i = 0; i < numDispModes; ++i)
+ {
+ if(SDL_GetDisplayMode(didx, i, &em))
+ continue;
+// SDL_Log("eOptionVideoMode::Change() %d*%d@%d", em.w, em.h, em.refresh_rate);
+ if(em.refresh_rate == 50)
+ {
+ if(mode.refresh_rate != 50 || next50)
+ {
+ new_mode = em;
+ break;
+ }
+ if(mode.w == em.w && mode.h == em.h)
+ next50 = true;
+ }
+ }
+ }
+ Set(new_mode);
  }
+ // Обработчик впервые вызывается из xOptions::Load(), при этом
+ // Video subsystem has not been initialized.
+ // В связи с чем откладываем применение до Update(), работающей в цикле UpdateScreen().
  virtual void Apply()
  {
- SDL_SetWindowFullscreen(window, (*this) ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
+ Uint32 flags = 0;
+ if(*this)
+ {
+ flags = SDL_WINDOW_FULLSCREEN;
+ SDL_DisplayMode cm = {};
+ if(SDL_GetWindowDisplayMode(window, &cm))
+ return;
+ if(mode.w == cm.w && mode.h == cm.h)
+ flags = SDL_WINDOW_FULLSCREEN_DESKTOP;
+ }
+ if(SDL_SetWindowFullscreen(window, flags))
+ return;
+ if(flags == SDL_WINDOW_FULLSCREEN && SDL_SetWindowDisplayMode(window, &mode))
+ return;
+ applied = true;
  }
  void Update()
  {
- bool fs = (SDL_GetWindowFlags(window)&SDL_WINDOW_FULLSCREEN) != 0;
- if(*this != fs)
- Set(fs);
+ if(!applied)
+ {
+ Apply();
+ return;
+ }
+ if(*this == false)
+ return;
+ // Возможно, режим экрана изменён успешно, но отличается от требуемого
+ // (был выбран ближайший из поддерживаемых дисплеем).
+ // В таком случае определяем действительные параметры и сохраняем их.
+ SDL_DisplayMode cm;
+ if(SDL_GetWindowDisplayMode(window, &cm))
+ return;
+ if(mode.w != cm.w || mode.h != cm.h || mode.refresh_rate != cm.refresh_rate)
+ Set(cm, true);
  }
-} op_full_screen;
+
+private:
+ SDL_DisplayMode mode;
+ bool applied;
+ const char* FormatStr() const { return "%d*%d@%d"; }
+ const char* WindowedStr() const { return "window"; }
+} op_video_mode;
 
 bool InitVideo()
 {
@@ -124,7 +223,7 @@ bool InitVideo()
  Uint32 flags = SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE|SDL_WINDOW_ALLOW_HIGHDPI;
  if(maximized)
  flags |= SDL_WINDOW_MAXIMIZED;
- if(op_full_screen)
+ if(op_video_mode)
  flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
  window = SDL_CreateWindow(Handler()->WindowCaption(), pos.x, pos.y, size.x, size.y, flags);
  if(!window)
@@ -163,7 +262,7 @@ void DoneVideo()
 void UpdateScreen()
 {
  op_window_state.Update();
- op_full_screen.Update();
+ op_video_mode.Update();
 
  ePoint s;
  SDL_GetWindowSize(window, &s.x, &s.y);

Помимо выбора через меню настроек, можно попробовать вписать требуемое разрешение в файл конфигурации, в следующем формате (одно из значений):
1920*1080@50
1280*720@50
720*576@50

« Последнее редактирование: 11.05.2020 12:35:33 от trs »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #26 : 11.05.2020 12:53:17 »
Правда, не понял, есть ли данный эмулятор в виде пакета для ALT, и с какими опциями собирается, если есть.

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

Как я писал выше, оригинальный UnrealSpeccy позволял выбрать видеорежим с частотой вертикальной развёртки 50 Герц, что соответствует "железному" ZX-Specrum, ...

Угу. Только толку от этого никакого нет. Под HD Graphics нет ни одного валидного modes с 50-ю герцами.
« Последнее редактирование: 11.05.2020 13:02:17 от Speccyfighter »

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 284
Re: Отказ запуска spectrum-fuse
« Ответ #27 : 11.05.2020 13:31:00 »
Только толку от этого никакого нет.
Ещё как есть. Плавные скроллинги.  8-) Давно их не видел, вот и сделал. Так то эмулятор я не использую.
Под HD Graphics нет ни одного валидного modes с 50-ю герцами.
Как раз на таком и проверял. Вообще, видеорежимы зависят от монитора, он передаёт их в EDID. Телевизоры 50 Гц должны поддерживать.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: Отказ запуска spectrum-fuse
« Ответ #28 : 11.05.2020 14:37:19 »
Под HD Graphics нет ни одного валидного modes с 50-ю герцами.
Как раз на таком и проверял. Вообще, видеорежимы зависят от монитора, он передаёт их в EDID.

В теории 50 герц можно получить независимо от того что выдаст EDID:
$ xrandr | grep '\*'
   1024x768_50.00  50.00*

Но там надо скриптом парсить connected, текущее разрешение, запомнить всё это, генерировать Modeline и на output с возвратом в исходный режим на выходе. Но руками сегодня, всё это крутить никто не будет. Сегодня, всё что сложнее мышки, не пойдёт. Иначе пользоваться всем этим, будут только полтора землекопа. Тут линуксоиды сегодня с поисковиком не дружат. Какой уж тут к чёрту руками...

Телевизоры 50 Гц должны поддерживать.

Я про телевизор на спектруме забыл, когда достал и подключил 6105. А когда подключил EGA через делитель частоты, то телевизор на спектруме, был как страшный сон :-)
Схема делителя была простая. Её любой электрик спаяет.
« Последнее редактирование: 11.05.2020 14:48:41 от Speccyfighter »

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 284
Re: Отказ запуска spectrum-fuse
« Ответ #29 : 11.05.2020 15:05:55 »
В теории 50 герц можно получить независимо от того что выдаст EDID:
Технически, да. Когда-то так и делал. Было печально, когда модный тринитрон в режимах менее 55Гц отключался, а круглый 3NE — показывал.
Другое дело, что в UnrealSpeccyP используется SDL2, и, при попытке установить произвольное разрешение, в моих тестах выбирается ближайшее из списка поддерживаемых. Поэтому при переключении режимов перечисляются все возможные и среди них выбираются только 50-ти герцовые (поочереди). Руками можно вбить в конфиг режим с другой частотой, например
<video_mode>1920*1080@25</video_mode>и у меня эмулятор в нём работает, монитор показывает 1920x1080i (т.е. чересстрочная развёртка).

Я про телевизор на спектруме забыл, когда достал и подключил 6105. А когда подключил EGA через делитель частоты, то телевизор на спектруме, был как страшный сон
Имел ввиду современные ЖК-телевизоры. Они же картинку с эфира выводят в режиме 50Гц. Да и мониторы, по крайней мере некоторые, поддерживают.
« Последнее редактирование: 11.05.2020 15:09:42 от trs »