home *** CD-ROM | disk | FTP | other *** search
/ Groovy Bytes: Behind the Moon / groovybytes.iso / GROOVY / DEMOS / MISC_DEM / SUNKNOWN.ZIP / ASMZOOM.ASM < prev    next >
Encoding:
Assembly Source File  |  1994-04-07  |  7.0 KB  |  592 lines

  1. ; ASMZOOM.ASM
  2.  
  3. ; Thomas H.
  4.  
  5. VOXLINJER    = 100
  6. VOXBREDDE    = 192
  7.  
  8. AC_INDEX        = 03c0h
  9. MISC_OUTPUT     = 03c2h
  10. SC_INDEX        = 03c4h
  11. GC_INDEX    = 03ceh
  12. CRTC_INDEX      = 03d4h
  13. INPUT_STATUS_0  = 03dah
  14. MAP_MASK    = 02h
  15. READ_MAP        = 04h
  16. BIT_MASK    = 08h
  17.  
  18. public _asmzoom, _farfrac1, _farfrac2, _fartwist, _fartune
  19. public _shx,_shy,_sdx,_sdy, _topx, _topy, _lines, _kdyhalf
  20. public _khx,_khy,_kdx,_kdy, _voxeltwist, _farbp, _drawvoxel, _kdxhalf
  21. public _farfrom, _farto, _farmove, _farmove320, _movef32
  22.  
  23. .model large
  24.  
  25. .code
  26.  
  27. skr    db 14736 dup (?)
  28.  
  29. EVEN
  30.  
  31. _fartwist label dword
  32.     dw offset skr, seg skr
  33. _fartune dw ?
  34. _farfrac1 dd ?
  35. _farfrac2 dd ?
  36. _farfrom    dd ?
  37. _farto    dd ?
  38.  
  39. _shx    dw 0
  40. _shy    dw 0
  41. _sdx    dw 0
  42. _sdy    dw 256
  43. _khx    dw 0
  44. _khy    dw 0
  45. _kdx    dw 0
  46. _kdy    dw 128
  47. _kdxhalf dw ?
  48. _kdyhalf dw ?
  49.  
  50. _topx    dw ?
  51. _topy    dw ?
  52. _topx2    dw ?
  53. _topy2    dw ?
  54. tempax    dw ?
  55. tempbx    dw ?
  56. tempcx    dw ?
  57. tempdx    dw ?
  58. tempdi    dw ?
  59. topdi    dw ?
  60. tempsi    dw ?
  61. _farbp    dw ?
  62. _lines    db ?
  63.  
  64.  
  65. .386
  66.  
  67. ; ***** CENTER *****
  68.  
  69. center    proc near
  70.  
  71.     xor di,di
  72.     add si,offset skr
  73.     add si,_fartune
  74.     add si,_fartune
  75.     mov _lines,80
  76. xxnext_line:
  77.     mov ax,_topx
  78.     mov _topx2,ax
  79.     mov ax,_topy
  80.     mov _topy2,ax
  81.     mov topdi,di
  82.     mov tempsi,si
  83.     mov al,cs:[si]
  84.     cmp al,120
  85.     je xxnull_lengde
  86.     mov bl,al
  87.     or al,al
  88.     jz xxikkegange
  89.     xor ah,ah
  90.     mov tempax,ax
  91.     mov cx,_sdy
  92.     mul cx
  93.     add _topy2,ax
  94.     mov ax,tempax
  95.     mov cx,_sdx
  96.     mul cx
  97.     add _topx2,ax
  98.     mov ax,tempax
  99.     shl ax,4
  100.     add di,ax
  101.     add ax,ax
  102.     add ax,ax
  103.     add di,ax
  104. xxikkegange:
  105.     mov ah,cs:[si+1]
  106.     sub ah,bl
  107.     jz xxnull_lengde
  108.  
  109.     mov dx,_topx2
  110.     mov cx,_topy2
  111.  
  112.     mov si,_sdy
  113.     mov bp,_sdx
  114.  
  115. xxnext_down:
  116.     mov bh,ch
  117.     mov bl,dh
  118.     mov al,[bx]
  119.     mov [es:di],al
  120.     add cx,si
  121.     add dx,bp
  122.     add di,80
  123.     dec ah
  124.     jne xxnext_down
  125.  
  126. xxnull_lengde:
  127.     mov si,_sdy
  128.     mov bp,_sdx
  129.  
  130.     add _topx,si
  131.     add _topx,si
  132.     sub _topy,bp
  133.     sub _topy,bp
  134.  
  135.     mov si,tempsi
  136.     add si,184
  137.  
  138.     mov di,topdi
  139.     inc di
  140.  
  141.     dec _lines
  142.     jnz xxnext_line
  143.  
  144.     ret
  145. center    endp
  146.  
  147. ; ***** TOP *****
  148.  
  149. top    proc near
  150.  
  151.     xor di,di
  152.     add si,offset skr
  153.     add si,_fartune
  154.     add si,_fartune
  155.     mov _lines,80
  156. yynext_linje:
  157.     mov ax,_topx
  158.     mov _topx2,ax
  159.     mov ax,_topy
  160.     mov _topy2,ax
  161.     mov topdi,di
  162.     mov tempsi,si
  163.     mov ah,cs:[si]
  164.     or ah,ah
  165.     jz yynull_lengde
  166.  
  167.     mov dx,_topx2
  168.     mov cx,_topy2
  169.  
  170.     mov si,_kdy
  171.     mov bp,_kdx
  172.  
  173. yynext_down:
  174.     mov bh,ch
  175.     mov bl,dh
  176.     mov al,[bx]
  177.     mov [es:di],al
  178.     add cx,si
  179.     add dx,bp
  180.     add di,80
  181.     dec ah
  182.     jne yynext_down
  183.  
  184. yynull_lengde:
  185.     mov si,_kdy
  186.     mov bp,_kdx
  187.  
  188.     add _topx,si
  189.     add _topx,si
  190.     sub _topy,bp
  191.     sub _topy,bp
  192.  
  193.     mov si,tempsi
  194.     add si,184
  195.  
  196.     mov di,topdi
  197.     inc di
  198.  
  199.     dec _lines
  200.     jnz yynext_linje
  201.  
  202.     ret
  203. top    endp
  204.  
  205. ; ***** BUNN *****
  206.  
  207. bunn    proc near
  208.  
  209.     xor di,di
  210.     add si,offset skr
  211.     add si,_fartune
  212.     add si,_fartune
  213.     mov _lines,80
  214. zznext_linje:
  215.     mov ax,_topx
  216.     mov _topx2,ax
  217.     mov ax,_topy
  218.     mov _topy2,ax
  219.     mov topdi,di
  220.     mov tempsi,si
  221.     mov al,cs:[si+1]
  222.  
  223.     cmp al,120
  224.     je zznull_lengde
  225.     mov bl,al
  226.     xor ah,ah
  227.     mov tempax,ax
  228.     mov cx,_kdy
  229.     mul cx
  230.     add _topy2,ax
  231.     mov ax,tempax
  232.     mov cx,_kdx
  233.     mul cx
  234.     add _topx2,ax
  235.     mov ax,tempax
  236.     shl ax,4
  237.     add di,ax
  238.     add ax,ax
  239.     add ax,ax
  240.     add di,ax
  241.  
  242.     mov ah,120
  243.     sub ah,bl
  244.     jz zznull_lengde
  245.  
  246.     mov dx,_topx2
  247.     mov cx,_topy2
  248.  
  249.     mov si,_kdy
  250.     mov bp,_kdx
  251.  
  252. zznext_down:
  253.     mov bh,ch
  254.     mov bl,dh
  255.     mov al,[bx]
  256.     mov [es:di],al
  257.     add cx,si
  258.     add dx,bp
  259.     add di,80
  260.     dec ah
  261.     jne zznext_down
  262.  
  263. zznull_lengde:
  264.     mov si,_kdy
  265.     mov bp,_kdx
  266.  
  267.     add _topx,si
  268.     add _topx,si
  269.     sub _topy,bp
  270.     sub _topy,bp
  271.  
  272.     mov si,tempsi
  273.     add si,184
  274.  
  275.     mov di,topdi
  276.     inc di
  277.  
  278.     dec _lines
  279.     jnz zznext_linje
  280.  
  281.     ret
  282. bunn    endp
  283.  
  284. ; ***** WHOLE *****
  285.  
  286. whole    proc near
  287.  
  288.     xor di,di
  289.     mov _lines,80
  290. qqnext_linje:
  291.     mov ax,_topx
  292.     mov _topx2,ax
  293.     mov ax,_topy
  294.     mov _topy2,ax
  295.     mov topdi,di
  296.     mov ax,120*256
  297.  
  298.     mov dx,_topx2
  299.     mov cx,_topy2
  300.  
  301.     mov si,_kdyhalf
  302.     mov bp,_kdx
  303.  
  304. qqnext_down:
  305.     mov bh,ch
  306.     mov bl,dh
  307.     mov al,[bx]
  308.     mov [es:di],al
  309.     add cx,si
  310.     add dx,bp
  311.     add di,80
  312.     dec ah
  313.     jne qqnext_down
  314.  
  315. qqnull_lengde:
  316.     mov si,_kdy
  317.     mov bp,_kdxhalf
  318.  
  319.     add _topx,si
  320.     add _topx,si
  321.     sub _topy,bp
  322.     sub _topy,bp
  323.  
  324.     mov di,topdi
  325.     inc di
  326.  
  327.     dec _lines
  328.     jnz qqnext_linje
  329.  
  330.     ret
  331. whole    endp
  332.  
  333.  
  334. ; ***** ASMZOOM *****
  335.  
  336. _asmzoom proc far
  337.  
  338.     mov ax,_shx
  339.     mov _topx,ax
  340.     mov ax,_shy
  341.     mov _topy,ax
  342.  
  343.     lds si,_farfrac1
  344.     xor si,si
  345.     mov ax,0300h+MAP_MASK
  346.     mov dx,SC_INDEX
  347.     out dx,ax
  348.  
  349.     call center
  350.  
  351.     mov ax,_shx
  352.     add ax,_sdy
  353.     mov _topx,ax
  354.     mov ax,_shy
  355.     sub ax,_sdx
  356.     mov _topy,ax
  357.  
  358.     lds si,_farfrac1
  359.     mov si,92
  360.     mov ax,0c00h+MAP_MASK
  361.     mov dx,SC_INDEX
  362.     out dx,ax
  363.  
  364.     call center
  365.  
  366.     mov ax,_khx
  367.     mov _topx,ax
  368.     mov ax,_khy
  369.     mov _topy,ax
  370.  
  371.     lds si,_farfrac2
  372.     xor si,si
  373.     mov ax,0300h+MAP_MASK
  374.     mov dx,SC_INDEX
  375.     out dx,ax
  376.  
  377.     call top
  378.  
  379.     mov ax,_khx
  380.     add ax,_kdy
  381.     mov _topx,ax
  382.     mov ax,_khy
  383.     sub ax,_kdx
  384.     mov _topy,ax
  385.  
  386.     lds si,_farfrac2
  387.     mov si,92
  388.     mov ax,0c00h+MAP_MASK
  389.     mov dx,SC_INDEX
  390.     out dx,ax
  391.  
  392.     call top
  393.  
  394.     mov ax,_khx
  395.     mov _topx,ax
  396.     mov ax,_khy
  397.     mov _topy,ax
  398.  
  399.     lds si,_farfrac2
  400.     xor si,si
  401.     mov ax,0300h+MAP_MASK
  402.     mov dx,SC_INDEX
  403.     out dx,ax
  404.  
  405.     call bunn
  406.  
  407.     mov ax,_khx
  408.     add ax,_kdy
  409.     mov _topx,ax
  410.     mov ax,_khy
  411.     sub ax,_kdx
  412.     mov _topy,ax
  413.  
  414.     lds si,_farfrac2
  415.     mov si,92
  416.     mov ax,0c00h+MAP_MASK
  417.     mov dx,SC_INDEX
  418.     out dx,ax
  419.  
  420.     call bunn
  421.  
  422.     retf
  423. _asmzoom endp
  424.  
  425. ; ***** VOXELTWIST *****
  426.  
  427. _voxeltwist proc far
  428.  
  429.     mov ax,_khx
  430.     mov _topx,ax
  431.     mov ax,_khy
  432.     mov _topy,ax
  433.  
  434.     lds si,_farfrac2
  435.     xor si,si
  436.     mov ax,0300h+MAP_MASK
  437.     mov dx,SC_INDEX
  438.     out dx,ax
  439.  
  440.     call whole
  441.  
  442.     mov ax,_khx
  443.     add ax,_kdy
  444.     mov _topx,ax
  445.     mov ax,_khy
  446.     sub ax,_kdx
  447.     mov _topy,ax
  448.  
  449.     lds si,_farfrac2
  450.     mov si,92
  451.     mov ax,0c00h+MAP_MASK
  452.     mov dx,SC_INDEX
  453.     out dx,ax
  454.  
  455.     call whole
  456.  
  457.     retf
  458.  
  459. _voxeltwist endp
  460.  
  461. ; ***** DRAWVOXEL *****
  462.  
  463. _drawvoxel proc far
  464.  
  465.     les si,_farfrac1
  466.     lds si,_farfrac2
  467.  
  468.     mov _lines,VOXBREDDE
  469.     xor di,di
  470.  
  471. next_vertical:
  472.     xor ah,ah
  473.     mov tempdi,di
  474.     mov bp,_farbp
  475.     mov dx,VOXLINJER+255*256
  476.  
  477. next_right:
  478.     mov cx,[bp]
  479.     inc bp
  480.     inc bp
  481.     add cx,[bp]
  482.     mov [bp],cx
  483.     inc bp
  484.     inc bp
  485.  
  486.     mov bx,[bp]
  487.     inc bp
  488.     inc bp
  489.     add bx,[bp]
  490.     mov [bp],bx
  491.     inc bp
  492.     inc bp
  493.  
  494.     mov bl,ch
  495.     mov bh,[bx]
  496.     mov al,bh
  497.     mov si,dx
  498.     or al,[es:si]
  499.     mov bl,dl
  500.     add bh,VOXBREDDE
  501.     mov cl,[es:bx]
  502.     sub cl,ah
  503.     jle skip_denne
  504.     add ah,cl
  505.     xor ch,ch
  506.     rep stosb
  507.  
  508. skip_denne:
  509.     dec ah
  510.     dec dl
  511.     jnz next_right
  512.  
  513.     mov ax,di
  514.     mov al,192
  515.     mov si,ax
  516.     mov [es:si],di
  517.  
  518.     mov di,tempdi
  519.     add di,256
  520.     dec _lines
  521.     jnz next_vertical
  522.  
  523.     retf
  524.  
  525. _drawvoxel endp
  526.  
  527. ; ***** FARMOVE
  528.  
  529. _farmove proc far
  530.  
  531.     pusha
  532.     push ds
  533.     push es
  534.     cld
  535.  
  536.     lds si,_farfrom
  537.     les di,_farto
  538.  
  539.     mov cx,16000
  540.     rep movsd
  541.  
  542.     pop es
  543.     pop ds
  544.     popa
  545.  
  546.     retf
  547.  
  548. _farmove endp
  549.  
  550. ; ***** FARMOVE320
  551.  
  552. _farmove320 proc far
  553.  
  554.     pusha
  555.     push ds
  556.     push es
  557.     cld
  558.  
  559.     lds si,_farfrom
  560.     les di,_farto
  561.  
  562.     mov cx,80
  563.     rep movsd
  564.  
  565.  
  566.     pop es
  567.     pop ds
  568.     popa
  569.  
  570.     retf
  571.  
  572. _farmove320 endp
  573.  
  574. ; ***** MOVEF32 *****
  575.  
  576. _movef32 proc far
  577.     mov ax,ds
  578.     mov es,ax
  579.  
  580.     mov di,si
  581.     add si,62
  582.  
  583.     mov cx,(80*31)/4
  584.     cld
  585.     rep movsd
  586.  
  587.     retf
  588. _movef32 endp
  589.  
  590. end
  591.  
  592.