< < P R O G R A M M E ' E S T H E T E ' . .. < < < EN-TETE DE L'ITEM 2 < TABLE ZERO: EQU $ DZS '528 < POSITIONNEMENT SUR L'ITEM2. ITEM2: EQU $ DZS '52 < CLEAR DE L'EN-TETE DE L'ITEM. $EQU ITEM2 ASCI "EST3" < NOM COMPACTE DE L'ITEM. BYTE '40;"0" BYTE '04;'C9 LITEM: VAL 35*74/2+'52*2 < LONGUEUR TOTALE DE L'ITEM. WORD -'52*2+LITEM BYTE "P";0 < TYPE 'P' DE L'ITEM $EQU ITEM2+'3D BYTE "E";"S";"T";'04 < NOM DE L'ITEM. $EQU ITEM2+'50 WORD ITEM2,X WORD ITEM2+'3D,X WORD RUN < POINT D'ENTREE DANS L'ITEM. PAGE < < MESSAGES DIVERS (ET AUTRES...!...) < LOCAL LOC: EQU $+'80 VALT: BYTE 18;'6D ASCI "VALEURS TRAITEES:" MIN: BYTE 8;'6D ASCI "MINIMUM" MAX: BYTE 8;'6D ASCI "MAXIMUM" PAS: BYTE 4;'6D ASCI "PAS" EG: BYTE 3;" ";"=";" " COMP: BYTE 31;'6D ASCI "NOMBRE DE COMPOSANTES ACTIVES:" REG: BYTE 28;'6D ASCI "NOMBRE DE REGISTRES ACTIFS:" ROUGE: BYTE 6;" " ASCI "ROUGE" VERT: BYTE 5;" " ASCI "VERT" BLEU: BYTE 5;" " ASCI "BLEU" TIRET: BYTE 1;"-" PINT: BYTE 1;"?" INIT: BYTE 18;'6D ASCI "INITIALISATION ? " VAL: BYTE 8;'6D ASCI "VALEURS" MTMPO: BYTE 15;'6D ASCI "TEMPORISATION=" SUP: BYTE 3;'6D;">";'07 PAGE < < C O M M O N < COMMON COM: EQU $+'80 CCI: WORD 1 < RETOUR AU CCI. MCU3: DZS 1 < MOT DE COMMANDE AU CU3. DCU3: WORD '8B02 < DEMANDE AU CU3. WORD MCU3-ZERO*2 WORD 2 DMTMPO: WORD '0005 < TEMPORISATION WORD 0 WORD 0 < NOMBRE DE SECONDES. CRD: DZS 1 < CARACTERE LU. READ: WORD '0101 < LECTURE DE UN CARACTERE. WORD CRD-ZERO*2 WORD 1 WRITE: WORD '0202 < ECRTITURE D'UN MESSAGE. DZS 2 MINR: DZS 1 < MINIMUM ET MAXIMUM DE REGISTRES < ACTIFS PAR COMPOSANTE (R/V/B) MINV: DZS 1 MINB: DZS 1 MAXR: DZS 1 MAXV: DZS 1 MAXB: DZS 1 MINRV: DZS 1 MINRB: DZS 1 MINVB: DZS 1 MAXRV: DZS 1 MAXRB: DZS 1 MAXVB: DZS 1 MINRVB: DZS 1 MAXRVB: DZS 1 MINCOM: DZS 1 < MINIMUM DE COMPOSANTES ACTIVES. MINVAL: DZS 1 < MINIMUM, MAXIMUM ET PAS MAXVAL: DZS 1 < DES VALEURS PERMISES. PASVAL: DZS 1 VALR: DZS 8 < REGISTRES 'ROUGE'. VALV: DZS 8 < REGISTRES 'VERT'. VALB: DZS 8 < REGISTRES 'BLEU'. AVALR: WORD VALR-1,X < RELAIS VERS CES TABLES. AVALV: WORD VALV-1,X AVALB: WORD VALB-1,X NBVR: DZS 1 < NOMBRE DE VALEURS ACTIVES NBVV: DZS 1 < PAR COMPOSANTE. NBVB: DZS 1 ANBV: WORD NBVR-1,X < RELAI VERS CES NOMBRES. HUIT: WORD 8 NREG: WORD '0001 < NUMERO DU JEU DE REGISTRES COURANT. PSAPS: WORD 0 < INDICATEUR DE PAS A PAS (1=PAS A PAS). PASC: DZS 1 < PAS COURANT. NIN: WORD -1 < NOMBRE D'ENTREES DANS LE PROGRAMME. PILE: DZS 25 < PILE DE 'K' SAVK: DZS 1 < SAVE 'K' DE 3D. ARUN: WORD RUNX < RETOUR DE ALT-MODE AU DEPART. ARALT: WORD RALT < ADRESSE DE RETOUR DE ALT-MODE. APAR: WORD PARA < RELAI DEMANDE PARAMETRES. ACU3: WORD CU3 < S/P D'ENVOI DES VALEURS SUR CU3. AENV: WORD ENV < S/P D'ENVOI D'UN MOT SUR CU3. AEGV: WORD EGV < S/P D'IMPRESSION MESSAGE, SIGNE "=" ET < LECTUR/VALIDATION D'UNE VALEUR. AVMX: WORD VMX < S/P IDEM PRECEDENT AVEC < VALIDATION PAR RAPPORT AUX MIN ET MAX. ATIR: WORD TIR < S/P D'IMPRESSION MESSAGE ET SIGNE "-". AECR: WORD ECR < S/P D'ENVOI D'UN MESSAGE. ARVL: WORD RVL < S/P DE LECTURE D'UNE VALEUR (DE 0 A 'F). ARVLI: WORD RVLI < S/P DE LECTURE D'UNE VALEUR (DE 0 A 'F OU < "I" POUR INEXISTANTE). AICV: WORD ICV < S/P D'INCREMENTATION D'UNE VALEUR. ASEL: WORD SEL < S/P DE TEST (SELECTION) DE CONFIGURATION. PAGE < < P R O G R A M M E P R O P R E M E N T D I T. < PROG < < INITIALISATION DES BASES. < RUN: EQU $ < ENTRY. PSR C,L,W < PROTECTION DES REGISTRES DE 3D. LR K,B < C'EST LE 'K' DE 3D. RUNX: EQU $ LRM C,L,K WORD COM < COMMON. WORD LOC < LOCAL. WORD PILE-1 < PILE. LA ARUN WORD '1EB5 < ADRESSE DEROUTEMENT SUR ALT-MODE. IC NIN < DECOMPTE DES ENTRY'S. JG AUTIN < PAS LA PREMIERE FOIS... STB SAVK < SAVE 'K' DE 3D. AUTIN: EQU $ PAGE < < ENTREE DES PARAMETRES ESTHETIQUES... < PARA: EQU $ LAD VALT < ENTREE DES VALEURS TRAITEES. BSR AECR LAD MAX < MAXIMUM. BSR AEGV STA MAXVAL LAD MIN < MINIMUM. LB MAXVAL BSR AVMX STA MINVAL REPAS: EQU $ < REVOIR LE PAS... LAD PAS < PAS! BSR AEGV JAE REPAS NGR A < INVERSION PAS. STA PASVAL LAD COMP < NOMBRE MINIMUM DE COMPOSANTES ACTIVES. BSR AECR RECOM: EQU $ < REVOIR LE MINIMUM DE COMPOSANTES. LAD MIN BSR AEGV CPI 3 JG RECOM STA MINCOM LAD REG < NOMBRE DE REGISTRES ACTIFS. BSR AECR LAD MIN < ENTREE DES MINIMUMS. BSR AECR LAD ROUGE < ROUGE. BSR AEGV STA MINR LAD VERT < VERT. BSR AEGV STA MINV LAD BLEU < BLEU. BSR AEGV STA MINB LAD ROUGE < ROUGE-VERT. BSR ATIR LAD VERT BSR AEGV STA MINRV LAD ROUGE < ROUGE-BLEU. BSR ATIR LAD BLEU BSR AEGV STA MINRB LAD VERT < VERT-BLEU. BSR ATIR LAD BLEU BSR AEGV STA MINVB LAD ROUGE < ROUGE-VERT-BLEU BSR ATIR LAD VERT BSR ATIR LAD BLEU BSR AEGV STA MINRVB < LAD MAX < ENTREE DES MAXIMUM'S. BSR AECR LAD ROUGE < ROUGE. LB MINR BSR AVMX STA MAXR LAD VERT < VERT. LB MINV BSR AVMX STA MAXV LAD BLEU < BLEU. LB MINB BSR AVMX STA MAXB LAD ROUGE < ROUGE-VERT. BSR ATIR LAD VERT LB MINRV BSR AVMX STA MAXRV LAD ROUGE < ROUGE-BLEU. BSR ATIR LAD BLEU LB MINRB BSR AVMX STA MAXRB LAD VERT < VERT-BLEU. BSR ATIR LAD BLEU LB MINVB BSR AVMX STA MAXVB LAD ROUGE < ROUGE-VERT-BLEU BSR ATIR LAD VERT BSR ATIR LAD BLEU LB MINRVB BSR AVMX STA MAXRVB PAGE < < INITIALISATION DES VALEURS DES REGISTRES. < RINIT: EQU $ LAD INIT BSR AECR LAD READ < POUR REPONSE (OUI/NON). SVC 0 LBY CRD CPI "N" JE PINIT < PAS D'INIT ! CPI "O" JNE RINIT < REPONSE NON RECONNUE... < LAD VAL < ENTREE DES VALEURS. BSR AECR LAD ROUGE < ROUGE. BSR AECR LAD EG BSR AECR LXI 8 INIR: EQU $ PSR X BSR ARVLI PLR X CPI -1 JE INIR1 < SI " ", NE PAS TOUCHER A LA TABLE. STA &AVALR INIR1: EQU $ JDX INIR < LAD VERT < VERT. BSR AECR LAD EG BSR AECR LXI 8 INIV: EQU $ PSR X BSR ARVLI PLR X CPI -1 JE INIV1 < SI " ", NE PAS TOUCHER A LA TABLE. STA &AVALV INIV1: EQU $ JDX INIV < LAD BLEU < BLEU. BSR AECR LAD EG BSR AECR LXI 8 INIB: EQU $ PSR X BSR ARVLI PLR X CPI -1 JE INIB1 < SI " ", NE PAS TOUCHER A LA TABLE. STA &AVALB INIB1: EQU $ JDX INIB BSR ACU3 < ET ENVOI DES VALEURS. BSR ACU3 < SUR LES DEUX JEUX DE REGISTRES. < PINIT: EQU $ LA ARALT WORD '1EB5 < ADRESSE DEROUTEMENT ALT-MODE. RALT: EQU $ STZ PSAPS < RAZ DU PAS A PAS. LA PASVAL < INITIALISATION DU PAS COURANT. STA PASC LAD SUP < LECTURE DE LA COMMANDE. BSR AECR LAD READ SVC 0 LBY CRD < ANALYSE DE LA COMMANDE. CPI "N" JE AVAN CPI "R" JE ARRI CPI "G" JE GO CPI "B" JE BACK CPI "I" JE RINIT CPI "P" JE DEBUT CPI "T" JE TEMPO CPI "W" JE RCCI CPI "F" JNE RALT FIN: EQU $ EORR W < FIN - INDIQUER RETOUR OK. < (POUR 3D) STZ 2,W LAI '12 < RESTAURER ADRESSE ALT-MODE. WORD '1EB5 LB SAVK < RESTAURER LE 'K' DE 3D. LR B,K PLR C,L,W BSR 'FF80,C < ET RETOUR A 3D WORD $+1;"F " TEMPO: EQU $ < DEMANDE DE TEMPORISATION. LAD MTMPO BSR AECR BSR ARVL STA DMTMPO+2 < STORE NB SECONDES. JMP RALT DEBUT: EQU $ BR APAR < VERS ENTREE DES PARAMETRES. RCCI: EQU $ LAD CCI SVC 0 < RETOUR AU CCI. JMP RALT < VERS NOUVELLE COMMANDE. ARRI: EQU $ IC PSAPS < INDIQUER "PAS A PAS". JMP BACK AVAN: EQU $ IC PSAPS < INDIQUER "PAS A PAS". JMP GO BACK: EQU $ LA PASVAL < INVERSION DU SENS DU PAS. NGR A STA PASC GO: EQU $ LXI 8 < ON VA PASSER TOUS LES REGISTRES. RVRG: EQU $ LR X,B LXI 3 < ON VA PASSER TOUTES LES COMPOSANTES. RVCP: EQU $ BSR AICV < FAIRE UN PAS SUR LA VALEUR COURANTE. JAE ICOK < LE PAS EST BON...! JDX RVCP < LE PAS N'EST PAS BON, ON PASSE A LA < COMPOSANTE SUIVANTE. LR B,X JDX RVRG < PLUS DE COMPOSANTE, REGISTRE SUIVANT. JMP FIN ICOK: EQU $ BSR ASEL < LA CONFIGURATION REPOND-ELLE AUX < NORMES ESTHETIQUES?? JANE GO BSR ACU3 < OUI, ON LA DIFFUSE DONC. CPZ PSAPS < EST-ON EN PAS A PAS? JNE RALT < OUI, VERS NOUVELLE COMMANDE. JMP GO < NON, CONTINUER. PAGE < < S/P D'ENVOI DES REGISTRES SUR CU3. < CU3: EQU $ PSR A,X LXI 24 < ON VA PASSER TOUS LES REGISTRES. CU32: EQU $ CPZ &AVALR < SI LA VALEUR EST INACTIVE, LA SAUTER. JL CU31 LA &AVALR < EST-ELLE DANS LES LIMITES ? CP MAXVAL JGE CU33 LA MAXVAL JMP CU34 < ON PREND LE MAX. CU33: EQU $ CP MINVAL JLE CU34 LA MINVAL < ON PREND LE MIN. CU34: EQU $ BSR AENV < ENVOI DE LA VALEUR. CU31: EQU $ JDX CU32 < VALEUR SUIVANTE. LA NREG < INVERSER LE JEU DE REGISTRES. IBT 11 IBT 15 STA NREG SLLS 7 ORI '70 STA MCU3 < PASSER LA DIFFUSION SUR LE JEU LAD DCU3 < QUE L'ON VIENT DE PROGRAMMER. SVC 0 CPZ DMTMPO+2 < Y A-T-IL UNE TEMPORISATION A FAIRE ? JE CU35 LAD DMTMPO < TEMPO SVC 0 CU35: EQU $ PLR A,X RSR PAGE < < S/P D'ENVOI D'UNE VALEUR SUR CU3. < ENV: EQU $ PSR A,B,X SLRD 4 < METTRE LA VALEUR DANS 'B'. LR X,A ADRI -1,A < METTRE LE NUMERO DE REGISTRE DANS B SLRD 3 < VOILA. NGR A < CALCUL DU NUMERO DE COMPOSANTE. ADRI 15,A LR A,X LAI 0 SBT 0,X SLLS 1 OR NREG < INCORPORER LES JEUX DE REGISTRES. SLLD 7 STA MCU3 < ET ENVOI SUR CU3. LAD DCU3 SVC 0 PLR A,B,X RSR PAGE < < S/P D'IMPRESSION D'UN MESSAGE. < ECR: EQU $ PSR A,X,W LR A,W ADR A,A ADRI 1,A STA WRITE+1 LBY 0,W STA WRITE+2 LAD WRITE SVC 0 PLR A,X,W RSR PAGE < < S/P D'IMPRESSION D'UN MESSAGE ET DU TIRET < TIR: EQU $ PSR A BSR AECR LAD TIRET BSR AECR PLR A RSR PAGE < < S/P DE LECTURE D'UNE VALEUR DE 0 A 'F OU INEXISTANTE. < RVLI: EQU $ PSR X RVLI1: EQU $ LAD READ SVC 0 LBY CRD CPI " " JE RVLI5 CPI "*" JE RVLI2 ADRI -'30,A JAL RVLI3 CPI 9 JLE RVLI4 CPI '11 JL RVLI3 ADRI -7,A CPI '18 JG RVLI3 RVLI4: EQU $ PLR X RSR RVLI2: EQU $ LAI 0 SBT 0 JMP RVLI4 RVLI5: EQU $ LAI -1 JMP RVLI4 RVLI3: EQU $ LAD PINT BSR AECR JMP RVLI1 PAGE < < S/P DE LECTURE D'UNE VALEUR DE 0 A 'F. < RVL: EQU $ BSR ARVLI JAGE RVL1 LAD PINT BSR AECR JMP RVL RVL1: EQU $ RSR PAGE < < S/P D'IMPRESSION D'UN MESSAGE, DU SIGNE "=", ET < LECTURE/VALIDATION D'UNE VALEUR. < EGV: EQU $ BSR AECR LAD EG BSR AECR BSR ARVL RSR PAGE < < S/P IDENTIQUE AU PRECEDENT MAIS ACCEPTANT UNE VALEUR < REPRESENTANT UN MAXIMUM PAR RAPPORT A UN MINIMUM CONTENU DANS 'B'. < VMX: EQU $ BSR AEGV < LIRE LA VALEUR. VMX1: EQU $ CPR A,B JLE VMX2 < TEST VALEUR. LAD PINT BSR AECR BSR ARVL JMP VMX1 VMX2: EQU $ RSR PAGE < < S/P D'INCREMENTATION D'UNE VALEUR RENDANT DANS 'A' < 0 VALEUR EXISTANTE ET DANS LES LIMITES. < 1 SINON < ICV: EQU $ PSR X,W EORR W LR X,A < ADRESSE VALEUR. ADRI -1,A PSR B MP HUIT LR B,A PLR B ADR B,A LR A,X CPZ &AVALR < VALEUR EXISTE-T-ELLE ? JL ICV1 < NON. LA &AVALR < OUI, APPLIQUER LE PAS. AD PASC CPZ PASC < VA-T-ON EN AVANT OU EN ARRIERE ? JG ICV2 < EN ARRIERE. JAGE ICV3 < EN AVANT, COMPARER AU MAX ABSOLU. ADRI '10,A < SUPERIEUR MODULO 16. STA &AVALR JMP ICV1 ICV3: EQU $ STA &AVALR < VALEUR OK. JMP ICV4 ICV2: EQU $ CPI 'F < EN ARRIERE, COMPARER AU MIN ABSOLU. JLE ICV3 ADRI -'10,A < INFERIEUR MODULO 16. STA &AVALR ICV1: EQU $ ADRI 1,W < VALEUR NON SIGNIFICATIVE. ICV4: EQU $ LR W,A < CODE RETOUR PLR X,W RSR PAGE < < S/P DE TEST DE CONFIGURATION EN FONCTION DES PARAMETRES < RENDANT DANS 'A' : < 0 CONFIGURATION VALABLE, DONC A DIFFUSER. < 1 SINON. < SEL: EQU $ PSR B,X,Y LXI 3 SEL3: EQU $ < CALCUL DU NB DE VALEURS ACTIVES < PAR COMPOSANTE. LR X,B LXI 8 LYI 0 SEL2: EQU $ LR B,A ADRI -1,A PSR B MP HUIT LR B,A PLR B ADR X,A PSR X LR A,X LA &AVALR PLR X JAL SEL1 CP MINVAL JG SEL1 CP MAXVAL JL SEL1 ADRI 1,Y < ELLE EST BONNE. SEL1: EQU $ JDX SEL2 LR B,X STY &ANBV JDX SEL3 < COMPOSANTE SUIVANTE. LYI 0 < BON A PRIORI. LA NBVR < VERIFICATION DE LA CONFIGURATION. CP MINR JL SEL4 CP MAXR JG SEL4 LA NBVV CP MINV JL SEL4 CP MAXV JG SEL4 LA NBVB CP MINB JL SEL4 CP MAXB JG SEL4 LA NBVR AD NBVV CP MINRV JL SEL4 CP MAXRV JG SEL4 LA NBVR AD NBVB CP MINRB JL SEL4 CP MAXRB JG SEL4 LA NBVV AD NBVB CP MINVB JL SEL4 CP MAXVB JG SEL4 LA NBVR AD NBVV AD NBVB CP MINRVB JL SEL4 CP MAXRVB JG SEL4 SEL5: EQU $ LR Y,A < CODE RETOUR. PLR B,X,Y RSR SEL4: EQU $ LYI 1 < PAS BON. JMP SEL5 PAGE < < GENERATION DU PROGRAMME EN TANT QU'ITEM DE TYPE 'P' < EXECUTABLE EN 'ITEM 2' PAR '3D'. < DEMSGN: WORD '8402 WORD ITEM2-ZERO*2 WORD LITEM WORD -1 DEMCCI: WORD '0001 GENER: EQU $ LRM A WORD DEMSGN SVC 0 JNE $ LRM A WORD DEMCCI SVC 0 JMP $-1 END GENER