Сделал версию с автообнаружением Kempston-джойстика.
Вид для печати
При считывании значения Kempston-джойстика проверяется старший бит. Если он != 0, то считается что джойстик отсутствует и дальнейший опрос не производится. Проверка происходит при каждом опросе джойстика т.к. порт аттрибутов может дать ложный 0. Это занимает дополнительные такты, но тут, кажется, не критично.
- - - Добавлено - - -
Мда, а для четырёх кнопок то не подойдёт. Есть вообще какой-то стандарт на >1 кнопку?
В Кемпстоне максимум была одна дополнительная кнопка (D5 вроде). В моем варианте (и это не единственная игра, хоть их и не много) их три, то есть D5,D6,D7.
Если шина нестабильная, то там может быть все, что угодно.
Общественное мнение склоняется к том, что автоопределение - зло, прямой вопрос - добро.
- - - Добавлено - - -
А еще фигня вот какая. Щас меня закидают, но... Новые игры под доп. кнопки можно ожидать только по трем причинам:
а) делается адаптер пада от Сеги, который поддерживает все 8 бит Кемпстона (8 кнопок),
б) есть вполне мод базовой конфы для Эволюшн, где такой джой поддержан, я на нем играю,
в) такой джой поддержан в Нексте и некоторые игры, которые пишутся и под него, и под обычный спек, рассчитаны на него в обеих версиях (правда тем у кого кнопка, 1 играть тоже можно, просто придется к клаве тянуться иногда).
И все эти три случая придерживаются одинаковой раскладки.
Вот картинка, которую я нарисовал, опираясь на инфу, так щас у меня в Эве.
https://pic.maxiol.com/images2/15900...85.gamepad.png
По ней же уже сделан прототип, о нем вот пост: https://zx-pk.ru/threads/28489-penta...=1#post1064595
Ну и ссыль на доку про Некст: https://wiki.specnext.dev/Kempston_Joystick
На старшие биты порта кемпстона может быть заведено все что угодно, так что автоопределение по битам D5...D7 может дать ложный результат.
И да. г) Будующий СуперПент тоже будет поддерживать 8 кнопий https://zx-pk.ru/threads/28489-penta...od/page65.html
Начато наступление всеми группами по всем фронтам.
- - - Добавлено - - -
Поэтому автоопределение и плохо. По идее я ваще делал эту версию для себя. Но решил поделиться. Она именно отдельно под такой пад. На обычном Кемпстоне кнопок слишком мало.
Как вариант - проверять наличие джойстика сравнением считанного значения с FF когда нет отрисовки. Если нет подтяжки ШД - это не сработает, но отсутствие подтяжки само по себе серьёзная проблема.
Хосспадe, как дети.
вот процедура теста кемпстона (5 кнопочного)
Код:
test_kemp
ld bc,#001f
ld l,b
ld e,b
i_00
in a,(c)
or e
ld e,a
dec l
jr nz,i_00
ld a,e
and c
jr z,kemp_present
ld a,#c9
kemp_present
ld (kemp_act),a
ret
вот тут его использование
жырным помечена маска кемпстона.Код:scan_ctrl
ld bc,k_table
ld de,kb_buf
exx
ld b,8
scan_ctrl0
exx
ld a,(bc)
inc bc
ld l,a
ld h,0
add hl,de
ld a,(bc)
inc bc
and (hl)
cp 1
exx
rr e
djnz scan_ctrl0
ld a,e
kemp_act ret
ld bc,#001f
in a,(c)
and #1f
or e
ret
если для начала потестировать сам кемпстон
а потом осторожно пошарить доп биты и ввести их расширением маски в выделенном жырненьким
то все будет работать безо всяких проблем.
если нажато что либо на кемстоне
кемстон не определитсо
например из бута с кемстоном мы что то выбрали при помощи кемстона
цикл бесполезен
биты накапливаются по or-у
если поймали нажатие хоть один раз (как раз момент отпускание клавиши при выборе в буте)
то все кемстон не определится
(актуально при работе с рам дисках с мгновенной загрузкой)
- - - Добавлено - - -
так что где дети непонятно
- - - Добавлено - - -
конечно не включение кемстона когда он есть
лучше чем
включение кемстона когда его нет...