На главную Назад
Добро пожаловать, уважаемый посетитель!

Адаптер управления играми подключает к системе джойстики и другие

органы управления игрой. Это все аналоговые устройства - т.е., они

не могут работать с нулями и единицами. Их входные значения - это

сопротивление, которое ЭВМ не может прочитать непосредственно.

Адаптер управления играми преобразует значение сопротивления в

нечто такое, с чем ЭВМ может иметь дело.

 

Адаптер управления играми не преобразует значение сопротивления

непосредственно в двоичное число. Вместо этого адаптер преобразует

значение сопротивления во временную задержку. Чем больше

сопротивление, тем больше временная задержка. Эту задержку

компьютер может измерить. Преобразовать задержку в число,

соответствующее положению джойстика, можно программным способом.

Нашей задачей является написание программы, которая преобразует

временную задержку в число.

 

Адаптер управления играми обслуживает до четырех входов

сопротивления. Механизм временной задержки по каждому из этих

входов подключен к отдельному биту порта ввода-вывода 201H. Когда

вы выводите любое число в порт 201H, четыре его младших бита

сбрасываются в 0. Биты возвращаются в состояние 1 после некоторго

интервала времени. Этот интервал времени определяется значением

сопротивления, подключенного к адаптеру. Программа на Фиг. 8.18 -

это пример определения значения сопротивления двух из четырех

входных портов. Эта программа использует простой метод. Вместо

определения временной задержки всех четырех портов одновременно,

она обслуживает их последовательно. Количество времени, нужного для

определения одной задержки, невелико. В результате, поочередная

обработка этих задержек вместо одновременной выполняется без

проблем.

Microsoft (R) Macro Assembler Version 5.001/1/80 04:05:57

Фиг. 8.18 Адаптер управления играмиPage1-1

 

PAGE ,132

TITLE Фиг. 8.18 Адаптер управления играми

 

= 0201 GAME_PORT EQU 201H

 

0000 STACK SEGMENT STACK

00000040[ DW 64 DUP (?)

????

]

0080 STACK ENDS

 

0000 CODE SEGMENT

ASSUMECS:CODE

0000 GAME_CONTROL PROC FAR

00001E PUSH DS ; Адрес возврата

00012B C0 SUB AX, AX

000350 PUSH AX

0004BA 0201 MOV DX, GAME_PORT

0007B8 B000 MOV AX, 0B000H ; Сегмент дисплейной памяти

000A8E D8 MOV DS, AX

 

000CB5 21 MOV CH, 21H ; Символ, который будет записываться в буфер

000EB1 00 MOV CL, 0

0010 WRITE_LOOP:

0010B4 01 MOV AH, 1 ; Выбор координаты X

0012E8 0042 R CALL POSITION

00158B D8 MOV BX, AX ; Сохранение координаты X в буфере

0017D1 EB SHR BX, 1

0019D1 EB SHR BX, 1 ; Деление на 4

 

Фиг. 8.18 Адаптер управления играми (начало)

001BB4 02 MOV AH, 2 ; Выбор координаты Y

001DE8 0042 R CALL POSITION

0020D0 E8 SHR AL, 1

0022D0 E8 SHR AL, 1

0024D0 E8 SHR AL, 1

0026D0 E8 SHR AL, 1 ; Деление на 16

0028B4 A0 MOV AH, 160

002AF6 E4 MUL AH ; Преобразование в смещение в буфере

002C03 D8 ADD BX, AX

002E88 2F MOV [BX], CH ; Сохранение символа

0030EC IN AL, DX

003124 10 AND AL, 10H

00333A C1 CMP AL, CL

003574 D9 JE WRITE_LOOP

00378A C8 MOV CL, AL

003980 F9 10 CMP CL, 10H

003C75 D2 JNE WRITE_LOOP

003EFE C5 INC CH ; Следующий символ

0040EB CE JMP WRITE_LOOP

 

0042 GAME_CONTROL ENDP

 

;-----В AH бит маски

 

0042 POSITION PROC NEAR

004251 PUSH CX

00432B C9 SUB CX, CX ; Начальное значение для цикла ввода

0045EE OUT DX, AL ; Запуск таймера

0046 POS_LOOP:

0046EC IN AL, DX

004784 C4 TEST AL, AH

0049E0 FB LOOPNEPOS_LOOP ; Цикл пока 1 - таймер не закончил отсчет

004BB8 0000 MOV AX, 0

004E2B C1 SUB AX, CX ; Определение значения счетчика

005059 POP CX ;в диапазоне 0-255

0051C3 RET

0052 POSITION ENDP

0052 CODE ENDS

END

 

Фиг. 8.18 Адаптер управления играми (продолжение)

 

Последняя часть программы на Фиг. 8.18 берет позицию X-Y,

определенную по входу от джойстика, и записывает символ в

соответствующую позицию дисплея. Адаптер управления играми также

допускает четыре переключающих ввода, значения которых можно

прочитать в старших четырех битах порта 201H. Программа в примере

опрашивает один из этих битов переключения, чтобы перейти от одного

символа к другому и вывести его на экран.


 

Mail.ru