Àäàïòåð óïðàâëåíèÿ èãðàìè



Àäàïòåð óïðàâëåíèÿ èãðàìè


    Àäàïòåð óïðàâëåíèÿ èãðàìè ïîäêëþ÷àåò ê ñèñòåìå äæîéñòèêè è äðóãèå
    îðãàíû óïðàâëåíèÿ èãðîé. Ýòî âñå àíàëîãîâûå óñòðîéñòâà - ò.å., îíè
    íå ìîãóò ðàáîòàòü ñ íóëÿìè è åäèíèöàìè. Èõ âõîäíûå çíà÷åíèÿ - ýòî
    ñîïðîòèâëåíèå, êîòîðîå ÝÂÌ íå ìîæåò ïðî÷èòàòü íåïîñðåäñòâåííî.
    Àäàïòåð óïðàâëåíèÿ èãðàìè ïðåîáðàçóåò çíà÷åíèå ñîïðîòèâëåíèÿ â
    íå÷òî òàêîå, ñ ÷åì ÝÂÌ ìîæåò èìåòü äåëî.
 
      Àäàïòåð óïðàâëåíèÿ èãðàìè íå ïðåîáðàçóåò çíà÷åíèå ñîïðîòèâëåíèÿ
    íåïîñðåäñòâåííî â äâîè÷íîå ÷èñëî. Âìåñòî ýòîãî àäàïòåð ïðåîáðàçóåò
    çíà÷åíèå ñîïðîòèâëåíèÿ âî âðåìåííóþ çàäåðæêó. ×åì áîëüøå
    ñîïðîòèâëåíèå, òåì áîëüøå âðåìåííàÿ çàäåðæêà. Ýòó çàäåðæêó
    êîìïüþòåð ìîæåò èçìåðèòü. Ïðåîáðàçîâàòü çàäåðæêó â ÷èñëî,
    ñîîòâåòñòâóþùåå ïîëîæåíèþ äæîéñòèêà, ìîæíî ïðîãðàììíûì ñïîñîáîì.
    Íàøåé çàäà÷åé ÿâëÿåòñÿ íàïèñàíèå ïðîãðàììû, êîòîðàÿ ïðåîáðàçóåò
    âðåìåííóþ çàäåðæêó â ÷èñëî.


 
      Àäàïòåð óïðàâëåíèÿ èãðàìè îáñëóæèâàåò äî ÷åòûðåõ âõîäîâ
    ñîïðîòèâëåíèÿ. Ìåõàíèçì âðåìåííîé çàäåðæêè ïî êàæäîìó èç ýòèõ
    âõîäîâ ïîäêëþ÷åí ê îòäåëüíîìó áèòó ïîðòà ââîäà-âûâîäà 201H. Êîãäà
    âû âûâîäèòå ëþáîå ÷èñëî â ïîðò 201H, ÷åòûðå åãî ìëàäøèõ áèòà
    ñáðàñûâàþòñÿ â 0. Áèòû âîçâðàùàþòñÿ â ñîñòîÿíèå 1 ïîñëå íåêîòîðãî
    èíòåðâàëà âðåìåíè. Ýòîò èíòåðâàë âðåìåíè îïðåäåëÿåòñÿ çíà÷åíèåì
    ñîïðîòèâëåíèÿ, ïîäêëþ÷åííîãî ê àäàïòåðó. Ïðîãðàììà íà Ôèã. 8.18 -
    ýòî ïðèìåð îïðåäåëåíèÿ çíà÷åíèÿ ñîïðîòèâëåíèÿ äâóõ èç ÷åòûðåõ
    âõîäíûõ ïîðòîâ. Ýòà ïðîãðàììà èñïîëüçóåò ïðîñòîé ìåòîä. Âìåñòî
    îïðåäåëåíèÿ âðåìåííîé çàäåðæêè âñåõ ÷åòûðåõ ïîðòîâ îäíîâðåìåííî,
    îíà îáñëóæèâàåò èõ ïîñëåäîâàòåëüíî. Êîëè÷åñòâî âðåìåíè, íóæíîãî äëÿ
    îïðåäåëåíèÿ îäíîé çàäåðæêè, íåâåëèêî.  ðåçóëüòàòå, ïîî÷åðåäíàÿ
    îáðàáîòêà ýòèõ çàäåðæåê âìåñòî îäíîâðåìåííîé âûïîëíÿåòñÿ áåç
    ïðîáëåì.

             Microsoft (R) Macro Assembler Version 5.00                1/1/80 04: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. Ïðîãðàììà â ïðèìåðå
    îïðàøèâàåò îäèí èç ýòèõ áèòîâ ïåðåêëþ÷åíèÿ, ÷òîáû ïåðåéòè îò îäíîãî
    ñèìâîëà ê äðóãîìó è âûâåñòè åãî íà ýêðàí.




Ñîäåðæàíèå ðàçäåëà