home *** CD-ROM | disk | FTP | other *** search
/ HOT Scene Stuff / hotscenestuffzyklop1996.iso / demos / sunknown / asmvoxel.asm < prev    next >
Assembly Source File  |  1994-04-07  |  6KB  |  447 lines

  1. ; ASMVOXEL
  2.  
  3. ; Thomas H.
  4.  
  5. VOXX        = 128
  6. VOXY        = 96
  7.  
  8. SMOOTHCUT     = 10
  9.  
  10. AC_INDEX        = 03c0h
  11. MISC_OUTPUT     = 03c2h
  12. SC_INDEX        = 03c4h
  13. GC_INDEX    = 03ceh
  14. CRTC_INDEX      = 03d4h
  15. INPUT_STATUS_0  = 03dah
  16. MAP_MASK    = 02h
  17. READ_MAP        = 04h
  18. BIT_MASK    = 08h
  19.  
  20. public    _lseg, _sseg, _hseg, _fseg, _alti, _asmvox, _interpolate
  21. public _voxpos, _voypos, _ofraction, _copper_32, copper, _leapright, _asmsky
  22. public _interlimit
  23.  
  24. .model large
  25.  
  26. .code
  27.  
  28. org 0
  29. EVEN
  30.  
  31. copper    db (3*96*128+32) dup (?)
  32.  
  33. _sseg    dw ?
  34. _hseg    dw ?
  35. _fseg    dw ?
  36. _lseg    dw ?
  37. _voxpos dw ?
  38. _voypos    dw ?
  39. tempw    dw ?
  40.  
  41. _copper_32 label dword
  42.     dw offset copper, seg copper
  43. _leapright label dword
  44.     dw offset leap, seg leap
  45. tempax    dw ?
  46.  
  47. leap    db 128 dup (20)
  48.  
  49. _alti    db 0
  50. _ofraction db ?
  51. _interlimit db 64
  52. fraction    db ?
  53.  
  54. x    db ?
  55. y         db ?
  56. origx    db ?
  57. origy    db ?
  58. top    db ?
  59. forrigecol db ?
  60.  
  61. EVEN
  62.  
  63. .386
  64.  
  65. ; ***** INTERPOLATE *****
  66.  
  67. _interpolate proc far
  68.  
  69.     pusha
  70.     push ds
  71.  
  72.     mov ax,_sseg
  73.     mov ds,ax
  74.     mov es,ax
  75.  
  76.     xor si,si
  77.     mov di,256
  78.  
  79.     mov ch,64
  80.     mov edx,0fefefefeh
  81. next_right:
  82.     mov cl,128
  83.     mov eax,[si]
  84. next_down:
  85.     add si,512
  86.     mov ebx,[si]
  87.     add eax,ebx
  88.     and eax,edx
  89.     shr eax,1
  90.     mov [di],eax
  91.     add di,512
  92.     mov eax,ebx
  93.     dec cl
  94.     jnz next_down
  95.     sub si,512*127-4
  96.     sub di,512*127-4
  97.     dec ch
  98.     jnz next_right
  99.  
  100.     pop ds
  101.     popa
  102.     retf
  103.  
  104. _interpolate endp
  105.  
  106. ; ***** ASMVOX *****
  107.  
  108. _asmvox    proc far
  109.  
  110.     pusha
  111.     push ds
  112.  
  113.     mov ds,_sseg
  114.     mov es,_hseg
  115.     mov fs,_fseg
  116.     mov gs,_lseg
  117.     lds bp,_copper_32
  118.     mov ds,_sseg
  119.  
  120.     mov ax,_voxpos
  121.     mov _ofraction,al
  122.     mov origx,ah
  123.  
  124.     mov ax,_voypos
  125.     mov origy,al
  126.  
  127.     mov x,128
  128.     xor di,di
  129. next_x:
  130.     mov bx,128
  131.     sub bl,x
  132.     mov bl,leap[bx]
  133.     mov top,bl
  134.     add di,bx
  135.     mov forrigecol,0
  136.     mov y,95
  137.  
  138. next_yxx:
  139.     mov ebx,cs:[bp]
  140.     add bp,3
  141.  
  142.     ror ebx,8
  143.     mov fraction,bh
  144.     rol ebx,8
  145.     add bh,origy
  146.     mov al,_ofraction
  147.     sub fraction,al
  148.     adc bl,origx
  149.     mov si,bx
  150.     mov bl,es:[si]
  151.     sub bl,_alti
  152.     mov bh,y
  153.     mov dl,gs:[bx]
  154.     mov cl,fraction
  155.     mov al,cl
  156.     mul dl
  157.     mov dx,ax
  158.     mov bx,si
  159.     inc bl
  160.     mov bl,es:[bx]
  161.     sub bl,_alti
  162.     mov bh,y
  163.     mov ch,gs:[bx]
  164.     mov al,cl
  165.     not al
  166.     mul ch
  167.     add ax,dx
  168.     cmp ah,top
  169.     jbe not_high_enoughxx
  170.  
  171.     mov dh,ah
  172.     sub dh,top
  173.     mov top,ah
  174.     mov bx,si
  175.     mov al,fs:[bx]
  176.     mul cl
  177.     mov dl,ah
  178.     inc bl
  179.     mov al,fs:[bx]
  180.     dec bl
  181.     not cl
  182.     mul cl
  183.     add ah,dl
  184.     cmp dh,2
  185.     ja over2xx
  186.     je akkurat2xx
  187.     mov [di],ah
  188.     inc di
  189.     mov forrigecol,ah
  190.     dec y
  191.     cmp y,64
  192.     jne next_yxx
  193.     jmp next_yyy
  194. akkurat2xx:
  195.     mov al,forrigecol
  196.     or al,al
  197.     jz toingengammelxx
  198.     add al,ah
  199.     shr al,1
  200.     mov [di],ax
  201.     add di,2
  202.     mov forrigecol,ah
  203.     dec y
  204.     cmp y,64
  205.     jne next_yxx
  206.     jmp next_yyy
  207. toingengammelxx:
  208.     mov al,ah
  209.     mov [di],ax
  210.     add di,2
  211.     mov forrigecol,ah
  212.     dec y
  213.     cmp y,64
  214.     jne next_yxx
  215.     jmp next_yyy
  216.  
  217. over2xx:
  218.     mov bl,dh
  219.     mov dh,forrigecol
  220.     mov forrigecol,ah
  221.     or dh,dh
  222.     jz notfrombeforexx
  223.     dec bl
  224.     xor al,al
  225.     mov cx,dx
  226.     sub ah,dh
  227.     xor bh,bh
  228.     cwd
  229.  
  230.     idiv bx
  231.  
  232.     mov [di],ch
  233.     inc di
  234.  
  235. nextbortxx:
  236.     add cx,ax
  237.     mov [di],ch
  238.     inc di
  239.     dec bl
  240.     jnz nextbortxx
  241.  
  242.     dec y
  243.     cmp y,64
  244.     jne next_yxx
  245.     jmp short next_yyy
  246. notfrombeforexx:
  247. nextnotfrombeforexx:
  248.     mov [di],ah
  249.     inc di
  250.     dec bl
  251.     jnz nextnotfrombeforexx
  252.     dec y
  253.     cmp y,64
  254.     jne next_yxx
  255.     jmp short next_yyy
  256. not_high_enoughxx:
  257.     mov forrigecol,0
  258. drawetokxx:
  259.     dec y
  260.     cmp y,64
  261.     jne next_yxx
  262.  
  263. ; ******************************************************************
  264. next_yyy:
  265.     mov bx,cs:[bp]
  266.     add bp,3
  267.  
  268.     add bh,origy
  269.     add bl,origx
  270.     mov si,bx
  271.     mov bl,es:[si]
  272.     sub bl,_alti
  273.     mov bh,y
  274.     mov ah,gs:[bx]
  275.     cmp ah,top
  276.     jbe not_high_enoughyy
  277.  
  278.     mov dh,ah
  279.     sub dh,top
  280.     mov top,ah
  281.     mov bx,si
  282.     mov ah,fs:[bx]
  283.     cmp dh,2
  284.     ja over2yy
  285.     je akkurat2yy
  286.     mov [di],ah
  287.     inc di
  288.     mov forrigecol,ah
  289.     dec y
  290.     jns next_yyy
  291.     jmp thatsyy
  292. akkurat2yy:
  293.     mov al,forrigecol
  294.     or al,al
  295.     jz toingengammelyy
  296.     add al,ah
  297.     shr al,1
  298.     mov [di],ax
  299.     add di,2
  300.     mov forrigecol,ah
  301.     dec y
  302.     jns next_yyy
  303.     jmp thatsyy
  304. toingengammelyy:
  305.     mov al,ah
  306.     mov [di],ax
  307.     add di,2
  308.     mov forrigecol,ah
  309.     dec y
  310.     jns next_yyy
  311.     jmp thatsyy
  312.  
  313. over2yy:
  314.     mov bl,dh
  315.     mov dh,forrigecol
  316.     mov forrigecol,ah
  317.     or dh,dh
  318.     jz notfrombeforeyy
  319.     dec bl
  320.     xor al,al
  321.     mov cx,dx
  322.     sub ah,dh
  323.     xor bh,bh
  324.     cwd
  325.  
  326.     idiv bx
  327.  
  328.     mov [di],ch
  329.     inc di
  330.  
  331. nextbortyy:
  332.     add cx,ax
  333.     mov [di],ch
  334.     inc di
  335.     dec bl
  336.     jnz nextbortyy
  337.  
  338.     dec y
  339.     jns next_yyy
  340.     jmp short thatsyy
  341. notfrombeforeyy:
  342. nextnotfrombeforeyy:
  343.     mov [di],ah
  344.     inc di
  345.     dec bl
  346.     jnz nextnotfrombeforeyy
  347.     dec y
  348.     jns next_yyy
  349.     jmp short thatsyy
  350. not_high_enoughyy:
  351.     mov forrigecol,0
  352. drawetokyy:
  353.     dec y
  354.     jns next_yyy
  355. thatsyy:
  356.     xor eax,eax
  357.     mov [di],eax
  358.     or di,255
  359.     mov al,top
  360.     sub al,2    ; fixme!
  361.     mov [di],al
  362.  
  363.     add di,257
  364.  
  365.     dec x
  366.     jnz next_x
  367.  
  368.     pop ds
  369.     popa
  370.  
  371.     retf
  372. _asmvox endp
  373.  
  374. ; ***** ASMSKY *****
  375.  
  376. _asmsky proc far
  377.  
  378.     xor di,di
  379.     mov dl,128
  380.     mov si,-257
  381.     mov dh,es:[si]
  382. next_double:
  383.     mov al,es:[di+255]
  384.     mov ah,al
  385.     cmp al,dh
  386.     jb allavest
  387.     mov al,dh
  388. allavest:
  389.     mov dh,ah
  390.     mov cx,256
  391.     xor ah,ah
  392.     sub cx,ax
  393.     shr cx,1
  394.     jnc notodd
  395.  
  396.     add di,ax
  397.     add bx,ax
  398.     mov ah,[bx]
  399.     mov es:[di],ah
  400.     inc bh
  401.     mov ah,[bx]
  402.     mov es:[di+256],ah
  403.     dec bh
  404.  
  405.     xor ah,ah
  406.     sub di,ax
  407.         sub bx,ax
  408.     inc ax
  409.  
  410. notodd:
  411.     shr cx,1
  412.     jnc quadrupel
  413.     mov tempax,ax
  414.     add di,ax
  415.     add bx,ax
  416.  
  417.     mov ax,[bx]
  418.     mov es:[di],ax
  419.     inc bh
  420.     mov ax,[bx]
  421.     mov es:[di+256],ax
  422.     dec bh
  423.     mov ax,tempax
  424.     sub di,ax
  425.     sub bx,ax
  426.     add ax,2
  427. quadrupel:
  428.     mov si,bx
  429.     add di,ax
  430.     add si,ax
  431.     mov bp,cx
  432.     rep movsd
  433.     inc bh
  434.     mov si,bx
  435.     add di,ax
  436.     add si,ax
  437.     mov cx,bp
  438.     rep movsd
  439.     inc bh
  440.     dec dl
  441.     jnz next_double
  442.  
  443.     retf
  444. _asmsky endp
  445.  
  446. end
  447.