Меню сайта

Урок 145. Адаптер управления играми

Адаптер управления играми подключает ксистеме джойстики и другие
— — — органы управления игрой. Это всеаналоговые устройства — т.е., они
— — — не могут работать с нулями и единицами. Ихвходные значения — это
— — — сопротивление, которое ЭВМ не может прочитатьнепосредственно.
— — — Адаптер управления играми преобразуетзначение сопротивления в
— — — нечто такое, с чем ЭВМ может иметь дело.

— — — — — Адаптер управления играми не преобразуетзначение сопротивления
— — — непосредственно в двоичное число. Вместоэтого адаптер преобразует
— — — значение сопротивления во временнуюзадержку. Чем больше
— — — сопротивление, тем больше временнаязадержка. Эту задержку
— — — компьютер может измерить. Преобразоватьзадержку в число,
— — — соответствующее положению джойстика, можнопрограммным способом.
— — — Нашей задачей является написаниепрограммы, которая преобразует
— — — временную задержку в число.

— — — — — Адаптер управления играми обслуживает дочетырех входов
— — — сопротивления. Механизм временной задержкипо каждому из этих
— — — входов подключен к отдельному биту портаввода-вывода 201H. Когда
— — — вы выводите любое число в порт 201H,четыре его младших бита
— — — сбрасываются в 0. Биты возвращаются всостояние 1 после некоторго
— — — интервала времени. Этот интервал времениопределяется значением
— — — сопротивления, подключенного к адаптеру.Программа на Фиг. 8.18 —
— — — это пример определения значениясопротивления двух из четырех
— — — входных портов. Эта программа используетпростой метод. Вместо
— — — определения временной задержки всехчетырех портов одновременно,
— — — она обслуживает их последовательно.Количество времени, нужного для
— — — определения одной задержки, невелико. Врезультате, поочередная
— — — обработка этих задержек вместоодновременной выполняется без
— — — проблем.

— — — — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — — — 1/1/8004:05:57
— — — — — — — — — — — -Фиг. 8.18 Адаптер управления играми — — — — — — — — — — — — — — — — — — — — -Page — — — — 1-1

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -PAGE ,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -TITLE — — — — — Фиг. 8.18 Адаптер управления играми

— — — — — — — — — — — -= 0201 — — — — — — — — — — — — — — — GAME_PORT — EQU — 201H

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — STACK — — — — — SEGMENT STACK
— — — — — — — — — — — -0000 — — — — — 0040[ — — — — — — — — — — — — — — — — — — DW — — 64 DUP (?)
— — — — — — — — — — — — — — — — — — — — ????
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ]
— — — — — — — — — — — -0080 — — — — — — — — — — — — — — — — — — — — — — — STACK — — — — — ENDS

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — CODE SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -ASSUME -CS:CODE
— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — — — — — — GAME_CONTROL — — — — PROC FAR
— — — — — — — — — — — -0000 — — — — — 1E — — — — — — — — — — — — — — — — — — — — — PUSH DS — — — — — — — — — Адрес возврата
— — — — — — — — — — — -0001 — — — — — 2B C0 — — — — — — — — — — — — — — — — — — SUB — AX, AX
— — — — — — — — — — — -0003 — — — — — 50 — — — — — — — — — — — — — — — — — — — — — PUSH AX
— — — — — — — — — — — -0004 — — — — — BA 0201 — — — — — — — — — — — — — — — -MOV — DX, GAME_PORT
— — — — — — — — — — — -0007 — — — — — B8 B000 — —
— — — — — — — — — — — — — -MOV — AX, 0B000H — Сегмент дисплейной памяти
— — — — — — — — — — — -000A — — — — — 8E D8 — — — — — — — — — — — — — — — — — — MOV — DS, AX

— — — — — — — — — — — -000C — — — — — B5 21 — — — — — — — — — — — — — — — — — — MOV — CH, 21H — — — — Символ, которыйбудет записываться в буфер
— — — — — — — — — — — -000E — — — — — B1 00 — — — — — — — — — — — — — — — — — — MOV — CL, 0
— — — — — — — — — — — -0010 — — — — — — — — — — — — — — — — — — — — — — — WRITE_LOOP:
— — — — — — — — — — — -0010 — — — — — B4 01 — — — — — — — — — — — — — — — — — — MOV — AH, 1 — — — — — — — — — — — — Выборкоординаты X
— — — — — — — — — — — -0012 — — — — — E8 0042 R — — — — — — — — — — — — — — CALL POSITION
— — — — — — — — — — — -0015 — — — — — 8B D8 — — — — — — — — — — — — — — — — — — MOV — BX, AX — — — — Сохранение координаты X в буфере
— — — — — — — — — — — -0017 — — — — — D1 EB — — — — — — — — — — — — — — — — — — SHR — BX, 1
— — — — — — — — — — — -0019 — — — — — D1 EB — — — — — — — — — — — — — — — — — — SHR — BX, 1 — — — — — — — — — — — — Делениена 4

— — — — — — — — — — — — — — — — — — — — — — — -Фиг. 8.18 Адаптер управления играми (начало)
— — — — — — — — — — — -001B — — — — — B4 02 — — — — — — — — — — — — — — — — — — MOV — AH, 2 — — — — — — — — — — — — Выборкоординаты Y
— — — — — — — — — — — -001D — — — — — E8 0042 R — — — — — — — — — — — — — — CALL POSITION
— — — — — — — — — — — -0020 — — — — — D0 E8 — — — — — — — — — — — — — — — — — — SHR — AL, 1
— — — — — — — — — — — -0022 — — — — — D0 E8 — — — — — — — — — — — — — — — — — — SHR — AL, 1
— — — — — — — — — — — -0024 — — — — — D0 E8 — — — — — — — — — — — — — — — — — — SHR — AL, 1
— — — — — — — — — — — -0026 — — — — — D0 E8 — — — — — — — — — — — — — — — — — — SHR — AL, 1 — — — — — — — — — — — — Делениена 16
— — — — — — — — — — — -0028 — — — — — B4 A0 — — — — — — — — — — — — — — — — — — MOV — AH, 160
— — — — — — — — — — — -002A — — — — — F6 E4 — — — — — — — — — — — — — — — — — — MUL — AH — — — — — — — — — Преобразованиев смещение в буфере
— — — — — — — — — — — -002C — — — — — 03 D8 — — — — — — — — — — — — — — — — — — ADD — BX, AX
— — — — — — — — — — — -002E — — — — — 88 2F — — — — — — — — — — — — — — — — — — MOV — [BX], CH — — — Сохранениесимвола
— — — — — — — — — — — -0030 — — — — — EC — — — — — — — — — — — — — — — — — — — — — IN — — AL,DX
— — — — — — — — — — — -0031 — — — — — 24 10 — — — — — — — — — — — — — — — — — — AND — AL, 10H
— — — — — — — — — — — -0033 — — — — — 3A C1 — — — — — — — — — — — — — — — — — — CMP — AL, CL
— — — — — — — — — — — -0035 — — — — — 74 D9 — — — — — — — — — — — — — — — — — — JE — — WRITE_LOOP
— — — — — — — — — — — -0037 — — — — — 8A C8 — — — — — — — — — — — — — — — — — — MOV — CL, AL
— — — — — — — — — — — -0039 — — — — — 80 F9 10 — — — — — — — — — — — — — — — CMP — CL, 10H
— — — — — — — — — — — -003C — — — — — 75 D2 — — — — — — — — — — — — — — — — — — JNE — WRITE_LOOP
— — — — — — — — — — — -003E — — — — — FE C5 — — — — — — — — — — — — — — — — — — INC — CH — — — — — — — — — Следующийсимвол
— — — — — — — — — — — -0040 — — — — — EB CE — — — — — — — — — — — — — — — — — — JMP — WRITE_LOOP

— — — — — — — — — — — -0042 — — — — — — — — — — — — — — — —
— — — — — — — GAME_CONTROL — — — — ENDP

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

— — — — — — — — — — — -0042 — — — — — — — — — — — — — — — — — — — — — — — POSITION — — PROC NEAR
— — — — — — — — — — — -0042 — — — — — 51 — — — — — — — — — — — — — — — — — — — — — PUSH CX
— — — — — — — — — — — -0043 — — — — — 2B C9 — — — — — — — — — — — — — — — — — — SUB — CX, CX — — — — Начальное значение для цикла ввода
— — — — — — — — — — — -0045 — — — — — EE — — — — — — — — — — — — — — — — — — — — — OUT — DX,AL — — — — Запуск таймера
— — — — — — — — — — — -0046 — — — — — — — — — — — — — — — — — — — — — — — POS_LOOP:
— — — — — — — — — — — -0046 — — — — — EC — — — — — — — — — — — — — — — — — — — — — IN — — AL,DX
— — — — — — — — — — — -0047 — — — — — 84 C4 — — — — — — — — — — — — — — — — — — TEST AL, AH
— — — — — — — — — — — -0049 — — — — — E0 FB — — — — — — — — — — — — — — — — — — LOOPNE — POS_LOOP — Цикл пока 1 — таймер не закончил отсчет
— — — — — — — — — — — -004B — — — — — B8 0000 — — — — — — — — — — — — — — — -MOV — AX, 0
— — — — — — — — — — — -004E — — — — — 2B C1 — — — — — — — — — — — — — — — — — — SUB — AX, CX — — — — Определение значения счетчика
— — — — — — — — — — — -0050 — — — — — 59 — — — — — — — — — — — — — — — — — — — — — POP — CX — — — — — — — — — -в диапазоне 0-255
— — — — — — — — — — — -0051 — — — — — C3 — — — — — — — — — — — — — — — — — — — — — RET
— — — — — — — — — — — -0052 — — — — — — — — — — — — — — — — — — — — — — — POSITION — — ENDP
— — — — — — — — — — — -0052 — — — — — — — — — — — — — — — — — — — — — — — CODE ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -END

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

— — — — — Последняя часть программы на Фиг. 8.18берет позицию X-Y,
— — — определенную по входу от джойстика, изаписывает символ в
— — — соответствующую позицию дисплея. Адаптеруправления играми также
— — — допускает четыре переключающих ввода,значения которых можно
— — — прочитать в старших четырех битах порта201H. Программа в примере
— — — опрашивает один из этих битов переключения,чтобы перейти от одного
— — — символа к другому и вывести его на экран.

Категория: Программирование на Ассемблере | Дата: 07.03.13

Меню раздела
Блок