Forums Abandonware

Lankhor.net - Abw-Definition - Abw-Magazines - Abw-Videos - Abw annuaire
Nous sommes le 16-12-2018 19:21

Heures au format UTC+01:00




Poster un nouveau sujet  Répondre au sujet  [ 25 messages ]  Aller à la page Précédente 1 2
Auteur Message
 Sujet du message : Re: ZX81 France, les fichiers...
Message non luPosté : 13-11-2018 01:09 
Hors ligne
Villager
Avatar du membre

Enregistré le : 20-06-2018 12:54
Messages : 5
Merci pour ce joli teasing et cette introduction.

Pour les 2,2ko de gagné, c’est énorme :lol:


Haut
   
 Sujet du message : Re: ZX81 France, les fichiers...
Message non luPosté : 14-11-2018 04:27 
Hors ligne
Legendary
Avatar du membre

Enregistré le : 22-02-2012 08:00
Messages : 488
Citation :
Pour les 2,2ko de gagné, c’est énorme


et sans toucher aux valeurs en virgules flottantes !
Juste en concaténant les 'PRINT' et en réorganisant certaines routines.

2,2k c'est largement suffisant pour faire un menu déroulant en ASM pour le choix des actions...
:D

[EDIT]
Et encore 1665 octets... mais, dur de gagner plus !!!
4269 octets de libre...

Mais on perd grandement en vitesse d'exécution.
:shock:

Code :
# 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:\
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(CODE "8")
    60 DIM W$(VAL "9")
    75 LET S=VAL "4"
    77 LET G=VAL "16514"
    80 LET H3=NOT PI
    90 LET H4=NOT PI
   100 LET H5=NOT PI
   110 LET H10=NOT PI
   120 LET H1=CODE "="
   130 LET H2=CODE "¿"
   140 LET H11=NOT PI
   150 LET H12=NOT PI
   160 LET H30=NOT PI
   170 LET H6=NOT PI
   180 LET H14=NOT PI
   190 LET M1=PI/PI
   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 VAL "2920"
   460 PRINT AT CODE "+",VAL "7";"VOTRE NOM :       ";
   470 INPUT W$
   480 LET W$=W$( TO VAL "9")
   490 PRINT AT CODE "+",CODE "<";W$
   500 RAND SIN SIN SIN SIN PI
   510 RETURN
   540 PRINT AT VAL "2",VAL "7";"Ž«transit«reussi«";AT VAL "5",INT PI;"vous«etes«dans«l•obscurite";AT VAL "9",PI/PI;"la«piece«est«assez«oppressante";AT VAL "11",VAL "5";"et«sent«le«renferme–––"
   580 LET N$="‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘"
   585 PRINT AT VAL "6",INT PI;N$
   590 PRINT AT CODE "+",VAL "7";"que«faites‘vous«Š"
   595 GOSUB VAL "2710"
   600 GOSUB VAL "3550"
   620 CLS
   630 GOSUB VAL "4690"
   640 IF Q(CODE "£") THEN GOTO VAL "680"
   650 CLS
   660 RAND USR G
   670 GOTO VAL "550"
   680 CLS
   690 GOSUB VAL "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 VAL "4320"
   790 IF Q(CODE "4") THEN GOTO VAL "1010"
   800 IF Q(CODE "5") THEN GOTO VAL "1250"
   810 IF Q(CODE "6") THEN GOTO VAL "840"
   820 IF Q(CODE "¿") THEN GOTO VAL "1350"
   830 GOTO VAL "680"
   840 CLS
   850 GOSUB VAL "5130"
   860 PRINT AT VAL "2",CODE "¿";"lE DORTOIR:",TAB CODE "¿";"----------",,,"oN Y TROUVE 18 COUCHETTES","SUPERPOSEES ET DES ARMOIRES","METALLIQUES VIDES.",,,,,"vOUS REMARQUEZ AUSSI UNE PORTE.",,,,,,,"¼¸-¯",,"º  °",,"º *I  (4*5)",,"º  °",,"ª®®¬"
   945 LET H30=PI/PI
   950 GOSUB VAL "4320"
   960 IF Q(CODE "2") THEN PRINT AT CODE "¿",NOT PI;"lES LITS SONT FAIT,ET IL NÀY A  AUCUNE AFFAIRE PERSONNELLE"
   965 IF Q(CODE "2") THEN GOSUB VAL "2920"
   970 IF Q(CODE "$") THEN GOSUB VAL "3550"
   980 IF Q(CODE "4") THEN GOTO VAL "1140"
   990 IF Q(VAL "8") OR Q(VAL "9") OR Q(CODE "7") THEN GOTO VAL "680"
  1000 GOTO VAL "840"
  1010 CLS
  1020 GOSUB VAL "5130"
  1030 PRINT AT VAL "2",VAL "11";"lA RESERVE:",TAB VAL "11";"----------"
  1050 PRINT ,,"pLUSIEURS METRES CUBES DE","NOURRITURE",,,,"lES VIVRES SONT SUFFISANTS POUR 12 PERSONNES PENDANT 6 MOIS."
  1070 PRINT ,,,,,,"¼¸¸¸¯",,"º*  °  (5*3)",,"ª-®®¬"
  1100 GOSUB VAL "4320"
  1110 IF Q(CODE "<") THEN LET F=F+PI/PI
  1120 IF Q(VAL "8") OR Q(VAL "9") OR Q(CODE "5") THEN GOTO VAL "680"
  1130 GOTO VAL "1010"
  1140 CLS
  1150 GOSUB VAL "5130"
  1160 PRINT AT VAL "2",CODE "$";"w‘c",TAB CODE "$";"---",,,,,"lES DOUCHES-TOILETTES DANS UN   COIN,UNE MACHINE A LAVER DANS   LÀAUTRE.",,,,,,,,"¼¸¸¯",,"º *°  (4*3)",,"ª®-¬"
  1220 GOSUB VAL "4320"
  1230 IF Q(CODE "5") OR Q(VAL "8") OR Q(VAL "9") THEN GOTO VAL "840"
  1240 GOTO VAL "1140"
  1250 CLS
  1260 GOSUB VAL "5130"
  1270 PRINT ,,,,"lONGUE PIECE CONTENANT: LES     DIVERS RESERVOIRS DÀEAU,DÀAIR   AINSI QUE LES FILTRES DE        RECYCLAGE.",,,,,,,,"¼¸¸¸¸¸¸-¯",,"º      *°  (9*3)","ª®®®®®®®¬"
  1310 GOSUB VAL "4320"
  1320 IF Q(VAL "8") OR Q(VAL "9") OR Q(CODE "4") THEN GOTO VAL "680"
  1330 CLS
  1340 GOTO VAL "1250"
  1350 CLS
  1360 GOSUB VAL "5130"
  1370 PRINT ,," lÀESCALIER : VOUS MONTEZ...";
  1380 RAND SIN SIN SIN SIN SIN SIN SIN PI
  1390 PRINT AT VAL "4",CODE ":";"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 VAL "4320"
  1550 IF H14 THEN GOTO VAL "1610"
  1560 LET H20=INT (RND*CODE "@64")+PI/PI
  1570 IF Q(CODE ".") AND (Q(CODE "4") OR Q(CODE "5")) THEN GOTO VAL "1830"
  1580 IF Q(CODE ",") AND (Q(CODE "4") OR Q(CODE "5")) AND H20>H6 THEN PRINT AT VAL "9",INT PI;"vOUS NÀETES PAS CAPABLE DE       CROCHETER CETTE SERRURE."
  1590 IF Q(CODE ",") AND (Q(CODE "4") OR Q(CODE "5")) AND H20>H6 THEN GOSUB VAL "2920"
  1600 IF Q(CODE ",") AND H20>H6 AND (Q(CODE "4") OR Q(CODE "5")) THEN GOTO VAL "2680"
  1605 IF Q(CODE ",") AND H20<H6 AND (Q(CODE "4") OR Q(CODE "5")) THEN GOTO VAL "1830"
  1610 IF Q(CODE "7") THEN GOTO VAL "1650"
  1620 IF Q(VAL "11") THEN GOTO VAL "680"
  1630 IF NOT H14 THEN GOTO VAL "2680"
  1640 IF Q(CODE "4") OR Q(CODE "5") THEN GOTO VAL "1830"
  1645 GOTO VAL "2680"
  1650 CLS
  1660 GOSUB VAL "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 VAL "4320"
  1800 IF Q(VAL "8") OR Q(VAL "9") OR Q(CODE "6") THEN GOTO VAL "2680"
  1810 CLS
  1820 GOTO VAL "1650"
  1830 CLS
  1840 GOSUB VAL "5130"
  1850 LET H14=PI/PI
  1860 PRINT AT VAL "2",VAL "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=PI/PI
  2050 GOSUB VAL "4320"
  2060 CLS
  2070 PRINT TAB VAL "11";"attention‰",,,"dORENAVANT,VOUS POUVEZ ETEINDRE VOTRE TORCHE:CETTE SALLE ET LES SUIVANTES SONT ECLAIREES."
  2080 IF Q(CODE "2") THEN PRINT ,,"fOUILLE:VOUS NE POUVEZ PAS","ANALYSER CETTE POUSSIERE."
  2090 IF Q(CODE "2") THEN PRINT ,,"dE PLUS VOUS TROUVEZ A COTE DU  SAS EST:DES ARMES"
  2100 LET Q$=" EST BLOQUE."
  2110 IF Q(CODE "4") THEN PRINT ,,"lE SAS NORD";Q$
  2120 IF Q(CODE "5") THEN PRINT ,,"lE SAS SUD";Q$
  2130 GOSUB VAL "2920"
  2140 IF Q(VAL "8") OR Q(VAL "9") OR Q(CODE "6") THEN GOTO VAL "2680"
  2150 IF Q(CODE "7") THEN GOTO VAL "2180"
  2160 CLS
  2170 GOTO VAL "1830"
  2180 CLS
  2190 GOSUB VAL "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 VAL "5";"CETTE LIGNE:",,,,("0" AND H1<CODE "¿");H1;("0" AND H2<CODE "¿");H2;("0" AND M1<CODE "¿");M1;("0" AND I<CODE "¿");I;("0" AND P<CODE "¿");P;("0" AND D<CODE "¿");D;("0" AND R<CODE "¿");R;("0" AND VO<CODE "¿");VO;("0" AND F<CODE "¿");F;("0" AND E<CODE "¿");E;("0" AND VI<CODE "¿");VI;("0" AND C<CODE "¿");C;("0" AND A<CODE "¿");A;("0" AND B1<CODE "¿");B1;("0" AND B2<CODE "¿");B2;("0" AND H10<CODE "¿");H10;W$,,,,"  - ™) METTEZ VOTRE MAGNETO SUR                 play"
  2660 GOSUB VAL "2920"
  2670 LOAD À
  2680 CLS
  2690 GOSUB VAL "5130"
  2700 GOTO VAL "1420"
  2710 FOR Q=NOT PI TO VAL "500"
  2711 IF INKEY$="" THEN NEXT Q
  2714 RETURN
  2720 IF INKEY$="" THEN GOTO VAL "2720"
  2722 FOR Q=NOT PI TO VAL "8"
  2724 SCROLL
  2726 NEXT Q
  2730 PRINT AT CODE "$",NOT PI;
  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 VAL "2920"
  2900 CLS
  2910 RETURN
  2920 PRINT AT CODE "+",VAL "7";"entrez«Žnew‘line"
  2930 LET A$=INKEY$
  2940 IF A$<>"" THEN GOTO VAL "2965"
  2950 PRINT AT CODE "+",VAL "7";"ENTREZ <NEW-LINE>"
  2960 GOTO VAL "2920"
  2965 PRINT AT CODE "+",VAL "7";"«««un««instant«««"
  2970 RETURN
  2980 CLS
  2990 PRINT TAB VAL "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 VAL "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 VAL "6";"FOURNIR UN RENSEIGNEMENT."
  3220 GOSUB VAL "2720"
  3330 PRINT "- 29) SEDUIT UN RESIDENT","- 30) FOUILLE",,"- 31) UTILISE LÀINTERPHONE","- 32) PREND LA PORTE ÀNORDÀ","- 33)";TAB CODE "+";"ÀSUDÀ","- 34)";TAB CODE "+";"ÀOUESTÀ","- 35)";TAB CODE "+";"ÀESTÀ","- 36) AVALE MEDICAMENTS"
  3510 RAND SIN SIN SIN SIN PI
  3520 SCROLL
  3530 GOSUB VAL "2920"
  3540 RETURN
  3550 POKE VAL "16418",VAL "2"
  3555 DIM Q(CODE "8")
  3560 GOSUB VAL "3700"
  3570 INPUT L$
  3575 IF L$="" THEN GOTO VAL "3570"
  3580 IF L$="A" OR L$="P" OR L$="R" OR L$="M" THEN GOTO VAL "3610"
  3585 LET L=VAL L$
  3590 IF L<=NOT PI OR L>CODE "C" THEN GOTO VAL "3570"
  3600 LET Q(L)=PI/PI
  3610 IF L$="A" THEN GOSUB VAL "2980"
  3620 IF L$="P" THEN GOSUB VAL "3890"
  3630 IF L$="R" THEN RETURN
  3640 IF L$="M" THEN GOSUB VAL "2790"
  3650 GOTO VAL "3560"
  3700 CLS
  3710 PRINT O$;AT CODE "+",NOT PI;O$
  3720 PRINT AT INT PI,VAL "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=PI/PI TO LEN P$
  3810 LET Z=CODE P$(Q)+CODE "«"
  3820 IF INKEY$<>"" THEN GOTO VAL "3880"
  3830 LET P$(Q)=CHR$ Z
  3840 PRINT AT CODE "<",VAL "5";P$
  3845 IF INKEY$<>"" THEN GOTO VAL "3880"
  3850 LET P$(Q)=CHR$ (Z-CODE "«")
  3860 NEXT Q
  3870 GOTO VAL "3790"
  3880 RETURN
  3890 CLS
  3900 PRINT TAB INT PI;"caracteristiques«de‰ ";W$;AT VAL "2",CODE ":";
  3910 FOR Q=VAL "2" TO VAL "11"
  3920 PRINT TAB CODE "?";"º"
  3930 NEXT Q
  3940 PRINT AT VAL "2",NOT PI;"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 VAL "2920"
  4020 RETURN
  4030 CLS
  4040 LET Z$="543210:."+CHR$ (PI/PI)+CHR$ (VAL "6")+CHR$ (VAL "7")
  4050 FOR Q=PI/PI TO VAL "11"
  4060 POKE VAL "16518",CODE Z$(Q)
  4090 RAND USR G
  4100 CLS
  4110 NEXT Q
  4160 POKE VAL "16518",CODE "«"
  4170 RAND USR G
  4200 GOTO VAL "540"
  4320 GOSUB VAL "2920"
  4330 GOSUB VAL "3550"
  4340 CLS
  4350 GOSUB VAL "4690"
  4360 CLS
  4370 RETURN
  4380 SAVE  "CRYSTALœ"
  4390 PRINT AT INT PI,CODE "£";"crystal«œ";AT VAL "5",VAL "4";"JE NE VOUS CACHE PAS QUE";AT VAL "7",INT PI;"LÀAVENTURE PEUT SE REVELER";AT VAL "9",PI/PI;"DANGEREUSE.VOUS PARTIREZ AVEC";AT VAL "11",NOT PI;"TOUTES LES PRECAUTIONS POSSIBLES";AT CODE "$",PI/PI;"ET NE PRENDREZ PAS DE RISQUES";AT CODE "?",PI/PI;"INUTILES SI VOUS DECOUVREZ QUÀ";AT CODE ")",VAL "4";"ILS SONT TOUS MORTS..."
  4470 GOSUB NOT PI
  4480 CLS
  4490 GOSUB VAL "4580"
  4500 FOR Z=PI/PI TO VAL "11"
  4510 PRINT AT INT PI,CODE "£";"rEaDy Š";AT VAL "9",VAL "7";"ALORS , ACTION...";AT CODE "?",CODE "£";"TRANSIT";AT CODE "(",CODE "£";"-------";AT INT PI,CODE "£";"ReAdY«?"
  4560 NEXT Z
  4570 GOSUB VAL "4030"
  4580 FOR Z=NOT PI TO CODE "="
  4590 PRINT "¼¯                            ¼¯";
  4600 NEXT Z
  4610 PRINT "¸¸";TAB CODE "2";"¸¸"
  4620 FOR Z=CODE "+" TO NOT PI STEP -PI/PI
  4630 PRINT AT Z,VAL "2";"±";TAB CODE "1";"»"
  4640 RAND PI*PI
  4650 PRINT AT Z,VAL "2";"»";TAB CODE "1";"±"
  4660 PRINT AT Z,VAL "2";" ";TAB CODE "1";" "
  4670 NEXT Z
  4680 RETURN
  4690 PRINT TAB VAL "11";"remarques";AT PI/PI,VAL "11";"---------"
  4700 IF Q(CODE ".") AND H2>NOT PI THEN LET H2=H2-PI/PI
  4705 IF Q(CODE ".") AND H2<=NOT PI THEN LET Q(CODE ".")=NOT PI
  4710 IF Q(CODE "(") THEN LET M1=PI/PI
  4720 IF Q(CODE "*") AND H1<=NOT PI THEN LET Q(CODE "*")=NOT PI
  4730 IF Q(CODE "*") AND H1>NOT PI THEN LET H1=H1-PI/PI
  4740 IF Q(CODE ":") THEN PRINT ,,"aTMOSPHERE : OK."
  4750 IF H1<=NOT PI THEN PRINT ,,"vOTRE PARALYSANT EST VIDE."
  4760 IF Q(CODE "/") AND H2<=NOT PI THEN LET Q(CODE "/")=NOT PI
  4770 IF Q(CODE "/") AND H2>NOT PI THEN LET H2=H2-PI/PI
  4780 IF Q(CODE "?") AND H10=NOT PI THEN LET M1=NOT PI
  4790 IF H2<=NOT PI THEN PRINT ,,"vOTRE FUSIL 30/30 EST VIDE"
  4800 IF Q(CODE "<") AND H3>=VAL "7" THEN LET F=F+PI/PI
  4810 IF Q(CODE "<") THEN LET H3=NOT PI
  4815 IF H3=VAL "7" OR H3=CODE "¿" OR H3=CODE "$" OR H3=CODE "(" OR H3=CODE "=" THEN LET F=F-PI/PI
  4820 IF Q(CODE "=") AND H4>=CODE "£" THEN LET VI=VI+PI/PI
  4830 IF Q(CODE "=") THEN LET H4=NOT PI
  4833 IF H4=CODE "£" OR H4=CODE "?" OR H4=CODE "<" OR H4=CODE "-" THEN LET VI=VI-PI/PI
  4840 IF Q(CODE "-") AND H5 THEN LET VI=VI+INT (RND*VAL "5")+PI/PI
  4850 IF Q(CODE ",") THEN LET H6=((P-CODE "¿")+(A-CODE "¿")+(I-CODE "¿"))*VAL "4"
  4860 IF Q(CODE "0") THEN LET H7=((C-CODE "¿")+(D-CODE "¿")+(I-CODE "¿"))*VAL "4"
  4870 IF Q(CODE "1") THEN LET H8=((C-CODE "¿")+(A-CODE "¿"))*VAL "4"
  4880 IF Q(CODE "1") AND B1>CODE "<" THEN LET H8=H8+CODE "¿"
  4890 PRINT
  4891 IF M1 AND H10=VAL "5" THEN PRINT "vOUS AVEZ FROID."
  4893 IF M1 AND H10=VAL "5" THEN LET VI=VI-PI/PI
  4900 IF M1 AND H10=VAL "8" THEN PRINT "vOUS VENEZ DE TOUSSER"
  4905 IF H10=VAL "8" THEN LET VI=VI-PI/PI
  4910 IF M1 AND H10=CODE "£" THEN PRINT "vOUS TOUSSEZ POUR LA DEUXIEME   FOIS."
  4911 IF H10=CODE "£" THEN LET VI=VI-PI/PI
  4920 IF Q(CODE "8") THEN LET H12=NOT PI
  4930 IF Q(CODE "8") THEN LET H11=PI/PI
  4940 LET H12=H12+PI/PI
  4950 IF H12=VAL "6" THEN LET H11=NOT PI
  4960 IF H12=VAL "6" THEN LET H12=NOT PI
  4970 IF H12=VAL "6" THEN LET VI=VI-PI/PI
  4980 IF H11 AND M1 AND H10=CODE "?" OR H10=CODE "$" THEN PRINT "vOUS ETERNUEZ"
  4990 IF M1 AND H10=CODE "*" AND H11 THEN PRINT "vOUS AVEZ DE LA FIEVRE"
  5000 IF M1 AND (H10=CODE "2" OR H10=CODE "5" OR H10=CODE "8") AND H11 THEN PRINT "vOUS ETES TRES MALADE."
  5010 IF H11 AND M1 AND H10=CODE "?" OR H10=CODE "$" THEN LET VI=VI-INT PI
  5020 IF H11 AND M1 AND H10=CODE "=" THEN LET VI=VI-(INT (RND*VAL "4")+PI/PI)
  5030 IF H11 AND M1 AND (H10=CODE "2" OR H10=CODE "5" OR H10=CODE "8") THEN LET VI=VI-(INT (RND*VAL "6")+VAL "2")
  5060 LET H3=H3+PI/PI
  5070 LET H4=H4+PI/PI
  5080 LET H10=H10+PI/PI
  5090 IF Q(CODE "2") AND NOT H30 THEN PRINT ,,"fOUILLE : VOUS NE TROUVEZ RIEN  DE TRES INTERESSANT."
  5095 LET H30=NOT PI
  5100 IF Q(CODE "3") THEN PRINT ,,"lE VOYANT DE LÀINTERPHONE SÀEST ALLUME,MAIS PERSONNE NE REPOND"
  5110 IF VI<=NOT PI THEN GOTO VAL "5190"
  5120 GOSUB VAL "2920"
  5124 IF Q(CODE "$") AND NOT H14 THEN GOSUB VAL "5330"
  5125 RETURN
  5160 PRINT F$
  5163 POKE VAL "16418",NOT PI
  5166 PRINT AT CODE "*",NOT PI;G$
  5170 PRINT AT PI/PI,NOT PI;
  5180 RETURN
  5190 CLS
  5195 RAND USR G
  5200 PRINT AT VAL "6",VAL "7";"HORREUR."
  5210 FOR Z=NOT PI TO CODE "+"
  5230 PRINT AT VAL "11",VAL "4";"++++++++++++++";AT Z,Z;"";AT VAL "11",VAL "4";"vous«etes«mort";AT Z,CODE "+"-Z;""
  5270 NEXT Z
  5280 LET A$="½½½½½½½½½½"
  5290 FOR Z=CODE "+" TO NOT PI STEP -PI/PI
  5300 PRINT AT Z,CODE "-";A$
  5310 NEXT Z
  5320 GOTO VAL "9999"
  5330 POKE VAL "16518",CODE "«"
  5340 CLS
  5350 RAND USR G
  5360 PRINT AT VAL "6",INT PI;"vous«etes«dans«l•obscurite"
  5370 PRINT AT VAL "7",INT PI;N$
  5390 GOSUB VAL "4320"
  5400 IF Q(CODE "£") THEN RETURN
  5410 GOTO VAL "5340"




Juste une petite chose:
Dans:
Code :
  4891 IF M1 AND H10=VAL "5" THEN PRINT "vOUS AVEZ FROID."
  4893 IF M1 AND H10=VAL "5" THEN LET VI=VI-PI/PI
  4900 IF M1 AND H10=VAL "8" THEN PRINT "vOUS VENEZ DE TOUSSER"


4891 IF NOT M1 THEN GOTO 4910
4893 IF H10=VAL "5" THEN LET VI=VI-PI/PI
4900 PRINT ("vOUS AVEZ FROID." AND H10=VAL "5")
;("vOUS VENEZ DE TOUSSER" AND H10=VAL "8" );
4910 ....

On peux appliquer des simplifications qui accélèrent le traitement et on gagne Encore des octets!

_________________
Modo Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr & http://abandonlistings.free.fr/tilt/


Haut
   
 Sujet du message : Re: ZX81 France, les fichiers...
Message non luPosté : 15-11-2018 02:39 
Hors ligne
Legendary
Avatar du membre

Enregistré le : 22-02-2012 08:00
Messages : 488
Le plan complet de Cristal 5...

Fichier(s) joint(s) :
Plan.jpg
Plan.jpg [ 52.68 Kio | Vu 234 fois ]

_________________
Modo Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr & http://abandonlistings.free.fr/tilt/


Haut
   
Message non luPosté : 15-11-2018 06:03 
Hors ligne
Legendary
Avatar du membre

Enregistré le : 22-02-2012 08:00
Messages : 488
Salut,

Voici une démo deux en un... avec compression par suppression de redondance, et LZ.

Donc, voici le fichier exemple.
Fichier(s) joint(s) :
CRUNCHED.zip [13.03 Kio]
Téléchargé 10 fois


Utitisant le compresseur DOS Pucrush.exe
32 images, soit 792*32= 25344 octets pour 16k de RAM!

Sources:
Fichier(s) joint(s) :
routine_LZ_ZX81.zip [63.97 Kio]
Téléchargé 10 fois

Fichier(s) joint(s) :
encodage_multi_zx81.zip [10.22 Kio]
Téléchargé 10 fois

Fichier(s) joint(s) :
PUCrunch_Z80.zip [64.79 Kio]
Téléchargé 10 fois


Code :
; ******************************************************
; **       Librería de rutinas para Amstrad CPC/GB    **
; **      Raúl Simarro,      Artaburu 2007       **
; ******************************************************
;
; Addaptée pour le ZX81 par XavSnap.

; datos necesarios que vienen en la pila:
; ORIGEN   HL
; DESTINO   DE


;------- TASM ASM mnemonics. -------
; Compile this file using:
; Set TASMOPTS = -b
; tasm -80 ThisCode.tas MyBinary.BIN
;-----------------------------------
; Zx81 Program name:

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

#include "ZX81.sym" ; Load the symbol file.

ORG 16514

   pop af
   pop de
   pop hl

   ; ****** Unpack pucrunch data ******

pucrunch:
   LD DE,(Dest_ADD) ; Entry Source packed data
   push   de        ; destination pointer to 2nd register 

        LD HL,(Sour_ADD) ; Destination for unpacked data

   exx             ; set 
   pop   de   
   push   hl
   push   de
   push   bc
   push   af
   exx      ; read the header self-modifying the
         ; parameters straight into the code
         ; skip useless data
   ld bc,6
   add hl,bc       ; skip "**PU**"
   ld   a, (hl)    ; starting escape
   inc   hl 
   ld   (escPu+1), a
   inc   hl        ; skip useless data "X"
   inc   hl 
   ld   a, (hl)       ; number of escape bits 
   inc   hl 
   ld   (escPub0+1), a
   ld   (escPub1+1), a
   ld   b, a          ; 8 - escape bits
   ld   a, 8 
   sub   b
   ld   (noescPu+1), a
   ld   a, (hl)       ; maxGamma + 1
   inc   hl 
   ld   (MaxGamma+1), a
   ld   b, a          ; 8 - maxGamma 
   ld   a, 9
   sub   b 
   ld   (Max8Gamma+1), a
   ld   a, (hl)       ; (1 << maxGamma)
   inc   hl 
   ld   (Max1Gamma+1), a 
   add   a, a         ; (2 << maxGamma) - 1 
   dec   a 
   ld   (Max2Gamma+1), a   
   ld   a, (hl)       ; extra lz77_0 position bits
   inc   hl
   ld   (ExtraBits+1), a
   inc   hl           ; skip useless data
   inc   hl
   ld   e, (hl) ; RLE table length 
   ld   (tablePu+1), hl       ; RLE table pointer
   inc   hl
   ld   d, 0
   add   hl, de
   ld   c, $80        ; start decompression
   jr   loop_u

newescPu:
     ld   a, (escPu+1)  ; save old escape code 
     ld   d, a

escPub0:
     ld   b, 2        ; ** parameter
     xor   a          ; get new escape code 
     call   get_bits 
     ld   (escPu+1), a 
     ld   a, d

noescPu:
     ld   b, 6         ; ** parameter 
     call   get_bits      ; get more bits to complete a byte
     exx            ; output the byte
     ld   (de), a
     inc   de
     exx

loop_u:
     xor   a

escPub1:
     ld   b, 2         ; ** parameter 
     call   get_bits      ; get escape code

escPu:
     cp   0         ; ** parameter   
     jr   nz, noescPu   
     call   get_gamma      ; get length   
     exx
     ld   b, 0   
     ld   c, a   
     exx   
     cp   1   
     jr   nz, lz77_0      ; lz77_0   
     xor   a   
     call   get_bit   
     jr   nc, lz77_0_2    ; 2-byte lz77_0
     call   get_bit   
     jr   nc, newescPu    ; escaped literal byte
     call   get_gamma     ; get length 
     exx
     ld   b, 1
     ld   c, a
     exx

Max1Gamma:
     cp   64              ; ** parameter   
     jr   c, chrcode      ; short RLE, get bytecode
Max8Gamma:
     ld   b, 2            ; ** parameter
     call   get_bits      ; complete length LSB
     ex   af, af' 
     call   get_gamma     ; length MSB 
     exx 
     ld   b, a   
     ex   af, af' 
     ld   c, a
     exx
chrcode:
     call   get_gamma     ; get byte to repeat 
     push   hl
tablePu:
     ld   hl, $0000       ; ** parameter   
     ld   d, 0   
     ld   e, a   
     add   hl, de   
     cp   32   
     ld   a, (hl) 
     pop   hl   
     jr   c, dorle   
     ld   a, e      ; get 3 more bits to complete the   
     ld   b, 3      ; byte   
     call   get_bits
dorle:
     exx            ; output the byte n times   
     inc   c
dorlei:
     ld   (de), a   
     inc   de   
     dec   c   
     jr   nz, dorlei   
     dec   b   
     jr   nz, dorlei   
     exx
     jr   loop_u
lz77_0:
     call   get_gamma ; offset MSB
Max2Gamma:
     cp   127         ; ** parameter   
     ; ret   z   
     jr   z, fin      ; EOF, return   
     dec   a          ; (1...126 -> 0...125)
ExtraBits:
     ld   b, 0        ; ** parameter   
     call   get_bits  ; complete offset MSB
lz77_0_2:
     ex   af, af'   
     ld   b, 8        ; offset LSB   
     call   get_bits   
     cpl              ; xor'ed by the compressor   
     exx              ; combine them into offset   
     ld   l, a   
     ex   af, af'   
     ld   h, a   
     inc   hl   
     xor   a          ; CF = 0   
     push   de        ; (current output position) - (offset)
     ex   de, hl 
     sbc   hl, de
     pop   de
     inc   bc
     ldir              ; copy
     exx   
     jp   loop_u

;## Get a bit from the source stream.
;## Return    CF = result
get_bit:
     sla   c         ; shift next bit into CF   
     ret   nz   
     ld   c, (hl)    ; get next byte   
     inc   hl        ; increase source stream pointer   
     rl   c          ; shift next bit into CF, bit0 = 1   
     ret

;## Get multiple bits from the source stream.
;## In        B = number of bits to get
;## Return    A = result
get_bits:
     dec   b   
     ret   m   
     sla   c         ; shift next bit into CF   
     jr   nz, gb1   
     ld   c, (hl)    ; get next byte   
     inc   hl        ; increase source stream pointer   
     rl   c          ; shift next bit into CF, bit0 = 1
gb1:
          rla             ; rotate next bit into A
     jr   get_bits

;## Get an Elias Gamma coded value from the source stream.
;## Return    A = result
get_gamma:
     ld   b, 1
MaxGamma:
     ld   a, 7       ; ** parameter
gg1:
     call   get_bit  ; get bits until 0-bit or max
     jr   nc, gg2
     inc   b 
     cp   b
     jr   nz, gg1
gg2:
     ld   a, 1         ; get the actual value
     dec   b
     jr   get_bits

fin:   ; Restauramos los registros dobles y vuelta limpia
          exx
;     LD HL,(Dest_ADD)
;     EX DE,HL
;     SBC HL,DE
;     LD (PIC_LEN+1),HL
     pop   af
     pop   bc
     pop   de
     pop   hl
     exx     ;ret   
     ret   

Sour_ADD: ; Entry Source packed data
   dw Entry_DATAs

Dest_ADD: ; Destination for unpacked data
   dw $4400
LoadScr:
   LD HL,(Dest_ADD)
   LD DE,(RAM_D_FILE)
   INC DE
PIC_LEN:
   LD BC,$0318
   LDIR
   RET

Entry_DATAs:
.end

_________________
Modo Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr & http://abandonlistings.free.fr/tilt/


Haut
   
Message non luPosté : 09-12-2018 04:46 
Hors ligne
Legendary
Avatar du membre

Enregistré le : 22-02-2012 08:00
Messages : 488
Salut à tous,

Suite à une question sur le remplissage d'un écran avec un caractère...
J'ai trouvé 6 façons de programmer le ZX81, pour faire la même chose!
Cela démontre la richesse de ce langage à première vu simple et rudimentaire.
La vitesse d'exécution varie naturellement de routine en routine...

A vous d'en juger...

Voici la source:
Code :
#include ZX81.sym

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

;------- Rom and Ram Symbols -------
RAM_D_FILE equ $400C ; D_file address.
EXTERR equ $005B ; Basic Break function ! Ignore line instructions.
CURSEUR equ $8F5 ; Point to PRINT AT DEST.(BC=X,Y)
CHAINE equ $B6B ; PRINT A CHAINE (BC=LEN;DE=TEXT LOC)
   
ORG 16514

;--------- Routine 1 ----------   
   LD BC,0000
   CALL CURSEUR
   LD BC,22*32
LOOP1:
   LD A,157 ; '1'
   RST 10H
   DEC BC
   LD A,B
   OR C
   JR NZ,LOOP1
   RET
;--------- Routine 2 ----------

   LD HL,(RAM_D_FILE)
   LD B,158 ; '2'
   LD DE,32*24+23
LOOP2:
   LD A,$76
   INC HL
   CP (HL)
   DEC DE
   JR Z,LOOP2
   LD (HL),B
   LD A,D
   OR E
   RET Z
   JR LOOP2

;--------- Routine 3 ----------

   LD HL,(RAM_D_FILE)
LOOP3:
   INC HL
   LD D,H
   LD E,L
   INC DE
   LD A,159 ; '3'
   LD (HL),A
   LD BC,31
   LDIR
   LD A,$80
   EX DE,HL
   INC HL
   CP (HL)
   EX DE,HL
   RET Z
   INC HL
   JR LOOP3

;--------- Routine 4 ----------

   LD HL,(RAM_D_FILE)
   INC HL
   LD D,H
   LD E,L
   INC DE
   LD A,160 ; '4'
   LD (HL),A
   LD BC,31
   LDIR
   LD BC,$0100
   CALL CURSEUR
   LD L,21

LOOP4:

   LD DE,(RAM_D_FILE)
   INC DE
   LD BC,32
   CALL CHAINE
   DEC L
   RET Z
   RET Z
   JR LOOP4

;--------- Routine 5 ----------

Lb40A4:
   LD BC,0000
   CALL CURSEUR
      LD HL,$03BF
Lb40A7:
      LD A,161 ; '5'
      RST 10H ; Display= A reg.
      LD A,$00
      DEC HL
      CP H
      JR NZ, Lb40A7 ; [$40A7:16551]
      RET ; ==========================

;--------- Routine 6 ----------

   LD BC,0000
   CALL CURSEUR
      LD BC,$BF02 ; $FF+$FF+$BF
LOOP5:
      LD A,161 ; '6'
      RST 10H ; Display= A reg.
      LD A,$00
      DJNZ LOOP5 ; if B<>0
      LD B,$FF
      DEC C
      JR NZ, LOOP5
      RET ; ==========================
   
.end

_________________
Modo Abandon-Listings [XavSnap]: http://www.hebdogiciel.free.fr & http://abandonlistings.free.fr/tilt/


Haut
   
Afficher les messages postés depuis :  Trier par  
Poster un nouveau sujet  Répondre au sujet  [ 25 messages ]  Aller à la page Précédente 1 2

Heures au format UTC+01:00


Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas modifier vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher :
Aller à :  
cron
Développé par phpBB® Forum Software © phpBB Limited
Traduit par phpBB-fr.com