PDA

Просмотр полной версии : Проверка на наличие Kempston Joystick



Slider
27.09.2009, 16:04
Как это корректно сделать? А то меня как-то смущает что-то типа Велесофтовского IF IN 31 > 127 THEN... :(

lisica
27.09.2009, 21:29
Привет тёзка. Взломай любую игру и просмотри как там написано. А если тебе нужно на бейсике,- то 10 LET A=IN 31
20 IF A=0 THEN GO TO 10
И в А получаешь результат 1- влево, 2- вправо, 4 и 8 не помню, но там вверх и вниз, 16- стрельба
только это работает если порт, при не нажатых клавишах выдаёт 0.
Ну, а, если тебе нужно для определения любого клона, то желательно на асме.

---------- Post added at 20:29 ---------- Previous post was at 20:15 ----------

Во, блин дочитался. определяй если вместе не нажаты 1 и 2, то есть влево и вправо - значит порт есть. Обычно так проверяют. Но есть такие клоны, у которых этот порт инвертирован.

Ewgeny7
27.09.2009, 22:15
Как это корректно сделать?
Корректно - в меню пользователя предложить ему руление джойстиком. Если откажется - значит или джоя нет, или ему нафик надо эту ручку дергать :)

psb
28.09.2009, 08:30
А то меня как-то смущает
и правильно делает, что смущает. на ленинграде по дефолту 3 старшых бита = 1. почти правильное решение: за некоторое время (больше 1 инта) проверять 5 младших бит, что они не дергаются и равны 0. а предусмотреть принудительное вкл/выкл - обязательно.

Slider
28.09.2009, 10:23
Может тогда не надо изголяться, а сделать ТОЛЬКО принудительно? А то получится, если я случайно нажму кнопочки джоя во время проверки мне кемпстон отрубит... :(

psb
28.09.2009, 18:57
Может тогда не надо изголяться, а сделать ТОЛЬКО принудительно? А то получится, если я случайно нажму кнопочки джоя во время проверки мне кемпстон отрубит...
можно и так. хотя отрубание кемпстона по этой причине - встречается:)

daniel
05.10.2009, 11:43
частенько выводят надпись "kempston joy y/n?"

Slider
05.10.2009, 22:45
Что я почти и сделал в релизе Monty...

VELESOFT
17.10.2009, 03:01
Как это корректно сделать? А то меня как-то смущает что-то типа Велесофтовского IF IN 31 > 127 THEN... :(

Original old kempston joystick interfaces for ZX Spectrum don't use data lines D7-D5. IN 31 can return on this hardware undefined values ( floating bus / attribute / pull-up / zero values )

Modern joystick interfaces return always value 0 on D7-D5 and is possible detect joy interface if IN 31 return:
D7 must contain 0 (D4-D6 can be used for three joy buttons) - 0xxxxxxx
D3 and D2 can't contain values 1 - xxxx11xx
D1 and D0 can't contain values 1 - xxxxxx11
Joystick port 31 (for joy detect only) must be read after interrupt - HALT+IN A,(31) for return corect data value (port 31 can return screen attribute value if joy interface absent)

complette test:
EI
HALT
LD E,0
LD BC,#001F
IN B,(C)
LD A,B
RLCA
RET C
LD A,B
AND 3
CP 3
RET Z
LD A,B
RRCA
RRCA
AND 3
CP 3
RET Z
LD E,1
RET

;this code detect joystick interface and return E=1 if joy connect / E=0 if joy absent

Destr
21.10.2009, 19:39
Лично я в файтере сделал так:
LD B,0
LD H,0
KT1
IN A,(#1F)
AND #E0
OR H
LD H,A
DJNZ KT1
LD A,H
OR A
JR Z,KJYES

Если джойстик подключен - то произойдёт переход на метку KJYES
На эмуле работает, по логике вещей должно работать и на железе, вот только как это обстоит в отношении советских клонов? Не знаю. Может кто-нибудь проверит?

Black_Cat
21.10.2009, 20:10
как это обстоит в отношении советских клонов? Не знаюсмотря что ты хочешь определить - наличие интерфейса или самого джойстика. На многих отечественных клонах по умолчанию старшие разряды посажены в ноль, а должно быть по идее только когда воткнут джойстик.

Addison
21.10.2009, 21:04
Проверка на наличие Kempston Joystick
а нафиг?

Обычно в играх имеется меню:

1. клавиатура
2. синклер 1
3. синклер 2
4. кемстон
5. назначение клавиш

Стандартная штука.
Некоторые программы делают безусловную поддержку джоя. Например, некоторые буты наряду с курсором опрашивают джоя.

VELESOFT
28.10.2009, 00:14
Лично я в файтере сделал так:
LD B,0
LD H,0
KT1
IN A,(#1F)
AND #E0
OR H
LD H,A
DJNZ KT1
LD A,H
OR A
JR Z,KJYES

Если джойстик подключен - то произойдёт переход на метку KJYES
На эмуле работает, по логике вещей должно работать и на железе, вот только как это обстоит в отношении советских клонов? Не знаю. Может кто-нибудь проверит?

This detection will work incorrect with old KEMPSTON interfaces:
ftp://ftp.worldofspectrum.org/pub/sinclair/technical-docs/KempstonJoystickInterface_Schematics.gif
IN 31 return on D7 and D6 floating data values (log.1 from pull-up or part of attribute byte from ZX screen). If software test joystick after interrupt (ULA show border area) this interface return at D7 and D6 different values on different machines.

Destr
28.10.2009, 00:23
This detection will work incorrect with old KEMPSTON interfaces:
ftp://ftp.worldofspectrum.org/pub/sinclair/technical-docs/KempstonJoystickInterface_Schematics.gif
IN 31 return on D7 and D6 floating data values (log.1 from pull-up or part of attribute byte from ZX screen). If software test joystick after interrupt (ULA show border area) this interface return at D7 and D6 different values on different machines.

Из всего вышесказанного понял только то что есть возражения по поводу корректности теста на различных машинах. К тому-же приведена схема Atari.
На советских вариантах zx вроде прога срабатывает, но если есть альтернатива - давайте рассмотрим.

psb
28.10.2009, 14:13
На советских вариантах zx вроде прога срабатывает,
на советском ленинграде прога не сработает.
корректнее было бы делать не AND #E0, а AND #1F. если ниче в этих разрядах не появлялось - опрашивать джой как минимум безопасно. правда задержку бы побольше сделать, а не 256 раз.

IRGL
19.11.2009, 22:56
Клон, привет,нужна твоя помощь плиз,раньше с ума сходил от игрушки Gunfright вот сейчас замучила настольгия в нете пытался скачать эту игру не выходит она не открывается надо типа имуль но у меня не получается если не сложно можешь написать подробную схему как мне загрусить всё это дело чтоб я мог играть в эту игру на буке( у меня SONY винда виста помоги если можешь я уж месяц мучяюсь я чайник в компах)