User Tools

Site Tools




Author Cyril Henard & Logi'Stick
Computer Amstrad PCW 8256 / 8512 / 9512
Year 1990
Gender Arcade
Controls Keyboard
Languages French
Status Preserved



Le Bouscule Tout is a game that renews the traditional brick breaker, offering endless game board possibilities, with simplicity and facilitating their creation, thanks to an interactive board composition program.

Everyone knows the famous brick breaker that marked the heyday of consoles and arcades. With the appearance of video game consoles and personal microcomputers, most of these games were adapted, even improved and, above all, made accessible to all households.

How to play

The principle of the game is extremely simple: equipped with a racket whose horizontal movements you control with two keys, you must (almost) completely destroy a board more or less full of redefined bricks with a devastating ball.

The characters to destroy, as they are redefined in the program, have different points depending on their graphics.

There are a total of 8 types of characters whose score ranges from 2 to 100. Depending on the number and arrangement of targets on a board, it is worth more or less points.

You have five different angles to return the ball with the racket and three balls per game to try to get the best play. This is partly to try to achieve the best score. This is stored via a RECORD.BUT file for posterity. The move to the next board is acquired once the qualification score has been reached, that is, the value of the board minus 150 points plus the maximum score (its value) of the previous board.

It is possible to destroy an entire board, but it is long and very difficult… So, to reward you for your tenacity, a bonus of 500 points and an extra ball is awarded to you on the next board. Six boards are planned, but play resumes on the first board if you beat the sixth, with your current score. Perpetual motion!


The keys to direct the racket, the qualifying score to get to the next board, the record, your score, the current board, your number of balls and passable options are permanently displayed on the screen.

In fact, to allow you to rest between two boards and as long as you haven't exhausted your ball credit, you can interrupt the game by moving to the next board and save it as it is for later resumption, using the <S>save and <C>Load options. .

Please note that when uploading, the backup file is deleted to prevent cheating. A healthy principle to respect for more pleasure, although modifications are entirely possible… Games saved on floppy disk have the extension “.PEC”.

Creating a board

Before fully enjoying the game, we must enter the board creation program and create the six boards necessary to play the game.

The character redefinition routine is included in both programs: it is the essential MATRIX and data for the redefined codes (206 to 213 for target patterns, 200 to 205 for frame and dotted lines in the game) they are included in the DATA lines, therefore modifiable.

The interest of this principle is to be able to create, without any restriction or limit, game boards according to your tastes and your playful aptitudes. The game thus becomes infinitely rich and varied. It's Byzantium!

Especially since all the parameters: number of boards, number of balls, rating score, sound effects, etc…, are modifiable. Listings are annotated for this purpose. The most interesting lines are, for the game program: 190-200 and 880 (number and name of the tables), 400 (rating score), 150-180 (graphic code data), and for the creation program: 130-160 (graphic code data).

The creation of the tables is done by means of the blinking “underlined” cursor: you place yourself in the place you want in the space reserved for the table to drop the chosen “graphic” character by pressing the corresponding number. The points are automatically calculated by the program and saved with the table that automatically has the extension .TBL, an unnecessary extension to specify when loading.

To simplify your task, you can load and modify an existing table, then save it under a different or same name. Caution, to modify a character, you must first enter “<E> delete, and then enter its number. Everything is interactive, the active keys of the options are permanently displayed.

For the lazy or those in a hurry, six “standard” boards have been burned to floppy with the BOUSTOUT and CREATION programs. Created dashboards are saved with the .TBL extension, like standard dashboards.

In the French version, the boards created by us must always be saved with the same name and only by changing the board number, for example “TABLEAU1”…“TABLEAU2”, etc. In the case of the Spanish game they will be saved with the name “TABLERO1”… “TABLERO2”, etc.


From a technical point of view, although perfectible, the programs are very interesting and even allow beginners to integrate certain practices into basic programming.

With this game, the playful universe of the PCW grows even more. We are offered an impression of freedom and I know that some will rush to make many modifications to further improve these programs or adapt them to their wishes.


  • Listing 1 - CREATION.BAS
10 REM' Création de tableaux 
20 CLEAR:WIDTH 255:ON ERROR GOTO 760:esc$=CHR$(27):bip$=CHR$(7)
30 cl$=esc$+"y"+esc$+"E"+esc$+"H"+esc$+"0" 
40 iv$=esc$+"p":vi$=esc$+"q":cu$=esc$+"e":nc$=esc$+"f"
50 DEF FNl$(x,y)=esc$+"Y"+CHR$(32+y)+CHR$(32+x) 
60 REM' chargement et redéfinition caractères 
70 RESTORE 80:FOR n=&HC070 TO &HC098:READ d8:POKE n,d8:NEXT n
80 DATA 243,62,129,211,241,62,130,211,242,175,95,103,22,184,58,153,192,111,41,41
90 DATA 41,25,17,154,192,235,1,8,0,237,176,62,133,211,241,62,134,211,242,251,201 
100 RESTORE 130:FOR i=1 TO 8:READ n:FOR ap=1 TO 8 
110 READ pn(ap):NEXT ap:POKE &HC099,n:FOR tp=1 TO 8 
120 POKE &HC099+tp,pn(tp):NEXT tp:c=&HC070:CALL c:NEXT i
130 DATA 206,204,51,204,51,204,51,204,51,207,85,85,85,85,85,85,85,85
140 DATA 208,0,42,84,170,85,42,20,0,209,24,60,90,90,90,90,60,24
150 DATA 210,0,24,126,243,243,126,24,0,211,7,15,31,62,124,138,134,131
160 DATA 212,96,48,56,126,255,255,126,0,213,60,60,24,126,219,60,102,195
170 DIM ca(90,28),ca$(45,20),lgn$(28):a=0:b=0:PRINT nc$cl$
180 REM' affichage dessin et mode d'emploi 
190 GOSUB 410
200 GOSUB 480:PRINT FNl$(b,a)" "; 
210 IF ca$(b,a)="" THEN PRINT FNl$(b,a)" "FNl$(b,a)" "ELSE PRINT FNl$(b,a)ca$(b,a) 
220 PRINT FNl$(62,10)"points du tableau :mpnt 
230 z$=INKEY$:IF z$="" THEN 200 ELSE z=ASC(z$) 
240 IF z=31 THEN a=a-1
250 IF z=30 THEN a=a+1
260 IF z=6 THEN b=b+1
270 IF z=1 THEN b=b-1 
280 IF z=32 THEN PRINT cl$:ERASE ca,ca$:DIM ca(90,28),ca$(45,20):mpnt=0:GOTO 190 
290 IF z$="1" THEN GOSUB 750:ca(b,a)=1:ca$(b,a)=CHR$(206):mpnt=mpnt+2
300 IF z$="2" THEN GOSUB 750:ca(b,a)=2:ca$(b,a)=CHR$(207):mpnt=mpnt+5
310 IF z$="3" THEN GOSUB 750:ca(b,a)=3:ca$(b,a)=CHR$(208):mpnt=mpnt+10
320 IF z$="4" THEN GOSUB 750:ca(b,a)=4:ca$(b,a)=CHR$(209):mpnt=mpnt+20
330 IF z$="5" THEN GOSUB 750:ca(b,a)=5:ca$(b,a)=CHR$(210):mpnt=mpnt+25
340 IF z$="6" THEN GOSUB 750:ca(b,a)=6:ca$(b,a)=CHR$(211):mpnt=mpnt+50
350 IF z$="7" THEN GOSUB 750:ca(b,a)=7:ca$(b,a)=CHR$(212):mpnt=mpnt+75
360 IF z$="8" THEN GOSUB 750:ca(b,a)=8:ca$(b,a)=CHR$(213):mpnt=mpnt+100
370 IF z$="E" THEN GOSUB 660:ca(b,a)=0:ca$(b,a)="" 
380 IF z$="C" THEN GOSUB 610:GOTO 190 
390 IF z$="S" THEN GOSUB 530:GOTO 190 
400 IF z$="Q" THEN PRINT cu$;:END ELSE 200
410 PRINT FNl$(15,28)"Les flèches pour se déplacer, <ESPACE> pour effacer l'écran" 
420 FOR i=1 TO 8 STEP 2:PRINT FNl$(55,i)CHR$(48+i)": "CHR$(205+i)" =    points, "CHR$(49+i)": "CHR$(206+i)" =     points":NEXT i
430 PRINT FNl$(62,1)" 2"FNl$(80,1)"  5"FNl$(62,3)"10"FNl$(80,3)" 20"
440 PRINT FNl$(62,5)"25"FNl$(80,5)" 50"FNl$(62,7)"75"FNl$(80,7)"100"
450 PRINT FNl$(65,13)"<C> = CHARGER"FNl$(65,15)"<E> = EFFACER" 
460 PRINT FNl$(65,17)"<Q> = QUITTER"FNl$(65,19)"<S> = SAUVER":RETURN
470 REM' controle des limites d'ecran 
480 IF a<0 THEN a=0
490 IF a=18 THEN a=17
500 IF b<0 THEN b=0
510 IF b=40 THEN b=39 
520 RETURN:REM' sauvegarde des créations 
530 PRINT cl$"Sauvegarde du tableau créé (8 lettres maximum): ";:INPUT"",nom$:pt=0 
540 nom$=UPPER$(LEFT$(nom$,8)):OPEN"O",2,nom$+".TBL":FOR i=0 TO 18:FOR j=0 TO 39 
550 IF ca(j,i)=1 THEN pt=pt+2 ELSE IF ca(j,i)=2 THEN  pt=pt+5
560 IF ca(j,i)=3 THEN pt=pt+10 ELSE IF ca(j,i)=4 THEN pt=pt+20 
570 IF ca(j,i)=5 THEN pt=pt+25 ELSE IF ca(j,i)=6 THEN pt=pt+50 
580 IF ca(j,i)=7 THEN pt=pt+75 ELSE IF ca(j,i)=8 THEN pt=pt+100 
590 PRINT #2,ca(j,i):NEXT j,i:PRINT #2,pt:CLOSE:PRINT cl$:RETURN
600 REM' chargement de tableaux 
610 i=1:PRINT cl$"Nom du fichier à charger : ";:INPUT"",nom$:nom$=UPPER$(LEFT$(nom$,8)) 
620 OPEN"I",1,nom$+".TBL":FOR i=0 TO 18:FOR j=0 TO 39:INPUT #1,mur:ca(j,i)=mur
630 IF mur=0 THEN PRINT FNl$(j,i)" "ELSE ca$(j,i)=CHR$(205+mur):PRINT FNl$(j,i)ca$(j,i)
640 NEXT j,i:INPUT #1,mpnt:CLOSE:RETURN 
650 REM' calcul des points du tableau en cours de création
660 IF ca(b,a)=1 THEN mpnt=mpnt-2 
670 IF ca(b,a)=2 THEN mpnt=mpnt-5 
680 IF ca(b,a)=3 THEN mpnt=mpnt-10 
690 IF ca(b,a)=4 THEN mpnt=mpnt-20 
700 IF ca(b,a)=5 THEN mpnt=mpnt-25 
710 IF ca(b,a)=6 THEN mpnt=mpnt-50 
720 IF ca(b,a)=7 THEN mpnt=mpnt-75 
730 IF ca(b,a)=8 THEN mpnt=mpnt-100 
750 IF ca(b,a)<>0 THEN PRINT bip$:GOTO 200 ELSE RETURN
760 PRINT FNl$(18,15)iv$" Erreur n°"ERR"en ligne"ERL vi$:h$=INPUT$(1):RESUME NEXT
  • Listing 2 - BOUSTOUS.BAS
1 REM'***************************** 
5 REM'*    Vous   prsentent      *
7 REM'*   LE   BOUSCULE   TOUT    * 
9 REM'*****************************
20 OPEN"I",1,"RECORD.BUT":INPUT #1,recor,rec$:CLOSE 
30 esc$=CHR$(27):cl$=esc$+"y"+esc$+"E"+esc$+"H"+esc$+"0"
40 iv$=esc$+"p":vi$=esc$+"q":ef$=esc$+"K":cu$=esc$+"e":nc$=esc$+"f"
50 DEF FNl$(x,y)=esc$+"Y"+CHR$(32+y)+CHR$(32+x) 
55 REM' redéfinition caractères 
60 RESTORE 70:FOR n=&HC070 TO &HC098:READ d8:POKE n,d8:NEXT n
70 DATA 243,62,129,211,241,62,130,211,242,175,95,103,22,184,58,153,192,111,41,41
80 DATA 41,25,17,154,192,235,1,8,0,237,176,62,133,211,241,62,134,211,242,251,201 
90 RESTORE 120:FOR i=1 TO 14:READ n:FOR ap=1 TO 8 
100 READ pn(ap):NEXT ap:POKE &HC099,n:FOR tp=1 TO 8 
110 POKE &HC099+tp,pn(tp):NEXT tp:c=&HC070:CALL c:NEXT i
120 DATA 200,0,127,127,96,111,111,108,109,201,0,254,254,6,246,246,54,182
130 DATA 202,109,108,111,111,96,127,127,0,203,182,54,246,246,6,254,254,0
140 DATA 204,0,0,60,126,126,60,0,0,205,255,255,255,255,0,0,0,0
150 DATA 206,204,51,204,51,204,51,204,51,207,85,85,85,85,85,85,85,85
160 DATA 209,24,60,90,90,90,90,60,24,208,0,42,84,170,85,42,20,0
170 DATA 210,0,24,126,243,243,126,24,0,211,7,15,31,62,124,138,134,131
180 DATA 212,96,48,56,126,255,255,126,0,213,60,60,24,126,219,60,102,195
190 DIM ch(77,47):RESTORE 200:FOR tb=1 TO 6:READ a$:tbl$(tb)=a$:NEXT tb:tb=1
205 REM' cadres et mode d'emploi 
210 OUT 248,8:PRINT nc$cl$FNl$(53,0)iv$CHR$(134)STRING$(35,138)CHR$(140)
220 PRINT FNl$(53,1)CHR$(133)"  L E   B O U S C U L E   T O U T  "CHR$(133)
230 PRINT FNl$(53,2)CHR$(131)STRING$(35,138)CHR$(137)vi$
240 PRINT FNl$(58,4)"Jeu d'adresse et de précision" 
250 PRINT FNl$(54,6)ef$"Se joue avec les touches"esc$"23 º+§ et º-§"
260 PRINT FNl$(54,8)ef$esc$"21pour les déplacements gauche-droite"
270 PRINT FNl$(58,10)"<S>auvegarde ? <C>hargement"FNl$(53,12)STRING$(37,126)
280 PRINT FNl$(60,17)iv$CHR$(134)STRING$(20,138)CHR$(140)
290 FOR i=18 TO 28:PRINT FNl$(60,i)CHR$(133)SPC(20)CHR$(133)
300 NEXT i:PRINT FNl$(60,29)CHR$(131)STRING$(20,138)CHR$(137)vi$:OUT 248,7
310 w$=CHR$(200)+CHR$(201):v$=CHR$(202)+CHR$(203):FOR i=0 TO 47 STEP 2
320 PRINT FNl$(i,0)w$FNl$(i,28)w$FNl$(i,1)v$FNl$(i,29)v$:NEXT i:FOR i=2 TO 26 STEP 2 
330 PRINT FNl$(0,i)w$FNl$(46,i)w$FNl$(0,i+1)v$FNl$(46,i+1)v$:NEXT i 
340 tb=1:fin=0:mscor=0:bx=INT(RND*34)+2:bal=3:niv=1:IF bx/2<>INT(bx/2) THEN 340
350 scor=0
355 REM' chargement tableaux 
360 OPEN"I",2,tbl$(tb)+".TBL":FOR j=0 TO 18 
370 FOR i=0 TO 39:INPUT #2,mur:ch(i+4,j+3)=mur 
380 IF mur=0 THEN PRINT FNl$(4+i,j+3)" " ELSE PRINT FNl$(4+i,j+3)CHR$(205+mur)
390 NEXT i,j:INPUT #2,maxi:CLOSE:mscor=mscor+maxi 
400 PRINT FNl$(58,13)ef$"Score de qualification :"mscor-(150*tb)
410 PRINT FNl$(58,15)ef$"pour accéder au tableau "niv+1
420 GOSUB 460:PRINT FNl$(bx+4,25)CHR$(204)FNl$(3,27)SPC(43)
430 PRINT FNl$(4,27)"Appuyez sur <ESPACE> pour lancer le jeu" 
440 GOSUB 890:a=a+1:IF h$<>" " THEN 440 ELSE RANDOMIZE(a):PRINT FNl$(3,27)SPC(43)
450 GOSUB 780:GOTO 470 
460 PRINT FNl$(bx,26)"  "STRING$(6,205)"  ":RETURN 
465 REM' controle limites d'écran 
470 az=INT(RND*9)+1:IF az>=0 AND az<3 THEN xa=-1 
480 IF az>=3 AND az<6 THEN xa=0 
490 IF az>=6 AND az<=9 THEN xa=1 
500 ya=-1:GOSUB 460:x=bx+4:y=25:x1=x:y1=y:IF a<0 THEN a=0 
510 x1=x+xa:y1=y+ya:IF x1<=4 THEN x1=4:xa=-xa ELSE IF x1>=43 THEN x1=43:xa=-xa 
520 GOSUB 740:IF y1=26 AND x1>bx+1 AND x1<bx+4 THEN xa=-1:x1=x+2*xa:ya=-ya:y1=y1-2 
530 IF y1=26 AND x1>bx+5 AND x1<bx+8 THEN xa=1:ya=-ya:y1=y1-2:x1=x+2*xa 
540 IF y1=26 AND (x1=bx+4 OR x1=bx+5) THEN xa=0:ya=-ya:y1=y1-2 
550 IF y1=27 THEN PRINT FNl$(x,y)" ":GOTO 720 
560 GOSUB 460
565 REM' controle et calcul score
570 t=ch(x1,y1) 
580 IF t<>0 THEN FOR i=0 TO 9:OUT 248,11:OUT 248,12:NEXT i:ya=-ya:PRINT FNl$(x,y)" ":x=x1:y=y1:y1=y1+ya
590 IF t=1 THEN ch(x1,y1-ya)=0:scor=scor+2:GOSUB 780:GOTO 570
600 IF t=2 THEN ch(x1,y1-ya)=0:scor=scor+5:GOSUB 780:GOTO 570
610 IF t=3 THEN ch(x1,y1-ya)=0:scor=scor+10:GOSUB 780:GOTO 570
620 IF t=4 THEN ch(x1,y1-ya)=0:scor=scor+20:GOSUB 780:GOTO 570
630 IF t=5 THEN ch(x1,y1-ya)=0:scor=scor+25:GOSUB 780:GOTO 570
640 IF t=6 THEN ch(x1,y1-ya)=0:scor=scor+50:GOSUB 780:GOTO 570
650 IF t=7 THEN ch(x1,y1-ya)=0:scor=scor+75:GOSUB 780:GOTO 570
660 IF t=8 THEN ch(x1,y1-ya)=0:scor=scor+100:GOSUB 780:GOTO 570
670 IF y1=2 THEN ya=1
675 REM' *** si tout est éliminé 
680 IF scor=mscor+(fin*500) THEN fin=fin+1:scor=scor+500:bal=3:niv=niv+1:tb=tb+1:GOSUB 880:GOTO 360 
690 PRINT FNl$(x,y)" "FNl$(x1,y1)CHR$(204):x=x1:y=y1
700 IF y=2 OR x=4 OR x=43 THEN FOR i=0 TO 99:OUT 248,11:OUT 248,12:NEXT i
705 REM' balle rebondissant contre les bords 
710 GOTO 510
720 bal=bal-1:IF bal=0 THEN 770
730 GOTO 430
735 REM' controle test clavier 
740 tch$=INKEY$:IF tch$=CHR$(22) AND bx>2 THEN bx=bx-2:RETURN
750 IF tch$=CHR$(28) AND bx<36 THEN bx=bx+2:RETURN 
765 REM' controle et enregistrement record 
770 IF scor>=mscor-(150*tb) THEN bal=3:niv=niv+1:tb=tb+1:GOSUB 880:GOTO 360 ELSE 810 
780 PRINT FNl$(63,21)iv$"De "rec$FNl$(63,19)"RECORD.: "USING"######";recor
790 PRINT FNl$(63,27)"BALLES.:     "bal;FNl$(63,25)"TABLEAU:     "USING"##";niv 
800 PRINT FNl$(63,23)"SCORE..: "USING"######";scor:PRINT vi$:RETURN
810 IF scor>recor THEN recor=scor:GOSUB 850:OPEN"O",1,"RECORD.BUT":PRINT #1,recor,rec$:CLOSE 
820 GOSUB 780:PRINT FNl$(3,27)nc$"Appuyez <R> pour re jouer, <Q> pour quitter"
830 GOSUB 1010:IF h$="R" THEN PRINT FNl$(4,26)SPC(41):GOTO 340
840 IF h$="Q" THEN PRINT cl$cu$;:END ELSE 830 
850 PRINT FNl$(58,13)ef$STRING$(10,7)iv$" BRAVO ! Record battu... "vi$
860 PRINT FNl$(58,15)ef$cu$;:INPUT"Votre nom : ",rec$:RETURN
865 REM' traitement d'erreurs basic du listing 
870 PRINT FNl$(10,14)iv$" Erreur nº"ERR"en ligne"ERL vi$:h$=INPUT$(1):RESUME NEXT 
875 REM' controle si dernier tableau utilisé 
880 IF tb=7 THEN tb=1:scor=scor+700:GOTO 360 ELSE RETURN
890 GOSUB 1010:IF bal=3 AND h$="S" THEN 920 
900 IF bal=3 AND h$="C" THEN 960
915 REM' sauvegarde partie en cours 
920 PRINT FNl$(54,6)ef$"Nom du fichier à sauvegarder"FNl$(54,8)ef$cu$;
930 INPUT"(sans extension) : ",n$:n$=LEFT$(n$,8)+".PEC":PRINT nc$
940 mscor=mscor-maxi:OPEN"O",1,n$:PRINT #1,niv,tb,scor,mscor,fin
950 CLOSE:PRINT cl$cu$;:END 
955 REM' chargement partie en cours 
960 PRINT FNl$(54,6)ef$"Nom du fichier à charger..."FNl$(54,8)ef$cu$;
970 INPUT"(sans extension) : ",n$:n$=LEFT$(n$,8)+".PEC":PRINT nc$
980 PRINT FNl$(54,6)ef$"Se joue avec les touches"esc$"23 º+§ et º-§"
990 PRINT FNl$(54,8)ef$esc$"21pour les deplacements gauche-droite"
1000 mscor=0:maxi=0:OPEN"I",1,n$:INPUT #1,niv,tb,scor,mscor,fin:CLOSE:KILL n$:GOTO 360
1010 h$=UPPER$(INPUT$(1)):IF h$="" THEN 1010 

Controls for CREATION

              ↑ = Up
              ↓ = Down
              ← = Left
              → = Right
 Numbers 1 to 8 = Select graphic
          SPACE = Clear the screen
              C = Load
              E = Delete
              Q = Exit
              G = Save

Controls for BOUSTOUS

             + = Left
             - = Right
         SPACE = Start

Loading the program

 1.- Insert the CP/M disc on side 2
 2.- Write BASIC and wait for it to load
 3.- Remove the CP/M disk and insert the disk containing the game Le Bouscule Tout
 4.- Type run "CREATION" and press the "ENTER" key to create the boards
 5.- Type run "BOUSTOUS" and press the "ENTER" key to play with the created boards


  • Listing of the program in a large-circulation magazine of the time

boustous_01.jpg boustous_02.jpg boustous_03.jpg boustous_04.jpg boustous_05.jpg


en/le_bouscule_tout.txt · Last modified: 2022/07/09 21:12 by jevicac