home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / demosrce / megscrol / megscrol.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-08-01  |  20.8 KB  |  732 lines

  1. {///////////////////////////////////////////////////////////////////////////}
  2. { Ca y est...  je  me suis  décidé  à mettre  le source  de MEGSCROL dans le
  3.   domaine public!  A mon point  de vue,  c'est  un petit programme assez peu
  4.   important,  mais c'est a priori  susceptible  d' intéresser  quelques  uns
  5.   d'entre vous.  Ceux-ci  sont  évidemment  curieux  de savoir  comment "ça"
  6.   marche! En fait, c'est relativement simple (une fois  que l'on a visualisé
  7.   le fichier PCX), sauf peut-être en ce qui concerne  la partie graphique en
  8.   BASM.  J'ai fait un effort violent  en réécrivant  les routines SB pour le
  9.   DMA  entièrement  en TP (à l'origine c'est en BASM et pour toute ligne IRQ
  10.   et canal DMA,  et avec  une réelle détection automatique du port). Voilà!,
  11.   sachez donc tirer profit  de ce petit cadeau  et évitez de faire partie du
  12.   club  très large  des  LAMERS  en "pompant"  bêtement  et en changeant les
  13.   textes des messages...
  14.  
  15.   Pour  de  plus  amples  informations,  d'éventuelles suggestions,  ou tout
  16.   simplement pour le fun, vous pouvez m'écrire à l'adresse suivante:
  17.  
  18.                    Patrick Ruelle
  19.              43, av. de Grande Bretagne
  20.                 98000 Monaco
  21.                 Principauté de Monaco
  22.  
  23.   Evidemment  je n'ai pas pris  la décision  de diffuser  ce source  dans le
  24.   but de demander de l'argent,  mais il va de soit que toutes sortes de dons
  25.   sont acceptés (carte  postale,  matos,  argent, spécialités locales, docs,
  26.   etc...).  N'oubliez pas non plus que cette diffusion ne m'enlève nullement
  27.   mes  droits d'auteur  de cette mmm... de démo;  ce petit package peut être
  28.   diffusé librement à condition de rester sous sa forme initiale:
  29.  
  30.  MEGSCROL.EXE  01/08/94  12304 L'exécutable utilisant MEGIMG et MEGSCROL.DGT
  31.  MEGSCROL.PAS  01/08/94  21344 Le source principal de la démo
  32.  SB_DMA2 .PAS  27/07/94   6805 Le source des routines DMA pour la SB
  33.  MEGSCROL.PCX  03/06/93  31894 L'image des polices au format PCX
  34.  MEGSCROL.RAW  27/07/94  64768    "     "     "    en format brut (img+pal)
  35.  MEGSCROL.DGT  03/06/94  41736 Le pattern sonore répétitif
  36.             ------
  37.            TOTAL    178851
  38.  
  39.   La version  actuelle  est remaniée exprès pour la diffusion de ce package,
  40.   mais en fait ce programme date de début 1993...
  41.  
  42.                       Patrick Ruelle (Monac) / GRYPHAEA }
  43. {///////////////////////////////////////////////////////////////////////////}
  44. {$R-} {$V-} {$G+}
  45. {$M 8000,0,250000}
  46.  
  47. PROGRAM MegaScroll;
  48.  
  49.  
  50. USES Crt,Dos,SB_DMA2;
  51.  
  52. {///////////////////////////////////////////////////////////////////////////}
  53.  
  54. CONST
  55.      xy :ARRAY[1..179] OF ARRAY[1..2] OF WORD=
  56.      {Police 1}
  57.      ((0,0),(16,0),(32,0),(112,0),(128,0),(144,0),(224,0),(256,0),(272,0),
  58.       (288,0),(304,0),(0,16),(16,16),(32,16),(48,16),(64,16),(80,16),
  59.       (96,16),(144,16),(208,16),(224,16),(240,16),(256,16),(272,16),
  60.       (288,16),(304,16),(0,32),(16,32),(32,32),(48,32),(64,32),(80,32),
  61.       (96,32),(112,32),(128,32),(144,32),(160,32),(176,32),(192,32),
  62.       (208,32),(224,32),(240,32),(256,32),(272,32),(288,32),
  63.       {Police 2}
  64.       (0,49),(16,49),(32,49),(48,49),(64,49),(80,49),(96,49),(112,49),
  65.       (128,49),(144,49),(160,49),(176,49),(192,49),(208,49),(224,49),
  66.       (240,49),(256,49),(272,49),(288,49),(304,49),(0,65),(16,65),(32,65),
  67.       (48,65),(64,65),(80,65),(96,65),(112,65),(128,65),(144,65),(160,65),
  68.       (176,65),(192,65),(208,65),(224,65),(240,65),(256,65),(272,65),
  69.       (288,65),(304,65),
  70.       {Police 3}
  71.       (0,83),(16,83),(32,83),(48,83),(64,83),(80,83),(96,83),(112,83),
  72.       (128,83),(144,83),(160,83),(176,83),(192,83),(208,83),(224,83),
  73.       (240,83),(256,83),(272,83),(288,83),(304,83),(0,100),(16,100),(32,100),
  74.       (48,100),(64,100),(80,100),(96,100),(112,100),(128,100),(144,100),
  75.       (160,100),(176,100),(192,100),(208,100),(224,100),(240,100),(256,100),
  76.       (272,100),(288,100),(304,100),(0,117),(16,117),(32,117),(48,117),
  77.       (64,117),(80,117),(96,117),(112,117),(128,117),(144,117),
  78.       {Police 4}
  79.       (0,136),(18,136),(36,136),(54,136),(72,136),(90,136),(108,136),
  80.       (126,136),(144,136),(162,136),(180,136),(198,136),(216,136),(234,136),
  81.       (252,136),(270,136),(288,136),(0,153),(18,153),(36,153),(54,153),
  82.       (72,153),(90,153),(108,153),(126,153),(144,153),(162,153),(180,153),
  83.       (198,153),(216,153),(234,153),(252,153),(270,153),(288,153),
  84.       (0,170),(18,170),(36,170),(54,170),(72,170),(90,170),(108,170),
  85.       (126,170),(144,170),(162,170));
  86.  
  87.      texte  :ARRAY[1..1083] OF BYTE=
  88.      (52,63,70,61,53,46,50,46,1,54,64,1,61,63,60,66,49,1,65,60,1,61,63,50,
  89.       64,50,59,65,1,70,60,66,1,46,1,59,50,68,1,54,59,65,63,60,1,48,46,57,57,
  90.       50,49,1,83,58,50,52,46,1,64,48,63,60,57,57,83,1,68,50,57,57,81,81,81,
  91.       1,65,53,54,64,1,51,60,59,65,1,54,64,1,63,46,65,53,50,63,1,66,52,57,70,
  92.       84,1,64,60,1,57,50,65,83,64,1,65,46,56,50,1,46,59,60,65,53,50,63,1,60,
  93.       59,50,81,81,81,1,108,93,86,105,1,86,87,100,106,105,1,105,93,94,104,1,
  94.       100,99,90,127,1,94,1,105,93,94,99,96,1,105,93,86,105,1,94,105,129,104,
  95.       1,98,106,88,93,1,87,90,105,105,90,103,125,1,99,100,108,134,1,94,1,92,
  96.       94,107,90,1,110,100,106,1,86,1,97,100,107,90,97,110,1,104,98,94,97,90,
  97.       110,124,1,132,123,1,93,106,98,123,123,123,1,99,100,105,1,107,90,103,
  98.       110,1,91,106,99,99,110,1,130,132,131,126,1,98,86,110,87,90,1,110,100,
  99.       106,1,108,86,99,105,1,104,100,98,90,105,93,94,99,92,1,98,100,103,90,1,
  100.       98,100,89,90,103,99,127,1,105,93,90,99,1,97,100,100,96,126,1,160,140,
  101.       136,143,172,172,172,1,141,144,149,136,147,147,160,1,136,1,153,140,136,
  102.       147,1,141,150,149,155,176,176,176,1,144,155,178,154,1,148,160,1,141,
  103.       136,157,150,153,144,155,140,1,150,149,140,176,1,149,150,158,177,1,144,
  104.       155,178,154,1,155,144,148,140,1,155,150,1,155,153,160,1,136,1,148,144,
  105.       159,140,139,1,141,150,149,155,1,154,138,153,150,147,147,176,1,53,86,
  106.       172,1,53,86,172,1,53,86,172,1,46,99,139,1,59,100,158,82,1,92,156,50,
  107.       104,154,1,68,93,136,65,127,1,160,50,104,172,1,46,1,99,140,68,1,91,150,
  108.       59,105,1,158,54,105,143,1,46,1,88,150,61,101,140,63,1,87,136,63,123,
  109.       176,81,1,33,28,22,24,1,34,33,24,2,1,39,27,24,1,21,20,37,1,38,24,24,32,
  110.       38,1,37,24,20,31,31,44,1,39,34,1,32,34,41,24,1,28,33,38,28,23,24,1,39,
  111.       27,24,1,25,34,33,39,7,7,7,1,21,40,39,1,39,27,28,38,1,45,28,26,45,20,26,
  112.       1,28,38,1,20,21,38,34,31,40,39,24,31,44,1,37,24,20,31,2,1,20,33,23,1,
  113.       23,34,33,24,1,42,28,39,27,1,20,1,38,39,20,33,23,20,37,23,1,41,26,20,1,
  114.       27,20,37,23,42,20,37,24,7,1,64,105,60,35,84,126,1,33,34,42,1,42,20,39,
  115.       22,27,1,25,34,37,1,39,27,28,38,1,33,24,42,1,39,37,28,22,30,7,7,7,1,1,1,
  116.       1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,24,20,38,28,24,37,1,39,34,1,37,24,
  117.       20,23,2,7,7,7,1,42,34,40,31,23,1,44,34,40,1,31,28,30,24,1,39,34,1,27,
  118.       24,20,37,1,38,34,32,24,1,58,106,154,28,48,127,1,34,30,20,44,2,1,1,35,
  119.       25,25,25,7,7,7,1,39,27,28,38,1,39,24,43,39,1,28,38,33,4,39,1,21,28,26,
  120.       1,24,33,34,40,26,27,1,20,33,23,1,28,38,1,39,34,34,1,38,31,34,42,7,7,7,
  121.       1,1,1,1,1,1,1,1,1,1,1,105,93,86,105,129,104,1,94,105,126,126,126,1,108,
  122.       93,86,105,1,86,1,98,90,92,86,1,104,88,103,100,97,97,126,126,126,1,92,
  123.       103,90,90,105,94,99,92,104,1,105,100,124,1,173,65,63,64,54,173,1,173,
  124.       66,57,65,63,46,51,60,63,48,50,173,1,173,65,47,64,173,1,173,51,66,65,66,
  125.       63,50,1,48,63,50,68,173,1,173,63,50,59,46,54,64,64,46,59,48,50,173,1,
  126.       86,99,89,1,86,97,97,1,105,93,90,1,100,105,93,90,103,104,126,126,126,1,
  127.       86,99,89,1,99,100,108,134,1,101,103,90,101,86,103,90,1,110,100,106,103,
  128.       104,90,97,91,1,105,100,1,104,90,90,1,105,93,90,1,105,90,109,105,1,87,
  129.       90,88,100,98,94,99,92,1,1,1,1,137,144,142,142,140,153,1,136,149,139,1,
  130.       1,137,144,142,142,140,153,1,136,142,136,144,149,172,1,158,140,147,147,
  131.       176,176,176,1,158,140,178,153,140,1,138,147,150,154,140,1,155,150,1,
  132.       155,143,140,1,140,149,139,172,1,138,150,139,140,177,1,142,141,159,1,
  133.       136,149,139,1,154,150,156,149,139,1,137,160,1,19,32,34,33,20,22,19,1,
  134.       141,153,150,148,1,26,37,44,35,27,20,24,20,1,174,35,7,37,40,24,31,31,24,
  135.       175,176,1,137,160,140,1,137,160,140,172,172,172,1,1,1);
  136.  
  137.      trace   :ARRAY[1..18] OF ARRAY[1..3] OF BYTE=
  138.      ((241,242,243),(242,243,244),(243,244,245),(244,245,246),(245,246,247),
  139.       (246,247,248),(247,248,249),(248,249,250),(249,250,251),(250,251,252),
  140.       (249,250,251),(248,249,250),(247,248,249),(246,247,248),(245,246,247),
  141.       (244,245,246),(243,244,245),(242,243,244));
  142.  
  143.  
  144. {DECLARATION DES TYPES GLOBAUX}
  145. TYPE
  146.      imptr =^img;
  147.      img   =ARRAY[0..65000] OF BYTE;
  148.      type1 =ARRAY[0..767] OF BYTE;
  149.  
  150. {///////////////////////////////////////////////////////////////////////////}
  151.  
  152. {DECLARATION DES VARIABLES GLOBALES}
  153. VAR
  154.      palet       :type1;
  155.      s7,s2       :imptr;
  156.      int_truc,
  157.      old_int_truc:Pointer;
  158.      res         :BYTE;
  159.      regs        :Registers;
  160.      i,j,k       :WORD;
  161.      fic1        :FILE;
  162.      currvert    :WORD;
  163.      traceur     :BYTE;
  164.      posit       :ARRAY[1..3] OF BYTE;
  165.      Blaster,
  166.      DebSB       :Boolean;
  167.      Tmp         :Pointer;
  168. {///////////////////////////////////////////////////////////////////////////}
  169.  
  170. {INITIALISATION ET VERIFICATION DU MODE VIDEO}
  171. PROCEDURE Init_Mode(numero:BYTE);ASSEMBLER;
  172. ASM
  173.   Mov   AH, 0
  174.   Mov   AL, numero
  175.   Int   10h
  176.   Mov   AH, 15
  177.   Int   10h
  178.   Mov   res, AL
  179. END;
  180.  
  181. {///////////////////////////////////////////////////////////////////////////}
  182.  
  183. PROCEDURE Rien;INTERRUPT;
  184. BEGIN
  185. END;
  186.  
  187.  
  188. PROCEDURE Zoom(valeur:WORD);ASSEMBLER;
  189. ASM
  190.   mov   dx, 3D4h
  191.   mov   ax, 09h
  192.   out   dx, ax
  193.   inc   dx
  194.   mov   ax, valeur
  195.   out   dx, ax
  196. END;
  197.  
  198.  
  199. PROCEDURE Active_Palette(VAR pal; deb,nbre:WORD);
  200. BEGIN
  201. ASM
  202.   push  ds
  203.   lds   si, pal
  204.   mov   dx, $3c8
  205.   cld
  206.   mov   cx, nbre
  207.   mov   bx, deb
  208.  @@1:
  209.   mov   al, bl
  210.   out   dx, al
  211.   inc   dx
  212.   lodsb
  213.   out   dx, al
  214.   lodsb
  215.   out   dx, al
  216.   lodsb
  217.   out   dx, al
  218.   dec   dx
  219.   inc   bl
  220.   loop  @@1
  221.   pop   ds
  222. END;
  223. END;
  224.  
  225.  
  226. PROCEDURE SynchroV;ASSEMBLER;
  227. ASM
  228.   Mov   dx, 03DAh
  229.  @deb1:
  230.   In    al, DX
  231.   Test  al, 08
  232.   Jne   @deb1
  233.  @deb2:
  234.   In    al, DX
  235.   Test  al, 08
  236.   Je    @deb2
  237. END;
  238.  
  239.  
  240. PROCEDURE SplitScr(ligne:Integer);
  241. LABEL l01,l02;
  242. CONST ADDR_6845=$63;
  243. BEGIN
  244. ASM
  245.   push  ds
  246.   mov   ax, 40h
  247.   mov   es, ax
  248.   mov   dx, es:[ADDR_6845]
  249.   add   dl, 6
  250.  L01:
  251.   in    al, dx
  252.   test  al, 8
  253.   jnz   L01
  254.  L02:
  255.   in    al, dx
  256.   test  al, 8
  257.   jz    L02
  258.   sub   dl, 6
  259.   mov   ax, Word Ptr [bp+4]
  260.   mov   bh, ah
  261.   mov   bl, bh
  262.   and   bx, 0201h
  263.   mov   cl, 4
  264.   shl   bx, cl
  265.   shl   bh, 1
  266.   mov   ah, al
  267.   mov   al, 18h
  268.   out   dx, ax
  269.   mov   al, 7
  270.   out   dx, ax
  271.   inc   dx
  272.   in    al, dx
  273.   dec   dx
  274.   mov   ah, al
  275.   and   ah, 11101111b
  276.   or    ah, bl
  277.   mov   al, 7
  278.   out   dx, ax
  279.   mov   al, 9
  280.   out   dx, al
  281.   inc   dx
  282.   in    al, dx
  283.   dec   dx
  284.   mov   ah, al
  285.   and   ah, 10111111b
  286.   or    ah, bh
  287.   mov   al, 9
  288.   out   dx, ax
  289.   pop   ds
  290. END;
  291. END;
  292.  
  293.  
  294. PROCEDURE Sprw_Ecr(x1,y1,larg:WORD;haut:BYTE;x2,y2,orig:WORD);ASSEMBLER;
  295. ASM
  296.   Push  DS
  297.   Mov   DS, orig
  298.   Mov   AX, 0A000h
  299.   Mov   ES, AX
  300.   Mov   BX, x1
  301.   Mov   AX, y1
  302.   Xchg  AH, AL
  303.   Add   BX, AX
  304.   Shr   AX, 2
  305.   Add   BX, AX
  306.   Mov   SI, BX
  307.   Mov   BX, x2
  308.   Mov   AX, y2
  309.   Xchg  AH, AL
  310.   Add   BX, AX
  311.   Shr   AX, 2
  312.   Add   BX, AX
  313.   Mov   DI, BX
  314.   Xor   DL, DL
  315.   Mov   DH, haut
  316.   Mov   AX, larg
  317.   Mov   BX, 320
  318.   Sub   BX, AX
  319.   Shr   AX, 1
  320.   Cld
  321.  @boucle:
  322.   Inc   DL
  323.   Mov   CX, AX
  324.   Rep   Movsw
  325.   Add   SI, BX
  326.   Add   DI, BX
  327.   Cmp   DL, DH
  328.   Jne   @boucle
  329.   Pop   DS
  330. END;
  331.  
  332.  
  333. PROCEDURE SprB_Msk(x1,y1,larg:WORD;haut:BYTE;x2,y2,orig,dest:WORD);ASSEMBLER;
  334. ASM
  335.   Push  DS
  336.   Mov   DS, orig
  337.   Mov   ES, dest
  338.   Mov   AX, 320
  339.   Mov   BX, y1
  340.   Mul   BX
  341.   Add   AX, x1
  342.   Mov   SI, AX
  343.   Mov   AX, 320
  344.   Mov   BX, y2
  345.   Mul   BX
  346.   Add   AX, x2
  347.   Mov   DI, AX
  348.   Xor   DX, DX
  349.   Mov   AX, larg
  350.   Mov   BX, 320
  351.   Sub   BX, AX
  352.  @boucle1:
  353.   Inc   DH
  354.   Mov   CX, AX
  355.   Cld
  356.  @boucle2:
  357.   Mov   DL, [SI]
  358.   And   DL, DL
  359.   Jz    @Suite
  360.   Movsb
  361.   Loop  @boucle2
  362.   Add   SI, BX
  363.   Add   DI, BX
  364.   Cmp   DH, haut
  365.   Jne   @boucle1
  366.   Jmp   @Fin
  367.  @Suite:
  368.   Inc   SI
  369.   Inc   DI
  370.   Loop  @boucle2
  371.   Add   SI, BX
  372.   Add   DI, BX
  373.   Cmp   DH, haut
  374.   Jne   @boucle1
  375.  @Fin:
  376.   Pop   DS
  377. END;
  378.  
  379.  
  380. PROCEDURE SprW_Nrm(x1,y1,larg:WORD;haut:BYTE;x2,y2,orig,dest:WORD);ASSEMBLER;
  381. ASM
  382.   Push  DS
  383.   Mov   DS, orig
  384.   Mov   ES, dest
  385.   Mov   AX, 320
  386.   Mov   BX, y1
  387.   Mul   BX
  388.   Add   AX, x1
  389.   Mov   SI, AX
  390.   Mov   AX, 320
  391.   Mov   BX, y2
  392.   Mul   BX
  393.   Add   AX, x2
  394.   Mov   DI, AX
  395.   Xor   DL, DL
  396.   Mov   DH, haut
  397.   Mov   AX, larg
  398.   Mov   BX, 320
  399.   Sub   BX, AX
  400.   Cld
  401.  @boucle:
  402.   Inc   DL
  403.   Mov   CX, AX
  404.   Rep   Movsb
  405.   Add   SI, BX
  406.   Add   DI, BX
  407.   Cmp   DL, DH
  408.   Jne     @boucle
  409.   Pop   DS
  410. END;
  411.  
  412.  
  413. PROCEDURE Effets_Pal;
  414. CONST
  415.      col1:ARRAY[1..3] OF ARRAY[1..3] OF BYTE=((0,50,0),(0,44,0),(0,38,0));
  416.      pale:ARRAY[1..12] OF ARRAY[1..3] OF BYTE=
  417.       ((0,0,14),(0,0,17),(0,0,20),(0,0,24),(0,0,26),(0,0,29),
  418.        (0,0,32),(0,0,35),(0,0,38),(0,0,41),(0,0,44),(0,0,47));
  419. VAR
  420.      i   :BYTE;
  421. BEGIN
  422.   FOR i:=1 TO 12 DO
  423.   BEGIN
  424.     Port[$3C8]:=i+240;
  425.     Port[$3C9]:=pale[i,1];
  426.     Port[$3C9]:=pale[i,2];
  427.     Port[$3C9]:=pale[i,3];
  428.   END;
  429.   FOR i:=1 TO 3 DO
  430.   BEGIN
  431.     Port[$3C8]:=trace[posit[1],i];
  432.     Port[$3C9]:=col1[i,1];
  433.     Port[$3C9]:=col1[i,2];
  434.     Port[$3C9]:=col1[i,3];
  435.   END;
  436. END;
  437.  
  438.  
  439. PROCEDURE Abandon(message:STRING);
  440. BEGIN
  441.   Init_Mode(3);
  442.   WriteLn(message);
  443.   Halt;
  444. END;
  445.  
  446.  
  447. PROCEDURE INTRO;                           {Scrollings horizontaux softs avec}
  448. VAR                                        {zooms horizontaux softs ET  zooms}
  449.      n,z,l,m,k,compteur,split1,split2:WORD;{verticaux HARDs...}
  450.      larg :BYTE;
  451.      sig  :Integer;
  452. BEGIN
  453.   {1ère séquence}
  454.   posit[1]:=1;
  455.   split1:=60;
  456.   z:=0; n:=0; k:=1; sig:=1; l:=0; m:=0; traceur:=1;
  457.   compteur:=0;
  458.   SplitScr(split1);
  459.   Zoom(1);
  460.   REPEAT
  461.     SprW_Nrm(2,150,318,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  462.     SprW_Nrm(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],2,16,318,150,
  463.          Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
  464.     SplitScr(split1);
  465.     Effets_Pal;
  466.     SprW_Ecr(0,150,320,16,0,60,Seg(s2^)+Ofs(s2^));
  467.     Inc(n);
  468.     IF ((currvert>526) AND (currvert<592)) THEN split1:=split1+4*sig;
  469.     IF ((split1>115) AND (sig=1)) THEN sig:=-1;
  470.     If ((split1<1  ) AND (sig=-1)) THEN sig:=1;
  471.     IF n>5 THEN
  472.     BEGIN
  473.       Inc(posit[1]);
  474.       IF posit[1]>18 THEN posit[1]:=1;
  475.       n:=0;
  476.     END;
  477.     Inc(k,2);
  478.     IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
  479.     IF k>larg THEN
  480.     BEGIN
  481.       Inc(compteur);
  482.       Inc(currvert);
  483.       k:=1;
  484.     END;
  485.   UNTIL currvert>651; {compteur=66;}
  486.  
  487.   {2e séquence}
  488.   compteur:=0;
  489.   SplitScr(400);
  490.   Zoom(5);
  491.   m:=0;
  492.   debSB:=False;
  493.   REPEAT
  494.     IF ((currvert=711) AND (Blaster=True) AND (DebSB=False)) THEN
  495.     BEGIN
  496.       DebSB:=True;
  497.       InitPlayBack;
  498.     END;
  499.     SprW_Nrm(2,150,318,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  500.     SprW_Nrm(0,0,2,16,318,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  501.     SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,318,150,
  502.          Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
  503.     SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,319,150,
  504.          Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
  505.     SynchroV;
  506.     Effets_Pal;
  507.     SprW_Ecr(0,150,320,16,0,25,Seg(s2^)+Ofs(s2^));
  508.     Inc(n);
  509.     IF n>5 THEN
  510.     BEGIN
  511.       Inc(posit[1]);
  512.       IF posit[1]>18 THEN posit[1]:=1;
  513.       n:=0;
  514.     END;
  515.     Inc(m);
  516.     IF m>0 THEN
  517.     BEGIN
  518.       Inc(k);
  519.       m:=0;
  520.     END;
  521.     IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
  522.     IF k>larg THEN
  523.     BEGIN
  524.       Inc(compteur);
  525.       Inc(currvert);
  526.       k:=1;
  527.     END;
  528.   UNTIL currvert>775; {compteur=61;}
  529.  
  530.   {3e séquence}
  531.   compteur:=0;
  532.   SynchroV;
  533.   Zoom(11);
  534.   REPEAT
  535.     SprW_Nrm(6,150,314,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  536.     SprW_Nrm(0,0,2,16,314,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  537.     SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,314,150,
  538.          Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
  539.     SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,315,150,
  540.          Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
  541.     SprW_Nrm(314,150,2,16,316,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  542.     SprW_Nrm(314,150,2,16,318,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  543.     SynchroV;
  544.     Effets_Pal;
  545.     SprW_Ecr(0,150,320,16,0,8,Seg(s2^)+Ofs(s2^));
  546.     Inc(n);
  547.     IF n>5 THEN
  548.     BEGIN
  549.       Inc(posit[1]);
  550.       IF posit[1]>18 THEN posit[1]:=1;
  551.       n:=0;
  552.     END;
  553.     Inc(m);
  554.     IF m>0 THEN
  555.     BEGIN
  556.       Inc(k);
  557.       m:=0;
  558.     END;
  559.     IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
  560.     IF k>larg THEN
  561.     BEGIN
  562.       Inc(compteur);
  563.       Inc(currvert);
  564.       k:=1;
  565.     END;
  566.   UNTIL currvert>955; {compteur=61;}
  567.  
  568.   {4e séquence}
  569.   compteur:=0;
  570.   SynchroV;
  571.   Zoom(18);
  572.   REPEAT
  573.     SprW_Nrm(6,150,314,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  574.     SprW_Nrm(0,0,2,16,314,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  575.     SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,314,150,
  576.          Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
  577.     SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,315,150,
  578.          Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
  579.     SprW_Nrm(314,150,2,16,316,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  580.     SprW_Nrm(314,150,2,16,318,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  581.     SynchroV;
  582.     Effets_Pal;
  583.     SprW_Ecr(0,150,320,16,0,3,Seg(s2^)+Ofs(s2^));
  584.     Inc(n);
  585.     IF n>5 THEN
  586.     BEGIN
  587.       Inc(posit[1]);
  588.       IF posit[1]>18 THEN posit[1]:=1;
  589.       n:=0;
  590.     END;
  591.     Inc(m);
  592.     IF m>1 THEN
  593.     BEGIN
  594.       Inc(k);
  595.       m:=0;
  596.     END;
  597.     IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
  598.     IF k>larg THEN
  599.     BEGIN
  600.       Inc(compteur);
  601.       Inc(currvert);
  602.       k:=1;
  603.     END;
  604.   UNTIL currvert>967;
  605.  
  606.   {5e séquence}
  607.   compteur:=0;
  608.   SynchroV;
  609.   Zoom(24);
  610.   REPEAT
  611.     SprW_Nrm(6,150,314,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  612.     SprW_Nrm(0,0,2,16,314,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  613.     SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,314,150,
  614.          Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
  615.     SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,315,150,
  616.          Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
  617.     SprW_Nrm(314,150,2,16,316,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  618.     SprW_Nrm(314,150,2,16,318,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
  619.     SynchroV;
  620.     Effets_Pal;
  621.     SprW_Ecr(0,150,320,16,0,0,Seg(s2^)+Ofs(s2^));
  622.     Inc(n);
  623.     IF n>5 THEN
  624.     BEGIN
  625.       Inc(posit[1]);
  626.       IF posit[1]>18 THEN posit[1]:=1;
  627.       n:=0;
  628.     END;
  629.     Inc(m);
  630.     IF m>1 THEN
  631.     BEGIN
  632.       Inc(k);
  633.       m:=0;
  634.     END;
  635.     IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
  636.     IF k>larg THEN
  637.     BEGIN
  638.       Inc(compteur);
  639.       Inc(currvert);
  640.       k:=1;
  641.     END;
  642.   UNTIL currvert>1083;
  643.  
  644.   IF Blaster THEN FinPlayBack;
  645.   Dispose(s2);
  646.   Dispose(s7);
  647.   InLine($FA);
  648.   SetIntVec($1B,old_int_truc);
  649.   InLine($FB);
  650.   Init_Mode(3);
  651.   WriteLn('Thanks for running Mega Scroll from GRYPHAEA...');
  652. END;
  653.  
  654.  
  655. PROCEDURE Initialisations;
  656. BEGIN
  657.   ClrScr;
  658.   Init_Mode(19);
  659.   IF res<>19 THEN
  660.     Abandon('Wrong video type, VGA needed!');
  661.   Assign(Fic1,'MEGIMG.RAW');
  662.   {$I-}
  663.   Reset(Fic1,1);
  664.   {$I+}
  665.   IF ((IOResult<>0) OR (FileSize(fic1)<>64768)) THEN
  666.   BEGIN
  667.     {$I-}
  668.     Close(Fic1);
  669.     {$I+}
  670.     Abandon('MEGIMG.RAW file is missing or corrupted!');
  671.   END;
  672.   {$I-}
  673.   New(s2);
  674.   New(s7);
  675.   GetMem(s,41736);
  676.   WHILE ((Seg(s^) SHL 4 +Ofs(s^))>23000) DO       {Les  séquences  sonores}
  677.   BEGIN                                           {ne   doivent   pas   se}
  678.     FreeMem(s,41736);                             {chevaucher  sur +sieurs}
  679.     GetMem(tmp,1);                                {segments! Le DMA n'aime}
  680.     GetMem(s,41736);                              {pas vraiment ça...     }
  681.   END;
  682.   {$I+}
  683.   IF IOResult<>0 THEN
  684.   BEGIN
  685.     Close(Fic1);
  686.     Abandon('Not enough memory!');
  687.   END;
  688.   BlockRead(fic1,s7^[0],64768);
  689.   Close(Fic1);
  690.   Assign(Fic1,'MEGSCROL.DGT');
  691.   {$I-}
  692.   Reset(Fic1,1);
  693.   {$I+}
  694.   IF ((IOResult<>0) OR (FileSize(fic1)<>41736)) THEN
  695.   BEGIN
  696.     {$I-}
  697.     Close(Fic1);
  698.     {$I+}
  699.     Abandon('MEGSCROL.DGT file is missing or corrupted!');
  700.   END;
  701.   BlockRead(Fic1,s^,41736);
  702.   Close(Fic1);
  703.   InLine($FA);
  704.   GetIntVec($1B,old_int_truc);
  705.   int_truc:=Ptr(Seg(Rien),Ofs(Rien));
  706.   SetIntVec($1B,int_truc);
  707.   InLine($FB);
  708.   FillChar(palet[0],768,Chr(0));
  709.   Active_Palette(palet[0],0,255);
  710.   Move(s7^[64000],palet[0],768);
  711.   Active_Palette(palet[0],0,255);
  712.   currvert:=1;
  713.   FillChar(s2^[0],64000,Chr(0));
  714.   SplitScr(400);
  715.   Blaster:=True;
  716.   i:=0;
  717.   REPEAT
  718.     Inc(i);
  719.   UNTIL ((InitDSP(i)=True) OR (i>6));
  720.   IF i>6 THEN Blaster:=False;
  721. END;
  722.  
  723.  
  724. {///////////////////////////////////////////////////////////////////////////}
  725.  
  726. {PROGRAMME PRINCIPAL}
  727. BEGIN
  728.   Initialisations;
  729.   INTRO;
  730. END.
  731. {///////////////////////////////////////////////////////////////////////////}
  732.