home *** CD-ROM | disk | FTP | other *** search
- {///////////////////////////////////////////////////////////////////////////}
- { Ca y est... je me suis décidé à mettre le source de MEGSCROL dans le
- domaine public! A mon point de vue, c'est un petit programme assez peu
- important, mais c'est a priori susceptible d' intéresser quelques uns
- d'entre vous. Ceux-ci sont évidemment curieux de savoir comment "ça"
- marche! En fait, c'est relativement simple (une fois que l'on a visualisé
- le fichier PCX), sauf peut-être en ce qui concerne la partie graphique en
- BASM. J'ai fait un effort violent en réécrivant les routines SB pour le
- DMA entièrement en TP (à l'origine c'est en BASM et pour toute ligne IRQ
- et canal DMA, et avec une réelle détection automatique du port). Voilà!,
- sachez donc tirer profit de ce petit cadeau et évitez de faire partie du
- club très large des LAMERS en "pompant" bêtement et en changeant les
- textes des messages...
-
- Pour de plus amples informations, d'éventuelles suggestions, ou tout
- simplement pour le fun, vous pouvez m'écrire à l'adresse suivante:
-
- Patrick Ruelle
- 43, av. de Grande Bretagne
- 98000 Monaco
- Principauté de Monaco
-
- Evidemment je n'ai pas pris la décision de diffuser ce source dans le
- but de demander de l'argent, mais il va de soit que toutes sortes de dons
- sont acceptés (carte postale, matos, argent, spécialités locales, docs,
- etc...). N'oubliez pas non plus que cette diffusion ne m'enlève nullement
- mes droits d'auteur de cette mmm... de démo; ce petit package peut être
- diffusé librement à condition de rester sous sa forme initiale:
-
- MEGSCROL.EXE 01/08/94 12304 L'exécutable utilisant MEGIMG et MEGSCROL.DGT
- MEGSCROL.PAS 01/08/94 21344 Le source principal de la démo
- SB_DMA2 .PAS 27/07/94 6805 Le source des routines DMA pour la SB
- MEGSCROL.PCX 03/06/93 31894 L'image des polices au format PCX
- MEGSCROL.RAW 27/07/94 64768 " " " en format brut (img+pal)
- MEGSCROL.DGT 03/06/94 41736 Le pattern sonore répétitif
- ------
- TOTAL 178851
-
- La version actuelle est remaniée exprès pour la diffusion de ce package,
- mais en fait ce programme date de début 1993...
-
- Patrick Ruelle (Monac) / GRYPHAEA }
- {///////////////////////////////////////////////////////////////////////////}
- {$R-} {$V-} {$G+}
- {$M 8000,0,250000}
-
- PROGRAM MegaScroll;
-
-
- USES Crt,Dos,SB_DMA2;
-
- {///////////////////////////////////////////////////////////////////////////}
-
- CONST
- xy :ARRAY[1..179] OF ARRAY[1..2] OF WORD=
- {Police 1}
- ((0,0),(16,0),(32,0),(112,0),(128,0),(144,0),(224,0),(256,0),(272,0),
- (288,0),(304,0),(0,16),(16,16),(32,16),(48,16),(64,16),(80,16),
- (96,16),(144,16),(208,16),(224,16),(240,16),(256,16),(272,16),
- (288,16),(304,16),(0,32),(16,32),(32,32),(48,32),(64,32),(80,32),
- (96,32),(112,32),(128,32),(144,32),(160,32),(176,32),(192,32),
- (208,32),(224,32),(240,32),(256,32),(272,32),(288,32),
- {Police 2}
- (0,49),(16,49),(32,49),(48,49),(64,49),(80,49),(96,49),(112,49),
- (128,49),(144,49),(160,49),(176,49),(192,49),(208,49),(224,49),
- (240,49),(256,49),(272,49),(288,49),(304,49),(0,65),(16,65),(32,65),
- (48,65),(64,65),(80,65),(96,65),(112,65),(128,65),(144,65),(160,65),
- (176,65),(192,65),(208,65),(224,65),(240,65),(256,65),(272,65),
- (288,65),(304,65),
- {Police 3}
- (0,83),(16,83),(32,83),(48,83),(64,83),(80,83),(96,83),(112,83),
- (128,83),(144,83),(160,83),(176,83),(192,83),(208,83),(224,83),
- (240,83),(256,83),(272,83),(288,83),(304,83),(0,100),(16,100),(32,100),
- (48,100),(64,100),(80,100),(96,100),(112,100),(128,100),(144,100),
- (160,100),(176,100),(192,100),(208,100),(224,100),(240,100),(256,100),
- (272,100),(288,100),(304,100),(0,117),(16,117),(32,117),(48,117),
- (64,117),(80,117),(96,117),(112,117),(128,117),(144,117),
- {Police 4}
- (0,136),(18,136),(36,136),(54,136),(72,136),(90,136),(108,136),
- (126,136),(144,136),(162,136),(180,136),(198,136),(216,136),(234,136),
- (252,136),(270,136),(288,136),(0,153),(18,153),(36,153),(54,153),
- (72,153),(90,153),(108,153),(126,153),(144,153),(162,153),(180,153),
- (198,153),(216,153),(234,153),(252,153),(270,153),(288,153),
- (0,170),(18,170),(36,170),(54,170),(72,170),(90,170),(108,170),
- (126,170),(144,170),(162,170));
-
- texte :ARRAY[1..1083] OF BYTE=
- (52,63,70,61,53,46,50,46,1,54,64,1,61,63,60,66,49,1,65,60,1,61,63,50,
- 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,
- 50,49,1,83,58,50,52,46,1,64,48,63,60,57,57,83,1,68,50,57,57,81,81,81,
- 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,
- 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,
- 59,50,81,81,81,1,108,93,86,105,1,86,87,100,106,105,1,105,93,94,104,1,
- 100,99,90,127,1,94,1,105,93,94,99,96,1,105,93,86,105,1,94,105,129,104,
- 1,98,106,88,93,1,87,90,105,105,90,103,125,1,99,100,108,134,1,94,1,92,
- 94,107,90,1,110,100,106,1,86,1,97,100,107,90,97,110,1,104,98,94,97,90,
- 110,124,1,132,123,1,93,106,98,123,123,123,1,99,100,105,1,107,90,103,
- 110,1,91,106,99,99,110,1,130,132,131,126,1,98,86,110,87,90,1,110,100,
- 106,1,108,86,99,105,1,104,100,98,90,105,93,94,99,92,1,98,100,103,90,1,
- 98,100,89,90,103,99,127,1,105,93,90,99,1,97,100,100,96,126,1,160,140,
- 136,143,172,172,172,1,141,144,149,136,147,147,160,1,136,1,153,140,136,
- 147,1,141,150,149,155,176,176,176,1,144,155,178,154,1,148,160,1,141,
- 136,157,150,153,144,155,140,1,150,149,140,176,1,149,150,158,177,1,144,
- 155,178,154,1,155,144,148,140,1,155,150,1,155,153,160,1,136,1,148,144,
- 159,140,139,1,141,150,149,155,1,154,138,153,150,147,147,176,1,53,86,
- 172,1,53,86,172,1,53,86,172,1,46,99,139,1,59,100,158,82,1,92,156,50,
- 104,154,1,68,93,136,65,127,1,160,50,104,172,1,46,1,99,140,68,1,91,150,
- 59,105,1,158,54,105,143,1,46,1,88,150,61,101,140,63,1,87,136,63,123,
- 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,
- 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,
- 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,
- 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,
- 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,
- 27,20,37,23,42,20,37,24,7,1,64,105,60,35,84,126,1,33,34,42,1,42,20,39,
- 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,
- 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,
- 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,
- 24,20,37,1,38,34,32,24,1,58,106,154,28,48,127,1,34,30,20,44,2,1,1,35,
- 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,
- 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,
- 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,
- 93,86,105,1,86,1,98,90,92,86,1,104,88,103,100,97,97,126,126,126,1,92,
- 103,90,90,105,94,99,92,104,1,105,100,124,1,173,65,63,64,54,173,1,173,
- 66,57,65,63,46,51,60,63,48,50,173,1,173,65,47,64,173,1,173,51,66,65,66,
- 63,50,1,48,63,50,68,173,1,173,63,50,59,46,54,64,64,46,59,48,50,173,1,
- 86,99,89,1,86,97,97,1,105,93,90,1,100,105,93,90,103,104,126,126,126,1,
- 86,99,89,1,99,100,108,134,1,101,103,90,101,86,103,90,1,110,100,106,103,
- 104,90,97,91,1,105,100,1,104,90,90,1,105,93,90,1,105,90,109,105,1,87,
- 90,88,100,98,94,99,92,1,1,1,1,137,144,142,142,140,153,1,136,149,139,1,
- 1,137,144,142,142,140,153,1,136,142,136,144,149,172,1,158,140,147,147,
- 176,176,176,1,158,140,178,153,140,1,138,147,150,154,140,1,155,150,1,
- 155,143,140,1,140,149,139,172,1,138,150,139,140,177,1,142,141,159,1,
- 136,149,139,1,154,150,156,149,139,1,137,160,1,19,32,34,33,20,22,19,1,
- 141,153,150,148,1,26,37,44,35,27,20,24,20,1,174,35,7,37,40,24,31,31,24,
- 175,176,1,137,160,140,1,137,160,140,172,172,172,1,1,1);
-
- trace :ARRAY[1..18] OF ARRAY[1..3] OF BYTE=
- ((241,242,243),(242,243,244),(243,244,245),(244,245,246),(245,246,247),
- (246,247,248),(247,248,249),(248,249,250),(249,250,251),(250,251,252),
- (249,250,251),(248,249,250),(247,248,249),(246,247,248),(245,246,247),
- (244,245,246),(243,244,245),(242,243,244));
-
-
- {DECLARATION DES TYPES GLOBAUX}
- TYPE
- imptr =^img;
- img =ARRAY[0..65000] OF BYTE;
- type1 =ARRAY[0..767] OF BYTE;
-
- {///////////////////////////////////////////////////////////////////////////}
-
- {DECLARATION DES VARIABLES GLOBALES}
- VAR
- palet :type1;
- s7,s2 :imptr;
- int_truc,
- old_int_truc:Pointer;
- res :BYTE;
- regs :Registers;
- i,j,k :WORD;
- fic1 :FILE;
- currvert :WORD;
- traceur :BYTE;
- posit :ARRAY[1..3] OF BYTE;
- Blaster,
- DebSB :Boolean;
- Tmp :Pointer;
- {///////////////////////////////////////////////////////////////////////////}
-
- {INITIALISATION ET VERIFICATION DU MODE VIDEO}
- PROCEDURE Init_Mode(numero:BYTE);ASSEMBLER;
- ASM
- Mov AH, 0
- Mov AL, numero
- Int 10h
- Mov AH, 15
- Int 10h
- Mov res, AL
- END;
-
- {///////////////////////////////////////////////////////////////////////////}
-
- PROCEDURE Rien;INTERRUPT;
- BEGIN
- END;
-
-
- PROCEDURE Zoom(valeur:WORD);ASSEMBLER;
- ASM
- mov dx, 3D4h
- mov ax, 09h
- out dx, ax
- inc dx
- mov ax, valeur
- out dx, ax
- END;
-
-
- PROCEDURE Active_Palette(VAR pal; deb,nbre:WORD);
- BEGIN
- ASM
- push ds
- lds si, pal
- mov dx, $3c8
- cld
- mov cx, nbre
- mov bx, deb
- @@1:
- mov al, bl
- out dx, al
- inc dx
- lodsb
- out dx, al
- lodsb
- out dx, al
- lodsb
- out dx, al
- dec dx
- inc bl
- loop @@1
- pop ds
- END;
- END;
-
-
- PROCEDURE SynchroV;ASSEMBLER;
- ASM
- Mov dx, 03DAh
- @deb1:
- In al, DX
- Test al, 08
- Jne @deb1
- @deb2:
- In al, DX
- Test al, 08
- Je @deb2
- END;
-
-
- PROCEDURE SplitScr(ligne:Integer);
- LABEL l01,l02;
- CONST ADDR_6845=$63;
- BEGIN
- ASM
- push ds
- mov ax, 40h
- mov es, ax
- mov dx, es:[ADDR_6845]
- add dl, 6
- L01:
- in al, dx
- test al, 8
- jnz L01
- L02:
- in al, dx
- test al, 8
- jz L02
- sub dl, 6
- mov ax, Word Ptr [bp+4]
- mov bh, ah
- mov bl, bh
- and bx, 0201h
- mov cl, 4
- shl bx, cl
- shl bh, 1
- mov ah, al
- mov al, 18h
- out dx, ax
- mov al, 7
- out dx, ax
- inc dx
- in al, dx
- dec dx
- mov ah, al
- and ah, 11101111b
- or ah, bl
- mov al, 7
- out dx, ax
- mov al, 9
- out dx, al
- inc dx
- in al, dx
- dec dx
- mov ah, al
- and ah, 10111111b
- or ah, bh
- mov al, 9
- out dx, ax
- pop ds
- END;
- END;
-
-
- PROCEDURE Sprw_Ecr(x1,y1,larg:WORD;haut:BYTE;x2,y2,orig:WORD);ASSEMBLER;
- ASM
- Push DS
- Mov DS, orig
- Mov AX, 0A000h
- Mov ES, AX
- Mov BX, x1
- Mov AX, y1
- Xchg AH, AL
- Add BX, AX
- Shr AX, 2
- Add BX, AX
- Mov SI, BX
- Mov BX, x2
- Mov AX, y2
- Xchg AH, AL
- Add BX, AX
- Shr AX, 2
- Add BX, AX
- Mov DI, BX
- Xor DL, DL
- Mov DH, haut
- Mov AX, larg
- Mov BX, 320
- Sub BX, AX
- Shr AX, 1
- Cld
- @boucle:
- Inc DL
- Mov CX, AX
- Rep Movsw
- Add SI, BX
- Add DI, BX
- Cmp DL, DH
- Jne @boucle
- Pop DS
- END;
-
-
- PROCEDURE SprB_Msk(x1,y1,larg:WORD;haut:BYTE;x2,y2,orig,dest:WORD);ASSEMBLER;
- ASM
- Push DS
- Mov DS, orig
- Mov ES, dest
- Mov AX, 320
- Mov BX, y1
- Mul BX
- Add AX, x1
- Mov SI, AX
- Mov AX, 320
- Mov BX, y2
- Mul BX
- Add AX, x2
- Mov DI, AX
- Xor DX, DX
- Mov AX, larg
- Mov BX, 320
- Sub BX, AX
- @boucle1:
- Inc DH
- Mov CX, AX
- Cld
- @boucle2:
- Mov DL, [SI]
- And DL, DL
- Jz @Suite
- Movsb
- Loop @boucle2
- Add SI, BX
- Add DI, BX
- Cmp DH, haut
- Jne @boucle1
- Jmp @Fin
- @Suite:
- Inc SI
- Inc DI
- Loop @boucle2
- Add SI, BX
- Add DI, BX
- Cmp DH, haut
- Jne @boucle1
- @Fin:
- Pop DS
- END;
-
-
- PROCEDURE SprW_Nrm(x1,y1,larg:WORD;haut:BYTE;x2,y2,orig,dest:WORD);ASSEMBLER;
- ASM
- Push DS
- Mov DS, orig
- Mov ES, dest
- Mov AX, 320
- Mov BX, y1
- Mul BX
- Add AX, x1
- Mov SI, AX
- Mov AX, 320
- Mov BX, y2
- Mul BX
- Add AX, x2
- Mov DI, AX
- Xor DL, DL
- Mov DH, haut
- Mov AX, larg
- Mov BX, 320
- Sub BX, AX
- Cld
- @boucle:
- Inc DL
- Mov CX, AX
- Rep Movsb
- Add SI, BX
- Add DI, BX
- Cmp DL, DH
- Jne @boucle
- Pop DS
- END;
-
-
- PROCEDURE Effets_Pal;
- CONST
- col1:ARRAY[1..3] OF ARRAY[1..3] OF BYTE=((0,50,0),(0,44,0),(0,38,0));
- pale:ARRAY[1..12] OF ARRAY[1..3] OF BYTE=
- ((0,0,14),(0,0,17),(0,0,20),(0,0,24),(0,0,26),(0,0,29),
- (0,0,32),(0,0,35),(0,0,38),(0,0,41),(0,0,44),(0,0,47));
- VAR
- i :BYTE;
- BEGIN
- FOR i:=1 TO 12 DO
- BEGIN
- Port[$3C8]:=i+240;
- Port[$3C9]:=pale[i,1];
- Port[$3C9]:=pale[i,2];
- Port[$3C9]:=pale[i,3];
- END;
- FOR i:=1 TO 3 DO
- BEGIN
- Port[$3C8]:=trace[posit[1],i];
- Port[$3C9]:=col1[i,1];
- Port[$3C9]:=col1[i,2];
- Port[$3C9]:=col1[i,3];
- END;
- END;
-
-
- PROCEDURE Abandon(message:STRING);
- BEGIN
- Init_Mode(3);
- WriteLn(message);
- Halt;
- END;
-
-
- PROCEDURE INTRO; {Scrollings horizontaux softs avec}
- VAR {zooms horizontaux softs ET zooms}
- n,z,l,m,k,compteur,split1,split2:WORD;{verticaux HARDs...}
- larg :BYTE;
- sig :Integer;
- BEGIN
- {1ère séquence}
- posit[1]:=1;
- split1:=60;
- z:=0; n:=0; k:=1; sig:=1; l:=0; m:=0; traceur:=1;
- compteur:=0;
- SplitScr(split1);
- Zoom(1);
- REPEAT
- SprW_Nrm(2,150,318,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],2,16,318,150,
- Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
- SplitScr(split1);
- Effets_Pal;
- SprW_Ecr(0,150,320,16,0,60,Seg(s2^)+Ofs(s2^));
- Inc(n);
- IF ((currvert>526) AND (currvert<592)) THEN split1:=split1+4*sig;
- IF ((split1>115) AND (sig=1)) THEN sig:=-1;
- If ((split1<1 ) AND (sig=-1)) THEN sig:=1;
- IF n>5 THEN
- BEGIN
- Inc(posit[1]);
- IF posit[1]>18 THEN posit[1]:=1;
- n:=0;
- END;
- Inc(k,2);
- IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
- IF k>larg THEN
- BEGIN
- Inc(compteur);
- Inc(currvert);
- k:=1;
- END;
- UNTIL currvert>651; {compteur=66;}
-
- {2e séquence}
- compteur:=0;
- SplitScr(400);
- Zoom(5);
- m:=0;
- debSB:=False;
- REPEAT
- IF ((currvert=711) AND (Blaster=True) AND (DebSB=False)) THEN
- BEGIN
- DebSB:=True;
- InitPlayBack;
- END;
- SprW_Nrm(2,150,318,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(0,0,2,16,318,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,318,150,
- Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
- SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,319,150,
- Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
- SynchroV;
- Effets_Pal;
- SprW_Ecr(0,150,320,16,0,25,Seg(s2^)+Ofs(s2^));
- Inc(n);
- IF n>5 THEN
- BEGIN
- Inc(posit[1]);
- IF posit[1]>18 THEN posit[1]:=1;
- n:=0;
- END;
- Inc(m);
- IF m>0 THEN
- BEGIN
- Inc(k);
- m:=0;
- END;
- IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
- IF k>larg THEN
- BEGIN
- Inc(compteur);
- Inc(currvert);
- k:=1;
- END;
- UNTIL currvert>775; {compteur=61;}
-
- {3e séquence}
- compteur:=0;
- SynchroV;
- Zoom(11);
- REPEAT
- SprW_Nrm(6,150,314,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(0,0,2,16,314,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,314,150,
- Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
- SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,315,150,
- Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(314,150,2,16,316,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(314,150,2,16,318,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SynchroV;
- Effets_Pal;
- SprW_Ecr(0,150,320,16,0,8,Seg(s2^)+Ofs(s2^));
- Inc(n);
- IF n>5 THEN
- BEGIN
- Inc(posit[1]);
- IF posit[1]>18 THEN posit[1]:=1;
- n:=0;
- END;
- Inc(m);
- IF m>0 THEN
- BEGIN
- Inc(k);
- m:=0;
- END;
- IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
- IF k>larg THEN
- BEGIN
- Inc(compteur);
- Inc(currvert);
- k:=1;
- END;
- UNTIL currvert>955; {compteur=61;}
-
- {4e séquence}
- compteur:=0;
- SynchroV;
- Zoom(18);
- REPEAT
- SprW_Nrm(6,150,314,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(0,0,2,16,314,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,314,150,
- Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
- SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,315,150,
- Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(314,150,2,16,316,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(314,150,2,16,318,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SynchroV;
- Effets_Pal;
- SprW_Ecr(0,150,320,16,0,3,Seg(s2^)+Ofs(s2^));
- Inc(n);
- IF n>5 THEN
- BEGIN
- Inc(posit[1]);
- IF posit[1]>18 THEN posit[1]:=1;
- n:=0;
- END;
- Inc(m);
- IF m>1 THEN
- BEGIN
- Inc(k);
- m:=0;
- END;
- IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
- IF k>larg THEN
- BEGIN
- Inc(compteur);
- Inc(currvert);
- k:=1;
- END;
- UNTIL currvert>967;
-
- {5e séquence}
- compteur:=0;
- SynchroV;
- Zoom(24);
- REPEAT
- SprW_Nrm(6,150,314,16,0,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(0,0,2,16,314,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,314,150,
- Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
- SprB_Msk(xy[texte[currvert],1]+k-1,xy[texte[currvert],2],1,16,315,150,
- Seg(s7^)+Ofs(s7^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(314,150,2,16,316,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SprW_Nrm(314,150,2,16,318,150,Seg(s2^)+Ofs(s2^),Seg(s2^)+Ofs(s2^));
- SynchroV;
- Effets_Pal;
- SprW_Ecr(0,150,320,16,0,0,Seg(s2^)+Ofs(s2^));
- Inc(n);
- IF n>5 THEN
- BEGIN
- Inc(posit[1]);
- IF posit[1]>18 THEN posit[1]:=1;
- n:=0;
- END;
- Inc(m);
- IF m>1 THEN
- BEGIN
- Inc(k);
- m:=0;
- END;
- IF texte[currvert]>135 THEN larg:=18 ELSE larg:=16;
- IF k>larg THEN
- BEGIN
- Inc(compteur);
- Inc(currvert);
- k:=1;
- END;
- UNTIL currvert>1083;
-
- IF Blaster THEN FinPlayBack;
- Dispose(s2);
- Dispose(s7);
- InLine($FA);
- SetIntVec($1B,old_int_truc);
- InLine($FB);
- Init_Mode(3);
- WriteLn('Thanks for running Mega Scroll from GRYPHAEA...');
- END;
-
-
- PROCEDURE Initialisations;
- BEGIN
- ClrScr;
- Init_Mode(19);
- IF res<>19 THEN
- Abandon('Wrong video type, VGA needed!');
- Assign(Fic1,'MEGIMG.RAW');
- {$I-}
- Reset(Fic1,1);
- {$I+}
- IF ((IOResult<>0) OR (FileSize(fic1)<>64768)) THEN
- BEGIN
- {$I-}
- Close(Fic1);
- {$I+}
- Abandon('MEGIMG.RAW file is missing or corrupted!');
- END;
- {$I-}
- New(s2);
- New(s7);
- GetMem(s,41736);
- WHILE ((Seg(s^) SHL 4 +Ofs(s^))>23000) DO {Les séquences sonores}
- BEGIN {ne doivent pas se}
- FreeMem(s,41736); {chevaucher sur +sieurs}
- GetMem(tmp,1); {segments! Le DMA n'aime}
- GetMem(s,41736); {pas vraiment ça... }
- END;
- {$I+}
- IF IOResult<>0 THEN
- BEGIN
- Close(Fic1);
- Abandon('Not enough memory!');
- END;
- BlockRead(fic1,s7^[0],64768);
- Close(Fic1);
- Assign(Fic1,'MEGSCROL.DGT');
- {$I-}
- Reset(Fic1,1);
- {$I+}
- IF ((IOResult<>0) OR (FileSize(fic1)<>41736)) THEN
- BEGIN
- {$I-}
- Close(Fic1);
- {$I+}
- Abandon('MEGSCROL.DGT file is missing or corrupted!');
- END;
- BlockRead(Fic1,s^,41736);
- Close(Fic1);
- InLine($FA);
- GetIntVec($1B,old_int_truc);
- int_truc:=Ptr(Seg(Rien),Ofs(Rien));
- SetIntVec($1B,int_truc);
- InLine($FB);
- FillChar(palet[0],768,Chr(0));
- Active_Palette(palet[0],0,255);
- Move(s7^[64000],palet[0],768);
- Active_Palette(palet[0],0,255);
- currvert:=1;
- FillChar(s2^[0],64000,Chr(0));
- SplitScr(400);
- Blaster:=True;
- i:=0;
- REPEAT
- Inc(i);
- UNTIL ((InitDSP(i)=True) OR (i>6));
- IF i>6 THEN Blaster:=False;
- END;
-
-
- {///////////////////////////////////////////////////////////////////////////}
-
- {PROGRAMME PRINCIPAL}
- BEGIN
- Initialisations;
- INTRO;
- END.
- {///////////////////////////////////////////////////////////////////////////}
-