Mastertronic to disk 1.0 * (c) Tom et Jerry of GPA - 05/2000 !
------------------------
Ce petit utilitaire va vous permettre de transferer facilement sur disquette
certains jeux K7 publies par Mastertronic. Son utilisation est relativement
simple et ne necessite pas de connaissance particuliere. Afin de ne pas vous
laisser sombrer betement dans le cote sombre de l'informatique (cracking...),
on va essayer de comprendre ce que l'on fait ! Si vous voulez aller plus loin,
les sources (tres courts !) des routines assembleur sont dans le fichier
MASTODSK.ASM.
1) Que peux-t'on transferer avec MastoDsk ?
----------------------------------------
Le programme permet de copier sur disquette les jeux dont le chargeur K7 a
les caracteristiques suivantes :
* Adresse de chargement en &A200
* Le chargeur n'occupe qu'un seul bloc.
* Mnemonique LD DE,&BF38 en &A267 (&11 &38 &BF)
A ma connaissance, seul l'editeur anglais Mastertronic a utilise ce type
de chargeur, a partir de 1987/1988, je pense...
Ce chargeur ne constitue pas a proprement parler une protection. Il permet
de charger des fichiers monobloc 'a la queue leu leu'. De fait, on peut
decomposer son fonctionnement comme suit :
- Chargement du header du fichier
- Recuperation des parametres du fichier (depart, longueur, execution)
- Chargement du fichier
- Execution du programme charge
- Si le programme 'rend la main', on recommence avec le fichier suivant.
Il est important de noter que tous les programmes charges sont forcement
executables, y compris la page de copyright de certains jeux et les
pages de presentation.
Meme s'il n'est pas complexe, il est interessant de bricoler ce chargeur
pour pouvoir transferer rapidement les jeux l'utilisant. Je ne comprends
d'ailleurs pas pourquoi a l'epoque ou je faisais des transferts a la pelle
(hum hum..), je n'avais pas programme un tel utilitaire !
2) Je suis nul en informatique mais j'ai des K7 Mastertronic a la maison !
-----------------------------------------------------------------------
Un petit exemple : on veux passer sur disquette le jeu 'Gregory looses his
clock', un petit jeu assez mignon finalement, et qui utilise le chargeur
K7 pour lequel MastoDsk a ete concu.
Important : Apres chaque chargement K7, MastoDsk arrete automatiquement le
magnetophone (cela evite d'avoir a repositionner la cassette sur le fichier
suivant).
Si vous n'avez pas de magnetophone avec un cordon informatique (3 cables)
ou un CPC 464, il va vous falloir arreter a la main le magnetophone apres
chaque chargement..
Si vous voulez repositionner la bande alors que le magnetophone est
'bloque' par le cpc, faites un CALL &BC6E.
1ere etape : Analyse de la cassette
-----------------------------------
a) Mettre la K7 dans le magnetophone (on suit ?)
b) Copier sur une disquette vierge le fichier MASTODSK.BAS
c) Lancer MASTODSK.BAS
d) Dans le menu, choisir l'option <1> Scan & Save K7 Loader
e) Appuyez sur la touche <Play> du lecteur de K7, puis sur une touche.
Attendre un peu...
f) Si le message "Mastertronic loader detected" s'affiche, c'est tout bon.
Appuyez sur une touche pour sauvegarder le loader : un fichier
MASTODSK.LOA sera cree.
Si le loader n'est pas le bon, le programme se plante ou affiche une
erreur de chargement ou une erreur memoire. Dommage !
2eme etape : Chargement des fichiers K7
---------------------------------------
a) Lancer MASTODSK.BAS
b) Dans le menu, choisir l'option <2> Save a K7 file to disk
c) Saisir le nom du fichier a enregistrer sur disquette. Il est fortement
conseille de donner une valeur sequentielle au dernier caractere du
fichier (nom ou extension) pour pouvoir ensuite se servir du generateur
de loader disquette (ex : GREGORY.1 pour le premier fichier, GREGORY.2
pour le deuxieme, etc... ). On pourrait pourquoi pas les appeler
GREGORY.CH1 et GREGORY.CH2 :-) ou bien GREGORY1 et GREGORY2.
d) Appuyer la touche <Play> du magnetophone puis sur une touche du clavier.
Le loader K7 fait son office (oh, les belles bandes multicolores dans le
Border).
e) A la fin du chargement, le magnetophone s'arrete, puis le fichier est
sauvegarde. Le cpc s'initialise. Un CAT permet de verifier la presence
du fichier sur la disquette. Ca marche !
f) On recommence l'operation a partir du point a) jusqu'a ce qu'il n'y ait
plus rien a charger...
Pour notre exemple, il y aura deux fichiers :
GREGORY.1 : la page de copyright compactee
GREGORY.2 : le jeu !
Bon, c'est bien gentil, tout ca, mais qu'est ce que je fais de ces fichiers ?
Pas de panique, le programme MASTLOAD.BAS vient a la rescousse. Si vous avez
bien nomme vos fichiers avec une extension sequentielle, il suffit de
modifier la variable FILELOAD$ (ligne 30) en donnant le nom du premier
fichier a charger sauvegarder le tout sous un nouveau nom.
Encore notre exemple : on charge MASTLOAD.BAS, on modifie la ligne 30 comme
suit :
30 FILELOAD$="GREGORY.1"
On sauvegarde le fichier sous le nom GREGORY.BAS, et hop, un jeu disquette !
3) Que fait exactement MastoDsk ?
------------------------------
Les fichiers sur K7 ne sont evidemment pas lisibles directement par
l'Amsdos. C'est pour cette raison qu'il nous faut utiliser le chargeur
Mastertronic a notre profit.
Le programme Basic se content simplement de detourner le loader. Au lieu
d'executer le programme qu'il a charge, on demande au cpc d'aller en
&BE86 faire les operations suivantes :
- recuperation des parametres du fichier charge en memoire (gentiment
laisse en clair par le chargeur...).
- initialisation du systeme disque
- sauvegarde du fichier.
- initialisation du cpc une fois que tout est ok.
C'est pas plus complique ce cela ! Evidemment, si le programme se compose
de plusieurs fichiers (au minimum la page Copyright et le jeu), il faudra
lancer autant de fois MastoDsk que necessaire (voir l'exemple plus loin).
MastoDsk a ete teste avec succes sur les jeux suivants :
Gregory looses his clock
Jungle Warfare
Octoplex
Reveal
Super stock car
D'autres softs ne 'passent' pas comme Super Nudge 2000, Enterprise, T-bird
ou Dynamix, le systeme de chargement n'etant pas le meme.
4) Les limites de MastoDsk...
--------------------------
Si le programme K7 est trop gros (utilise la memoire au dessus de &A67B),
la sauvegarde du fichier sur disquette plantera. En bricolant un peu le
programme assembleur de MastoDsk, il est neanmoins possible de sauvegarder
cette zone (recopie en memoire video puis sauvegarde par exemple), mais il
faut deja avoir un minimum de notions en assembleur pour pouvoir ensuite
faire un chargeur disquette pour le jeu.
Si le programme K7 utilise un systeme de chargement de niveaux, MastoDsk
ne peut pas les recuperer. Pourquoi ? Parce que ces niveaux ne sont pas
charges avec le loader Mastertronic ! La aussi, ca se bricole, mais cela
devient complique...
Si la zone memoire &BE80-&BEDx est utilise par le programme charge, ca
plante, car la routine de sauvegarde est logee a cet endroit (emcore
jamais vu sur les cassettes transferees... ).
NOTICE TEXTE n° 2 (6.18 Ko)
Mastertronic to disk 1.0 * (c) Tom et Jerry of GPA - 05/2000 !
------------------------
Like many 'budget' games have been sold in U.K, I have decided to realize an
international release of the MastoDsk notice. I suppose it can be more
useful for you than for french guys... Enjoy, European cpc user !
This tiny utility allows you to copy onto disk some K7 games published
by Mastertronic in the early nighneteens. It is quite friendly to use and
doesn't need any knowledge in machine language. If you want to understand how
MastoDsk proceeds, you can edit the source files MASTODSK.ASM and MASTLOAD.ASM.
1) What kind of software MastoDsk transfers ?
------------------------------------------
The program can copy onto disk games whose k7 loader gets these typical
features...
* file loading adress in &A200
* file size is ONLY one block
* Mnemonic LD DE,&BF38 in &A267 (&11 &38 &BF)
As I know, only Mastertronic used to sell games with this loader (but
some games from this editor have different loaders, grrr... ).
This piece of code cannot be considered like a real protection system. It
just loads files in indian file (of course, not Amsdos files !). We can
explain its logic like this :
- Load header's file
- Get file parameters (start, length, exec adress)
- Load file
- Exec file in memory
- If the file is not the main program, we go again !
Note that ALL loaded programs are OBLIGATORY executable ones, even the
"copyright advert" in a few games and the intro screens.
Well, nothing really tricky... So, why making MastoDsk ? Because it is
easier and faster to transfer games with it, even if you possess a Hacker !
2) So I am not a bug killer on cpc and I get some Mastertronic games !
-------------------------------------------------------------------
Okay, so you want some more explanations ? Let's try to copy the famous (?)
'Gregory looses his clock' game.
Important : Each time a K7 file is loaded by MastoDsk, it automaticaly
stops the tape recorder (no need to push <Stop> key). To 'unlock' the tape
under Basic if you, need it, type CALL &BC6E then <RETURN>.
If you don't own a cpc 464 or a tape recorder with a 'remote' plug, you
must manually stop the tape each time a file is fitted in memory...
1st step : cassette analysis
----------------------------
a) Put the cassette in the tape recorder (still there ? :-))
b) Copy file MASTODSK.BAS on a blank diskette
c) Start MASTODSK.BAS
d) Choose option <1> Copy a K7 file to disk
e) Push <Play> key on the tape recorder, then press a keyboard key.
Wait and see...
f) If the cpc displays a message "Mastertronic loader detected", you can use
MastoDsk to copy the game onto disk !
Press a key to save the cassette loader : MASTODSK.LOA file will be
created. Reset the cpc.
If the cassette loader is not MASTODSK compatible, there will be a
loading or a memory error.
2nd step : load cassette files
------------------------------
a) Start MASTODSK.BAS
b) Choose option <2> Load and save file
c) Type in filename to create on the diskette. You must give a name whose
last character is 'ASCII sequential' (ex : GREGORY.1 for the first file,
GREGORY.2 for the second one). You also could name them GREGORY.CH1 and
GREGORY.CH2 :-) or GREGORY1 and GREGORY2.
d) Push <Play> key on the tape recorder then press key...
e) At the end of the process, the tape stops. Then, the file is saved and
the cpc resets. If you look at the diskette directory (CAT command !), you
might discover a new file. Oh my god, it is really amazing !
f) Repeat the second step until there is nothing to load on the cassette..
Let's consider our little exemple. At the end of the transfer, there will
be two files on the diskette :
GREGORY.1 : copyright advert
GREGORY.2 : main game !
Fine.. What can I do with theses files, if I don't have any disk loader...
Don't panic, everything is under control... If you have named the right way
these files, you just have to put in memory MASTLOAD.BAS file. Edit the line
30 and put in FILENAME$ the name of the first file to load. Then, save the new
Basic loader !
Our exemple again : we load in memory MASTLOAD.BAS, we update ligne 30 :
30 FILENAME$="GREGORY.1"
We save the file with the name GREGORY.BAS. Done !
3) How MastoDsk can fool the loader ?
----------------------------------
Files stored on the cassette cannot be read directly by Amsdos. So, we
use the Mastertronic loader to do this boring job ! MastoDsk just patches
it so that, at the end of the loading, your cpc jumps in &BE86 to a save
routine. This piece of code to the following operations :
- read file parameters (stored in memory by the Mastertronic loader)
- init disk system
- save file
- resets cpc
Quite simple, isn't it ? Of course, if the original game has several files,
you have to repeat this operation as soon as there is nothing to load.
MastoDsk has been succesfully tested with these games :
Gregory looses his clock
Jungle Warfare
Octoplex
Reveal
Super stock car
Unfortunately, it can't transfer Super Nudge 2000, Enterprise, T-bird,
Rugby manager or Dynamix. Why ? Their loaders are not the good one...
4) MastoDsk limits...
------------------
If the main program on the cassette needs too much memory (upper &A67B),
the save routine will crash. If you deal with assembler, you can modify it.
A good technic is to save all the cpc memory using the video memory as
temporary buffer.
If the game uses file levels, MastoDsk should not be able to copy them onto
disk. Why ? Just because theses files are not loaded with the Mastertronic
loader, games have their own routines...
NOTICE TEXTE n° 3 (2.17 Ko)
; Mastertronic to file 1.0 * Diskfile loader (c) T&J 05/2000
ORG &BE80
NOLIST
WRITE "MASTLOAD.BIN"
buffer_load equ &C000
; Amsdos vectors...
open_file equ &BC77
load_file equ &BC83
closein_file equ &BC7A
; (buffer_load + index_exec) = exec adress of a file !
index_exec equ &A9
filelength db &0
filename db "012345678.123"
main LD HL,filename
LD A,(filelength)
LD B,A
LD DE,buffer_load
CALL open_file
LD BC,index_exec
ADD HL,BC
LD C,(HL)
INC HL
LD B,(HL)
PUSH BC
POP HL
LD (save_ex+1),HL
EX DE,HL
CALL load_file
CALL closein_file
save_ex CALL &0000 ; exec file in memory
CALL inc_nam
JR main
; INC last character of the filename
inc_nam LD HL,filename
LD A,(filelength)
DEC A
ADD A,L
LD L,A
INC (HL)
RET
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Save Mastertronic loader on disk
; T&J of GPA (c) 05/2000
ORG &BE80
NOLIST
WRITE "MASTODSK.BIN"
filename_length equ &C
; usefull adresses of the Mastertronic loader
loader_start equ &BF5D
loader_length equ &BF5F
loader_exec equ &BF61
; Amsdos vectors
init_disk equ &BCCE
openout_file equ &BC8C
write_file equ &BC98
closeout_file equ &BC8F
; File datas for saving...
exec defw &0000
start defw &0000
length defw &0000
main LD HL,(loader_exec)
LD (exec),HL
LD HL,(loader_start)
LD (start),HL
LD HL,(loader_length)
LD (length),HL
inidisk LD SP,&C000
LD HL,&ABFF
LD DE,&40
LD C,&7
CALL init_disk
LD HL,filename
LD DE,&C000
LD B,filename_length
CALL openout_file
LD HL,(length)
PUSH HL
POP DE
LD HL,(exec)
PUSH HL
POP BC
LD HL,(start)
LD A,&2 ; binary file
CALL write_file
CALL closeout_file
RST &0
filename db "12345678.123",00