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

  1. Program LameLine;
  2.  
  3. Var     x1,y1,x2,y2   : Integer;
  4.         a             : Real;
  5.  
  6. Procedure Line(X1,Y1,X2,Y2:Word;Col:Byte); Assembler;
  7. Var       Data_2           : Byte;
  8.           Data_3           : Word;
  9.           Data_4           : Word;
  10.           Data_5           : Word;
  11.           Data_6           : Word;
  12.           Data_7           : Word;
  13.           Data_8           : Word;
  14.           Data_9           : Word;
  15.           Data_10          : Word;
  16.           data_11e       : Word;
  17. asm
  18.                 cli
  19.                 jmp     @start
  20.  
  21. @Sub_1:         pusha
  22.         push    word ptr [si+8]
  23.         shl    word ptr [si+8],8
  24.         push    word ptr [si+6]
  25.         push    word ptr [si+4]
  26.         push    word ptr [si+2]
  27.         push    word ptr [si]
  28.         call    @sub_3
  29.         add    sp,0Ah
  30.         popa
  31. ret
  32. @Sub_2:         push    ax
  33.         push    di
  34.         mov    di,bx
  35.         shl    di,2
  36.         add    di,bx
  37.         shl    di,6
  38.         add    di,cx
  39.         or    al,al
  40.         jnz    @loc_15
  41.         cmp    es:[di],ah
  42.         jne    @loc_16
  43. @loc_15:
  44.         stosb
  45. @loc_16:
  46.         pop    di
  47.         pop    ax
  48. ret
  49. @Sub_3:         enter    4,0
  50.         pusha
  51.         mov    ax,[bp+8]
  52.         sub    ax,[bp+4]
  53.         mov    [bp-2],ax
  54.         jns    @loc_17
  55.         neg    ax
  56. @loc_17:
  57.         mov    bx,[bp+0Ah]
  58.         sub    bx,[bp+6]
  59.         mov    [bp-4],bx
  60.         jns    @loc_18
  61.         neg    bx
  62. @loc_18:
  63.         cmp    ax,bx
  64.         jl    @loc_20
  65.         mov    ax,[bp-2]
  66.         or    ax,ax
  67.         mov    cx,[bp+4]
  68.         jns    @loc_19
  69.         xchg    [bp+8],cx
  70.         mov    [bp+4],cx
  71.         neg    word ptr [bp-2]
  72.         mov    ax,[bp+6]
  73.         xchg    [bp+0Ah],ax
  74.         mov    [bp+6],ax
  75.         neg    word ptr [bp-4]
  76. @loc_19:
  77.         mov    ax,cx
  78.         sub    ax,[bp+4]
  79.         imul    word ptr [bp-4]
  80.         idiv    word ptr [bp-2]
  81.         add    ax,[bp+6]
  82.         mov    bx,ax
  83.         mov    ax,[bp+0Ch]
  84.         call    @sub_2
  85.         inc    cx
  86.         cmp    cx,[bp+8]
  87.         jle    @loc_19
  88.         jmp    @loc_22
  89. @loc_20:
  90.         mov    ax,[bp-4]
  91.         or    ax,ax
  92.         mov    bx,[bp+6]
  93.         jns    @loc_21
  94.         mov    ax,[bp+4]
  95.         xchg    [bp+8],ax
  96.         mov    [bp+4],ax
  97.         neg    word ptr [bp-2]
  98.         xchg    [bp+0Ah],bx
  99.         mov    [bp+6],bx
  100.         neg    word ptr [bp-4]
  101. @loc_21:
  102.         mov    ax,bx
  103.         sub    ax,[bp+6]
  104.         imul    word ptr [bp-2]
  105.         idiv    word ptr [bp-4]
  106.         add    ax,[bp+4]
  107.         mov    cx,ax
  108.         mov    ax,[bp+0Ch]
  109.         call    @sub_2
  110.         inc    bx
  111.         cmp    bx,[bp+0Ah]
  112.         jle    @loc_21
  113. @loc_22:
  114.         popa
  115.         leave
  116. ret
  117. @Start:         mov Data_2,0h
  118.                 mov Data_3,078h
  119.                 mov Data_4,028h
  120.                 mov Data_5,06h
  121.                 mov Data_6,03h
  122.                 mov Data_7,05Dh
  123.                 mov Data_8,0ADh
  124.                 mov Data_9,05h
  125.                 mov Data_10,04h
  126.                 mov Data_11e,02f7h
  127.         push    0A000h
  128.         pop    es
  129.         cld
  130.         mov    si,data_11e
  131.         push    es
  132.         push    ds
  133.         pop    es
  134.         mov    di,si
  135.         mov    ax,X1
  136.         stosw
  137.         mov    ax,Y1
  138.         stosw
  139.         mov    ax,X2
  140.         stosw
  141.         mov    ax,Y2
  142.         stosw
  143.                 mov     al,Col;
  144.  
  145.         stosw
  146.         pop    es
  147.                 call    @sub_1
  148.         add    si,0Ah
  149.         cmp    si,35Bh
  150.         jb    @loc_4
  151.         mov    al,0FFh
  152.         mov    data_2,al
  153.         mov    si,2F7h
  154. @loc_4:
  155.         mov    bx,data_3
  156.         add    bx,data_5
  157.         cmp    bx,136h
  158.         jge    @loc_5
  159.         cmp    bx,0Ah
  160.         jg    @loc_6
  161. @loc_5:
  162.         neg     data_5
  163. @loc_6:
  164.         mov    data_3,bx
  165.         mov    ax,data_4
  166.         add    ax,data_6
  167.         cmp    ax,0BEh
  168.         jge    @loc_7
  169.         cmp    ax,0Ah
  170.         jg    @loc_8
  171. @loc_7:
  172.         neg    data_6
  173. @loc_8:
  174.         mov    data_4,ax
  175.         mov    ax,data_7
  176.         add    ax,data_9
  177.         cmp    ax,12Fh
  178.         jge    @loc_9
  179.         cmp    ax,0Ah
  180.         jg    @loc_10
  181. @loc_9:
  182.         neg    data_9
  183. @loc_10:
  184.         cmp    ax,bx
  185.         jne    @loc_11
  186.         inc    ax
  187. @loc_11:
  188.         mov    data_7,ax
  189.         mov    ax,data_8
  190.         add    ax,data_10
  191.         cmp    ax,0BEh
  192.         jge    @loc_12
  193.         cmp    ax,0Ah
  194.         jg    @loc_13
  195. @loc_12:
  196.         neg    data_10
  197. @loc_13:
  198.                 sti
  199. end;
  200.  
  201. Begin
  202. asm
  203.         mov ax,013h
  204.         int 10h
  205. end;
  206. x1:=159;
  207. y1:=99;
  208. x2:=160;
  209. y2:=100;
  210. repeat
  211. Line(x1,y1,x2,y1,9);
  212. Line(x1,y2,x2,y2,9);
  213. Line(x1,y1,x1,y2,9);
  214. Line(x2,y1,x2,y2,9);
  215. a:=a+100/160;
  216. dec(x1);
  217. inc(x2);
  218. y1:=99-Round(a);
  219. y2:=100+Round(a);
  220. asm
  221.         mov     dx,03dah
  222. @y1:    in      al,dx
  223.         test    al,8
  224.         jz      @y1
  225. @y2:    in      al,dx
  226.         test    al,8
  227.         jnz     @y2
  228. end;
  229. until X1<0;
  230. asm
  231.         mov ax,03h
  232.         int 10h
  233. end
  234. End.
  235.  
  236.