home *** CD-ROM | disk | FTP | other *** search
/ The Party 1994: Try This At Home / disk_image.bin / source / vexsrc / draw3d.asm < prev    next >
Assembly Source File  |  1995-03-29  |  3KB  |  149 lines

  1. comment #
  2. /*****************************************************************************
  3.                                   ATTENTION!
  4.                            this source is VOTEWARE,
  5.               you may only use it to the conditions listed below:
  6.  
  7.   -You may modify it, or use parts of it in your own source as long as
  8.     this header stays on top of all files containing this source.
  9.   -You must give proper credit to the author, Niklas Beisert / pascal.
  10.   -You may not use it in commercial productions without the written
  11.     permission of the author.
  12.   -AND MOST IMPORTANT: you have to buy an Assembly '94 CD-ROM
  13.     by Sound Solutions (if you don't have it already) and vote for VEX-InTrO
  14.     in the PC-64k-Intro-Compo! (if you have already sent your voting card,
  15.     buy another one and fill it out CORRECTLY!!!)
  16. *****************************************************************************/
  17. #
  18.  
  19.  
  20.  
  21. ;// 3d-projection  for starfield and lissajous
  22.  
  23. .model large, c
  24. .386
  25. locals
  26.  
  27. .code
  28.  
  29. public calcpoints3d
  30. public rdrawpointlst
  31. public xchgpointlst
  32.  
  33. calcpoints3d proc uses si di ds, ptlst:dword, pts3d:dword, num:word, zoomx:dword, zoomy:dword, maxdist:dword, col1:dword
  34. local len:word
  35.   cld
  36.   lds si,pts3d
  37.   les di,ptlst
  38.   mov len,0
  39.   mov cx,num
  40.   jcxz @@2
  41. @@1:
  42.     cmp dword ptr [si+8],1000
  43.     jl @@next
  44.  
  45.     mov eax,dword ptr [si]
  46.     imul zoomx
  47.     idiv dword ptr [si+8]
  48.     shr eax,16
  49.     cmp ax,-160
  50.     jl @@next
  51.     cmp ax,160
  52.     jge @@next
  53.     mov bx,ax
  54.  
  55.     mov eax,dword ptr [si+4]
  56.     imul zoomy
  57.     idiv dword ptr [si+8]
  58.     shr eax,16
  59.     cmp ax,-100
  60.     jle @@next
  61.     cmp ax,100
  62.     jg @@next
  63.     neg ax
  64.     add ax,100
  65.  
  66.     add bx,160
  67.     shl ax,6
  68.     add bx,ax
  69.     shl ax,2
  70.     add ax,bx
  71.     stosw
  72.  
  73.     mov eax,maxdist
  74.     sub eax,dword ptr [si+8]
  75.     imul col1
  76.     mov al,dl
  77.     stosb
  78.  
  79.     inc len
  80.  
  81. @@next:
  82.     add si,12
  83.   loop @@1
  84. @@2:
  85.   mov ax,len
  86.   ret
  87. endp
  88.  
  89. xchgpointlst proc uses si di ds, ptlst:dword, num:word, pag:word
  90.   lds si,ptlst
  91.   mov ax,0a000h
  92.   mov es,ax
  93.   mov di,pag
  94.   cmp num,0
  95.   je @@end
  96. @@1:
  97.     mov bx,ds:[si]
  98.     mov cl,bl
  99.     shr bx,2
  100.     and cl,3
  101.     mov ah,cl
  102.     mov al,04
  103.     mov dx,3ceh
  104.     out dx,ax
  105.     mov ax,0102h
  106.     shl ah,cl
  107.     mov dx,3c4h
  108.     out dx,ax
  109.     mov al,ds:[si+2]
  110.     xchg es:[di+bx],al
  111.     mov ds:[si+2],al
  112.     add si,3
  113.   dec num
  114.   jnz @@1
  115. @@end:
  116.   ret
  117. endp
  118.  
  119. rdrawpointlst proc uses si di ds, ptlst:dword, num:word, pag:word
  120.   lds si,ptlst
  121.   mov ax,0a000h
  122.   mov es,ax
  123.   mov di,pag
  124.   mov dx,3c4h
  125.   mov ax,num
  126.   cmp ax,0
  127.   je @@end
  128.   add si,ax
  129.   shl ax,1
  130.   add si,ax
  131. @@1:
  132.     sub si,3
  133.     mov bx,ds:[si]
  134.     mov cl,bl
  135.     shr bx,2
  136.     and cl,3
  137.     mov ax,0102h
  138.     shl ah,cl
  139.     out dx,ax
  140.     mov al,ds:[si+2]
  141.     mov es:[di+bx],al
  142.   dec num
  143.   jnz @@1
  144. @@end:
  145.   ret
  146. endp
  147.  
  148. end
  149.