home *** CD-ROM | disk | FTP | other *** search
/ CD-X 1 / cdx_01.iso / demodisc / tyrant / dycp / dycp.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1995-01-01  |  2.9 KB  |  130 lines

  1. {
  2.                                  Dycp rutin
  3.  
  4.   Ez a rutin szintén nagyon rövid és gyors, ezért ugyanaz érvényes rá, mint
  5. az elôzôre. A mûködési elvét nem részletezem, mert az hiszem, hogy igazán nem
  6. bonyolult.
  7.  
  8. A forráskód :
  9. }
  10.  
  11. Program _Dycp;
  12.  
  13. Uses Crt,FontInst;
  14.  
  15. Const Szoveg:String =
  16.     '.................. ┼NEWS DISKMAG ISSUE #1.666 BY XEED ..............';
  17.  
  18.  
  19. Var ScrollKep:Array[0..400,0..1] of Byte;
  20.     SinTable:Array[0..360*4-1] of Byte;
  21.     Poz,CPos,SPos,MaxChar:Byte;
  22.     SinPos,SinSZ:Word;
  23.     A:Word;
  24.  
  25. Procedure Scroll(AD:Word);Assembler;
  26.           ASM
  27.            MOV AX,0A000h
  28.            MOV ES,AX
  29.            XOR DI,DI
  30.            XOR DX,DX
  31.            LEA SI,ScrollKep
  32.            LEA BX,SinTable
  33.            MOV AX,SinPos
  34.            MOV SinSz,AX
  35.        @C1:PUSH DI
  36.  
  37.            LEA BX,SinTable
  38.            ADD BX,SinSz
  39.            MOV AL,[BX]
  40.            MOV POZ,AL
  41.            INC SinSz
  42.            CMP SinSz,360*4
  43.            JB @c2
  44.            MOV SinSz,0
  45.        @c2:
  46.  
  47.            XOR BX,BX
  48.            MOV BL,POZ     { BL-ben poz div 8 }
  49.            MOV CL,BL      { CL-ben poz mod 8 }
  50.            SHR BL,3
  51.            AND CL,7
  52.            ADD DI,BX
  53.            ADD DI,AD
  54.            LODSW
  55.            ROR AX,CL
  56.            STOSW
  57.            MOV AL,0
  58.            STOSB
  59.  
  60.            POP DI
  61.            ADD DI,80
  62.  
  63.        @E1:INC DX
  64.            CMP DX,400
  65.            JB @C1
  66.  
  67.            CMP SinPos,0
  68.            JA @E2
  69.            MOV SinPos,360*4
  70.        @E2:SUB SinPos,2
  71.  
  72.            LEA BX,Szoveg
  73.            XOR AX,AX
  74.            MOV AL,SPos
  75.            XLAT
  76.            LEA BX,FontX
  77.            SHL AX,4
  78.            ADD BX,AX
  79.            XOR AX,AX
  80.            ADD AL,CPos
  81.            ADD BX,AX
  82.            XOR AX,AX
  83.            MOV AL,[BX]
  84.            LEA BX,ScrollKep
  85.            ADD BX,400*2
  86.            ROR AX,1
  87.            MOV [BX],AX
  88.            INC CPOS
  89.            CMP CPOS,16
  90.            JB @e3
  91.            MOV CPOS,0
  92.            INC SPOS
  93.        @E3:
  94.           END;
  95.  
  96. Begin
  97.  ASM                       { 640x400x16-os üzemmód }
  98.    MOV AX,000Eh
  99.    INT 10h
  100.    MOV DX,3D4h
  101.    MOV AX,0009h
  102.    OUT DX,AX
  103.  END;
  104.  FillChar(ScrollKep,802,0);
  105.  For A:=0 to 360*4-1 do SinTable[A]:=48+Round(Sin(6*A*Pi/360/4)*32);
  106.  SinPos:=0;SinSZ:=0;
  107.  SPos:=1;CPos:=0;MaxChar:=Length(Szoveg);
  108.  Repeat
  109.     ASM                    { Raster-idôzítés }
  110.       MOV DX,3DAh
  111.   @W1:IN AL,DX
  112.       TEST AL,8
  113.       JNE @W1
  114.   @W2:IN AL,DX
  115.       TEST AL,8
  116.       JE @W2
  117.     END;
  118.   Move(ScrollKep[1],ScrollKep[0],800);
  119.                 { Ezt már nem volt kedvem ASM-ban.}
  120.   Inc(Poz);
  121.   Scroll(0);    { A paraméterben a scroll X pozicióját leszel szives...}
  122.   If SPos>MaxChar Then SPos:=1;
  123.  Until KeyPressed;         { Åntíl kíjpresszd }
  124.  While KeyPressed do ReadKey;
  125.  ASM                       { Szöveges mód visszakapcsolása }
  126.   MOV AX,0003h
  127.   INT 10h
  128.  END;
  129. End.                       { Bonus : XeeD RuLEZ!!!! }
  130.