Le Trident de Neptune
Par Dominique Pessan.
|
Bonjour! je vous propose aujourd'hui, de réaliser le transfert de cassette à disquette du jeu "Le trident de Neptune". Comme les choses seraient simples, sans cette maudite page quatre ( n'est-ce pas Mr Spock ? ). Dans le cas du jeu "Orion" de Loriciels, que nous avons transféré la fois précédente, la page quatre n'était utilisée que pour les protections et pour charger les autres modules du jeu. La solution la plus simple était donc de la supprimer purement et simplement. Ici la page quatre est utilisée en cours de jeu, donc pas question de la supprimer. La solution que j'ai choisie, est de la charger en page cinq, puis de la transférer à sa place définitive juste avant de lancer le jeu. Faisons tout d'abord l'état des lieux. Le jeu est composé de six modules dont les adresses sont les suivantes:
1 - # 281 à # 2BF à supprimer .
8 - Tapez successivement 3 fois CLOAD" pour charger les 3 modules suivants ( Ne chargez pas le dernier )
Traitement du deuxième module: ( #F3D / # 4362 )
1 - POKE #140A,#10 : CALL # 13DF : Tapez PRINT HEX$( PEEK(#141F )) , vous devez obtenir #D8, si vous obtenez autre chose, c'est que vous vous êtes trompé, il ne vous reste qu'a recommencer . ( Depuis le début. ) 4 - POKE # 1428,#10 : CALL #1419 : POKE # 1428, #1A
Traitement du troisième module: ( #61A5/ #70E4 )
1 - POKE #140A,#10 : CALL # 13DF : Tapez PRINT HEX$( PEEK(#141F )) , vous devez obtenir # 86, si vous obtenez autre chose, c'est que vous vous êtes trompé, il ne vous reste qu'a recommencer . ( Depuis le début.)
6 - POKE # 1428,#10 : CALL #1419 : |
Traitement du quatrième module:(#752D / #7A58 )
1 -POKE #140A,#10 : CALL # 13DF : Tapez PRINT HEX$( PEEK(#141F )) , vous devez obtenir # E2, si vous obtenez autre chose, c'est que vous vous êtes trompé, il ne vous reste qu'a recommencer . ( Depuis le début .)
5 - POKE # 1428,#10 : CALL #1419 : Traitement du 5ème module:( #7CFD / # 9344 )
1 - POKE #140A,#10 : CALL # 13DF : Tapez PRINT HEX$( PEEK(#141F )) , vous devez obtenir # 9A, si vous obtenez autre chose, c'est que vous vous êtes trompé, il ne vous reste qu'a recommencer . ( Depuis le début.)
5 - POKE # 1428,#10 : CALL #1419 : Entrez maintenant la routine de transfert de la page quatre. Elle sera implantée en #600. Pour ceux qui ont un moniteur assembleur, voici le code désassemblé. 0600 A9 00 LDA #$00 P. basse adresses 0602 85 0C STA $0C Départ 0604 85 0E STA $0E Arrivée 0606 85 11 STA $11 Partie haute longueur 0608 A9 05 LDA #$05 Partie H Départ 060A 85 0D STA $0D dans $0D 060C A9 04 LDA #$04 Partie H Arrivée 060E 85 0F STA $0F dans $0F 0610 A9 FF LDA #$FF Partie basse longueur 0612 85 10 STA $10 dans $10 0614 20 C4 ED JSR $EDC4Appel MOVE 0617 60 RTS Fin du transfert Cette Partie réalise la mise à jour de TXTTAB (Début programme BASIC ) et effectue un RUN. 0618 A9 A9 LDA #$A9 Début BASIC en 061A 85 9A STA $9A $14A9 061C A9 14 LDA #$14 061E 85 9B STA $9B 0620 A0 00 LDY #$00 Implante code:RUN 00 0622 B9 2E 06 LDA $062E,Y 0625 91 E9 STA ($E9),Yà l'emplacement pointé 0627 C8 INY par TXTPTR 0628 C9 00 CMP #$00 062A D0 F6 BNE $0622 062C 60 RTS 062D EA NOP 062E 3A Code ASCII de : 062F 98 Token de RUN 0630 00 0 fin de commande. Pour ceux qui préfèrent le BASIC, voici un chargeur qui implantera le code en mémoire. SAVE"NEPT",A#700,E#9344 Rebootez l'Oric Entrez le court listing suivant 10 DATA A9,00,85,0C,85,0E,85,11,A9,05,85,0D Lancez le par RUN.puis Tapez NEPT |
Nous allons maintenant sauvegarder cette première partie de notre travail sur une disquette par:
SAVE"NEPT2",A #600,E #9344.
Traitement du sixième module: ( # 406 / # 49C )
1 - Rebooter l'Oric
2 - CLOAD"STOP
3 - CLOAD"NEPTUNE
4 - CLOAD"":CLOAD"":CLOAD""
5 - CALL #E76A:CALL#E4AC:DOKE#2AB,#59C:DOKE#2A9,#506:CALL#E4E0:CALL#E93D
6 - NEPT2
7 - POKE #1465, # 05
8 - POKE#1469,#60:CALL#145F:POKE#1469,#20
9 - POKE# 1465,#04
10 - DOKE #64, #509
11 - CALL #144F
Tapez PRINT HEX$( PEEK(#141F )) , vous devez obtenir # 0A, si vous obtenez autre chose, c'est que vous vous êtes trompé, il ne vous reste qu'a recommencer . ( Uniquement cette partie.)
12 - POKE # 1428,#10 : CALL #1419 : POKE # 1428, #1A
13 - POKE #140A,#10 : CALL # 13DF : POKE # 140A, #1A:POKE #14C9, #31
14 - DOKE #9C, # 435B
|
En principe, c'est terminé, vous pouvez vérifier en rebootant votre Oric et en entrant tout simplement NEPTUNE ... Vous constaterez au passage que toutes les protections ont disparu ( bien que cela n'aie pas été la but de la manoeuvre). Vous pouvez arrêter le jeu par un simple RESET et reprendre en tapant GOTO 3. -"D'accord, mais j'aimerais bien comprendre!" Qu'a-t'on fait exactement ? Chaque module était sauvegardé en mode AUTO sur la cassette et réalisait "en gros" les opérations suivantes
1 - JSR $13DF : mise a jour pointeurs BASIC 2 - Mise à jour d'une adresse en $64/$65 3 -JSR$144F :Calcul d'une somme de contrôle entre $1356 et $1356+$F6, or dans cette zone se trouvent deux protections : 1407 LDA#$01 1409 STA$ 1A et 1425 LDA#$01 1427 STA $ 1A Ces protections devant, bien sûr être présentes lors du calcul de la somme de contrôle, mais absentes lors des autres opérations, sous peine de blocage du système. D'où une certaine "jonglerie" sur les cases mémoire $140A et $1428. |
4 - Addition de cette somme de contrôle en $141F,puis, à l'adresse $1419, addition du contenu de $141F aux $F6 premiers octets à partir de l'adresse contenue dans $64/$65 ( D'ou le PEEK$141F et le DOKE $64 à chaque étape. )
Plus diverses petites choses comme par exemple: 1471 LDA #$31 1473 STA $14C9 qui modifie le listing BASIC de 3 GOTO 37000 en 3 GOTO 17000... Allez faire un tour 37000 pour voir : - )
Pour le point 5 du sixième module, j'ai trouvé l'astuce de chargement d'un programme à une adresse choisie, dans le MAG N° 29 de septembre 1992. ( Achetez la collection complète si vous ne l'avez pas, c'est une mine d'or ! )
Le transfert de la page 5 vers la page 4 utilise la routine MOVE comme préconisé dans le manuel de l'Oric d'André Chenière. La prochaine fois J'ai tenté le transfert du "Diamant de l'île maudite" C'est un cas différent des deux que nous venons d'aborder .Dans ce jeu, si la page 4 est utilisée pendant la partie, il n'est pas question de la laisser à sa place originelle, car on doit pouvoir a tout moment sauvegarder une partie sur disquette, la page quatre doit donc être disponible pour le DOS. Mais c'est une autre histoire... A bientôt .... |