ZX81 France, les fichiers...

Modérateur : XavierSnp

Avatar du membre
jsm
Citizen
Messages : 6
Enregistré le : 20-06-2018 12:54

Re: ZX81 France, les fichiers...

Message non lu par jsm »

Merci pour ce joli teasing et cette introduction.

Pour les 2,2ko de gagné, c’est énorme :lol:
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

Re: ZX81 France, les fichiers...

Message non lu par XavierSnp »

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 : 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:\
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 : Tout sélectionner

  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!
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

Re: ZX81 France, les fichiers...

Message non lu par XavierSnp »

Le plan complet de Cristal 5...
Plan.jpg
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

Compression sur ZX81 32 images plein ecran dans 16k.

Message non lu par XavierSnp »

Salut,

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

Donc, voici le fichier exemple.
CRUNCHED.zip
(13.03 Kio) Téléchargé 131 fois
Utitisant le compresseur DOS Pucrush.exe
32 images, soit 792*32= 25344 octets pour 16k de RAM!

Sources:
routine_LZ_ZX81.zip
(63.97 Kio) Téléchargé 123 fois
encodage_multi_zx81.zip
(10.22 Kio) Téléchargé 121 fois
PUCrunch_Z80.zip
(64.79 Kio) Téléchargé 124 fois

Code : Tout sélectionner

; ******************************************************
; **       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
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

L'ASM ZX81, six façons de programmer...

Message non lu par XavierSnp »

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 : Tout sélectionner

#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
Avatar du membre
jsm
Citizen
Messages : 6
Enregistré le : 20-06-2018 12:54

Re: ZX81 France, les fichiers...

Message non lu par jsm »

Spacio jeep

Petit jeu d'arcade sur ZX81 qui vient du Hebdogiciel 46

Suite à une discussion avec son auteur Nicolas Trub, j'ai voulu tester :D
Spacio jeep.jpg
Spacio jeep.jpg (45.3 Kio) Vu 3532 fois


La phase 2 avec les rochers est difficile : il faut appréhender la distance fixe de son laser...mais c'est faisable !


Spatio Jeep_n46 [ZX81].zip
(119.35 Kio) Téléchargé 117 fois
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

Re: ZX81 France, les fichiers...

Message non lu par XavierSnp »

Salut,

Petite curiosité présente sur le "Micro-7" n°22.

Fonction 'Line' en assembleur et animation.

("espace"+RUN pour dessiner les vecteurs de début "F" pour les vecteurs de fin & curseurs+"T" pour tracer!)
M7_22_Metamorphose.gif
M7_22_Metamorphose.gif (5.6 Kio) Vu 3518 fois
M7_22_Metamorphose.zip
(11.18 Kio) Téléchargé 117 fois

Listing papier ici: http://abandonlistings.free.fr/micro7/pdf_1.htm

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 [META.P] : SAVE"META" Line 999
; REM   line   name: 1 REM:   247 Bytes@4082-4178

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

;------------------------------------
;-Basic sub-routine entry.          -
;+----------------------------------+
; Lb4084  ;  <- USR Basic Enty.
; Lb40F0  ;  <- USR Basic Enty.
; Lb4102  ;  <- USR Basic Enty.
; Lb4114  ;  <- USR Basic Enty.
; Lb4134  ;  <- USR Basic Enty.
; Lb4159  ;  <- USR Basic Enty.
; Lb4164  ;  <- USR Basic Enty.
;+----------------------------------+

;------- Rom and Ram Symbols -------
RAM_LAST_K equ $4025
DECODE equ $07BD
RAM_SPARE2 equ $407B
RAM_VARS equ $4010
RAM_D_FILE equ $400C


ORG $4082 ; [@16514/@h4082]
Lb4082:
	INC D 
	LD A,H 
Lb4084: ; <- USR Basic Enty.
	LD BC,(RAM_LAST_K) ; GET LAST-K
	LD D,C 
	INC D 
	JR NZ, Lb4090 ; [$4090:16528]
	LD BC,$0000 
	RET ; ==========================

Lb4090:
	CALL DECODE ; [DECODE]
	LD A,(HL) 
	LD BC,(RAM_SPARE2) ; GET UNUSED-16
	CP $21 ; [33-"5"]
	JR NZ, Lb409F ; [$409F:16543]
	DEC C 
	JR Lb40CE ; [$40CE:16590]
Lb409F:
	CP $22 ; [34-"6"]
	JR NZ, Lb40A6 ; [$40A6:16550]
	DEC B 
	JR Lb40CE ; [$40CE:16590]
Lb40A6:
	CP $23 ; [35-"7"]
	JR NZ, Lb40AD ; [$40AD:16557]
	INC B 
	JR Lb40CE ; [$40CE:16590]
Lb40AD:
	CP $24 ; [36-"8"]
	JR NZ, Lb40B4 ; [$40B4:16564]
	INC C 
	JR Lb40CE ; [$40CE:16590]
Lb40B4:
	LD BC,$0000 
	CP $2A ; [42-"E"]
	JR NZ, Lb40BF ; [$40BF:16575]
	LD BC,$00F5 
	RET ; ==========================

Lb40BF:
	CP $2B ; [43-"F"]
	JR NZ, Lb40C7 ; [$40C7:16583]
	LD BC,$0131 
	RET ; ==========================

Lb40C7:
	CP $39 ; [57-"T"]
	RET NZ 
	LD BC,$00BE 
	RET ; ==========================

Lb40CE:
	LD A,C 
	CP $FF ; [255]
	JR NZ, Lb40D5 ; [$40D5:16597]
	LD C,$00 
Lb40D5:
	CP $40 ; [64]
	JR NZ, Lb40DB ; [$40DB:16603]
	LD C,$3F 
Lb40DB:
	LD A,B 
	CP $01 ; [1]
	JR NZ, Lb40E2 ; [$40E2:16610]
	LD B,$02 
Lb40E2:
	CP $2C ; [44-"G"]
	JR NZ, Lb40E8 ; [$40E8:16616]
	LD B,$28 
Lb40E8:
	LD (RAM_SPARE2),BC ; SET UNUSED-16
	LD BC,$0000 
	RET ; ==========================

Lb40F0: ; <- USR Basic Enty.
	LD HL,(RAM_VARS) ; GET VARS
	LD BC,$0006 
	ADD HL,BC 
	EX DE,HL 
	LD HL,(RAM_D_FILE) ; GET D-FILE
	INC HL 
	LD BC,$02B5 
	LDIR 
	RET ; ==========================

Lb4102: ; <- USR Basic Enty.
	LD DE,(RAM_D_FILE) ; GET D-FILE
	INC DE 
	LD HL,(RAM_VARS) ; GET VARS
	LD BC,$0006 
	ADD HL,BC 
	LD BC,$02B5 
	LDIR 
	RET ; ==========================

Lb4114: ; <- USR Basic Enty.
	LD A,$12 
	LD HL,(RAM_VARS) ; GET VARS
	LD BC,$0006 
	ADD HL,BC 
Lb411D:
	LD DE,(RAM_D_FILE) ; GET D-FILE
	INC DE 
	LD BC,$02B5 
	LDIR 
	LD B,$0A 
Lb4129:
	LD C,$80 
Lb412B:
	DEC C 
	JR NZ, Lb412B ; [$412B:16683]
	DJNZ Lb4129 ; [$4129:16681]
	DEC A 
	JR NZ, Lb411D ; [$411D:16669]
	RET ; ==========================

Lb4134: ; <- USR Basic Enty.
	LD A,$12 
	LD HL,(RAM_VARS) ; GET VARS
	LD BC,$30BF 
	ADD HL,BC 
Lb413D:
	PUSH HL 
	LD HL,(RAM_D_FILE) ; GET D-FILE
	LD BC,$02B5 
	ADD HL,BC 
	EX DE,HL 
	POP HL 
	LD BC,$02B5 
	LDDR 
	LD B,$0A 
Lb414E:
	LD C,$80 
Lb4150:
	DEC C 
	JR NZ, Lb4150 ; [$4150:16720]
	DJNZ Lb414E ; [$414E:16718]
	DEC A 
	JR NZ, Lb413D ; [$413D:16701]
	RET ; ==========================

Lb4159: ; <- USR Basic Enty.
	LD HL,(RAM_VARS) ; GET VARS
	LD BC,$0006 
	ADD HL,BC 
	LD (Lb4082),HL 
	RET ; ==========================

Lb4164: ; <- USR Basic Enty.
	LD HL,(RAM_D_FILE) ; GET D-FILE
	INC HL 
	LD DE,(Lb4082) 
	LD BC,$02B5 
	LDIR 
	LD (Lb4082),DE 
	RET ; ==========================

.end

Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

Triche: Stock-Car

Message non lu par XavierSnp »

Faire un Break après le chargement:
FAST
RAND USR 836

(Chargement...)
LIST

BIDOUILLE-GRENOUILLE Hebdogiciel 94-97:
Tiens, ça faisait. longtemps que j'avais rien donné sur ZX 81.
C'est. pari, grâce à James Chaput. Pour Stock-car, voici un truc qui permet de ne rencontrer aucune voiture sur les 15 Kms du trajet. Arrêtez le programme une fois chargé par BREAK et entrez les lignes suivantes:
9920 FOR I = 16584 TO 16598
9930 POKE I,0
9940 NEXT I
9950 RUN
Et lancez le fonctionnement par GOTO 9920.
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

Article sur le FLM pour Zx81...

Message non lu par XavierSnp »

Salut,

Petit article de Patrick Gueulle sur le FLM.
Radio Plans 429 1983-08-mini.jpg
Radio Plans 429 1983-08-mini.jpg (43.64 Kio) Vu 3319 fois
http://zx81.ordi5.free.fr/fastload/radi ... -08-54.jpg
http://zx81.ordi5.free.fr/fastload/radi ... -08-56.jpg
http://zx81.ordi5.free.fr/fastload/radi ... -08-55.jpg

Bonne lecture !
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

Tuto Kicad...

Message non lu par XavierSnp »

Salut à tous,

Avant de vous présenter des circuits électroniques, je vous donne la démarche pour la création d'un circuit imprimé.

Attention, la démarche est modulaire, et cela demande des automatismes qui ne sont pas très intuitifs…
En deux mots, le "Game-play" est très particulier.

Le principal, c'est de ne pas ce perdre dans toutes les fonctions, couches et librairies qui embrouillent quelque-peu la première approche du novice.

Kicad est conçu de deux programmes principaux distincts, Eeschema et PCBnews.

Le créateur de schéma et le concepteur de typons pour la création de PCBs.

Même si le PCB peut ce faire directement sur PCBnews, mais pour cela, il vous faudra un modèle, car la vérification automatique ne vous indiquera pas les erreurs ou oublis d'interconnections sur votre dessin.

Donc, la création se fait en deux étapes. Le schéma donnera la liste "Net" pour attribuer à chaque "Pin" une liaison à un composant ou une zone d'alimentation.

Le concept est simple, une librairie pour les symboles de schéma et un librairie pour les "traces" sur le PCB.

Pour un montage simple, cela ne pose pas de problèmes... mais vous allez voir que tout ce complique sur un montage... qui date d'un trentaine d'années.

En effet, sur un librairie de plusieurs milliers de symboles, non seulement vous cherchez des heures le bon symbole, mais surtout, 99,9% des symboles ne vous serviront pas!

Pire... "LE" symbole que vous aurez à placer, ne sera pas dans cette monstrueuse collection.

En effet, pour la rétro-électronique, ces librairies sont trop récentes et ne sont pas adaptées à des recréations ou des créations au format de la machine.

Après avoir passé des heures à rechercher "Kicad Connecteur ZX81" sur le net, il vous faudra vous résoudre à faire le boulot vous-même.
Résultat, une heure de plus pour créer vous-même le symbole et la trace du composant en question à chaque fois.
Ne vous basez pas sur l'aspect "collaboratif" de la mise à disposition des librairies, car les mises à jour sont rares, et ne concernera pas les anciennes technologies qui faisait le charme de notre bonne vieille machine.

Méfiez-vous aussi des symboles proposés, certains sont incompatibles et ont des noms de pin (alim.) exotiques, parfois même erronés.

Pour le moment, oubliez les librairies et le fourre-tout de symboles mis à votre disposition.

Restons sobre, pour éviter l'arrachage de cheveux à la première utilisation...

Le projet va décrire la création d'un schéma, la création d'un "Netlist" et la liaison entre les deux programmes Eeschema et PcbNew.

- Création du schema. (étape 1)
- Faire un Netlist.
- Créer le lien vers PCBnew pour attribuer les n°de pins à la trace future du PCB.
- Importer les composants de Eeschema. (étape 2)
- Tracer les pistes et les limites du PCB.

/on ne touche pas aux librairies, icones barrées)
Image

Eeschem:

1) Placer un symbole Diode LED, la résistance, les connecteurs.
2) Place un symbole d'alimentation… GND, VCC et PWR_FLAG(Qui est obligatoire!?)
3) Place une liaison… sur les "o" des composants non raccordés.
4) Toute connection "o" sont à relier, donc le "x" indique que la liaison est "en l'air" (non connectée)
5) C'est un label dit "local", sur la même page) qui donne un nom de renvoie pour une connection.
Si elle est répétée, le fil ou le composant sera relié.
Sauf pour VCC ou GND qui le seront automatiquement (PWR_FLAG?).
6) Obligatoire pour générer (importation sur PCBnew) une liste de "trace"/composants correspondant aux symboles des composants.
7) Créer un "NetList" sur disque dur. ( liste des connections des composants)

Image

Ajoutons les symboles d'alimentation… VCC, GND (masse) et PWR_FLAG
Touche "R" pour la rotation du symbole et "insert" pour répéter le même symbole.

Image

Image

On passe au symboles généraux: Filtre "R" ,"LED" et "conn_" pour trouver plus facilement le symbole.

Image

Image

Les symboles n'ont pas de nom!
Soit on fait "E" (édition) et on change le N° du symbole… soit on le fait automatiquement (icônes à gauche de la coccinelle).

Image

Préparation pour la liaison Eeschéma/PcbNew…
On choisie le futur tracé sur le PCB…
Attention, le choix est pénible… entre THT (composants discrets) et SMD (CMS-composants de surface)… les tailles, les models, les marques…
ça peut prendre du temps, surtout que les filtres sont déroutants et cachent parfois le composant qu'il nous faut!

Pour la diode:
Image

Pour la résistance:
Image

On ouvre PCBnews.
Chargement du "NetList" (à importer depuis Eeschema)

Image

Puis, on importe les traces sélectionnée dans Eeschema…

Image

Bon, on place les composants ("R' pour la rotation, "E" pour éditer le composant)
"F.cu" pour la face avant (Face composant)
"B.cu" pour la face arrière (Face cuivre)
"x.Silks" pour la sérigraphie
"Edge.cuts" pour le dessin du contour de la plaque époxy.

Image

On place les pistes… les traits blanc du "chevelu" s'effacent.
Puis, on clique l'icône de la coccinelle pour la vérification du PCB…

Image


Ajout d'un connecteur: … on retourne dans le créateur de schéma….
Le problème en cas d'ajout, c'est qu'il faut l'ajouter sur le schéma !
Donc, on sauvegarde le PCB… puis on retourne sur Eeschema.
Et on fait comme avec la diode et la résistance.

Image

On réserve l'empreinte pour PCBnew…
Et on met à jour le NetList… un petit coup de coccinelle pour voir si il n'y a rien d'oublié...

Image

Image

On retourne sur PCBnew, et on rafraîchie les empreintes…
Le connecteur est ajouté.
Image

On le place, et on fait les pistes…

Image

Puis, une petite vue 3D de votre oeuvre… ("Affichage/visualiseur 3D")

Image

C'est beau !

Compris ?

Voilà le projet:
Tuto.zip
(243.55 Kio) Téléchargé 112 fois
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

Kicad Librairies Zx81.

Message non lu par XavierSnp »

Salut,

Voilà ! les présentations sont faites.

Vous l'avez compris, Kicad est notre ami pour divers bricolages… virtuels ou réels.
Nous allons commencer par reprendre les montages de Patrick Gueulle de RadioPlan…

Je vais proposer au fil de l'eau, pour passer le temps, différents montages électroniques au format Kicad, dans sa version originale ou modifiée.

Mais avant, pour vous éviter de chercher les symboles pour Zx81, voici ma collection que je nourrie au grès de mes réalisations.
schema.gif
schema.gif (30.08 Kio) Vu 3301 fois
empreintes.JPG
empreintes.JPG (71.5 Kio) Vu 3301 fois
3d.jpg
3d.jpg (135.15 Kio) Vu 3301 fois
A télécharger ici:
http://zx81.ordi5.free.fr/brico/tutokicad/ZX81_Libs.zip
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

[montage Zx81] PCB d'extension.

Message non lu par XavierSnp »

Salut,
Pour le premier montage, on commence petit.

C'est en effet, le petit bout de circuit imprimé qui permet de relier une carte d'extension à une autre carte… pour y placer le boîtier de la RAM 16k par exemple…
Back_Ext.jpg
Back_Ext.jpg (55.39 Kio) Vu 3301 fois
… Et le fichier projet Kicad…
Back_Ext.zip
(259.73 Kio) Téléchargé 106 fois
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

[RADIOPLANS] Carte Eprom pour ZX81 n428.

Message non lu par XavierSnp »

Salut,

Montage de Patrick Gueulle, modifié pour tenir sur une carte sur le Bus du Zx81, pour éviter des tonnes de fils…
Radioplan n°428 pages 83 à 87. (Juillet 1983)
EpromZx81.jpg
EpromZx81.jpg (72.64 Kio) Vu 3301 fois
Projet Kicad:
http://zx81.ordi5.free.fr/brico/radioplan/EpromZx81.zip
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

[RADIOPLANS] Carte 20 sorties pour ZX81 n426.

Message non lu par XavierSnp »

Montage de Patrick Gueulle, non modifié.
Radioplan n°426 pages 23 à 29. (Mai 1983)

Bon, à vrai dire, il n'est pas utile de se prendre la tête avec le schéma avec Kicad.
Si l'on veux fabriquer le PCB dans sa forme originale, il faut refaire un tuto !

Donc, un dessin de PCB vous est donné.
Image


Sur Kicad, le PCB "B.Cu" (face cuivre) est en vue traversante, en transparence.
[B.Cu]= Back copper (face cuivre) et [F.Cu]= Front copper (face composants par défaut).

Ce qui est illogique car la norme veux que le typon soit vu côté arrière, donc retourné par rapport à la face composants.
Donc, sur kicad, la vue arrière doit être retournée en symétrie horizontale(le haut se trouve en bas) avec un logiciel de dessin.
Recadrez le typon au plus juste, au niveau des repères de coupe de la plaque époxy, cela permutera de d'avoir une idée de la dimension d'origine… quite à faire des marques à chaque coin.

Pour numériser la face cuivre, nous allons utiliser le logiciel de vectorisation d'image bitmap (l'icône "a" avec les cotations dans la fenêtre de projet).

Donc on prend l'image du pcb à realiser, on note sa valeur de résolution en DPI, on effectue une symétrie selon l'axe des X, puis on applique une inversion de l'image dans la fenêtre.
Image

Puis on sauvegarde en Kicad_mod.

On ouvre PCBnews, puis le gestionnaire d'empreintes ("Editeur d'empreintes") et on importe le fichier dans "Fichier/files" de l'éditeur.

On le sauvegarde dans une librairie… la première pour éviter de chercher trop loin.
On retourne sur PCBnew, et on insert le "Logo" que l'on vient de créer.

On vérifie la dimension , l'hortométrie horizontale et verticale… pour voir si les yeux sont en face des trous.

Dans le cas où il y a une différence, il faut revenir dans le programme de vectorisation est taper au pif sur les DPI avec un poil de DPI en plus ou en moins… puis recharger l'empreinte… puis revérifier.
Trois ou quatre essais peuvent être utiles… mais avec du bol, c'est moins.


Image

Bon, la couche est en "F.Silks" (sérigraphie de face) est pas en "B.Cu" ! (cuivre arrière)

Donc, c'est nul ton truc… !

Pas de panique, on ouvre le fichier ".kicad_mod" avec un éditeur texte…
Puis on remplace les "F.Silks" (sérigraphie) par des "B.Cu" (back copper face)…
Et le tour est joué.
On rechage le "Logo" sensé être une sérigraphie, et Ho! il est sur la face cuivre.

Image

On pose les pins un à un…

Image

Voilà, c'est fait.



Résultat:
Image
Image


Et le projet en téléchargement:
http://zx81.ordi5.free.fr/brico/radiopl ... _Kicad.zip

Pour le coût de fabrication, les prix sont très variables.
De 3 euros le PCB (par 10, ça divise le prix par dix et le prix est le même soit 30€ la commande) à 40 euros le PCB aux US (x10 donc 400€ la commande).

Devis ici: https://pcbshopper.com/

Mais sincèrement, les PCB chinois sont de très bonne facture pour des réalisations en composants discrets et de l'ordre du millimètre, on ne fabrique pas une fusée.
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

[RadioPlans] Afficheur 32 caractères.

Message non lu par XavierSnp »

Salut,

Autre illustration d'une digitalisation de typon: Afficheur 32 caractères pour ZX81.
De Patrick Gueulle, numéro 428 pages 47 à 55.

Fichiers Kicad: http://zx81.ordi5.free.fr/brico/radioplan/Afficheur.zip


Afficheur.jpg
Afficheur.jpg (92.6 Kio) Vu 3283 fois
Afficheur2.jpg
Afficheur2.jpg (67.8 Kio) Vu 3283 fois
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

[RadioPlans] Carte son Ay-3-8910.

Message non lu par XavierSnp »

Salut,

Montage "Carte son Ay-3-8910" de Patrick Gueulle, modifié pour tenir sur une carte sur le Bus du Zx81, pour éviter les fils volants…
But non avoué par le créateur: les circuits double-faces sont difficiles à réaliser (pour les lecteurs).

Radioplan n°425 pages 43 à 52. (Juillet 1983)

Erratum dans le n°433, page 57-58.
Kicad_AY8910.jpg
Kicad_AY8910.jpg (75.54 Kio) Vu 3280 fois
http://zx81.ordi5.free.fr/brico/radiopl ... _Board.zip
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

[RadioPlans] Carte son Ay-3-8910.

Message non lu par XavierSnp »

Salut,

Même chose mais plus original.

Face composants:
Kicad_AY8910_F.jpg
Kicad_AY8910_F.jpg (64.89 Kio) Vu 3280 fois
Face cuivre:
Kicad_AY8910_B.jpg
Kicad_AY8910_B.jpg (77.01 Kio) Vu 3280 fois
http://zx81.ordi5.free.fr/brico/radiopl ... AY8910.zip
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

[RadioPlans] Afficheur 16x2 pour Zx81.

Message non lu par XavierSnp »

Salut,

Projet dérivé de l'afficheur 32 caractères, mais avec un afficheur disponible (en 2x16 caractères).
Version sur BUS d'extension.
De Patrick Gueulle, numéro 428 pages 47 à 55.(Modifications XavSnap)

Afficheur_board.jpg
Afficheur_board.jpg (74.85 Kio) Vu 3271 fois
Afficheur_board2.jpg
Afficheur_board2.jpg (62.64 Kio) Vu 3271 fois
Projet Kicad: http://zx81.ordi5.free.fr/brico/radiopl ... _Board.zip
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

[Radio Plans] Carte Z80 compatible ZX81.

Message non lu par XavierSnp »

Salut,

Nouveau message, nouvelle réalisation.
Une carte automate à base de Z80 de Patrick Gueulle, Dans Le "Radio Plans" n°427 page 71.
Projet non modifié mono-face et lignes d'adresses en wrapping.
carteZ80.jpg
carteZ80.jpg (101.59 Kio) Vu 3249 fois
Projet Kicad:
http://zx81.ordi5.free.fr/brico/radioplan/carteZ80.zip


pcb.jpg
pcb.jpg (201.38 Kio) Vu 3248 fois
Avatar du membre
XavierSnp
Legendary
Messages : 749
Enregistré le : 22-02-2012 08:00
Contact :

Re: ZX81 France, les fichiers...

Message non lu par XavierSnp »

Salut,
Même carte en circuit double-faces, sans les fils de wrapping du montage précédent.
carteZ80.jpg
carteZ80.jpg (107.52 Kio) Vu 3244 fois
carteZ802.jpg
carteZ802.jpg (167.47 Kio) Vu 3244 fois
carteZ803.jpg
carteZ803.jpg (101.62 Kio) Vu 3244 fois
pcb.JPG
pcb.JPG (148.16 Kio) Vu 3244 fois
Projet Kicad:
http://zx81.ordi5.free.fr/brico/radiopl ... _board.zip
Répondre