
Сообщение от
reddie
...
mvi l,07FH ; код "вниз"
rlc ; проверяем бит направления (3-й, значение 8)
ret c
...
Не помню, когда последний раз пользовался возвратом из подпрограммы по условию...
В i8080 это вроде-бы мнемоника не "RET C", а "RC" (но зависит от компилятора, возможно и ret c переварит).
Но если бы я делал обработку джойстика, то я бы вообще не занимался её обработкой, а наложил бы считанный код на код считанный из клавы, преобразовав его предварительно с помощью таблицы. Там таблицы всего 16 байт, из них полезных 9 байт.
В таблице коды соответствия состояния джойстика и клавиш клавиатуры.
Для простоты, таблицу расположил-бы начиная с адреса 0103h, тогда получился-бы примерно такой код.
Код:
in 06
ani 00Fh
adi 003h
sta adrk+1
adrk:
lda 0103h
mov b,a
lda KEYS (адрес где хранится уже считанный код клавы ряда с клавишами курсора)
ana b (наложил джойстик на клавиши)
sta KEYS (и пусть теперь основной код обработки нажатий клавиш разбирается)
;
in 06
ani 0C0h (выделение кнопок джойстика)
... тут код совмещения с нужными клавишами клавы, их меньше - таблица уже не нужна.
Главное преимущество, с моей точки зрения, что эта часть программы всегда выполняется одинаковое количество тактов вне зависимости от того используется-ли джойстик, и какие контакты на нём замкнуты... предсказуемость времени выполнения кода...
Если "нормализовать" код считанный из УСПИД-а, то и его таким методом можно юзать... таблица там будет возможно другая, но дело поправимое...