Просмотр полной версии : кривой опрос клавиатуры в играх и эмуляторы
Lethargeek
17.09.2018, 19:55
запустил намедни забавный трэш insert coins 2 - https://vtrd.in/gamez/i/INCOINS.ZIP
вижу, в некоторых эмулях (xpeccy, unreal) в самой игре клава не реагирует; в zx spin - нормально работает
копнул код - оказалось, дело в шестом бите порта #FE (EAR) - игра считает, что он должен быть нулевым
вопрос знатокам: такой способ опроса имеет под собой какие-то железные основания?
ну, типа, в фирменных спеках и правильных клонах при остановленной ленте бит нулевой
или дело в том, что все персонажи в цепочке от создания до релиза - эмуляторщики?
(причём релиз восьмилетней давности проверялся, видимо, не в анрыле)
и найдутся ли у кого-то еще примеры?
SoftLight
17.09.2018, 20:08
Вот именно в анрыле у меня все работало, а живого спека уже/ещё действительно не было. Конечно тестил, до конца проходил, как ещё загрузку левелов протестить. Буду дома прочекаю на разных железяках. Интересная тема.
Spectramine
17.09.2018, 20:12
запустил намедни забавный трэш insert coins 2 - https://vtrd.in/gamez/i/INCOINS.ZIP
вижу, в некоторых эмулях (xpeccy, unreal) в самой игре клава не реагирует; в zx spin - нормально работает
копнул код - оказалось, дело в шестом бите порта #FE (EAR) - игра считает, что он должен быть нулевым
вопрос знатокам: такой способ опроса имеет под собой какие-то железные основания?
ну, типа, в фирменных спеках и правильных клонах при остановленной ленте бит нулевой
или дело в том, что все персонажи в цепочке от создания до релиза - эмуляторщики?
(причём релиз восьмилетней давности проверялся, видимо, не в анрыле)
и найдутся ли у кого-то еще примеры?
Зависит от модели фирменного спека и ревизии платы - на 48м/128м 6й бит IN-порта #FE при отключенном магнитофоне завязан на биты бипера/магнитофона OUT-порта #FE - https://www.worldofspectrum.org/faq/reference/48kreference.htm#PortFE .
На +2А/+3 при отключенном магнитофоне в 6м бите IN-порта всегда 0. Некоторые игры (Doombase) рассчитывают на единицу в 6м бите, и не работают на +2A/+3.
Насчет всех клонов не в курсе, у меня на Орели вроде как тоже ноль читался с 6го бита при отключенном магнитофоне.
Lethargeek
17.09.2018, 20:37
Вот именно в анрыле у меня все работало,
значит, изменили с какой-то версии
- - - Добавлено - - -
на 48м/128м 6й бит IN-порта #FE при отключенном магнитофоне завязан на биты бипера/магнитофона OUT-порта #FE
хм, надо глянуть, мб игра предварительно пыталась бит обнулить (только это всё равно ненадёжно)
и найдутся ли у кого-то еще примеры?
посмотри Samurai Warrior
BlackCat вообще назвал это фирменной защитой от пиратских копий спека :v2_smile:
SoftLight
17.09.2018, 22:21
Вот сначала качаете релизы не понятно откуда а потом жалуетесь :)
да ведь все было исправлено на следующий день еще 8 лет назад и опубликовано тут же! )))
Lethargeek
18.09.2018, 00:12
Вот сначала качаете релизы не понятно откуда а потом жалуетесь
и не говори, левый сайт какой-то с кучей старья, где никто за столько лет не заметил :D
да ведь все было исправлено на следующий день еще 8 лет назад и опубликовано тут же! )))
быстро ты исправ...ленную версию отыскал ;)
- - - Добавлено - - -
unreal ok, но на xpeccy клава так и не заработала :v2_dizzy_stupid:
SoftLight
18.09.2018, 11:37
unreal ok, но на xpeccy клава так и не заработала :v2_dizzy_stupid:
А это типа 'норм' для целого ряда игр от испанцев, вот тут (http://zx-pk.ru/threads/14077-teodoro-no-sabe-volar-by-retroworks.html?p=324038&viewfull=1#post324038) обсуждали.
это типа 'норм' для целого ряда игр от испанцев
скорее `норм` для компилятора. который так делает опрос
Black Cat / Era CG
18.09.2018, 16:49
unreal ok, но на xpeccy клава так и не заработала
В тред вызывается @SAM style! SAM style, приди!
SAM style
18.09.2018, 17:19
В тред вызывается @SAM style! SAM style, приди!
А что тут я... нужны те, у кого реальное железо есть - затестировать состояние бита мофона в #FE, когда мофон отключен вообще и когда он подключен но не включен. емнип, пзу-шная загрузка мигает бордюром, основываясь на этом бите. если он 0 при выключенном мофоне, то мигания при load "" вообще не должно быть.
Bit 6 of IN-Port 0xfe is the EAR input bit. The value read from this port is not trivial, as can be seen from the following program:
10 OUT 254,BIN 11101111
20 PRINT IN 254
30 OUT 254,BIN 11111111
40 PRINT IN 254
50 GOTO 10
For a correct test do not press any key while running, and have no EAR input.
If the output is 191,255,191,255 etc, you are on real Spectrum Issue 3.
If output is always 191 or always 255, change the value in line 10 to BIN 11100111.
If output is then 191,255,191,255 etc, then you are on Spectrum Issue 2.
If output is still always 191 or always 255 you are on Spectrum emulator.
SoftLight
18.09.2018, 18:58
Я когда-то случайно заметил, что zxevo выдает при чтении из порта то 191 то 255. Оказывается, это правильно.
Если испанцы чекают 6 бит, возможно, они так синхонизируют нажатия клавиш с другими процедурами движка.
Spectramine
18.09.2018, 19:10
Не чекают, они просто считают, что там 0. По уму надо маскировать все биты, кроме клавиатурных. Ибо и магнитофон может на паузе стоять и шуметь, и на многих клонах без магнитофона читается то 0, то 1.
SAM style
18.09.2018, 19:42
Bit 6 of IN-Port 0xfe is the EAR input bit. The value read from this port is not trivial, as can be seen from the following program:
10 OUT 254,BIN 11101111
20 PRINT IN 254
30 OUT 254,BIN 11111111
40 PRINT IN 254
50 GOTO 10
For a correct test do not press any key while running, and have no EAR input.
If the output is 191,255,191,255 etc, you are on real Spectrum Issue 3.
If output is always 191 or always 255, change the value in line 10 to BIN 11100111.
If output is then 191,255,191,255 etc, then you are on Spectrum Issue 2.
If output is still always 191 or always 255 you are on Spectrum emulator.
Вот и у меня и на 128К, и на скорпионе было периодично 191/255, я это запомнил и впилил в свой эмуль - там при выключенном мофоне бит меняется с периодичностью 1/2 сек.
Spectramine
18.09.2018, 22:37
На фирменных Спектрумах значение 6го бита (чтения магнитофона) при отсутствии магнитофона не периодично, а задается битом динамика порта #FE (на Issue 2 48к ещё и битом вывода на магнитофон) - если в бит динамика (4й бит) был выведен 0, с 6го бита читается 0, если была выведена 1, читается 1. Обратите внимание на строки 10 и 30.
при желании можно и такой бред найти
"при проектировании ZX Spectrum Альтвассеру требовалось приспособить компьютер для работы как с бытовыми, так и со специализированными магнитофонами, не забывая при этом о требовании Синклера максимально удешевить конструкцию. Следуя распоряжению, для упрощения конструкции, предусилитель-ограничитель был вынесен Альтвассером в ULA. Но кроме этого Альтвассер так же встроил в ULAсистему программной настройки уровня входного сигнала, позволявшую программно выбирать уровень входного сигнала соответствующего типу используемого магнитофона. Программное управление чувствительностью предусилителя-ограничителя должно было осуществляться в зависимости от состояния D3 #FE.
Spectramine
18.09.2018, 23:45
Поведение 6-го бита, описанное на сайте wos, реализовано в Spectaculator, SpecEmu, ZXspin, Fuse и ZXMAK2. Ну и любой владелец фирменного спека 48/128/серого +2 (не +2А/+3) может проверить.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot