home *** CD-ROM | disk | FTP | other *** search
/ PC-X 1998 March / pcx19_9803.iso / PC-XUSER / PC-XUSER.12 / ABC / SOURCE / SCROLL.ASM < prev    next >
Encoding:
Assembly Source File  |  1997-12-11  |  2.7 KB  |  86 lines

  1. .286            ;utasitaskeszlet
  2. .MODEL SMALL,C  ;memoriamodel,nyelv
  3. LOCALS          ;legyenek lokalis cimkek, amik @-el kezdodnek (persze nem mindig van ra szukseg)  (most is ki lehetne kerulni)
  4.  
  5. EXTRN Lsize:word;extern lista (ami az asm-nek kell a C-tol) (tipusmegadassal) (byte/word/dword)
  6.  
  7. PUBLIC scrollto ;public lista (amit a C lasson az asm-bol)  (tipus nem kell, valtozo is lehet nem csak rutin)
  8.  
  9. .DATA           ;adatszegmens   (small-ban a C-jevel kozos)
  10. lastaddr dw 0ffffh ;az asm sajat adatai
  11. lastpy db 0ffh     ;ha csak nincsenek
  12. lastpx db 0ffh     ;a public listan
  13.  
  14. .CODE           ;kodszegmens    (small-ban a C-jevel kozos)
  15. ;es mar johet is a program:
  16.  ;ezt a fuggvenyt csak az asm fogja hasznalni (ezert nincs a public listan)
  17.  waitretracex proc ;megvarja a horizontalis visszafutast
  18.   mov dx,3dah
  19.   @cik:
  20.    in al,dx
  21.    and al,8
  22.   jz @cik
  23.   ret
  24.  waitretracex endp
  25.  
  26.  ;a C csak ezt fogja latni (ez van a public listan)
  27.  scrollto proc x:word,y:word ;parameterek tipussal
  28.   pusha            ;a regiszterek erteket nem art elmenteni, ha valtoztatjuk oket
  29.                    ;persze nem kotelezo az osszeset. Mivel a C csak az si es di regiszterekben tarol valtozokat, egy push si di is eleg szokott lenni
  30.  
  31.   mov cx,x         ;a parameterek atvetele
  32.   mov ax,y         ;vigyazzunk, hogy a bp-t elotte ne csesztessuk, mert a parameterek a bp-vel vannak cimezve
  33.   mov bh,cl
  34.   mov bl,al
  35.  
  36.   shr ax,4         ;felso 4 bit a pixeles eltolasnal kell majd
  37.   mul Lsize
  38.   shr cx,3         ;felso 3 bit a pixeles eltolashoz kell majd
  39.   add cx,ax        ;cx=memcim
  40.   and bx,070fh     ;(bh;bl)=pixeles eltolas
  41.  
  42.   cmp cx,lastaddr
  43.   je @pixely       ;ha egyezik az elozovel,akkor ne basztassuk
  44.   mov lastaddr,cx
  45.  
  46.   mov al,0ch
  47.   mov ah,ch
  48.   mov dx,03d4h
  49.   out dx,ax
  50.   inc al
  51.   mov ah,cl
  52.   out dx,ax        ;memcim atirasa
  53.  
  54.   @pixely:
  55.   cmp bl,lastpy
  56.   je @pixelx       ;ha egyezik az elozovel,akkor ne basztassuk
  57.   mov lastpy,bl
  58.  
  59.   call waitretracex;visszafutas
  60.   mov dx,03d4h
  61.   mov al,08h
  62.   mov ah,bl
  63.   out dx,ax         ;az y pixeles eltolas beallitasa
  64.  
  65.   @pixelx:
  66.   cmp bh,lastpx
  67.   je @ki            ;ha egyezik az elozovel,akkor ne basztassuk
  68.   mov lastpx,bh
  69.  
  70.   call waitretracex ;visszafutas
  71.   mov dx,03c0h
  72.   mov al,13h
  73.   out dx,al
  74.   mov al,bh
  75.   dec al
  76.   out dx,al        ;az x pixeles eltolas beallitasa
  77.   mov al,20h
  78.   out dx,al        ;kep engedelyezese
  79.  
  80.   @ki:
  81.   popa             ;ha a ret elott nem szedunk ki minden altalunk mentett bizbaszt a stackrol, a program le fog halni!!
  82.                    ;ugyanis a ret a stackrol szedi a visszateresi cimet
  83.   ret              ;vissza a C-hez
  84.  scrollto endp
  85.  
  86. END             ;vege