Как это корректно сделать? А то меня как-то смущает что-то типа Велесофтовского IF IN 31 > 127 THEN...
Как это корректно сделать? А то меня как-то смущает что-то типа Велесофтовского IF IN 31 > 127 THEN...
Ave ZX!
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Привет тёзка. Взломай любую игру и просмотри как там написано. А если тебе нужно на бейсике,- то 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, то есть влево и вправо - значит порт есть. Обычно так проверяют. Но есть такие клоны, у которых этот порт инвертирован.
Последний раз редактировалось lisica; 27.09.2009 в 21:36.
Робик 1024(пентагоновские тайминги),+ 7Мц+, 2AY(TS),+ контроллер дисковода,+ 3.5,+ 5.25 флоп,+CMOS,+ mouse(caro),+ Flash.
Pentagon 128(1991г.)+YМ
программатор 2732-27512.
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Может тогда не надо изголяться, а сделать ТОЛЬКО принудительно? А то получится, если я случайно нажму кнопочки джоя во время проверки мне кемпстон отрубит...
Последний раз редактировалось Slider; 28.09.2009 в 10:29.
Ave ZX!
частенько выводят надпись "kempston joy y/n?"
Что я почти и сделал в релизе Monty...
Ave ZX!
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
На эмуле работает, по логике вещей должно работать и на железе, вот только как это обстоит в отношении советских клонов? Не знаю. Может кто-нибудь проверит?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)