( Programme de veille novaes. Version 1.00 du 18 Juillet 2010. Ecrit par jpb.forth . ) DECIMAL ( Zone obligatoire d'echange: 0 --> adresse du programme de veille sur 4 octets 4 --> adresse des limites de la zone affichable sur 4 octets mise a jour par le systeme 8 --> adresse du programme de configuration des parametres sur 4 octets a 0 si pas de parametres 12 --> adresse du programme d'initialisation sur 4 octets a 0 si pas d'initialisation ) HERE 8 ALLOT CONSTANT INDX_VEILLE ( Zone facultative des parametres: definie selon les necessites du programme de veille ) HERE 2 4 256 * + 2/ ALLOT CONSTANT ZONE_NOVAES 16 VARIABLE NOMBRE BIN HERE 0000000000000000 , ( 0 ) 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000010000000 , 0000000111000000 , 0000000010000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , ( 1 ) 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000010000000 , 0000000010000000 , 0000000111000000 , 0000011111110000 , 0000000111000000 , 0000000010000000 , 0000000010000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , ( 2 ) 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000010000000 , 0000000010000000 , 0000001010100000 , 0000000111000000 , 0000111111111000 , 0000000111000000 , 0000001010100000 , 0000000010000000 , 0000000010000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , ( 3 ) 0000000000000000 , 0000000000000000 , 0000000010000000 , 0000000010000000 , 0000010010010000 , 0000001010100000 , 0000000111000000 , 0001111111111100 , 0000000111000000 , 0000001010100000 , 0000010010010000 , 0000000010000000 , 0000000010000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , ( 4 ) 0000000000000000 , 0000000010000000 , 0000000010000000 , 0000100010001000 , 0000010111010000 , 0000001111100000 , 0000011111110000 , 0011111111111110 , 0000011111110000 , 0000001111100000 , 0000010111010000 , 0000100010001000 , 0000000010000000 , 0000000010000000 , 0000000000000000 , 0000000000000000 , ( 5 ) 0000000010000000 , 0010000010000010 , 0001000010000100 , 0000100111001000 , 0000010111010000 , 0000001111100000 , 0000111111111000 , 0111111111111111 , 0000111111111000 , 0000001111100000 , 0000010111010000 , 0000100111001000 , 0001000010000100 , 0010000010000010 , 0000000010000000 , 0000000000000000 , ( 6 ) 0000000010000000 , 0010000010000010 , 0001001111100100 , 0000110010011000 , 0000110000011000 , 0001000000000100 , 0001000010000100 , 0111100111001111 , 0001000010000100 , 0001000000000100 , 0000110000011000 , 0000110010011000 , 0001001111100100 , 0010000010000010 , 0000000010000000 , 0000000000000000 , ( 7 ) 0000000111000000 , 0000100000001000 , 0001000000000100 , 0010000000000010 , 0000001000100000 , 0000010000010000 , 0100000000000001 , 0100000010000001 , 0100000000000001 , 0000010000010000 , 0000001000100000 , 0010000000000010 , 0001000000000100 , 0000100000001000 , 0000000111000000 , CONSTANT SYMBOLES_ETOILES DECIMAL ( Zone du programme de veille: l'adresse du debut du programme principal doit etre mise dans les 4 premiers octets de INDX_VEILLE ce programme est appele toutes les 25 ms en mode veille il ne doit avoir aucun parametre d'entree et de sortie ) : PRGM_VEILLE ( - --> - ) ( etat,x1,y1,...,x256,y256 ) ZONE_NOVAES DUP >R @ ?DUP IF DUP 3 AND 3 = IF -4 AND DUP -5 LSH 1- NOMBRE @ MOD 4* R@ 2+ + >R INDX_VEILLE 4+ 2@ 16 DUP 0 R@ @ R@ 2+ @ SYMBOLES_ETOILES 8 PICK 4/ 7 AND 5 LSH + TRACE_MOTIF 7 PICK 4/ 1+ 7 AND IF >R >R DROP 255 R> R> SYMBOLES_ETOILES 8 PICK 4/ 1+ 7 AND 5 LSH + TRACE_MOTIF DROP DROP DROP DROP DROP DROP R> DROP 4+ ELSE DROP DROP DROP 255 INDX_VEILLE 4+ 2@ >R NPA ABS R@ 4+ @ 1+ R@ @ - /MOD R@ 6+ @ 1+ R@ 2+ @ - MOD SWAP R@ @ + 8- SWAP R> 2+ @ + 8- OVER R@ ! DUP R> 2+ ! SYMBOLES_ETOILES TRACE_MOTIF DROP DROP DROP DROP DROP DROP 4+ 8191 AND DUP 0= 32 AND + THEN ELSE 1+ THEN ELSE R@ 2+ DUP 1024+ SWAP DO INDX_VEILLE 4+ 2@ >R NPA ABS R@ 4+ @ 1+ R@ @ - /MOD R@ 6+ @ 1+ R@ 2+ @ - MOD SWAP R@ @ + 8- SWAP R> 2+ @ + 8- I 2+ ! I ! 4 +LOOP 32 THEN R> ! ; FIND PRGM_VEILLE INDX_VEILLE 2! ( Zone facultative du programme d'initialisation: l'adresse du debut du programme principal doit etre mise dans les octets 12 a 15 de INDX_VEILLE ce programme est appele juste au debut d'entree en veille il ne doit avoir aucun parametre d'entree et de sortie ) " ./BINAIRES/novaes.prm" STRING S_FICHIER : INIT_VEILLE ( - --> - ) S_FICHIER COUNT CHEMIN_CONCATENE ?DUP IF DUP >R -1 FOPEN R> MEMOIRE_LIBERE DROP 0> IF NOMBRE 2 3 PICK FREAD DROP THEN FCLOSE DROP THEN INDX_VEILLE 4+ 2@ 0 OVER DUP >R @ R@ 2+ @ R@ 4+ @ R> 6+ @ TRACE_REC DROP ZONE_NOVAES [ 2 4 256 * + LITERAL ] 0 FILL ; FIND INIT_VEILLE INDX_VEILLE 12+ 2! ( Zone facultative du programme de configuration des parametres: l'adresse du debut du programme principal doit etre mise dans les octets 8 a 11 de INDX_VEILLE ce programme est appele en cas de demande de modification de parametres il ne doit avoir aucun parametre d'entree et de sortie ) FEN_STRING" S_PARAMETRE_VEILLE Nombre de novaes (4 a 256):" Novaes number (4 to 256):" FEN: PRGM_CONFIG ( fen --> - ) NOMBRE DUP @ BEGIN DUP 10 S_PARAMETRE_VEILLE 6 PICK FEN_DIALOGUE_NOMBRE DUP 2 < OVER 256 > OR IF DROP 0 ELSE SWAP THEN UNTIL SWAP ! S_FICHIER COUNT CHEMIN_CONCATENE ?DUP IF DUP >R 0 FOPEN R> MEMOIRE_LIBERE DROP 0< NOT IF NOMBRE 2 3 PICK FWRITE DROP THEN FCLOSE DROP THEN DROP ; PRGM_CONFIG INDX_VEILLE 8+ 2! ( FIN ) ( Zone accueillant la somme du fichier pour validation. ) ( SOM_VEILLE 0000355674 )