Cette après midi je me suis amusé par curiosité intellectuelle à convertir un jeux MO5 K7 au format D7
Il s'agit de ATLANTIS de Cobra Soft.
Ne connaissant pas le MO5 j'ai essayé sur un jeu "simple" à première vue
, mais avec le DOS impossible de charger le programme Basic plus les données plus la zone de travail du Basic pour les variables.
Le jeu est écrit en Basic et comporte des données chargées en binaires.
Pour la présentation pas trop de problème j'ai juste déplacer la zone des données un peu plus haut en RAM car avec le DOS le programme BASIC venait empiéter sur les données binaires, mais il restait assez de place
Pour le jeu à proprement parler le programme BASIC plus les données binaires était plus grande que la place disponible en RAM (à cause du DOS)
Après avoir rapidement analysé le jeu je me suis aperçu que les données binaires correspondais aux tracés des dessins (classique des jeux d'aventures Basic des annèes 80
), mais stocké dans un seul binaire trop volumineux pour la petite RAM du MO5 avec le DOS
Première idée exporter chaque dessins dans un binaire indépendant => gain de place en RAM de 12Ko magnifique
Pour ca j'ai bêtement adapté la partie du programme originale de tracé des dessins pour sauvegarder la partie en RAM concerné par un SAVEM...
Modification légère du jeu d'origine pour charger le binaire concerné à chaque salle au lieu de charger un seul gros binaire en début de partie, avec les accès disk les binaires pèsent 1 Ko ce ne devrait pas trop ralentir le jeu.
un petit RUN et ca plante lors de la phase de remplissage des tableaux de variables, un petit FRE(0) et malheureusement pas de assez de mémoire pour exécuter le jeu
Bon deuxième idée: exporté avec les données graphiques les descriptions des salles, ce qui nous feras gagner encore pas mal d'octets.
Modification de mon petit programme d"exportation, modification encore très légère du code originale et un petit RUN le jeu commence affiche la première image et je peux me déplacer sans problèmes YOUPI c'est réussi
Je n'ai pas testé le jeu intégralement mais comme je n'ai rien modifier dans la logique du jeu il ne devrait pas y avoir de problèmes pour le terminer
Y a t'il des volontaires pour tester le jeu jusqu’à la fin
Daniel tu peux le rajouter sur ton site et 1 de plus converti
http://www.6502man.com/Download/Thomson ... 5_DISK.zip
Pour les curieux voici le code d'exportation des données graphiques + descriptions des salles, je n'ai pratiquement rien modifié au code d'origine du jeu qui permet d'afficher les dessins
c'était un peu facile
Code : Tout sélectionner
5 COLOR1,0:CLS
10 CLEAR,&H6000:LOADM"CODE2.BIN"
20 AD=40064:J=0:TXT$="Version DISQUETTE"+CHR$(255):GOSUB 16400
6050 INPUT"NUMERO DE SALLE ",J
6055 ON J GOSUB 10000,10100,10200,10300,10400,10500,10600,10700,10800,10900,11000,11100,11200,11300,11400,11500,11600,11700,11800,11900,12000,12100,12200,12300,12400,12500,12600,12700,12800,12900
6100 GOSUB 16400:GOTO 6050
10000 TXT$="Vous etes sur le pont du navire.Au nord,c'est la mer a perte de vue":AD=28672:RETURN
10100 TXT$="Vous voici sur le lieu de detente du defunt equipage"+CHR$(10)+CHR$(13)+"Un escalier mene dans les entrailles du navire.":AD=28844:RETURN
10200 TXT$="Vous vous trouvez a l'arriere du navire Vous pouvez avoir acces a la mer":AD=29519:RETURN
10300 TXT$="Vous etes sur le pont":AD=29259:RETURN
10400 TXT$="Vous voici dans la salle d'acces aux chambres..":AD=29712:RETURN
10500 TXT$="Une chambre...Celle du capitaine"+CHR$(10)+CHR$(13)+"Il y a un ANNEAU sur le mur":AD=29977:RETURN
10600 TXT$="Voila la piece secrete du navire":AD=30271:RETURN
10700 AD=30481
10705 TXT$="Vous vous trouvez dans un couloir":RETURN
10800 AD=30708:GOTO 10705
10900 TXT$="Le nord de cette salle me parait suspect":AD=30856:RETURN
11000 TXT$="La chambre du mousse..":AD=31091:RETURN
11100 TXT$="Il y a un conduit d'arrivee d'oxygene Il est ecrit DANGER au nord":AD=31526:RETURN
11200 TXT$="Vous voici dans l'eau,bien equipe! Il y a une barriere de recifs":AD=31951:RETURN
11300 TXT$="Il y a une ile":AD=32486:RETURN
11400 TXT$="Il y a une grotte a l'ouest":AD=32809:RETURN
11500 TXT$="Vous etes en face d'une porte blindee":AD=33128:RETURN
11600 TXT$="Une ancienne grotte de la cite"+CHR$(10)+CHR$(13)+"Il y a une vieille caisse":AD=34089:RETURN
11700 TXT$="Voici l'entree de la cite ATLANTE":AD=33829:RETURN
11800 TXT$="Un couloir...":AD=33510:RETURN
11900 TXT$="Quel calme,ici!":AD=34972:RETURN
12000 AD=34462
12005 TXT$="Rien de special a dire":RETURN
12100 TXT$="Le nord est garde!":AD=35527:RETURN
12200 AD=35993:GOTO 12005
12300 TXT$="Un cul-de-sac!":AD=36344:RETURN
12400 TXT$="Voila la taniere de la pieuvre":AD=36742:RETURN
12500 TXT$="L'entree du sanctuaire!":AD=37276:RETURN
12600 TXT$="Il y a de l'air ici."+CHR$(10)+CHR$(13)+"Un gardien:JACQUES CHAZETTE garde l' entree du temple":AD=37802:RETURN
12700 TXT$="Un lieu de pelerinage..Une grotte eclairee en haut de la falaise":AD=38347:RETURN
12800 TXT$="La salle du CYCLOTRON qui peut vous offrir la liberte":AD=38916:RETURN
12900 TXT$="La vieille deesse atlante DALIDO chante pour vous":AD=39523:RETURN
13620 AD=40064
16400 DK=AD:CONSOLE 0,13,0:CLS:CONSOLE 13,24:LOCATE 0,24,0:GOSUB 17000:E=2
16500 GOSUB 16550:IF Y<112 THEN GOSUB 16560:LINE-(X,Y),E:GOTO 16575
16510 IF Y<230 THEN Y=Y-112:GOSUB 16560:PSET(X,Y),E:GOTO 16575
16520 IF Y=231 THEN GOSUB 16550:GOSUB 16560:BOXF(X1,Y1)-(X,Y),E:GOTO 16575
16530 IF Y=232 THEN GOSUB 16550:GOSUB 16560:BOX(X1,Y1)-(X,Y),E:GOTO 16575
16535 IF Y=233 THEN GOSUB 19000:GOSUB 18000:RETURN
16540 E=Y-234:IF E>15THEN E=E-23
16545 GOTO 16500
16550 Y=PEEK(AD):AD=AD+1:RETURN
16560 IF PEEK(AD+1)=250 THEN X=PEEK(AD)+256:AD=AD+2:RETURN
16570 X=PEEK(AD):AD=AD+1:RETURN
16575 X1=X:Y1=Y:GOTO 16500
17000 PSET(0,0),2:LINE-(319,0):LINE-(319,100):LINE-(0,100):LINE-(0,0):RETURN
18000 ' TRANSFERT DATAS TO DISK
18001 ' 1 FICHIER PAR SALLE
18010 K$=STR$(J):K$=MID$(K$,2,LEN(K$)-1):SAVEM K$,&H6D00,&H6D00+W,0:RETURN
18015 'DK=AD:PRINT DK :rem OPEN #1,STR$(J),INPUT
18020 'DW=PEEK(DK):IF DW=233 THEN PRINT DK :RETURN:rem PRINT #1,DW:CLOSE #1:RETURN ELSE DK=DK+1:GOTO 18020
19000 ' TRANSFERT TEXT TO RAM (après les données images)
19001 '
19010 W=AD-DK:FOR Z=0 TO W:POKE &H6D00+Z,PEEK(DK+Z):NEXT
19020 TXT$=TXT$+CHR$(255):FOR A=1 TO LEN(TXT$):POKE &H6D00+W+A,ASC(MID$(TXT$,A,1)):AD=AD+1:NEXT:W=W+A:RETURN