NMPROC: VAL "LP" < NOM DU PROCESSEUR.
IDP "LP - RELEASE 16/02/1980"
IDP "JOHN F. COLONNA"
EOT #SIP DEFINITION CMS5#
IF ORDI-"S",XWOR%,,XWOR%
NBTVIN: VAL TVIN=0
NBTVIN: VAL 15-NBTVIN < NUMERO DU BIT TVIN.
XWOR%: VAL 0
EOT #SIP DEF PROCESSEUR#
PROG
WORD IMAGE < ENTRY POINT DU PROCESSEUR.
WORD 0
PIMAGE: EQU $
LRP L < A NOTER : P='12 !!!
BR -2,L < ENTRE DANS LE PROCESSEUR 'TN'.
PAGE
EOT #SIP DEFINITION ITEM#
ITEM1: EQU ZERO+PILE-LTNI
ITEM2: EQU ZERO+PILE-LTNI-LTNI
PAGE
EOT #SIP IMAGE 256#
NOM: EQU ZERO+PILE+5-LNOM-2 < NOM DE L'IMAGE VIDEO.
IMAG: EQU NOM+LNOM+2 < IMAGE VIDEO PROPREMENT DITE.
IF ORDI-"S",XWOR%,,XWOR%
ENTIM: EQU IMAG-LENTIM < EN-TETE IMAGE (INTERPOLATION VIDEO SOLAR)
XWOR%: VAL 0
RECORD: EQU IMAG+LIMAG < IMAGE DYNAMIQUE (IMAGE 2).
<
< 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
<
<
< L O C A L :
<
<
<
< MESSAGES :
<
M4: BYTE 11;'6D
ASCI "#SEGMENTS="
M5: BYTE 13;'6D
ASCI "#SEG GENERES"
M9: BYTE 5;'6D
ASCI "NOM="
M10: BYTE 6;'6D
ASCI "VISU? "
M11: BYTE 7;'6D
ASCI "VIDEO?"
M12: BYTE 10;'6D
ASCI "COMPTAGE? "
M13: BYTE 11;'6D
ASCI "PAS A PAS?"
M15: BYTE 11;'6D
ASCI "SEGMENT 1="
M16: BYTE 11;'6D
ASCI "SEGMENT 2="
M17: BYTE 20;'6D
ASCI "OAB INTERMEDIAIRES? "
M18: BYTE 13;'6D
ASCI "POINT-POINT?"
<
< CARTES CONTROLES :
<
MBN: ASCI "!ASSIGN B=N,"
FB: ASCI "FB"
IDBN: BYTE 0;'04
LNFIC: VAL 19 < NBRE DE MOTS D'UN NOM.
MFIC: ASCI "!ASSIGN A="
MOFIC: ASCI "O,"
LMFIC: VAL $-MFIC < LONGUEUR DU DEBUT DE !ASSIGN.
MNFIC: DZS LNFIC < NOM DU FICHIER.
BYTE '04;0 < PAR PRUDENCE.
MBO: ASCI "!ASSIGN B=O,FB"
IDBO: BYTE 0;'04
MAC: ASCI "!ASSIGN A="
BYTE "S";'04
MBCS: ASCI "!ASSIGN B="
BYTE "S";'04
MBC: ASCI "!ASSIGN B="
BYTE "R";'04
<
< BUFFERS SGF :
<
MAXBUF: VAL 128-4/4*4
LOCAL
LOC: EQU $
<
< SEGMENT GRAPHIQUE :
<
NOMSEG: WORD 0 < VALIDATION EN ZDC.
SEG: DZS 4
LONSEG: VAL $-NOMSEG*2
X: VAL 1
Y: VAL 0
CURSOR: BYTE "F";0
DZS 2
<
< MESSAGES ET BUFFERS :
<
MINT: BYTE 2;'6D
ASCI "> "
MDIS: BYTE 5;"="
REP: DZS 2
MERR: BYTE 3;'6D
ASCI "??"
M1: BYTE 11;'6D
ASCI "ENVOI ZDC?"
M2: BYTE 7;'6D
ASCI "SEUIL="
M3: BYTE 5;'6D
ASCI "SGF?"
AM4: WORD M4
AM5: WORD M5
M6: BYTE 7;'6D
ASCI "VIDEO?"
M7: BYTE 9;'6D
ASCI "CURSEUR?"
M8: BYTE 5;'6D
ASCI "ZDC?"
AM9: WORD M9
AM10: WORD M10
AM11: WORD M11
AM12: WORD M12
AM13: WORD M13
M14: BYTE 1;">"
AM15: WORD M15
AM16: WORD M16
AM17: WORD M17
AM18: WORD M18
<
< DEMANDES A CMS4 :
<
DEMMEM: WORD '0004 < DEMANDE D'ALOCATION 8K MOTS.
RELMEM: WORD '0004 < DEMANDE DE RETOUR A 4K MOTS.
WORD '6000 < ALLOCATION 12K MOTS.
WORD '2000
DEMCCI: WORD '0001 < APPEL DU CCI.
DEMSGN: WORD '0402 < DEMANDE D'ACCES AU SGN OVERLAY.
WORD BRANCH-ZERO*2 < @OCTET DE LA BRANCHE.
WORD ZERO-BRANCH+PILE-LTNI-LTNI*2
WORD -1
DEMOUT: WORD '0202 < SORTIE D'UN MESSAGE.
WORD MINT-ZERO*2
WORD 2
DEMH: WORD '0101 < ENTREE 4 CARACTERES.
WORD REP-ZERO*2
WORD 4
DEMIN: WORD '0101 < ENTREE SUR LE TERMINAL.
WORD REP-ZERO*2
WORD 1
DEMREP: EQU DEMIN
DEMNOM: WORD '0101 < ENTREE DU NOM D'UN FICHIER
WORD MNFIC-ZERO*2 < A LIRE POUR EMISSION.
WORD LNFIC*2
DEMSGF: WORD '0008 < RECUPEARTION DE BUFESC.
WORD BUFCO
WORD LBUFES*2
WORD 0 < ZDC INVALIDE.
DEMCOP: WORD '0402 < DEMANDE DE STORE D'UN NOM EN
WORD BUFCON < VUE DE FAIRE UN CHANGEMENT
WORD LBUFES-LMFIC*2 < DE NOM D'UN FICHIER.
WORD -1
DEMNO1: WORD '0101 < ENTREE DU NOM A DONNER
WORD BUFCON < AU FICHIER TEMPORAIRE
WORD LNFIC*2 < FB.
OG: WORD '0103 < OPEN GRAPHIQUE.
CU: WORD '0106 < MISE EN FONCTION CURSEUR.
WORD 0
LCU: WORD '0109 < LECTURE GRAPHIQUE.
WORD CURSOR-ZERO*2
WORD 6
CG: WORD '0104 < CLOSE GRAPHIQUE.
WG: WORD '020A < ECRITURE GRAPHIQUE.
WORD SEG-ZERO*2
WORD 8
STOGS: WORD '000A < ENVOI EN ZDC.
WORD NOMSEG-ZERO*2
WORD LONSEG
WORD 'FFC0
GETGS: WORD '0008 < LECTURE ZDC.
WORD NOMSEG-ZERO*2
WORD SEG-NOMSEG*2
WORD 'C000
DEMGS: WORD '0008 < LECTURE SEGMENT ZDC.
WORD NOMSEG-ZERO*2
WORD LONSEG
WORD 'FFC0
DELGS: WORD '000A < ECRITURE VALIDATION ZDC.
WORD NOMSEG-ZERO*2
WORD SEG-NOMSEG*2
WORD 'C000
SGFW1: WORD '0B02 < ECRITURE SGF.
WORD BUF1O
WORD 256
WORD 0
SGFR1: WORD '0B09 < LECTURE DELETE SGF.
WORD BUF1O
WORD 256
WORD 0
SGFO1: WORD '0B04 < OPEN NEW=4, OLD=5.
WORD 1 < CLEF 1.0
WORD 0
SGFC1: WORD '0B07 < CLOSE SAVE=7, RELEASE=6.
SGFR2: WORD '0A08 < LECTURE SAVE.
WORD BUF2O
WORD 128*2
SGFO2: WORD '0A05 < OPEN OLD 1.0.
WORD 1
WORD 0
SGFC2: WORD '0A07 < CLOSE SAVE 1.0.
DEMDB: WORD '0302 < DELETE NOM 'FB'.
WORD FB-ZERO*2
WORD 4
WORD -1
CCII: WORD '0002 < ACCES CCI INTERPRETATIF.
WORD 0
WORD 80
IF ORDI-"S",XWOR%,,XWOR%
STABIL: WORD '8A01 < DEMANDE DE STABILISATION ET / OU
< TRACE VIDEO.
WORD IMAG-ZERO*2
WORD LIMAG*2
WORD 0 < PAS DE COULEUR A PRIORI...
INIMAG: WORD '8A01 < DEMANDE ENTREE IMAGE.
WORD RECORD-ZERO*2
WORD LIMAG*2
WORD TVIN+TVPV
XWOR%: VAL 0
<
< RELAIS DIVERS :
<
AIMAG1: WORD IMAG-1,X < ACCES A L'IMAGE STATIQUE.
AIMAG2: WORD RECORD-1,X < ACCES A L'IMAGE DYNAMIQUE.
AIMA1: WORD IMAG < @IMAGE STATIQUE.
AIMA2: WORD RECORD < @IMAGE DYNAMIQUE A PRIORI.
ANOM: WORD NOM < ACCES AU 1ER MOT DU NOM DE
< L'IMAGE STATIQUE (IMAGE 1).
AI2: WORD ITEM2-1,X < ACCES A L'EN-TETE ITEM2.
AREP: WORD REP,X
ABDISP: EQU AREP
AMBN: WORD MBN
AIDBN: WORD IDBN
AMBCS: WORD MBCS
AMFIC: WORD MFIC
AMBO: WORD MBO
AIDBO: WORD IDBO
AMAC: WORD MAC
AMBC: WORD MBC
ASGF1: WORD BUFSGF+1,X < ACCES 1ER BUFFER SGF.
ASGF2: WORD BUF2M+1,X < ACCES 2EME BUFFER SGF.
ACCI: WORD CCI < ACCES CCI INTERPRETATIF.
ADF: WORD DF < DELETE FICHIERS 'FA' ET 'FB'.
ASTBU1: WORD STBUF1 < STORE DANS 1ER BUFFER SGF.
ALBU1: WORD LBUF1 < ACCES X,Y DANS BUFFER SGF 1.
ALBU2: WORD LBUF2 < ACCES X,Y DANS BUFFER SGF 2.
AOVL: WORD OVL < ROUTINE DE CHARGEMENT OVERLAYS.
AGOGE: WORD GOGE < RETOUR A 'GE'.
IF ORDI-"T",XWOR%,,XWOR%
ASP1: WORD SP1 < ROUTINE MAITRE ENREGISTREMENT TV.
ASP2: WORD SP2 < ROUTINE MAITRE DIFFUSION TV.
ASP3: WORD SP3 < STABILISATION IMAGE VIDEO.
AWAIT: WORD WAIT < ATTENTE DE CHANGEMENT DE TRAME.
XWOR%: VAL 0
ATRAME: WORD TRAME < LECTURE D'UNE TRAME VIDEO.
AGRAVE: WORD GRAVE < CALCUL CENTRE DE GRAVITE
< D'UNE TRAME.
IF ORDI-"T",XWOR%,,XWOR%
ADICO: WORD DICO < TRACE DICHOTOMIQUE.
XWOR%: VAL 0
ATRACE: WORD TRACE < TRACE SEGMENT VIDEO.
AGRVI: WORD GRVI < TRACE VIDEO A PARTIR DE 'SEG'.
IF ORDI-"T",XWOR%,,XWOR%
ASET: WORD SET < MISE DE (X,Y) A 1.
XWOR%: VAL 0
APRINT: WORD PRINT < EMISSION D'UN MESSAGE.
ADRAW: WORD DRAW < AFFICHAGE UN SEGMENT GRAPHIQUE.
AINTER: WORD INTER < ADRESSE D'INTERROGATION.
AINTEA: WORD INTERA
ASEND: WORD SEND < ENVOI EN ZDC.
ASENDP: WORD SENDP < ENVOI D'UN SEGMENT OU DE 2
< COUPLES DE POINTS, ET DES OAB
< INTERMEDIAIRES EVENTUEL...
ASENDT: WORD SENDT < SEND+TEST DE FIN.
ASENDS: WORD SENDS < ENVOI 1 SEGMENT AU SGF.
AINSGF: WORD INSGF < INITIALISATION ACCES SGF.
AEDIT: WORD EDIT < EMISSION DU BON NOMBRE DE
< SEGMENTS.
AENTER: WORD ENTER < ENTREE REPONSE O/N.
IF ORDI-"S",XWOR%,,XWOR%
AENTCL: WORD ENTCL < ENTREE REPONSE O/N/1/2/3.
XWOR%: VAL 0
AHEX: WORD HEX < CONVERSION HEXA-->BINAIRE.
ADISP: WORD DISP < EDITION HEXADECIMALE.
ALOC12: WORD LOC12 < PASSAGE 4K --> 12K.
AOAB: WORD ZOAB < ENVOI EVENTUEL OAB INTERMEDAIRES.
ASOAB: WORD SOAB < INTERROGATION 'FAUT-IL ENVOYER
< LES 'OAB' INTERMEDIARES ???'.
ASPOIN: WORD SPOIN < FAUT-IL ENVOYER UN SEGMENT OU
< 2 POINTS DOUBLES ???
<
< CONSTANTES ET INDICATEURS :
<
NGE: WORD "GE" < NOM DE L'OVERLAY 'GE'.
ACNSYS: ASCI ":SYS" < ACN DU SYSTEME.
NMOTS: WORD 2*LTNI < LONGUEUR TOTALE DES 2 ITEMS.
ALIMAG: WORD LIMAG < LONGUEUR MOTS DE L'IMAGE VIDEO.
KIN: WORD -1 < COMPTEUR DES ENTRIES DANS 'TN'.
IF ORDI-"T",XWOR%,,XWOR%
WAITR: WORD 10000 < NBRE DE 'JDX $' A EFFECTUER POUR
< TEMPORISER LE RECORD VIDEO.
XWOR%: VAL 0
KPT: WORD 0 < NOMBRE DE POINTS D'UNE TRAME.
XC: DZS 2 < SIGMA(X).
YC: DZS 2 < SIGMA(Y).
MOTC: WORD 0 < MOT COURANT DE L'IMAGE.
XMOTC: WORD 0 < X(MOT COURANT DE L'IMAGE).
NLIG: WORD 1024/DY-1 < NBRE DE LIGNES IMAGE.
NPPL: WORD CNMPL*16-1 < NBRE DE POINTS/LIGNE-1.
NMPL: WORD CNMPL < NBRE DE MOTS/LIGNE.
MASKI: WORD 0 < VALEUR A DONNER A L'IMAGE
< LORS DE LA COMMANDE 'Z'.
XG: WORD 0 < CENTRE DE GRAVITE VIDEO.
YG: WORD 0 < CENTRE DE GRAVITE VIDEO.
SEUIL: WORD 5 < SEUIL AU DELA DUQUEL L'IMAGE
< EST DECRETEE NON VIDE.
ITEST: WORD 1 < 0 : TEST SUR LA VALEUR 0 DES POINTS,
< 1 : TEST SUR VALEUR 1 DES POINTS.
IZDC: WORD 1 < 0=EMETTRE EN ZDC, 1=NON.
IOAB: WORD 0 < 0 : ENVOYER UN 'OAB' DERRIERE
< CHAQUE SEGMENT EMIS...
IPOINT: WORD 0 < 0 : ENVOYER 2 SEGMENTS EN ZDC
< (ORG,ORG) ET (EXT,EXT),
< 1 : ENVOYER 1 SEUL SEGMENT EN ZDC
< (ORG,EXT).
ISGF: WORD 1 < 0=ACCES AU SGF, 1=NON.
IVISU: WORD 0 < 0='DRAW' ACTIF, 1=NON ACTIF.
IVIDEO: WORD 1 < 0='GRVI' ACTIF, 1='GRVI' INHIBE.
IBUF1: WORD 0 < INDEX COURANT 1ER BUFFER SGF.
KPT1: WORD 0 < NBRE DE POINTS DANS 'FA'.
<
< CONSTANTES D'EMISSION DES SEGMENTS :
<
PASX: WORD 0 < PAS DE DECOUPAGE D'UN
PASY: WORD 0 < SEGMENT LORSQU'IL EN MANQUE...
MODE: WORD 0 < 0 : NSEG=NSEG1,
< <0 : NSEG>NSEG1 : IL MANQUE
< DES SEGMENTS,
< >0 : NSEG<NSEG1 : IL Y A
< TROP DE SEGMENTS.
N1: WORD 0 < MODE>0 : EN PRENDRE 1 TOUS
< LES N1 SEGMENTS.
SN1: WORD 0 < DECOMPTEUR DE N1.
N2: WORD 0 < MODE<0 : ENVOYER N2 SEGMENTS
< POUR 1.
SN2: WORD 0 < SN2=N2 SI SN3<=0,
< SN2=N2+1 SI SN3>0.
SSN2: WORD 0 < DECOMPTEUR DE SN2.
N3: WORD 0 < MODE<0 : RAJOUTER N3 SEGMENTS.
SN3: WORD 0 < DECOMPTEUR DE N3.
NSEG: WORD 0 < NBRE DE SEGMENTS DEMANDES.
SNSEG: WORD 0 < DECOMPTEUR DE NSEG.
NSEG1: WORD 0 < NBRE DE SEGMENTS OBTENUS PAR 'G'.
ISEG: WORD 0 < 0=COMPTER LES SEGMENTS POUR 'R'.
NSEG2: WORD 0 < COMPTEUR DES SEGMENTS SOUS 'R'.
NUS1: WORD 0 < 1ER SEGMENT UTILISE POUR 'R'.
NUS2: WORD 0 < 2EME SEGMENT UTILISE POUR 'R'.
IPAS: WORD 0 < EXECUTION PAS A PAS DE 'R' ???
<
< CONSTANTES DICHOTOMIQUES :
<
DICOX: WORD 0 < X DU POINT VIDEO COURANT M.
DICOY: WORD 0 < Y DU POINT VIDEO COURANT M.
DICOX1: WORD 0 < X DE L'ORIGINE VIDEO COURANTE M1.
DICOY1: WORD 0 < Y DE L'ORIGINE VIDEO COURANTE M1.
DICOX2: WORD 0 < X EXTREMITE VIDEO COURANTE M2.
DICOY2: WORD 0 < Y EXTREMITE VIDEO COURANTE M2.
<
< PILES DE TRAVAIL :
<
APILE: WORD PILE-1 < PILE DE SMC (RETOUR A 'GE').
LSTACK: VAL 60 < LONGUEUR DE LA PILE DE TRAVAIL.
ASTACK: WORD STACK-1
SAVS: DZS 4 < ZONE DE SAUVEGARDE DE 'SEG'.
PAGE
PROG
IF ORDI-"T",XWOR%,,XWOR%
EOT #SIP SP1#
EOT #SIP SP3#
EOT #SIP SP2#
<
<
< A T T E N T E C H A N G E M E N T T R A M E :
<
<
WAIT: EQU $
PSR A,B,X,Y < TRES PRUDENT CE MONSIEUR...
LAI NSPTV
SBT 0 < ACCES PAR NSP.
WORD '1E15 < B=@DCT-TV.
ADRI 2,B < B=@X(DCT-TV).
LR B,A < DEMANDE DE X(DCT-TV).
WORD '1E15 < B=X(DCT-TV).
LR B,Y < SAVE Y=X(DCT-TV).
LX WAITR < INITIALISATION D'UN DECTECTEUR
< DE TIME-OUT SUR LA TV.
WIDEO: EQU $
JDX NTOUT
JMP TOUT < CAS D'UN TIME-OUT, ON ARRETE.
NTOUT: EQU $
WORD '1E15 < B=X(DCT-TV).
CPR B,Y < X(DCT-TV) A-T'IL CHANGE, ET
< DONC A-T'ON CHANGE DE TRAME ???
JE WIDEO < NON, ON ATTEND.
TOUT: EQU $
PLR A,B,X,Y
RSR
<
<
< E N T R E E D ' U N E T R A M E :
<
<
TRAME: EQU $
LA ASP1
WORD '1EC5 < ENTREE D'UNE TRAME.
BSR AWAIT < ATTENTE DE FIN DE TRAME.
LA ASP2
WORD '1EC5 < ARRET DE L'ENREGISTREMENT.
LA ASP3
WORD '1EC5 < DIFFUSION IMAGE STATIQUE.
RSR
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
<
<
< E N T R E E D ' U N E T R A M E :
<
<
TRAME: EQU $
LAD INIMAG < ENTREE IMAGE.
SVC 0
LAD STABIL < VISUALISATION DE LA TRAME STATIQUE.
SVC 0
RSR
XWOR%: VAL 0
PAGE
<
<
< P A S S A G E A 1 2 K :
<
<
LOC12: EQU $
LAD DEMMEM
SVC 0 < PASSAGE 12K.
RSR
PAGE
IF ORDI-"S",XWOR%,,XWOR%
<
< 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 !).
<
TRACE: 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,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.
<
LRM A,B,X
WORD SEG < ZONE EMETTRICE: COORDONNEES (Y1,X1),
< (Y2,X2) SEGMENT COURANT. CE SONT DES
< COORDONNEES GRAPHIQUES.
WORD ENTIM+DEPY1 < ZONE RECEPTRICE.
WORD 4 < LONGUEUR.
MOVE
STZ DEPMOD,W
IC DEPMOD,W < MODE TRACE 'SBT'.
LRM A,X
WORD ENTIM-ZERO*2 < ADRESSE OCTET EN-TETE IMAGE.
WORD LENTIM+LIMAG*2 < LONGUEUR OCTETS EN-TETE + IMAGE.
STA STABIL+1
STX STABIL+2
LAD STABIL < DEMANDE INTERPOLATION ET AFFICHAGE.
PSR X
SVC 0
PLR X
LRM A,B
WORD IMAG-ZERO*2 < RESTAURATION ADRESSE ET
WORD LIMAG*2 < LONGUEUR IMAGE DANS LA DEMANDE.
STA STABIL+1
STX STABIL+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 A,B,X,W
RSR
XWOR%: VAL 0
IF ORDI-"T",XWOR%,,XWOR%
PAGE
<
<
< T R A C E D I C H O T O M I Q U E D ' U N S E G M E N T :
<
<
DICO: EQU $
LA DICOX1 < A=X1.
AD DICOX2 < A=X1+X2.
SLRS 1 < A=(X1+X2)/2.
STA DICOX < X DU MILIEU DE M1M2.
LA DICOY1 < A=Y1.
AD DICOY2 < A=Y1+Y2.
SLRS 1 < A=(Y1+Y2)/2.
STA DICOY < Y DU MILIEU DE M1M2.
<
< POSITION DE M PAR RAPPORT A M1 :
<
SB DICOY1 < A=Y-Y1.
JANE DICO31 < M#M1.
LA DICOX < A=X.
SB DICOX1 < A=X-X1.
JAE DICO32 < M=M1.
<
< POSITION DE M PAR RAPPORT A M2 :
<
DICO31: EQU $
LA DICOY < A=Y.
SB DICOY2 < A=Y-Y2.
JANE DICO30 < M#M2 ET M#M1.
LA DICOX < A=X.
SB DICOX2 < A=X-X2.
JANE DICO30 < M#M2 ET M#M1.
<
< CAS OU M=M1 OU M=M2 :
<
DICO32: EQU $
LX DICOX
LY DICOY
BSR ASET < TRACE DU POINT M=(M1+M2)/2.
RSR < ARRET PROVISOIRE DE LA DICHOTOMIE
< DESCENDANTE.
<
< CAS OU M#M1 ET M#M2 :
<
DICO30: EQU $
LA DICOX2 < A=X2.
LB DICOY2 < B=Y2.
PSR A,B < SAVE LE POINT M2 COURANT.
LA DICOX < A=X.
STA DICOX2 < X2<--X.
LA DICOY < A=Y.
STA DICOY2 < Y2<--Y.
BSR ADICO < DICHOTOMIE SUR LE SEGMENT M1M.
LX DICOX2 < X=X2.
LY DICOY2 < Y=Y2.
BSR ASET < TRACE DU POINT M2.
STX DICOX1 < X1<--X2.
STY DICOY1 < Y1<--Y2.
PLR A,B < RESTAURATION DU POINT M2 APRES
< LE CHANGEMENT DU POINT M1.
STA DICOX2 < RESTAURE X2.
STB DICOY2 < RESTUARE Y2.
JMP DICO < VERS LA POURSUITE DE LA DICHOTOMIE.
<
<
< T R A C E D ' U N S E G M E N T V I D E O :
<
<
TRACE: EQU $
PSR X,Y,C
<
< TRACE DICHOTOMIQUE DU SEGMENT :
<
LX DICOX1 < X=X1.
LY DICOY1 < Y=Y1.
PSR X,Y < SAVE M1.
BSR ASET < TRACE DU POINT M1.
BSR ADICO < TRACE DU SEGMENT M1M2.
LX DICOX2 < X=X2.
LY DICOY2 < Y=Y2.
BSR ASET < TRACE DU POINT M2.
PLR X,Y
STX DICOX1 < RESTORE M1.
STY DICOY1 < RESTORE M1.
PLR X,Y,C
RSR
XWOR%: VAL 0
<
<
< G R A P H I Q U E - V I D E O :
<
<
< ARGUMENT :
< SEG=SEGMENT GRAPHIQUE A TRACER EN VIDEO.
<
<
GRVI: EQU $
CPZ IVIDEO < GRVI ACTIF ???
JNE GRVI1 < NON, RIEN A TRACER.
PSR X
IF ORDI-"T",XWOR%,,XWOR%
LA ASP3
WORD '1EC5 < STABILISATION IMAGE STATIQUE.
<
< ORIGINE DU SEGMENT COURANT :
<
LA SEG+0+X
SLRS DEDX
STA DICOX1 < X(ORIGINE).
LA SEG+0+Y
SLRS DEDY
NGR A,A
AD NLIG
STA DICOY1 < Y(ORIGINE).
<
< EXTREMITE DU SEGMENT COURANT :
<
LA SEG+2+X
SLRS DEDX
STA DICOX2
LA SEG+2+Y
SLRS DEDY
NGR A,A
AD NLIG
STA DICOY2
<
< TRACE VIDEO :
<
XWOR%: VAL 0
BSR ATRACE
PLR X
GRVI1: EQU $
RSR
PAGE
IF ORDI-"T",XWOR%,,XWOR%
<
<
< 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
XWOR%: VAL 0
PAGE
<
<
< C E N T R E D E G R A V I T E T R A M E :
<
<
< RESULTAT :
< A=0 : TRAME VIDE,
< =1 : TRAME NON VIDE, ET ALORS :
< X,Y=CENTRE DE GRAVITE GRAPHIQUE,
< XG,YG=CENTRE DE GRAVITE VIDEO.
<
<
GRAVE: EQU $
STZ KPT < RAZ NBRE DE POINTS TRAME.
STZ XC < RAZ SIGMA(X).
STZ XC+1
STZ YC < RAZ SIGMA(Y).
STZ YC+1
<
< BALAYAGE DE L'IMAGE :
<
LX ALIMAG < INDEX MOT DE L'IMAGE.
GRAV1: EQU $
LA &AIMAG2
JAE GRAV4 < MOT COURANT NUL, SANS INTERET.
STA MOTC < SAVE SI #0.
PSR X < SAVE L'INDEX COURANT.
LR X,A
ADRI -1,A < INDEX PAR RAPPORT A 0.
SLLS 4
SLRD 8
LR A,Y < Y=Y(TOUS LES POINTS DE MOTC).
LAI 0
SLLD 8
STA XMOTC < XMOTC=X(1ER POINT DE MOTC).
GRAV3: EQU $
LA MOTC
JAE GRAV2 < MOTC=0, ON A FINI POUR LUI.
IC KPT < COMPTAGE DES POINTS A 1.
DBT < RECHERCHE DU 1ER A 1.
RBT 0,X < ET RAZ IMMEDIAT.
STA MOTC < MAJ DE MOTC.
LA XMOTC
ADR A,X < X(1ER MOT A 1 DE MOTC).
LA XC
LB XC+1
ADR X,B < CUMUL SIGMA(X).
ADCR A
STA XC
STB XC+1
LA YC
LB YC+1
ADR Y,B < CUMUL SIGMA(Y).
ADCR A
STA YC
STB YC+1
JMP GRAV3 < AU POINT SUIVANT.
GRAV2: EQU $
PLR X < RESTAURE INDEX COURANT.
GRAV4: EQU $
JDX GRAV1 < MOT PRECEDENT.
<
< CALCUL DES COORDONNEES DU CENTRE DE GRAVITE :
<
LA KPT
CP SEUIL < TRAME VIDE ???
LAI 0 < OUI, A PRIORI.
JL GRAV5 < ET OUI, PRESQUE VIDE....
LA XC
LB XC+1
DV KPT
STA XG < XG=SIGMA(X)/KPT.
SLLS DEDX < CADRAGE GRAPHIQUE.
LR A,X < X=CENTRE DE GRAVITE GRAPHIQUE.
LA YC
LB YC+1
DV KPT
STA YG < YG=SIGMA(Y)/KPT.
SB NLIG
NGR A,A < INVERSION AXE DES Y.
SLLS DEDY < CADRAGE GRAPHIQUE.
LR A,Y < Y=CENTRE DE GRAVITE GRAPHIQUE.
LAI 1 < TRAME NON VIDE.
GRAV5: EQU $
RSR
PAGE
<
<
< E M I S S I O N D ' U N M E S S A G E :
<
<
< ARGUMENT :
< A=@MESSAGE EN MOT.
<
<
PRINT: EQU $
PSR C,X
LR A,C < C=@MOT DU MESSAGE.
ADR A,A < CONVERSION OCTET.
ADRI 1,A < ADRESSE OCTET DU MESSAGE.
STA DEMOUT+1 < MAJ AMDEM.
LBY 0,C < RECUPERATION LONGUER MESSAGE.
STA DEMOUT+2 < MAJ CODEM.
LAD CG < RETOUR A PRIORI EN ALPHA,
SVC 0 < A CAUSE DE 'DRAW'.
LAD DEMOUT
SVC 0 < EMISSION DU MESSAGE.
PLR C,X
RSR
<
<
< T R A C E S E G M E N T G R A P H I Q U E :
<
<
DRAW: EQU $
CPZ IVISU < TRACE VALIDE ???
JNE NVISU < NON, RIEN A FAIRE...
PSR X
LAD OG
SVC 0 < OPEN GRAPHIQUE.
LAD WG
SVC 0 < ECRITURE GRAPHIQUE DE 'SEG'.
PLR X
NVISU: EQU $
RSR
<
<
< I N T E R R O G A T I O N :
<
<
< ARGUMENT :
< A=@MESSAGE A EMETTRE.
<
<
< RESULTAT :
< B=0 : REPONSE=OUI,
< 1 : REPONSE=NON,
< CARRY POSITIONNE PAR UN 'CPZR B'.
<
<
INTER1: EQU $
LR Y,A < RESTAURE A=@MESSAGE.
ENTER: EQU $
LR A,Y < SAVE Y=@MESSAGE.
BSR APRINT < EMISSION DU MESSAGE (A).
PSR X
LAD DEMREP
SVC 0 < ENTREE DE LA REPONSE.
PLR X
LBI 0 < B=0 (OUI A PRIORI).
LBY REP < A=CARACTERE REPONDU.
CPI "O"
JE INTER2 < OUI.
LBI 1 < B=1 (NON A PRIORI).
CPI "N"
JNE INTER1 < INCOMPREHENSIBLE...
INTER2: EQU $
CPZR B < POSITIONNEMENT CODES CONDITION.
RSR
IF ORDI-"S",XWOR%,,XWOR%
<
<
< E N T R E E R E P O N S E O / N / 1 / 2 / 3 :
<
<
< ARGUMENT :
< A=@ MESSAGE A EMETTRE.
<
<
< RESULTAT :
< B=0 : REPONSE OUI/1/2/3.
< B=1 : REPONSE NON.
< DEMANDE INIMAG POSITIONNEE.
<
<
ENTCL1: EQU $
LR Y,A < RESTAURE A=@ MESSAGE.
ENTCL: EQU $
LR A,Y < SAVE Y=@ MESSAGE.
BSR APRINT < EMISSION DU MESSAGE (A).
PSR X
LAD DEMREP
SVC 0 < ENTREE DE LA REPONSE.
PLR X
LBY REP < A=CARACTERE REPONDU.
LBI 0 < B=0 (NON A PRIORI).
CPI "N"
JE ENTCL2 < REPONSE NON.
LBI TVPV < B=TVPV (OUI A PRIORI).
CPI "O"
JE ENTCL2 < REPONSE OUI.
ADRI -'30,A < A=1/2/3 (REPONSE 1/2/3).
JALE ENTCL1 < NON - A REVOIR
CPI 3
JG ENTCL1 < NON - A REVOIR.
LR A,B < OK - B RECOIT A.
ENTCL2: EQU $
SBT 16+NBTVIN < ENTREE IMAGE A PRIORI.
STB INIMAG+3 < POSITIONNER LE NUMERO DE PROCESSEUR.
LR B,A < POSITIONNER B.
RBT NBTVIN
LBI 0
JANE ENTCL3
LBI 1
ENTCL3: EQU $
CPZR B < POSITIONNEMENT CODES CONDITION.
RSR
XWOR%: VAL 0
<
<
< E N V O I E N Z D C :
<
<
SEND: EQU $
CPZ IZDC < EMISSION ZDC ???
JNE SEND2 < NON, RIEN A FAIRE...
PSR X
LAD GETGS
SEND1: EQU $
SVC 0 < ACCES A LA VALIDATION COURANTE.
CPZ NOMSEG < SEGMENT PRECEDENT ACQUITTE ???
JNE SEND1 < NON, ON ATTEND.
DC NOMSEG < OUI, NOMSEG=-1.
LAD STOGS
SVC 0 < ENVOI DU SEGMENT COURANT.
PLR X
SEND2: EQU $
RSR < ET C'EST TOUT...
<
<
< E N V O I 1 O U 2 S E G M E N T S :
<
<
< FONCTION :
< SUIVANT LA VALEUR DE IPOINT, CETTE
< ROUTINE EMET EN ZDC 1 OU 2 SEGMENTS :
< IPOINT=0 : (ORG,ORG)OAB(EXT,EXT)OAB,
< IPOINT=1 : (ORG,EXT)OAB,
< LES 'OAB' ETANT CONDITIONNES PAR
< LA VALEUR DE 'IOAB'.
<
<
SENDP: EQU $
CPZ IZDC < ZDV VALIDEE ???
JNE SENDP2 < NON, DONC RIEN A FAIRE...
<
< SAUVEGARDE DU 'SEG' ARGUMENT A PRIORI :
<
PSR A,B,X
LAD SAVS
LR A,B
LAD SEG
LXI 4
MOVE < SEG --> SAVS.
<
< ENVOI EN ZDC :
<
CPZ IPOINT < 1 OU 2 SEGMENTS ???
JNE SENDP1 < 1 SEUL (ORG,EXT).
LA SEG+2+X < 2 (ORG,ORG) ET (EXT,EXT).
LB SEG+2+Y
PSR A,B < SAVE L'EXTREMITE DE SEG.
LA SEG+0+X
LB SEG+0+Y
STA SEG+2+X < EXT <-- ORG.
STB SEG+2+Y
BSR ASEND < ENVOI EN ZDC...
BSR AOAB < OAB INTERMEDIAIRES...
PLR A,B < RESTAURE L'EXTREMITE DE SEG.
STA SEG+0+X < ORG <-- EXT.
STB SEG+0+Y
STA SEG+2+X < RESTAURE EXT.
STB SEG+2+Y
SENDP1: EQU $
BSR ASEND < ENVOI EN ZDC...
BSR AOAB < OAB INTERMEDIAIRES...
<
< RESTAURATION DU SEG ARGUMENT :
<
LAD SEG
LR A,B
LAD SAVS
LXI 4
MOVE < SAVS --> SEG.
PLR A,B,X
SENDP2: EQU $
RSR
<
<
< F A U T - I L E N V O Y E R D E S
< O A B I N T E R M E D I A I R E S ? ?
<
<
SOAB: EQU $
LBI 1 < B=1 : NON A PRIORI.
CPZ IZDC < L'EMISSION ZDC EST-ELLE VALIDE ???
JNE SOAB1 < NON, DONC PAS D'OAB...
LA AM17
BSR AENTER < INTERROGATION UTILISATEUR...
SOAB1: EQU $
STB IOAB < SAVE LA REPONSE...
RSR
<
<
< F A U T - I L E N V O Y E R
< 1 O U 2 S E G M E N T S ??
<
<
SPOIN: EQU $
LBI 1 < B=1 : NON A PRIORI...
CPZ IZDC < L'EMISSION ZDC EST-ELLE VALIDE ???
JNE SPOIN1 < NON..
LA AM18 < OUI.
BSR AENTER < INTERROGATION UTILISATEUR...
SPOIN1: EQU $
STB IPOINT < SAVE LA REPONSE.
RSR
<
<
< E N V O I O A B I N T E R M E D I A I R E S :
<
<
< FONCTION :
< SI L'INDICATEUR IOAB EST VALIDE (0),
< ON ENVOIE DERRIERE CHAQUE SEGMENT EMIS
< EN ZDC UN 'OAB'. L'APPLICATION EST LA
< SUIVANTE (IDEM A 'VT') :
< 1- ON CREE UNE BIBLIOTHEQUE GRAPHIQUE
< CONTENANT :
< >PROG(:A:B D I D :A:B <TRACE
< GRAPHIQUE QUELCONQUE>
< 2- CETTE BIBLIOTHEQUE EST APPELEE
< DANS UNE ITERATION SOUS 'GV' :
< %X( $BIBLI; ?PROG; ),
< AINSI A CHAQUE APPEL DE 'PROG' ON
< INTRODUIT UN SEGMENT DONT L'EXTREMITE
< EST MATERIALISEE PAR <TRACE GRAPHIQUE
< QUELCONQUE>.
<
<
ZOAB: EQU $
CPZ IOAB < FAUT-IL EMETTRE LES OAB ???
JNE OAB1 < NON,
STZ SEG+0+X < OUI.
STZ SEG+0+Y
STZ SEG+2+X
STZ SEG+2+Y
BSR ASEND
OAB1: EQU $
RSR
PAGE
<
<
< E N V O I D ' U N B O N N O M B R E
< D E S E G M E N T S :
<
<
EDIT: EQU $
CPZ ISGF < ACCES SGF ???
JE NSGF2 < OUI.
NFIN2: EQU $
RSR < NON...
NSGF2: EQU $
CPZ KPT1 < Y-AT'IL EU DES SEGMENTS GENERES ???
JE NFIN2 < NON, RIEN A FAIRE...
LXI -1
LYI -1
BSR ASTBU1 < MARQUAGE DE FIN DE LISTE...
CPZ IBUF1 < LE BUFFER SGF EST-IL NON VIDE ???
JE CLOS1 < NON, IL EST VIDE.
STZ IBUF1 < REINITIALISATION INDEX BUFFER.
LAD SGFW1 < OUI, IL CONTIENT QUELQUE CHOSE,
SVC 0 < ON LE VIDE...
CLOS1: EQU $
LA SGFC1
SBT 15
STA SGFC1 < MISE DE SGFC1 EN SAVE.
LAD SGFC1
SVC 0 < CLOSE SAVE DE 1.0.
<
< NOMBRE DE SEGMENTS GENERES :
<
LA AM5
BSR APRINT
LA KPT1 < NBRE DE POINTS.
SLRD 16+1
STB NSEG1 < NOMBRE DE SEGMENTS.
BSR ADISP < CONVERSION HEXADECIMALE DE (B).
LAD MDIS
BSR APRINT < EDITION DE NSEG1.
<
< ENTREE DU NBRE DE SEGMENTS DEMANDES :
<
NP1: EQU $
LA AM4
BSR APRINT
LAD DEMH
SVC 0 < ENTREE DU NOMBRE.
LYI 4
BSR AHEX < DECODAGE DE 4 CARACTERES.
JNE NP1 < ERREUR DE SYNATXE.
JALE NP1 < REFUS DES NOMBRE <=0.
STA NSEG < SAVE LE NOMBRE DE SEGMENTS
< REELLEMENT DEMANDES.
STA SNSEG < DECOMPTEUR DE NSEG.
<
< ET MAINTENANT DOIT-ON EMETTRE EN ZDC ???
<
LAD M1
BSR AENTER
STB IZDC < SAVE LA REPONSE...
BSR ASPOIN < ENVOI 1 OU 2 SEGMENTS ???
BSR ASOAB < OAB INTERMEDAIRES ???
LA NSEG1
SB NSEG
STA MODE < MODE MEMORISE LA POSITION
< DE NSEG PAR RAPPORT A NSEG1.
<
< VALEUR DE MODE :
< MODE=0 : NSEG=NSEG1, JUSTE LE NON NOMBRE,
< MODE<0 : NSEG1<NSEG, IL EN MANQUE,
< MODE>0 : NSEG1>NSEG, IL Y EN A TROP.
<
JAE NP4 < OK, LE BON NOMBRE.
JAL NP5 < IL N'Y EN A PAS ASSEZ.
<
< PREPARATION 'TROP DE SEGMENTS' :
<
LA NSEG1
SARD 16
DV NSEG < DIVISION PAR EXCES NSEG1/NSEG.
STA N1 < EN PRENDRE 1 SUR N1.
STZ SN1
IC SN1 < SN1=1, AFIN DE PRENDRE LE
< 1ER SEGMENT.
JMP NP4
<
< PREPARATION 'PAS ASSEZ DE SEGMENTS' :
<
NP5: EQU $
LAI 0
LB NSEG
DV NSEG1 < DIVISION PAR DEFAUT NSEG/NSEG1.
STA N2 < ENVOYER N2 SEGMENTS POUR 1,
STB N3 < EN AJOUTER N3 AU DEBUT.
STB SN3 < DECOMPTEUR DE N3.
<
< INITIALISATIONS :
<
NP4: EQU $
LAI MAXBUF
STA IBUF1 < AFIN DE FORCER LA 1ERE LECTURE.
LA SGFO1
SBT 15
STA SGFO1 < MISE EN OLD DE SGFO1.
LAD SGFO1
SVC 0
NP2: EQU $
<
< BOUCLE D'EMISSION DES SEGMENTS :
<
LA IBUF1
CPI MAXBUF < VALIDATION INDEX BUFFER.
JL NP3 < OK, BUFFER NON VIDE...
LAD SGFR1
SVC 0 < LECTURE SI BUFFER VIDE.
LAI 0 < REINITIALISATION DE IBUF1.
NP3: EQU $
LR A,X < X=INDEX COURANT BUFFER SGF.
CPZ MODE
JG NP6 < CAS 'TROP DE SEGMENTS'.
JL NP7 < CAS 'PAS ASSEZ DE SEGMENTS'.
<
< CAS 'JUSTE ASSEZ DE SEGMENTS' :
<
NP9: EQU $
BSR ALBU1 < A,B=COORDONNEES ORIGINE SEGMENTS.
STA SEG+0+X
STB SEG+0+Y
BSR ALBU1 < A,B=COORDONNEES EXTREMITE SEGMENT.
STA SEG+2+X
STB SEG+2+Y
BSR ASENDT < SEND+TEST DE FIN (NSEG=0).
<
< FIN D'UNE ITERATION :
<
NP10: EQU $
STX IBUF1 < SAVE INDEX COURANT BUFFER.
JMP NP2 < VERS LE TOUR SUIVANT...
<
< CAS 'TROP DE SEGMENTS' :
<
NP6: EQU $
DC SN1 < EST-CE LE MOMENT D'EMETTRE ???
JG NP8 < NON.
LA N1
STA SN1 < REINITIALISATION DE SN1, LORSQU'ON
< EMET UN SEGMENT.
JMP NP9 < VERS L'EMISSION...
NP8: EQU $ < PAS D'EMISSION.
ADRI 4,X < ON SAUTE LE SEGMENT COURANT.
JMP NP10
<
< CAS 'PAS ASSEZ DE SEGMENTS' :
<
NP7: EQU $
BSR ALBU1 < A,B=ORIGINE SEGMENT COURANT.
STA DICOX1
STB DICOY1
BSR ALBU1 < A,B=EXTREMITE SEGMENT COURANT.
STA DICOX2
STB DICOY2
STA DICOX < SAVE L'EXTREMITE REELLE
STB DICOY < DU SEGMENT COURANT.
LA N2
DC SN3 < DECOMPTE DES SEGMENTS A RAJOUTER AU DEBUT
JL NP20 < C'EST FINI POUR EUX...
ADRI 1,A < SI SN3>0, ON ENVERRA UN SEGMENT
< DE PLUS.
NP20: EQU $
STA SN2 < SN2=N2 (+1 SI SN3>0).
STA SSN2 < POUR LE DECOMPTE DES ITERATIONS.
LA DICOX2
SB DICOX1
SARD 16
DV SN2
STA PASX < PASX=(DICO2-DICOX1)/SN2.
LA DICOY2
SB DICOY1
SARD 16
DV SN2
STA PASY < PASY=(DICOY2-DICOY1)/SN2.
NP21: EQU $ < ENVOI DES SEGMENTS.
DC SSN2 < DECOMPTE DES ITERATIONS.
JE NP30 < C'EST FINI...
LA DICOX1
STA SEG+0+X < ORIGINE.
AD PASX
STA SEG+2+X < EXTREMITE.
LA DICOY1
STA SEG+0+Y < ORIGINE.
AD PASY
STA SEG+2+Y < EXTREMITE.
BSR ASENDT < SEND+TEST DE FIN (NSEG=0).
LA SEG+2+X
STA DICOX1 < CHANGEMENT ORIGINE,
LA SEG+2+Y
STA DICOY1 < CHANGEMENT ORIGINE.
JMP NP21 < ITERATION SUIVANTE...
<
< CAS 'PAS ASSEZ DE SEGMENTS', TRAITEMENT DU DERNIER SOUS-SEGMENT :
<
NP30: EQU $
LA DICOX1
STA SEG+0+X
LA DICOY1
STA SEG+0+Y
LA DICOX < POUR LUI, ON PREND L'EXTREMITE
STA SEG+2+X < REELLE DU SEGMENT.
LA DICOY
STA SEG+2+Y
BSR ASENDT < SEND+TEST DE FIN (NSEG=0).
JMP NP10 < C'EST FINI POUR CE SEGMENT.
<
< FIN DES OPERATIONS :
<
NFIN: EQU $
LA SGFC1
RBT 15 < MISE DE SGFC1 EN DELETE.
STA SGFC1
LAD SGFC1
SVC 0 < DELETE DE 1.0.
RSR
<
<
< S E N D E T T E S T D E F I N :
<
<
SENDT: EQU $
BSR ASENDP < EMISSION EN ZDC.
DC SNSEG
JE SENDT1 < C'EST FINI.
RSR < CE N'EST PAS FINI.
SENDT1: EQU $
ADRI -1,K < ANNULATION DU BSR D'APPEL.
JMP NFIN < ON ARRETE ICI L'EMISSION.
PAGE
<
<
< S T O R E S G F 1 :
<
<
< ARGUMENT :
< X,Y=COORDONNEES D'UN POINT EN GRAPHIQUE.
<
<
STBUF1: EQU $
CPZ ISGF < ACCES SGF ???
JNE NSTBU1 < NON.
PSR A,X
LR X,A
LX IBUF1 < X=INDEX COURANT BUFFER 1.
STA &ASGF1 < SAVE COORDONNEE X.
ADRI 1,X < PROGRESSION INDEX.
STY &ASGF1 < SAVE COORDONNEE Y.
ADRI 1,X < PROGRESSION INDEX.
LR X,A
CPI MAXBUF < VALIDATION INDEX.
JL STBUF2 < OK, BUFFER NON PLEIN.
LAD SGFW1
SVC 0 < ECRITURE D'UN BUFFER PLEIN...
LAI 0 < ET RAZ INDEX COURANT.
STBUF2: EQU $
STA IBUF1 < SAVE INDEX COURANT BUFFER 1.
PLR A,X
NSTBU1: EQU $
RSR
<
<
< I N I T I A L I S A T I O N A C C E S S G F :
<
<
INSGF: EQU $
STZ KPT1 < RAZ DU NBRE DE POINTS.
CPZ ISGF < ACCES SGF ???
JNE NSGF10 < NON.
STZ IBUF1 < REINITIALISATION INDEX BUFFER.
LA SGFO1
RBT 15 < MISE DE SGFO1 EN NEW.
STA SGFO1
LAD SGFO1
SVC 0 < OPEN NEW 1.0.
NSGF10: EQU $
RSR
<
<
< E N V O I 1 S E G M E N T A U S G F :
< E T T R A C E D U S E G M E N T :
<
<
< ARGUMENT :
< SEG=LE SEGMENT A ENVOYER.
<
<
SENDS: EQU $
CPZ ISGF < SGF ACTIF ???
JNE NSGF3 < NON, RIEN A FAIRE.
LAI -1 < OUI, ON INHIBE LES
WORD '1EB5 < ALT-MODES SOLITAIRES.
LX SEG+0+X
LY SEG+0+Y
BSR ASTBU1 < ENVOI ORIGINE.
IC KPT1 < COMPTAGE ORIGINE.
LX SEG+2+X
LY SEG+2+Y
BSR ASTBU1 < ENVOI EXTREMITE.
IC KPT1 < COMPTAGE EXTREMITE.
LAI PIMAGE-ZERO
WORD '1EB5 < REAUTORISATION ALT-MODES.
NSGF3: EQU $
BSR ADRAW < TRACE SEGMENT SI VALIDE.
RSR
<
<
< A C C E S S G F 1 :
<
<
< RESULTAT :
< A,B=X,Y D'UN POINT.
<
<
LBUF1: EQU $
LA &ASGF1 < COORDONNEE X.
ADRI 1,X < PROGRESSION INDEX BUFFER.
LB &ASGF1 < COORDONNEE Y.
ADRI 1,X < PROGRESSION INDEX BUFFER.
RSR
<
<
< A C C E S S G F 2 :
<
<
< RESULTAT :
< A,B=X,Y D'UN POINT.
<
<
LBUF2: EQU $
LA &ASGF2 < COORDONNEE X.
ADRI 1,X < PROGRESSION INDEX BUFFER.
LB &ASGF2 < COORDONNEE Y.
ADRI 1,X < PROGRESSION INDEX BUFFER.
RSR
<
<
< A C C E S C C I I N T E R P R E T A T I F :
<
<
< ARGUMENT :
< A=@CARTE A EMETTRE.
<
<
CCI: EQU $
SLLS 1 < A=@OCTET CARTE,
STA CCII+1 < MAJ DEMANDE.
LAD CCII
SVC 0 < ACCES CCI INTERPRETATIF.
RSR
<
<
< T E N T A T I V E D E L E T E F I C H I E R S
< F A & F B :
<
<
DF: EQU $
LA AMAC
BSR ACCI < CLOSE SAVE DE '0A.
LA AMBCS
BSR ACCI < CLOSE SAVE DE '0B.
LA AMBO
BSR ACCI
LA AMBC
BSR ACCI
LAD DEMDB
SVC 0
RSR
PAGE
<
<
< C O N V E R S I O N B I N A I R E A S C I :
<
<
< ARGUMENT :
< B=VALEUR A CONVERTIR.
<
<
DISP: EQU $
PSR X
LXI 0 < INDEX BUFFER.
LYI 4 < MAX(X).
DISP1: EQU $
LAI 0 < CLEAR A.
SLLD 4 < DECONCATENATION B.
CPI 9 < EST-CE UN CHIFFRE DECIMAL ???
JLE DISP2 < OUI...
ADRI "A"-"9"-1,A < CONVERSION LETTRE.
DISP2: EQU $
ADRI '30,A < CONVERSION ASCI.
STBY &ABDISP < MISE EN BUFFER.
ADRI 1,X < SUIVANT.
CPR X,Y < EST-CE FINI ???
JNE DISP1 < NON...
PLR X
RSR < OUI...
<
<
< C O N V E R S I O N A S C I --> B I N A I R E :
<
<
< RESULTAT :
< A=VALEUR CONVERTIE S'IL N'Y A PAS
< D'ERREUR, LES CODES DE CONDITION
< L'INDIQUANT.
<
<
HEX: EQU $
PSR B,X
LXI 0 < X=INDEX DE 'REP'.
LBI 0 < B=CUMUL COURANT.
HEX1: EQU $
LBY &AREP < A=CARACTERE COURANT DE 'REP'.
CPI '04 < EST-CE 'EOT' ???
JE HEX5 < OUI, FIN DE CONVERSION.
CPI '0D < EST-CE 'R/C' ???
JE HEX5 < OUI, FIN DE CONVERSION.
ADRI -'30,A < CONVERSION BIANIRE.
JAL HEX2 < ERREUR.
CPI 9 < EST-CE UN CHIFFRE DECIMAL ???
JLE HEX3 < OUI.
ADRI -"A"+"9"+1,A < NON.
CPI 'A < VALIDATION HEXDECIMALE ???
JL HEX2 < ERREUR.
CPI 'F < VALIDATION HEXADECIMALE ???
JG HEX2 < ERREUR.
HEX3: EQU $
SCRS 4 < CUMUL PARTIEL DE LA
SCLD 4 < VALEUR A CONVERTIR.
ADRI 1,X < PASSAGE AU CARACTERE SUIVANT.
CPR X,Y < EST-CE FINI ???
JNE HEX1 < NON.
HEX5: EQU $
LR B,A < OUI, A=RESULTAT.
LBI 0 < B=0 : OK.
HEX4: EQU $
CPZR B < POSITIONNEMENT DES CODES
< DE CONDITION SUR ERREUR.
PLR B,X
RSR
HEX2: EQU $ < CAS DES ERREURS.
LBI 1 < B=1#0 : ERREUR.
JMP HEX4 < VERS LA SORTIE...
PAGE
<
<
< R E T O U R A ' G E ' :
<
<
GOGE: EQU $
<
<
< A L T - M O D E S :
<
<
ALTMOD: EQU $
<
< RAZ DES ITEMS 1 ET 2 :
<
LX NMOTS < X=NBRE DE MOTS A RAZER.
GOGE1: EQU $
STZ &AI2
JDX GOGE1
STZ &ANOM < INVALIDATION DU NOM DE
< L'2MAGE 1 A CAUSE DE 'TV'/'TI'
< QUI POURRAIT VOULOIR L'UTILISER
< ENSUITE !!!
<
< PREPARATION DE L'3VERLAY :
<
LAI '06
STBY DEMSGN < DEMSGN EST MISE EN MODE 'LOAD
< SOUS :SYS '.
LA NGE
STA 0,W < LE NOM DE 'GE' EST MIS EN TETE DE
< LA BRANCHE D'OVERLAY.
LA APILE
LR A,K < REINITIALISATION DE K SUR LA
< PILE DE SMC.
BSR ADF < DELETE DES FICHIERS....
<
< TENTATIVE(S) DE CHARGEMENT DE 'GE' :
<
GOGE2: EQU $
LAD DEMSGN < A=@DEMSGN , W=@BRANCH.
BSR AOVL < TENTATIVE DE LOAD 'GE'.
LAD DEMCCI
SVC 0 < RETOUR AU CCI SI ERREUR ,
JMP GOGE2 < ET NOUVELLE TENTATIVE SI !GO.
<
<
< R E T O U R A U C C I :
<
<
GOCCI: EQU $
LAD DEMCCI
SVC 0 < RETOUR CCI,
JMP INTER < ET RETOUR 'TN' SI !GO.
PAGE
<
<
< R A Z I M A G E S T A T I Q U E :
<
<
RAZ: EQU $
BSR ALOC12 < PASSAGE A 12K.
LX ALIMAG < X=NBRE DE MOTS A TRAITER.
LA MASKI < A=VALEUR INITIALE.
RAZ1: EQU $
STA &AIMAG1 < INITIALISATION IMAGE STATIQUE.
JDX RAZ1
DSPI1: EQU $
LB STABIL+2
LRM A
WORD LIMAG*2
STA STABIL+2
LAD STABIL
SVC 0 < VISUALISATION...
STB STABIL+2
JMP INTERA < VERS LE RETOUR A 4K...
<
<
< D I S P L A Y T R A M E C O U R A N T E :
<
<
DSPI: EQU $
BSR ALOC12 < PASSAGE A 12K...
JMP DSPI1
<
<
< I N I T I A L I S A T I O N I M A G E S T A T I Q U E :
<
<
GETI: EQU $
BSR ALOC12 < PASSAGE A 12K...
LA STABIL+3
LY STABIL+2
LR A,B
SBT NBTVIN
STA STABIL+3
LRM A
WORD LIMAG*2
STA STABIL+2
LAD STABIL
SVC 0 < ENTREE D'UNE TRAME.
STB STABIL+3
STY STABIL+2
JMP INTERA < VERS LE RETOUR A 4K...
<
<
< C H A M G E M E N T D U N O M
< D U F I C H I E R ' F B ' :
<
<
NOFIC: EQU $
CPZ ISGF < SGF VALIDE ???
JNE ERROR < NON, ERREUR...
LAI PIMAGE-ZERO
WORD '1EB5 < RESATAURE 'PRESC' A PRIORI.
LAI '7D
WORD '1EA5 < RESTAURE ALT-MODE A PRIORI.
LA AM9
BSR APRINT < ENVOI MESSAGE 'NOM='.
LAD DEMNO1
SVC 0 < ENTREE DU NOM DEMANDE.
LAI '1B < CTRL-SHIFT-K.
WORD '1EA5 < CHANGEMENT CARACTERE D'ABORT.
LAI -1
WORD '1EB5 < INHIBITION DU PRESC.
LAD DEMCOP
SVC 0 < COPIE DU NOM INTERNE DU
< FICHIER SUR LE NOM DEMANDE.
JNE NOFIC < ERREUR, ON REDEMANDE NOM.
LAD DEMDB
SVC 0 < OK, ON DELETE LE NOM 'FB'.
LXI -1
LYI -1
BSR ASTBU1 < INDICATEUR DE FIN DE LISTE.
CPZ IBUF1 < BUF1 EST-IL NON VIDE ???
JE NOFIC1 < NON...
LAD SGFW1
SVC 0 < OUI, ON LE VIDE.
NOFIC1: EQU $
LA AMBCS
BSR ACCI < ET CLOSE SAVE '0B.
LAI PIMAGE-ZERO
WORD '1EB5 < RESTAURE LE 'PRESC'.
LAI '7D
WORD '1EA5 < RESTAURE LE ALT-MODE.
JMP INTERC < ON VA REINITIALISER LES
< ASSIGNATIONS.
<
<
< I N V E R S I O N E T A T T R A C E :
<
<
VISU: EQU $
LA AM10
BSR AENTER < GRAPHIQUE VISU ???
STB IVISU
LA AM11
IF ORDI-"T",XWOR%,,XWOR%
BSR AENTER < SORTIE VIDEO ???
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
BSR AENTCL < SORTIE VIDEO ???
LA INIMAG+3 < POSITIONNER LE PROCESSEUR DE SORTIE.
RBT NBTVIN
STA STABIL+3
XWOR%: VAL 0
STB IVIDEO
BR AINTER < VERS L'INTERROGATION.
PAGE
<
<
< S I M U L A T I O N D ' U N C U R S E U R
< G R A P H I Q U E D E V I S U :
<
<
< FONCTION :
< CE PROCESSEUR PERMET L'ENTREE
< DE SEGMENTS :
< 1- A PARTIR DE LA ZDC,
< 2- A PARTIR DU CURSEUR DE LA VISU,
< 3- A PARTIR DE LA CAMERA EN UTILISANT LE
< LE CENTRE DE GRAVITE DE L'IMAGE COMME
< SIMULATEUR DE CURSEUR VISU.
< A PARTIR DE LA IL CREE DES FICHIERS QUI
< PEUVENT ETRE RENDUS PERMANENTS ('N'),
< ET RELUS AFIN D'ETRE EMIS PAR LA ZDC,
< ET RECUPERES PAR UN AUTRE PROCESSEUR, ET
< EN PARTICULIER LUI-MEME AFIN DE FAIRE DES
< COPIES, DES INSERTIONS, DES SUPPRES-
< SIONS,... DANS DES FICHIERS.
<
<
WORD IMAG
WORD LOC+'80
WORD BRANCH
IMAGE: EQU $
LRP K
ADRI -1,K
PLR C,L,W < INITIALISATIONS DES 3 BASES.
LA ASTACK
LR A,K < INITIALISATION DE K SUR LA PILE
< DE TRAVAIL DE 'TN'.
IC KIN < DECOMPTE DES ENTRIES.
<
< T R A I T E M E N T D E S A L T - M O D E S :
<
JG INTERA < ALT-MODES : REALLOCATION MEMOIRE...
<
<
< 1 E R E E N T R Y
<
<
TABLO: EQU $
<
< VALIDATION DU DEMANDEUR :
<
WORD '1E25 < (A,B)=<ACN> DU DEMANDEUR.
CP ACNSYS < EST-CE :SYS ???
JNE GOGE < NON , RETOUR ...
LR B,A
CP ACNSYS+1 < EST-CE :SYS ???
JNE GOGE < NON , RETOUR ....
<
< ACCES AU SGF ???
<
LAD M3
BSR AENTER < INTERROGATION ???
STB ISGF < SAVE REPONSE.
JNE NSGF1 < NON, RIEN A FAIRE...
WORD '1E45 < OUI, A=IDESC.
ADRI '30,A < CONVERSION ASCI DE L'IDESC.
STBY &AIDBN < CALCUL DU NOM DE FICHIER
STBY &AIDBO < EN FONCTION DE L'IDESC.
BSR ADF < TENTATIVE DE DELETE INITIAL...
INTERC: EQU $
LA AMBN
BSR ACCI < OPEN '0B.
JNE GOGE < ABORT SI IMPOSSIBLE (ASSIGNATION ???)
LAD DEMSGF < SAVE LA CORRESPONDANCE
SVC 0 < 'FB' --> NOM DIRECT DU FICHIER.
< EN VUE DE LA COMMANDE 'N').
BSR AINSGF < INITIALISATION ACCES SGF1.
NSGF1: EQU $
BSR AINSGF < INITIALISATION ACCES SGF.
INTERA: EQU $ < ENTRY ALT-MODES.
LAD RELMEM
SVC 0 < PASSAGE A 4K A PRIORI.
<
< INTERROGATION DE L'UTILISATEUR :
<
INTER: EQU $
LAD MINT
BSR APRINT < ENVOI DE L'INVITATION.
LAD DEMIN
SVC 0 < LECTURE DE LA REPONSE.
LBY REP < A=CARACTERE REPONSE UTILISATEUR.
<
< REPONSES RECONNUES :
< F : RETOUR A 'GE' ,
< G : ENTREE D'UN CONTOUR,
< W : RETOUR AU CCI.
< Z : RAZ DE L'IMAGE STATIQUE.
< D : DSPILAY LA TRAME COURANTE.
< I : RECUPERATION D'UNE TRAME EN MEMOIRE 'TV',
< O : ENVOI D'UN 'OAB' EN ZDC.
< V : INVERSION DE L'ETAT D'ECRITURE GRAPHIQUE SU VISU.
< R : LECTURE D'UN FICHIER EXISTANT.
< N : MISE EN PERMANENT DU FICHIER 'FB'.
< S : EDIT.
<
CPI "W"
JE GOCCI < RETOUR TEMPORAIRE AU CCI.
CPI "G"
JE CONT < ENTREE CONTOUR.
CPI "Z"
JE RAZ < INITAILISATION IMAGE STATIQUE.
CPI "I"
JE GETI < RECUPERATION D'UNE TRAME EN 'MEMTV'...
CPI "D"
JE DSPI < DSPILAY LA TRAME COURANTE.
CPI "V"
JE VISU < INVERSION ETAT SORTIE VISU.
CPI "R"
JE RFIC < LECTURE D'UN FICHIER.
CPI "N"
JE NOFIC < CHANGEMENT DE NOM DE 'FB'.
CPI "O"
JE OAB < VERS L'ENVOI D'UN 'OAB' EN ZDC.
CPI "S"
JE SEDIT < EDITION DE LA LISTE COURANTE.
CPI "F"
JNE ERROR < ????!?!??!
BR AGOGE < RETOUR A "GE".
ERROR: EQU $
LAD MERR
BSR APRINT < ENVOI MESSAGE D'EREUR...
JMP INTER < RIEN COMPRIS, INTERROGATION...
<
<
< E N V O I ' O A B ' :
<
<
OAB: EQU $
CPZ IZDC < ACCES ZDC VALIDE ???
JNE ERROR < NON, 'O' NON RECONNUE...
STZ SEG+0+X
STZ SEG+0+Y
STZ SEG+2+X
STZ SEG+2+Y
BSR ASEND < ENVOI EN ZDC...
BR AINTER < ET C'EST TOUT...
PAGE
<
<
< E N T R E E C O N T O U R :
<
<
CONT: EQU $
LAD M8
BSR AENTER < ENTREE PAR ZDC ???
JE ACZDC < OUI.
LAD M6
IF ORDI-"T",XWOR%,,XWOR%
BSR AENTER < ENTREE VIDEO ???
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
BSR AENTCL < ENTREE VIDEO ???
XWOR%: VAL 0
JE ACVIDE < OUI.
LAD M7
BSR AENTER
JE ACCUR < VERS L'ENTREE CURSEUR...
JMP INTER < VERS L'INTERROGATION....
<
< E N T R E E V I D E O :
<
ACVIDE: EQU $
BSR ALOC12 < PASSAGE A 12K.
<
< ENTREE DU SEUIL IMAGE VIDE :
<
SE1: EQU $
LAD M2
BSR APRINT < ENVOI MESSAGE.
LAD DEMH
SVC 0 < ENTREE SEUIL PRESUME.
LYI 4 < Y=4 CARACTERES A DECODER.
BSR AHEX < DECODAGE BINAIRE.
JNE SE1 < ERREUR DE SYNTAXE.
JALE SE1 < REFUS DE SEUIL<=0.
STA SEUIL < OK, BON SEUIL.
<
< ENTREE DES TRAMES SUCCESSIVES :
<
CONT1: EQU $
BSR ATRAME < ENTREE UNE TRAME.
BSR AGRAVE < CALCUL DE SON CENTRE DE GRAVITE.
JAE CONT1 < ELLE EST VIDE, ON ATTEND...
CONT4: EQU $
STX SEG+0+X
STY SEG+0+Y < ORIGINE SEGMENT COURANT.
IF ORDI-"T",XWOR%,,XWOR%
LA XG
STA DICOX1 < PREPARATION DICHOTOMIE.
LA YG
STA DICOY1
XWOR%: VAL 0
CONT2: EQU $
BSR ATRAME < ENTREE UNE TRAME.
BSR AGRAVE < CLCUL DE SON CENTRE DE GRAVITE.
JAE CONT2 < ELLE EST VIDE, ON ATTEND....
STX SEG+2+X
STY SEG+2+Y < EXTREMITE SEGMENT COURANT.
<
< STORE SGF EVENTUEL :
<
BSR ASENDS
<
< TRACE VIDEO STATIQUE :
<
IF ORDI-"T",XWOR%,,XWOR%
LA XG
STA DICOX2
LA YG
STA DICOY2
XWOR%: VAL 0
BSR ATRACE
LX SEG+2+X < L'EXTREMITE COURANTE VA DEVENIR
LY SEG+2+Y < L'ORIGINE DU SEGMENT SUIVANT.
JMP CONT4 < ET ON BOUCLE JUSQU'A
< RECEVOIR UN ALT-MODE...
<
< E N T R E E Z D C :
<
ACZDC: EQU $
CPZ IVIDEO
JNE ACZDC1 < PAS DE TRACE VIDEO.
BSR ALOC12 < OUI, IL FAUT DONC 12K...
ACZDC1: EQU $
LAD DEMGS
SVC 0 < ACCES SEGMENT COURANT ZDC.
CPZ NOMSEG < TEST DE LA VALIDATION ???
JE ACZDC1 < INVALIDE.
STZ NOMSEG
LAD DELGS
SVC 0 < OK, ACQUITTEMENT.
LA SEG+0+X
OR SEG+0+Y
OR SEG+2+X
OR SEG+2+Y < EST-CE LA FIN DE LISTE ZDC ???
JAE INTERA < OUI, ON ARRETE ICI L'ENTREE...
BSR ASENDS < NON, ON ENVOI AU SGF...
BSR AGRVI < TRACE VIDEO EVENTUEL.
JMP ACZDC1 < VRS LE SEGMENT ZDC SUIVANT.
<
< E N T R E E C U R S E U R :
<
ACCUR: EQU $
CPZ IVIDEO
JNE ACCUR1 < PAS DE TRACE VIDEO.
BSR ALOC12 < OUI, IL FAUT DONC 12K.
ACCUR1: EQU $
LAD OG
SVC 0 < OPEN GRAPHIQUE.
LAD CU
SVC 0 < MISE EN FONCTION CURSEUR.
LAD LCU
SVC 0 < LECTURE GRAPHIQUE.
LBY CURSOR < A=CARACTERE DE DEBLOCAGE.
<
< COMMANDES RECONNUES :
< A : ORIGINE SEGMENT,
< B : EXTREMITE CHAINEE,
< S : EXTREMITE ETOILEE,
< F : FIN DE CURSEUR.
<
CPI "A"
JE RUNA
CPI "B"
JE RUNB
CPI "S"
JE RUNS
CPI "F"
JNE ACCUR1 < RIEN COMPRIS...
JMP INTERA < COMMANDE 'F', RETOUR 4K.
<
< A : ORIGINE SEGMENT :
<
RUNA: EQU $
LX CURSOR+1+X
LY CURSOR+1+Y
STX SEG+0+X
STY SEG+0+Y
JMP ACCUR1
<
< B : EXTREMITE CHAINEE SEGMENT,
< S : EXTREMITE ETOILEE SEGMENT :
<
RUNB: EQU $
RUNS: EQU $
LX CURSOR+1+X
LY CURSOR+1+Y
STX SEG+2+X
STY SEG+2+Y
BSR ASENDS < ENVOI AU SGF EVENTUEL...
BSR AGRVI < TRAVE VIDEO EVENTUEL.
LBY CURSOR < A=CARACTERE DE DEBLOCAGE.
CPI "B"
JE RUNA < B : IL FAUT CHAINER.
JMP ACCUR1 < S : IL NE FAUT PAS CHAINER.
<
<
< E D I T I O N L I S T E C O U R A N T E :
<
<
SEDIT: EQU $
BSR AEDIT
BSR AINSGF < REINITIALISATION SGF...
BR AINTER < VERS L'INTERROGATION.
PAGE
<
<
< L E C T U R E D ' U N F I C H I E R :
<
<
< FONCTION :
< CE MODULE RELIT UN FICHIER
< DE NOM DONNE ET L'EMET EN ZDC; ON
< PEUT AINSI COPIER DES FICHIERS...
<
<
RFIC: EQU $
LA AM9
BSR APRINT < ENVOI MESSAGE 'NOM='.
LAD DEMNOM
SVC 0 < ENTREE DU NOM DU FICHIER.
LA AMAC
BSR ACCI < DESASSIGNATION EN SAVE DE '0A.
LA AMFIC
BSR ACCI < ESSAI D'OUVERTURE 'OLD' SUR '0A.
JNE RFIC4 < ERREUR, VERS L'INTERROGATION.
LAD SGFO2
SVC 0 < OUVERTURE DE 1.0 EN OLD.
JE RFIC1 < OK, REUSSIT...
LA AMAC < SINON, ON REFERME
BSR ACCI < EN SAVE...
RFIC4: EQU $
BR AINTER < REINTERROGATION....
<
< INITIALISATIONS DE LA LECTURE DU FICHIER :
<
RFIC1: EQU $
CPZ IVIDEO
JNE RFIC8 < PAS DE SORTIE VIDEO.
BSR ALOC12 < SORTIE VIDEO : PASSAGE A 12K.
RFIC8: EQU $
LA AM15
BSR APRINT
LAD DEMH
SVC 0 < ENTREE #1ER SEGMENT.
LYI 4
BSR AHEX < DECODAGE BINAIRE.
JNE RFIC8 < ERREUR DE SYNTAXE.
JALE RFIC8 < NUMERO NON RECONNU.
STA NUS1 < OK.
RFIC9: EQU $
LA AM16
BSR APRINT
LAD DEMH
SVC 0 < ENTREE #2EME SEGMENT.
LYI 4
BSR AHEX < DECODAGE BINAIRE.
JNE RFIC9 < ERREUR DE SYNTAXE.
JALE RFIC9 < NUMERO NON RECONNU.
CP NUS1 < VALIDATION 2EME/ AU 1ER...
JL RFIC8 < 2EME<1ER : ERREUR...
STA NUS2 < OK.
STZ NSEG2 < RAZ DU COMPTEUR DE SEGMENTS.
LB IVISU
CPZR B < Y-A-T'IL TRACE VISU ???
JNE RFIC6 < NON, DONC PAS DE COMPTAGE...
LA AM12
BSR AENTER < FAUT-IL COMPTER ???
RFIC6: EQU $
STB ISEG < SAVE LA REPONSE.
LAD M1
BSR AENTER < EMISSION ZDC ???
STB IZDC < SAVE LA REPONSE...
BSR ASPOIN < ENVOI 1 OU 2 SEGMENT ???
BSR ASOAB < OAB INTERMEDIARES ???
LA AM13
BSR AENTER < PAS A PAS ???
STB IPAS < SAVE LA REPONSE.
LXI MAXBUF < X=INDEX BUFFER 2.
<
< TRAITEMENT DES SEGMENTS :
<
RFIC2: EQU $
LR X,A < VALIDATIION INDEX BUFFER.
CPI MAXBUF
JL RFIC3 < OK.
LAD SGFR2 < ON, LE BUFFER EST TOUT
SVC 0 < EXPLORE, AU SUIVANT...
JNE NRFIC < FIN DE FICHIER, STOP !!!
LAI 0 < OK, REINITIALISATION DE L'INDEX.
RFIC3: EQU $
LR A,X < X=INDEX BUFFER 2.
BSR ALBU2
STA SEG+0+X < ORIGINE
STB SEG+0+Y < SEGMENT COURANT.
ANDR B,A < FIN DE LISTE ???
CPI -1
JE NRFIC < OUI, ON ABANDONNE.
BSR ALBU2
STA SEG+2+X < EXTREMITE
STB SEG+2+Y < SEGMENT COURANT.
IC NSEG2 < COMPTAGE SEGMENT.
LA NSEG2 < OU EN EST-ON ???
CP NUS2 < A-T'ON DEPASSE NUS2 ???
JG NRFIC < OUI, ON ARRETE ICI.
CP NUS1 < A-T'ON ATTEINT NUS1 ???
JL RFIC2 < NON, ON ATTEND D'Y ARRIVER...
BSR ADRAW < TRACE EVENTUEL...
BSR AGRVI < AFFICHAGE VIDEO EVENTUEL.
CPZ ISEG < FAUT-IL COMPTER ???
JNE RFIC5 < NON...
LB NSEG2 < OUI, B=NUMERO COURANT.
BSR ADISP < CONVERSION ASCI DE (B).
LAD MDIS
BSR APRINT < EDITION DE (NSEG2) AU BOUT DU SEGMENT
< COURANT.
RFIC5: EQU $
CPZ IPAS < PAS A PAS ???
JNE RFIC7 < NON...
LAD M14 < OUI,
BSR AENTER < ALORS FAUT-IL PRENDRE EN
< COMPTE LE SEGMENT COURANT ???
JNE RFIC2 < NON, AU SUIVANT...
RFIC7: EQU $
BSR ASENDP < ENVOI EN ZDC...
JMP RFIC2 < AU SEGMENT SUIVANT.
<
< FIN DE FICHIER :
<
NRFIC: EQU $
LAD SGFC2
SVC 0 < CLOSE SAVE 1.0.
LA AMAC
BSR ACCI < DESASSIGNATION EN SAVE DE '0A.
BR AINTEA < VERS L'INTERROGATION ET 4K.
PAGE
<
<
< I M P L A N T A T I O N :
<
<
X12: EQU ZERO+PILE-LTNI-LTNI
X10: VAL X12-$
ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE SI MAUVAISE
< IMPLANTATION !!!
DZS X10+1 < HYGIENE ...
PAGE
<
<
< B U F F E R S G F 2 :
<
<
BUF1M: EQU $
BUFSGF: EQU BUF1M
XBUF: VAL BUF1M-ZERO*2
BUF1O: EQU ZERO+XBUF < @OCTET DE BUF1M.
<
<
< B U F F E R S G F 2 :
<
<
BUF2M: EQU BUF1M+128
XBUF: VAL BUF2M-ZERO*2
BUF2O: EQU ZERO+XBUF < @OCTET DE BUF2M.
<
<
< P I L E D E T R A V A I L :
<
<
STACK: EQU BUF2M+128
<
<
< B U F F E R D E C H A N G E M E N T N O M :
<
<
BUFCM: EQU STACK+LSTACK
XBUF: VAL BUFCM-ZERO*2 < @OCTET DE BUFCM.
BUFCO: EQU ZERO+XBUF
XBUF: VAL BUFCM-ZERO+LMFIC*2
BUFCON: EQU ZERO+XBUF < @OCTET DE BUFCON.
<
<
< 2 E M E V A L I D A T I O N :
<
<
X10: VAL BUFCM-ZERO+LBUFES+2
X10: VAL PILE-X10
ZEROW: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE SI
< RECOUVREMENT DE LA PILE
< DE SMC...
DZS X10+1
EOT #SIP GEN PROCESSEUR#
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.