home *** CD-ROM | disk | FTP | other *** search
- .286 ;utasitaskeszlet
- .MODEL SMALL,C ;memoriamodel,nyelv
- LOCALS ;legyenek lokalis cimkek, amik @-el kezdodnek (persze nem mindig van ra szukseg) (most is ki lehetne kerulni)
-
- EXTRN Lsize:word;extern lista (ami az asm-nek kell a C-tol) (tipusmegadassal) (byte/word/dword)
-
- PUBLIC scrollto ;public lista (amit a C lasson az asm-bol) (tipus nem kell, valtozo is lehet nem csak rutin)
-
- .DATA ;adatszegmens (small-ban a C-jevel kozos)
- lastaddr dw 0ffffh ;az asm sajat adatai
- lastpy db 0ffh ;ha csak nincsenek
- lastpx db 0ffh ;a public listan
-
- .CODE ;kodszegmens (small-ban a C-jevel kozos)
- ;es mar johet is a program:
- ;ezt a fuggvenyt csak az asm fogja hasznalni (ezert nincs a public listan)
- waitretracex proc ;megvarja a horizontalis visszafutast
- mov dx,3dah
- @cik:
- in al,dx
- and al,8
- jz @cik
- ret
- waitretracex endp
-
- ;a C csak ezt fogja latni (ez van a public listan)
- scrollto proc x:word,y:word ;parameterek tipussal
- pusha ;a regiszterek erteket nem art elmenteni, ha valtoztatjuk oket
- ;persze nem kotelezo az osszeset. Mivel a C csak az si es di regiszterekben tarol valtozokat, egy push si di is eleg szokott lenni
-
- mov cx,x ;a parameterek atvetele
- mov ax,y ;vigyazzunk, hogy a bp-t elotte ne csesztessuk, mert a parameterek a bp-vel vannak cimezve
- mov bh,cl
- mov bl,al
-
- shr ax,4 ;felso 4 bit a pixeles eltolasnal kell majd
- mul Lsize
- shr cx,3 ;felso 3 bit a pixeles eltolashoz kell majd
- add cx,ax ;cx=memcim
- and bx,070fh ;(bh;bl)=pixeles eltolas
-
- cmp cx,lastaddr
- je @pixely ;ha egyezik az elozovel,akkor ne basztassuk
- mov lastaddr,cx
-
- mov al,0ch
- mov ah,ch
- mov dx,03d4h
- out dx,ax
- inc al
- mov ah,cl
- out dx,ax ;memcim atirasa
-
- @pixely:
- cmp bl,lastpy
- je @pixelx ;ha egyezik az elozovel,akkor ne basztassuk
- mov lastpy,bl
-
- call waitretracex;visszafutas
- mov dx,03d4h
- mov al,08h
- mov ah,bl
- out dx,ax ;az y pixeles eltolas beallitasa
-
- @pixelx:
- cmp bh,lastpx
- je @ki ;ha egyezik az elozovel,akkor ne basztassuk
- mov lastpx,bh
-
- call waitretracex ;visszafutas
- mov dx,03c0h
- mov al,13h
- out dx,al
- mov al,bh
- dec al
- out dx,al ;az x pixeles eltolas beallitasa
- mov al,20h
- out dx,al ;kep engedelyezese
-
- @ki:
- popa ;ha a ret elott nem szedunk ki minden altalunk mentett bizbaszt a stackrol, a program le fog halni!!
- ;ugyanis a ret a stackrol szedi a visszateresi cimet
- ret ;vissza a C-hez
- scrollto endp
-
- END ;vege