Небольшой драйвер Sinclair-джойстиков
Полезным он окажется при программировании на Бейсике. В отличии от Kempston джойстика, который можно опросить через порт 31 (если память не изменяет) прямо Бейсик-командой, с Sinclair джойстиком дела обстоят хуже. Облегчит эту задачу преведенный драйвер. Используется формат 1,2,3,4,5 для Sinclair II и 6,7,8,9,0 для Sinclair I.
Код самого драйвера (адрес 65129):
Код:
ORG FE69h
PUSH AF
PUSH BC
LD B, 00011111b
LD A, 239
IN A, (254)
AND B
XOR B
LD (23670), A
LD A, 247
IN A,(254)
AND B
XOR B
LD (23671), A
POP BC
POP AF
JP 56
Откомпилированный вариант (для упрощения непосредственного ввода):
Код:
245
197
6, 31
62, 239
219, 254
160
168
50, 118, 92
62, 247
219, 254
160
128
50, 119, 92
193
241
195, 56, 0
Для активации работы драйвера используем такую подпрограмму:
Код:
PUSH AF
DI
LD A, 9
LD I, A
IM2
EI
POP AF
RET
Откомпилированная: 254, 243, 62, 9, 237, 71, 237, 94, 251, 241, 201
Для остановки работы драйвера исполняем следующую процедуру:
Откомпилированная: 243, 237, 86, 251, 201
В результате состояние джойстика Sinclair I будет записываться в системную переменную SEED (адрес: 23670), а Sinclair II в SEED+1 (23671). О состоянии джойстика говорят отдельные биты: стрельбы - D0, вверх - D1, вниз - D2, вправо - D3, влево - D4. Если бит установлен - клавиша нажата, если сброшен - не нажата. Т.к. системная переменная SEED используется генератором случайных чисел, то может оказаться необходимым изменить адрес записи состояний джойстиков (если это нарушит нормальную генерацию псевдослучайных чисел).