( Evaluation de l'interface VGA. Version 1.20 du 26 Avril 2003. Ecrit par jpb.forth . ) TELECHARGEMENT ( Logiciel pour evaluation de l'interface VGA du FPGA ) DECIMAL FORGET V_NPA 0 VARIABLE V_NPA TEMPS 2@ DUP 0= 8 AND + V_NPA 2! 0 VARIABLE TEINTE 0 VARIABLE XCENTRE 0 VARIABLE YCENTRE 0 VARIABLE XRAYON 0 VARIABLE YRAYON 0 VARIABLE FIGURE 0 VARIABLE ETAT_FIGURE 0 VARIABLE ETAT_INIT PRIORITE DUP @ SWAP 32768 OVER ! VGA_INIT ! : NPA ( - --> n nombre pseudoaleatoire de 32 bits ) V_NPA DUP >R 2@ -2 AND DUP DUP 4/ 2/ XOR 8 AND 4/ 2/ + -1 ROL DUP R> 2! ; : HORIZONTALE ( teinte,x0,y,x1 --> - ) PRIORITE DUP >R @ 32768 R@ ! >R >R >R >R >R LIMITES R> R> R> R> OVER TRACE_REC DROP R> R> ! ; : HORIZONTALE_BORDEE ( teinte,x0,y,x1,dx --> - ) >R 4 PICK 255 XOR 4 PICK R@ - 4 PICK OVER R@ + 4 PICK 6 PICK 4 PICK OVER R> + HORIZONTALE HORIZONTALE HORIZONTALE ; TACHE: T_FIGURE ETAT_FIGURE @ DUP IF DUP YRAYON @ 1- > IF DROP 0 ETAT_FIGURE ! TEINTE @ XCENTRE @ YCENTRE @ XRAYON @ YRAYON @ FIGURE @ 2 = IF 9 3 PICK DUP U* 3 PICK DUP U* */ 9+ SQRT 9 3 PICK DUP U* 5 PICK DUP U* */ 9+ SQRT >R ROT + SWAP R@ + DUP DUP R> - ELSE >R 3+ R> 3+ DUP DUP 3- THEN DO FIGURE @ 1- ?DUP IF 1- IF OVER DUP U* I 4 PICK U* DUP 4 PICK DUP U* */ - SQRT ELSE OVER I OVER 4 PICK */ - THEN ELSE OVER THEN 6 PICK 255 XOR OVER NEGATE 7 PICK + 6 PICK I - 8 PICK 5 PICK + HORIZONTALE 6 PICK 255 XOR OVER NEGATE 7 PICK + 6 PICK I + 8 PICK 5 PICK + HORIZONTALE DROP LOOP DROP DROP DROP DROP DROP T_FIGURE T_RETIRE 0 FIGURE ! ELSE >R TEINTE @ XCENTRE @ YCENTRE @ XRAYON @ YRAYON @ R> OVER OVER - 3 MIN OVER + DUP ETAT_FIGURE ! SWAP DO FIGURE @ 1- ?DUP IF 1- IF OVER DUP U* I 4 PICK U* DUP 4 PICK DUP U* */ - SQRT 3 PICK 3+ DUP U* I 5 PICK 3+ U* DUP 5 PICK 3+ DUP U* */ - SQRT OVER - ELSE OVER I OVER 4 PICK */ - 9 4 PICK DUP U* 4 PICK DUP U* */ 9+ SQRT THEN ELSE OVER 3 THEN 7 PICK 3 PICK NEGATE 8 PICK + 7 PICK I - 9 PICK 6 PICK + 5 PICK HORIZONTALE_BORDEE 7 PICK 3 PICK NEGATE 8 PICK + 7 PICK I + 9 PICK 6 PICK + 5 PICK HORIZONTALE_BORDEE DROP DROP LOOP DROP DROP DROP DROP DROP 8 T_FIGURE T_ACTIVE THEN ELSE 1+ ETAT_FIGURE ! TEINTE @ XCENTRE @ DUP >R XRAYON @ - YCENTRE @ R> XRAYON @ + FIGURE @ 2 = IF 9 XRAYON @ DUP U* YRAYON @ DUP U* */ 9+ SQRT ELSE 3 THEN HORIZONTALE_BORDEE 2 T_FIGURE T_ACTIVE THEN ; TACHE: T_TEST_VGA FIGURE @ 0= IF NPA ABS [ ECRAN 6+ @ 1+ LITERAL ] U/MOD [ ECRAN 4+ @ 1+ LITERAL ] MOD XCENTRE ! YCENTRE ! NPA ABS [ ECRAN 6+ @ 1+ 4/ LITERAL ] U/MOD [ ECRAN 6+ @ 1+ 4/ LITERAL ] MOD [ ECRAN 6+ @ 1+ 40 / LITERAL ] + XRAYON ! [ ECRAN 6+ @ 1+ 40 / LITERAL ] + YRAYON ! NPA ABS 256 U/MOD 3 MOD 1+ FIGURE ! TEINTE ! 1024 T_FIGURE T_AJOUTE 2 T_FIGURE T_ACTIVE 32 T_TEST_VGA T_ACTIVE ELSE ETAT_INIT @ IF NPA DROP 32 T_TEST_VGA T_ACTIVE ELSE T_TEST_VGA T_RETIRE THEN THEN ; TACHE: T_INIT_VGA ETAT_INIT @ ?DUP IF DUP [ ECRAN 6+ @ 2+ LITERAL ] < IF DUP 3+ [ ECRAN 6+ @ 2+ LITERAL ] MIN DUP ETAT_INIT ! 1- SWAP 1- DO I 10 < IF 3 0 I [ ECRAN 4+ @ LITERAL ] HORIZONTALE ELSE I [ ECRAN 6+ @ 9- LITERAL ] < IF 3 0 I 9 HORIZONTALE 0 10 I [ ECRAN 4+ @ 10- LITERAL ] HORIZONTALE 3 [ ECRAN 4+ @ 9- LITERAL ] I [ ECRAN 4+ @ LITERAL ] HORIZONTALE ELSE I [ ECRAN 6+ @ 1+ LITERAL ] < IF 3 0 I [ ECRAN 4+ @ LITERAL ] HORIZONTALE THEN THEN THEN LOOP 4 T_INIT_VGA T_ACTIVE ELSE DROP T_INIT_VGA T_RETIRE ECRAN LIMITES >R DUP @ 10+ R@ ! 2+ DUP @ 10+ R@ 2+ ! 2+ DUP @ 10- R@ 4+ ! 2+ @ 10- R> 6+ ! 0 FIGURE ! 1024 T_TEST_VGA T_AJOUTE 1 T_TEST_VGA T_ACTIVE THEN ELSE 1 DUP ETAT_INIT ! T_INIT_VGA T_ACTIVE THEN ; : TEST_VGA_OFF BEGIN ETAT_INIT @ 481 < NOT UNTIL 0 ETAT_INIT ! BEGIN FIGURE @ 0= UNTIL ; : TEST_VGA_ON ETAT_INIT @ 0= IF 1024 T_INIT_VGA T_AJOUTE 1 T_INIT_VGA T_ACTIVE THEN ; TEST_VGA_ON ( FIN )