Как это корректно сделать? А то меня как-то смущает что-то типа Велесофтовского IF IN 31 > 127 THEN... :(
Вид для печати
Как это корректно сделать? А то меня как-то смущает что-то типа Велесофтовского IF IN 31 > 127 THEN... :(
Привет тёзка. Взломай любую игру и просмотри как там написано. А если тебе нужно на бейсике,- то 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, то есть влево и вправо - значит порт есть. Обычно так проверяют. Но есть такие клоны, у которых этот порт инвертирован.
Может тогда не надо изголяться, а сделать ТОЛЬКО принудительно? А то получится, если я случайно нажму кнопочки джоя во время проверки мне кемпстон отрубит... :(
частенько выводят надпись "kempston joy y/n?"
Что я почти и сделал в релизе Monty...
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
Лично я в файтере сделал так:
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
На эмуле работает, по логике вещей должно работать и на железе, вот только как это обстоит в отношении советских клонов? Не знаю. Может кто-нибудь проверит?