Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Для начинающих (http://zx-pk.ru/forumdisplay.php?f=43)
-   -   Проверка на наличие Kempston Joystick (http://zx-pk.ru/showthread.php?t=10972)

Slider 27th September 2009 17:04

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

lisica 27th September 2009 22: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 27th September 2009 23:15

Quote:

Originally Posted by Slider (Post 221823)
Как это корректно сделать?

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

psb 28th September 2009 09:30

Quote:

Originally Posted by Slider (Post 221823)
А то меня как-то смущает

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

Slider 28th September 2009 11:23

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

psb 28th September 2009 19:57

Quote:

Originally Posted by Slider (Post 221966)
Может тогда не надо изголяться, а сделать ТОЛЬКО принудительно? А то получится, если я случайно нажму кнопочки джоя во время проверки мне кемпстон отрубит...

можно и так. хотя отрубание кемпстона по этой причине - встречается:)

daniel 5th October 2009 12:43

частенько выводят надпись "kempston joy y/n?"

Slider 5th October 2009 23:45

Что я почти и сделал в релизе Monty...

VELESOFT 17th October 2009 04:01

Quote:

Originally Posted by Slider (Post 221823)
Как это корректно сделать? А то меня как-то смущает что-то типа Велесофтовского 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 21st October 2009 20: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 21st October 2009 21:10

Quote:

Originally Posted by Destr (Post 227021)
как это обстоит в отношении советских клонов? Не знаю

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

Клон 21st October 2009 22:04

Quote:

Originally Posted by Slider (Post 221823)
Проверка на наличие Kempston Joystick

а нафиг?

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

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

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

VELESOFT 28th October 2009 01:14

Quote:

Originally Posted by Destr (Post 227021)
Лично я в файтере сделал так:
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:
[IMG]ftp://ftp.worldofspectrum.org/pub/sinclair/technical-docs/KempstonJoystickInterface_Schematics.gif[/IMG]
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 28th October 2009 01:23

Quote:

Originally Posted by VELESOFT (Post 228324)
This detection will work incorrect with old KEMPSTON interfaces:
[IMG]ftp://ftp.worldofspectrum.org/pub/sinclair/technical-docs/KempstonJoystickInterface_Schematics.gif[/IMG]
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 28th October 2009 15:13

Quote:

Originally Posted by Destr (Post 228325)
На советских вариантах zx вроде прога срабатывает,

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

IRGL 19th November 2009 23:56

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


All times are GMT +4. The time now is 00:27.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.