Ïðèìåð: Ãëîáàëüíàÿ ñåòü INTERNET
ß èùó:
Íà ãëàâíóþ  |  Äîáàâèòü â èçáðàííîå  

Ãëàâíàÿ/

Ïðîãðàììèðîâàíèå, áàçû äàííûõ. /

Ðóñèôèêàòîð

Äîêóìåíò 1 | Äîêóìåíò 2

←ïðåäûäóùàÿ  ñëåäóþùàÿ→
1 2 

.MODEL TINY

.CODE

.STARTUP

.286

 LOCALS

 JUMPS

jmp Install

; RSHIFT scan code

RSHIFT_SCAN   EQU 36h

FLAGS record  inRussian:1,shiftPressed:1,keyPressed:1,reserved:6

iFlags FLAGS <0, 0, 0, 0>

STable  db 'éöóêåíãøùçõúôûâàïpîëäæýÿ÷ñìèòüáþÉÖÓÊÅHÃØÙÇÕÚÔÛÂÀÏÐÎËÄÆÝß×ÑÌÈÒÜÁÞ'

Hook09 proc far ;îápàáîêà int 09h

     push ax

     push bx

     push cx

     push di

     push ds

     push es

     mov  ax,cs     ;ñåãìåíò påçåäåíòà

     mov  ds,ax

     in   al,60h

     mov  ah,al

     cmp  al,RSHIFT_SCAN

     je   gotShift        ; ïpîâåpêà íàæàòèÿ

     test al,80h

     jnz  KeyUp           ; à ìîæåò áûòü êëàâèøó îòïóñòèëè ?

     test [iFlags], MASK inRussian

     jz   OldHook09       ; åñëè â àíãëèéñêîì, òî ñòàpûé îápàáîò÷èê

     push ax

     mov  ax,40h

     mov  es,ax           ; es = ñåãìåíò äàííûõ BIOS

     pop  ax

     cmp  al,34h          ; íà÷àëî áëîêà òpàíñëÿöèè

     jg   OldHook09                        ; don't know what it is

     cmp  al,2Ch

     jl   check2

     sub  al,2Ch

     add  al,23

     jmp  short Translate

  check2:

     cmp  al,28h

     jg   OldHook09

     cmp  al,1Eh

     jl   check3

     sub  al,1Eh

     add  al,12

     jmp  short Translate

  check3:

     cmp  al,1Bh

     jg   OldHook09

     cmp  al,10h

     jl   OldHook09

     sub  al,10h            ; êîíåö áëîêà, al = ñìåùåíèå â òàáëèöå

  Translate:

     or   [iFlags], MASK keyPressed

     mov  ah,es:[17h]       ; à íå íàæàò ëè ó íàñ shift

     test ah,11b

     jz   lowerKey          ; åñëè íåò - òî äàëüøå

     add  al,32             ; óâåëè÷èâàåì ñìåùåíèå

  lowerKey:

     mov  cx,es:[1Ah]       ; óêàçàòåëü íà õâîñò áóôåpà êëàâèàòópû (30-60)

     mov  bx,es:[1Ch]       ; óêàçàòåëü íà ãîëîâó

     cmp  cx,60

     je   h_End

     inc  cx

     inc  cx

     cmp  cx,bx

     je   Quit

     jmp  short insSymb

  h_End:

     cmp  bx,30

     je   Quit

  insSymb:

     mov  di, offset STable   ; di = óêàçàòåëü íà òàáëèöó

     mov  ah,0                ; ax = ñìåùåíèå

     add  di,ax               

     mov  al,[di]             ; al = ñèìâîë

     mov  es:[bx],al          ; ïîìåùàåì ñèìâîë â áóôåp êëàâèàòópû (int 16h)

     cmp  bx,60

     jne  nextStep

     mov  bx,28

  nextStep:

     inc  bx

     inc  bx

     mov  es:[1Ch],bx         ;

     jmp  short Quit          ; êîíåö, ñèìâîë îòpàíñëèpîâàí

  gotShift:

     or   [iFlags], MASK shiftPressed     ; âçâîäèì ôëàã íàæàòèÿ shift

     and  [iFlags], NOT MASK keyPressed   ; îáíóëÿåì ------------ êëàâèøè

     jmp  short OldHook09

  KeyUp:

     and  al,7Fh                        ; óáèpàåì áèò îòïóñêàíèÿ êëàâèøè

     cmp  al,RSHIFT_SCAN

     jne  OldHook09                     ; åñëè íå shift - ñòàpûé îápàáîò÷èê

     test [iFlags], MASK keyPressed

     jnz  throwShift                    ; åñëè íàæèìàëè êëàâèøó - ñápàñûâàåì shift

     test [iFlags], MASK inRussian

     jz   switchRussian                 ; åñëè â àíãëèéñêîì - òî íà póññêèé

     and  [iFlags], NOT MASK inRussian  ; à òóò íà àíãëèéñêèé

     jmp  short OldHook09

  switchRussian:

     or   [iFlags], MASK inRussian

     jmp  short OldHook09

  throwShift:

     and  [iFlags], NOT MASK shiftPressed   ; ñápàñûâàåì ïpèçíàê íàæàòèÿ shift

  OldHook09:

     pop  es

     pop  ds

     pop  di

     pop  cx

     pop  bx

     pop  ax

     db   0EAh                              ; îïêîä far jump

     OldHandler09 dd ?                      ; jump xxxx:yyyy

  Quit:

     in   al,61h                            ; ñápàñûâàåì êîíüpîëëåp êëàâèàòópû

     mov  ah,al                             ; è pàçpåøàåì îápàáîòêó ñëåä. ñèìâ.

     or   al,80h

     out  61h,al

     xchg ah,al

     out  61h,al

     mov  al,20h

     out  20h,al

     pop  es

     pop  ds

     pop  di

     pop  cx

     pop  bx

     pop  ax

     iret

Hook09 endp

Hook10 proc far

   cmp ah,00h        ; ôóíêöèÿ ñìåíà âèäåîpåæèìà

   jne @@Quit        ; íåò ? ïåpåäàåì óïpàâëåíèå ñòàpîìó îápàáîò÷èêó

   cmp al,2          ; âèäåîpåæèì 2 èëè 3 ?

   je  @@myHook      ; äà - îápàáàòûâàåì

   cmp al,3

   jne @@Quit

 @@myHook:

   call iBIOS        ; âûçûâàåì ìòàpûé îápàáîò÷èê

   push ax

   push cx

   push ds

   push si

   mov  ax,cs

   mov  ds,ax

   mov  al,0

   mov  cl,0FFh

   mov  ch,16

   mov  si, offset NewFont

   call LoadFont             ; çàãpóæàåì ñâîé ôîíò

   pop si

   pop ds

   pop cx

   pop ax

   iret

 @@Quit:

   call iBIOS

   iret

Hook10 endp

iBIOS proc

   pushf

   db 09Ah                        ; far call

   OldHandler10 dd ?

   ret

iBIOS endp

;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

;³          Load Font                     ³

;³                                        ³

;³  Çàãpóæàåò â çíàêîãåíåpàòîp íîâûå      ³

;³  îápàçû ñèìâîëîâ. Èñïîëüçóÿ ïîpòû,     ³

;³  óäàåòñÿ èçáåæàòü "äåpãàíèÿ" ýêpàíà    ³

;³ Âõîä:                                  ³

;³   AL    - íîìåp ïåpâîãî ñèìâîëà        ³

;³   CL    - êîëè÷åñòâî ñèìâîëîâ          ³

;³   CH    - pàçìåp ñèìâîëà               ³

;³   DS:SI - âàø áóôåp îápàçîâ            ³

;³ Âûõîä: íåò                             ³

;³ Ðàçpóøàåìûå påãèñòpû: íåò              ³

;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 LoadFont proc

    pushf

    push ax

    push cx

    push dx

    push si

    push di

    push es

    mov  di,0A000h

    mov  es,di

    xor  ah,ah

    imul di,ax,20h

    push ds

    push si

    mov  si,cs

    mov  ds,si

    lea  si,WRITE_ON

    push cx

    call SetMode

    pop cx

    pop si

    pop ds

    mov dl,ch

    xor ch,ch

    xor dh,dh

  @@All_symbols:

    push cx

    mov  ax,di

    mov  cx,dx

    shr  cx,1       ; cx /= 2

    rep  movsw

    mov  di,ax

    add  di,20h

    pop  cx

    loop @@All_symbols

    lea  si,WRITE_OFF

    call SetMode

    pop es

    pop di

    pop si

←ïðåäûäóùàÿ  ñëåäóþùàÿ→
1 2 


Copyright © 2005—2007 «RefStore.Ru»