ZX81 France, les fichiers...
Modérateur : XavierSnp
ZX81 France, les fichiers...
Bonjour à tous,
Ce fil est dédié aux échanges de fichiers du groupe Facebook dédié au ZX81:
Merci de bien vouloir vous enregistrer, et de commenter brièvement ou abondamment, vos fichiers déposés.
Le contenu des fichiers 'P' ou Zip devront respecter l'esprit de ce forum...
Merci à tous.
Nota:
- cliquez sur [répondre] pour ajouter vos contributions.
- En cas de modification ou suppression d'un de vos message, contactez-moi en MP.
Xavier / [XavSnap]
Nota:
L'hébergement sur ce forum étant limité à 500 ko, me contacter pour un hébergement sur Zx81.Ordi5 pour les fichiers plus lourds (PDF/Zips).
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Re: ZX81 France, les fichiers...
Salut,
Le ficher image de "Chevalier Arthur" de M. Bouat.
Amusez-vous bien...
Le ficher image de "Chevalier Arthur" de M. Bouat.
Amusez-vous bien...
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Re: ZX81 France, les fichiers...
Bon package il est bien complet
Re: ZX81 France, les fichiers...
Modifié en dernier par jsm le 20-06-2018 22:51, modifié 1 fois.
Re: ZX81 France, les fichiers...
Merci Jean-Stéphane.
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Re: ZX81 France, les fichiers...
Rigel
touches :
R pour radar longue et courte portée
- pour tirer (bon courage)
S pour construire une base
0 check list
5,6,7,8 pour se déplacer
Source :
touches :
R pour radar longue et courte portée
- pour tirer (bon courage)
S pour construire une base
0 check list
5,6,7,8 pour se déplacer
Source :
Re: ZX81 France, les fichiers...
Banquise
C'est le jeu avec lequel j'ai usé le clavier de mon ZX81 quand j'avais 12 ans ! Je l'adorais et il m'a donné beaucoup de mal pour le récupérer. Ce n'est qu'une fois sauvé que nous avons trouvé qu'il venait du magazine 'Soft & Micro' de novembre 1984.
(la jaquette n'existe pas, c'est un faux de ma part)
extrait de Soft & Micro source :
C'est le jeu avec lequel j'ai usé le clavier de mon ZX81 quand j'avais 12 ans ! Je l'adorais et il m'a donné beaucoup de mal pour le récupérer. Ce n'est qu'une fois sauvé que nous avons trouvé qu'il venait du magazine 'Soft & Micro' de novembre 1984.
(la jaquette n'existe pas, c'est un faux de ma part)
extrait de Soft & Micro source :
Modifié en dernier par jsm le 20-06-2018 23:29, modifié 2 fois.
Re: ZX81 France, les fichiers...
de rien, il faut amorcer la pompe !XavierSnp a écrit :Merci Jean-Stéphane.
Par contre, la taille des fichiers autorisés ici est un peu faible si l'on veut mettre des PDF.
Re: ZX81 France, les fichiers...
Salut,
Version d' "Argolath" non officielle modifiée.
C'est en effet, un programme hybride Basic/Assembleur qui accélère l'affichage du jeu.
Il est donné comme exemple, mais ne doit pas faire ombrage à l'original.
Ce n'est pas une mise à jour, ni une version officielle, mais une version altérative de XavSnap.
Cela pour éviter que cette version ne soit prise pour une version originale, commercialisée par Loriciels.
Version d' "Argolath" non officielle modifiée.
C'est en effet, un programme hybride Basic/Assembleur qui accélère l'affichage du jeu.
Il est donné comme exemple, mais ne doit pas faire ombrage à l'original.
Ce n'est pas une mise à jour, ni une version officielle, mais une version altérative de XavSnap.
Cela pour éviter que cette version ne soit prise pour une version originale, commercialisée par Loriciels.
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Re: ZX81 France, les fichiers...
Il y aura toujours une solution pour l'hébergement de fichiers "lourds"...jsm a écrit :Par contre, la taille des fichiers autorisés ici est un peu faible si l'on veut mettre des PDF.
Un espace peut-être créé sur la page "zx81.ordi5.free.fr".
Mais, il est toujours possible de diffuser les PDF, en fichiers 'image jpg'.
Pour les listings, je vous propose de me les envoyer à mon adresse mail, pour les uploader sur ordi5.
Un lien sera créé sur ce forum, par la suite.
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Re: ZX81 France, les fichiers...
Juste une chose au sujet des PDF,
ORDI-5 et Echos Sinclair ont été mis en ligne sur le site:
Certains ne sont pas consultable directement, il faut envoyer les JPG au site, car les contributions ont été envoyées en PDF et non en images JPG séparées.
Je vais extraire les JPG pour "Fredo_L", afin qu'elle soit visible pour les visiteurs, et que des liens puissent être disponibles...
[EDIT] C'est fait, les "Echos Sinclair" seront visualisable prochainement...
Pour les livres, c'est ici : http://zx81.ordi5.free.fr/others/
Bonne lecture !
ORDI-5 et Echos Sinclair ont été mis en ligne sur le site:
Certains ne sont pas consultable directement, il faut envoyer les JPG au site, car les contributions ont été envoyées en PDF et non en images JPG séparées.
Je vais extraire les JPG pour "Fredo_L", afin qu'elle soit visible pour les visiteurs, et que des liens puissent être disponibles...
[EDIT] C'est fait, les "Echos Sinclair" seront visualisable prochainement...
Pour les livres, c'est ici : http://zx81.ordi5.free.fr/others/
Bonne lecture !
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Comment Dumper une ROM...
Salut,
Pour dumper une ROM matérielle, il suffit de créer une variable A$ et de la remplir avec le contenu binaire de cette ROM.
Tapez ce petit programme :
Puis un SAVE pour l'enregistrer sur une K7.
Extraction du fichier "P", et isolement du binaire de A$ avec un éditeur. Puis pourra être chargée dans un émulateur.
Partie assembleur:
Pour dumper une ROM matérielle, il suffit de créer une variable A$ et de la remplir avec le contenu binaire de cette ROM.
Tapez ce petit programme :
Code : Tout sélectionner
1 REM [DEC:\
42, 18, 64,235, 33, 0, 32, 1,\
0, 16,237,176,195, 91, 0,201\
]
2 DIM A$(4096)
3 LET A$(1)=CHR$ USR 16514
Extraction du fichier "P", et isolement du binaire de A$ avec un éditeur. Puis pourra être chargée dans un émulateur.
Partie assembleur:
Code : Tout sélectionner
EXTERR equ $005B ; Basic Break function ! Ignore line instructions.
DEST .equ $4012 ; Basic Vars pointer. (Last variable used)
ORG $4082 ; [@16514/@h4082]
LD HL,(DEST) ; Vars A$(1) location
EX DE,HL ; DE=HL
LD HL,$2000 ; ROM location
LD BC,4096 ; ROM lenght
LDIR ; Copy bytes HL TO DE loc.
JP EXTERR ; Exit and ignore de Basic line ! a$(1) is not changed.
RET
.end
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
animation sur ZX81...
Salut,
Voici les sources assembleur de la démo pour l'affichage de blocs sur le ZX81:
Inclus TASM, les symboles en mémoire du ZX81 (accès ROM) et le code réécrit de l'affichage de bloc issus du programme "Chevalier Arthur" de Loriciels.
Header des blocs:
Offset D_file: + 01 00 ; début d'écran. (deux octets)
Nombre de ligne : XX ; (un octet)
Nombre de caractère sur une ligne: XX ; (un octet)
: XX XX XX XX ... ; Caractères à afficher.
Voici les sources assembleur de la démo pour l'affichage de blocs sur le ZX81:
Inclus TASM, les symboles en mémoire du ZX81 (accès ROM) et le code réécrit de l'affichage de bloc issus du programme "Chevalier Arthur" de Loriciels.
Header des blocs:
Offset D_file: + 01 00 ; début d'écran. (deux octets)
Nombre de ligne : XX ; (un octet)
Nombre de caractère sur une ligne: XX ; (un octet)
: XX XX XX XX ... ; Caractères à afficher.
- Fichiers joints
-
- Anim8images.zip
- Anim 8 images ZX81
- (156.04 Kio) Téléchargé 278 fois
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Tuto ASM: Scrolling horizontal d'un écran très large
Salut à tous,
En attendant, les excellentes nouvelles au sujet de la préservation des jeux d'antan... Je vous propose de vous initier au Z80, avec des exemples simples sous forme de démos...pour vous donner l'envie de faire vrombir votre Zx81 ou votre émulateur.
En attendant, les excellentes nouvelles au sujet de la préservation des jeux d'antan... Je vous propose de vous initier au Z80, avec des exemples simples sous forme de démos...pour vous donner l'envie de faire vrombir votre Zx81 ou votre émulateur.
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Petits trucs...
Salut,
En recherchant des exemples de routines ASM pour le ZX81, j'ai trouvé deux petits programmes inutilement indispensable!
Deux fond d'écran pour le masquage du bureau !
L'un est noir en plein écran (on en sort avec Alt+F4).
L'autre est une image JPG que l'on peut placer sous une fenêtre.
Donc sur cet exemple, le fond noir et le masque image. Dlls Visual-Basic sur dskcenter.free.fr (à installer qu'un fois)
Ca évite de voir tous les bouts d'icones honteuses comme "Word", "excel" ou "commande DOS" que vous collectionnez avec amour!
En recherchant des exemples de routines ASM pour le ZX81, j'ai trouvé deux petits programmes inutilement indispensable!
Deux fond d'écran pour le masquage du bureau !
L'un est noir en plein écran (on en sort avec Alt+F4).
L'autre est une image JPG que l'on peut placer sous une fenêtre.
Donc sur cet exemple, le fond noir et le masque image. Dlls Visual-Basic sur dskcenter.free.fr (à installer qu'un fois)
Ca évite de voir tous les bouts d'icones honteuses comme "Word", "excel" ou "commande DOS" que vous collectionnez avec amour!
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Tuto pour le désassemblage du Z80...
Salut à tous,
Avant de désassembler, il faut garder à l'esprit qu'il peut y avoir plusieurs types d'informations dans un programme assembleur Z80.
Les mnémoniques du programme, constituées par une série de codes en octets spécifiques au processeur, les informations de saut, d'adressage et de donnée liées aux fonctions appelées.
Un octet (ou plus) aiguille vers une fonction bien spécifique, un peu comme un ascenseur et ses étages.
Le code 00 donne l'ordre du NOP : No Operand.
Le 01 donne un ordre LD (Load), et charge BC avec la valeur qui suit... LD BC= +2 octets.
l'incrémentation des pas (le PC) du processeur est automatique et dépend de la fonction.
Pour un NOP, c'est un décalage de 1 octet, pour lire la fonction suivante.
Pour un LD BC,xx c'est 3 pas, car BC est un registre dit "Paire" en 2 octets, la commande 1 octet.
Une petite particularité pour la lecture des données, c'est que ces données sont archivées dans l'ordre inverse de la lecture naturelle, donc si BC=00AA en hexadécimale, il est noté 01(fonction LD): AA (C) : 00 (B)
01,AA,00 sera donc désassemblé: LD BC,$00AA
liste des mnémoniques.
Dans un monde idéal, un programme assembleur serai constitué uniquement de fonctions et données de registre.
Mais, il faut parfois y stocker des textes, des données temporaires et des informations rémanentes.
Pour le désassembler, tout est code, et même le texte sera traité comme des instructions à exécuter.
Il faut donc différencier données, texte et mnémonique d’exécution.
Pour cela, nous avons la méthode visuelle et la méthode de repérage des valeurs numériques.
Prenons un exemple sur VB81, avec un programme assembleur.
Il faut avant tout marger le programme assembleur, généralement inclus dans une REM, avec une adresse basse et une adresse haute... comprenant l'ensemble du code avec les datas.
Un clique permet de sélectionner une ligne REM en particulier, mais, parfois le mode "user" est nécessaire pour inclure plusieurs lignes.
Les marges peuvent être fixées manuellement en haut de la fenêtre de désassemblage.
Seule la partie margée sera désassemblée lors de l'exportation des codes sources.
Si la notation en Hexadécimal vous pose problème, cliquez sur l'entête de la colonne des adresses pour changer cette notation.... même chose pour les valeurs d'adresse (Hexa, décimal et texte) .
Avec la fenêtre de visualisation binaire, vérifiez l'adresse des données texte et passez en mode texte dans la fenêtre de désassemblage (clique gauche sur l'entête de la colonne).
Afin de différentier les données non actives (DATA et TEXTE), il suffit, avec un clique à droit, de donner la nature d'une zone... ou d'une adresse... puis avec l'appuie de "Shift" après le clique droit... le curseur change et un second clique droit remplit la zone entre la première et la seconde adresse, avec l'info de donnée de la première adresse.
Nous avons donc une option DATA qui réserve la place à l'octet, du texte en mode ZX81, du texte en ASCII et un traitement en OP. Code langage machine (par défaut).
Le choix de ces informations est purement cosmétique et permettra au désassembleur embarqué du VB81, de modifier la notation des informations et de ne pas désassembler certains codes en DATA (partie en Basic entre les lignes REMs).
En .db "A","B","C","D","E","F" pour le texte.
En .db $01,$02,$03,$04,$05 pour les datas et le reste sera en Op. codes.
Pour l'exportation, c'est simple (!?!).
Dans "Datas type", il est possible de sauvegarder les informations de désassemblage dans un fichier ".arr", afin de les retrouver plus tard avec le "LOAD".
Les carrés bleus avec la flèche permettent un "Copier" dans le presse-papier... en mode texte (plus rapide, pas de sauvegarde!).
Le bouton standard, lui, permet la sauvegarde du fichier en mode texte.
Le résultat vous donnera un code source avec labels d'appels, de sauts, de datas et les caractères ZX directement exploitables dans TASM.
Le désassemblage fonctionne pour les CODES Spectrum, CPC, MSX ... mais, certaines informations spécifiques aux ZX81s pourront être mal interprétés... comme les IO, les adresses des variables du basic entre 4000-4080. etc...
Les 64K sont utilisables, mais dans ce cas, il faudra bloquer l'émulateur, pour éviter le plantage (émulation du code implanté).
Pour l’implantation binaire, c'est le carré gris avec une flèche rouge... mais attention, pour éviter l'écrasement des lignes REMs sur ZX81, l'émulateur fait un remplissage du binaire sur la partie bornée que vous avez définie à l'avance. Donc, si l'éditeur est de $4000 à $4100... le code implanté sera de $100 octets... et pas un de plus!
Il faut donc se mettre en "USER" pour définir une borne haute plus élevée en cas de débordement, en n'oubliant pas de "rafraichir" la zone définie.
Amusez-vous bien.
Xav.
Avant de désassembler, il faut garder à l'esprit qu'il peut y avoir plusieurs types d'informations dans un programme assembleur Z80.
Les mnémoniques du programme, constituées par une série de codes en octets spécifiques au processeur, les informations de saut, d'adressage et de donnée liées aux fonctions appelées.
Un octet (ou plus) aiguille vers une fonction bien spécifique, un peu comme un ascenseur et ses étages.
Le code 00 donne l'ordre du NOP : No Operand.
Le 01 donne un ordre LD (Load), et charge BC avec la valeur qui suit... LD BC= +2 octets.
l'incrémentation des pas (le PC) du processeur est automatique et dépend de la fonction.
Pour un NOP, c'est un décalage de 1 octet, pour lire la fonction suivante.
Pour un LD BC,xx c'est 3 pas, car BC est un registre dit "Paire" en 2 octets, la commande 1 octet.
Une petite particularité pour la lecture des données, c'est que ces données sont archivées dans l'ordre inverse de la lecture naturelle, donc si BC=00AA en hexadécimale, il est noté 01(fonction LD): AA (C) : 00 (B)
01,AA,00 sera donc désassemblé: LD BC,$00AA
liste des mnémoniques.
Dans un monde idéal, un programme assembleur serai constitué uniquement de fonctions et données de registre.
Mais, il faut parfois y stocker des textes, des données temporaires et des informations rémanentes.
Pour le désassembler, tout est code, et même le texte sera traité comme des instructions à exécuter.
Il faut donc différencier données, texte et mnémonique d’exécution.
Pour cela, nous avons la méthode visuelle et la méthode de repérage des valeurs numériques.
Prenons un exemple sur VB81, avec un programme assembleur.
Il faut avant tout marger le programme assembleur, généralement inclus dans une REM, avec une adresse basse et une adresse haute... comprenant l'ensemble du code avec les datas.
Un clique permet de sélectionner une ligne REM en particulier, mais, parfois le mode "user" est nécessaire pour inclure plusieurs lignes.
Les marges peuvent être fixées manuellement en haut de la fenêtre de désassemblage.
Seule la partie margée sera désassemblée lors de l'exportation des codes sources.
Si la notation en Hexadécimal vous pose problème, cliquez sur l'entête de la colonne des adresses pour changer cette notation.... même chose pour les valeurs d'adresse (Hexa, décimal et texte) .
Avec la fenêtre de visualisation binaire, vérifiez l'adresse des données texte et passez en mode texte dans la fenêtre de désassemblage (clique gauche sur l'entête de la colonne).
Afin de différentier les données non actives (DATA et TEXTE), il suffit, avec un clique à droit, de donner la nature d'une zone... ou d'une adresse... puis avec l'appuie de "Shift" après le clique droit... le curseur change et un second clique droit remplit la zone entre la première et la seconde adresse, avec l'info de donnée de la première adresse.
Nous avons donc une option DATA qui réserve la place à l'octet, du texte en mode ZX81, du texte en ASCII et un traitement en OP. Code langage machine (par défaut).
Le choix de ces informations est purement cosmétique et permettra au désassembleur embarqué du VB81, de modifier la notation des informations et de ne pas désassembler certains codes en DATA (partie en Basic entre les lignes REMs).
En .db "A","B","C","D","E","F" pour le texte.
En .db $01,$02,$03,$04,$05 pour les datas et le reste sera en Op. codes.
Pour l'exportation, c'est simple (!?!).
Dans "Datas type", il est possible de sauvegarder les informations de désassemblage dans un fichier ".arr", afin de les retrouver plus tard avec le "LOAD".
Les carrés bleus avec la flèche permettent un "Copier" dans le presse-papier... en mode texte (plus rapide, pas de sauvegarde!).
Le bouton standard, lui, permet la sauvegarde du fichier en mode texte.
Le résultat vous donnera un code source avec labels d'appels, de sauts, de datas et les caractères ZX directement exploitables dans TASM.
Le désassemblage fonctionne pour les CODES Spectrum, CPC, MSX ... mais, certaines informations spécifiques aux ZX81s pourront être mal interprétés... comme les IO, les adresses des variables du basic entre 4000-4080. etc...
Les 64K sont utilisables, mais dans ce cas, il faudra bloquer l'émulateur, pour éviter le plantage (émulation du code implanté).
Pour l’implantation binaire, c'est le carré gris avec une flèche rouge... mais attention, pour éviter l'écrasement des lignes REMs sur ZX81, l'émulateur fait un remplissage du binaire sur la partie bornée que vous avez définie à l'avance. Donc, si l'éditeur est de $4000 à $4100... le code implanté sera de $100 octets... et pas un de plus!
Il faut donc se mettre en "USER" pour définir une borne haute plus élevée en cas de débordement, en n'oubliant pas de "rafraichir" la zone définie.
Amusez-vous bien.
Xav.
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Avis aux lecteurs...
Vu dans l'Echos Sinclair n°10 [dernier numéro]
(Ce qui clôtura la publication du journal, car tout le monde n'oubliait plus de le demander!)
NDL(R): Méthode qui je n'approuve pas du tout, car l'équipe semblait "vivre" des contributions gratuites, et de la générosité des "généreux donateurs"...
Même chose pour l'Hebdogiciel, pour qui les auteurs devaient passer après la rédaction, l'imprimeur et les beuveries pour fêter les augmentations de salaires. En règle générale, la rémunération des auteurs n'était pas une priorité... et semblait être une économie non substantielle pour les "juges" distribuant l'honneur d'être publié.
(Ce qui clôtura la publication du journal, car tout le monde n'oubliait plus de le demander!)
NDL(R): Méthode qui je n'approuve pas du tout, car l'équipe semblait "vivre" des contributions gratuites, et de la générosité des "généreux donateurs"...
Même chose pour l'Hebdogiciel, pour qui les auteurs devaient passer après la rédaction, l'imprimeur et les beuveries pour fêter les augmentations de salaires. En règle générale, la rémunération des auteurs n'était pas une priorité... et semblait être une économie non substantielle pour les "juges" distribuant l'honneur d'être publié.
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Gestion des blocs graphiques...
Salut à tous,
Cette démo est basée sur l'utilisation et la gestion de blocs graphiques relocalisable sur la fenêtre graphique de l'écran.
Il y a deux parties:
- Une partie en assembleur, pour l'affichage du bloc.
- Une partie donnée qui héberge le décalage du bloc,plus sa taille en hauteur et largeur:
Le type de stockage est le même que celui du jeu "chevalier Arthur" de M. Bouat.
;;Graphisme.
; x1 : Byte 2 -\_ D_FILE OFFSET: X2*256+X1
; X2 : Byte 1 -/ 33*lignes+colonnes
; X3 : RAWs (lignes à afficher)
; X4 : LENGHT PER RAW (largueur du bloc)
Cette nouvelle version du moteur d'affichage, permet l'affichage des blocs, en position fixe, en position relative et en miroir.
Position fixe: routine [BDisplay]
Position relocalisée: routine [XDisplay] D_File + valeur à l'adresse (GiveOFF) 2 octets.
Position fixe miroir: routine [MDisplay]
Position relocalisée: routine [XMDisplay]
Nous pouvons donc afficher des blocs graphiques de 1x1 à 32x24.
... ou des blocs de texte.
Un seul impératif est demandé: ne pas choisir un offset demandant un affichage à cheval avec la dernière line de l'écran.
Le moteur d'affichage ne contrôle effectivement pas le remplacement du caractère de fin de ligne [$76], et le supprimera... désorganisant définitivement l'affichage de la machine.
L'offset d'affichage est donc de (colonnex33)-largeur du bloc-1.
Une fois le D_file (mémoire écran) désorganisé, vous serez obligé de faire un RESET pour récupérer un affichage exploitable en BASIC/ASM.
Les fonctions RAND USR [XDisplay] et RND USR [MDisplay] sont directement exploitables en BASIC, mais en position relative, il faut poker la valeur du décalage à l'adresse [GiveOFF] dépendant du programme ASM compilé.
LET X=312 [$01$38]
POKE [GiveOFF],X-INT(X/256)*256 (valeur de l'octet faible)>>>[$38]
POKE [GiveOFF+1],INT(X/256) (valeur de l'octet fort)>>>[$01]
Puis, pointer sur une routine d'affichage [XDisplay] ....
Voici une petite démo en assembleur...
Cette démo est basée sur l'utilisation et la gestion de blocs graphiques relocalisable sur la fenêtre graphique de l'écran.
Il y a deux parties:
- Une partie en assembleur, pour l'affichage du bloc.
- Une partie donnée qui héberge le décalage du bloc,plus sa taille en hauteur et largeur:
Le type de stockage est le même que celui du jeu "chevalier Arthur" de M. Bouat.
;;Graphisme.
; x1 : Byte 2 -\_ D_FILE OFFSET: X2*256+X1
; X2 : Byte 1 -/ 33*lignes+colonnes
; X3 : RAWs (lignes à afficher)
; X4 : LENGHT PER RAW (largueur du bloc)
Cette nouvelle version du moteur d'affichage, permet l'affichage des blocs, en position fixe, en position relative et en miroir.
Position fixe: routine [BDisplay]
Position relocalisée: routine [XDisplay] D_File + valeur à l'adresse (GiveOFF) 2 octets.
Position fixe miroir: routine [MDisplay]
Position relocalisée: routine [XMDisplay]
Nous pouvons donc afficher des blocs graphiques de 1x1 à 32x24.
... ou des blocs de texte.
Un seul impératif est demandé: ne pas choisir un offset demandant un affichage à cheval avec la dernière line de l'écran.
Le moteur d'affichage ne contrôle effectivement pas le remplacement du caractère de fin de ligne [$76], et le supprimera... désorganisant définitivement l'affichage de la machine.
L'offset d'affichage est donc de (colonnex33)-largeur du bloc-1.
Une fois le D_file (mémoire écran) désorganisé, vous serez obligé de faire un RESET pour récupérer un affichage exploitable en BASIC/ASM.
Les fonctions RAND USR [XDisplay] et RND USR [MDisplay] sont directement exploitables en BASIC, mais en position relative, il faut poker la valeur du décalage à l'adresse [GiveOFF] dépendant du programme ASM compilé.
LET X=312 [$01$38]
POKE [GiveOFF],X-INT(X/256)*256 (valeur de l'octet faible)>>>[$38]
POKE [GiveOFF+1],INT(X/256) (valeur de l'octet fort)>>>[$01]
Puis, pointer sur une routine d'affichage [XDisplay] ....
Voici une petite démo en assembleur...
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Créez vos blocs graphiques...
Salut à tous,
Pour faire suite au poste précédent, voici la méthode la plus simple pour exporter un bloc de la mémoire écran du ZX81.
A l'aide de vb81, dessiner un bloc (Tools>EasyDraw) directement sur l'écran d'accueil.
Ouvrir la fenêtre de désassemblage, puis callez vous sur le début du D_File (après le basic ou en l'absence de programmes, il se trouve en $407D), puis trouvez l'adresse de fin de bloc pour mettre ces données en 'DATA'.
Sélectionnez le bouton "copier dans le presse papier" de la fonction Text>TASM.
Puis, copiez le tout dans un nouveau fichier.
Il suffira d'effacer les $76 (retour chariot) et les $00 (espaces) en trop.
Amusez-vous bien...
Pour faire suite au poste précédent, voici la méthode la plus simple pour exporter un bloc de la mémoire écran du ZX81.
A l'aide de vb81, dessiner un bloc (Tools>EasyDraw) directement sur l'écran d'accueil.
Ouvrir la fenêtre de désassemblage, puis callez vous sur le début du D_File (après le basic ou en l'absence de programmes, il se trouve en $407D), puis trouvez l'adresse de fin de bloc pour mettre ces données en 'DATA'.
Sélectionnez le bouton "copier dans le presse papier" de la fonction Text>TASM.
Puis, copiez le tout dans un nouveau fichier.
Il suffira d'effacer les $76 (retour chariot) et les $00 (espaces) en trop.
Amusez-vous bien...
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/
Cristal 5... Démo!
Bonjour à tous,
Afin de vous faire patienter jusqu'à la sortie de la vidéo et l'interview de l'auteur, je vous dévoile la première partie du jeu, qui en comprend trois.
Le but de ce message n'est pas de refaire l'histoire, corriger ou faire une version destinée à humilier les autodidactes des années 80... Mais belle est bien de pointer les défauts du ZX81, et plus précisément ceux de son Basic.
C'est donc un exemple, un chalenge de ma part, qui suis fort d'une expérience de saisie "Bête et gentil" de près de deux cents listings, de l'écriture d'un émulateur et d'une persévérance hors du commun dans l'exploration de la simplicité tordue de ce bon vieux ZX81!
Il n'est donc pas question de refaire du vieux avec du mieux, de l'assembleur ou tout refaire...
Mais, de pointer des astuces de programmation glanées ici et là... Pour optimiser la mémoire (principalement) et la vitesse.
Que l'auteur ne tienne pas rigueur de ces modifications... elles ne sont possibles qu'avec les émulateurs et les outils actuels... car sur une machine (une vraie), certaines astuces sont bel et bien impossible à réaliser.
Je prend pour exemple, les lignes 'PRINT' pouvant faire 16K de long, alors que sur une machine, il serai lent et fastidieux des les taper, voir impossible de les éditer!
Donc, voici les deux programmes:
(Fichiers au format 'p' en fin de message)
Programme original:
Programme optimisé:
L'esprit du programme à été conservé, mais certaines routines on était modifiée, des lignes assemblées pour gagner de la mémoire, et des astuces connues sur le ZX81 utilisées pour accélérer l'affichage graphique.
Mais je rappelle que ce travail a été réalisé en mode texte, donc avec une vue globale du programme, des facilités de déplacement de code et renumérotation simplifiée... alors qu'avec une vraie de vraie, il aurai fallu tout retaper et vérifier le code sur un ticket de caisse enregistreuse lisible avec un binoculaire!
Donc, CYRIL DUFER n'a pas à rougir de son travail, car même si simple, il est de bonne facture!
La preuve, je n'ai pas tout corrigé...
Résultat, nous passons de 15,5K à 12,8K avec l'écran.
Et je rappelle aussi que ce mur de mémoire était l'équivalent du mur du son, qui détruisait le programme si l'auteur n'allégeait pas sont code!
Résultat, beaucoup de routines annexes se voyaient effacées afin de faire fonctionner le programme.
Nous pouvons encore vidanger près de 3k avec des VAL"1" =NOT PI et autre monstruosités du genre CODE "a" ...
Mais, cela rend illisible le programme originel, et rend impossible sa modification...
Donc, ici groupage de lignes et optimisation des boucles...
Je vous laisse apprécier la différence entre les deux programmes...
Merci à Chris, Jean-Sébastien et Oncle bob pour la sauvegarde du programme original!
(qui est forcement mieux, car ORIGINAL, dans l'histoire, le Game-Play et dans l'approche du multimédia sur zx81)
Encore merci Cyril pour ton accord de diffusion.
La star c'est lui, et nous, on apprend de son travail passé... pour raconter, imaginer des alternatives ou tout simplement pour nous divertir.
Afin de vous faire patienter jusqu'à la sortie de la vidéo et l'interview de l'auteur, je vous dévoile la première partie du jeu, qui en comprend trois.
Le but de ce message n'est pas de refaire l'histoire, corriger ou faire une version destinée à humilier les autodidactes des années 80... Mais belle est bien de pointer les défauts du ZX81, et plus précisément ceux de son Basic.
C'est donc un exemple, un chalenge de ma part, qui suis fort d'une expérience de saisie "Bête et gentil" de près de deux cents listings, de l'écriture d'un émulateur et d'une persévérance hors du commun dans l'exploration de la simplicité tordue de ce bon vieux ZX81!
Il n'est donc pas question de refaire du vieux avec du mieux, de l'assembleur ou tout refaire...
Mais, de pointer des astuces de programmation glanées ici et là... Pour optimiser la mémoire (principalement) et la vitesse.
Que l'auteur ne tienne pas rigueur de ces modifications... elles ne sont possibles qu'avec les émulateurs et les outils actuels... car sur une machine (une vraie), certaines astuces sont bel et bien impossible à réaliser.
Je prend pour exemple, les lignes 'PRINT' pouvant faire 16K de long, alors que sur une machine, il serai lent et fastidieux des les taper, voir impossible de les éditer!
Donc, voici les deux programmes:
(Fichiers au format 'p' en fin de message)
Programme original:
Code : Tout sélectionner
# REM 5Z_Y _Y FW4__
0 REM [HEX:\
21,BF,03,3E,80,D7,3E,00,\
2B,BC,20,F7,C9 ]
# REM (C)1984 BY CYRIL DUFER
10 REM [HEX:\
00,10,28,11,1D,25,24,20,\
00,27,3E,00,28,3E,37,2E,\
31,00,29,3A,2B,2A,37 ]
15 RAND
20 LET G$="µµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ"
30 LET F$="´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´"
40 LET O$="********************************"
50 DIM Q(36)
55 LET Z$="fOUILLE : VOUS NE TROUVEZ RIEN DE TRES INTERESSANT."
60 LET E$="que«faites‘vous«Š"
70 LET C$="vOUS REMARQUEZ AUSSI "
80 LET H3=0
90 LET H4=0
100 LET H5=0
110 LET H10=0
120 LET H1=20
130 LET H2=10
140 LET H11=0
150 LET H12=0
160 LET H30=0
170 LET H6=0
180 LET H14=0
190 LET M1=1
200 GOSUB 520
210 LET I=J
220 GOSUB 520
230 LET P=J
240 GOSUB 520
250 LET D=J
260 GOSUB 520
270 LET R=J
280 GOSUB 520
290 LET VO=J
300 GOSUB 520
310 LET F=J
320 GOSUB 520
330 LET E=J
340 GOSUB 520
350 LET VI=J
360 GOSUB 520
370 LET C=J
380 GOSUB 520
390 LET A=J
400 GOSUB 520
410 LET B1=J
420 GOSUB 520
430 LET B2=J
440 GOSUB 520
450 GOSUB 2920
460 PRINT AT 21,7;"VOTRE NOM : ";
470 INPUT W$
480 IF LEN W$>=9 THEN LET W$=W$( TO 9)
490 PRINT AT 21,19;W$
500 RAND SIN SIN SIN SIN PI
510 RETURN
520 LET J=INT (RND*20)+4
530 RETURN
540 PRINT AT 2,7;"Ž«transit«reussi«"
550 LET B$="vous«etes«dans«l•obscurite"
555 PRINT AT 5,3;B$
560 PRINT AT 9,1;"la«piece«est«assez«oppressante";
570 PRINT AT 11,5;"et«sent«le«renferme–––"
580 LET N$="‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘"
585 PRINT AT 6,3;N$
590 PRINT AT 21,7;E$
600 GOSUB 3550
620 CLS
630 GOSUB 4690
640 IF Q(12) THEN GOTO 680
650 CLS
660 RAND USR 16514
670 GOTO 550
680 CLS
690 GOSUB 5130
700 PRINT ,,"oN RECONNAIT AISEMENT LA PIECE PRINCIPALE DÀUN ABRI ANTI - ATOMIQUE."
710 PRINT ,,"lES MURS SONT COUVERTS DÀETAGERES:LIVRES,VIDEOS,MUSIQUEBREF TOUT POUR SE DISTRAIRE DURANT DES MOIS"
720 PRINT ,,"oN VOIT 3 PORTES, ET UN ESCALIEREN SPIRALE;PRES DE LA PORTE SUD:UN INTERPHONE"
730 PRINT ,,"¼-¸¸¯"
740 PRINT "º °"
750 PRINT "I* O° (5*5)"
760 PRINT "º °"
770 PRINT "ª®®-¬"
780 GOSUB 4320
790 IF Q(32) THEN GOTO 1010
800 IF Q(33) THEN GOTO 1250
810 IF Q(34) THEN GOTO 840
820 IF Q(10) THEN GOTO 1350
830 GOTO 680
840 CLS
850 GOSUB 5130
860 PRINT AT 2,10;"lE DORTOIR:"
870 PRINT TAB 10;"----------"
880 PRINT ,,"oN Y TROUVE 18 COUCHETTES SUPERPOSEES ET DES ARMOIRES METALLIQUES VIDES."
890 PRINT ,,C$;"UNE PORTE."
900 PRINT ,,,,,,"¼¸-¯"
910 PRINT "º °"
920 PRINT "º *I (4*5)"
930 PRINT "º °"
940 PRINT "ª®®¬"
945 LET H30=1
950 GOSUB 4320
960 IF Q(30) THEN PRINT AT 10,0;"lES LITS SONT FAIT,ET IL NÀY A AUCUNE AFFAIRE PERSONNELLE"
965 IF Q(30) THEN GOSUB 2920
970 IF Q(13) THEN GOSUB 3550
980 IF Q(32) THEN GOTO 1140
990 IF Q(8) OR Q(9) OR Q(35) THEN GOTO 680
1000 GOTO 840
1010 CLS
1020 GOSUB 5130
1030 PRINT AT 2,11;"lA RESERVE:"
1040 PRINT TAB 11;"----------"
1050 PRINT ,,"pLUSIEURS METRES CUBES DE NOURRITURE"
1060 PRINT ,,"lES VIVRES SONT SUFFISANTS POUR 12 PERSONNES PENDANT 6 MOIS."
1070 PRINT ,,,,,,"¼¸¸¸¯"
1080 PRINT "º* ° (5*3)"
1090 PRINT "ª-®®¬"
1100 GOSUB 4320
1110 IF Q(19) THEN LET F=F+1
1120 IF Q(8) OR Q(9) OR Q(33) THEN GOTO 680
1130 GOTO 1010
1140 CLS
1150 GOSUB 5130
1160 PRINT AT 2,13;"w‘c"
1170 PRINT TAB 13;"---"
1180 PRINT ,,"lES DOUCHES-TOILETTES DANS UN COIN,UNE MACHINE A LAVER DANS LÀAUTRE."
1190 PRINT ,,,,,,"¼¸¸¯"
1200 PRINT "º *° (4*3)"
1210 PRINT "ª®-¬"
1220 GOSUB 4320
1230 IF Q(33) OR Q(8) OR Q(9) THEN GOTO 840
1240 GOTO 1140
1250 CLS
1260 GOSUB 5130
1270 PRINT ,,,,"lONGUE PIECE CONTENANT: LES DIVERS RESERVOIRS DÀEAU,DÀAIR AINSI QUE LES FILTRES DE RECYCLAGE."
1280 PRINT ,,,,,,"¼¸¸¸¸¸¸-¯"
1290 PRINT "º *° (9*3)"
1300 PRINT "ª®®®®®®®¬"
1310 GOSUB 4320
1320 IF Q(8) OR Q(9) OR Q(32) THEN GOTO 680
1330 CLS
1340 GOTO 1250
1350 CLS
1360 GOSUB 5130
1370 PRINT ,," lÀESCALIER : VOUS MONTEZ...";
1380 RAND SIN SIN SIN SIN SIN SIN SIN PI
1390 PRINT AT 4,14;"VOUS MONTEZ..."
1400 RAND SIN SIN SIN SIN SIN SIN SIN PI
1410 PRINT ,,"eT ENFIN 50 METRES PLUS HAUT,"
1420 PRINT ,,"vOUS VOUS TROUVEZ DANS UN LONG COULOIR."
1430 PRINT "aUX 2 BOUTS: UNE PORTE FERME A CLEF."
1440 PRINT "aU MILIEU: UNE PORTE OUVERTE."
1450 PRINT ,,"¼-¯"
1460 LET Q$="º °"
1470 PRINT Q$
1480 PRINT Q$
1490 PRINT "ºO° (3*8)"
1500 PRINT Q$
1510 PRINT "º*I"
1520 PRINT Q$
1530 PRINT "ª-¬"
1540 GOSUB 4320
1550 IF H14 THEN GOTO 1610
1560 LET H20=INT (RND*100)+1
1570 IF Q(27) AND (Q(32) OR Q(33)) THEN GOTO 1830
1580 IF Q(26) AND (Q(32) OR Q(33)) AND H20>H6 THEN PRINT AT 9,3;"vOUS NÀETES PAS CAPABLE DE CROCHETER CETTE SERRURE."
1590 IF Q(26) AND (Q(32) OR Q(33)) AND H20>H6 THEN GOSUB 2920
1600 IF Q(26) AND H20>H6 AND (Q(32) OR Q(33)) THEN GOTO 2680
1605 IF Q(26) AND H20<H6 AND (Q(32) OR Q(33)) THEN GOTO 1830
1610 IF Q(35) THEN GOTO 1650
1620 IF Q(11) THEN GOTO 680
1630 IF NOT H14 THEN GOTO 2680
1640 IF Q(32) OR Q(33) THEN GOTO 1830
1645 GOTO 2680
1650 CLS
1660 GOSUB 5130
1670 PRINT ,,"lE GARAGE: ECLAIRE PAR DES MEURTRIERES,"
1680 PRINT ,,"aU SOL, 2 MOTOS ELECTRIQUES A MOITIE DEMONTEES ET HORS DÀUSAGE"
1690 PRINT ,,"dE PLUS, VOUS REMARQUEZ LES TRACES DÀUN VEHICULE PLUS GROS MAIS CE VEHICULE A DISPARU."
1700 PRINT ,,,,"¼¸¸¸¯"
1710 LET Q$="º °"
1720 PRINT Q$
1730 PRINT Q$
1740 PRINT Q$;" (5*8)"
1750 PRINT Q$
1760 PRINT "I * °"
1770 PRINT Q$
1780 PRINT "ª®®®¬"
1790 GOSUB 4320
1800 IF Q(8) OR Q(9) OR Q(34) THEN GOTO 2680
1810 CLS
1820 GOTO 1650
1830 CLS
1840 GOSUB 5130
1850 LET H14=1
1860 PRINT AT 2,6;" zONE DE SECURITE:"
1870 PRINT ,,"lE SOL EST RECOUVERT DÀUNE POUSSIERE BLEUATRE."
1880 PRINT "cETTE ZONE EST FERMEE PAR 3 SAS."
1890 PRINT ,," ½½"
1900 PRINT "» ¬®®®®®®"
1910 PRINT "º °"
1920 PRINT "«‘««««««°"
1930 LET Q$="««««««««°"
1940 PRINT Q$
1950 PRINT Q$
1960 PRINT "«««««««« ½ (9*10)"
1970 PRINT Q$
1980 PRINT Q$
1990 PRINT Q$
2000 PRINT "«‘««««««°"
2010 PRINT "º * °"
2020 PRINT "± ¯¸¸¸¸¸¸"
2030 PRINT " ½½"
2040 LET H30=1
2050 GOSUB 4320
2060 CLS
2070 PRINT TAB 11;"attention‰"
2075 PRINT ,,"dORENAVANT,VOUS POUVEZ ETEINDRE VOTRE TORCHE:CETTE SALLE ET LES SUIVANTES SONT ECLAIREES."
2080 IF Q(30) THEN PRINT ,,"fOUILLE:VOUS NE POUVEZ PAS ANALYSER CETTE POUSSIERE."
2090 IF Q(30) THEN PRINT ,,"dE PLUS VOUS TROUVEZ A COTE DU SAS EST:DES ARMES"
2100 LET Q$=" EST BLOQUE."
2110 IF Q(32) THEN PRINT ,,"lE SAS NORD";Q$
2120 IF Q(33) THEN PRINT ,,"lE SAS SUD";Q$
2130 GOSUB 2920
2140 IF Q(8) OR Q(9) OR Q(34) THEN GOTO 2680
2150 IF Q(35) THEN GOTO 2180
2160 CLS
2170 GOTO 1830
2180 CLS
2190 GOSUB 5130
2200 PRINT ,,"lA COMMANDE DU SAS ÀESTÀ MARCHE"
2210 RAND SIN SIN SIN SIN SIN SIN PI
2220 PRINT ,,"lA MASSIVE PORTE BLINDEE TOURNE LENTEMENT SUR SES GONDS."
2230 RAND SIN SIN SIN SIN SIN SIN SIN SIN SIN SIN SIN SIN SIN PI
2240 PRINT ,,"sI VOUS DESIREZ VIVRE LA SUITE DE VOTRE MISSION SUR ÀVALIR 4À:"
2250 PRINT ,,,,"- ˜) RECOPIEZ ATTENTIVEMENT"
2260 PRINT TAB 5;"CETTE LIGNE:"
2270 PRINT ,,;
2280 LET Z=H1
2290 GOSUB 2620
2300 LET Z=H2
2310 GOSUB 2620
2320 LET Z=M1
2330 GOSUB 2620
2340 LET Z=I
2350 GOSUB 2620
2360 LET Z=P
2370 GOSUB 2620
2380 LET Z=D
2390 GOSUB 2620
2400 LET Z=R
2410 GOSUB 2620
2420 LET Z=VO
2430 GOSUB 2620
2440 LET Z=F
2450 GOSUB 2620
2460 LET Z=E
2470 GOSUB 2620
2480 LET Z=VI
2490 GOSUB 2620
2500 LET Z=C
2510 GOSUB 2620
2520 LET Z=A
2530 GOSUB 2620
2540 LET Z=B1
2550 GOSUB 2620
2560 LET Z=B2
2570 GOSUB 2620
2580 LET Z=H10
2590 GOSUB 2620
2600 PRINT W$
2610 GOTO 2650
2620 IF Z<10 THEN PRINT "0";Z;
2630 IF Z>=10 THEN PRINT Z;
2640 RETURN
2650 PRINT ,,"- ™) METTEZ VOTRE MAGNETO SUR play"
2660 GOSUB 2920
2670 LOAD ""
2680 CLS
2690 GOSUB 5130
2700 GOTO 1420
2710 IF INKEY$="" THEN GOTO 2710
2720 SCROLL
2730 RETURN
2740 IF INKEY$="" THEN GOTO 2740
2750 SCROLL
2755 PRINT "- 28) CONVAINC UN RESIDENT DE"
2760 SCROLL
2765 PRINT TAB 6;"FOURNIR UN RENSEIGNEMENT."
2770 RETURN
2780 STOP
2790 CLS
2792 PRINT ,,"- FUSIL 30/30 : ";H2;" BALLES"
2795 PRINT ,,"- PARALYSANTS : ";H1;" JETS"
2800 PRINT ,,,," -legende-"
2810 PRINT ,," ¼¸¸¸¯ --> CLOISON"
2820 PRINT " O --> ESCALIER"
2830 PRINT " - I --> PORTES"
2840 PRINT " ½ --> SAS OU PORTE BLINDEE * --> VOTRE PERSONNAGE."
2850 PRINT ,," N"
2860 PRINT " O+E --> ROSE DES VENTS"
2870 PRINT " S"
2880 PRINT ,," (3*6) --> (LONGUEUR * LARGEUR)"
2890 GOSUB 2920
2900 CLS
2910 RETURN
2920 PRINT AT 21,7;"entrez«Žnew‘line"
2930 LET A$=INKEY$
2940 IF A$<>"" THEN GOTO 2965
2950 PRINT AT 21,7;"ENTREZ <NEW-LINE>"
2960 GOTO 2920
2965 PRINT AT 21,7;"««wait«a«minute««"
2970 RETURN
2980 CLS
2990 PRINT TAB 8;E$
3000 PRINT ,,"- 1) REGARDE DEVANT"
3010 PRINT "- 2) REGARDE SUR LES COTES"
3020 PRINT "- 3) REGARDE EN HAUT"
3030 PRINT "- 4) REGARDE EN BAS"
3040 PRINT "- 5) AVANCE NORMALEMENT"
3050 PRINT "- 6) AVANCE ARME POINTE AU SOL"
3060 PRINT "- 7) AVANCE ARME POINTEE DEVANT"
3070 PRINT "- 8) RECULE"
3080 PRINT "- 9) RECULE RAPIDEMENT"
3090 PRINT "- 10) MONTE LÀESCALIER"
3100 PRINT "- 11) DESCEND LÀESCALIER"
3110 PRINT "- 12) ALLUME TORCHE"
3120 PRINT "- 13) ETEIND TORCHE"
3130 PRINT "- 14) ANALYSE LÀATMOSPHERE"
3140 PRINT "- 15) MET COMBINAISON SPATIALE"
3150 PRINT "- 16) ENLEVE COMBI. SPATIALE"
3160 PRINT "- 17) REPARE COMBI. SPATIALE"
3170 PRINT "- 18) PREND AIR COMPRIME SECOURS"
3180 PRINT "- 19) MANGE"
3190 PRINT "- 20) REPOS"
3200 GOSUB 2710
3210 PRINT "- 21) SOIGNE UN RESIDENT"
3220 GOSUB 2710
3230 PRINT "- 22) SOIGNE SOI-MEME"
3240 GOSUB 2710
3250 PRINT "- 23) TIRE UN JET DE PARALYSANT"
3260 GOSUB 2710
3270 PRINT "- 24) TIRE UNE BALLE EXPLOSIVE"
3280 GOSUB 2710
3290 PRINT "- 25) ATTAQUE AVEC LE COUTEAU"
3300 GOSUB 2710
3310 PRINT "- 26) CROCHETE UNE SERRURE"
3320 GOSUB 2710
3330 PRINT "- 27) FAIT EXPLOSER LA SERRURE"
3340 GOSUB 2740
3350 GOSUB 2710
3360 PRINT "- 29) SEDUIT UN RESIDENT"
3370 GOSUB 2710
3380 PRINT "- 30) FOUILLE"
3390 GOSUB 2710
3400 PRINT "- 31) UTILISE LÀINTERPHONE"
3410 GOSUB 2710
3420 PRINT "- 32) PREND LA PORTE ÀNORDÀ"
3430 GOSUB 2710
3440 PRINT "- 33)";TAB 21;"ÀSUDÀ"
3450 GOSUB 2710
3460 PRINT "- 34)";TAB 21;"ÀOUESTÀ"
3470 GOSUB 2710
3480 PRINT "- 35)";TAB 21;"ÀESTÀ"
3490 GOSUB 2710
3500 PRINT "- 36) AVALE MEDICAMENTS"
3510 RAND SIN SIN SIN SIN PI
3520 SCROLL
3530 GOSUB 2920
3540 RETURN
3550 POKE 16418,2
3555 GOSUB 3660
3560 GOSUB 3700
3570 INPUT L$
3575 IF L$="" THEN GOTO 3570
3580 IF L$="A" OR L$="P" OR L$="R" OR L$="M" THEN GOTO 3610
3585 LET L=VAL L$
3590 IF L<=0 OR L>40 THEN GOTO 3570
3600 LET Q(L)=1
3610 IF L$="A" THEN GOSUB 2980
3620 IF L$="P" THEN GOSUB 3890
3630 IF L$="R" THEN RETURN
3640 IF L$="M" THEN GOSUB 2790
3650 GOTO 3560
3660 FOR L=1 TO 36
3670 LET Q(L)=0
3680 NEXT L
3690 RETURN
3700 CLS
3710 PRINT O$;AT 21,0;O$
3720 PRINT AT 3,11;"’«menu«’"
3730 PRINT ,,,,"1-36 -> ACTION"
3740 PRINT ,,"ÀAÀ -> LISTE ACTIONS"
3750 PRINT ,,"ÀMÀ -> LISTE MATERIEL"
3755 PRINT ,,"ÀPÀ -> PERSONNAGE"
3760 PRINT ,,"ÀRÀ -> RETOUR"
3780 LET P$="ENTREZ VOTRE SELECTION"
3790 FOR Q=1 TO LEN P$
3800 LET X=CODE P$(Q)
3810 LET Z=X+128
3820 IF INKEY$<>"" THEN GOTO 3880
3830 LET P$(Q)=CHR$ Z
3840 PRINT AT 19,5;P$
3850 LET P$(Q)=CHR$ X
3860 NEXT Q
3870 GOTO 3790
3880 RETURN
3890 CLS
3900 PRINT TAB 3;"caracteristiques«de‰";W$
3910 FOR Q=2 TO 11
3920 PRINT AT Q,15;"º"
3930 NEXT Q
3940 PRINT AT 2,0;"intellec–«‰ ";I;TAB 16;"perception‰ ";P
3950 PRINT ,,"decision««‰ ";D;TAB 16;"reflexe«««‰ ";R
3960 PRINT ,,"volonte«««‰ ";VO;TAB 16;"force«««««‰ ";F
3970 PRINT ,,"equilibre«‰ ";E;TAB 16;"vitalite««‰ ";VI
3980 PRINT ,,"communic–«‰ ";C;TAB 16;"adaptation‰ ";A
3990 PRINT ,,,,,,"apparence«‰ ";B1
4000 PRINT ,,"reputation‰ ";B2
4010 GOSUB 2920
4020 RETURN
4030 CLS
4040 POKE 16518,33
4050 GOSUB 4290
4060 POKE 16518,32
4070 GOSUB 4290
4080 POKE 16518,31
4090 GOSUB 4290
4100 POKE 16518,30
4110 GOSUB 4290
4120 POKE 16518,29
4130 GOSUB 4290
4140 POKE 16518,28
4150 GOSUB 4290
4160 POKE 16518,14
4170 GOSUB 4290
4180 POKE 16518,27
4190 GOSUB 4290
4200 POKE 16518,1
4210 GOSUB 4290
4220 POKE 16518,6
4230 GOSUB 4290
4240 POKE 16518,7
4250 GOSUB 4290
4260 POKE 16518,128
4270 RAND USR 16514
4280 GOTO 540
4290 RAND USR 16514
4300 CLS
4310 RETURN
4320 GOSUB 2920
4330 GOSUB 3550
4340 CLS
4350 GOSUB 4690
4360 CLS
4370 RETURN
4380 SAVE "CRYSTALœ"
4390 PRINT AT 3,12;"crystal«œ"
4400 PRINT AT 5,4;"JE NE VOUS CACHE PAS QUE"
4410 PRINT AT 7,3;"LÀAVENTURE PEUT SE REVELER"
4420 PRINT AT 9,1;"DANGEREUSE.VOUS PARTIREZ AVEC"
4430 PRINT AT 11,0;"TOUTES LES PRECAUTIONS POSSIBLES"
4440 PRINT AT 13,1;"ET NE PRENDREZ PAS DE RISQUES"
4450 PRINT AT 15,1;"INUTILES SI VOUS DECOUVREZ QUÀ"
4460 PRINT AT 17,4;"ILS SONT TOUS MORTS..."
4470 GOSUB 0
4480 CLS
4490 GOSUB 4580
4500 FOR Z=1 TO 11
4510 PRINT AT 3,12;"rEaDy Š"
4520 PRINT AT 9,7;"ALORS , ACTION..."
4530 PRINT AT 15,12;"TRANSIT"
4540 PRINT AT 16,12;"-------"
4550 PRINT AT 3,12;"ReAdY«?"
4560 NEXT Z
4570 GOSUB 4030
4580 FOR Z=0 TO 20
4590 PRINT AT Z,0;"¼¯";TAB 30;"¼¯"
4600 NEXT Z
4610 PRINT "¸¸";TAB 30;"¸¸"
4620 FOR Z=21 TO 0 STEP -1
4630 PRINT AT Z,2;"±";TAB 29;"»"
4640 RAND PI*PI
4650 PRINT AT Z,2;"»";TAB 29;"±"
4660 PRINT AT Z,2;" ";TAB 29;" "
4670 NEXT Z
4680 RETURN
4690 PRINT TAB 11;"remarques";AT 1,11;"---------"
4700 IF Q(27) AND H2>0 THEN LET H2=H2-1
4705 IF Q(27) AND H2<=0 THEN LET Q(27)=0
4710 IF Q(16) THEN LET M1=1
4720 IF Q(23) AND H1<=0 THEN LET Q(23)=0
4730 IF Q(23) AND H1>0 THEN LET H1=H1-1
4740 IF Q(14) THEN PRINT ,,"aTMOSPHERE : OK."
4750 IF H1<=0 THEN PRINT ,,"vOTRE PARALYSANT EST VIDE."
4760 IF Q(24) AND H2<=0 THEN LET Q(24)=0
4770 IF Q(24) AND H2>0 THEN LET H2=H2-1
4780 IF Q(15) AND H10=0 THEN LET M1=0
4790 IF H2<=0 THEN PRINT ,,"vOTRE FUSIL 30/30 EST VIDE"
4800 IF Q(19) AND H3>=7 THEN LET F=F+1
4810 IF Q(19) THEN LET H3=0
4815 IF H3=7 OR H3=10 OR H3=13 OR H3=16 OR H3=20 THEN LET F=F-1
4820 IF Q(20) AND H4>=12 THEN LET VI=VI+1
4830 IF Q(20) THEN LET H4=0
4833 IF H4=12 OR H4=15 OR H4=19 OR H4=22 THEN LET VI=VI-1
4840 IF Q(22) AND H5 THEN LET VI=VI+INT (RND*5)+1
4850 IF Q(26) THEN LET H6=((P-10)+(A-10)+(I-10))*4
4860 IF Q(28) THEN LET H7=((C-10)+(D-10)+(I-10))*4
4870 IF Q(29) THEN LET H8=((C-10)+(A-10))*4
4880 IF Q(29) AND B1>19 THEN LET H8=H8+10
4890 PRINT
4891 IF M1 AND H10=5 THEN PRINT "vOUS AVEZ FROID."
4893 IF M1 AND H10=5 THEN LET VI=VI-1
4900 IF M1 AND H10=8 THEN PRINT "vOUS VENEZ DE TOUSSER"
4905 IF H10=8 THEN LET VI=VI-1
4910 IF M1 AND H10=12 THEN PRINT "vOUS TOUSSEZ POUR LA DEUXIEME FOIS."
4911 IF H10=12 THEN LET VI=VI-1
4920 IF Q(36) THEN LET H12=0
4930 IF Q(36) THEN LET H11=1
4940 LET H12=H12+1
4950 IF H12=6 THEN LET H11=0
4960 IF H12=6 THEN LET H12=0
4970 IF H12=6 THEN LET VI=VI-1
4980 IF H11 AND M1 AND H10=15 OR H10=13 THEN PRINT "vOUS ETERNUEZ"
4990 IF M1 AND H10=23 AND H11 THEN PRINT "vOUS AVEZ DE LA FIEVRE"
5000 IF M1 AND (H10=30 OR H10=33 OR H10=36) AND H11 THEN PRINT "vOUS ETES TRES MALADE."
5010 IF H11 AND M1 AND H10=15 OR H10=13 THEN LET VI=VI-3
5020 IF H11 AND M1 AND H10=20 THEN LET VI=VI-(INT (RND*4)+1)
5030 IF H11 AND M1 AND (H10=30 OR H10=33 OR H10=36) THEN LET VI=VI-(INT (RND*6)+2)
5060 LET H3=H3+1
5070 LET H4=H4+1
5080 LET H10=H10+1
5090 IF Q(30) AND NOT H30 THEN PRINT ,,Z$
5095 LET H30=0
5100 IF Q(31) THEN PRINT ,,"lE VOYANT DE LÀINTERPHONE SÀEST ALLUME,MAIS PERSONNE NE REPOND"
5110 IF VI<=0 THEN GOTO 5190
5120 GOSUB 2920
5124 IF Q(13) AND NOT H14 THEN GOSUB 5330
5125 RETURN
5160 PRINT F$
5163 POKE 16418,0
5166 PRINT AT 23,0;G$
5170 PRINT AT 1,0;
5180 RETURN
5190 CLS
5195 RAND USR 16514
5200 PRINT AT 6,7;"HORREUR."
5210 FOR Z=0 TO 21
5230 PRINT AT 11,4;"++++++++++++++"
5240 PRINT AT Z,Z;""
5250 PRINT AT 11,4;"vous«etes«mort"
5260 PRINT AT Z,21-Z;""
5270 NEXT Z
5280 LET A$="½½½½½½½½½½"
5290 FOR Z=21 TO 0 STEP -1
5300 PRINT AT Z,22;A$
5310 NEXT Z
5320 GOTO 9999
5330 POKE 16518,128
5340 CLS
5350 RAND USR 16514
5360 PRINT AT 6,3;B$
5370 PRINT AT 7,3;N$
5390 GOSUB 4320
5400 IF Q(12) THEN RETURN
5410 GOTO 5340
Programme optimisé:
Code : Tout sélectionner
# REM REMPLISSAGE ASM
#
#ORG $4082 ; [@16514/@h4082]
# LD HL,$03BF
#Lb4085:
# LD A,$80
# RST 10H ; Display= A reg.
# LD A,$00
# DEC HL
# CP H
# JR NZ, Lb4085 ; [$4085:16517]
# RET ; ==========================
0 REM [HEX:\
21,BF,03,3E,80,D7,3E,00,\
2B,BC,20,F7,C9 ]
# REM (C)1984 BY CYRIL DUFER
10 REM (C)1984 BY CYRIL DUFER
15 RAND
20 LET G$="µµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ"
30 LET F$="´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´"
40 LET O$="********************************"
50 DIM Q(36)
60 DIM W$(9)
75 LET S=4
77 lET G=VAL"16514"
80 LET H3=0
90 LET H4=0
100 LET H5=0
110 LET H10=0
120 LET H1=20
130 LET H2=10
140 LET H11=0
150 LET H12=0
160 LET H30=0
170 LET H6=0
180 LET H14=0
190 LET M1=1
210 LET I=INT (RND*H1)+S
230 LET P=INT (RND*H1)+S
250 LET D=INT (RND*H1)+S
270 LET R=INT (RND*H1)+S
290 LET VO=INT (RND*H1)+S
310 LET F=INT (RND*H1)+S
330 LET E=INT (RND*H1)+S
350 LET VI=INT (RND*H1)+S
370 LET C=INT (RND*H1)+S
390 LET A=INT (RND*H1)+S
410 LET B1=INT (RND*H1)+S
430 LET B2=INT (RND*H1)+S
440 lET J=INT (RND*H1)+S
450 GOSUB 2920
460 PRINT AT 21,7;"VOTRE NOM : ";
470 INPUT W$
480 LET W$=W$( TO 9)
490 PRINT AT 21,19;W$
500 RAND SIN SIN SIN SIN PI
510 RETURN
540 PRINT AT 2,7;"Ž«transit«reussi«";AT 5,3;"vous«etes«dans«l•obscurite";AT 9,1;"la«piece«est«assez«oppressante";AT 11,5;"et«sent«le«renferme–––"
580 LET N$="‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘"
585 PRINT AT 6,3;N$
590 PRINT AT 21,7;"que«faites‘vous«Š"
595 GOSUB 2710
600 GOSUB 3550
620 CLS
630 GOSUB 4690
640 IF Q(12) THEN GOTO 680
650 CLS
660 RAND USR G
670 GOTO 550
680 CLS
690 GOSUB 5130
700 PRINT ,,"oN RECONNAIT AISEMENT LA PIECE PRINCIPALE DÀUN ABRI ANTI -","ATOMIQUE.",,,,"lES MURS SONT COUVERTS","DÀETAGERES:LIVRES,VIDEOS,MUSIQUEBREF TOUT POUR SE DISTRAIRE","DURANT DES MOIS",,,,"oN VOIT 3 PORTES, ET UN ESCALIEREN SPIRALE;PRES DE LA PORTE SUD:UN INTERPHONE",,,,"¼-¸¸¯",,"º °",,"I* O° (5*5)",,"º °",,"ª®®-¬"
780 GOSUB 4320
790 IF Q(32) THEN GOTO 1010
800 IF Q(33) THEN GOTO 1250
810 IF Q(34) THEN GOTO 840
820 IF Q(10) THEN GOTO 1350
830 GOTO 680
840 CLS
850 GOSUB 5130
860 PRINT AT 2,10;"lE DORTOIR:",TAB 10;"----------",,,"oN Y TROUVE 18 COUCHETTES","SUPERPOSEES ET DES ARMOIRES","METALLIQUES VIDES.",,,,,"vOUS REMARQUEZ AUSSI UNE PORTE.",,,,,,,"¼¸-¯",,"º °",,"º *I (4*5)",,"º °",,"ª®®¬"
945 LET H30=1
950 GOSUB 4320
960 IF Q(30) THEN PRINT AT 10,0;"lES LITS SONT FAIT,ET IL NÀY A AUCUNE AFFAIRE PERSONNELLE"
965 IF Q(30) THEN GOSUB 2920
970 IF Q(13) THEN GOSUB 3550
980 IF Q(32) THEN GOTO 1140
990 IF Q(8) OR Q(9) OR Q(35) THEN GOTO 680
1000 GOTO 840
1010 CLS
1020 GOSUB 5130
1030 PRINT AT 2,11;"lA RESERVE:",TAB 11;"----------"
1050 PRINT ,,"pLUSIEURS METRES CUBES DE","NOURRITURE",,,,"lES VIVRES SONT SUFFISANTS POUR 12 PERSONNES PENDANT 6 MOIS."
1070 PRINT ,,,,,,"¼¸¸¸¯",,"º* ° (5*3)",,"ª-®®¬"
1100 GOSUB 4320
1110 IF Q(19) THEN LET F=F+1
1120 IF Q(8) OR Q(9) OR Q(33) THEN GOTO 680
1130 GOTO 1010
1140 CLS
1150 GOSUB 5130
1160 PRINT AT 2,13;"w‘c",TAB 13;"---",,,,,"lES DOUCHES-TOILETTES DANS UN COIN,UNE MACHINE A LAVER DANS LÀAUTRE.",,,,,,,,"¼¸¸¯",,"º *° (4*3)",,"ª®-¬"
1220 GOSUB 4320
1230 IF Q(33) OR Q(8) OR Q(9) THEN GOTO 840
1240 GOTO 1140
1250 CLS
1260 GOSUB 5130
1270 PRINT ,,,,"lONGUE PIECE CONTENANT: LES DIVERS RESERVOIRS DÀEAU,DÀAIR AINSI QUE LES FILTRES DE RECYCLAGE.",,,,,,,,"¼¸¸¸¸¸¸-¯",,"º *° (9*3)","ª®®®®®®®¬"
1310 GOSUB 4320
1320 IF Q(8) OR Q(9) OR Q(32) THEN GOTO 680
1330 CLS
1340 GOTO 1250
1350 CLS
1360 GOSUB 5130
1370 PRINT ,," lÀESCALIER : VOUS MONTEZ...";
1380 RAND SIN SIN SIN SIN SIN SIN SIN PI
1390 PRINT AT 4,14;"VOUS MONTEZ..."
1400 RAND SIN SIN SIN SIN SIN SIN SIN PI
1410 PRINT ,,"eT ENFIN 50 METRES PLUS HAUT,",,,
1420 PRINT "vOUS VOUS TROUVEZ DANS UN LONG COULOIR.",,"aUX 2 BOUTS: UNE PORTE FERME A CLEF.",,"aU MILIEU: UNE PORTE OUVERTE.",,,"¼-¯"
1460 LET Q$="º °"
1470 PRINT Q$,,Q$,,"ºO° (3*8)",,Q$,,"º*I",,Q$,,"ª-¬"
1540 GOSUB 4320
1550 IF H14 THEN GOTO 1610
1560 LET H20=INT (RND*100)+1
1570 IF Q(27) AND (Q(32) OR Q(33)) THEN GOTO 1830
1580 IF Q(26) AND (Q(32) OR Q(33)) AND H20>H6 THEN PRINT AT 9,3;"vOUS NÀETES PAS CAPABLE DE CROCHETER CETTE SERRURE."
1590 IF Q(26) AND (Q(32) OR Q(33)) AND H20>H6 THEN GOSUB 2920
1600 IF Q(26) AND H20>H6 AND (Q(32) OR Q(33)) THEN GOTO 2680
1605 IF Q(26) AND H20<H6 AND (Q(32) OR Q(33)) THEN GOTO 1830
1610 IF Q(35) THEN GOTO 1650
1620 IF Q(11) THEN GOTO 680
1630 IF NOT H14 THEN GOTO 2680
1640 IF Q(32) OR Q(33) THEN GOTO 1830
1645 GOTO 2680
1650 CLS
1660 GOSUB 5130
1670 PRINT ,,"lE GARAGE: ECLAIRE PAR DES","MEURTRIERES,",,,,"aU SOL, 2 MOTOS ELECTRIQUES A MOITIE DEMONTEES ET HORS DÀUSAGE",,,,"dE PLUS, VOUS REMARQUEZ LES","TRACES DÀUN VEHICULE PLUS GROS MAIS CE VEHICULE A DISPARU.",,,"¼¸¸¸¯"
1710 LET Q$="º °"
1720 PRINT Q$,,Q$,,Q$;" (5*8)",,Q$,,"I * °",,Q$,,"ª®®®¬"
1790 GOSUB 4320
1800 IF Q(8) OR Q(9) OR Q(34) THEN GOTO 2680
1810 CLS
1820 GOTO 1650
1830 CLS
1840 GOSUB 5130
1850 LET H14=1
1860 PRINT AT 2,6;" zONE DE SECURITE:",,,"lE SOL EST RECOUVERT DÀUNE","POUSSIERE BLEUATRE.","cETTE ZONE EST FERMEE PAR 3 SAS.",," ½½"
1900 PRINT "» ¬®®®®®®",,"º °",,"«‘««««««°"
1930 LET Q$="««««««««°"
1940 PRINT Q$,,Q$,,"«««««««« ½ (9*10)",Q$,,Q$,,Q$,,"«‘««««««°",,"º * °",,"± ¯¸¸¸¸¸¸",," ½½"
2040 LET H30=1
2050 GOSUB 4320
2060 CLS
2070 PRINT TAB 11;"attention‰",,,"dORENAVANT,VOUS POUVEZ ETEINDRE VOTRE TORCHE:CETTE SALLE ET LES SUIVANTES SONT ECLAIREES."
2080 IF Q(30) THEN PRINT ,,"fOUILLE:VOUS NE POUVEZ PAS","ANALYSER CETTE POUSSIERE."
2090 IF Q(30) THEN PRINT ,,"dE PLUS VOUS TROUVEZ A COTE DU SAS EST:DES ARMES"
2100 LET Q$=" EST BLOQUE."
2110 IF Q(32) THEN PRINT ,,"lE SAS NORD";Q$
2120 IF Q(33) THEN PRINT ,,"lE SAS SUD";Q$
2130 GOSUB 2920
2140 IF Q(8) OR Q(9) OR Q(34) THEN GOTO 2680
2150 IF Q(35) THEN GOTO 2180
2160 CLS
2170 GOTO 1830
2180 CLS
2190 GOSUB 5130
2200 PRINT ,,"lA COMMANDE DU SAS ÀESTÀ MARCHE"
2210 RAND SIN SIN SIN SIN SIN SIN PI
2220 PRINT ,,"lA MASSIVE PORTE BLINDEE TOURNE LENTEMENT SUR SES GONDS."
2230 RAND SIN SIN SIN SIN SIN SIN SIN SIN SIN SIN SIN SIN SIN PI
2240 PRINT ,,"sI VOUS DESIREZ VIVRE LA SUITE DE VOTRE MISSION SUR ÀVALIR 4À:",,,"- ˜) RECOPIEZ ATTENTIVEMENT",,TAB 5;"CETTE LIGNE:",,,,("0" AND H1<10);H1;("0" AND H2<10);H2;("0" AND M1<10);M1;("0" AND I<10);I;("0" AND P<10);P;("0" AND D<10);D;("0" AND R<10);R;("0" AND VO<10);VO;("0" AND F<10);F;("0" AND E<10);E;("0" AND VI<10);VI;("0" AND C<10);C;("0" AND A<10);A;("0" AND B1<10);B1;("0" AND B2<10);B2;("0" AND H10<10);H10;W$,,,," - ™) METTEZ VOTRE MAGNETO SUR play"
2660 GOSUB 2920
2670 LOAD ""
2680 CLS
2690 GOSUB 5130
2700 GOTO 1420
2710 FOR Q=0 TO 500
2711 IF INKEY$="" THEN NEXT Q
2714 RETURN
2720 IF INKEY$="" THEN GOTO 2720
2722 FOR Q=0 TO 8
2724 SCROLL
2726 NEXT Q
2730 PRINT AT 13,0;
2770 RETURN
2790 CLS
2792 PRINT ,,"- FUSIL 30/30 : ";H2;" BALLES",,,"- PARALYSANTS : ";H1;" JETS",,,,," -legende-",,,," ¼¸¸¸¯ --> CLOISON"," O --> ESCALIER"," - I --> PORTES"," ½ --> SAS OU PORTE BLINDEE * --> VOTRE PERSONNAGE.",,," N",," O+E --> ROSE DES VENTS"," S",,,," (3*6) --> (LONGUEUR * LARGEUR)"
2890 GOSUB 2920
2900 CLS
2910 RETURN
2920 PRINT AT 21,7;"entrez«Žnew‘line"
2930 LET A$=INKEY$
2940 IF A$<>"" THEN GOTO 2965
2950 PRINT AT 21,7;"ENTREZ <NEW-LINE>"
2960 GOTO 2920
2965 PRINT AT 21,7;"«««un««instant«««"
2970 RETURN
2980 CLS
2990 PRINT TAB 8;"que«faites‘vous«Š"
3000 PRINT ,,"- 1) REGARDE DEVANT","- 2) REGARDE SUR LES COTES","- 3) REGARDE EN HAUT","- 4) REGARDE EN BAS","- 5) AVANCE NORMALEMENT","- 6) AVANCE ARME POINTE AU SOL","- 7) AVANCE ARME POINTEE DEVANT- 8) RECULE",,"- 9) RECULE RAPIDEMENT","- 10) MONTE LÀESCALIER","- 11) DESCEND LÀESCALIER","- 12) ALLUME TORCHE","- 13) ETEIND TORCHE","- 14) ANALYSE LÀATMOSPHERE","- 15) MET COMBINAISON SPATIALE","- 16) ENLEVE COMBI. SPATIALE","- 17) REPARE COMBI. SPATIALE","- 18) PREND AIR COMPRIME SECOURS- 19) MANGE",,"- 20) REPOS"
3200 GOSUB 2720
3210 PRINT "- 21) SOIGNE UN RESIDENT","- 22) SOIGNE SOI-MEME","- 23) TIRE UN JET DE PARALYSANT","- 24) TIRE UNE BALLE EXPLOSIVE","- 25) ATTAQUE AVEC LE COUTEAU","- 26) CROCHETE UNE SERRURE","- 27) FAIT EXPLOSER LA SERRURE","- 28) CONVAINC UN RESIDENT DE",TAB 6;"FOURNIR UN RENSEIGNEMENT."
3220 GOSUB 2720
3330 PRINT "- 29) SEDUIT UN RESIDENT","- 30) FOUILLE",,"- 31) UTILISE LÀINTERPHONE","- 32) PREND LA PORTE ÀNORDÀ","- 33)";TAB 21;"ÀSUDÀ","- 34)";TAB 21;"ÀOUESTÀ","- 35)";TAB 21;"ÀESTÀ","- 36) AVALE MEDICAMENTS"
3510 RAND SIN SIN SIN SIN PI
3520 SCROLL
3530 GOSUB 2920
3540 RETURN
3550 POKE 16418,2
3555 DIM Q(36)
3560 GOSUB 3700
3570 INPUT L$
3575 IF L$="" THEN GOTO 3570
3580 IF L$="A" OR L$="P" OR L$="R" OR L$="M" THEN GOTO 3610
3585 LET L=VAL L$
3590 IF L<=0 OR L>40 THEN GOTO 3570
3600 LET Q(L)=1
3610 IF L$="A" THEN GOSUB 2980
3620 IF L$="P" THEN GOSUB 3890
3630 IF L$="R" THEN RETURN
3640 IF L$="M" THEN GOSUB 2790
3650 GOTO 3560
3700 CLS
3710 PRINT O$;AT 21,0;O$
3720 PRINT AT 3,11;"’«menu«’"
3730 PRINT ,,,,"1-36 -> ACTION",,,,"ÀAÀ -> LISTE ACTIONS",,,"ÀMÀ -> LISTE MATERIEL",,,"ÀPÀ -> PERSONNAGE",,,"ÀRÀ -> VALIDER LE TOUR"
3780 LET P$="ENTREZ VOTRE SELECTION"
3790 FOR Q=1 TO LEN P$
3810 LET Z=CODE P$(Q)+128
3820 IF INKEY$<>"" THEN GOTO 3880
3830 LET P$(Q)=CHR$ Z
3840 PRINT AT 19,5;P$
3845 IF INKEY$<>"" THEN GOTO 3880
3850 LET P$(Q)=CHR$ (Z-128)
3860 NEXT Q
3870 GOTO 3790
3880 RETURN
3890 CLS
3900 PRINT TAB 3;"caracteristiques«de‰ ";W$;AT 2,14;
3910 FOR Q=2 TO 11
3920 PRINT TAB15;"º"
3930 NEXT Q
3940 PRINT AT 2,0;"intellec–«‰ ";I,"perception‰ ";P,,,"decision««‰ ";D,"reflexe«««‰ ";R,,,"volonte«««‰ ";VO,"force«««««‰ ";F,,,"equilibre«‰ ";E,"vitalite««‰ ";VI,,,"communic–«‰ ";C,"adaptation‰ ";A,,,,,,,"apparence«‰ ";B1,"reputation‰ ";B2
4010 GOSUB 2920
4020 RETURN
4030 CLS
4040 lET Z$="543210:."+CHR$(1)+CHR$(6)+CHR$(7)
4050 FOR Q=1 TO 11
4060 POKE 16518,CODE Z$(Q)
4090 RAND USR G
4100 CLS
4110 NEXT Q
4160 POKE 16518,128
4170 RAND USR G
4200 GOTO 540
4320 GOSUB 2920
4330 GOSUB 3550
4340 CLS
4350 GOSUB 4690
4360 CLS
4370 RETURN
4380 SAVE "CRYSTALœ"
4390 PRINT AT 3,12;"crystal«œ";AT 5,4;"JE NE VOUS CACHE PAS QUE";AT 7,3;"LÀAVENTURE PEUT SE REVELER";AT 9,1;"DANGEREUSE.VOUS PARTIREZ AVEC";AT 11,0;"TOUTES LES PRECAUTIONS POSSIBLES";AT 13,1;"ET NE PRENDREZ PAS DE RISQUES";AT 15,1;"INUTILES SI VOUS DECOUVREZ QUÀ";AT 17,4;"ILS SONT TOUS MORTS..."
4470 GOSUB 0
4480 CLS
4490 GOSUB 4580
4500 FOR Z=1 TO 11
4510 PRINT AT 3,12;"rEaDy Š";AT 9,7;"ALORS , ACTION...";AT 15,12;"TRANSIT";AT 16,12;"-------";AT 3,12;"ReAdY«?"
4560 NEXT Z
4570 GOSUB 4030
4580 FOR Z=0 TO 20
4590 PRINT "¼¯ ¼¯";
4600 NEXT Z
4610 PRINT "¸¸";TAB 30;"¸¸"
4620 FOR Z=21 TO 0 STEP -1
4630 PRINT AT Z,2;"±";TAB 29;"»"
4640 RAND PI*PI
4650 PRINT AT Z,2;"»";TAB 29;"±"
4660 PRINT AT Z,2;" ";TAB 29;" "
4670 NEXT Z
4680 RETURN
4690 PRINT TAB 11;"remarques";AT 1,11;"---------"
4700 IF Q(27) AND H2>0 THEN LET H2=H2-1
4705 IF Q(27) AND H2<=0 THEN LET Q(27)=0
4710 IF Q(16) THEN LET M1=1
4720 IF Q(23) AND H1<=0 THEN LET Q(23)=0
4730 IF Q(23) AND H1>0 THEN LET H1=H1-1
4740 IF Q(14) THEN PRINT ,,"aTMOSPHERE : OK."
4750 IF H1<=0 THEN PRINT ,,"vOTRE PARALYSANT EST VIDE."
4760 IF Q(24) AND H2<=0 THEN LET Q(24)=0
4770 IF Q(24) AND H2>0 THEN LET H2=H2-1
4780 IF Q(15) AND H10=0 THEN LET M1=0
4790 IF H2<=0 THEN PRINT ,,"vOTRE FUSIL 30/30 EST VIDE"
4800 IF Q(19) AND H3>=7 THEN LET F=F+1
4810 IF Q(19) THEN LET H3=0
4815 IF H3=7 OR H3=10 OR H3=13 OR H3=16 OR H3=20 THEN LET F=F-1
4820 IF Q(20) AND H4>=12 THEN LET VI=VI+1
4830 IF Q(20) THEN LET H4=0
4833 IF H4=12 OR H4=15 OR H4=19 OR H4=22 THEN LET VI=VI-1
4840 IF Q(22) AND H5 THEN LET VI=VI+INT (RND*5)+1
4850 IF Q(26) THEN LET H6=((P-10)+(A-10)+(I-10))*4
4860 IF Q(28) THEN LET H7=((C-10)+(D-10)+(I-10))*4
4870 IF Q(29) THEN LET H8=((C-10)+(A-10))*4
4880 IF Q(29) AND B1>19 THEN LET H8=H8+10
4890 PRINT
4891 IF M1 AND H10=5 THEN PRINT "vOUS AVEZ FROID."
4893 IF M1 AND H10=5 THEN LET VI=VI-1
4900 IF M1 AND H10=8 THEN PRINT "vOUS VENEZ DE TOUSSER"
4905 IF H10=8 THEN LET VI=VI-1
4910 IF M1 AND H10=12 THEN PRINT "vOUS TOUSSEZ POUR LA DEUXIEME FOIS."
4911 IF H10=12 THEN LET VI=VI-1
4920 IF Q(36) THEN LET H12=0
4930 IF Q(36) THEN LET H11=1
4940 LET H12=H12+1
4950 IF H12=6 THEN LET H11=0
4960 IF H12=6 THEN LET H12=0
4970 IF H12=6 THEN LET VI=VI-1
4980 IF H11 AND M1 AND H10=15 OR H10=13 THEN PRINT "vOUS ETERNUEZ"
4990 IF M1 AND H10=23 AND H11 THEN PRINT "vOUS AVEZ DE LA FIEVRE"
5000 IF M1 AND (H10=30 OR H10=33 OR H10=36) AND H11 THEN PRINT "vOUS ETES TRES MALADE."
5010 IF H11 AND M1 AND H10=15 OR H10=13 THEN LET VI=VI-3
5020 IF H11 AND M1 AND H10=20 THEN LET VI=VI-(INT (RND*4)+1)
5030 IF H11 AND M1 AND (H10=30 OR H10=33 OR H10=36) THEN LET VI=VI-(INT (RND*6)+2)
5060 LET H3=H3+1
5070 LET H4=H4+1
5080 LET H10=H10+1
5090 IF Q(30) AND NOT H30 THEN PRINT ,,"fOUILLE : VOUS NE TROUVEZ RIEN DE TRES INTERESSANT."
5095 LET H30=0
5100 IF Q(31) THEN PRINT ,,"lE VOYANT DE LÀINTERPHONE SÀEST ALLUME,MAIS PERSONNE NE REPOND"
5110 IF VI<=0 THEN GOTO 5190
5120 GOSUB 2920
5124 IF Q(13) AND NOT H14 THEN GOSUB 5330
5125 RETURN
5160 PRINT F$
5163 POKE 16418,0
5166 PRINT AT 23,0;G$
5170 PRINT AT 1,0;
5180 RETURN
5190 CLS
5195 RAND USR G
5200 PRINT AT 6,7;"HORREUR."
5210 FOR Z=0 TO 21
5230 PRINT AT 11,4;"++++++++++++++";AT Z,Z;"";AT 11,4;"vous«etes«mort";AT Z,21-Z;""
5270 NEXT Z
5280 LET A$="½½½½½½½½½½"
5290 FOR Z=21 TO 0 STEP -1
5300 PRINT AT Z,22;A$
5310 NEXT Z
5320 GOTO 9999
5330 POKE 16518,128
5340 CLS
5350 RAND USR G
5360 PRINT AT 6,3;"vous«etes«dans«l•obscurite"
5370 PRINT AT 7,3;N$
5390 GOSUB 4320
5400 IF Q(12) THEN RETURN
5410 GOTO 5340
Mais je rappelle que ce travail a été réalisé en mode texte, donc avec une vue globale du programme, des facilités de déplacement de code et renumérotation simplifiée... alors qu'avec une vraie de vraie, il aurai fallu tout retaper et vérifier le code sur un ticket de caisse enregistreuse lisible avec un binoculaire!
Donc, CYRIL DUFER n'a pas à rougir de son travail, car même si simple, il est de bonne facture!
La preuve, je n'ai pas tout corrigé...
Résultat, nous passons de 15,5K à 12,8K avec l'écran.
Et je rappelle aussi que ce mur de mémoire était l'équivalent du mur du son, qui détruisait le programme si l'auteur n'allégeait pas sont code!
Résultat, beaucoup de routines annexes se voyaient effacées afin de faire fonctionner le programme.
Nous pouvons encore vidanger près de 3k avec des VAL"1" =NOT PI et autre monstruosités du genre CODE "a" ...
Mais, cela rend illisible le programme originel, et rend impossible sa modification...
Donc, ici groupage de lignes et optimisation des boucles...
Je vous laisse apprécier la différence entre les deux programmes...
Merci à Chris, Jean-Sébastien et Oncle bob pour la sauvegarde du programme original!
(qui est forcement mieux, car ORIGINAL, dans l'histoire, le Game-Play et dans l'approche du multimédia sur zx81)
Encore merci Cyril pour ton accord de diffusion.
La star c'est lui, et nous, on apprend de son travail passé... pour raconter, imaginer des alternatives ou tout simplement pour nous divertir.
Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr, http://abandonlistings.free.fr/ & http://abandon.pcbs.free.fr/