désassemblage de l'Aigle d'or

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: désassemblage de l'Aigle d'or

Message par Daniel »

Pour revenir au sujet, la programmation n'est évidemment pas un modèle du genre, mais c'est le reflet de ce que l'on faisait à l'époque (l'Aigle d'Or a été programmé au début de l'année 1984). C'est mal structuré, souvent maladroit, et on pourrait faire beaucoup mieux aujourd'hui. Mais ça marche, ce n'est pas trop lent, les graphismes sont plutôt bien par rapport aux autres jeux de la même année, l'aventure est prenante, le jeu n'est pas extrêmement difficile mais pas facile non plus. Et les joueurs de l'époque l'ont plébiscité et en parlent encore 35 ans après. C'est un jeu mythique.

On peut lui reprocher un programme BASIC très peu lisible (comme on faisait souvent à l'époque), mais surtout, dans la partie assembleur, de nombreux appels à des routines en ROM. Cette pratique est à proscrire, car un changement de version du Basic ou du moniteur système peut rendre le programme inutilisable. Par exemple, à la sortie du MO6, il a été nécessaire de faire une version spéciale du jeu car la version MO5 ne fonctionnait pas.

Dans ses interviews, l'auteur a expliqué qu'il avait imaginé un scénario plus étoffé avec plus de graphismes et plus de situations différentes. Il a été obligé d'élaguer à cause du manque de mémoire sur l'Oric 1. Sur Thomson il y a davantage de place et en programmant mieux on pourrait intégrer tout ce qu'il a enlevé. Je crois qu'il a conservé quelques bouts de programmes inédits qu'il n'a pas pu utiliser, faute de place.
Daniel
L'obstacle augmente mon ardeur.
Xavier_

Re: désassemblage de l'Aigle d'or

Message par Xavier_ »

Rappelons aussi que c'est un portage d'un programme Basic Oric.
( celui qui a gagné le Tilt d'Or ! )
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: désassemblage de l'Aigle d'or

Message par joaopa »

100% Basic sur Oric?
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: désassemblage de l'Aigle d'or

Message par Daniel »

Oui, c'est en Basic sur Oric. Dans la conversion Thomson, je suppose que l'auteur a voulu convertir en assembleur les fonctions les plus lentes du BASIC. Mais il l'a fait en continuant d'appeler les routines en ROM. Le résultat ressemble plus à du Basic compilé qu'à un programme purement assembleur.

Refaire l'Aigle d'Or en assembleur pur permettrait certainement un déplacement du personnage plus fluide. Mais est-ce bien nécessaire ? Ce jeu est mythique, il ne faut pas le dénaturer.
Daniel
L'obstacle augmente mon ardeur.
joaopa
Messages : 512
Inscription : 14 sept. 2013 12:17

Re: désassemblage de l'Aigle d'or

Message par joaopa »

Si c'est du 100% basic, il doit être possible de récupérer le listing et essayer de l'adapter sur VG5000. Ca peut être un beau projet pour quelqu'un qui veut se lancer sur la programmation du Z80 et de l'EF9345 sur VG5000.
Quelqu'un a -il le listing ORIC à partager?
Ythunder
Messages : 928
Inscription : 21 août 2019 10:12

Re: désassemblage de l'Aigle d'or

Message par Ythunder »

Daniel a écrit : 04 oct. 2020 20:32 Refaire l'Aigle d'Or en assembleur pur permettrait certainement un déplacement du personnage plus fluide. Mais est-ce bien nécessaire ?
Je vais le dire de tête, car je n'ai pas relancé le jeu.
Il me semble me souvenir des saccades du personnage dans ses mouvements, et effectivement je trouve aussi que ce n'est pas nécessaire d'optimiser quelque chose pour que ce soit mieux. Cette saccade est en accord avec l'époque, une machine aussi (oui elle pourrait mieux faire, mais ça donne du charme à la nostalgie technique de ce titre). Elle fait partir de L'Aigle d'Or sur Thomson

Et j'adore ^^
yves
Messages : 464
Inscription : 12 sept. 2007 21:32

Re: désassemblage de l'Aigle d'or

Message par yves »

joaopa a écrit : 04 oct. 2020 20:49 Si c'est du 100% basic, il doit être possible de récupérer le listing et essayer de l'adapter sur VG5000
Ce serait marrant aussi de se lancer sur Hector :D
lightbeing
Messages : 51
Inscription : 11 déc. 2021 16:05
Localisation : Région parisienne

Re: désassemblage de l'Aigle d'or

Message par lightbeing »

joaopa a écrit : 04 oct. 2020 20:49 Si c'est du 100% basic, il doit être possible de récupérer le listing et essayer de l'adapter sur VG5000. Ca peut être un beau projet pour quelqu'un qui veut se lancer sur la programmation du Z80 et de l'EF9345 sur VG5000.
Quelqu'un a -il le listing ORIC à partager?

As-tu essayé de contacter l'auteur des remakes oric JOTD via sa page perso ?

J'ai crû comprendre qu'il y avait aussi des routines en assembleur.

Perso, je serais intéressé et prêt à participer à une version C64 en assembleur.
Avatar de l’utilisateur
farvardin
Messages : 436
Inscription : 27 déc. 2014 16:07
Contact :

Re: désassemblage de l'Aigle d'or

Message par farvardin »

aaah, je n'avais pas capté que l'auteur de l'Aigle d'Or c'était également lui qui avait réalisé Colorado et Fétiche Maya, il a fondé Silmarils puis Eversim...

Il présente son travail ici https://www.youtube.com/watch?v=TKAg3JM ... eFranceBnF

(l'aigle d'or est cité à partir de la 21ème minute)
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: désassemblage de l'Aigle d'or

Message par __sam__ »

Sympa cette vidéo!
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: désassemblage de l'Aigle d'or

Message par Neotenien »

Son frère, André Rocques, a sorti nombres de jeux d'aventures sur Thomson:
- Duel au Colorado
- L'évadé de Tapiocras
- Mon général
- Le Trésor des Baskerville

Je me suis aventuré sur "Duel au Colorado", où j'ai réussi à aller jusqu'à un repère d'un cowboy au nord, dans des falaises, mais je ne suis pas arrivé à aller plus loin. C'est un jeu qui manque de cohérence parfois (dans les déplacements)

Pour en revenir à tous les commentaires, je suis globalement d'acvcord avec tout ce qui est dit par Daniel Samuel etc, sur la difficulté à l'époque de coder rapidement et d'avoir des possibilité de changer facilement le code. Actuellement, j'utilise un éditeur de texte sous Linux (Kate) je fais un copier coller du Basic ou de l'assembleur que j'importe dans DC MOTO (Ca pourait être fait avec Teo) et on voit facilement le résultat et on peut faire un bon jeu 20 fois plus rapidement ainsi qu'auparavant où on n'avait pas d'éditeur de texte (à moins d'utiliser "paragraphe" pour cela ?). Et donc oui c'est bcp plus simple de développer mainteannt sur les 8 buits à l'aides des émilateurs et des très bons éditeurs de texte.

Et pour tout dire, le jeu que je dév actuellement sur Thomson Utilise le plus possible le Basic mais aussi des parties assembleur qui permettent de traiter des dizaines de fois + rapidement ces parties critiques qu'en Basic. Le Basic a le gros défaut d'être interprété à la volée (ce qui le rend très lent) et c'est un gouffre quand on a des traitement répétitif à faire dessus (un exemple, faire descendre un caractère ligne par ligne avec les Pokes en Basic met plus de 60" alors que ça met moins d'1/10 s en ass.
Autres défaut du basic, le systèmes de lignes numérotés, et enfin, pas de possibilité de créer des "fonction" au sens langage procédural.

Concernant la vidéo de Louis Marie Ricques, je n'ai pas tout vu (elle est trop longue!!) mais il oublie quand même un langage essentiel dans l'infoirmatique qui est le langage Pascal et qui a servi de modèle à bien d'uatres (le C, Java et même Python) et qui est toujours utilisé actuellement. Et malheureusement il n'y a pas eu de "bon" portage de comilateur Pascal sur Thomson contrairement à d'uatres machines (Même les atari XL ont eu droit à un très bon Pascal).
Avatar de l’utilisateur
DataPro
Messages : 2790
Inscription : 07 févr. 2011 17:03
Localisation : France - Auvergne

Re: désassemblage de l'Aigle d'or

Message par DataPro »

bonjour,

Quelqu'un sait-il comment récupérer le listing de l'Aigle d'Oric en Basic pour Oric ?
Recherche: cartouches Mattel Intellivision Imagic (loose)
Star Jacker et Lode Runner sur Yeno/SEGA SC-3000
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: désassemblage de l'Aigle d'or

Message par Fool-DupleX »

Bon, ça blablate et ça commente, mais il a été fait ce boulot de désassemblage et de listage ou pas ?
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: désassemblage de l'Aigle d'or

Message par 6502man »

DataPro a écrit : 21 mars 2024 11:24 bonjour,

Quelqu'un sait-il comment récupérer le listing de l'Aigle d'Oric en Basic pour Oric ?
partie 1:

Code : Tout sélectionner

0 DOKE#9C,3945
1 HIMEM#17FF
2 REM
3 REM  COPYRIGHT LORICIELS MARS 84
4 REM TOUTES REPRODUCTIONS INTERDITES 5
5 CLS:PAPER0:POKE#26A,2
6 INK7
7 PRINT:PRINT:PRINT:PRINT:PRINT
8 Q$=CHR$(96)+" LORICIELS 84":FORI=1TO14:POKE#BB81+I,ASC(MID$(Q$,I,1)):NEXT
18 EXPLODE
20 MA$="A464B1609162":MB$="A464B1629160"
25 MM$="88D0F9A9281865628562A5636900856318A56465608560A56169008561C665D0D960"
30 MA$=MA$+MM$:MB$=MB$+MM$
40 FORX=1TOLEN(MA$)STEP2:VV=VAL("#"+MID$(MA$,X,2))
42 POKE#400+(X-1)/2,VV
44 NEXT
50 FORX=1TOLEN(MB$)STEP2:VV=VAL("#"+MID$(MB$,X,2))
52 POKE#430+(X-1)/2,VV:NEXT
100 M$="        par ROCQUES Louis-Marie    "
658 LZ=2:CZ=13
1000 CLS:PAPER0:INK7
1005 HIRES:POKE#26A,2:INK0:PAPER0
1010 DOKE#60,6144:DOKE#62,40959:POKE#64,40:POKE#65,200
1020 CALL#400
1100 PLAY0,1,4,3000
1110 WAIT0300
1120 FORX=1TO9:CURSET0,0,3:FILL100,1,16:CURSET66,0,3:FILL100,1,0
1130 CURSET144,0,1:FILL10,1,0:CURSET6,102,3:FILL25,1,7
1140 EXPLODE:CURSET0,0,3:FILL100,1,20:CURSET66,0,3:FILL100,1,3 
1150 CURSET144,0,1:FILL10,1,64:CURSET6,102,3:FILL25,1,7 
1159 PY=23:CO=12
1160 NEXT:CURSET66,0,3:FILL100,1,4
1170 PLAY0,7,4,3000
1180 IFN=1THEN1300
1190 WAIT1000
1200 N=1:GOTO1120
1300 CURSET18,131,3:FILL57,1,64:CURSET78,131,3:FILL55,1,5
1305 CURSET36,142,3:FILL2,1,3:CURSET54,142,3:FILL2,1,2
1308 CURSET6,190,3:FILL9,1,5
1309 CURSET0,190,3:FORX=1TO35:CURMOV6,0,3:V=ASC(MID$(M$,X,1)):CHARV,0,1:NEXT
1310 PRINT:PRINTCHR$(140)"      Copyright LORICIELS 84";
1315 WAIT800:PLAY0,7,1,3000:WAIT300
1320 O=1:GOSUB1400:O=2:GOSUB1400:O=3:GOSUB1400
1330 IFP=0THENP=1:GOTO1600
1340 PRINT:PRINT:PRINT:REMetourner la cassette, taper CLOADCHR$(34)CHR$(34)
1342 PRINT"  Chargement du  programme principal"
1345 PRINTSPC(10)CHR$(96)" LORICIELS 1984";
1350 CLOAD"AIGLEDOR.2"
1400 PLAY7,0,0,0
1410 MUSIC1,O,10,0:MUSIC2,O,1,05:MUSIC3,O,5,0:PLAY7,0,1,5000:WAIT50 
1420 MUSIC1,O+1,10,0:MUSIC2,O+1,2,0:MUSIC3,O+1,4,0:PLAY7,0,1,3000:WAIT20
1430 MUSIC1,O+1,1,0:MUSIC2,O+1,4,0:MUSIC3,O+1,7,0:PLAY7,0,1,4000:WAIT70
1450 RETURN
1500 PRINT:PRINT
1510 PRINTCHR$(129)"           COMMANDES:":PRINT
1515 PRINT"   Fleches: Marcher,tourner":PRINT"   Barre espace: Arret,position neutre"
1520 PRINT"   A: Accroupir":PRINT"   B: Boire":PRINT"   S: Sauter (longueur)"
1530 PRINT"   D: Sauter (hauteur)":PRINT"   G: Grimper":PRINT"   I: Inventaire"
1540 PRINT"   L: Lire":PRINT"   O: Ouvrir":PRINT"   P: Prendre"
1550 PRINT"   Q: Suicide":PRINT:PRINT"   Objet en main:":PRINT
1560 PRINT"   0: Vide":PRINT"   1: Torche":PRINT"   2: Clef en fer"
1570 PRINT"   3: Clef en or":PRINT"   4: Fiole":PRINT"   5: Pied de biche"
1580 PRINT:PRINTCHR$(140)"     APPUYEZ SUR UNE TOUCHE";:GETA$:GOTO1000
1600 TEXT:INK7:PAPER4:PRINTCHR$(17)
1610 PRINT:PRINT
1620 PRINT"     Apres plusieurs jours de cheval, vous arrivez enfin en vue du";
1630 PRINT" Chateau  de l'Aigle, situe aux confins de la   Wesphalie."
1640 PRINT:PRINT:PRINT"             -----------":PRINT:PRINT 
1650 PRINT"     Une vieille legende du pays      pretend que le chateau recelle "
1660 PRINT"des tresors et richesses inestimables!"
1670 PRINT"     Vous voulez aussi tenter votre   chance, bien que nombreux furent"
1680 PRINT"ceux qui perirent..."
1683 PRINT
1685 PRINT"     Pour mener a bien votre quete,   il vous faudra acquerir les trois"
1687 PRINT"valeurs: Fortune, Sagesse et Puissance"
1690 PRINT:PRINTCHR$(140)"      APPUYEZ SUR UNE TOUCHE":GETA$:GOTO1500
32849 FALSE
33792 p
Partie 2:

Code : Tout sélectionner

0 POKE#4D0,0:DOKE#9C,15360:RUN1
1 HIMEM#3DFF:TEXT:INK7:PAPER4:CALL#4DDD:POKE#4C6,0:GOTO40:REMLORICIELS84
3 DOKE#3E56,#EAEA:RETURN
4 DOKE#3E56,#6211:RETURN
5 FORV=1TO3:POKEX+V,W:NEXTV:RETURN 
6 POKE#4A0,0:POKE#4A9,0:RETURN
7 POKE#4A4,AC:POKE#4A6,AR:POKE#4A1,SS:POKE#4A2,PO:POKE#4A3,BR:POKE#498,MO
8 POKE#478,XH:POKE#479,YH:POKE#4AB,AB:RETURN
9 PRINTC$;SPC(18);CHR$(145)"   IMPOSSIBLE";:V=1:RETURN
40 EO=100:BL=.01:POKE#4B0,0:POKE#4B6,0:FR=500:AI=1:DI=1:LI=1
42 NO=PEEK(#4D0)+1:IFPEEK(#FFF9)=1THENPOKE#4EF9,208
45 CLS:TEXT:FORX=1TO12:PRINT:NEXT:INPUT"Aventurier,ton nom";N$:M$=N$
47 IFLEN(M$)<6THENM$=M$+" ":GOTO47ELSEM$=LEFT$(M$,6)+"\"
50 FORX=1TO7:POKE23499+10*NO+X,ASC(MID$(M$,X,1)):NEXT:GOTO3E3 
90 V=PEEK(#219):POKE#69,INT(V/6+1):V=PEEK(#21A):POKE#6A,V:RETURN
92 IFPS=1THENPRINT:PRINT" Vous traversez un passage secret !":WAIT50:CLS
93 RETURN
95 IFNN=0THENCALL#4500
96 RETURN
97 SOUND1,3E3,0:PLAY1,1,1,200:RETURN
98 GOSUB90:CALL#4140:RETURN
99 GOSUB9:GOTO5100
100 HIRES:GOSUB92:PAPER0:INK0:D=#3EBD:CURSET12,199,1:GOSUB3:SP=PEEK(#481)
102 POKE#26A,10:GOSUB(100*(2+SP)):HS=0:HR=0:HT=0:C$=CHR$(30)
105 DOKE#3E80,60138:B=#40C8
110 V=PEEK(#483):IFV=0THEN130
115 GOSUB3:CURSET6,105,3:POKE#68,6:CALLD:IFV=3THEN130
120 GOSUB4:POKE#68,V+9:CURSET12,114-4*(V=2),3:CALLD
130 V=PEEK(#484):IFV=0THEN150
135 GOSUB3:POKE#68,7:CURSET204,105,3:CALLD:IFV=3THEN150 
140 GOSUB4:POKE#68,V+11:CURSET210,115-4*(V=2),3:CALLD
150 IFSP=3THENCURSET43,149,1:DRAW0,-110,1:GOSUB510 
199 GOTO600
200 DRAW36,-60,1:DRAW155,0,1:DRAW36,60,1:V=PEEK(#482):IFV=0THEN208
205 POKE#68,5:CURSET99,69,3:CALLD
208 POKE#68,4:CURSET36,122,3
210 GOSUB4:FORX=1TO7:CALLD:CURMOV0,-17,3:NEXT 
215 CURSET191,139,3:POKE#68,3:FORX=1TO7:CURMOV0,-18,3:CALLD:NEXT  
225 IFV=3ORV=0THENRETURN 
230 POKE#68,7+V:CURSET105,79,3:CALLD:RETURN 
300 GOSUB390
304 POKE#68,4:CURSET48,102,3
310 GOSUB4:FORX=1TO6:CALLD:CURMOV0,-17,3:NEXT
315 CURSET179,119,3:POKE#68,3:FORX=1TO6:CURMOV0,-18,3:CALLD:NEXT 
325 GOSUB4:IFV=0ORV=3THENRETURN
330 POKE#68,7+V:CURSET105,59,3:CALLD:RETURN  
390 DRAW48,-80,1:DRAW131,0,1:DRAW48,80,1:V=PEEK(#482):IFV=0THEN397
395 POKE#68,5:CURSET99,49,3:CALLD
397 IFPEEK(#48E)=1ORPEEK(#495)=63THENCURSET99,76,3:POKE#68,20:GOSUB3:CALLD
398 IFPEEK(#485)=1ORPEEK(#485)=3THENCURSET107,108,1
399 RETURN
400 GOSUB390:CURSET58,119,1:DRAW0,-100,1:CURMOV15,0,3:DRAW0,100,1
410 CURMOV105,0,3:DRAW0,-100,1:CURMOV15,0,3:DRAW0,100,1:POKE#68,1 
420 GOSUB3:CURSET50,19,3:CALLD:CURSET169,19,3:CALLD 
430 POKE#68,2:CURSET50,112,3:CALLD:CURSET169,112,3:CALLD:GOTO325
500 DRAW31,-50,1:DRAW165,0,1:DRAW31,50,1:CURSET43,149,1:DRAW0,-110,1
510 DRAW-8,-13,1:DRAW-8,-7,1:DRAW-8,24,1:DRAW-7,40,1:DRAW0,115,1 
520 CURSET208,149,1:DRAW0,-110,1:DRAW8,-13,1:DRAW8,-7,1:DRAW8,24,1   
530 DRAW7,40,1:DRAW0,115,1:RETURN
600 W=128:X=1065:GOSUB5:X=1100:GOSUB5:X=1109:GOSUB5:X=1136:GOSUB5
605 V=PEEK(#483):POKE1027,W+V:V=PEEK(#484):POKE1061,W+V
607 V=PEEK(#495):M=PEEK(#D000+V):GOSUB3
610 Z=PEEK(#48E):GOSUB(700+10*Z):Z=PEEK(#47C):IFZ>0THENGOSUB780
615 IFPEEK(#47D)=1THENGOSUB790
620 IFPEEK(#47E)=1THENGOSUB900
625 IFPEEK(#47F)=1THENGOSUB1100
627 IFPEEK(#480)=1THENGOSUB1E3
630 TR=PEEK(#48F):IFSP=3THEN635 
631 IFPEEK(#48E)=7THEN635
633 POKE#6B,249:W=160:X=1071:GOSUB(800+10*TR):GOSUB5 
635 IFPEEK(#485)>1THENGOSUB880
640 OC=0:IFPEEK(#48E)=7THENGOSUB771
642 POKE#6B,250
645 IFNP=63ANDAI=1THENPOKE#68,30:CURSET183,107,3:GOSUB90:CALL#4140 
650 IFNP=62ANDDI=1THENPOKE#68,31:CURSET183,104,3:GOSUB90:CALL#4140 
652 IFNP=62THENCURSET122,154,3:CHAR40,1,1
655 IFNP=1ANDLI=1THENPOKE#68,93:CURSET183,120,3:GOSUB90:CALL#4140 
660 IFNP=36THENCURSET220,110,3:CHAR41,1,1 
680 IFNP=63THENCURSET78,172,3:POKE#68,16:CALLD:IFPS=1THENGOSUB6900
690 INK5:CURSET0,0,0:FILL35,40,64:CURSET0,0,0:FILL35,1,20
692 CURSET48,16,0:FILL19,1,4:POKE#4B6,0
695 IFPEEK(#47C)<>3THENPOKE#497,0
699 RETURN
700 RETURN
710 RETURN
720 IFM>128THENCURSET80,36,3:GOTO725
722 CURSET147,45,3
725 POKE#68,21:CALLD:RETURN
730 IFV>128THENCURSET147,30,3:GOTO735
732 CURSET80,45,3
735 POKE#68,22:CALLD:RETURN
740 IFSP=1ORSP=2THENCURSET165,97,3:X=1131:GOTO749
742 CURSET165,120,3:X=1092
749 W=151:GOSUB5:POKE#68,23:CALLD:RETURN
750 IFSP=0THENCURSET165,130,3:X=1092:GOTO758
752 CURSET159,107,3:X=1132
758 W=153:GOSUB5:X=X+3:GOSUB5:POKE#68,25:CALLD:RETURN
760 IFSP=0ORSP=3THENRETURN 
764 CURSET189,122,3:X=1096
768 W=152:GOSUB5:POKE#68,24:CALLD:RETURN 
770 RETURN
771 CURSET177,136,3:X=1096:POKE#6C,5
775 IFPEEK(#48C)=3THENPOKE#68,27:CURSET177,126,3:OC=1ELSEPOKE#68,26
778 W=154:GOSUB5:CALL#4078:RETURN
780 IFPEEK(#47C)=0THENRETURN
782 CURSET18,80,3:POKE#68,14:CALLD:CURSET214,80,3:POKE#68,15:CALLD:RETURN
790 X=INT((31ANDM)/31*4)*4+1034:W=1:GOSUB5:N=6*(X-1025):IFPEEK(#490)<>1THEN794
792 POKE#68,16:CURSETN,172,3:CALLD:RETURN
794 IFZG=1THENRETURN:ELSER=INT((63ANDM)/63*5)
795 IFR=3THENCURSETN+36,176,3 
796 IFR=2THENCURSETN+18,170,3
797 IFR=4THENCURSETN+18,184,3
798 IFR=1THENCURSETN,176,3
799 CHAR33+R,1,1:RETURN
800 RETURN
810 CURSET36,153,3:POKE#68,35:GOTO98
820 CURSET42,153,3:POKE#68,32:GOTO98
830 CURSET30,153,3:POKE#68,33:GOSUB90:POKE#6C,6:CALL#4840:RETURN
840 CURSET30,153,3:POKE#68,33:GOTO98
850 CURSET36,143,3:POKE#68,34:GOTO98
860 CURSET36,153,3:POKE#68,38:GOTO98
870 CURSET42,140,3:GOSUB5:X=X+3:POKE#68,30:POKE#6C,6
872 GOSUB90:CALL#4840:RETURN
880 GOSUB3
882 X=INT(M/256*4)*4+1035
883 N=6*(X-1025):W=156:FORZ=1TO2:GOSUB5:X=X+4:NEXT 
884 POKE#68,28:CURSETN,169,3:CALLD:RETURN
900 IFPEEK(#491)=0THEN960
902 POKE#68,17:GOSUB4:IFM>200THENPOKE#68,18:GOTO930 
906 CURSET68,10,3:FORX=1TO7:CALLD:CURMOV0,19,3:NEXTX
908 CURSET62,0,3:FORX=1TO8:CALLD:CURMOV0,20,3:NEXT
920 X=1035:W=128:GOSUB5:X=1075:GOSUB5
928 RETURN
930 CURSET158,10,3:FORX=1TO7:CALLD:CURMOV0,19,3:NEXTX
934 CURSET164,0,3:FORX=1TO8:CALLD:CURMOV0,20,3:NEXTX
940 X=1051:W=128:GOSUB5:X=1091:GOSUB5
948 RETURN
960 IFPEEK(#485)>1THENRETURN
962 IFM>200THENHR=2ELSEHR=1
963 IFZG=1THENRETURN
964 IFHR=1THENCURSET95,133,3:FORX=1TO4:CURMOV-7,15,1:NEXTX 
990 IFHR=2THENCURSET164,40,3:DRAW0,70,1:CURMOV-2,-30,3:DRAW0,50,1
992 RETURN
1000 REM
1100 IFPEEK(#485)>1ORSP=3ORZG=1THENRETURN
1105 IFSP=3THENRETURN
1110 CURSET42,100,3:CHAR39,1,1:RETURN
2300 PRINTC$"Votre pied de biche s'est casse!";:WAIT10:ZP=ZP-1
2310 IFZP>0THENDP=20+RND(1)*20
2320 GOSUB6:GOTO11E3
2400 PRINTC$"Votre torche est consumee !";:ZT=ZT-1
2410 IFZT>0THENDT=200+RND(1)*100
2420 GOSUB6:GOTO11E3
2500 CLS:PRINT"Cordes:"ZC" Pied de biche:"ZP
2510 PRINT"Fioles:"ZF" Torches:"ZT
2520 IFDI=0THENPRINT"le diamant Bleu";
2530 IFLI=0THENPRINT"  un livre";:WAIT15
2540 IFAI=0THENPRINT"  un aigle en or";:WAIT15
2560 IFZG>0THENPRINT"  une bague";:WAIT15
2570 IFZN=1THENPRINT"  un aigle en plomb";:WAIT15
2580 V=M1+M2+M3:IFV>0THENPRINT"  parchemins:"V;:WAIT15
2590 IFZO=1THENPRINT"  une clef en or";:WAIT15
2595 IFZR=1THENPRINT"  une clef en fer";
2599 WAIT50:CLS:GOTO5100
3000 DOKE#306,#2710:IFAI=0ANDLI=0ANDDI=0THEN3080
3005 TEXT:CLS:POKE#26A,10:PRINT:PRINT:PRINT:PRINTN$", tu peux:"
3010 PRINT:PRINT:PRINT"       1. Entrer dans le chateau.":PRINT:PRINT:PRINT"       2. Partir.":PRINT
3015 PRINT:PRINT"       3. Aller chez le marchand":PRINT
3020 GETK$:IFK$="1"THENNP=12:BR$="":AB=0:GOTO4E3
3025 IFK$="3"THEN13E3ELSEIFK$<>"2"THEN3020
3030 IFDI=0ORAI=0ORLI=0THENPRINT:PRINT:PRINT"Tu es ";
3040 IFDI=0THENPRINT"riche ";
3042 IFLI=0THENPRINT"et sage"
3044 IFAI=0THENPRINT"et puissant"
3050 PRINT:PRINT"Tu est sauf!"
3070 PRINT:PRINT"Veux-tu rejouer ? (O/N)":GETK$:IFK$="O"THENRUN1ELSE3070
3080 HIRES:PRINTCHR$(17):CALL#4E2A:X=#5B11:W=6:Y=180:GOSUB9105 
3090 PRINT:PRINTCHR$(140)SPC(9)"Vous avez GAGNE !"
3092 GOTO3092
4000 DOKE#306,#FFFF
4010 NV=1:POKE#495,NP:CALL#3F14:GOSUB100:AR=0:BR=0:GOSUB4200:GOTO5E3
4100 SS=0:PO=4:AC=0:XH=19:BR=AR:YH=140:MO=123:GOSUB6:GOSUB7:CALL#4500
4110 SOUND1,1500,0:PLAY1,0,4,10:RETURN
4140 IFPS=1THENSOUND1,1500,0:PLAY1,0,4,10
4150 X=#5A00:GOSUB9100:PLAY0,0,0,0:IFNP=1THENX=23051:GOTO9105
4151 IFOU<>0THENX=23219:GOTO9105
4152 IFNP=63THENX=23090:GOTO9105
4155 IFNP=62ORNP=33THENX=23074:GOTO9105 
4157 IFSP=0THENX=23111:GOSUB9105
4160 IFSP=1THENX=23128:GOSUB9105
4162 IFSP=3THENX=23143:GOSUB9105
4164 IFNP<9THENX=23160:GOTO9130
4166 IFNP>57THENX=23181:GOTO9130
4170 X=23199:GOTO9130 
4200 AC=0:BR=AR:SS=0:PO=0:MO=124:XH=19:YH=-40*(SP=3)-20*(SP=0)+140
4230 GOSUB7:GOSUB6:CALL#4500:RETURN
4300 AC=0:SS=1:PO=1:MO=125:BR=AR+SS:XH=7:YH=180:GOSUB7:GOSUB6:CALL#4500:RETURN
4400 AC=0:PO=2:SS=2:MO=126:BR=AR+2:XH=31:YH=180:GOSUB7:GOSUB6:CALL#4500:RETURN
4500 AC=0:PO=0:MO=124:SS=0:BR=AR:GOSUB6:GOSUB7:CALL#4500:RETURN
4600 V=PEEK(#48B-SS):IFV=0OR(V=1ANDAB=9)THEN4700
4610 IFAB=6THENDP=DP-1:IFDP<0THEN2300
4620 IFV=3THEN4640
4630 IFAB=6ANDRND(1)*ST<.3THEN4700
4640 PRINTC$;"       Ca ne s'ouvre pas";:GOTO5100
4700 IFVN=1THENVN=0:GOSUB6100
4701 IFNP=12ANDSS=3THEN3E3
4702 GOSUB97:V=PEEK(#495-SS):NP=63ANDV:SS=(192ANDV)/64:ST=0:NV=1
4705 POKE#495,NP:CALL#3F14:IFPS=1THENSS=-1
4710 AC=0:GOSUB100:PO=SS:GOSUB4200+100*SS:GOSUB97:GOTO5E3
4800 CALL#4C73
4810 ST=PEEK(#4C2):V=PEEK(#4C0):OB=PEEK(#4C4):RETURN
4900 GOSUB7:IFAC=1THENGOSUB4800:IFV<>0THEN1E4
4910 CALL#4500:CALLB
4920 IFST=3THEN4700
4925 IFGP=3THENGOSUB7400
4930 GOTO5100
5000 IFPEEK(#47C)<>3ANDAB<>1THENGOSUB6E3 
5002 CALLB:IFVN=1ANDAB=1THENVN=0:GOSUB6100:SS=3:GOTO4710 
5005 IFNV=1THENGOSUB4140:IFNP=63ANDPS=0THENGOSUB6900
5007 IFNV=1THENNV=0:PS=0
5010 CALLB:GOSUB6200:XH=PEEK(#478):YH=PEEK(#479)  
5015 CALLB:GOSUB6200:IF(XH=11ANDHR=1)OR(XH=27ANDHR=2)THENHS=1
5016 IFHS=1ANDAC<>5THEN6300 
5017 IFPEEK(#4A7)=22ANDAC=5THENGOSUB10660
5018 IFHS=1ANDAC=5THENHT=1
5019 IFTB=1THEN7100ELSEIFSD>0THEN12300
5020 IFPEEK(#4A7)=22THENPOKE#4A9,0:GOSUB7:GOTO4910
5025 IFPEEK(#4A7)=20ANDOB=1THEN7E3
5027 IFGP>1THENGOSUB6:GOTO7240 
5030 K$=KEY$:IFK$=""ANDAC=1THENGOSUB6:GOTO4900 
5035 IFK$=""ANDAC=9THENGOSUB6:GOTO12100
5037 GOSUB6200:IFK$<>" "ANDGP=1THENGOSUB6:GOTO7200
5040 IFK$=""THENAC=0:GOTO5100
5050 A=DEEK(#4300+2*ASC(K$)):GOSUB6:GOTOA
5100 IFAC=1THENGOSUB97
5110 IFAB=1THENDT=DT-1:IFDT<0THEN2400
5200 CALLB:GOSUB6200:EO=EO-BL
5210 IFSD>0THEN12300 
5700 IFLEN(BR$)<13THENBR$=BR$+" ":GOTO5700
5705 PRINTC$:PRINT"Forces:";INT(EO);"%","Points:";PT
5710 PRINT"Pieces d'or:";FR;"  Main:";BR$;C$;CHR$(14);
5800 GOSUB6200:IFEO<0THEN9E3
5850 IFBE=0THENGOSUB6400
5990 GOTO5E3 
6000 IFVN=1THENCLS:POKE#2C0,3:CURSET0,0,3:FILL199,40,0:POKE#4C0,2:RETURN
6001 IFOU=1ORAC=5THENRETURN
6002 TEXT:PAPER0:PRINTCHR$(17):FORX=1TO12:PRINT:NEXT:PRINT"         IL FAIT NOIR ICI !"
6003 WAIT20:CALL#4EEA:VN=1:INK0:POKE#2C0,3:RETURN
6100 CLS:CALL#4EF8:PAPER4:INK7:NV=1:RETURN 
6200 IFPEEK(#4C6)=0THEN8E3
6215 PLAY1,1,0,0:SOUND4,100,4
6220 CALL#4CDD:IFPEEK(#499)=1THENPOKE#499,0:BL=BL+.1:EO=EO-30-RND(1)*50:GOSUB97
6230 IFPEEK(#4C6)=0THENGOSUB97
6240 RETURN
6300 HS=0:V=PEEK(#5100+4*NP):POKE#5100+4*NP,128ORV:POKE#491,1
6310 SOUND1,50,0:PLAY1,1,7,600:GOSUB902:GOSUB3:IFHT=0THEN9000
6320 PLAY0,0,0,0:GOSUB6:GOTO1E4
6400 V=PEEK(#487):IFV=1THENPOKE#487,0:GOTO6410
6402 IFV=0THENRETURN
6405 IFRND(1)/V>.05THENRETURN 
6410 POKE#4B1,RND(1)*6:ONPEEK(#486)GOTO6420,6450,6470
6420 IFVN=1THENPOKE#487,V:RETURN
6430 POKE#4B2,7:POKE#4B3,80:POKE#4B4,1:POKE#4B6,2:CALL#4964:RETURN 
6450 POKE#499,1
6460 POKE#4B1,1:POKE#4B2,35:POKE#4B3,120:POKE#4B4,1:POKE#4B6,1:CALL#4964:RETURN
6470 RETURN
6500 CURSET183,107,3:POKE#68,30:PLAY1,0,0,0:IFAI=0THENZN=0
6510 FORX=1TO61:V=6+3*(V=6):POKE#6C,V:CALL#4078:SOUND1,5*X,9 
6520 NEXT:PLAY0,0,0,0:GOTO10718
6900 IFPS=0THENSOUND1,100,0:PLAY1,1,7,2E3
6910 PATTERN15:FORX=90TO118:CURSETX,165,3:DRAW-9,24,1:NEXT:PATTERN255
6920 PLAY0,0,0,0:RETURN
7000 V=PEEK(#5100+4*NP):POKE#5100+4*NP,64ORV
7010 HIRES:INK0:OB=0:PRINTCHR$(17);:POKE#4C4,0:VN=0
7015 PLAY1,1,0,0:FORX=1TO50:SOUND1,50+20*X,10:NEXT:GOSUB97
7020 OU=1:AP=NP:AX=XH+4:SP=3:XH=22:FORX=#400TO#497:POKEX,0:NEXT 
7030 CURSET72,0,1:DRAW0,199,1:DRAW9,-20,1:DRAW23,-20,1:DRAW30,0,1:DRAW23,20,1 
7040 DRAW9,20,1:DRAW0,-199,1:X=1034:W=128:GOSUB5:X=1052:GOSUB5
7045 CURSET12,0,3:FILL200,10,42:CURSET168,0,3:FILL200,10,42:NV=1
7046 FORX=1065TO1095:POKEX,255:NEXT:SP=3
7047 EO=EO-60*RND(1):BL=BL+BL*5*RND(1):AB=0
7048 IF(63ANDM)<32THENPOKE#68,28:CURSET90,182,3:CALLD
7060 AC=0:SS=3:AR=0:BR=25:MO=20:GOSUB7:GOSUB6:CALL#4500:GOSUB690:TB=1:GOTO5E3
7100 K$=KEY$:IFK$<>"A"THEN5100ELSETB=0:GOTO5050
7200 IFZC=0ORAB>0THEN99
7215 IFOU=1OR(NP=62ANDXH=19ANDYH=160)THEN7220ELSE99
7220 GP=1:IFSS<>3THEN10400
7230 IFGP=1THENBR=23:ZC=ZC-1:MO=SS:GP=2:GOTO4900 
7240 IFGP=2THENBR=24:GP=3:GOTO4900 
7250 IFGP=3THENBR=18:XH=XH+2:GOTO7260
7255 IFGP=4THENPOKE#9400+245,1:POKE#9500+245,1:POKE#5401,64
7260 IFGP<7THENGP=GP+1:MO=18:GOTO4900
7300 GP=0:IFNP=62ANDOU=0THENNP=63:NV=1:ST=0:XH=19:YH=180:SS=3:GOTO4705
7310 OU=0:NP=AP:NV=1:ST=0:XH=AX:YH=180:SS=3:GOTO4705
7400 POKE#68,90:V=6*XH+17:CURSETV+9,YH-54,3:DRAW0,-7,1
7410 FORX=YH-74TO20STEP-14:CURSETV,X,3:CALLD:NEXT
7450 RETURN
8000 BE=PEEK(#4B6):IFBE=0THENRETURN
8015 F=1+(F=1):POKE#4B5,F
8020 ONBEGOTO8100,8200
8100 IFPEEK(#4B0)=0THENPLAY0,1,2,2E3
8110 IFRND(1)>.9THENCALL#4A50ELSECALL#4ACE
8115 IFPEEK(#499)=0THENBL=BL+.5:EO=EO-RND(1)*10
8120 RETURN 
8200 IFPEEK(#4B0)=1ANDPO<4THENEO=EO-RND(1)*20:BL=BL+.05
8205 CALL8835:CALL#4976
8210 PLAY0,1,2,1E3:IFRND(1)>.9THENSOUND1,40,0:PLAY1,1,2,300
8215 IFPEEK(#4B6)=0THENPLAY0,0,0,0
8220 RETURN
9000 PLAY0,0,0,0:IFVN=1THENGOSUB6100 
9005 HIRES:INK0:POKE#68,112
9010 FORM=1TONO:W=PEEK(23485+M):Y=100:CURSETW,Y,3:CALL#3EBD
9020 X=23500+10*M:Y=180:GOSUB9105:NEXTM
9025 POKE#68,113:CURSET40,30,3:CALL#3EBD:CURSET0,0,3:FILL79,1,20:CURSET6,80,3
9030 FILL120,1,7:DOKE#306,#2710:IFNO=5THENNO=0
9050 POKE#4D0,NO:PRINTCHR$(17):GOTO3070
9100 W=0:Y=0:CURSET6,0,0:FILL35,38,64
9105 V=PEEK(X):IFV=92THENWAIT100*U:RETURN
9110 W=W+6:IFW>233THENW=6:Y=Y+8 
9120 CURSETW,Y,3:CHARV,0,1:X=X+1:GOTO9105
9130 W=0:Y=8:GOTO9105 
10000 IFAC=1THENAC=0:GOSUB97
10010 MO=SS:PO=SS:BR=AR+SS:GOTO4900
10100 IFAC<>0THEN10000
10110 IFPO>3ANDPO<8THENSS=0:MO=4:PO=4:BR=AR:GOTO4900
10120 IFSS<>0THENSS=0:GOTO1E4
10130 MO=8:AC=1:BR=AR:GOTO4900
10200 IFAC<>0THEN1E4
10210 IFPO>3ANDPO<8THENSS=1:PO=5:MO=5:BR=AR+1:GOTO4900
10220 IFSS<>1THENSS=1:GOTO1E4
10230 MO=9:AC=1:BR=AR+1:GOTO4900 
10300 IFAC<>0THEN10000 
10310 IFPO>3ANDPO<8THENSS=2:PO=6:MO=6:BR=AR+2:GOTO4900 
10320 IFSS<>2THENSS=2:GOTO1E4
10330 MO=10:AC=1:BR=AR+2:GOTO4900 
10400 IFAC<>0THEN1E4
10405 IFPO>3ANDPO<8ANDPS=1ANDXH=19ANDYH=140ANDSS=3THEN4700
10410 IFPO>3ANDPO<8THENSS=3:MO=7:PO=7:BR=AR+3:GOTO4900 
10420 IFSS<>3THENSS=3:GOTO1E4
10430 MO=11:AC=1:BR=AR+3:GOTO4900 
10500 IFPO>4ANDPO<8THENWAIT10:GOTO5100
10505 IFAB=6ANDXH=27ANDYH=160THEN99
10510 PO=4+SS:AC=0:BR=AR+SS:MO=4+SS:GOTO4900
10600 CALL#4D55:IFPEEK(#4C7)=1THEN99 
10620 GOSUB4810
10640 MB=AB:AC=5:MR=AR:PM=0:AB=0:PO=7+SS:MO=11+SS:BR=18:GOSUB6:GOTO4900
10660 PM=PM+1:IFPM=1THENPOKE#9400+245,1:POKE#9500+245,1:POKE#5401,64:RETURN
10665 IFPM=4THENGOSUB97:RETURN
10670 IFPM=5THENAB=MB:AR=MR:BR=AR+SS:PO=SS
10690 RETURN
10700 IFSS=3THEN99
10701 IFNP=1ORNP=62ORNP=63THEN10780
10702 IFSS=1ANDXH=27ANDOC=1ANDYH=160THEN10770
10703 CALL#4CB6:V=PEEK(DEEK(#78)-4*(SS=1)+(SS=2)+38*(SS=0)) 
10705 IFV<>160ORTR=0THEN99
10707 IFAB<>0THEN99
10710 X=0:GOSUB(10715+5*TR):IFX=1THEN99
10715 POKE#68,249
10716 TR=0:V=PEEK(#5100+4*NP):POKE#5100+4*NP,199ANDV:POKE#48F,0
10717 IFXH<>27OROC=0THENCALL#4576
10718 PRINTC$"          "M$;:WAIT20:PRINTCHR$(14):GOTO5100
10720 IFPO<4ORPO>7THENX=1:RETURN
10721 IFNP=62THENM1=1ELSEIFNP=35THENM2=1ELSEIFNP=1THENM3=1
10722 M$="Un parchemin":RETURN
10725 IFPO<4ORPO>7THENX=1:RETURN
10727 FR=FR+INT(RND(1)*300):PT=PT+10:M$="Une bourse de pieces d'or":RETURN
10730 IFPO<4ORPO>7THENX=1:RETURN 
10732 ZR=1:M$="Une clef en fer":PT=PT+15:RETURN
10735 IFPO<4ORPO>7THENX=1:RETURN 
10738 ZO=1:M$="Une clef en or":PT=PT+30:RETURN
10740 IFPO<4ORPO>7THENX=1:RETURN
10742 ZF=ZF+1:PT=PT+7:M$="Une fiole pleine":IFNP=38ORNP=14THENPN=PN+1
10743 RETURN
10745 IFPO<4ORPO>7THENX=1:RETURN
10747 ZG=1:FR=FR+200:M$="Une bague":RETURN
10750 IFPO<4ORPO>7THENX=1:RETURN
10752 ZN=1:FR=FR+50:PT=PT+10:M$="Un aigle en plomb":RETURN
10770 IFTR=0THENM$="Le coffre est vide !":GOTO10717
10775 GOSUB(10717+5*TR):GOTO10716
10780 POKE#68,250
10785 IFYH<>160ORNOT(XH=27ANDSS=1)ORPO>3ORAB<>0THEN10702
10787 IF(NP=62ANDDI=1)OR(NP=63ANDAI=1)THENPOKE#4C6,1
10790 IFNP=1ANDLI=1THENLI=0:M$="Un livre":PT=PT+1E3:GOTO10717
10793 IFNP=62ANDDI=1THENDI=0:M$="Le diamant bleu":PT=PT+500:FR=FR+200:GOTO10717
10795 IFNP=63ANDAI=1ANDZN=0THENPRINTC$;"     Il est incruste":GOTO5100 
10797 IFNP=63ANDAI=1THENAI=0:M$="L'aigle d'or":PT=PT+1E3:FR=FR+5E3:GOTO6500
10799 GOTO99
10800 U=1:IFM1=1THENX=23244:GOSUB9100 
10810 IFM2=1THENX=23601:GOSUB9100 
10820 IFM3=1THENX=23351:GOSUB9100
10830 IFLI=0THENX=23416:GOSUB9100 
10840 U=0:GOTO5100 
10900 IFST=1ORST=2THEN4600
10907 IFAB=8ANDXH=15ANDYH=140ANDSS=3AND(PEEK(#485)=1ORPEEK(#485)=3)THEN10970
10910 IFPEEK(#48E)=7ANDXH=27ANDYH=160THEN10950ELSE99
10950 IFAB<>6THENIFM>100ORAB<>0THEN4640
10960 POKE#6C,5:POKE#68,27:CURSET177,126,3:CALL#4078:OC=1
10962 V=PEEK(#5000+4*NP+3):POKE#5000+4*NP+3,48ORV:POKE#48D,3
10963 IFAB=6THENDP=DP-1:IFDP<0THEN2300
10965 IFAB=6THENPOKE#68,85:CURSET164,117,3:CALL#3EBD:GOTO5100ELSE5100
10970 IFPS=1THEN99ELSESOUND1,1500,0:PLAY1,0,4,10
10980 CURSET114,120,3:FORV=0TO11:DRAW16,0,0:CURMOV0,-2,3:DRAW-16,0,1:NEXT
10990 PLAY0,0,0,0:PS=1:GOTO5100 
11000 IFAB=0THEN5100
11010 AR=0:AB=0:BR$="":GOTO1E4
11100 IFZT=0THEN99
11110 IFAB=1THEN5100
11120 AR=4:AB=1:BR$="Torche":GOTO1E4
11200 IFZR=0THENGOSUB9:GOTO5100
11210 IFAB=9THEN5100
11220 AR=8:AB=9:BR$="Clef en fer":GOTO1E4
11300 IFZO=0THEN99
11310 IFAB=8THEN5100
11320 AR=8:AB=8:BR$="Clef en or":GOTO1E4
11400 IFZF=0THEN99
11410 IFAB=10THEN5100
11420 AR=12:AB=10:BR$="Une fiole":GOTO1E4
11500 IFZP=0THEN99
11510 IFAB=6THEN5100
11520 AR=19:AB=6:BR$="Pied de biche":GOTO1E4
12000 IFYH<>141ORAB<>1OR(XH<>7ANDXH<>31)ORPEEK(#47C)=0THEN5100
12010 IFXH=7ANDSS=2THENV=PEEK(#497)OR1:GOTO12030
12020 IFXH=31ANDSS=1THENV=PEEK(#497)OR2ELSE99
12030 IFV=3ORV=131THENX=PEEK(#5000+4*NP):POKE#5000+4*NP,2ORX
12035 POKE#497,V:POKE#47C,3:PLAY0,1,1,2E3:GOTO5100
12100 IFZF=0ORAB<>10THEN99
12110 AC=9:IFSS=3ORSS=0THENSS=1:GOTO1E4
12120 IFFG=0THENAR=15:FG=1:SOUND1,200,0:PLAY1,1,4,150:GOTO1E4
12125 FG=FG+1:IFFG<3THEN5100
12127 IFRND(1)*PN<PNTHENPN=PN-1:BL=BL+1ELSEEO=100:BL=.01
12130 FG=0:AC=0:PLAY0,0,0,0:ZF=ZF-1:AR=12:GOTO1E4
12200 EO=0:GOTO5100
12300 IFPEEK(#4C6)>0THEN5100
12305 SD=SD+1:GOSUB6
12310 ONSDGOTO10500,10000,12320,12320,12320,12000,12340,12340,12340,12350,12360
12320 YH=YH-13:GOTO1E4
12340 YH=YH+13:GOTO1E4 
12350 GOSUB97:GOTO10500
12360 SD=0:GOTO1E4
13000 CLS:PRINTCHR$(17):PRINT:PRINT:PRINT:PRINT:PRINT" Le marchand vend :"
13010 PRINT:PRINT"  1. Fioles        : 360 p.o."
13015 PRINT"   (Eau de Jouvence)":PRINT
13020 PRINT"  2. Torches       : 190 p.o.":PRINT
13030 PRINT"  3. Cordes        : 110 p.o.":PRINT
13035 PRINT"  4. Pieds de biche: 230 p.o.":PRINT:PRINT"  0. Partir"
13037 PRINT:PRINT:PRINT" Tu as "FR"p.o."
13040 PRINT:PRINT" Achat ? ";
13050 GETK$:IFK$<>"1"ANDK$<>"2"ANDK$<>"4"ANDK$<>"3"ANDK$<>"0"THEN13050
13055 PRINTK$
13060 ON(VAL(K$)+1)GOTO3000,13100,13200,13300,13400
13070 IFK$="3"THEN13300
13100 V=360:GOSUB13500:IFX=0THENZF=ZF+1
13110 GOTO13010
13200 V=190:GOSUB13500:IFX<>0THEN13010
13210 ZT=ZT+1:IFZT=1THENDT=200+RND(1)*100
13220 GOTO13010
13300 V=110:GOSUB13500:IFX=0THENZC=ZC+1
13310 GOTO13010
13400 V=230:GOSUB13500:IFX<>0THEN13010
13410 ZP=ZP+1:IFZP=1THENDP=20+RND(1)*20
13420 GOTO13010
13500 X=0:IF(FR-V)<0THENPRINTCHR$(140)"Tu n'as pas assez d'or !":X=1:RETURN
13510 FR=FR-V:PRINTCHR$(140)"D'accord .":RETURN 
21845 GOTO5100

Voila
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: désassemblage de l'Aigle d'or

Message par Fool-DupleX »

Merci, 6502man :) . A mon tour de contribuer, listing BASIC pour MO5. Légèrement formaté pour le rendre plus lisible.

AIGLE.BAS (1er fichier, intro)

Code : Tout sélectionner

0 REM   COPYRIGHT LORICIELS FEVRIER 85 
        TOUTES REPRODUCTIONS,LOCATIONS  
           STRICTEMENT INTERDITES      .
           
   5 POKE&H21FC,255
  10 CLEAR,&H3FFF:LOADM"":LOADM"":POKE&H21FC,255
  12 PRINTCHR$(20):CLS:SCREEN7,0,0:LOCATE0,12:PRINT"Laissez le magneto en position lecture.":PRINT:PRINTTAB(7)"<APPUYEZ SUR UNE TOUCHE>"
  15 IFINKEY$=""THEN15ELSE100

  20 FORX=1TO700:NEXT:RETURN

  30 PLAYT$+"T5A2L50DO#L30FAL90RE":RETURN

  40 T$="O3":GOSUB30:T$="O2":GOSUB30:T$="O1":GOSUB30:GOSUB20:RETURN

 100 CONSOLE0,24:CLS:SCREEN5,0,0:PRINTCHR$(20):GOSUB40:GOSUB20:GOSUB20
 110 IM=&H5013:MT=&H5900:EF=&H5A28:FL=&H5A0C:LG=&H5016:LR=&H5017:CL=&H5022:FM=&H5023:CG=&H5025:POKE&H5021,0:POKE&H5012,0
 120 GOSUB200:GOSUB300:GOSUB20:GOSUB300:GOSUB400:GOSUB20:GOSUB300:LOCATE0,24:COLOR7,0:PRINT"    Copyright LORICIELS Fevrier 85";:GOSUB20:GOSUB300:GOSUB20:GOSUB40:GOSUB20
 130 CLS:SCREEN7,4,4:PRINT:PRINT:PRINT:PRINT:PRINT"   Apres plusieurs jours de cheval,vous arrivez en vue du Chateau de l'Aigle,   situe aux confins de la Wesphalie.":PRINT:PRINT"   Le vieux mage disait donc vrai..."
 132 PRINT:PRINT"   Il avait ajoute : 'Pour mener a bien ta quete, il te faudra acquerir SAVOIR, RICHESSE et PUISSANCE.'
 140 PRINT:PRINT:PRINT:PRINT:PRINT"   La legende du pays raconte que le    Chateau recelle d'innombrables tresors  et richesses, mais que nombreux furent  ceux qui y perirent..."
 145 LOCATE7,24:PRINT"<APPUYEZ SUR UNE TOUCHE>";:K$=INPUT$(1):CLS
 150 COLOR7,1:LOCATE15,0:PRINT" COMMANDES ":COLOR7,4:PRINT:PRINT"Fleches: Marcher/Courir (Pressez 2 fois)Espace : Arret/Debout":PRINT"A : Accroupir":PRINT"B : Boire":PRINT"S : Sauter (en longueur)":PRINT"D : Sauter (en hauteur)"
 160 PRINT"O : Ouvrir":PRINT"P : Prendre":PRINT"L : Lire":PRINT"G : Grimper":PRINT"I : Inventaire":PRINT"Q : Suicide":PRINT:COLOR7,1:LOCATE13,15:PRINT" OBJET EN MAIN ":COLOR7,4
 165 PRINT"0 : Vide":PRINT"1 : Torche":PRINT"2 : Crucifix":PRINT"3 : Pied de biche":PRINT"4 : Clef en fer":PRINT"5 : Clef en or":PRINT"6 : Fiole":LOCATE7,24:PRINT"<APPUYEZ SUR UNE TOUCHE>";:K$=INPUT$(1)
 170 CLS:SCREEN5,0,0:GOSUB200:GOSUB400:GOSUB40:LOCATE8,24:COLOR7,0:PRINT"Chargement en cours...";
 180 LOADM"":LOAD"",R
 190 END

; Affichage château
 200 PSET(0,0),-1:POKECL,4:POKELG,40:POKELR,88:POKEFM,0:EXECFL:PSET(200,5),-5:POKEIM,2:EXECMT:PSET(216,6),-5:POKEIM,6:EXECMT:RETURN

; Animation éclair
 300 PSET(80,0),-5:POKEIM,3:POKECG,4:FORX=1TO4:EXECMT:EXECEF:NEXT:RETURN

; Affichage du titre 
 400 PSET(160,90),-1:POKEIM,5:EXECMT:PSET(16,100),-1:POKEIM,4:EXECMT:POKEIM,7:PSET(80,100),-1:EXECMT
 410 LOCATE8,21:PRINT"par ROCQUES Louis-Marie":RETURN

 658 LZ=2:CZ=13
1159 PY=23:CO=12
AIGLE.BAS (2ème fichier, jeu)

Code : Tout sélectionner

   0 CLEAR9,&H3FFF:POKE&H21FC,255:GOTO800
   
   1 IFPEEK(SA+2+W)=0THENPOKESA+2+W,E
   2 IFPEEK(SA+W)=0THENPOKESA+W,E
   3 IFPEEK(SA+W+1)=0THENPOKESA+1+W,E:RETURNELSERETURN

   4 V=PEEK(SA+W):RETURN

   5 LOCATE0,0:EXECBO:RETURN

   9 R=40:GOTO1430

  10 LINE(0,168)-(64,88):LINE-(255,88):LINE-(319,168):RETURN

  12 LINE(0,168)-(48,108):LINE-(271,108):LINE-(319,168):RETURN

  14 LINE(0,168)-(32,128):LINE-(287,128):LINE-(319,168):RETURN

  26 PLAY"O5A9L9T3SILASOFAMIREDOO2A1DO":RETURN

  30 CONSOLE3,20:SCREEN0,0:CLS:COLOR7,0:LOCATE12,12:PRINT"Il fait noir ici !":COLOR7,4:CONSOLE0,2:RETURN

  40 POKEFO,0:CONSOLE0,24:CLS:SCREEN7,0:EXEC&H4405:LOCATE6,22:PRINT"Veux-tu rejouer ? (O/N)
  42 K$=INPUT$(1):IFK$="O"THENRUN800ELSE42
  50 CLS:EXEC&H43D8:L=1:IFPEEK(P+186)=0THENR=40:GOTO1430ELSE1430

  60 CLS:EXEC&H43E1:L=2:RETURN

  70 CLS:EXEC&H43EA:L=3:RETURN

  80 CLS:EXEC&H43F3:L=0:RETURN

  90 SCREEN7,0:EXEC&H43FC:IFPEEK(P+186)=0THENRETURN
  95 LOCATE9,22:PRINT"Tu es trop fort!":GOTO95

 110 GOSUB10:POKEIM,4:FORV=0TO4:PSET(56,18+V*14),-1:POKERO,1:EXECPT:NEXT:FORV=0TO4:PSET(240,18+V*14),-1:POKERO,1:EXECXP:NEXT
 118 F=0:RETURN

 120 GOSUB12:POKEIM,4:FORV=0TO5:PSET(40,24+V*14),-1:POKERO,1:EXECPT:NEXT:FORV=0TO5:PSET(256,24+V*14),-1:POKERO,1:EXECXP:NEXT
 128 F=1:RETURN

 130 GOSUB10:PSET(64,83):LINE-(64,37):PSET(77,37):LINE-(77,83):PSET(253,83):LINE-(253,37):PSET(240,37):LINE-(240,83):POKEIM,2:PSET(56,24),-1:EXECPT:PSET(232,24),-1:EXECPT:POKEIM,3:PSET(56,84),-1:EXECPT:PSET(232,84),-1:EXECPT
 138 F=0:RETURN

 140 LINE(0,168)-(32,128):LINE-(72,98):LINE-(120,88):LINE-(200,88):LINE-(248,98):LINE-(287,128):LINE-(319,168)
 148 POKESA+24,255:POKESA+35,255:F=0:RETURN

 150 GOSUB14:LINE(32,128)-(32,68):LINE-(24,34):LINE-(16,24):LINE-(8,54):LINE-(0,108):LINE-(0,168):LINE(287,128)-(287,68):LINE-(295,34):LINE-(303,24):LINE-(311,54):LINE-(319,108):LINE-(319,168)
 158 F=2:RETURN

 160 GOSUB14:FORV=0TO5:PSET(32+48*V,127),-1:POKEIM,32:EXECPT:LINE(35+48*V,126)-(35+48*V,30):LINE(44+48*V,126)-(44+48*V,30):PSET(32+48*V,24):POKEIM,33:EXECPT:NEXT
 168 F=2:RETURN

 180 GOSUB14:LINE(207,128)-(120,128),-1:LINE-(128,108):LINE-(199,108):LINE-(207,128):LINE(120,128)-(120,24):LINE(128,108)-(128,24):LINE(199,108)-(199,24):LINE(207,128)-(207,24):LINE(32,128)-(32,24):LINE(287,128)-(287,24)
 188 FORW=48TO51:POKESA+W,0:NEXTW:F=1:RETURN

 190 STOP

 210 GOSUB230:POKEIM,7:PSET(150,32+F*20):EXECPT:RETURN

 220 GOSUB230:POKEIM,8:PSET(150,34+F*20):EXECPT:RETURN

 230 POKERB,1:POKEIM,5:PSET(142,24+F*20),-1:EXECPT:RETURN

 240 GOSUB260:POKEIM,9:PSET(8,88):EXECPT:RETURN

 250 GOSUB260:POKEIM,10:PSET(8,94):EXECPT:RETURN

 260 POKERB,1:POKEIM,6:PSET(0,76),-1:EXECPT:RETURN

 270 GOSUB290:POKEIM,9:PSET(296,88):EXECXP:RETURN

 280 GOSUB290:POKEIM,10:PSET(296,94):EXECXP:RETURN

 290 POKERB,1:POKEIM,6:PSET(288,76),-1:EXECXP:RETURN

 310 POKERB,1:POKEIM,12:PSET(142,44+F*20),-1:EXECPT:RETURN

 320 GOSUB310:BOX(143,74+F*20)-(144,75+F*20):W=20*F+7:POKESA+W+3,E:POKEW+SA,&HF5:RETURN

 330 C=1:RETURN

 332 POKEIM,18:PSET(248,86),-1:EXECMT:W=55:GOSUB1:POKESA+35,255:RETURN

 340 POKERB,1:POKEIM,16:PSET(208+16*F,67+F*20):EXECPT:W=34+20*F:GOSUB1:RETURN

 350 POKEIM,15:PSET(200,62+F*20),-1:EXECPT:W=32+20*F:GOSUB1:RETURN

 360 POKEIM,14:PSET(88,26+F*20):EXECPT:RETURN

 370 POKEIM,13:PSET(210,26+F*20):EXECPT:RETURN

 380 C=2:RETURN

 382 POKEIM,18:PSET(40,86),-1:EXECXM:W=42:GOSUB1:POKESA+24,255:RETURN

 390 C=3:RETURN

 392 POKEIM,19:PSET(248,75),-1:EXECMT:W=55:GOSUB1:POKESA+35,255:RETURN

 400 C=4:RETURN

 402 POKEIM,19:PSET(40,75),-1:EXECXM:W=42:GOSUB1:POKESA+24,255:RETURN

 410 POKEIM,38:PSET(96-16*F,26+F*10):EXECPT:RETURN

 420 H=1:RETURN

 422 POKEIM,35:PSET(110-16*F,46+F*20),-1:EXECMT:RETURN

 430 POKEIM,3:PSET(200+8*F,92+F*20),-1:EXECPT:POKEIM,36:PSET(208+8*F,58+F*20),-1:EXECPT:W=32+20*F:GOSUB1:RETURN

 440 POKEIM,34:PSET(158,46+F*20),-1:EXECPT:BOX(146,42+F*20)-(182,82+20*F):RETURN

 450 POKEIM,37:PSET(208+8*F,56+F*20),-1:EXECPT:RETURN

 510 PSET(232,94),-1:POKEIM,17:EXECMT:W=54:E=&HF4:GOSUB2:POKESA+34,255:IFN=63ANDPEEK(P+209)=1THENPSET(232,78),-1:POKEIM,23:POKECL,128:EXECPT
 512 RETURN

 520 PSET(56,99+20*F),-1:POKEIM,25:EXECMS:W=23+20*F:GOSUB2:RETURN

 530 PSET(88,100+20*F),-1:POKEIM,26:EXECMS:W=25+20*F:GOSUB2:RETURN

 540 PSET(56,110),-1:POKEIM,26:POKECL,128:EXECPS:W=43:GOSUB2:RETURN

 550 PSET(248,100),-1:POKEIM,29:EXECMS:W=35:GOSUB2:RETURN

 560 GOSUB510:PSET(232,80),-1:POKEIM,30:EXECMS:RETURN

 570 PSET(72,90),-1:POKEIM,23:POKECL,128:EXECPS:W=24:GOSUB2:RETURN

 580 PSET(248,94+20*F),-1:POKEIM,28:EXECMS:W=35+20*F:GOSUB2:RETURN

 590 GOSUB580:RETURN

 600 GOSUB580:RETURN

 610 PSET(72,92+20*F),-1:POKEIM,27:EXECMS:W=24+20*F:GOSUB2:RETURN

 620 GOSUB610:RETURN

 630 GOSUB510:PSET(232,73),-1:POKEIM,24:EXECMS:RETURN

 640 GOSUB510:PSET(224,92),-1:POKEIM,22:POKERB,1:EXECMS:RETURN

 650 GOSUB510:PSET(232,78),-1:POKEIM,23:EXECMS:RETURN

 700 E=1:X=0
 730 W=INT(RND(-N*2+X)*11)+64:GOSUB4:IFV>0THENX=X+1:GOTO730
 740 GOSUB2:POKEP+220,(W-60)*2:V=16*(W MOD20):IFPEEK(P+136)>0THEN770ELSEIFN=32THENGOSUB754:GOSUB756:GOSUB758:RETURN
 745 IFPEEK(P+202)>0THENRETURN

 750 ONINT(RND(-N)*4+1)GOTO752,754,756,758:RETURN

 752 PSET(V,140),-1:POKEIM,114:EXECPT:RETURN

 754 PSET(V,142),-1:POKEIM,115:EXECPT:RETURN

 756 PSET(V+24,140),-1:POKEIM,114:EXECXP:RETURN

 758 PSET(V+24,150),-1:POKEIM,116:EXECXP:RETURN

 770 PSET(V,140),-1:POKEIM,31:EXECPT:RETURN

 800 DEFINTA-Z:P=&H5000:SC=&H58F7:FL=&H5A0C:EF=&H5A28:MT=&H5900:PT=&H5946:XM=&H5986:XP=&H59CC:RO=&H500D:RB=&H500C:CL=&H5022:MF=&H5023:FO=&H5021:IM=&H5013:LG=&H5016:LR=&H5017
 805 NS=&H501E:EL=&H5AD9:MS=&H5A4D:PS=&H5A96:SA=&H42C0:TP=&H4390:EN=&H4399:BO=&H43A2:IO=&H43B4
 807 POKEP+192,99:EXEC&H43AB
 810 N=0:CONSOLE0,24:CLS:GOSUB90:SCREEN7,4,0:LOCATE5,5:PRINTCHR$(20)"Aventurier, tu peux :":LOCATE9,9:PRINT"1. Entrer dans le chateau":LOCATE9,11:PRINT"2. Aller chez le marchand"
 820 K$=INPUT$(1):IFK$="1"THEN900ELSEIFK$<>"2"THEN820
 830 CLS:EXEC&H43BD:CONSOLE16,24
 840 CLS:EXEC&H43C6
 845 K$=INPUT$(1):PRINTK$:IFK$="0"THEN810ELSEIFASC(K$)>48ANDASC(K$)<53THENPOKE&H50AF,VAL(K$)ELSE840
 850 EXEC&H43CF:FORKL=1TO800:NEXT:GOTO840
 
 900 POKEP+172,4:POKEP+171,0:POKEP+165,0:POKEP+167,3:POKEP+164,0
 980 POKEP+157,11
1000 V=PEEK(P+157)+1:IFN=12ANDV=1THEN810ELSEN=V:CLS:CONSOLE0,20:CLS:SCREEN0,0,0:CONSOLE21,24:SCREEN7,4:CONSOLE0,20:IFPEEK(P+190)>0THENLOCATE9,11:COLOR7,0:PRINT"C'est un passage secret!":FORV=0TO4000:NEXT:SCREEN0,0:CLS
1020 EXECTP:C=0:H=0:COLOR0,0:POKECL,0:D=PEEK(P+128)+1:OND GOSUB110,120,130,140,150,160,150,180:IFPEEK(P+228)=2THENGOSUB26
1030 ONPEEK(P+145)GOSUB210,220,230:ONPEEK(P+146)GOSUB240,250,260:ONPEEK(P+147)GOSUB270,280,290:IFD=8THENF=2
1055 IFPEEK(P+139)>0THENGOSUB5000
1057 IFPEEK(P+137)>0ANDPEEK(P+202)=0THENPSET(32,77),-1:POKEIM,113:EXECPT
1060 E=254:ONPEEK(P+142)GOSUB310,320,330,340,350,360,370,380,390,400,410,420,430,440,450:POKEIM,11:IFPEEK(P+129)=1THENPSET(16,57),-1:EXECPT
1072 IFPEEK(P+131)=1THENPSET(288,57),-1:EXECXP
1080 IFPEEK(P+135)>0THENGOSUB700
1085 IFN=62THENLOCATE21,15:PRINT"*"
1090 IFPEEK(P+140)>0THENPOKEP+&H49,85+2*PEEK(P+218):POKEP+&H43,2:EXEC&H55D0
1095 IFN=3ORN=62THENPOKESA+50,3
1100 CONSOLE0,2:SCREEN4,4:CONSOLE3,20:IFPEEK(P+&H21)>0THENGOSUB30ELSESCREEN5,0
1102 IFH=1THENGOSUB422
1110 POKERB,1:ONC GOSUB332,382,392,402:POKERB,0:IFC<>0THEN1200
1120 E=4:POKENS,3:ONPEEK(P+141)GOSUB510,520,530,540,550,560,570,580,590,600,610,620,630,640,650
1159 PY=23:CO=12
1200 IFPEEK(P+144)=0THEN1300
1210 POKEIM,21:IFRND(-N)>.5THENPSET(0,24):EXECMT ELSEPSET(280,24):EXECXM
1300 IFPEEK(P+143)=0THEN1400
1310 E=5:POKEIM,20:IFF=2ORRND(-N)>.5THENPSET(116,140),-1:W=67:GOSUB1:EXECMT ELSEPSET(176,120),-1:EXECXM:W=51:GOSUB1
1400 COLOR7,4:LOCATE1,22:PRINT"Forces: "CHR$(20);:CONSOLE0,2:EXECEN
1420 GOSUB5:IFR=0THENONL GOSUB60,70,80:IFPEEK(P+186)=0THENR=40
1425 ONPEEK(P+175)GOTO1000,1500,9,50,40,1700,9,9,4000
1430 IFPEEK(P+168)=1THENI=4:LOCATE15,2:COLOR7,1:PRINT"IMPOSSIBLE";:COLOR7,4
1435 IFI>0THENI=I-1:IFI=1THENLOCATE15,2:PRINT"          ";
1437 IFPEEK(P+228)>0THENPLAY"O5A200T1SI"
1440 IFR>0THENR=R-1:IFR=1THENCLS
1490 GOTO1420
1500 POKEFO,0:CONSOLE0,20:COLOR0,0:CLS:GOSUB26
1510 LINE(96,167)-(110,145):LINE-(140,130):LINE-(180,130):LINE-(210,145):LINE-(223,167):PSET(0,24):POKELG,12:POKELR,144:POKEMF,170:POKECL,0:EXECFL:PSET(224,24):EXECFL
1520 CONSOLE3,20:SCREEN5,0:IFRND(-7*N)>.5THENPSET(110,100),-1:POKEIM,35:EXECMT
1530 IFRND(-2*N)>.6THENPSET(140,155),-1:POKEIM,20:EXECMT
1590 CONSOLE0,2:EXECIO:SCREEN7,4:CLS:PRINT:PRINTTAB(7)"C'est une oubliette.":GOTO1400
1700 PSET(152,62):POKERB,1:POKEIM,117:EXECMT:GOTO1430
4000 GOSUB30:GOTO1430
5000 IFPEEK(P+140)>0THENE=255ELSEE=2
5010 IFRND(-N*4)<.5THENPOKEP+218,0:W=66ELSEPOKEP+218,1:W=73
5020 GOSUB2:IFPEEK(P+202)>0THENRETURNELSEIFW=66THENFORV=0TO4:PSET(112-V*4,134+7*V):NEXT:RETURN
5030 PSET(216,60):LINE-(216,99):PSET(218,90):LINE-(218,124):RETURN
On voit aisément que le jeu est entre les lignes 900 et 5030, avec beaucoup de sous-routines placées avant. Comme souvent avec les listings BASIC d'époque, il suffit de formater correctement, ligne par ligne et bloc par bloc pour s'apercevoir que ce n'est pas si spaghetti que ça.
Dernière modification par Fool-DupleX le 22 mars 2024 14:42, modifié 4 fois.
Répondre