<
< 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