Cassette Carnet d'adresses VG5000

Tout ce qui concerne le logiciel original et sa sauvegarde avec entre autre la régénération des disquettes ou autres supports physiques.

Modérateurs : Carl, Papy.G, fneck

Répondre
joaopa
Messages : 422
Enregistré le : 14 sept. 2013 12:17

Cassette Carnet d'adresses VG5000

Message par joaopa » 17 juil. 2019 10:37

Une personne ayant l'original de la cassette Carnet d'adresses sur VG5000 peut-il la lancer sur une vraie machine avec mon programme protect pour me donner la taille du fichier enregistré?
Pour obtenir la taille du fichier
A=PEEK(18474):B=PEEK(18475):?A+256*B

C'est intéressant car la cassette est enregistrée en format basic (octet=&20 pour le type de fichier) mais il y a des déchets en fin de cassette qui est listé par la commande LIST. Si cela est d'origine, il faudrait savoir comment les développeurs de l'époque ont réussi à mettre ce déchet en fin de listing.
Je me suis rendu compte de cette particularité en testant mon programme PROTEC sur cette cassette
Modifié en dernier par joaopa le 17 juil. 2019 19:08, modifié 1 fois.

Avatar du membre
Mokona
Messages : 416
Enregistré le : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Cassette Carnet d'adresses VG5000

Message par Mokona » 17 juil. 2019 14:49

À quoi ressemblent ces déchets ?

joaopa
Messages : 422
Enregistré le : 14 sept. 2013 12:17

Re: Cassette Carnet d'adresses VG5000

Message par joaopa » 17 juil. 2019 17:53

Screenshot_20190717_055108.png
Screenshot_20190717_055108.png (90.56 Kio) Vu 237 fois

Avatar du membre
Xavier_AL
Messages : 504
Enregistré le : 06 déc. 2017 20:30

Re: Cassette Carnet d'adresses VG5000

Message par Xavier_AL » 17 juil. 2019 18:54

Salut,

Il n'est pas rare de voir de tels "artefacts" en fin de programme, et cela ne semble pas être un protection, même si cela peut être utilisé comme particularité intrinsèque d'identification.

C'est à mon avis, la modification de valeurs système qui ont fait "bogger" l'enregistrement.
Les chaînes d'adresses des headers lignes ne correspondent plus à la taille réelle du programme, et à l'adresse de fin de programme.
Cette adresse est calculée pas le basic, et est généralement mise à jour grâce à une fonction tel que LIST ou SAVE.

Mais, parfois, certaines valeurs ne correspondent pas à la réalité, et le problème s'amplifie au cours de la programmation.
Parfois, l'adresse de début de codes basic est programmable avant le chargement, et donc si toutes les variables système ne sont pas à jour, ce décalage (pour gagner de la place mémoire, ou paramétrer l'écran) désorganise le Basic.

Tu as surement un loader avant ton programme, qui te fait des pokes, pour avancer ton programme en mémoire.
Dans le cas contraire, le programme basic se place à l'adresse par défaut… ce qui ne génère pas de "fantômes".

Cela peut provoquer une désorganisation du Basic, avec plantage et impossibilité de retrouver une ligne, mais généralement, ce genre de curiosité est accidentelle.

Pour l'utiliser en tant que protection, il te faudra utiliser un PEEK sur la zone "fantôme" pour vérifier sa présence.
Dans le cas contraire, cela peut être considéré comme une erreur d'enregistrement due à une utilisation non conforme du Basic et de ses variables.

Markerror
Messages : 1423
Enregistré le : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Cassette Carnet d'adresses VG5000

Message par Markerror » 17 juil. 2019 20:52

J'ai l'original du soft, mais plus de média pour transférer sur VG5000 le programme de déprotection. Je récupère un smartphone demain au boulot et je fais le test.

L'auteur de carnet d'adresses est l'un des fondateurs de Loriciels, Marc Bayle. J'ai récemment essayé de le contacter via une adresse sur le site docteur-informatique.com, mais ce dernier semble abandonné... L'idée était de lui proposer une interview pour parler de la "période VG5000" de Loriciels, sur laquelle aucune information n'existe sur le net (ou alors, je ne les ai pas trouvées... ). Il a aussi un adresse sur Viadeo, mais je répugne toujours à m'inscrire sur de tels sites, où on ne sait jamais ce qu'il est fait de nos données...
Modifié en dernier par Markerror le 19 juil. 2019 07:14, modifié 1 fois.

Avatar du membre
Carl
Modérateur
Messages : 10549
Enregistré le : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Cassette Carnet d'adresses VG5000

Message par Carl » 18 juil. 2019 07:16

Hervė, si besoin, je peux aussi faire cet essai...
Carl

Markerror
Messages : 1423
Enregistré le : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: Cassette Carnet d'adresses VG5000

Message par Markerror » 18 juil. 2019 07:22

Question bête Joaopa, tu as essayé de désassembler ces "déchets" ? On dirait limite du langage machine. L'auteur a peut-être utilisé la "bidouille" permettant de mélanger Basic et binaire :-).

Carl, si j'ai pas le temps de faire ça ce soir (ou si j'oublie le portable, ce qui peut toujours arriver avec moi), je te refilerai le bébé :-).

Avatar du membre
Xavier_AL
Messages : 504
Enregistré le : 06 déc. 2017 20:30

Re: Cassette Carnet d'adresses VG5000

Message par Xavier_AL » 18 juil. 2019 15:36

Une méthode tout doit issus du ZX81 !
Placer de l'assembleur dans une REM, puis faire un appel avec l'entête du fichier… d'où le tag Binaire qui doit lancer le patch sur la REM.
Cela évitait le changement du programme basic, en cas de décalage sur le saut ASM, car en fin de programme.
Et en cas de SAVE basic, la REM ayant une entête de ligne correct, mais avec un $00 de fin de ligne.. ce programme était sauvegardé sans la fin de la ligne REM !
J'avoue qu'il était simple de contourner le patch avec un petit changement du header programme, qui ne pointait plus sur la routine ASM avec un tag Basic.
A vérifier si ce "patch" en est vraiment un.

Avatar du membre
Xavier_AL
Messages : 504
Enregistré le : 06 déc. 2017 20:30

Re: Cassette Carnet d'adresses VG5000

Message par Xavier_AL » 18 juil. 2019 16:08

Donc,

OCR>adaptation texte en fichier BAS sur le Xur … et désassemblage.

Code : Tout sélectionner

1 REM [HEX: EB,5C,58,1B,8E,D9,3E,01,32,F8,66,\
3C,32,F9,66,CD,1C,5D,01,00,7B,5D,4E,68,11,AD,68,\
EB,09,EB,09,1A,BE,28,68,30,03,CD,3B,5D,3A,F9,66,\
3C,39,F9,66,91,F6,66,BE,20,DA,21,F8,66,34,7E,3C,\
23,77,21,F6,66,BE,20,CC,D9,C9,21,90,67,ED,5B,FA,\
66,3A,F8,66,19,3D,20,FC,22,ED,5C,21,90,67,3A,F9,\
66,19,3D,90,FC,72,F0,5C,C9,2A,ED,5C,11,90,67,ED,\
4B,FA,66,ED,B0,2A,F0,5C,ED,5B,ED,5C,ED,4B,FA,66,\
ED,B0,21,90,67,ED,5B,F0,5C,ED,4B,FA,66,ED,B0,C9,\
0C,3A,FA,66,B9,20,83,18,94,01,80,31,31,31,31,31,\
31,31,31,31,31,31,31,31,00,00,00,00,00,00,00,00,\
00,00,00,00,00 ]

Code : Tout sélectionner

;------- TASM ASM mnemonics. -------
; Compile this file using:
; Set TASMOPTS = -b
; tasm -80 ThisCode.tas MyBinary.BIN
;-----------------------------------
; Zx81 Program name: VB81 XuR [ASM.bas] :
; REM   line   name: 1 REM:   176 Bytes@4082-4131

#define ORG  .org       ; TASM cross-assembler definitions
#define equ  .equ
;-----------------------------------


ORG $4082 ; [@16514/@h4082]

; vvvvvvv non représentatif (DATA LDIR?)
.db $EB,$5C,$58,$1B,$8E,$D9; DATA
;	EX DE,HL  
;	LD E,H 
;	LD E,B 
;	DEC DE 
;	ADC A,(HL) 
;	EXX 

; vvvv Point d'entrée?	
; Patch automorphique sur adresse.
	LD A,$01 
	LD ($66F8),A 
	INC A 
	LD ($66F9),A 
Lb4091:
	CALL $5D1C ; [23836]
	LD BC,$7B00 
Lb4097:
	LD E,L 
	LD C,(HL) 
	LD L,B 
	LD DE,$68AD 
	EX DE,HL 
	ADD HL,BC 
	EX DE,HL 
	ADD HL,BC 
	LD A,(DE) 
	CP (HL) 
	JR Z, Lb410D ; [$410D:16653]
	JR NC, Lb40AA ; [$40AA:16554]
	CALL $5D3B ; [23867]
Lb40AA:
	LD A,($66F9) 
	INC A 
	ADD HL,SP 
	LD SP,HL 
	LD H,(HL) 
	SUB C 
	OR $66 
	CP (HL) 
	JR NZ, Lb4091 ; [$4091:16529]
	LD HL,$66F8 
	INC (HL) 
	LD A,(HL) 
	INC A 
	INC HL 
	LD (HL),A 
	LD HL,$66F6 
	CP (HL) 
	JR NZ, Lb4091 ; [$4091:16529]
	EXX 
	RET ; ==========================
	
; Routine Orpheline (sans appels)
Lb40C7:    ; <<< Uncharted Entry ]

	LD HL,$6790 
	LD DE,($66FA) 
	LD A,($66F8) 
Lb40D1:
	ADD HL,DE 
	DEC A 
	JR NZ, Lb40D1 ; [$40D1:16593]
	LD ($5CED),HL 
	LD HL,$6790 
	LD A,($66F9) 
	ADD HL,DE 
	DEC A 
	SUB B 
	CALL M,$F072 ; [61554]
	LD E,H 
	RET ; ==========================
; Routine Orpheline (sans appels)
Lb40E6:    ; <<< Uncharted Entry ]

	LD HL,($5CED) 
	LD DE,$6790 
	LD BC,($66FA) 
	LDIR 
	LD HL,($5CF0) 
	LD DE,($5CED) 
	LD BC,($66FA) 
	LDIR 
	LD HL,$6790 
	LD DE,($5CF0) 
	LD BC,($66FA) 
	LDIR 
	RET ; ==========================

Lb410D:
	INC C 
	LD A,($66FA) 
	CP C 
	JR NZ, Lb4097 ; [$4097:16535]
	JR Lb40AA ; [$40AA:16554]
	
; vvvvvvv non représentatif
.db $01,$80,$31,$31,$31,$31,$31,$31; DATA
.db $31,$31,$31,$31,$31,$31,$31; DATA

;	LD BC,$3180 
;	LD SP,$3131 
;	LD SP,$3131 
;	LD SP,$3131 
;	LD SP,$3131 
.end
C'est effectivement de l'assembleur.
Mais, le ORG ne permet pas de lister les DATA en valeurs indirect…
à verifier avec l'adresse ORG sur la machine. (l'offset fichier ne suffit pas!)

joaopa
Messages : 422
Enregistré le : 14 sept. 2013 12:17

Re: Cassette Carnet d'adresses VG5000

Message par joaopa » 19 juil. 2019 13:49

La question est donc de savoir comment les développeurs ont fait pour forcer le basic à enregistrer le code machine à la fin du fichier.

hlide
Messages : 851
Enregistré le : 29 nov. 2017 10:23

Re: Cassette Carnet d'adresses VG5000

Message par hlide » 19 juil. 2019 16:32

humm...

- Lb40E6 est une routine qui fonctionne comme un

Code : Tout sélectionner

swap(address1, address2, length)
, le pointeur $5CED contient addresse1, $5CF0 contient address2 et $66FA la taille en octet du contenu à échanger entre les deux blocs. Ou deux lignes (avec la taille qui semble être un "stride").

- Lb40C7 est une routine qui utilise $66FA comme un "stride", $66F8 comme le nombre de ligne et $6790 qui est le tampon qui sert aussi dans Lb40E6. La première boucle semble calculer l'adresse de la ligne voulue pour la stocker en $5CED (address1). On refait presque la même chose avec $66F9 comme ligne. Sauf que si celle ligne est inférieure au nombre de ligne passé en paramètre de la routine dans B, il y un appel à $F072 et le résultat est dans HL en sortie de la routine.

- La routine qui sert peut-être de point d'entée fait appel à $5D1C puis à $5D3B or curieusement si on fait la différence, on a $1F et si on ajoute la différence à Lb40C7 (calcul des placement des address1 et address2 ?), on a Lb40E6 (échange de ligne).

- Donc si je fais $5CED - $5D1C + Lb40C7, j'ai $4098. Du SMC ? et $5CF0 - $5D1C + Lb40C7 = $409B. Mais il y a un problème avec Lb4097 : la séquence "LD, E,L:LD C,(HL):LD L,B:LD DE,$68AD" n'a pas de sens. E est écrasé par LD DE,(). Et je ne vois pas comment en écrivant un mot 16-bit en $4098 et en $409B, on créé un code valide.

Bon j'arrête les frais ici.
Modifié en dernier par hlide le 19 juil. 2019 16:58, modifié 1 fois.

Avatar du membre
Carl
Modérateur
Messages : 10549
Enregistré le : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Cassette Carnet d'adresses VG5000

Message par Carl » 19 juil. 2019 16:55

@joaopa : il faudrait demander à son auteur Marc Bayle comme le soulignait Hervé...

ps : peut être que ce logiciel a été développé avec un Philips PMDS ?

Carl

Avatar du membre
Xavier_AL
Messages : 504
Enregistré le : 06 déc. 2017 20:30

Re: Cassette Carnet d'adresses VG5000

Message par Xavier_AL » 19 juil. 2019 17:24

Salut,
Oui, demander… mais après tout ce temps, il faut une machine à remonter le temps!

A propos du code, et vis à vis du nom du programme, et paceque le basic c'est franchement lent…

Je pense que ces routines de déplacement de mémoire est une "jambe de bois" en assembleur, pour trier plus vite les tableaux par ordre alphabétique.

Il n'y a rien de bloquant ou destructif dans ces codes…. RST0, JR 0, CALL 0....
Enfin, pour bloquer de l'assembleur, c'est pas bien dur.

Avatar du membre
Carl
Modérateur
Messages : 10549
Enregistré le : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Cassette Carnet d'adresses VG5000

Message par Carl » 20 juil. 2019 16:35

Pour l'expérience :
J'ai utilisé le déplombeur de joaopa
puis j'ai fais un LLIST
j'ai ensuite copier/coller le listing dans le simulateur de clavier.
puis j'ai fais un RUN, le logiciel se lance sans soucis
puis un csave "carnet et un cload "carnet", le logiciel fonctionne toujours mais une partie du code exotique de la ligne 7000 a disparu...
Je suppose que la ligne 7000 n'a pas été tapé depuis le clavier du VG5000 mais encodé avec un autre programme....?
Image7.jpg
Image7.jpg (279.53 Kio) Vu 71 fois
Image8.jpg
Image8.jpg (56.96 Kio) Vu 71 fois

Code : Tout sélectionner

0 REM CARNET D ADRESSES  VG-5000
1 REM  COPYRIGHT  LORICIELS  84
10 CLEAR1700,26348:DIMK(4,14)
20 E$=" Copyright LORICIELS Sept  1984          Toute reproduction interdite             loi du 11 mars 1957"
21 INIT0,2:TX6:PRINT "Possedez-vous l EXTENSION MEMOIRE 16Ko   Oui / Non ?":EF=63
22 B=KEY(0):IFB=0THEN 22
23 IFB=111THENEF=170:GOTO 25
24 IFB<>110THEN 22
25 CURSORY12:PRINT "La capacite maximale du fichier est de ";EF;" fiches"
26 FORI=1TO100:NEXTI
27 IFKEY(0)=0THEN 26
28 GOTO 900
30 REM(C)LO-
100 INIT6,1:PRINTCHR$(31):TX1:PRINT TAB(15);"(C) LORICIELS AOUT 1984":PRINT TAB(23);"VG-5000"
110 CURSORY5:TX4,7:FORI=1TO2:CURSORX2:PRINT"C A R N E T     D ' A D R E S S E S ":NEXTI
120 CURSORY8:TX1,7:FORI=1TO2:CURSORX14:PRINT"  M E N U  ":NEXTI
130 CURSORY12:TX0:PRINTTAB(5);"| 1 - CONSULTATION":PRINT TAB(5);"| 2 - CREATION":PRINTTAB(5);"| 3 - MODIFICATION"
140 IFPEEK(22003)<>179THENCALL0:REM  
160 PRINTTAB(5);"| 4 - LISTE ECRAN":PRINTTAB(5);"| 5 - LISTE IMPRIMANTE":PRINT TAB(5);"| 6 - SAUVEGARDE FICHIER"
165 PRINT TAB(5);"| 7 - LECTURE FICHIER":PRINT TAB(5);"| 8 - TRI ALPHABETIQUE"
175 CURSORX2:CURSORY21:TX1:PRINT"Nbre fiches : ";E:CURSORX19:CURSORY23:TX4:PRINT "Auteur : Marc BAYLE"
180 A=KEY(0):IFA<49ORA>56THEN 180
190 A=A-48:ON A GOTO 1000, 2000, 3000, 4000, 4100, 5000, 6000, 1500
290 CURSORX1:CURSORY1:TX2,4:PRINT "SUIVANT>RET   MENU>CTRL A   IMPR>CTRL1"
295 B=KEY(0):IFB=225THENGOTO 100
296 IFB=177THENGOSUB 500:RETURN
297 IFB<>13THEN 295
298 RETURN
400 FORI=0TOT1-1:POKEZ2+I,PEEK(Z1+I):NEXTI:RETURN
500 LPRINT"--------------------------------------":LPRINT"Fiche n.";J:LPRINT
515 LPRINT"Nom        : ";:K=0:GOSUB 590
520 LPRINT"Prenom     : ";:GOSUB 590
525 LPRINT"Date       : ";:GOSUB 595:LPRINT"-";:GOSUB 595:LPRINT"-";:GOSUB 590
530 LPRINT"Adresse    :":GOSUB 590:GOSUB 595:LPRINT"  -  ";:GOSUB 590
535 LPRINT"Tel.       : (";:GOSUB 595:LPRINT")";:GOSUB 595:LPRINT".";:GOSUB 595:LPRINT".";:GOSUB 590
540 LPRINT"Profession : ";:GOSUB 590
545 LPRINT"Divers     : ";:GOSUB 590
550 RETURN
590 K=K+1:LPRINT MID$(E$,K(3,K),K(4,K)):RETURN
595 K=K+1:LPRINT MID$(E$,K(3,K),K(4,K));:RETURN
600 INIT0,1:CURSORY5:TX6:PRINT "NOM";SPC(9);:DELIM0,3,0:PRINT SPC(13):DELIM3,0,0:PRINT
610 CURSORY5:TX6:PRINT "NOM";SPC(9);:DELIM0,C,0:PRINT SPC(13):DELIMC,0,0:PRINT
620 CURSORY7:TX6:PRINT "PRENOM";SPC(6);:DELIM0,C,0:PRINT SPC(11):DELIMC,0,0:PRINT
625 CURSORY9:TX6:PRINT "DATE";SPC(8):DELIM0,C,0:TXF:PRINT"   -  -  ";:DELIMC,0,0:PRINT
630 CURSORY11:TX6:PRINT "ADRESSE :"
640 CURSORY13:CURSORX7:DELIM0,C,0:PRINT SPC(25):DELIMC,0,0:PRINT
650 CURSORY15:CURSORX7:DELIM0,C,0:PRINT SPC(6):DELIMC,0,0:PRINT "  - ";:DELIM0,C,0:PRINT SPC(13):DELIMC,0,0:PRINT
660 CURSORY17:TX6:PRINT "TEL";SPC(9);:DELIM0,C,0:TXF:PRINT" (  )   .  .  ";:DELIMC,0,0:PRINT
670 CURSORY19:TX6:PRINT "PROF";SPC(8);:DELIM0,C,0:PRINT SPC(6):DELIMC,0,0:PRINT
680 CURSORY21:TX6:PRINT "DIVERS";SPC(6);:DELIM0,C,0:PRINT SPC(13):DELIMC,0,0:PRINT
690 CURSORY23:CURSORX20:TX2:PRINT "(C) LORICIELS 1984";
699 RETURN
700 IF J>E THEN RETURN
701 GOSUB 600:Z1=L9+154+T1*J:Z2=19038:GOSUB 400
705 FORI=1TONF:CURSORXK(1,I)+1:CURSORYK(2,I):TXF:PRINT MID$(E$,K(3,I),K(4,I)):NEXTI:RETURN
800 POKE&"47FD",24:GOSUB 600:TX1:CURSORY3:CURSORX1:PRINT A1$;:GOSUB 990
805 FORI=1TONF:K=0
810 K=K+1:IFK>K(4,I)THEN 836
812 B=KEY(0):X=K(1,I)+K:Y=K(2,I):CURSORXX:CURSORYY:TX2,4:PRINTMID$(E$,K+K(3,I)-1,1);:IFB=PEEK(L9+1)THENGOTO 950
813 IFB>31ANDB<>177THEN 830
814 IFB=8THENIFK<>1THENGOSUB 980:K=K-1:GOTO 812
816 IFB=7THENGOSUB 980:GOTO 835
818 IFB=9THENIFI<>1THENGOSUB 980:K=0:I=I-1:GOTO 810
820 IFB=10ORB=13THENGOSUB 980:GOTO 836
822 IFB=177THENGOSUB 980:RETURN
825 GOTO 812
830 POKE19038+K+K(3,I)-2,B:CO=0:POKEL9+1,B:SOUND255,1:CURSORXK(1,I)+K:CURSORYK(2,I):TXF:PRINT MID$(E$,K+K(3,I)-1,1);
835 GOTO 810:SOUND100,5
836 NEXTI:RETURN
850 IFI<>1THENI=I-1:GOTO 810
900 T1=95:L9=26358:POKEL9+5,0:C=4:F=3:NF=14:FORI=1TONF:FORJ=1TO4:READK(J,I):NEXTJ:NEXTI:GOTO 100
910 DATA14,5,1,12,14,7,13,10,14,9,23,2,17,9,25,2,20,9,27,2,8,13,29,24,8,15,53,5,20,15,58,12,15,17,70,2,18,17,72,3
920 DATA22,17,75,2,25,17,77,2,14,19,79,5,14,21,84,12
950 CO=CO+1:IFCO<2THEN 812
960 GOTO 813
980 CO=0:POKEL9+1,B:SOUND255,1:CURSORXX:CURSORYY:TXF:PRINT MID$(E$,K+K(3,I)-1,1);:RETURN
990 FORI=19038TO19133:POKEI,32:NEXTI:RETURN
1000 A1$="CONSULTATION":Z4=0
1010 GOSUB 800:Z1=19038:Z2=L9+10:Z3=Z2:M=0:GOSUB 400:J=0
1015 SOUND255,90:B=L9+154+T1*J:K=-1
1020 K=K+1:IFK>T1-1THEN 1080
1030 IFPEEK(Z3+K)=32THEN 1020
1035 IFPEEK(22003)<>179THENCALL0:REM  
1040 IFPEEK(Z3+K)<>PEEK(B+K)THEN 1090
1050 GOTO 1020
1080 M=1:GOSUB 700:IFZ4=1THEN 3020
1085 GOSUB 290
1090 J=J+1:IFJ<E THEN 1015:REM1
1092 IFM=0THENTX2,4:CURSORX3:CURSORY1:PRINT "Pas de fiche sous cette r‚f‚rence":GOSUB 295
1095 GOTO 100
1500 IFE<2THEN 100
1510 INIT0,2:TX6:PRINT "TRI en cours... veuillez patienter":POKE23787,0:POKE23788,33:POKEL9+1,0:POKEL9+4,T1:CALL23772:GOTO 100
2000 IFE=EFTHEN 2200
2010 A1$="CREATION":GOSUB 800:Z4=0
2015 TX6,4,1:CURSORX3:CURSORY1:PRINT "OK POUR VALIDER?  O/N ou CTRL A"
2020 B=KEY(0):IFB<>111ANDB<>110ANDB<>225THEN 2020
2025 IFZ4=1THEN 2030
2026 IFB=111THENE=E+1:J=E:POKEL9,E+1
2030 IFB=111THENTX2,4:CURSORX3:CURSORY1:PRINTSPC(11);"VALIDATION";SPC(11):Z1=19038:Z2=L9+154+T1*J:GOSUB 400:GOTO 100
2040 IFB=110THENTX0:CURSORX3:CURSORY1:PRINT SPC(33):GOSUB 805:GOTO 2015
2045 IFB=225THEN 100
2050 GOTO 2020
2200 INIT0,5:TX6,0,1:PRINT:PRINT:PRINT:PRINT"FICHIER COMPLET : ";EF;" FICHES"
2210 FORI=1TO100:NEXTI:IFKEY(0)=0THEN 2210
2220 GOTO 100
3000 A1$="MODIFICATION":Z4=1:GOTO 1010
3020 GOSUB 805:GOTO 2015
4000 G=0
4010 FORJ=1TOE:GOSUB 700
4020 IFG=0THENGOSUB 290:GOTO 4030
4025 GOSUB 500
4030 NEXTJ
4040 IFKEY(0)=0THEN 4040
4050 GOTO 100
4100 G=1:GOTO 4010
5000 T=T1*(E+3):S=L9:POKEL9,E:INIT0,4:TX2:PRINT:PRINT"SAUVEGARDE"
5025 CURSORY10:TX6:PRINT "METTRE UNE CASSETTE VIERGE DANS VOTRE  MAGNETOPHONE, APPUYER SUR ";:TX1:PRINT"REC ET PLAY ";
5026 TX6:PRINT" DU MAGNETO PUIS SUR LA TOUCHE ";:TX1:PRINT "RET";:TX6:PRINT"  DU  VG-5000":GOSUB 5100
5029 PRINT :TX2,4,1:PRINTSPC(6);"ENREGISTREMENT EN COURS...      "
5030 CSAVEL:CSAVEM"FICH",S,T
5040 GOTO 100
5100 TX1:PRINT:PRINT"Retour MENU > CTRL A"
5110 B=KEY(0):IFB<>13ANDB<>225THEN 5110
5120 IFB=225THEN 100
5130 RETURN
6000 INIT0,4:TX2:PRINT:PRINT"LECTURE"
6020 CURSORY10:TX6:PRINT "METTRE LA CASSETTE  FICHIER DANS VOTRE MAGNETOPHONE,  APPUYER  SUR  ";:TX1:PRINT"PLAY ";
6030 TX6:PRINT"  DU MAGNETO  PUIS  SUR LA TOUCHE ";:TX1:PRINT " RET ";:TX6:PRINT"  DU VG-5000"
6040 GOSUB 5100
6050 PRINT :TX2,4,1:PRINTSPC(9);"LECTURE EN COURS...";SPC(9):CURSORY19:CURSORX6:TX1,4,1
6060 CLOAD
6070 E=PEEK(L9):GOTO 100
6071 REM     Copyright LORICIELS AOUT 1984
7000 REMACTION>2*6*f<2HŒfEXPœ]
26702 ŒEGhH‹

Répondre