< COMMENTAIRE UNIQUEMENT DESTINE A PERMETTRE L'ACCES PAR 'vi' (introduit le 20061123170648).
INITS: VAL 0 < INITIALISER LA ZONE SCRATCH DK.
INITS: VAL 1 < NE PAS INITIALISER ZONE SCRATCH.
IDP "' A' (EX-TI SOLAR)"
IDP "RELEASE 09 - 10/06/80"
IDP "IMAGES VIDEOS"
PAGE
EOT #SIP DEFINITION CMS5#
PAGE
NMPROC: VAL " A" < NOM DU PROCESSEUR.
EOT #SIP DEF PROCESSEUR#
EOT #SIP DEFINITION ITEM#
ITEM1: EQU ZERO+PILE-LTNI
ITEM2: EQU ZERO+PILE-LTNI-LTNI
PAGE
<
<
< I M A G E S G R A P H I Q U E E T V I D E O :
<
SIZE: VAL ITEM2-ZERO
<
< PILE DU PROGRAMME :
<
SSTACK: VAL 40 < ELLE EST GRANDE A CAUSE DE
< LA DICHOTOMIE...
EOT #SIP IMAGE 256#
NOM: EQU ITEM1 < NOM EST EN RECOUVREMENT DE
< L'EN-TETE DE L'ITEM1.
IMAG: EQU ZERO+PILE+5
EOT: EQU IMAG-2
LONG: EQU IMAG-1
ENTIM: EQU IMAG-LENTIM < EN-TETE IMAGE (INTERPOLATION VIDEO
< PAR CMS5).
<
< VALIDATION DU FORMAT DE L'IMAGE (CARREE) :
<
X20: VAL 1024/DY < NBRE DE LIGNES/IMAGE.
X21: VAL CNMPL*16 < NBRE DE POINTS/LIGNE.
IF X20-X21,,X100,
IF ATTENTION : L'IMAGE N'EST PAS CARREE !!!
X100: VAL 0
PAGE
<
< B R A N C H E ' A ' D E S C
<
< CE SOUS-PROGRAMME DE SC, DIRECTEMENT TIRE DE TI, EST CHARGE
< PAR CELUI-CI JUSTE DERRIERE L'IMAGE RESIDENTE, ET APPELE PAR UN
< SIMPLE 'BSR'.
<
< ARGUMENTS :
< - 'B' INDEX NOM IMAGE ARGUMENT.
< - 'X' RELAI VERS L'ITEM COURANT.
< - 'Y' INDEX CARACTERE COURANT.
<
< RESULTAT :
< - 'A' DE RETOUR = NOUVEL INDEX CARACTERE COURANT.
<
PROG
$EQU ZERO
XWOR%: VAL IMAG-ZERO+LIMAG < POUR S'IMPLANTER DERRIRE L'IMAGE
< RESIDENTE.
DZS XWOR%
IMPL: EQU $ < IMPLANTATION ' A'.
WORD NMPROC
ASCI " "
WORD '04D0
WORD '1F00
WORD IMAGE
GOA: EQU $ < GO OVERLAY ' A'.
LRP L
BR -1,L
PAGE
<
<
< L O C A L :
<
<
LOCAL
LOC: EQU $
LOCS: EQU $
<
< PARTIE DU LOCAL A SAUVEGARDER A LA PREMIERE ENTREE DANS ' A'
< ET A REINITIALISER A CHAQUE NOUVELLE ENTREE DANS ' A'.
<
< CETTE PARTIE VA DE 'LOCS' --> 'FLOCS'.
<
NOMARG: WORD -1 < MEMORISE DANS LE CAS D'UN APPEL
< PAR 'SC', L'INDEX EVENTUEL DE
< L'IMAGE APPELEE PRECEDEMMENT
< PAR 'SC' LUI-MEME...
INIT: WORD 0 < INDICATEUR D'INITIALISATION
< DE L'IMAGE :
< =0 : INITIALISER ,
< #0 : NE PAS INITIALISER.
PATS: WORD 'FFFF;'FFFF < LISTE SUR 32 BITS DES SECTEURS
< D'UNE IMAGE SCRATCH A PRENDRE
< EN COMPTE (BIT=0 : SECTEUR
< DE MEME RANG A IGNORER).
MIROR: WORD 0 < =0 : MIROIR NORMAL LORS DES
< OPERATIONS LOGIQUES ,
< #0 : &AS DE MIROIR.
INDICS: WORD 0 < INDICATEUR TEMPORAIRE DE PRISE
< EN COMPTE D'UN SECTEUR ;
< =0 : IGNORER LE SECTEUR ,
< =1 : TRAITER LE SECTEUR COURANT.
BANDE: WORD 0 < NUMERO DE LA BANDE COURANTE
< QUE L'ON VIRTUALISE.
ATOPO: WORD TOPO,X < RELAI VERS LA TOPOGRAPHIE
< DES BANDES HORIZONTALES.
TOPO: EQU $
BYTE 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15
BYTE 16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31
IF LIMAG/128-32,,X100,
IF ATTENTION : LA TOPOGRAPHIE N'EST PAS ADAPTEE !!!
X100: VAL 0
XIMAG: WORD 0 < INDEX DE MODIFICATION DE
< L'IMAGE VIDEO.
MASKX: WORD LIMAG-1 < MASQUE DE CALCUL DE XIMAG
< MODULO LIMAG.
SENSX: WORD 0 < CONTIENT L'INCREMENT (+1,-1)
< DE XIMAG.
SECTX: WORD 0 < DONNE L'INDEX INITIAL DE PARCOURS
< D'UN SECTEUR D'IMAGE SCRATCH.
< (0 OU 127).
ITEST: WORD 0 < 0 : TEST SUR VALEUR 0 DES POINTS.
< 1 : TEST SUR VALEUR 1 DES POINTS.
<
< MATRICE DE TRANSFORMATION :
< (INITIALISEE SUR UNE TRANSPOSITION)
<
C256: WORD 256 < POUR DECONCATENER 2 OCTETS.
XEQUIV: WORD 0 < CLASSE D'EQUIVALENCE DES X.
YEQUIV: WORD 0 < CLASSE D'EQUIVALENCE DES Y.
MSX: WORD 0 < SAVE TEMPORAIRE X DE M(X,Y).
SX: WORD 0 < COORDONNEE REDUITE X TEMPORAIRE.
RSX: WORD 0 < RESIDU DE X TEMPORAIRE.
MSY: WORD 0 < SAVE TEMPORAIRE Y DE M(X,Y).
SY: WORD 0 < COORDONNEE Y REDUITE TEMPORAIRE.
RSY: WORD 0 < RESIDU DE Y TEMPORAIRE.
AMAT: WORD $,X < LE RELAI AMAT DE LA MATRICE ,
< DOIT ETRE SUIVI DANS L'ORDRE
< PAR A22,A21,A12,A11.
A22: WORD 0
A21: WORD 1
A12: WORD 1
A11: WORD 0
SA22: WORD 0 < VALEUR TEMPORAIRE DE A22.
SA21: WORD 0 < VALEUR TEMPORAIRE DE A21.
DIAGON: WORD 1 < #0 : &ARCOURS DIAGONAL DE
< L'IMAGE LORS DE 'T'.
< =0 : PARCOURS ENTIER DE L'IMAGE.
<
< ACCES 'DKU' SOLAR.
<
XALAD1: VAL '0E00 < PREMIER 16*Q-SECTEUR ACCESSIBLE,
XALAD2: VAL '0F00 < PREMIER 16*Q-SECTEUR INACCESSIBLE,
XDKU: VAL 4 < DECALAGE DE GENERATION ADRESSES DKU.
STDKU: WORD '8A01 < STABILISATION IMAGE.
WORD IMAG-ZERO*2
WORD LIMAG*2
WORD 0 < SELECTION COULEUR.
FLOCS: EQU $ < FIN DE LA ZONE DU LOCAL A SAUVEGARDER.
RWDKU: WORD '8A00 < ACCES A 'DKU' SUR NVP='8A.
WORD IMAG-ZERO*2
WORD LIMAG*2
WORD XALAD1-1>XDKU < ADRESSE DE L'IMAGE EN ABSOLU.
DMTRAV: WORD '8A00 < POUR REINITIALISER 'RWDKU'.
WORD IMAG-ZERO*2
WORD LIMAG*2
FDMTRV: EQU $
XNQSPI: VAL LIMAG+127/128+2/3
INCR: WORD LIMAG/128*3/3 < VALEUR IMPLICITE DE L'INCREMENTATION
< AUTOMATIQUE POUR ACCES DKU (MODI-
< FIABLE PAR LA COMMANDE "K").
QC: WORD 3 < QUANTA COURANT D'ACCES A DKU,
< 3 A PRIORI.
LMSQC: WORD 3*128 < LONGUEUR MOTS D'UN SECTEUR DKU EN
< QUANTA COURANT (3 A PRIORI).
<
< BUFFERS ET MESSAGES :
<
REP: WORD 0 < REPONSE UTILISATEUR.
WORD 0 < (ET FOND DE L'IMAGE)
< (ET NBRE DE POINTS/IMAGE)
CURSOR: DZS 3 < POUR ENTRER LE CURSEUR GRAPHIQUE:
< OCTET0=CARACTERE DE DEBLOCAGE ,
< MOT1=Y(CURSEUR) ,
< MOT2=X(CURSEUR).
MIT1: BYTE 7;'6D
ASCI "!ITEM1"
MERR: BYTE 3;'6D;"?";"?"
<
< DEMANDES A CMS4 :
<
DEMOUT: WORD '0202 < EMISSION D'UN MESSAGE.
WORD 0 < @OCTET DU MESSAGE.
WORD 0 < LONGUEUR DU MESSAGE.
OG: WORD '0B03 < OG SUR NVP='0B.
CU: WORD '0B06 < CU SUR NVP='0B.
WORD 0 < AMDEM DOIT ETRE NUL !!!
LCU: WORD '0B09 < LCU SUR NVP='0B.
WORD CURSOR-ZERO*2
WORD 6
DEMCCI: WORD '0001 < RETOUR AU CCI.
SLEEP: WORD '0005 < DEMANDE DE TEMPORISATION.
WORD 0
WORD 2 < POUR 2 SECONDES ....
SGN: WORD '0002 < ACCES SGN POUR LES IMAGES.
WORD NOM-ZERO*2
WORD IMAG-NOM+LIMAG*2
WORD EOT-NOM*2
RDK: WORD '0C00 < LECTURE SCRATCH DU DISQUE.
SECT2: WORD ZSECT2 < @OCTET DU SECTEUR.
WORD 256 < 1 SECTEUR=256 OCTETS.
WORD 0 < @SECTEUR COURANT.
WDK: WORD '0C02 < ECRITURE SCRATCH DU DISQUE.
WORD ZSECT2
WORD 256 < 1 SECTEUR=256 OCTETS.
WORD 0 < NUMERO DU SECTEUR COURANT.
<
< CONSTANTES DE CONVERSION GRAPHIQUE --> VIDEO :
<
X1: WORD 0 < X 1ER POINT.
Y1: WORD 0 < X 1ER POINT.
X2: WORD 0 < X 2EME POINT.
Y2: WORD 0 < Y 2EME POINT.
X: WORD 0 < X=(X1+X2)/2.
Y: WORD 0 < Y=(Y1+Y2)/2.
<
< RELAIS DIVERS :
<
SAVKSC: DZS 1 < SAVE 'K' DE SC.
SAVKA: DZS 1 < 'K' DE ' A'.
ASECT: WORD SECTOR-1,X < REALI DE RAZ DU BUFFER SECTEUR.
AIMAG1: WORD IMAG,X < RELAI DE MODIF. DE L'IMAGE VIDEO.
ASECT1: WORD SECTOR,X < RELAI POUR ACCES AU SECTEUR.
AOP: WORD OP < ADRESSE D'1NE INSTRUCTION
< VARIABLE CONTENANT SOIT UN
< 'OR' , SOIT UN 'AND' , SOIT
< ENFIN UN 'EOR'.
AOP2: WORD OP2 < REALI VERS L'INSTRUCTION
< VARIABLE DE CHOIX DES COULEURS
< DE L'IMAGE VIDEO COURANTE...
AREP: WORD REP,X < RELAI DE CONVERSION DU FOND.
AEOT: WORD EOT < ADRESSE DE L'EOT A PRIORI.
ALONG: WORD LONG < ADRESSE DE L'INDICATEUR VIDEO.
AI2: WORD ITEM2-1,X < RELAI VERS ITEM2-1 POUR RAZ.
ABUF: WORD BUFFER,X < RELAI D'ACCES AU BUFFER CARACTERE
AIMAG: WORD IMAG-1,X < RELAI D'ACCES A L'IMAGE-1.
ANOM: WORD NOM,X < RELAI D'ACCES AU NOM IMAGE.
AI1: WORD ITEM1+LTN,X < RELAI D'ACCES A L'ITEM1.
AINOM: WORD INOM < RECUPERATION NOM DANS L'ITEM1.
ASIMU: WORD SIMU < RECUPERATION CARACTERE DANS ITEM1
APOINT: WORD SET < ROUTINE D'AFFICHAGE D'UN POINT :
< CONTIENT SET/RESET/INVER SUIVANT
< LE FOND DE L'IMAGE CHOISI.
ASET: WORD SET < ROUTINE D'AFFICHAGE UN POINT.
ARESET: WORD RESET < ROUTINE D'EFFACEMENT UN POINT.
AINVER: WORD INVER < INVERSION VIDEO UN POINT.
ATEST: WORD TEST < TEST D'1N POINT 0/1.
LROUT: WORD $+3+1,X;SET;RESET;INVER
AEXIST: WORD EXIST < EXISTENCE ET VALEUR D'UN POINT.
AFILTR: WORD FILTR < MODULE DE FILTRAGE IMAGE.
AVIRT: WORD VIRT < MODULE D'ENTREE TOPOGRAPHIE.
ADEF: WORD DEF < DEFINITION DE LA MATRICE DE
< TRANSFORMATION.
ACOEF: WORD COEF < ENTREE 1 COEEFICIENT MATRICE.
ASEG: WORD SEG < TRACE DU SEGMENT (M1,M2).
ARETSC: WORD RETSC < RETOUR VERS SC.
APRINT: WORD PRINT < ROUTINE D'EMISSION MESSAGE.
ADESIR: WORD DESIR < QUESTION-REPONSE UTILISATEUR.
AHEX: WORD HEX < CONVERSION HEXA --> BINAIRE.
AHEX4: WORD HEX4 < ENTREE / CONVERSION DE 4 CHIFFRES HEXA.
AGOSGN: WORD GOSGN < ROUTINE D'ACCES AU SGN.
AE300: WORD E300 < INTERROGATION UTILISATEUR.
AFIN: WORD E2 < ADRESSE DE FIN DE CONVERSION.
AINTER: WORD E410 < 2EME NIVEAU D'INTERROGATION.
AERR: WORD ERROR < ERREUR 2EME NIVEAU INTERRO.
AE770: WORD E770 < INTERACTION GRAPHIQUE.
AOPER: WORD OPER < OPERATION LOGIQUES IMAGES.
AIMAG2: WORD IMAGE2 < ENTRY POUR CHANGEMENT DE NOM.
<
< SAUVEGARDE/RESTAURATION DE L'EN-TETE ITEM1 :
<
I1: WORD ITEM1 < ADRESSE EN-TETE ITEM1.
ASI1: WORD SI1 < ADRESSE ZONE DE SAUVEGARDE.
SI1: DZS LNOM+2 < ZONE DE SAUVEGARDE.
<
< CONSTANTES :
<
NCP: WORD NBCAR*NBLIG < NBRE DE CARACTERES PAR ITEM.
IEG: WORD 0 < INDEX COURANT DE L'ITEM1.
ALIMAG: WORD LIMAG < NBRE DE MOTS OCCUPES PAR L'IMAGE.
LO3IM: WORD LIMAG*2*3 < LONGUEUR OCTETS DE 3 IMAGES.
NMPL: WORD CNMPL < NBRE DE MOTS DE 16 BITS/LIGNE.
NLIG: WORD 1024/DY-1 < NBRE DE LIGNES D'UNE IMAGE -1.
NPPL: WORD CNMPL*16-1 < NBRE DE POINTS/LIGNE-1.
XWOR%1: VAL 4
TEMPO: WORD XWOR%1*2 < TEMPORISATION PAIRE DE CLIGNOT-
< TEMENT DU PSEUDO-CURSEUR TV.
IMAG2: WORD IMAG-ZERO*2 < @OCTET DE L'IMAGE VIDEO.
<
< COULEURS SOLAR.
<
MCOOL: WORD 0 < CUMUL DES ARGUMENTS ENVOYES A 'CU3'.
AMCOOL: WORD MCOOL
DEMCU3: WORD '8B02 < COMMANDE DES REGISTRES DE COULEUR.
WORD MCOOL-ZERO*2
WORD 2
VALAD1: WORD XALAD1 < 'E000 : 1ER SECTEUR ACCESSIBLE,
VALAD2: WORD XALAD2 < 'F000 : 1ER SECTEUR INACESSIBLE.
M0FFF: WORD '0FFF < POUR RAZER LES BITS 0,1,2 ET 3.
IPRAP: WORD 1 < INDICATEUR PREMIER APPEL DE ' A' :
< = 1 : PREMIER APPEL,
< = 0 : SINON.
PROG
PAGE
<
<
< M I S E D ' U N B I T A 1 :
<
<
< ARGUMENTS :
< X ET Y CONTIENNENT X ET Y DU POINT.
< C=@IMAG (IMAGE VIDEO).
<
<
SET: EQU $
PSR B,X,C
LR Y,A
MP NMPL < CONVERSION DE L'Y DU POINT EN
< UN NUMERO DE MOT.
ADR B,C
LR X,A
SLRS 4
ADR A,C < C=@MOT CONTENANT LE POINT (X,Y).
LAI 'F
ANDR A,X < CALCUL DE X MODULO 16 ;
< X=NUMERO DU BIT DANS LE MOT.
LA 0,C < A=MOT CONTENANT LE POINT (X,Y).
SBT 0,X < POSITIONNEMENT DU POINT.
STA 0,C < MISE A JOUR DE CE MOT.
PLR B,X,C
RSR
<
<
< E F F A C E M E N T D ' U N P O I N T :
<
<
< ARGUMENTS :
< X ET Y CONTIENNENT X ET Y DU POINT.
< C=@IMAG (IMAGE VIDEO).
<
<
RESET: EQU $
PSR B,X,C
LR Y,A
MP NMPL
ADR B,C
LR X,A
SLRS 4
ADR A,C < C=@MOT CONTENANT LE POINT (X,Y).
LAI 'F
ANDR A,X < X=NUMERO DU BIT REPRESENTANT
< LE POINT DANS LE MOT ((C)).
LA 0,C < A=MOT CONTENANT LE POINT (X,Y).
RBT 0,X < EFFACEMENT DU POINT.
STA 0,C < MISE A JOUR DE CE MOT.
PLR B,X,C
RSR
<
<
< I N V E R S I O N V I D E O U N P O I N T :
<
<
< ARGUMENT :
< X ET Y CONTIENNENT X ET Y DU POINT A INVERSER.
< C=@IMAG (IMAGE VIDEO).
<
<
INVER: EQU $
PSR B,X,C
LR Y,A
MP NMPL
ADR B,C
LR X,A
SLRS 4
ADR A,C < C=@MOT CONTENANT LE POINT (X,Y).
LAI 'F
ANDR A,X < X=NUMERO DU BIT REPRESENTANT
< LE POINT DANS LE MOT ((C)).
LA 0,C < A=MOT CONTENANT LE POINT (X,Y).
IBT 0,X < INVERSION VIDEO DU POINT.
STA 0,C < MISE A JOUR DE CE MOT.
PLR B,X,C
RSR
<
<
< T E S T D ' U N P O I N T :
<
<
< FONCTION DE ITEST :
< ITEST=0 : CARY=1 SI POINT=0 ,
< =1 : CARY=1 SI POINT=1.
<
<
< ARGUMENTS :
< X ET Y CONTIENNENT L'X ET L'Y DU POINT ,
< C=@IMAG.
<
<
< RESULTAT :
< CARY POISITIONNE PAR LE POINT (0/1) 9
<
<
TEST: EQU $
PSR B,X,C
LR Y,A < A=COORDONNEE Y DU POINT.
MP NMPL
ADR B,C
LR X,A < A=COORDONNEE X DU POINT.
SLRS 4
ADR A,C < C#MOT CONTENANT LE POINT (X,Y).
LAI 'F
ANDR A,X < X=NUMERO DU POINT DANS LE MOT (C)
LA 0,C
CPZ ITEST < TEST DE LA VALEUR LOGIQUE DU
< POINT.
JNE E1022 < CONVENTION NORMALE (1).
IBT 0,X < CAS DES CONVENTIONS INVERSEES (1)
E1022: EQU $
TBT 0,X < TEST DU POINT.
PLR B,X,C
RSR
PAGE
<
<
< E X I S T E N C E E T V A L E U R P O I N T :
<
<
< ARGUMENT :
< X ET Y CONTIENNENT L'X ET L'Y D'UN POINT.
<
<
< RESULTAT :
< A#0 : M(X,Y) N'EXISTE PAS , OU
< M(X,Y) EXISTE ET M(X,Y)=0.
<
<
< A T T E N T I O N :
< LE TEST D'EXISTENCE NE PORTE QUE
< SUR LA COORSONNEE Y DU POINT !!!
<
<
EXIST: EQU $
LR Y,A
JAL NEXIST < M(X,Y) N'EXISTE PAS : A<0#0 !!!
CP NLIG
JG NEXIST < M(X,Y) N'EXISTE PAS : A>0#0 !!!
<
< CAS OU LE POINT M(X,Y) EXISTE :
<
BSR ATEST < TEST DE LA VALEUR DE M(X,Y).
LAI 1
SBCR A < A=0 SI M(X,Y)=1.
NEXIST: EQU $
RSR
PAGE
<
<
< A C C E S C A R A C T E R E I T E M 1 :
<
<
< ARGUMENT :
< IEG=INDEX COURANT DE L'ITEM1.
<
<
< A T T E N T I O N :
< SI L'APPEL A EU LIEU PAR 'SC' ,
< IL EST POSSIBLE QUE L'ACCES A L'ITEM
< AIT LIEU VERS L'ITEM2 , ET NON L'ITEM1 ;
< TOUT DEPENDE DE CDRET.
<
<
< RESULTAT :
< A=CARACTERE COURANT DE L'ITEM1 ,
< IEG<--(IEG)+1 ,
< RETOUR DIRECT EN 'GOGE' SI DEBORDEMENT ITEM1 !!!
<
<
SIMU: EQU $
PSR X
LA IEG < A=INDEX COURANT DE L'ITEM1.
CP NCP < VALIDATION DE (IEG).
JGE SIMUR < ERREUR : HORS L'ITEM1 ...
LR A,X < OK , X=INDEX COURANT DE L'ITEM1.
LBY &AI1 < A=CARACTERE COURANT DE L'ITEM1.
IC IEG < PROGRESSION DE IEG.
PLR X
RSR
<
< ERREUR : HORS L'ITEM1 :
<
SIMUR: EQU $
BR ARETSC < RETOUR VERS SC.
<
<
< A C C E S A U N O M D ' U N E I M A G E
< D A N S L ' I T E M1 :
<
<
< RESULTAT :
< S'IL N'Y A PAS DE DEBORDEMENT DE L'ITEM1 ,
< 'NOM' RECOIT LE NOM RECUPERE DANS L'ITEM1
< A CONCURRENCE DE '2*LNOM' CARACTERES ,
< OU JUSQU'A TROUVER UN ';' , QUI EST ALORS
< REMPLACE PAR UN 'EOT'.
<
<
< A T T E N T I O N :
< LE 'NOM' EST INCHANGE, SI LE
< NOM CORANT RECUPERE EST VIDE (';').
<
<
INOM: EQU $
PSR X,Y < ON N'EST JAMAIS ASSEZ PRUDENT...
LXI 2*LNOM < X=NBRE MAX DE CARACTERES.
LYI 0 < INDEX COURANT DU NOM.
<
< BOUCLE DE RECUPERATION :
<
INOM1: EQU $
BSR ASIMU < A=CARACTERE COURANT DE ITEM1.
CPI ";" < EST-CE LA FIN DE NOM ???
JNE INOM2 < NON , ON LE CONSERVE.
CPZR Y < LE NOM RECUPERE EST-IL VIDE ???
JE INOM3 < OUI, 'NOM' RESTE ALORS INCHANGE.
LAI '04 < OUI , ON LE REMPLACE PAR 'EOT' ,
LXI 1 < ET ON ARRETE ICI LA BOUCLE ...
INOM2: EQU $
XR X,Y
STBY &ANOM < RANGEMENT DE (A) DANS NOM.
ADRI 1,X < PROGRESSION DE L'INDEX DE NOM.
XR X,Y
JDX INOM1 < SUITE EVENTUELLE DE LA BOUCLE
< DE RECUPERATION ...
INOM3: EQU $ < CAS DES NOMS VIDES.
PLR X,Y
RSR
PAGE
RETSC: EQU $
<
< R E T O U R V E R S S C.
<
< (NOTER QU'ON LUI RENVOIE 'A' = NOUVEL INDEX CARACTERE
< COURANT).
<
<
< INVALIDATION DE L'ITEM2 EN NE RAZANT QUE
< SON EN-TETE (EN EFFET IL NE FAUT PAS LE
< RAZER LUI-MEME CAR IL PEUT CONTENIR UNE
< BIBLIOTHEQUE APPELEE PAR 'SC'...) :
<
LXI LTN < X=NBRE DE MOTS DE L'EN-TETE.
RAZET: EQU $
STZ &AI2
JDX RAZET
<
< RESTAURATION DE L'EN-TETE DE L'ITEM1 :
<
LA ASI1
LB I1
LXI LNOM+1
MOVE
<
< RESTAURATION DES REGISTRES.
<
LA SAVKA
LR A,K < K DE ' A'.
PLR W
PLR B,X,Y,C
<
< RESTAURATION DU 'K' DE 'SC'.
<
LA SAVKSC
LR A,K
<
< RENVOI DU NOUVEL INDEX CARACTERE COURANT.
<
LA IEG
RSR < ET VOILA.
PAGE
<
<
< G E N E R A T E U R S Y N T H E T I Q U E V I D E O :
<
<
< PRINCIPE :
< CE PROCESSEUR PERMET A PARTIR DE
< COMMANDES CONTENUS DANS L'ITEM1 DE
< TRAVAILLER SUR DES IMAGES PRE-CONSTRUITES
< OU PAS ...
< SI MODCAL#0 : 'TI' EST EN FAIT APPELE
< PAR 'SC' QUI LUI DEMANDE AINSI
< D'INTERPRETER UNE PARTIE DE SES
< COMMANDES.
< MODCAL DONNE ALORS L'INDEX INITIAL
< DE SIMULATION CARACTERES IEG.
< LE BIT0 DE MODCAL INDIQUE ALORS LE
< NOM DE L'APPELANT DE SC : 0 APPEL PAR GE ,
< 1 : APPEL PAR EI ...
<
<
< ARGUMENTS :
< MODCAL=INDEX CARACTERE COURANT ,
< BIT0=0 : RETOUR A GE SI ALT-MODE ,
< BIT0=1 : RETOUR A EI SI ALT-MODE.
< CDRET=RELAI D'ACCES A L'ITEM COURANT.
< B=INDEX DE L'IMAGE APPELEE EVENTUELLEMENT
< PRECEDEMMENT PAR 'SC', LORS D'UN APPEL
< PAR 'SC' (MODCAL#0).
<
<
< FORMAT D'UNE IMAGE VIDEO SOUS SGN :
< MOTS0-9 : NOM DE L'IMAGE VIDEO , TERMINEE
< PAR UN 'EOT' S'IL Y A MOINS DE 20
< CARACTERES) ,
< MOT10 : 'EOT;'00 ,
< MOT11 : -3 : IMAGE DIRECTE ,
< -2 : IMAGE INVERSEE ,
< -1 : IMAGE A FOND HACHURE ,
< ON PEUT AINSI DIFFERNCIER
< UNE IMAGE VIDEO , D'UNE SIMULATION DE
< FLOPPY , MAIS AUSSI POURSUIVRE
< ULTERIEUREMENT LA MISE A JOUR D'UNE
< IMAGE VIDEO ...
<
<
< I N I T I A L I S A T I O N :
<
<
IMAGE: EQU $
LR K,A < 'K' DE SC.
LRM L,K
WORD LOC+'80 < BASE DU LOCAL DE ' A'.
WORD STACK-1 < PILE DE ' A'.
<
< SI C'EST LE PREMIER APPEL DE ' A' (CHARGEMENT INITIAL PAR 'SC', IL FAUT
< SAUVER LE LOCAL INITIAL ('LOCS' --> 'FLOCS') DANS LA ZONE DE SAUVEGARDE
< 'LOCBIS';
< SI CE N'EST PAS LE PREMIER APPEL, IL FAUT RESTAURER LA ZONE 'LOCS' --> 'FLOCS'
< INITIALE A PARTIR DE 'LOCBIS'.
<
PSR A,B,X
LRM A,B,X < PREPARATION DU MOVE.
WORD LOCBIS
WORD LOCS
WORD FLOCS-LOCS
CPZ IPRAP < TEST PREMIER APPEL.
STZ IPRAP < CE NE LE SERA PLUS.
JE IMAGE1
< C'EST LE PREMIER APPEL : SAUVER 'LOCS' DANS 'LOCBIS'.
XR A,B < MOVE 'LOC' --> 'LOCBIS'.
< SINON, FAIRE 'LOCBIS' --> 'LOCS'.
IMAGE1: EQU $
MOVE < ET VOILA...
PLR A,B,X
STA SAVKSC < SAVE LE 'K' DE SC.
< SAVE DES AUTRES REGISTRES DE 'SC' DANS LA PILE DE ' A'.
PSR B,X,Y,C
PSR W
LR K,A
STA SAVKA < 'K' DE ' A'.
LRM C,W < INITIALISATION DES BASES.
WORD IMAG < IMAGE.
WORD BRANCH < SANS DOUTE INUTILE.
<
< EXPLOITATION DES ARGUMENTS.
<
STB NOMARG < INDEX NOM IMAGE ARGUMENT EVENTUELLE.
STX AI1 < ITEM COURANT.
STY IEG < INDEX CARACTERE COURANT.
<
< SAUVEGARDE DE L'EN-TETE DE ITEM1 :
<
LB ASI1
LA I1
LXI LNOM+1
MOVE
CPZ NOMARG < Y-A-T'IL UNE IMAGE PRECEDENTE ????
JL PASIMA < NON...
<
< MISE EN PLACE D'UN NOM INITIAL (CAS 'SC') :
<
LY IEG < SAVE IEG DANS Y.
LA NOMARG
STA IEG < ET ON FAIT CROIRE QUE L'INDEX
< COURANT POINTE SUR LE NOM DE
< L'IMAGE PRECEDENTE...
BSR AINOM < RECUPERATION DU NOM DE L'IMAGE
< PRECEDENTE.
STY IEG < PUIS, ON RESTAURE IEG...
PASIMA: EQU $
IF INITS,X100,,X100
<
< INITIALISATION DE LA ZONE SCRATCH DU DISQUE :
<
LXI 128 < X=128 MOTS=1 SECTEUR.
E830: EQU $
STZ &ASECT < RAZ DU BUFFER SECTEUR COURANT.
JDX E830
STZ WDK+3 < RAZ DU NUMERO DE SECTEUR.
LXI LIMAG/128 < X=NBRE DE SECTEURS A INITIALISER.
LAD WDK
E831: EQU $
PSR X < SAVE LE DECOMPTE DES SECTEURS.
SVC 0 < INIT. LE SECTEUR COURANT.
PLR X
IC WDK+3 < PASSAGE AU SECTEUR SUIVANT.
JDX E831 < AU SUIVANT SI EXISTE ...
X100: VAL 0
<
< ENTREE DU NOM DE L'IMAGE :
<
IMAGE2: EQU $ < ENTRY POUR CHANGEMENT DE NOM.
< (SUITE A UNE 2EME INTERRO-
< GATION 'N').
BSR AINOM < RECUPERATION DU NOM DE L'2MAGE.
LAI '04
STBY &AEOT < MISE D'UN 'EOT' A PRIORI
< TOUT AU BOUT DU NOM.
< (MEME S'IL Y EN A DEJA UN) ...
<
< INTERROGATION DE L'UTILISATEUR :
<
E300: EQU $
STZ INIT < REINITIALISATION IMAGE A PRIORI.
STZ OG < LORS DE CHAQUE COMMANDE PRIMAIRE,
< ON INVALIDE AINSI LE CURSEUR
< GRAPHIQUE DE '0B; CELUI-CI PEUT
< ETRE REAUTORISEE PAR LA PRIMITIVE
< 'G' A LA SUITE DE 'M' DANS
< L'ITEM COURANT.
BSR ADESIR < QUESTION-REPONSE UTILISATEUR.
<
< REPONSES RECONNUES :
< R : ENREGISTREMENT D'UNE IMAGE VIDEO (SUR NVP='0A),
< A PARTIR D'UN DESSIN GRAPHIQUE (G2/G3) ,
< INITIALISATION DU FOND.
< E : IDENTIQUE A 'R' , MIAS SANS INITIALISATION
< DU FOND BIEN QU'IL SOIT DEMANDE POUR
< INITIALISRR 'APOINT'.
< RECUPERATION D'IMAGES PREEXISTANTES.
< V : ENREGISTREMENT VIDEO EXTERNE ,
< D : AFFICHAGE D'UNE IMAGE VIDEO ,
< G : VALIDATION IMAGE SANS LOAD
< DANS LE CAS DE L'APPEL PAR 'SC' ,
< F : RETOUR A 'GE'.
<
CPI "D"
JE DESSIN < DEMANDE D'UNE IMAGE VIDEO.
CPI "R"
JE RECORD < ENREGISTREMENT D'UNE IMAGE.
CPI "E"
JE EDIT < PRISE EN COMPTE D'UNE IMAGE
< PREEXISTANTE.
CPI "F"
JE RETSC < RETOUR A 'SC'.
CPI "G"
JE E2 < VALIDATION IMAGE SANS LOAD (CF: SC).
E4501: EQU $ < ERREUR DE COMMANDE.
<
< ERREUR :
<
E7000: EQU $
LAD MERR
BSR APRINT < REPONSE INCOMPREHENSIBLE ...
JMP E300 < VERS UNE NOUVELLE INTERROGATION.
PAGE
<
<
< I M A G E P R E E X I S T A N T E :
<
<
EDIT: EQU $
IC INIT < INIT#0 : DONC PAS D'ECRASEMENT
< DE L'IMAGE PREEXISTANTE PAR
< LE FOND !!!
<
<
< E N R E G I S T R E M E N T D ' U N E I M A G E :
<
<
RECORD: EQU $
<
< CHOIX DU FOND DE L'IMAGE :
<
<
< CONVERSION HEXADECIMALE --> BINAIRE :
<
BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA.
JNE RECORD < ERREUR DE CARACTERES ...
<
< CHOIX DE LA ROUTINE D'AFFICHAGE DES POINTS :
<
LB ASET < SET A PRIORI.
JAE E52 < EFFECTIVEMENT LE FOND EST NOIR.
LB ARESET < RESET A PRIORI.
CPI -1
JE E52 < EFFECTIVEMENT , LE FOND EST BLAN.
LB AINVER < ET BIEN ON FERA DE L'INVERSION.
E52: EQU $
STB APOINT < MISE EN PLACE DU RELAI D'ACCES
< A LA ROUTINE D'AFFICHAGE CHOISIE.
<
< INITIALISATION DE L'IMAGE :
<
CLEAR: EQU $
CPZ INIT < DOIT-ON INITIALISER LE FOND ???
STZ INIT < REINITIALISATION INIT A PRIORI.
JNE E400 < NON , PAS D'INITIALISATION ;
< C'EST UN CHANGEMENT DE NOM.
LX ALIMAG
E1: EQU $
STA &AIMAG < INITIALISATION DE L'IMAGE.
JDX E1
<
< E N R E G I S T R E M E N T G R A P H I Q U E :
<
E400: EQU $ < ENREGISTREMENT DE LA SUITE
< D'UN DESSIN GRAPHIQUE.
JMP E2 < VERS LE 2EME NIVEAU D'INTERRO...
<
<
< E R R E U R :
<
E102: EQU $
LAD MERR
BSR APRINT < ENVOI D'UN MESSAGE D'ERREUR.
BR AIMAG2 < VERS UNE REINITIALISATION DE TV.
PAGE
<
< L I S T E D E S S E C T E U R S A T R A I T E R :
<
< FONCTION :
< CE MODULE PERMET DE RECUPERER
< 8 CARACTERES HEXAS ; CHAQUE BIT
< CORRESPONADANT A 1 SECTEUR D'1NE
< IMAGE SCRATCH ; UN BIT A 0
< INDIQUE QU'IL FAUT IGNOERER CE
< SECTEUR LORS DES OPERATIONS LOGIQUES
< ENTRE IMAGES ....
<
E2101: EQU $
BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA.
JNE E2101 < ERREUR DE SYNTAXE.
STA PATS < MEMORISATION DES SECTEURS 0 A 'F.
E2102: EQU $
BSR AHEX < CONVERSION HEXA --> BINAIRE
< DES SECTEURS '10 A '1F.
JNE E2102 < ERREUR DE SYNTAXE.
STA PATS+1 < MEMORISATION SECTEURS '10-'1F.
JMP E410 < VERS L'2NTERROGATION.
<
< R E T O U R T E M P O R A I R E A U C C I :
<
E2700: EQU $
LAD DEMCCI
SVC 0
JMP E410 < VERS L'INTERROGATION SI !GO.
<
< D E F I N I T I O N D E L A M A T R I C E
< D E T R A N S F O R M A T I O N :
<
E2800: EQU $
BR ADEF < VERS LE MODULE SPECIFIQUE.
<
<
< R E C H E R C H E I M A G E V I D E O :
<
<
DESSIN: EQU $
LAI '05
BSR AGOSGN < TENTATIVE DE CHARGEMENT.
JE E350 < OK , CHARGEMENT REUSSI.
LAI '06
BSR AGOSGN < SINON TENTATIVE DE CHARGEMENT
< SOUS :SYS.
JNE E102 < ET NON , L'IMAGE N'EXISTE PAS !!!
E350: EQU $
LA &ALONG < VALIDATION DE L'IMAGE CHARGEE.
JAGE E102 < ERREUR : IL S'AGIT D'UNE
< SIMULATION DE FLOPPY.
CPI -3
JL E102 < IL S'AGIT DE QUELQUE CHOISE...
LR A,X < OK , X=INDEX DE RECUPERATION.
LA &LROUT < SI <0 , C'EST UN INDEX DE
< RECUPERATION DE LA ROUTINE
< D'AFFICHAGE DES POINTS.
STA APOINT < CE QUI NOUS DONNE L'ADRESSE
< DE LA ROUTINE SET/RESET/INVER.
<
<
< F I N D E C O N V E R S I O N :
<
<
E2: EQU $
<
< INTERROGATION UTILISATEUR :
<
E410: EQU $
BSR ADESIR < QUESTION-REPONSE UTILISATEUR.
<
< REPONSES RECONNUES :
< D : ON RESTE SUR L'INTERROGATION (PERMET DONC
< DE RAFRAICHIR L'IMAGE VIDEO...) ,
< DE PLUS EDITE LE NBRE DE POINTS DE L'IMAGE
< COURANTE...
< G : VERS UNE REINITIALISATION ENTIERE ,
< (SAUF DE L'IMAGE SCRATCH !!!)
< S : SAVE L'IMAGE COURANTE EN SCRATCH ,
< L : ENTREE DE LA LISTE DES SECTEURS D'1NE
< IMAGE SCRATCH A PRENDRE EN COMPTE ,
< O : 'OR' ENTRE L'IMAGE COURANTE ET L'IMAGE SCRATCH,
< A : DE MEME AVEC 'AND' ,
< E : DE MEME AVEC 'EOR' ,
< H : DE MEME AVEC 'AD' ('HADDITION'...) ,
< Z : DE MEME AVEC 'SB' ('ZOUSTRACTION'....)
< U : IMAGE-COURANTE <-- IMAGE-SRACTCH ,
< N : PERMET UN 2EME ENTRY DANS TV , AFIN
< DE POUVOIR FAIRE DES CHANGEMENTS DE NOM ,
< ET DES SUPERPOSITIONS ,...
< I : INVERSION VIDEO DE L'IMAGE ,
< P : FILTRAGE D'UNE IMAGE ,
< C : PSEUDO-COLORIAGE DE L'IMAGE ,
< T : TRANSPOSITION DE L'IMAGE ,
< = : DEFINITION DE LA MATRICE DE TRANSFORMATION ,
< V : ENTREE DE LA VIRTUALISATION DE L'2MAGE ,
< M : MODIFICATION INTERACTIVE DE L'IMAGE VIDEO
< PAR LE CURSEUR GRAPHIQUE DE LA VISU ,
< - : DELETE L'IMAGE VIDEO SOUS SGN ,
< + INSERT L'IMAGE VIDEO SOUS SGN ,
< F : RETOUR A GE SANS RIEN FAIRE D'AUTRE ,
< W : RETOUR TEMPORAIRE AU CCI ,
< R : DEMANDE D'UNE SUITE GRAPHIQUE AU DESSIN (VI1).
<
CPI "R"
JE E400 < VERS L'ENREGISTREMENT DE LA
< SUITE GRAPHIQUE DE L'IMAGE VIDEO.
CPI "V"
JE E2400 < VIRTUALISATION DE L'IMAGE.
CPI "L"
JE E2101 < ENTREE LISTE DES SECTEURS.
CPI "F"
JE E420 < VERS UN RETOUR IMMEDIAT A 'GE'.
CPI "W"
JE E2700 < DEMANDE DE RETOUR AU CCI.
CPI "-"
JE E430 < VERS UN DELETE-SGN DE L'IMAGE.
CPI "+"
JE E440 < VERS UN STORE SGN DE L'IMAGE.
CPI "="
JE E2800 < DEFINITION DE LA MATRICE.
CPI "I"
JE E870 < INVERSION VIDEO DE L'IMAGE.
CPI "P"
JE E2000 < DEMANDE DE FILTRAGE D'UNE IMAGE.
CPI "C"
JE E2010 < PSEUDO-COLORIAGE DE L'IMAGE.
CPI "T"
JE E2020 < TRANSPOSITION DE L'IMAGE.
CPI "M"
JE E790XX < MODIFICATION INTERACTIVE DE
< L'IMAGE VIDEO.
CPI "N"
JE E860 < 2EME ENTRY DANS LE PROCESSEUR.
CPI "O"
JE E842 < OR(IMAGE COURANTE,IMAGE SCRACTH).
CPI "A"
JE E843 < AND(IMAGE COURANTE,IMAGE SCRATCH)
CPI "E"
JE E844 < EOR(IMAGE COURANTE,IMAGE SCRATCH)
CPI "H"
JE E2550 < AD(IMAGE SCRATCH,IMAGE COURANTE).
CPI "Z"
JE E2551 < SB(IMAGE COURANTE,IMAGE SCRATCH).
CPI "U"
JE E2500 < RAPPEL DE L'IMAGE SCRATCH.
CPI "S"
JE E834 < SAVE L'IMAGE COURANTE EN SCRATCH.
CPI "G"
JE E833 < REINITIALISATION DE 'TV' ,
< SAUF DE LA ZONE SCRATCH !!!
CPI "B"
JE EB00 < "BASCULEMENT" DU MODE D'ACCES A DKU
< "DIRECT"/"INDIRECT", ET DEFINITION
< LONGUEUR D'ECHANGE SI PASSAGE EN MODE
< "DIRECT" STACKS RVB <--> DKU.
CPI "Q" < "QUANTA" D'ACCES QUEL QUE SOIT LE
< MODE D'ACCES UTILISE.
JE EQ00
CPI "@" < ADRESSE DANS STACK RVB POUR ACCES DKU
< EN MODE DIRECT.
JE EA00
CPI "K" < DEFINITION D'INCREMENT AUTOMATIQUE
< POUR LES ACCES DKU.
JE EK00
CPI "\"
JE EX00 < CHANGEMENT DES BORNES DEFINISSANT LA
< ZONE DKU UTILISABLE.
ADRI -"0",A < TEST DES FONCTIONS INDICATEUR TV.
JAL ERROR
CPI 7 < DOIT ETRE ENTRE 0 ET 7.
JG ERROR
XWOR%1: VAL TVSIMU=0 < DECALAGE DES INDICATEURS.
IF XWOR%1,,X100, < A APPLIQUER SI DIFFERENT DE ZERO.
SLLS XWOR%1
X100: VAL 0
TBT 13 < 0/1/2/3 OU 4/5/6/7 ???
RBT 13 < RAZ A PRIORI...
LR A,B < SAVE DANS B LA COULEUR...
JNC TVCOL1 < 0/1/2/3.
XWOR%1: VAL TVIN=0
XWOR%1: VAL NBITMO-1-XWOR%1
SBT XWOR%1 < 4/5/6/7.
TVCOL1: EQU $
STA STDKU+3 < STORE DES INDICATEURS.
LAD STDKU < STABILISATION DE L'IMAGE
SVC 0 < SI ON EST SOUS :SYS
STB STDKU+3 < RAZ LE BIT IN A PRIORI...
E410K: JMP E410 < VERS UNE NOUVELLE INTERROGATION.
ERROR: EQU $ < ERREUR 2EME NIVEAU INTERRO.
LAD MERR
BSR APRINT < REPONSE INCOMPREHENSIBLE ??
JMP E410 < VERS UNE NOUVELLE INTERROGATION.
<
< C H A N G E M E N T D E N O M :
<
E860: EQU $
IC INIT < INIT#0 : AINSI ON NE REINITIA-
< LISERA PAS LE FOND DE L'IMAGE ...
<
< R E I N I T I A L I S A T I O N G E N E R A L E ,
< S A U F L ' I M A G E S C R A T C H :
<
E833: EQU $
BR AIMAG2 < VERS UNE 2EME ENTRY ...
<
< V I R T U A L I S A T I O N D E L ' I M A G E :
<
E2400: EQU $
BR AVIRT < VERS LE MODULE SPECIFIQUE.
<
< F I L T R A G E I M A G E :
<
E2000: EQU $
LBI 0 < B=0 : DEMANDE DE FILTRAGE.
BR AFILTR < VERS LE MODULE DE FILTRAGE.
<
< P S E U D O - C O L O R I A G E :
<
E2010: EQU $
LBI 1 < B=1 : PSEUDO-COLORIAGE IMAGE.
BR AFILTR
<
< T R A N S P O S I T I O N D E L ' I M A G E :
<
E2020: EQU $
LBI -1 < B=-1 : DEMANDE DE TRANSPOSITION.
BR AFILTR
<
< I N V E R S I O N V I D E O D E L ' I M A G E :
<
E870: EQU $
LX ALIMAG < X=NBRE DE MOTS DE L'IMAGE.
E450: EQU $
LA &AIMAG < A=1 MOT DE L'IMAGE.
EORI -1 < INVERSION BIT A BIT DE L'IMAGE.
STA &AIMAG < ET MISE A JOUR DE L'IMAGE.
JDX E450 < AU MOT SUIVANT.
LA APOINT < ACCES A LA ROUTINE COURANTE.
LB ARESET < SET COURANT A PRIORI.
CP ASET < EST-CE SET ???
JE E451 < OUI , ON PASSE DONC EN RESET.
CP ARESET < EST-CE RESET ???
JNE E410 < NON , INVER QUE L'ON LAISSE
< TELLE QU'ELLE EST ...
LB ASET < ET OUI , ON PASSE DONC EN SET.
E451: EQU $
STB APOINT < MISE EN PLACE DE LA NOUVELLE
< ROUTINE SET/RESET/INVER.
JMP E410 < PUIS ENFIN VERS L'INTERROGATION.
<
< D E L E T E - S G N D E L ' I M A G E :
<
E430: EQU $
LAI '03
BSR AGOSGN < ESSAI DE DELETE SGN.
E102J: JNE E102 < ERREUR : LE NOM N'EXISTE PAS ...
JMP E410 < VERS LA DEMANDE DES DESIRS
< DE L'UTILISATEUR ....
<
< S T O R E - S G N D E L ' I M A G E :
<
E440: EQU $
LA APOINT < RECUPERATION DE L'ADRESSE DE
< LA ROUTINE SET/RESET/INVER.
LBI -3 < SET A PRIORI.
CP ASET
JE E960 < EFFECTIVEMENT C'EST SET.
LBI -2 < RESET A PRIORI.
CP ARESET
JE E960 < EFFECTIVEMENT C'EST RESET.
LBI -1 < ET BIEN NON , C'EST INVERS.
E960: EQU $
STB &ALONG < MAJ DE LA LONGUEUR (?) , POUR
< DISTINGUER UNE IMAGE VIDEO
< D'UNE IMAGE DE SIMULATION FLOPPY.
LAI '03
BSR AGOSGN < TENTATIVE DE DELETE PRELIMINAIRE.
LAI '04
BSR AGOSGN < TENTATIVE DE STORE.
JNE E102J < ERREUR DE STORE ...
JMP E410 < VERS LA DEMANDE DES DESIRS
< DE L'UTILISATEUR.
<
< R E T O U R A ' G E ' :
<
E420: EQU $
BR ARETSC < AIN'T IT HARD ???
<
< S A V E L ' I M A G E C O U R A N T E E N S C R A T C H
<
E834: EQU $
LY WDK+2 < Y=256 (POUR TRANSLATER
< L'@OCTET DU BUFFER DE SAVE).
LB IMAG2 < B=@OCTET INITIALE DU BUFFER
< DE SAVE.
STZ WDK+3 < RAZ DU NUMERO DE SECTEUR COURANT.
LXI LIMAG/128 < X=NBRE DE SECTEURS A SAVER.
LAD WDK
<
< BOUCLE DE SAVE DE L'IMAGE COURANTE PAR SECTEUR :
<
E832: EQU $
STB WDK+1 < MAJ DE L'@OCTET DU BUFFER.
PSR X < SAVE LE DECOMPTE DE SECTEURS.
SVC 0 < SAVE LE SECTEUR COURANT.
PLR X < RESTAURE LE DECOMPTE DES SECTEUR.
IC WDK+3 < PROGRESSION DU NUMERO DE SECTEUR
< COURANT.
ADR Y,B < PROGRESSION DE L'@OCTET BUFFER.
JDX E832 < AU SUIVANT ...
E410J: JMP E410K < VERS L'INTERRO. UTILISATEUR.
<
< O P E R A T I O N S L O G I Q U E S E N T R E
< I M A G E C O U R A N T E E T I M A G E
< S C R A T C H :
<
< FONCTION :
< CE MODULE PERMET DE REALISER
< LES 3 FONCTION SUIVANTES , SELON
< LE MODE D'APPEL :
< O : IMAGE-COURANTE=IMAGE-COURANTE.OR.IMAGE-SCRATCH
< A : IMAGE-COURANTE=IMAGE-COURANTE.AND.IMAGE SCRATCH
< E : IMAGE-COURANTE=IMAGE-COURANTE.EOR.IMAGE-SCRATCH
< H : IMAGE-COURANTE=IMAGE-COURANTE.AD.IMAGE SCRATCH
< Z : IMAGE-COURANTE=IMAGE-COURANTE.SB.IMAGE SCRATCH
< AINSI QUE :
< U : IMAGE-COURANTE=IMAGE-SCRATCH
< (U='UP')
<
E2500: EQU $
LAI '04 < CODE DU NOP AFIN DE NE PAS
< MELANGER L'IMAGE SCRATCH AVEC
< L'IMAGE COURANTE LORS DU RAPPEL.
JMP E845
E2550: EQU $ < AD.
LAI 'A9 < CODE DU AD INDIRECT SUR L.
JMP E845
E2551: EQU $ < SB.
LAI 'A8 < CODE DU SB INDIRECT SUR L.
JMP E845
E842: EQU $ < OR.
LAI 'B2 < CODE DU OR INDIRECT SUR L.
JMP E845
E843: EQU $ < AND.
LAI 'B3 < CODE DU AND INDIRECT SUR L.
JMP E845
E844: EQU $ < EOR.
LAI 'B4 < CODE DU EOR INDIRECT SUR L.
E845: EQU $
STBY &AOP < MISE EN PLACE DE L'INSTRUCTION
< VARIABLE D'OPERATION LOGIQUE
< ENTRE IMAGES.
<
< ENTREE DU NOM DE LA NOUVELLE IMAGE COURANTE :
<
BSR AINOM < RECUPERATION NOM DANS ITEM1.
<
< OPERATION LOGIQUE ENTRE LES 2 IMAGES :
<
BR AOPER < VERS L'OPERATION LOGIQUE ...
E790XX: JMP E790X < SAUT > 128 !
EQ00: JMP EQ00X < SAUT > 128 !
EX00: JMP EX00X < SAUT > 128 !
EK00: JMP EK00X < DEPLACEMENT > 128 !
<
< C H A N G E M E N T D U M O D E D ' A C C E S A D K U.
<
< LORS DE CETTE COMMANDE "B" (COMME "BASCULEMENT !), ON SERT UNE
< LONGUEUR OCTETS QUI PEUT ETRE NULLE, SUR 0 OU 4 CHIFFRES HEXA.
<
< - SI LONGUEUR NULLE, ON REVIENT EN MODE D'ACCES "INDIRECT" DKU.
< - SI LONGUEUR NON NULLE, ELLE EST VALIDEE (PAIRE, ET 0<=L<='6000)
< ET ON PASSE EN MODE D'ACCES DKU "DIRECT" (C-A-D STACKS RVB <--> DKU)
< ET L'ADRESSE STACK RVB RECOIT IMPLICITEMENT 0 (ELLE EST MODIFIABLE
< PAR LA COMMANDE "A-ROND").
<
EB00: EQU $
BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA.
JE EB01 < 4 CHIFFRES HEXA RECONNUS.
CPZR X
JNE ERROR
EB03: EQU $
LRM A,B,X < REPONSE VIDE OU NULLE, RETOUR ANCIEN MODE
WORD DMTRAV < DEMANDE 'RWDKU' MODE "INDIRECT".
WORD RWDKU
WORD FDMTRV-DMTRAV
MOVE < NOTA: ON NE TOUCHE NI A L'ADRESSE
< SECTEUR COURANTE, NI A L'INCREMENT
< COURANT.
JMP E410J < VERS COMMANDE SUIVANTE.
EB01: EQU $ < PASSER EN MODE D'ACCES "DIRECT" :
< STACK RVB <--> DKU.
< VALIDATION LONGUEUR.
JAE EB03 < REPONSE NULLE, RETOUR ANCIEN MODE.
JAL ERROR < NEGATIVE.
TBT 15
JC ERROR < IMPAIRE.
CP LO3IM
JG ERROR < TROP GRANDE.
STA RWDKU+2 < LONGUEUR DEMANDEE.
< PREMIER MOT DE LA DEMANDE.
LRM B
WORD '8A04 < FONCTION = LECTURE Q3 A PRIORI.
LA QC < QUANTA COURANT.
CPI 3
JE EB02 < C'EST BON.
SBT 16+12 < SET BIT QUANTA 1.
EB02: EQU $
STB RWDKU < PREMIER MOT DE LA DEMANDE.
< ADRESSE STACK RVB = 0 IMPLICITEMENT (MODIFIABLE PAR COMMANDE "@").
STZ RWDKU+1
< NOTA:
< ADRESSE SECTEUR COURANTE ET INCREMENT COURANT RESTENT INCHANGES.
JMP E410J < VERS COMMANDE SUIVANTE.
<
< D E F I N I T I O N / R E D E F I N I T I O N A D R E S S E
<
< D A N S S T A C K R V B ( M O D E " D I R E C T " D K U ).
<
< CETTE COMMANDE ( A-ROND) N'EST ACCEPTEE QUE SI LE MODE COURANT D'ACCE
< D'ACCES A DKU EST BIEN LE MODE DIRECT STACK RVB <--> DKU.
<
< DE PLUS CETTE ADRESSE DOIT :
< - ETRE EXPRIMEE SUR 0 OU 4 CHIFFRES HEXA, EN OCTETS.
< - ETRE PAIRE ET POSITIVE,
< - ETRE <= 'LO3IM' - LONGUEUR DEMANDEE (COMMANDE "B").
<
EA00: EQU $
< VERIFIER QUE L'ON EST BIEN EN MODE DIRCT STACK RVB <--> DKU.
LA RWDKU
TBT 13
JNC ERROR
< ACQUERIR L'ADRESSE SPECIFIEE.
BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA.
JE EA01 < 4 CHIFFRES HEXA RECONNUS.
CPZR X
JNE ERROR
< REPONSE VIDE, 0 IMPLICITE.
LAI 0
EA01: EQU $
JAL ERROR < NEGATIVE.
TBT 15
JC ERROR < IMPAIRE.
LR A,B
LA LO3IM < LONGUEUR DE 3 IMAGES (OCTETS).
SB RWDKU+2 < - LONGUEUR DEMANDEE.
CPR B,A < VALIDATION.
JL ERROR
STB RWDKU+1 < ADRESSE DEMANDEE.
JMP E410J < VERS COMMANDE SUIVANTE.
ERRORX: JMP ERROR < SAUT > 128 !
<
< D E F I N I T I O N / R E D E F I N I T I O N I N C R E M E N T
<
< P O U R A C C E S D K U.
<
< L'INCREMENT EST UN NOMBRE QUELCONQUE DE Q-SECTEURS, EXPRIME
< SUR 0 OU 4 CHIFFRES HEXA.
<
< CET INCREMENT EST VALABLE QUEL QUE SOIT LE MODE D'ACCES DKU UTILISE.
<
EK00X: EQU $
BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA.
JE EK01 < 4 CHIFFRES HEXA RECONNUS.
CPZR X
JNE ERROR
LAI 0 < REPONSE VIDE, 0 IMPLICITE.
EK01: EQU $
STA INCR < INCREMENT COURANT.
E410L: JMP E410J < VERS COMMANDE SUIVANTE.
EQ00X: EQU $
<
< S P E C I F I C A T I O N Q U A N T A D ' A C C E S A D K U.
<
< COMMANDE "Q" SUIVIE DE "1" OU "3".
<
BSR ADESIR < QUANTA DEMANDE.
ADRI -"0",A
CPI 1
JE EQ01 < QUANTA 1 DEMANDE.
CPI 3
JNE ERRORX
< QUANTA 3 DEMANDE.
CP QC < EST-ON DEJA EN QUANTA 3 ?
JE E410L < OUI, RIEN A FAIRE...
< MISE A JOUR QUANTA COURANT.
STA QC
< RAZ BIT QUANTA 1 DE LA DEMANDE DKU.
LA RWDKU
RBT 12
STA RWDKU
< DIVISER ADRESSE SECTEUR COURANTE PAR 3.
LA RWDKU+3
SLRD 16
DV QC
STA RWDKU+3
< DIVISER VALAD1 ET VALAD2 PAR 3 (BORNES).
LA VALAD1
SLRD 16
DV QC
STA VALAD1
LA VALAD2
SLRD 16
DV QC
STA VALAD2
< DIVISER L'INCREMENT COURANT +/- 2 PAR 3.
LA INCR
JAGE EQ04
ADRI -2,A
JMP EQ05
EQ04: EQU $
ADRI 2,A
EQ05: EQU $
SARD 16
DV QC
STA INCR
<
JMP EQ06 < VERS MISE A JOUR DE 'LMSQC'.
E790X: JMP E790 < SAUT > 128
< QUANTA 1 DEMANDE.
EQ01: EQU $
CP QC < EST-ON DEJA EN QUANTA 1 ?
JE E410L < OUI, RIEN A FAIRE.
< SET BIT QUANTA 1 DANS LES DEMANDES DKU 'DMTRAV' ET 'RWDKU'.
LA DMTRAV
SBT 12
STA DMTRAV
LA RWDKU
SBT 12
STA RWDKU
< MULTIPLIER PAR 3 L'ADRESSE SECTEUR COURANTE.
LA RWDKU+3
MP QC
STB RWDKU+3
< NOTER QUE SI L'ADRESSE SECTEUR SE TROUVE HORS DES LIMITES 'VALAD1','VALAD2'
< ELLE SERA VALIDEEE AVANT LE PROCHAIN ACCES DKU !
<
< MULTIPLIER PAR 3 'VALAD1' ET 'VALAD2'.
LA VALAD1
MP QC
LA M0FFF < NE PAS DEPASSER '0FFF !
CPR A,B
JLE EQ07
XR A,B < PRENDRE '0FFF.
EQ07: EQU $
STB VALAD1
LA VALAD2
MP QC
LA M0FFF < IDEM...
CPR A,B
JLE EQ08
XR A,B
EQ08: EQU $
STB VALAD2
< MULTIPLIER L'INCREMENT PAR 3.
LA INCR
MP QC
STB INCR
< ET, ENFIN, QUANTA COURANT RECOIT 1 !
LAI 1
STA QC
EQ06: EQU $
< METTRE A JOUR 'LMSQC' (LONGUEUR MOTS SECTEUR EN QUANTA COURANT).
LA QC
SLLS 7
STA LMSQC
JMP E410L < VERS COMMANDE SUIVANTE.
<
< C H A N G E M E N T D E S B O R N E S D E F I N I S S A N T
<
< L ' E S P A C E D K U A C C E S S I B L E.
<
< COMMANDE "\", SE PRESENTANT COMME SUIT:
<
< \XXXX\YYYY\
<
< AVEC XXXX = ADRESSE PREMIER SECTEUR AUTORISE ET
< YYYY = ADRESSE DERNIER SECTEUR AUTORISE.
<
EX00X: EQU $
BSR AHEX4 < ADRESSE PREMIER SECTEUR AUTORISE.
JNE ERRORX
PSR A
BSR ADESIR < ON ATTEND LE "\" DE SEPARATION.
CPI "\"
PLR A
JNE ERRORX
PSR A
BSR AHEX4 < ADRESSE DERNIER SECTEUR AUTORISE.
JNE ERRORX
PSR A
BSR ADESIR < ON ATTEND LE "\" DE FIN.
CPI "\"
PLR A,B < 'A' = DEBUT, 'B' = FIN.
JNE ERRORX
< ON TRANSFORME CES ADRESSES SECTEUR EN ADRESSES 16-SECTEURS, ET
< ON LES VALIDE.
SLRS 4
XR A,B
SLRS 4
CPR A,B
JG ERRORX
STA VALAD2
STB VALAD1
JMP E410L
<
<
< M O D I F I C A T I O N I N T E R A C T I V E :
< D E L ' I M A G E V I D E O :
<
<
< A T T E N T I O N :
< POUR QUE L'INTERACTION AIT LIEU,
< IL FAUT :
< 1- LA COMMANDE 'G' DOIT ETRE UTILISEE
< A LA SUITE DE 'M'; SA VALIDITE NE PORTE
< QUE JUSQU'A LA PROCHAINE COMMANDE
< PRIMAIRE.
< 2- LE NVP='0B DOIT ETRE ASSIGNE.
<
<
< COMMANDES RECONNUES :
< G : VALIDATION DE L'INTERACTION SUR '0B
< JUSQU'A LA PROCHAINE COMMANDE
< PRIMAIRE,
< F : FIN D'INTERACTION ,
< O : MISE A L'ORIGINE DE 'A' ,
< A : ORIGINE D'UN SEGMENT ,
< B : EXTREIMITE D'UN SEGMENT ; LE SEGMENT
< AB EST TRACE SUIVANT 'APOINT' ,
< PUIS B DEVIENT A ,
< S : IDEM A 'B' , SAUF QUE A NE CHANGE PAS ,
< - : MODE TRACE 'RESET' (NOIR) ,
< + : MODE TRACE 'SET' (BLANC) ,
< E : MODE 'SET' SI 'RESET'/'RESET' SI 'SET' ,
< I : MODE TRACE 'INVER' (INVERSION) ,
< C : COMMANDE NEUTRE (CURSEUR) ,
< N : REINITIALISATION DE LA TOPO DES BANDES ,
< M : MONTERER A TV/TI LA BANDE QUE
< L'ON VIRTUALISE ,
< T : MONTRER A TV/TI LA BANDE REELLE
< ASSOCIEE A UNE BANDE VIRTUELLE 'M' ,
< V : COLORIAGE VOLET A 1 SUR FOND 0 ,
< (ITEST=1)
< W : COLORIAGE VOLET A 0 SUR FOND 1 ,
< (ITEST=0)
< 0 : MISE A NOIR DU POINT COURANT ,
< 1 : MISE A BLANC DU POINT COURANT.
<
< LE POINT COURANT EST DEFINI PAR
< LA POSITION COURANTE DU CURSEUR
< GRAPHIQUE ('GIN').
<
E791: EQU $ < RETURN DE L'INTERACTION.
PLR A
STA APOINT < RESTAURE L'APOINT D'ENTREE.
JMP E410L < VERS L'INTERRO. UTILISATEUR.
E790: EQU $ < ENTRY DE L'INTERACTION.
LA APOINT < SAVE L'APOINT D'ENTRY.
PSR A
E780: EQU $
<
< MISE A L'ORIGINE DE A ET B :
<
LA NLIG < Y INITIAL.
STZ X1 < X1=0.
STA Y1 < Y1=NLIG.
STZ X2 < X2=0.
STA Y2 < Y2=NLIG.
<
< INTERACTION CURSEUR :
<
LAI 'FF
STBY CURSOR < A PRIORI : PAS D'INTERACTION !!!
E770: EQU $
LAD STDKU
SVC 0 < VISUALISATION AVANT LE CURSEUR...
LAD OG
SVC 0 < MISE EN GRAPHIQUE DE LA VISU.
LAD CU
SVC 0 < MISE EN FONCTION DU CURSEUR.
LAD LCU
SVC 0 < LECTURE DU CURSEUR GRAPHIQUE.
<
< STABILISATION DE L'2MAGE :
<
E4002: EQU $ < ON N'EST PAS SSOUS :SYS ...
<
< COORDONNEES DU POINT COURANT :
<
LA CURSOR+1 < A=Y(CURSEUR).
SLRS DEDY < PRISE EN COMPTE DE LA DEFINITION
< RELATIVE DE LA VIDEO.
SB NLIG < DU AU FAIT QUE LES AXES Y
< DE LA VIDEO ET DES VISUS
< SONT INVERSES.
NGR A,Y < Y=Y(POINT COURANT).
LA CURSOR+2 < A=X(CURSEUR).
SLRS DEDX < PRISE EN COMPTE DE LA DEFINITION
< RELATIVE DE LA VIDEO.
LR A,X < X=X(POINT COURANT).
<
< SIMULATION D'UN CURSEUR SUR LA TV :
<
LB TEMPO < B=NBRE DE CLIGNOTTEMENTS (PAIR).
E781: EQU $
PSR X
LAD STDKU
SVC 0 < EXECUTION MAITRE DE SP3.
PLR X
BSR AINVER < NBRE PAIR D'INVERSION DU POINT
< COURANT ...
ADRI -1,B < DECOMPTE DES CLIGNOTEMENTS.
CPZR B < EST-CE FINI ???
JG E781 < NON , ENCORE ...
<
< ANALYSE DES DESIRS DE L'UTILISATEUR :
<
LBY CURSOR < A=CARACTERE DE DEBLOCAGE.
CPI 'FF < Y-A-T'IL EU INTERACTION ???
JNE E6000 < OUI , (A) EST BON ,
BSR ADESIR < NON : SIMULATION DE L'ENTREE ...
E6000: EQU $
CPI "B"
JE E774 < EXTREMITE SEQUENTIELLE
< D'UN SEGMENT AB.
CPI "A"
JE E773 < ORIGINE D'UN SEGMENT.
CPI "0"
JE E771 < VERS LA MISE A NOIR DU POINT.
CPI "1"
JE E772 < VERS LA MISE A BLANC DU POINT.
CPI "S"
JE E775 < EXTREMITE ETOILEE D'UN SEGMENT.
CPI "-"
JE E776 < MISE EN MODE 'RESET' (NOIR).
CPI "+"
JE E777 < MISE EN MODE 'SET' (BLANC).
CPI "E"
JE E785 < VERS LA PERMUTATION 'SET'/'RESET'
CPI "I"
JE E778 < MISE EN MODE 'INVER' (INVERSION).
CPI "C"
JE E770 < COMMANDE NEUTRE ...
CPI "F"
JE E791 < FIN DE L'INTERACTION , RETOUR
< A L'INTERROGATION ('>').
CPI "O"
JE E780 < MISE A L'ORIGINE DE A ET DE B.
< COIN EN BAS A GAUCHE).
CPI "V"
JE E1010 < VERS LE COLORIAGE D'UN VOLET.
CPI "W"
JE E1020 < COLORIAGE INVERSE D'1N VOLET.
CPI "N"
JE E2300 < REINITIALISATION DE LA TOPO.
CPI "M"
JE E2301 < INDICATION BANDE A VIRTUALISER.
CPI "T"
JE E2302 < INDICATION DE LA BANDE REELLE.
CPI "G" < VALIDATION INTERACTION '0B ???
JE VALCU < ET OUI...
LAD MERR
BSR APRINT < DESIR INCOMPREHENSIBLE ...
JMP E770 < VERS UNE NOUVELL INTERACTION.
<
< MISE A NOIR DU POINT (X,Y) :
<
E771: EQU $
BSR ARESET < RESET DU POINT.
JMP E770 < VERS L'INTERACTION.
<
< MISE A BLANC DU POINT (X,Y) :
<
E772: EQU $
BSR ASET < SET DU POINT.
JMP E770 < VERS L'INTERACTION.
<
< ORIGINE 'A' D'UN SEGMENT :
<
E773: EQU $
STX X1 < CHANGEMENT DE M1 ('A').
STY Y1 < CHANGEMENT DE M1 ('A').
JMP E770 < VERS UNE NOUVELLE INTERACTION.
<
< EXTREMITE 'B' DU SEGMENT AB :
<
E774: EQU $
STX X2 < CHANGEMENT DE POINT M2 ('B').
STY Y2 < CHANGEMENT DE POINT M2 ('B').
BSR ASEG < TRACE DU SEGMENT AB.
STX X1 < M1 <-- M2.
STY Y1 < ('B' DEVIENT LE NOUVEAU 'A').
JMP E770 < VERS UNE NOUVELLE INTERACTION.
<
< EXTREMITE 'S' D'UN SEGMENT :
<
E775: EQU $
STX X2 < CHANGEMENT DE POINT M2 ('S').
STY Y2 < CHANGEMENT DE POINT M2 ('S').
LA X1
LB Y1
PSR A,B < SAVE LE POINT 'A' (M1).
BSR ASEG < TRACE DU SEGMENT M1M2.
PLR A,B < RESTAURE LE POINT 'A' (M1).
STA X1
STB Y1
JMP E770 < VERS UNE NOUVELLE INTERACTION.
<
< MODES DE TRACE DES SEGMENTS :
<
E776: EQU $
LB ARESET
JMP E779
E777: EQU $
LB ASET
JMP E779
E778: EQU $
LB AINVER
E779: EQU $
STB APOINT < MAJ TEMPORAIRE DE APOINT.
JMP E770 < VERS L'INTERACTION.
E785: EQU $
LB ASET < 'RESET' COURANT A PRIORI.
LA APOINT
CP ARESET
JE E779 < PASSAGE EN MODE 'SET'.
LB ARESET < MODE 'SET' COURANT A PRIORI.
CP ASET
JE E779 < PASSAGE AU MODE 'RESET'.
JMP E770 < MODE INCHANGE SI 'INVER'.
<
< C O L O R I A G E A 0 S U R F O N D 1 :
<
E1020: EQU $
LAI 0 < CONVENTIONS INVERSEES.
JMP E1021
<
< C O L O R I A G E A 1 S U R F O N D 0 :
<
E1010: EQU $
LAI 1 < CONVENTIONS NORMALES.
E1021: EQU $
STA ITEST < SAVE LES CONVENTIONS.
LY NLIG < Y=INDEX VERTICAL.
<
< BALAYAGE VERTICAL (Y) :
<
E1001: EQU $
LX NPPL < X=INDEX HORIZONTAL.
<
< BALAYAGE HORIZONTAL (X) :
<
E1002: EQU $
<
< RECHERCHE DU DERNIER POINT A 1 DE LA LIGNE (Y) :
<
BSR ATEST < TEST DU POINT (X,Y).
JC E1003 < ON S'ARRETE SUR LE DERNIER
< POINT A 1.
ADRI -1,X < SI 0 , PASSAGE AU POINT
< PRECEDENT DE LA LIGNE.
CPZR X < DEBUT DE LIGNE ???
JGE E1002 < NON , PASSAGE AU POINT PRECEDENT.
<
< CAS D'UNE LIGNE NOIRE , OU FIN DE
< TRAITEMENT D'UNE LIGNE :
<
E1004: EQU $
ADRI -1,Y < PASSAGE A LA LIGNE PRECEDENTE.
CPZR Y < DEBUT D'IMAGE ???
JGE E1001 < NON , LIGNE PRECEDENTE ...
JMP E770 < C'EST FINI , VERS L'INTER-
< ACTION DU CURSEUR.
<
< CAS OU ON A TROUVE UN DERNIER POINT
< BLANC (1) SUR LA LIGNE COURANTE :
<
E1003: EQU $
LR X,B < B=COORDONEE X DU DERNIER POINT
< BLANC (1) DE LA LIGNE (Y).
LXI 0 < RETOUR AU DEBUT DE LA LIGNE (Y).
<
< RECHERCHE DU 1ER POINT BLANC :
<
E1005: EQU $
BSR ATEST < TEST DU POINT (X,Y).
JC E1006 < ON S'ARRETE SUR LE 1ER POINT
< BLANC (1) TROUVE.
ADRI 1,X < SINON , PASSAGE AU POINT SUIVANT.
JMP E1005 < PARCOURS DE LA LIGNE (Y)
< SANS PRECAUTIONS , CAR ON EST
< SUR QU'IL Y A AU MOINS UN
< POINT BLANC (PEUT-ETRE UNIQUE??).
<
< CAS OU ON A TROUVE UN 1ER POINT BLANC (1) :
<
E1006: EQU $
CPR X,B < A-T'ON BALAYE TOUS LES POINTS
< DU 1ER AU DERNIER BLANC ???
JE E1004 < OUI , ALORS , IL FAUT PASSER
< A LA LIGNE PRECEDENTE.
BSR APOINT < SINON , ON TRAITE CE POINT
< (X,Y) A 1 (BLANC).
ADRI 1,X < PASSAGE AU POINT SUIVANT.
JMP E1006
<
< T O P O G R A P H I E D E S B A N D E S
< H O R I Z O N T A L E S :
<
< INDICATION D'UNE BANDE VIRTUELLE :
<
E2301: EQU $
LR Y,A < A=NUMERO DE LIGNE COURANTE.
SLRS 3 < A=NUMERO DE BANDE COURANTE.
STA BANDE < SAVE LA BANDE VIRTUELLE COURANTE.
BR AE770 < VERS L'INTERROGATION ...
<
< BANDE REELLE D'UNE BANDE VIRTUELLE :
<
E2302: EQU $
LX BANDE < X=BANDE VIRTUELLE COURANTE.
LR Y,A < A=LIGNE COURANTE.
SLRS 3 < A=BANDE COURANTE.
STBY &ATOPO < SAVE LA TOPOGRAPHIE.
BR AE770 < VERS L'INTERROGATION ...
<
< REINITIALISATION DE LA TOPO :
<
E2300: EQU $
LAI LIMAG/128-1 < A=NUMERO DE LA DERNIERE BANDE.
E2303: EQU $
LR A,X < X=NUMERO REGISTRE TOPOGRAPHIQUE.
STBY &ATOPO < REGISTRE <-- NUMERO DE REGISTRE.
ADRI -1,A < DECOMPTE.
JAGE E2303 < PARCOURS DE LA MEMOIRE TOPO.
STZ BANDE < RAZ LA BANDE VIRTUELLE COURANTE.
BR AE770 < VERS L'INTERROGATION ...
<
< V A L I D A T I O N I N T E R A C T I O N ' 0 B :
<
VALCU: EQU $
LA CU
ADRI -3,A < CALCUL DE 'OG' A PARTIR DE 'CU'.
STA OG < OG POSSEDE CETTE VALEUR JUSQU'A
< LA PROCHAINE COMMANDE PRIMAIRE.
BR AE770 < VERS L'INTERROGATION SUR '0B.
<
< E N T R E E D E L A T O P O G R A P H I E :
<
< FONCTION :
< CE MODULE PERMET D'INITIALISER DIRECTEMENT
< LES REGISTRES TOPOGRAPHIQUES DE L'IMAGE ;
< CEUX-CI SONT BAPTISES 0,....,9,A,...,V.
<
< CAS DES ERREURS :
< LA TOPOGRAPHIE EST ALORS
< REINITIALISEE ; UNE ERREUR
< VOLONTAIRE PERMET DONC DE
< REINITIALISER LA TOPOGRAPHIE ...
<
VIRT: EQU $
LXI 0 < X=NUMERO DE REGISTRE COURNT.
<
< BOUCLE DE RECUPERATION :
<
VIRT1: EQU $
PSR X < SAVE LE NUMERO DE REGISTRE.
LAI 0 < @MESSAGE=0.
BSR ADESIR < RECUPERATION D'UN CARACTERE.
PLR X < RESTAURE LE NUMERO DE REGISTRE.
ADRI -'30,A < CONVERSION BINAIRE.
JAL VIRT2 < ERREUR ...
CPI 9 < EST-CE UN CHIFFRE ???
JLE VIRT3 < OUI , OK.
ADRI -'41+'39+1,A < SINON , SUITE CONVERSION.
CPI 9 < EST-CE UNE LETTRE ???
JLE VIRT2 < NON , ERREUR.
CPI LIMAG/128-1 < EST-CE UN BON NUMERO ???
JG VIRT2 < NON , ERREUR.
VIRT3: EQU $ < CAS DES BONS NUMEROS VIRTUELS.
STBY &ATOPO < MEMORISATION TOPOGRAPHIE.
ADRI 1,X < PASSAGE AU REGISTRE SUIVANT.
LR X,A
CPI LIMAG/128 < EST-CE FINI ???
JL VIRT1 < NON , ON CONTINUE.
VIRT5: EQU $
BR AINTER < SI OUI , VERS L'2NTERROGATION.
<
< CAS DES ERREURS :
<
VIRT2: EQU $
LR X,Y < Y=INDEX COURANT DE LA TOPO.
LAI LIMAG/128-1 < A=NUMERO DE LA DERNIERE BANDE.
VIRT4: EQU $
LR A,X < LE REGISTRE TOPOGRAPHIQUE EST
STBY &ATOPO < AVEC SON PROPRE NUMERO.
ADRI -1,A < PASSAGE AU NUMERO PRECEDENT.
JAGE VIRT4 < AU REGISTRE PRECEDENT ...
CPZR Y < L'ERREUR S'EST-ELLE PRODUITE SUR
< LE 1ER REGISTRE TOPO ???
JE VIRT5 < OUI , ON CONSIDERE QU'IL
< N'Y AP AS ERREUR ....
BR AERR < VERS LE MESSAGE D'ERREUR.
<
< O P E R A T I O N L O G I Q U E
< E N T R E I M A G E S :
<
< ORIGINE :
< BIT0=0 : SENS CROISSANT ,
< =1 : SENS DECROISSANT ,
< BIT1=0 : FAIRE UN MIROIR OK ,
< 1 : SUIVANT LE BIT2 :
< BIT2=0 : PAS DE MIROIR, PERMET
< DONC DES EFFETS TRES
< SPECIAUX...
< 1 : CHOIX SELECTIF DE LA
< COULEUR DE L'IMAGE
< COURANTE.
< BIT14-15 : INDEX INITIAL XIMAG SI BIT2=0,
< SELECTION DES COULEURS SI BIT2=1.
<
<
OPER: EQU $
<
< DEMANDE DE L'ORIGINE DE L'IMAGE COURANTE :
<
BSR AHEX4 < ENTREE DE 4 CHIFFRES HEXA.
< CONTENUS DANS REP.
< (ET DANS L'ITEM1 POUR 'TI')
JE E475X < REPONSE HEXA OK...
XR A,X
CPI 1 < 1 SEUL CARACTERE RECONNU ???
XR A,X
JNE OPER < NON, ERREUR...
CPI 'E < OUI, EST-CE 'E OU 'F ???
JL OPER < NON, ERREUR...
< EFFECTUER L'INCREMENTATION AUTOMATIQUE POUR ACCES DKU.
PSR A
LA RWDKU+3 < ADRESSE SECTEUR COURANTE.
AD INCR < + INCREMENT.
STA RWDKU+3 < NOUVELLE ADRESSE SECTEUR.
PLR A < RAPPEL, ICI, 'A' = '000E OU '000F.
JMP COOL1 < VERS ACCES DKU.
E475X: EQU $
<
< VOYONS S'IL S'AGIT D'UN ORG DE TYPE 'EXXX OU 'FXXX (ACCES DKU AVEC SPECI-
< FICATION DE L'ADRESSE SECTEUR), AUQUEL CAS IL NOUS FAUT ENCORE UN CHIFFRE
< HEXA QUI NOUS DONNERA LE DERNIER CHIFFRE DE L'ADRESSE SECTEUR DKU DONT
< NOUS N'AVONS POUR L'INSTANT QUE LES 3 PREMIERS CHIFFRES.
<
SLRD 12
CPI 'E < EST-CE 'E OU 'F ?
JL E475X1
< OUI, ALLONS-Y POUR LE DERNIER CHIFFRE...
SLRD 4 < 'B' = 'EXXX OU 'FXXX.
PSR B < A CAUSE DE BSR AHEX...
LYI 1
BSR AHEX
PLR B
JNE ERRORY
SLLS 12
SCLD 4 < 'B' = ADRESSE SECTEUR, 'A' = 'E OU 'F.
STB RWDKU+3 < MISE A JOUR ADRESSE SECTEUR DANS LA
< DEMANDE DKU.
JMP COOL1 < VERS ACCES DKU.
ERRORY: BR AERR < SAUT > 128 !
E475X1: EQU $
SLLD 12 < DEFAIRE CE QU'ON A FAIT...
<
< VALIDATION DE L'ORIGINE :
<
LBI 1 < +1 : SENS CROISSANT A PRIORI ...
LYI 0 < INDEX INITIAL DE PARCOURS
< POSITIF D'1N SECTEUR.
LXI 0 < DEPART SUR LE 1ER SECTEUR
< DE L'IMAGE SCRATCH A PRIORI.
JAGE E475 < OK, SENS CROISSANT...
NGR B,B < SINON : B=-1 (DECROISSANT).
LYI 127 < INDEX INITIAL DE PARCOURS
< NEGATIF DE SECTEUR.
LXI LIMAG/128-1 < DEPART SUR LE DERNIER SECTEUR
< DE L'IMAGE SCRATCH.
STZ MIROR < MIROIR A PRIORI (=0).
TBT 1 < SUPPRESSION DE MIROIR DEMANDEE???
JNC E2840 < 0 : NON , MIROIR OK.
TBT 2
JC COOL1 < CHOIX COULEUR IMAGE COURANTE.
STA MIROR < 1 : SUPPRESSION DU MIROIR (#0).
RBT 1 < SUPPRESSION DE L'INDICATEUR (1).
E2840: EQU $
RBT 0 < RAZ LE BIT0 DE L'ORIGINE.
E475: EQU $
STB SENSX < SENSX=+1/-1.
STY SECTX < SAVE L'INDEX INITIAL DE PARCOURS
< DE SECTEUR.
CP ALIMAG < VALIDATION DE L'ORIGINE PAR
< RAPPORT A LA LONGUEUR DE IMAGE.
STA XIMAG < OK , ON INITIALISE XIMAG
< AVEC L'ORIGINE.
JGE CROTA < C'EST PEUT-ETRE UNE MODIFICATION DES
< REGISTRES DE COULEUR SI BIT1=1...
ADRI -127,Y
SBR Y,B < B=VALEUR DE TEST DE FIN DU
< PARCOURS D'UN SECTEUR.
STX RDK+3 < INITIALISATION NUMERO SECTEUR
< COURANT DE L'IMAGE SCRATCH.
LXI LIMAG/128 < X=NBRE DE SECTEURS A LIRE.
<
< BOUCLE D'OPERATIONS :
<
E840: EQU $
PSR X < SAVE LE DECOMPTE DES SECTEURS.
<
< ETAT DU SECTEUR COURANT :
<
PSR B
LA PATS
LB PATS+1 < (A,B)=LISTE DES SECTEURS.
LX RDK+3 < X=SECTEUR COURANT.
TBT 0,X < FAUT-IL TRAITER LE SECTEUR (X) ???
PLR B
LAI 0
ADCR A
STA INDICS < A=0 : NE PAS TRAITER LE SECTEUR.
JAE E2104 < INUTILE DE LIRE LE SECTEUR (X).
<
< ENTREE SECTEUR COURANT :
<
LBY &ATOPO < A=SECTEUR REEL ASSOCIE AU
< SECTEUR VIRTUEL (X).
STA RDK+3 < MAJ DE LA DEMANDE DE LECTURE.
PSR X < ET SAVE LE NUMERO DE SECTEUR
< VIRTUEL.
LAD RDK
SVC 0 < LECTURE DU SECTEUR COURANT.
PLR X
STX RDK+3 < RESTAURE LE SECTEUR VIRTUEL
< COURANT.
E2104: EQU $
LA RDK+3
AD SENSX
STA RDK+3 < CALCUL DU NUMERO DU SECTEUR
< SUIVANT.
LY SECTX < REINITIALISATION DE L'INDEX DE
< PARCOURS DU SECTEUR COURANT.
E841: EQU $
LR Y,X < X=INDEX COURANT DANS SECTEUR.
CPZ INDICS < OPERE-T'ON AVEC LE SECTEUR
< COURANT ????
JE E2100 < NON , ON NE FAIT PAS L'OPERATION.
LA &ASECT1 < ACCES AU MOT COURANT SECTEUR.
CPZR B < EST-CE UN PARCOURS CROISSANT ???
JG E1300 < OK , (A) EST BON.
CPZ MIROR < FAUT-IL MIROITER LE MOT ???
JNE E1300 < NON , ON SAUTE LE MIROIR !!!
<
< CAS D'UN PARCOURS DECROISSANT :
< IL FAUT MIROITER (???) LE MOT COURANT
< DU SECTEUR ; A NOTER QUE B='FFFF (-1).
<
LXI 16 < X=NBRE DE BITS A INVERSER.
E1301: EQU $
TBT 31,X < TEST UN BIT DE A.
JC E1302 < 1 : IL L'EST DEJA DANS B.
NGR X,X < 0 : IL FAUT LE RAZER DANS B.
RBT 0,X < ARZ EN MIROIR.
NGR X,X < RESTAURE X.
E1302: EQU $
JDX E1301 < AU BIT SUIVANT ...
LR B,A < A=MOT COURANT DU SECTEUR VU
< DANS UN MIROIR.
LBI -1 < RESTAURE (B)=-1 : VALEUR DE
< TEST DE (Y).
<
< OPERATION ELEMENTAIRE :
<
E1300: EQU $
LX XIMAG < X=INDEX COURANT DE L'IMAGE
< COURANTE.
OP: OR &AIMAG1 < LE MOT COURANT DE L'IMAGE
< COURANTE EST OPERER AVEC LE
< MOT COURANT DU SECTEUR COURANT.
STA &AIMAG1 < LE RESULTAT EST REMIS DANS
< L'IMAGE COURANT.
E2100: EQU $ < CAS DES SECTEURS IGNORES.
LA XIMAG
ADRI 1,A < INCREMENTATION DE XIMAG.
AND MASKX < ET CALCUL MODULO LIMAG.
STA XIMAG < MAJ DE XIMAG.
LA SENSX
ADR A,Y < INDEX DU MOT SUIVANT DU SECTEUR
< COURANT.
CPR Y,B < A-T'ON EXPLORE TOUT LE SECTEUR
< COURANT ???
JNE E841 < NON , ON CONTINUE ...
PLR X < OUI , RESTAURATION DU DECOMPTE
< DES SECTEURS A LIRE ...
JDX E840 < AU SECTEUR SUIVANT ...
BR AINTER < ET ENFIN , VERS L'INTERROGATION
< DE L'UTILISATEUR ...
OPERXX: JMP OPER < SAUT > 128 !
<
<
< M O D I F I C A T I O N D E S R E G I S T R E S
< D E C O U L E U R :
<
<
< FONCTION :
< LES REGISTRES DE COULEUR PERMETTENT
< DE COLORIER AVEC DES NIVEAUX DE GRIS
< LES DIFFERENTES COMBINAISONS DE 3
< POINTS DE MEME COORDONNEES APPARTENANT
< AUX 3 TRAMES R, V ET B ; SOIENT PR, PV
< ET PB UN TRIPLET DE TELS POINTS.
< CHAQUE COMBINAISON (PR,PV,PB), CES
< 3 POINTS ETANT BINAIRES (0/1) DONNENT
< DES NOMBRES DE 0 A 7 :
< PB=0 PV=0 PR=0 --> 000='0,
< PB=0 PV=0 PR=1 --> 001='1,
< PB=0 PV=1 PR=0 --> 010='2,...
< PB=1 PV=1 PR=1 --> 111='7,
< SOIT I L'UNE DES 8 VALEURS POSSIBLES ;
< CETTE VALEUR SERT D'INDEX DANS 3 MEMOIRES
< PARALLELES MR, MV ET MB CONTENANT CHACUNE
< DES MOTS DE 4 BITS PERMETTANT DE CODER
< DONC 16 NIVEAUX PAR COULEUR.
< SOIT DONC LE POINT P(PB,PV,PR) ; A CE
< POINT ON ASSOCIE DONC LE NOMBRE I TEL
< QUE I=PB*4+PV*2+PR*1 ; LE POINT P
< APPARAITRA DONC SUR L'ECRAN COMME LA
< SUPERPOSITION DU BLEU AVEC LE NIVEAU
< -MB(I), DU VERT AVEC LE NIVEAU -MV(I),
< ET ENFIN DU ROUGE AVEC LE NIVEAU -MR(I) ;
< LE SIGNE "MOINS" INDIQUE QUE LES NIVEAUX
< SONT COMPLEMENTES A 1 DANS LES 3 MEMOIRES.
<
<
< UTILISATION :
< EN REPONSE A 'ORG' DES DIFFERENTES
< OPERATIONS INTER-IMAGES, ON PEUT AGIR
< SUR CES 3 MEMOIRES PAR LA REPONSE :
< ORG=4XYZ, QUI A L'EFFET SUIVANT :
< 0<=X<=7 : SELECTIONNE 0 A 3 DES MEMOIRES,
< PAR EXEMPLE X=4 SELECTIONNE MB,
< X=2 : MV ET X=1 MR ; ON PEUT COMBINER
< CES DIFFERENTES VALEURS ;
< 0<=Y<=7 : DONNE L'INDEX DANS LES MEMOIRES
< SELECTIONNEES, ET ENFIN
< 0<=Z<=15 : DONNE LE NIVEAU DE GRIS COMPLEMENTE
< A 1, C'EST-A-DIRE QUE Z=0 DONNE LE MAXIMUM
< (BLANC), ET 15 LE MINIMUM (NOIR)...
<
<
CROTA: EQU $
TBT 1
JNC OPER < ERREUR... ON REDEMANDE 'ORG'...
LBY &AOP < RECUPERATION DE L'OPERATION DEMANDEE,
STBY &AOP2 < ET GENERATION...
LA XIMAG < NOTA : ON RAZE LES BITS INUTILISES
SLLS 4 < COMME CECI.
SLRS 4
OP2: OR &AMCOOL < OPERATION DYNAMIQUE : CUMUL
STA &AMCOOL < MAJ DES ORDRES COURANTS...
LBY &AOP2
CPI 'A8 < A-T'ON FAIT UNE SOUSTRACTION ???
JNE CROTA2 < NON...
LA &AMCOOL < OUI, IL FAUT
NGR A,A < INVERSER
STA &AMCOOL < LE RESULTAT...
CROTA2: EQU $
LAD DEMCU3
SVC 0 < ENVOI DE '0XYZ,
CROTA1: EQU $
BR AINTER < VERS L'INTERROGATION...
<
<
< A C C E S A B S O L U A U X I M A G E S
< S U R D K U :
<
<
< FONCTION :
< LE NSP='8A EST ASSIGNE IMPLICI-
< TEMENT A 'DKU' ; ENSUITE LES COMMANDES
< SUIVANTES SONT DISPONIBLES :
<
< ORG=EXXXX / ORG=E; ECRITURE SUR DKU,
< ORG=FXXXX / ORG=F; LECTURE DKU.
<
< DANS TOUS LES CAS (INCREMENTATION AUTOMATIQUE, OU SPECIFICATION
< DE L'ADRESSE SECTEUR EN CLAIR), ON A ICI:
<
< - ADRESSE SECTEUR DE LA DEMANDE DKU A JOUR (MAIS PAS VALIDEE),
< - 'A' = '000E OU '000F (ECRITURE / LECTURE).
<
COOL1: EQU $
TBT 15 < SENS DE L'ECHANGE.
LB RWDKU
RBT 14+16 < READ A PRIORI...
JC COOL2 < OUI (1)...
SBT 14+16 < NON (0) : WRITE...
COOL2: EQU $
STB RWDKU < MAJ DE LA DEMANDE...
<
< VALIDATION DE L'ADRESSE SECTEUR DE LA DEMANDE PAR RAPPORT AU BORNES
< 'VALAD1' ET 'VALAD2', EN TENANT COMPTE DE LA LONGUEUR DE L'ECHANGE ET
< DU QUANTA COURANT.
<
LA RWDKU+2 < LONGUEUR OCTETS ECHANGE.
SLRS 1 < LONGUEUR MOTS.
AD LMSQC < + LONGUEUR MOTS SECTEUR EN QUANTA
ADRI -1,A < COURANT -1.
SLRD 16
DV LMSQC < --> NOMBRE DE SECTEURS NECESSAIRE
< A L'ECHANGE.
ADRI 'F,A < ON ARRONDIT...
SLRD 16+XDKU < 'B' = UN NOMBRE DE 16-SECTEURS EN Q1/Q3.
LA RWDKU+3 < ADRESSE SECTEUR DE LA DEMANDE.
SLRS XDKU < EN 16 SECTEURS Q1/Q3.
CP VALAD1 < VALIDATION EN BAS...
JL ERRORY
ADR B,A
CP VALAD2 < VALIDATION EN HAUT...
JG ERRORY
< ALLONS-Y POUR L'ECHANGE...
LAD RWDKU
SVC 0 < ENVOI DE LA DEMANDE...
JNE OPERXX < ERREUR !!!
BR AINTER < COMMANDE SUIVANTE...
< CE MODULE PERMET DE COLRIER D'UNE
< MANIERE FICTIVE LES IMAGES , AVEC
< MALHEUREUSEMENT UN PETIT DEFAUT
< EN CE QUI CONCERNE LES CONCAVITES HAU-GAUCHE ...
< 3- B=-1 :
< 3.1- MATRICE=(0,1,1,0) :
< CE MODULE PERMET ALORS DE TRANSPOSER
< LA MATRICE DE L'IMAGE ET CECI
< BIT A BIT ; IL S'AGIT DONC D'1NE
< SYMETRIE PAR RAPPORT A LA DIAGONALE
< PRINCIPALE DE CELLE-CI.
< 3.2- MATRICE#(0,1,1,0) :
< CE MODULE PERMET DES TRANSFORMATIONS
< BIZARRES ET VARIEES !!?!?!!
<
FILTR: EQU $
LAI 1
STA ITEST < MISE EN MODE TESTS NORMAUX.
LY NLIG < INDEX DE BALAYAGE VERTICAL.
<
< BOUCLE DE BALAYAGE VERTICAL :
<
E2001: EQU $
PSR B < SAVE LA FONCTION DEMANDEE.
LR Y,A < Y=NUMERO DE LIGNE COURANTE.
SLRS 3
LR A,X < X=NUMERO DE BANDE COURANTE.
LA PATS < ACCES A LA LISTE DES BANDES
LB PATS+1 < A TRAITER.
TBT 0,X < LA BANDE COURANTE (X) DOIT-
< ELLE ETRE TRAITEE ???
PLR B < RESTAURE LA FONCTION DEMANDEE.
JNC E2821 < LA BANDE COURANTE EST IGNOREE.
LX NPPL < X=INDEX DE BALAYAGE HORIZONTAL.
CPZR B < EST-CE UNE TRANSPOISTION ???
JGE E2002 < NON , (X) EST BON.
CPZ DIAGON < UN PARCOURS DIAGONAL EST-IL
< DEMANDE ???
JE E2002 < NON , PARCOURS DE L'IMAGE
< ENTIERE.
LR Y,X < DANS LE CAS D'UNE TRANSPOSITION ,
< ON FAIT UN PARCOURS TRIANGULAIRE
< DE L'IMAGE.
<
< BOUCLE DE BALAYAGE HORIZONTAL :
<
E2002: EQU $
CPZR B
JL E2021 < DEMANDE DE TRANSPOSITION.
BSR ATEST < TEST DU POINT COURANT M(X,Y).
JNC E2003 < ININTERESSANT : M(X,Y)=0.
<
< CAS OU LE POINT COURANT M(X,Y)=1 :
<
ADRI 1,Y < PASSAGE AU VOISIN M(X,Y+1).
CPZR B < FILTRAGE OU PSEUDO-CLORIAGE ???
JG E2011 < PSEUDO-COLORIAGE DE L'IMAGE.
<
< FILTRAGE DE L'IMAGE :
<
BSR AEXIST < TEST DU POINT M(X,Y+1) ???
ADRI -1,Y < RETOUR AU POINT M(X,Y).
JAE E2003 < ININTERESSANT M(X,Y+1)
< EXISTE ET EST A 1.
ADRI -1,Y < PASSAGE SUR M(X,Y-1).
BSR AEXIST < TEST DU VOISIN M(X,Y-1) ???
ADRI 1,Y < RETOUR AU POINT M(X,Y).
JAE E2003 < ININTERESSANT : M(X,Y-1)
< EXISTE ET EST A 1.
BSR ARESET < DANS LE CAS OU M(X,Y) A 2
< VOISIN A 0 OU INEXISTANTS ,
< ON LE CONSIDRE COMME SINGULIER ,
< ET ON LE SUPPRIME ...
<
< CHANGEMENT DE POINT COURANT M(X,Y) :
<
E2003: EQU $
ADRI -1,X < BALAYAGE HORIZONTAL.
E2013: EQU $
CPZR X
JGE E2002
E2820: EQU $ < ENTRY SAUT DE LA BANDE COURANTE.
ADRI -1,Y < BALAYAGE VERTICAL.
CPZR Y
JGE E2001
BR AINTER < RETOUR A L'INTERROGATION ...
<
<
< P S E U D O - C O L O R I A G E :
<
<
E2011: EQU $
ADRI -1,X < PASSAGE AU POINT M(X-1,Y+1).
CPZR X < L'X EXISTE-T'IL ???
JL E2012 < NON , PAS D'INTERET ...
BSR AEXIST < TEST DU POINT M(X-1,Y+1).
JANE E2012 < M(X-1,Y+1) N'EXISTE PAS OU
< EST A 0.
ADRI -1,Y < SI M(X-1,Y+1)=1 , ON PASSE
< AU POINT M(X-1,Y).
BSR APOINT < COLORIAGE DE M(X-1,Y) SUIVANT
< 'APOINT'.
JMP E2013 < VERS LE POINT SUIVANT ...
E2012: EQU $
ADRI -1,Y < RETOUR A LA LIGNE (Y) ...
JMP E2013 < VERS LE POINT SUIVANT.
<
<
< T R A N S F O R M A T I O N M A T R I C I E L L E :
<
<
E2021: EQU $
PSR B,X,Y
< ON A ICI :
< B=-1.
BSR ATEST < TEST DU POINT M(X,Y).
ADCR B < B=0 SI M(X,Y)=1.
<
<
< T R A N S F O R M A T I O N D E S C O O R D O N N E E S :
<
<
< METHODE DE TRANSFORMATION :
<
< SOIT :
< MSX=SX*(2**XEQUIV)+RSX ,
< MSY=SY*(2**YEQUIV)+RSY ,
<
< MSX ET MSY SONT LES COORDONNEES DU POINT M(X,Y) ,
< SX ET SY EN SONT LES COORDONNEES REDUITES ,
< RSX ET RSY LES RESIDUS ; XEQUIV ET YEQUIV
< DETERMINENT LES CLASSES D'EQUIVALENCE DES
< COORDONNEES DU PLAN.
<
< LA MATRICE DE TRANSFORMATION 'T' S'APPLIQUE
< AUX COORDONNEES REDUITES :
< (SXP,SYP)=T*(SX,SY) ,
<
< LES COORDONNEES REDUITES SXP ET SYP
< SONT EVENTUELLEMENT TRANSLATEES A
< L'AIDE DES CONSTANTES DE TRANSLATION
< TRX ET TRY INTRODUITES AVEC XEQUIV ET
< YEQUIV :
< (SXP,SYP)=(SXP,SYP)+(TRX,TRY) ,
<
< LES COORDONNEES RESULTANTES X ET Y SONT :
< X=SXP*(2**XEQUIV)+RSX ,
< Y=SYP*(2**YEQUIV)+RSY.
<
<
PSR B < SAVE L'INDICATEUR D'ETAT.
STX MSX < SAVE TEMPORAIRE X DE M(X,Y).
STY MSY < SAVE TEMPORAIRE Y DE M(X,Y).
<
< DETERMINATION DES COORDONNEES REDUITES DE M(X,Y) :
<
LR X,A < A=COORDONNEE X.
LX XEQUIV < CLASSE D'EQUIVALENCE DES X.
SLRD 0,X < CALCUL DE LA CLASSE D'EQUI-
< VALENCE DU X DE M(X,Y).
STA SX < SAVE LA VALEUR REDUITE DE X.
LR X,A < A=XEQUIV ,
SLRS 5 < RECUPERATION DE TRX : A=TRX.
< (TRANSLATION DES X REDUITS)
SLLD 0,X < A=RESIDU DE LA COORDONNEE X.
STA RSX < ET SAVE LE REIDU DE X.
LR Y,A < A=COORDONNEE Y DE M(X,Y).
LX YEQUIV < ACCES CLASSE D'EQUIVALENCE DE Y.
SLRD 0,X < CALCUL DE LA CLASSE D'EQUI-
< VALENCE DE LA COORDONEE Y.
STA SY < SAVE LA COORDONNEE REDUITE Y.
LR X,A < A=YEQUIV ,
SLRS 5 < RECUPERATION DE TRY : A=TRY.
< (TRANSLATION DES Y REDUITS)
SLLD 0,X < A=RESIDU DE LA COORDONNEE Y.
STA RSY < SAVE LE RESIDU DE Y.
<
< TRANSFORMATION PAR LA MATRICE T DES
< COORDONNEES REDUITES DE M(X,Y) :
<
LA SX < COORDONNEE X REDUITE.
MP A21 < B=A21*X.
LR B,Y
LA SY
MP A22 < B=A22*Y.
ADR B,Y
LR Y,A < A=A21*X+A22*Y.
LX YEQUIV < X=CLASSE D'EQUIVALENCE DES Y.
SLLS 0,X < 'DEREDUCTION' DE Y.
AD RSY < RESTAURATION DU RESIDU DE Y.
AND NLIG < ET ENFIN , CALCUL MODULO LE
< NBRE DE LIGNES PAR ECRAN.
LR A,Y < Y=COORDONNEE Y DU POINT
< TRANSFORME DE M(X,Y).
LA SX < COORDONNEE X REDUITE.
MP A11 < B=A11*X.
LR B,X
LA SY
MP A12 < B=A12*Y.
ADR B,X
LR X,A < A=A11*X+A12*Y.
LX XEQUIV < X=CLASSE D'EQUIVALENCE DES X.
SLLS 0,X < 'DEREDUCTION' DE X.
AD RSX < RESTAURATION DU RESIDU DE X.
AND NPPL < ET ENFIN CALCUL MODULO LE NBRE
< DE POINTS PAR LIGNE.
LR A,X < X=COORDONNE DU POINT TRANFORME.
PLR B < RESTAURE L'INDICATEUR D'ETAT.
BSR ATEST < TEST DU POINT M(Y,X).
ADCR B < B=0 SI M(X,Y)#M(Y,X).
CPZR B
JNE E2022 < B=-1 OU B=1 ; CELA SIGNIFIE
< QUE M(X,Y)=M(Y,X) ; IL N'Y A
< DONC RIEN A FAIRE ...
BSR AINVER < SINON INVERSION DE M(Y,X).
<
< TRANSFORMATION INVERSE DES COORDONNEES :
<
LX MSX < RESTAURE COORDONNEE X DE M(X,Y).
LY MSY < RESTAURE COORDONNEE Y DE M(X,Y).
BSR AINVER < INVERSION DE M(X,Y).
E2022: EQU $
PLR B,X,Y
JMP E2003 < VERS LE POINT M(X,Y) SUIVANT.
<
< CAS OU LA BANDE COURANTE EST IGNOREE :
<
E2821: EQU $
LR X,A < X=NUMERO DE LA BANDE COURANTE.
SLLS 3
LR A,Y < Y=NUMERO DE LA 1ERE LIGNE
< DE LA BANDE COURANTE.
JMP E2820 < VERS LE PASSAGE A LA BANDE
< PRECEDENTE (SI EXISTE...).
<
< D E F I N I T I O N D E L A M A T R I C E
< D E T R A N S F O R M A T I O N :
<
< NOTA :
< IL EST POSSIBLE DE FAIRE GENERER
< AU PROCESSEUR DES MATRICES IDEMPOTENTES ,
< C'EST-A-DIRE TELLES QUE :
< M*M=I.
< CES MATRICES SONT DE LA FORME :
< -M22 (1-M22*M22)/M21
< M21 M22
<
< A NOTER QUE LES MATRICES
< +-1,0,0,+-1 CONVIENNENT AUSSI ...
<
DEF: EQU $
LYI 4 < Y=NBRE DE CARACTERES DEMANDES
< POUR CHAQUE COEFFICIENT.
<
< ENTREE DES CLASSES D'EQUIVALENCE XEQUIV ET
< YEQUIV AINSI QUE DES CONSTANTES DE TRANSLATION
< TRX ET TRY :
<
< BITS0-2 : TRANSLATION A DROITE DES X REDUITS (TRX) ,
< BITS3-7 : CLASSE D'EQUIVALENCE DES X (XEQUIV) ,
< BITS8-10 : TRANSLATION VERS LE BAS DES Y REDUITS (TRY) ,
< BITS11-15 : CLASSE D'EQUIVALENCE DES Y (YEQUUIV).
<
< EN DONNANT '0000 , LES CLASSES
< SONT PONCTUELLES ET NON TRANSLATEES !!!
<
LXI 5 < INDEX DU MESSAGE SUR LES
< CLASSES D'EQUIVALENCE X,Y.
BSR ACOEF < RECUPERATION DES CLASSES :
< OCTET0(A)=CLASSE DE X ,
< OCTET1(A)=CLASSE DE Y.
SLRD 16 < A=0 , B=CLASSES D'EQUIVALENCE.
DV C256 < DECONCATENATION DES 2 OCTETS.
STB YEQUIV < CLASSE D'EQUIVALENCE DE Y.
STA XEQUIV < CLASSE D'EQUIVALENCE DE X.
CP YEQUIV < LES CLASSES SONT-ELLES DE
< 'MEME TAILLE' ???
JNE E2811 < NON , ON VA DONC RENTRER UNE
< MATRICE QUELCONQUE ; EN EFFET
< LORSQUE LES CLASSES NE SONT
< PAS CARREES , LES MATRICES
< IDEMPOTENTES NE DONNENT
< PAS DES RESULTATS INVERSIBLES !!!
CPI '0F < UNE TRANSLATION A-T'ELLE ETE
< INTRODUITE , OU BIEN LA CLASSE
< DEMANDEE EST-ELLE SUPERIEURE
< A '0F ???
JG E2811 < UNE MATRICE IDEMPOTENTE NE
< DONNERA PAS DE BONS RESULTATS !!!
E2810: EQU $
BSR ADESIR < L'UTILISATEUR DESIRE-T'IL
< UNE MATRICE IDEMPOTENTE OU PAS ???
CPI "N" < A CONTIENT LA REPONSE ...
JE E2811 < IL DESIRE RENTRER LA MATRICE
< ENTIERE (4 COEFFICIENTS).
CPI "O"
JNE E2810 < ERREUR , ON RECOMMENCE ...
<
< GENERATION D'UNE MATRICE IDEMPOTENTE :
<
LXI 2 < INDEX DU MESSAGE 'M22'.
BSR ACOEF < ENTREE DU COEFFICIENT M22.
STA SA22 < ET SAVE TEMPORAIRE.
LXI 1 < INDEX DU MESSAGE 'M21'.
BSR ACOEF < ENTREE DU COEFFICIENT M21.
STA SA21 < ET SAVE TEMPORAIRE.
E2816: EQU $ < ENTRY DE RECHERCHE D'UN JEU
< DE M21,M22 QUI DONNENT UNE
< MATRICE M ENTIERE.
LA SA22
LR A,Y < Y=SA22.
MP SA22 < B=SA22*SA22.
LAI 1
SBR B,A < A=1-SA22*SA22.
SARD 16 < ET CADRAGE SUR 32 BITS.
DV SA21 < CALCUL DE (1-SA22*SA22)/SA21.
CPZR B < LE RESTE EST-IL NUL ???
JE E2815 < OK , RESTE NUL , M EST ENTIERE !
LAD MERR
BSR APRINT < SINON , ENVOI D'UN MESSAGE
< D'ERREUR.
IC SA22 < PUIS MODIFICATION DE SA22 ,
JMP E2816 < PUIS BOUCLAGE JUSQU'A TROUVER
< LE BON COUPLE M21,M22 , OU
< JUSQU'A UN ALT-MODE !!!
E2815: EQU $ < OK , MATRICE ENTIERE !!!
STA A12 < OK , GENERE A12.
LA SA21
STA A21 < OK , GENERE A21.
STY A22 < OK , GENERE A22.
NGR Y,Y
STY A11 < OK , GENERE A11=-A22.
JMP E2803 < VERS L'ENTREE DU MODE DE
< PARCOURS DE L'IMAGE.
<
< ENTREE D'UNE MATRICE QUELCONQUE :
<
E2811: EQU $
LXI 4 < X=NBRE DE COEFFICIENTS MATRICIELS
< A ENTRER.
<
< ENTREE DES 4 COEFFICIENTS A11,A12,A21,A22 :
<
E2801: EQU $
BSR ACOEF < ENTREE DU COEFFICIENT MIJ.
STA &AMAT < SI OK , ON RANGE MIJ DANS
< LA MATRICE(X).
JDX E2801 < AU COEFFICIENT SUIVANT.
<
< DEMANDE DE LA NATURE DU PARCOURS DE L'IMAGE :
<
E2803: EQU $
STZ DIAGON < A PRIORI PARCOURS IMAGE ENTIERE.
BSR ADESIR < ENTREE DES DESIRS UTILISATEUR.
CPI "N" < A CONTIENT LE CARACTERE ENTRE.
JE E2802 < OK , PARCOURS IMAGE ENTIERE.
CPI "O"
JNE E2803 < ERREUR , ON REINTERROGE ...
IC DIAGON < PARCOURS DIAGONAL DEMANDE.
E2802: EQU $
BR AINTER < VERS L'INTERROGATION UTILISATEUR.
PAGE
<
<
< E N T R E E U N C O E F F I C I E N T
< D E L A M A T R I C E M :
<
<
< ARGUMENT :
< X=INDEX DU COEFFICIENT :
< 4 : A11 ,
< 3 : A12 ,
< 2 : A21 ,
< 1 : A22.
<
<
< RESULTAT :
< A=VALEUR BINAIRE DU COEFFICIENT.
<
<
COEF: EQU $
PSR X < SAVE LE DECOMPTE X.
BSR AHEX < CONVERSION BINAIRE DE MIJ.
PLR X < RESTAURE LE DECOMPTE X.
JNE COEF < ERREUR DE SYNTAXE HEXADECIMALE.
RSR
PAGE
<
< T R A C E V I D E O D ' U N S E G M E N T E N S O L A R.
<
< (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !).
<
<
<
SEG: EQU $
<
< PROLOGUE: SAUVEGARDE DES REGISTRES UTILISES ET SAUVEGARDE DANS LA PILE
< (QUI EST GRANDE !) DE LA ZONE QU'ON VA UTILISER POUR CONSTRUIRE L'EN-TETE
< DE L'IMAGE.
<
PSR A,B,X,Y
PSR W
<
LR K,B
ADRI 1,B < ZONE RECEPTRICE.
LRM A,X,W
WORD ENTIM < ZONE EMETTRICE (A SAUVER DANS LA PILE).
WORD LENTIM < LONGUEUR EN-TETE IMAGE.
WORD ENTIM < POUR BASER L'EN-TETE.
MOVE
ADRI LENTIM,K < MISE A JOUR DE 'K'.
<
< ICI, ON A SAUVEGARDE LA ZONE DE CONSTRUCTION DE L'EN-TETE DANS LA PILE,
< ON VA CONSTRUIRE L'EN-TETE ET FAIRE LA DEMANDE D'INTERPOLATION VIDEO.
<
< CONVERSION DES COORDONNEES VIDEO EN COORDONNEES GRAPHIQUES.
<
LA X1 < X1 VIDEO.
SLLS DEDX
STA DEPX1,W < X1 GRAPHIQUE.
LA X2 < X2 VIDEO.
SLLS DEDX
STA DEPX2,W < X2 GRAPHIQUE.
LA Y1 < Y1 VIDEO.
SB NLIG
NGR A,A
SLLS DEDY
STA DEPY1,W < Y1 GRAPHIQUE.
LA Y2 < Y2 VIDEO.
SB NLIG
NGR A,A
SLLS DEDY
STA DEPY2,W < Y2 GRAPHIQUE.
<
< POSITIONNEMENT DU MODE DE TRACE ('SBT'/'RBT').
<
STZ DEPMOD,W < MODE TRACE = 'RBT' A PRIORI.
LA APOINT
CP ARESET
JE SEGRS < C'EST 'RBT'.
CP AINVER
JE SEGINV
IC DEPMOD,W < C'EST 'SBT'.
JMP SEGRS
SEGINV: EQU $
DC DEPMOD,W < C'EST 'IBT'.
SEGRS: EQU $
LRM A,X
WORD ENTIM-ZERO*2 < ADRESSE OCTET EN-TETE IMAGE.
WORD LENTIM+LIMAG*2 < LONGUEUR OCTETS EN-TETE + IMAGE.
STA STDKU+1
STX STDKU+2
LAD STDKU < DEMANDE INTERPOLATION ET AFFICHAGE.
SVC 0
LRM A,X
WORD IMAG-ZERO*2 < RESTAURATION ADRESSE ET
WORD LIMAG*2 < LONGUEUR IMAGE DANS LA DEMANDE.
STA STDKU+1
STX STDKU+2
<
< EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...).
<
ADRI -LENTIM,K < RESTAURATION DE 'K'.
LR K,A
ADRI 1,A < ZONE EMETTRICE.
LRM B,X
WORD ENTIM < ZONE RECEPTRICE (A RESTAURER).
WORD LENTIM < LONGUEUR.
MOVE
<
PLR W
PLR A,B,X,Y
RSR
PAGE
<
<
< C O N V E R S I O N H E X A ---> B I N A I R E :
<
<
< ARGUMENT :
< Y=NBRE DE CARACTERES A DECODER (1 A 4) ,
< ITEM1 CONTIENT 4 CARACTERES COURANTS PRESUMES HEXA.
<
<
< RESULTAT :
< B=0 : OK ,
< =1#0 : CARACTERE ERRONNE ,
< INDICATEURS SUR LA VALEUR DE (B) ,
< A=VALEUR BINAIRE DES (Y) CARACTERES DE (REP)
< SI B=0, OU LA VALEUR COURANTE SI B#0 SUR "S"...
<
<
HEX: EQU $
LXI 0 < INDEX DU BUFFER DE REPONSE.
LBI 0 < CLEAR LE REGISTRE B.
E55: EQU $
BSR ASIMU < A=CARACTERE COURANT DE ITEM1.
ADRI -'30,A
JAL E472 < ERREUR : CARACTERE NON RECONNU.
CPI 9 < EST-CE UN CHIFFRE ???
JLE E51 < OUI , C'EST UN CHIFFRE.
ADRI -'41+'39+1,A < NON.
CPI 'A < VALIDATION.
JL E472 < ERREUR : CARACTERE NON RECONNU.
CPI 'F < VALIDATION.
JG E472 < ERREUR : CARACTERE NON RECONNU.
E51: EQU $
SCRS 4 < MISE DES 4 BITS EN TETE DE A.
SCLD 4 < ET CONCATENATION A B.
ADRI 1,X < PROGRESSION DE L'INDEX.
CPR X,Y < EST-CE FINI ???
JNE E55 < NON , ON CONTINUE.
LR B,A < A=VALEUR BINAIRE DE (REP).
LBI 0 < B=0 : RETOUR OK.
E473: EQU $
CPZR B < POSITIONNEMENT DES INDICATEURS.
RSR
<
< RETOURS EN ERREUR :
<
E472: EQU $
LR B,A < A=VALEUR COURANTE...
LBI 1 < B#0.
JMP E473 < VERS LA SORTIE ...
<
< E N T R E E / C O N V E R S I O N D E 4 C H I F F R E S
<
< H E X A.
<
<
< ATTENTION !
<
< DETRUIT LE REGISTRE 'Y' !
<
HEX4: EQU $
LYI 4 < 4 CHIFFRES HEXA DEMANDES.
BR AHEX < ET VOILA ...
PAGE
<
<
< E M I S S I O N M E S S A G E :
<
<
< ARGUMENT :
< A=@MOT DU MESSAGE.
<
<
PRINT: EQU $
PSR C,X < SAVE L'@IMAGE VIDEO ET (X).
LR A,C < C=@MOT DU MESSAGE.
ADR A,A
ADRI 1,A < A=@OCTET DU MESSAGE.
STA DEMOUT+1 < MAJ DE DEMOUT.
LBY 0,C < A=LONGUEUR DU MESSAGE.
STA DEMOUT+2 < MAJ DE DEMOUT.
LAD DEMOUT
SVC 0 < EMISSION DU MESSAGE.
PLR C,X < RESTAURE L'@IMAGE VIDEO ET (X).
RSR < RETOUR.
<
<
< I N T E R R O G A T I O N U T I L I S A T E U R :
<
<
< RESULTAT :
< A=CARACTERE COURANT DE L'ITEM1 (REPONSE...)
< (LES 'SPACE' SONT IGNORES)
<
<
DESIR: EQU $
LAD STDKU
SVC 0
E4003: EQU $ < ON N'EST PAS SOUS :SYS ...
DESIR1: EQU $
BSR ASIMU < A=CARACTERE COURANT DE L'ITEM1.
CPI " "
JE DESIR1 < LES 'SPACE' EN REPONSE SONT
< DES ELEMENTS NEUTRES , ET
< IGNORES ....
RSR
PAGE
<
<
< A C C E S A U S G N :
<
<
< ARGUMENT :
< A=NVP D'ACCES.
<
<
< RESULTAT :
< X=CONDITION DE RETOUR DU SGN.
<
<
GOSGN: EQU $
STBY SGN
LAD SGN
SVC 0 < ACCES AU SGN.
RSR
<
< F I N D U C O D E D E ' A '.
<
< (POUR SA GENERATION EN TANT QU'ITEM, NE PAS CONFONDRE AVEC
< L'ESPACE MEMOIRE QU'IL OCCUPERA, CF CI-APRES).
<
FINCOD: EQU $
<
< L O C A L ' B I S ' D E ' A '
<
LOCBIS: DZS FLOCS-LOCS < POUR SUVEGARDER LA ZONE DU LOCAL INITIAL
< A SUVEGARDER.
PAGE
<
<
< B U F F E R S E C T E U R E T P I L E :
<
<
STACK: EQU $
BUFFER: EQU STACK+SSTACK
SECTOR: EQU BUFFER
ZSECTX: VAL SECTOR-ZERO*2
ZSECT2: EQU ZERO+ZSECTX < @OCTET DU BUFFER SECTEUR.
$EQU BUFFER+128 < POUR VALIDATION TAILLE MEMOIRE DE ' A'.
PAGE
<
<
< I M P L A N T A T I O N :
<
<
FIMPL: EQU $ < FIN D'IMPLANTATION.
XWOR%1: VAL FIMPL-IMPL < ESPACE MEMOIRE TOTAL DE ' A'.
IF XWOR%1-'800-'10,XWOR%,XWOR%, < ON A DROIT A 2K - '10 MOTS.
IF ERREUR D'IMPLANTATION ( > 2K MOTS).
XWOR%: VAL 0
XWOR%1: VAL FINCOD-IMPL < TAILLE DU CODE SEUL DE ' A' (POUR SA
< GENERATION EN TANT QU'ITEM).
XWOR%2: VAL ZERO-BRANCH+PILE-LTNI-LTNI
DZS XWOR%2-XWOR%1 < POUR COMPATIBILITE AUTRES PROCESSEURS.
PAGE
<
<
< G E N E R A T I O N D U P R O C E S S E U R :
<
<
LOCAL
XXXLOC: EQU $
XXXCCI: WORD 1 < RETOUR AU CCI.
XXXMOK: BYTE '6D;"O"
ASCI "K!" < MESSAGE 'OK!'.
XXXDOK: WORD '0202 < ENVOI DU MESSAGE 'OK'.
WORD XXXMOK-ZERO*2
WORD 4
XXXSGN: WORD '8402 < DEMANDE DE GENERATION DU PROCESSEUR.
WORD IMPL-ZERO*2 < @OCTET DE LA BRANCHE.
WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 < POUR COMPATIBILITE AUTRES
< PROCESSEURS DE SMC.
WORD -1
NLS
NOMOV1: @
IF '0006='F700,,XWOR%,
LST
XXXOV1: WORD DEBOV1 < ADRESSE DEBUT OVERLAY 1.
NLS
XWOR%: VAL 0
NOMOV2: @
IF '0006='F700,,XWOR%,
LST
XXXOV2: WORD DEBOV2 < ADRESSE DEBUT OVERLAY 2.
NLS
XWOR%: VAL 0
LST
XXXPIL: DZS 2 < PILE DE GENERATION.
PROG
USE L,XXXLOC+'80
WORD XXXLOC+'80 < VALEUR INITIALE DE LA BASE L.
XXXGEN: EQU $
LRP L < INITIALISATION DE LA BASE L.
LA -1,L
LR A,L
LAD XXXPIL-1 < INITIALISATION DE L'ADRESSE DE PILE.
LR A,K
NLS
NOMOV2: @
IF '0006='F700,,XWOR%,
LST
<
< TENTATIVE DE GENERATION DE L'OVERLAY 2.
<
XXXGN4: EQU $
LB XXXSGN+1
LA XXXOV2 < PLACER SON ADRESSE DE DEBUT.
SLLS 1
STA XXXSGN+1
LAD XXXSGN < GENERATION.
SVC 0
STB XXXSGN+1
JE XXXGN5 < OK ...
<
< ERREUR - L'OVERLAY EXISTE DEJA.
<
LAD XXXCCI < RETOUR CCI.
SVC 0
JMP XXXGN4 < ET REESSAI.
<
< BONNE GENERATION.
<
XXXGN5: EQU $
LAD XXXDOK < ENVOI MESSAGE OK.
SVC 0
LAD XXXCCI < ET RETOUR AU CCI.
SVC 0
NLS
XWOR%: VAL 0
NOMOV1: @
IF '0006='F700,,XWOR%,
LST
<
< TENTATIVE DE GENERATION DE L'OVERLAY 1.
<
XXXGN7: EQU $
LB XXXSGN+1
LA XXXOV1 < PLACER SON ADRESSE DE DEBUT.
SLLS 1
STA XXXSGN+1
LAD XXXSGN < GENERATION.
SVC 0
STB XXXSGN+1
JE XXXGN8 < OK ...
<
< ERREUR - L'OVERLAY EXISTE DEJA.
<
LAD XXXCCI < RETOUR CCI.
SVC 0
JMP XXXGN7 < ET REESSAI.
<
< BONNE GENERATION.
<
XXXGN8: EQU $
LAD XXXDOK < ENVOI MESSAGE OK.
SVC 0
LAD XXXCCI < ET RETOUR AU CCI.
SVC 0
NLS
XWOR%: VAL 0
LST
<
< TENTATIVE DE GENERATION :
<
XXXGN1: EQU $
LAD XXXSGN
SVC 0 < ENVOI DEMANDE DE GENERATION.
JNE XXXGN2 < ERREUR : IL EXISTE DEJA!!!
<
< OK , BONNE GENERATION :
<
LAD XXXDOK
SVC 0 < ENVOI DU MESSAGE OK.
<
< RETOUR DEFINITIF AU CCI :
<
XXXGN3: EQU $
LAD XXXCCI
SVC 0 < RETOUR AU CCI.
JMP XXXGN3 < CAS DES !GO.
<
< CAS DES ERREURS DE GENERATION :
< LE PROCESSEUR EXISTE DEJA:
<
XXXGN2: EQU $
LAD XXXCCI
SVC 0 < RETOUR PROVISOIRE AU CCI.
JMP XXXGN1 < TRY AGAIN LA GENERATION.
END XXXGEN
Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.