home *** CD-ROM | disk | FTP | other *** search
/ CD-X 1 / cdx_01.iso / demodisc / tyrant / dottunne / dottbest.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1995-03-17  |  7.0 KB  |  404 lines

  1. Program DotTunnel;                              { by TyRaNT / MurmidoneS }
  2.  
  3. Var
  4.  
  5.         SinTab    : Array[0..360] Of Shortint;
  6.         CosTab    : Array[0..360] Of Shortint;
  7.         CsilTab   : Array[0..20000] Of Word;
  8.         CsilMov   : Array[0..10000] Of Byte;
  9.         CsilTer   : Array[0..2000] Of Integer;
  10.         CsilTar   : Array[0..100] Of Integer;
  11.         Sor100    : Array[0..180] Of Word;
  12.         Szinek    : Array[0..300] Of Byte;
  13.  
  14.         zumikax      : byte;
  15.         zumikay      : byte;
  16.  
  17.         CsP,Sza   : Word;
  18.         I         : word;
  19.         te,aj     : Word;
  20.         te2,aj2   : Word;
  21.         J,K       : Word;
  22.         X,Y       : word;
  23.     A,B       : Real;
  24.         MaxCs     : Word;
  25.         IrqSave   : Byte;
  26.  
  27. Procedure GenSinCos;
  28. Begin
  29. A:=0;
  30. I:=0;
  31. Repeat
  32. SinTab[I]:=Trunc(Sin(A)*127);
  33. CosTab[I]:=Trunc(Cos(A)*127);
  34. Inc(I);
  35. A:=A+Pi/180
  36. Until A>2*Pi;
  37. End;
  38.  
  39. Procedure GenCsilTab;assembler;
  40. {RandomIze;}
  41. asm
  42.  mov    i,0
  43.  mov    j,0
  44.  {Repeat}
  45.  @repeat2:
  46.   {k:=110}
  47.   mov    k,110
  48.   { Repeat}
  49.   @repeat1:
  50.    {  X:=(SinTab[I]*K*768) Div 65536+160;}
  51.    lea    si,sintab
  52.    add    si,i
  53.    lodsw
  54.    push    ax
  55.  
  56.    xor    dx,dx
  57.    mov    ax,k
  58.    shl    ax,8
  59.    xor    ch,ch
  60.    mov    cl,zumikax
  61.    div    cx
  62.    add    ax,k
  63.    mov    cx,ax
  64.  
  65.    pop    ax
  66.    imul    cx
  67.    mov  x,dx
  68.    add    x,160
  69.  
  70.    {  Y:=(CosTab[I]*K*614) Div 65536+100;}
  71.    lea    si,costab
  72.    add    si,i
  73.    lodsw
  74.    push    ax
  75.  
  76.    xor    dx,dx
  77.    mov    ax,k
  78.    shl    ax,8
  79.    xor    ch,ch
  80.    mov    cl,zumikay
  81.    div    cx
  82.    add    ax,k
  83.    mov    cx,ax
  84.  
  85.    pop    ax
  86.    imul    cx
  87.    mov  y,dx
  88.    add    y,100
  89.    { If (X<1) Or (X>319) Then Begin X:=0; Y:=0; End;}
  90.    mov    ax,x
  91.    cmp    ax,1
  92.    jb    @nono1
  93.    cmp    ax,319
  94.    ja    @nono1
  95.    jmp    @well1
  96.    @nono1:
  97.    mov    x,0
  98.    mov    y,0
  99.    @well1:
  100.    {  If (Y<1) Or (Y>199) Then Begin X:=0; Y:=0; End;}
  101.    mov    ax,y
  102.    cmp    ax,1
  103.    jb    @nono2
  104.    cmp    ax,199
  105.    ja    @nono2
  106.    jmp    @well2
  107.    @nono2:
  108.    mov    x,0
  109.    mov    y,0
  110.    @well2:
  111.    {  CsilTab[J]:=Y*320+X;Inc(J);K:=K-1}
  112.    mov    ax,y
  113.    mov    bx,ax
  114.    shl    ax,8
  115.    shl    bx,6
  116.    add    ax,bx
  117.    add    ax,x
  118.    lea    si,csiltab
  119.    mov    bx,j
  120.    shl    bx,1
  121.    add    si,bx
  122.    mov    ds:[si],ax
  123.    inc    j
  124.    dec  k
  125.    cmp    k,10
  126.    {Until K=10;}
  127.    jne    @repeat1
  128.    { I:=I+2;}
  129.   add    i,2
  130.   cmp    i,360
  131.   {Until I=360;}
  132.  jne    @repeat2
  133.  add    zumikax,1
  134.  cmp    zumikax,0
  135.  jnz    @okx1
  136.  mov    zumikax,1
  137.  @okx1:
  138.  add    zumikay,1
  139.  cmp    zumikaY,0
  140.  jnz    @okY1
  141.  mov    zumikaY,1
  142.  @okY1:
  143.  
  144. End;
  145.  
  146. Procedure GenCsilMov;
  147. Begin
  148. I:=0;
  149. Repeat
  150. CsilMov[I]:=Random(180);
  151. CsilMov[I+1]:=Random(100);
  152. Inc(I,2);
  153. Until I>=(MaxCs*2);
  154. End;
  155.  
  156. Procedure GenCsilTer;
  157. Begin
  158. asm
  159.         push es
  160.         mov ax,ds
  161.         mov es,ax
  162.         lea di,Csiltar
  163.         xor ax,ax
  164.         mov cx,100
  165. rep     stosw
  166.         lea di,Csilter
  167.         xor ax,ax
  168.         mov cx,2000
  169. rep     stosw
  170.         pop es
  171. end;
  172.  
  173.  
  174. A:=2*Pi/360;
  175. B:=0;
  176. For I:=0 To 1440  Do Begin
  177.                    CsilTer[I+200]:=Round(Sin(B*3)*20)*320;
  178.                    CsilTer[I+200]:=CsilTer[I+200]+Round(Sin(B*4)*20);
  179.                    B:=B+A;
  180.                    End;
  181. End;
  182.  
  183.  
  184. Procedure GenSor100; assembler;
  185. asm
  186.         push es
  187.         mov ax,ds
  188.         mov es,ax
  189.         lea di,sor100
  190.         xor ax,ax
  191.         xor bx,bx
  192.         mov cx,180
  193.         xor dx,dx
  194. @gssz:  push cx
  195.         push ax
  196.         mov bx,100
  197.         mul bx
  198.         stosw
  199.         pop  ax
  200.         pop  cx
  201.         inc ax
  202.         loop @gssz
  203.         pop  es
  204. end;
  205.  
  206. Procedure Genszin; assembler;
  207. asm
  208.  
  209.         mov ax,ds
  210.         mov es,ax
  211.  
  212.         lea di,szinek
  213.         add di,298
  214.         xor dx,dx
  215.         mov cx,100
  216.  
  217. @yoo:   mov al,dl
  218.         shr al,1
  219.         stosb
  220.         sub di,2
  221.         mov al,dl
  222.         shr al,1
  223.         stosb
  224.         sub di,2
  225.         mov al,dl
  226.         stosb
  227.         sub di,2
  228.         cmp dx,62
  229.         je  @yot
  230.         add dx,2
  231. @yot:   loop @yoo
  232.  
  233.        MOV BX,1;
  234.        MOV CX,99;
  235.        push ds
  236.        pop  es
  237.        MOV DX,Offset szinek
  238.        mov ax,01012h
  239.        INT 10H
  240. End;
  241.  
  242. Begin
  243. zumikax:=70;
  244. zumikay:=105;
  245. asm
  246.           Jmp     @Start
  247.  
  248. @Ret:     mov     dx,03dah
  249. @y1:      in      al,dx
  250.           test    al,8
  251.           jz      @y1
  252. @y2:      in      al,dx
  253.           test    al,8
  254.           jnz     @y2
  255.           ret
  256.  
  257.  
  258. @Fel:     mov     CX,MaxCs
  259.           dec     cx
  260.           mov     si,offset CsilMov
  261. @Lo2:     push    cx
  262.  
  263.           lodsw
  264.  
  265.           cmp     ax,0
  266.           je      @t1
  267.  
  268.           nop
  269.  
  270. @ko:      inc     ah
  271.           cmp     ah,100
  272.           jne     @Lt1
  273.           xor     ah,ah
  274. @Lt1:     mov     [si-2],ax
  275.           push    ax
  276.  
  277.           mov     cl,ah
  278.           xor     ch,ch
  279.           xor     ah,ah
  280.  
  281.           mov     bx,offset sor100
  282.           add     bx,ax
  283.           add     bx,ax
  284.           mov     ax,[bx]
  285.           add     ax,cx
  286.  
  287.  
  288.           mov     Bx,offset CsilTab
  289.           add     bx,ax
  290.           add     bx,ax
  291.           mov     di,[bx]
  292.  
  293.           pop     ax
  294.  
  295.           mov     al,ah
  296.           xor     ah,ah
  297.           mov     bx,offset CsilTar
  298.           add     bx,ax
  299.           add     bx,ax
  300.           add     di,[bx]
  301.  
  302.           cmp     di,te
  303.           jb      @t1
  304.           cmp     di,aj
  305.           ja      @t1
  306.  
  307.           stosb
  308.  
  309. @T1:      pop     cx
  310.           loop    @Lo2
  311.           ret
  312.  
  313. @csilmv:  push  es
  314.           push  ds
  315.           pop   es
  316.  
  317.           mov   si,offset CsilTer
  318.           add   si,csp
  319.           mov   di,offset CsilTar
  320.           mov   cx,100
  321. rep       movsw
  322.  
  323.           add  csp,2
  324.           cmp  csp,920*2
  325.           jne  @cmk
  326.           mov  csp,200*2
  327.  
  328. @cmk:     pop   es
  329.           ret
  330.  
  331. @Start:   mov     ax,013h
  332.           int     10h
  333.  
  334.           Call    Genszin
  335.  
  336.           mov     ax,09000h
  337.           mov     es,ax
  338.           xor     di,di
  339.           xor     ax,ax
  340.           mov     cx,32000
  341. rep       stosw
  342.           mov     csp,20
  343.           mov     sza,500
  344.           call    @csilmv
  345.           mov     te,20*320
  346.           mov     te2,20*320
  347.           mov     aj,180*320
  348.           mov     aj2,180*320
  349.           mov     maxcs,5000
  350.           call    GenSinCos;
  351.           call    GenSor100;
  352.           call    GenCsilMov
  353.           call    GenCsilTab;
  354.           call    GenCsilTer;
  355.  
  356.  
  357.           mov     cx,100
  358. @tmcs:    push    cx
  359.           call    @csilmv
  360.           pop     cx
  361.           loop    @tmcs
  362.  
  363. @E1:      call    @fel
  364. {          call      gencsiltab}
  365.  
  366.           push  ds
  367.           push  es
  368.           push  es
  369.           pop   ds
  370.           push  0a000h
  371.           pop   es
  372.           mov   si,20*320+20
  373.           mov   di,20*320+20
  374.           mov   cx,160
  375. @cl1:     push  cx
  376.           mov   cx,280/4
  377. db $66
  378. rep       movsw
  379.           add  si,40
  380.           add  di,40
  381.           pop   cx
  382.           loop  @cl1
  383.           pop   es
  384.           pop   ds
  385.  
  386.           call    @ret
  387.           xor   di,di
  388.           mov   cx,16000
  389. db $66
  390.           xor   ax,ax
  391. db $66
  392. rep       stosw
  393.  
  394.           call    @csilmv
  395.           call    @csilmv
  396.  
  397.  
  398.           in      al,060h
  399.           cmp     al,1
  400.           jne     @e1
  401.  
  402. end;
  403.  
  404. End.