PAGE PROG IDP "SIMULATEUR BOS SUR CMS" IDP "JOHN F. COLONNA" IDP "03 NOVEMBRE 1981" ZERO: EQU $ DZS '10 < INTERFACE AVEC 'CMS5'... WORD DEBUT WORD SIMUL < POINT D'ENTREE... DEBUT: EQU $ LRP L BR -1,L < ET ON RENTRE DANS LE PROGRAMME... PAGE < < < C O N S T A N T E S : < < ORDI: VAL "S" K:: VAL 0 I:: VAL 1 EOT:: VAL '04 < CODE DE LA FIN DE MESSAGE. RCLF:: VAL '6D VAR:: VAL " " < CARACTERE VARIABLE DE "!ASSIGN". EGAL:: VAL "=" SAVE:: VAL "S" < POUR DESASSIGNER... LCARTE:: VAL 80 < LONGUEUR D'UNE CARTE. NOCMO:: VAL 2 < NOMBRE D'OCTETS PAR MOT. NBITMO:: VAL 16 < NOMBRE DE BITS PAR MOT. NBITOC:: VAL NBITMO/NOCMO < NOMBRE DE BITS PAR OCTET. FCONV:: VAL 'FA00 < FONCTION DE CONVERSION BINAIRE-->ASCI. FMASK:: VAL 'F500 < DEFINITION D'UNE INSTRUCTION, FCINST:: VAL 'FB00 < EXECUTION D'UNE INSTRUCTION. SBT: SBT 0 COSBT:: VAL '0000000@@@@ < INSTRUCTION 'SBT'... $EQU SBT FR:: VAL '00 < FONCTION DE LECTURE SANS ECHO, FRE:: VAL '01 < FONCTION DE LECURE AVEC ECHO, FW:: VAL '02 < FONCTION D'ECRITURE. XQ1:: VAL '08 < POUR ACCES AU DISQUE EN Q=1... FRQ3:: VAL FR < LECTURE DK EN Q=3, FWQ3:: VAL FW < ECRITURE DK EN Q=3. FRQ1:: VAL FR?XQ1 < LECTURE DK EN Q=1, FWQ1:: VAL FW?XQ1 < ECRITURE DK EN Q=1. XCAN:: VAL '08 < POUR ATTEINDRE LE CANAL SUR 'GPI32', FWCAN:: VAL FW?XCAN < ECRITURE EN MODE CANAL SUR 'GPI32'. FINEX:: VAL 'FF < FONCTION INEXISTANTE. FREW:: VAL '03 < REMBOBINAGE MT. FTM:: VAL '04 < ECRITURE TAPE-MARK MT. FRAD:: VAL '08 < LECTURE DIRECTE MT, FWAD:: VAL '0A < ECRITURE DIRECTE MT. FAD:: VAL '05 < ACCES AU NUMERO DU BLOC COURANT. NVPIMM:: VAL '00 < POUR LES ACCES IMMEDIATS A CMS5... NVPIN:: VAL '01 < 'NVP' D'ENTREE, NVPOUT:: VAL '02 < 'NVP' DE SORTIE. NVPASI:: VAL '80 < POUR LES 'NVP' EN ASSIGNATIONS IMPLICITES BOX:: VAL 3 < POUR RECUPERER DANS 'B' LA BOX D'UNE < DEMANDE A CMS5... BINDEX:: VAL 0 < BIT D'INDEXATION... BITPAR:: VAL 8 < BIT DE PARITE D'UN CARACTERE. RC:: VAL '0D < RETOUR-CHARIOT... MOCG:: VAL 'FF00 < OCTET GAUCHE, MOCD:: VAL '00FF < ET OCTET DROIT. MMOT:: VAL MOCG?MOCD < MASQUE D'UN MOT... NSYS:: VAL 2 < NOMBRE DE SYSTEMES SIMULES. LCDAG:: VAL 32 < LONGUEUR EN K DE LA "CDAG". LK:: VAL 1024 YY7:: VAL 128 < LONGUEUR MOT D'UN SECTEUR. Q:: VAL 3 < QUANTA DISQUE... FONDLN:: VAL '83 < DELETE NOM SGN, FONSTN:: VAL '84 < STORE NOM SGN, FONLON:: VAL '85 < LOAD NOM SGN, FONNXP:: VAL '88 < RECHERCHE DU SUIVANT PARALLELE D'UN NOM, FONNXS:: VAL '89 < ET DU SUIVANT SERIE. < < DEFINITION D'UNE IMAGE DE TELEVISION : < EOT #SIP IMAGE 256# NCOOL:: VAL 3 < NOMBRE DE COMPOSANTES DE COULEUR. FTVDKU:: VAL '01 < FONCTION D'ACCES A LA TELEVISION... PAGE < < < F O R M A T D E L A ' C D A G ' : < < DSEC CDA: EQU $ VCDA: WORD 0 < VERROU D'ACCES A LA 'CDAG' DESTINE < A BOS : < 0 : 'CDAG' LIBRE, < 1 : 'CDAG' OCCUPEE. IOCB: BYTE 0;0 < IOCB D'ECHANGE (FONCTION,PERIPHERIQUE). MFIOCB:: VAL MOCG < FONCTION BOS, MPIOCB:: VAL MOCD < PERIPHERIQUE BOS. IOCB1:: MOT $-IOCB IOCB2:: MOT IOCB1+I IOCB3:: MOT IOCB2+I IOCB4:: MOT IOCB3+I IOCB5:: MOT IOCB4+I IOCB6:: MOT IOCB5+I LIOCB:: VAL IOCB6 < LONGUEUR DU CORPS DE L'IOCB... DZS LIOCB LIOCB: VAL $-IOCB < ??!?!?! SCDA: WORD 0 < MOT DE SYNCHRONISATION CMS--> BOS : < 0 : OPERATION EN COURS, < 1 : OPERATION ACHEVEE. TCODAR: EQU $ < LISTE DES CODES D'ARRET UTILISES LORS < D'UN ECHANGE ; LA FIN DE LISTE EST < INDIQUEE PAR UN 'NULL'. $EQU CDA+16 < ON SE PLACE A UNE FRONTIERE DE 16 < MOTS PAR COMPATIBILITE AVEC LE < DRIVER REENTRANT DE 'BOS'... LBUF:: VAL 4*1024 BUFCDA: DZS LBUF < BUFFER D'ECHANGE BOS<-->CMS... XVCDA:: MOT VCDA-CDA < POUR ATTEINDRE 'VCDA', XSCDA:: MOT SCDA-CDA < 'SCDA', XIOCB:: MOT IOCB-CDA < ET 'IOCB'... PAGE < < < F O N C T I O N S B O S : < < FEND:: VAL '47 < FONCTION DE FIN... RWDU:: VAL FEND < REMBOBINAGE+LOCAL MT, RWD:: VAL '48 < REMBOBINAGE MT, WEOF:: VAL '49 < ECRITURE TAPE-MARK MT, WGAP:: VAL '4A < EFFACEMENT MT, BSRCD:: VAL '4B < SAUT ARRIERE 1 ENREGISTREMENT MT, FSRCE:: VAL '4C < SAUT AVANT 1 ENREGISTREMENT MT, BSFILE:: VAL '4D < SAUT ARRIERE TAPE-MARK MT, FSFILE:: VAL '4E < SAUT AVANT TAPE-MARK MT, BSRCDN:: VAL '4F < SAUT ARRIERE N ENREGISTREMENTS MT, FSRCDN:: VAL '50 < SAUT AVANT N ENREGISTREMENTS MT. TRL:: VAL '41 < PERFORATION AVANCE BANDE TTY, FDP:: VAL '43 < RECUPERATION DES DEFAUTS TTY, OFF:: VAL FEND < MISE HORS-TENSION CR. PGPH:: VAL '40 < SAUT DE PARAGRAPHE LP, PAGE:: VAL '42 < SAUT DE PAGE LP. ROU:: VAL '50 < READ ONLY UNIT DK, RWU:: VAL '51 < READ AND WRITE UNIT DK, MVHD:: VAL '52 < MOUVEMENT DES TESTES DK. FOUT:: VAL '20 < SORTIE, FIN:: VAL '00 < ENTREE. FINNUL:: VAL '08 < ENTREE AVEC ELIMINATION DES NULLS (!?!?). FOUTDK:: VAL '30 < SORTIE SUR 'DKM', FOUTDV:: VAL '28 < SORTIE SANS VERIFICATION SUR 'DKM', FINDK:: VAL '10 < ENTREE SUR 'DKM'. FCLOSE:: VAL FEND < CLOSE DE L'ASSIGNATION SUR CMS5... FNSTN:: VAL 'A8 < DEFINITION DU NOM COURANT, FNLON:: VAL '88 < RECUPERATION DU NOM COURANT, FNDLN:: VAL FEND < DESTRUCTION DU NOM COURANT. FNNEXT:: VAL '4C < RECHERCHE DU NOM SUIVANT. FVSTN:: VAL 'A0 < STORE VALEUR DANS LE SGN, FVLON:: VAL '80 < LOAD VALEUR DU SGN, FVDLN:: VAL '4A < DELETE VALEUR DU SGN. FVSTNI:: VAL '60 < ENVOI DE L'IMAGE COURANTE DANS LE 'SGN', FVLONI:: VAL '40 < VISUALISATION DU NOM COURANT 'SGN'. READIM:: VAL '80 < LECTURE D'UN MORCEAU D'IMAGE, READIN:: VAL '90 < IDEM... WRITIM:: VAL 'A0 < ECRITURE D'UN MORCEAU D'IMAGE. WRITIN:: VAL 'B0 < IDEM... FNOP:: VAL '50 < FONCTION 'NOP'... BCODAR:: VAL 1 < BIT D'ENTREE SUR CODE D'ARRET. BFONSP:: VAL 0 < BIT 'FONCTION SPECIALE' (SI =0). BIT5:: VAL 5 BIT6:: VAL 6 BIT7:: VAL 7 TYPRET:: VAL 'F8FF < POUR ELIMINER LE TYPE DE RETOUR... PAGE < < < D E F I N I T I O N D U C O N T E X T E < P E R I P H E R I Q U E : < < DSEC CONTEX: EQU $ NVP:: VAL '03 < PREMIER NVP D'ASSIGNATION DISPONIBLE. < < SYSTEME D'ASSIGNATION : < ASSIGN: ASCI "!ASSIGN " BYTE NVP=FCONV(MOCD;EGAL ASSNOM: ASCI "XY" < NOM DU PERIPHERIQUE, ASSNUM: BYTE VAR;EOT < ET SON NUMERO... DESASS: ASCI "!ASSIGN " BYTE NVP=FCONV(MOCD;EGAL;SAVE;EOT IASS: WORD 0 < IASS=0 : PERIPHERIQUE NON ASSIGNE, < =1 : PERIPHERIQUE ASSIGNE. < < DEMANDE D'ECHANGE : < DEMPER: BYTE NVP;0 < DEMANDE (NVP,FONCTION). MNVP:: VAL MOCG < MASQUE D'ACCES AU NVP. MFON:: VAL MOCD < MASQUE D'ACCES A LA FONCTION. DEM1:: MOT $-DEMPER < PREMIER ARGUMENT, DEM2:: MOT DEM1+I < DEUXIEME ARGUMENT, DEM3:: MOT DEM2+I < TROISIEME ARGUMENT. LDEM:: VAL DEM3 < LONGUEUR DU CORPS DE LA DEMANDE (MAX). DZS LDEM < < CORRESPONDANCE BOS-->CMS : < FU1:: VAL MOCG < BORNE INFERIEURE, FU2:: VAL MOCD < BORNE SUPERIEURE. NFONC: WORD 0 < NOMBRE DE FONCTIONS RECONNUES : LFONC:: VAL 10 < NOMBRE MAX DE FONCTIONS RECONNUES, EFONC:: VAL 2 < CHAQUE FONCTIONS EST DECRITE PAR 2 MOTS. TFONC: DZS LFONC*EFONC < LISTE DES CORRESPONDANCES... MFBOS:: VAL MOCG < FONCTION BOS, MFCMS:: VAL MOCD < FONCTION CMS ASSOCIEE. TFONC1:: VAL 0 < FONCTION BOS, FONCTION CMS. TFONC2:: VAL TFONC1+I < ADRESSE DU MODULE SPECIFIQUE ; ON TROUVE < DANS LE BIT D'INDEX UN INDICATEUR PERMET- < TANT DE SAVOIR SI LA FONCTION PEUT ETRE < EN RECOUVREMENT DE LA REPONSE A 'BOS'... PAGE < < < M E S S A G E S : < < TABLE M1: BYTE 19;RCLF ASCI "CDAG INACCESSIBLE!" M2: BYTE 19;RCLF ASCI "ECHANGE TROP LONG !" M3: BYTE 29;RCLF ASCI "ERREUR ALLOCATION MEMOIRE !" M4: BYTE 21;RCLF ASCI "PERIPHERIQUE INCONNU!" M6: BYTE 23;RCLF ASCI "FONCTION NON RECONNUE!" M7: BYTE 27;RCLF ASCI "FONCTION NON IMPLEMENTEE !" M8: BYTE 21;RCLF ASCI "SIMULATION BOS-->CMS" M9: BYTE 19;RCLF ASCI "RESTART SIMULATION" M10: BYTE 21;RCLF ASCI "!ASSIGN IMPOSSIBLE !" M11: BYTE 21;RCLF ASCI "INITIALISATION CDA ?" M19: BYTE 13;RCLF ASCI "DKU ENTIER ?" M13: BYTE 27;RCLF ASCI "CMS/1 COUP/4 COUPS(0/1/4)?" M14: BYTE 15;RCLF ASCI "RECOUVREMENT ?" M15: BYTE 19;RCLF ASCI "DKU INACCESSIBLE !" M16: BYTE 11;RCLF ASCI "DKU ERROR!" M18: BYTE 13;RCLF ASCI "DK AD ERROR!" M17: BYTE 11;RCLF ASCI "CCI ERROR!" PAGE < < < D E F I N I T I O N D E S C O N T E X T E S : < < PROG NVP0:: VAL NVP-I < PREMIER NVP INACCESSIBLE... PAGE < < < C O N T E X T E V I S U : < < VIS: EQU $ NVPVIS:: VAL NVP0+I < NVP D'ASSIGNATION D'UNE VISU. ASCI "!ASSIGN " BYTE NVPVIS=FCONV(MOCD;EGAL;"V";"I";VAR;EOT ASCI "!ASSIGN " BYTE NVPVIS=FCONV(MOCD;EGAL;SAVE;EOT WORD 0 < 'IASS'. BYTE NVPVIS;0 WORD BUF2;0;0 WORD NFTTY < NOMBRE DE FONCTIONS TTY : LFTTY: EQU $ BYTE FOUT;FW < ECRITURE, WORD SPVI1,X < AVEC RECOUVREMENT... BYTE FIN;FRE < LECTURE. WORD SPVI2 BYTE FDP;FINEX < RECUPERATION DES DEFAUTS. WORD SPVI3 BYTE TRL;FINEX < PERFORATION AVANCE BANDE. WORD SPVI4 BYTE FEND;FINEX < PSEUDO-CLOSE... WORD SPNOP BYTE FNOP;FINEX < NOP... WORD SPNOP XWOR%1: VAL $-LFTTY/EFONC NFTTY: EQU ZERO+XWOR%1 PAGE < < < C O N T E X T E L E C T E U R D E C A R T E S : < < CR: EQU $ NVPCR:: VAL NVPVIS+I < NVP D'ASSIGNATION D'UN LECTEUR DE CARTES. ASCI "!ASSIGN " BYTE NVPCR=FCONV(MOCD;EGAL;"C";"R";VAR;EOT ASCI "!ASSIGN " BYTE NVPCR=FCONV(MOCD;EGAL;SAVE;EOT WORD 0 < 'IASS'. BYTE NVPCR;0 WORD BUF2;0;0 WORD NFCR < NOMBRE DE FONCTIONS CR : LFCR: EQU $ BYTE OFF;FINEX < MISE HORS-TENSION DU MOTEUR. WORD SPCR1 BYTE FIN;FR < LECTURE. WORD SPCR2 BYTE FNOP;FINEX < 'NOP'... WORD SPNOP XWOR%1: VAL $-LFCR/EFONC NFCR: EQU ZERO+XWOR%1 PAGE < < < C O N T E X T E I M P R I M A N T E : < < LP: EQU $ NVPLP:: VAL NVPCR+I < NVP D'ASSIGNATION D'UNE IMPRIMANTE. ASCI "!ASSIGN " BYTE NVPLP=FCONV(MOCD;EGAL;"L";"P";VAR;EOT ASCI "!ASSIGN " BYTE NVPLP=FCONV(MOCD;EGAL;SAVE;EOT WORD 0 < 'IASS'. BYTE NVPLP;0 WORD BUF2;0;0 WORD NFLP < NOMBRE DE FONCTIONS RECONNUES : LFLP: EQU $ BYTE PGPH;FINEX < SAUT DE PARAGRAPHE. WORD SPLP1 BYTE PAGE;FINEX < SAUT DE PAGE. WORD SPLP2 BYTE FOUT;FW < ECRITURE, WORD SPLP3 BYTE FCLOSE;FINEX < CLOSE DE L'ASSIGNATION. WORD SPLP4 XWOR%1: VAL $-LFLP/EFONC NFLP: EQU ZERO+XWOR%1 PAGE < < < C O N T E X T E B A N D E S M A G N E T I Q U E S : < < MT: EQU $ NVPMT:: VAL NVPLP+I < NVP D'ASSIGNATION DU DEROULEUR DE < BANDES MAGNETIQUES. ASCI "!ASSIGN " BYTE NVPMT=FCONV(MOCD;EGAL;"M";"T";VAR;EOT ASCI "!ASSIGN " BYTE NVPMT=FCONV(MOCD;EGAL;SAVE;EOT WORD 0 < 'IASS'. BYTE NVPMT;0 WORD BUF2;0;0 WORD NFMT < NOMBRE DE FONCTIONS RECONNUES. LFMT: EQU $ BYTE RWDU;FREW < REBOBINAGE ET LOCAL. WORD SPMT1 BYTE RWD;FREW < REBOBINAGE. WORD SPMT2 BYTE WEOF;FTM < ECRITURE D'UN TAPE-MARK WORD SPMT3 BYTE WGAP;FINEX < EFFACEMENT. WORD SPMT4 BYTE BSRCD;FINEX < SAUT ARRIERE 1 ENREGISTREMENT. WORD SPMT5 BYTE FSRCE;FINEX < SAUT AVANT 1 ENREGISTREMENT. WORD SPMT6 BYTE BSFILE;FINEX < SAUT ARRIERE TAPE-MARK. WORD SPMT7 BYTE FSFILE;FR < SAUT AVANT TAPE-MARK. WORD SPMTC BYTE BSRCDN;FINEX < SAUT ARRIERE N ENREGISTREMENTS. WORD SPMT9 BYTE FSRCDN;FINEX < SAUT AVANT N ENREGISTREMENTS. WORD SPMTA BYTE FOUT;FWAD < ECRITURE 1 ENREGISTREMENT, WORD SPMTB BYTE FIN;FRAD < LECTURE 1 ENREGISTREMENT. WORD SPMTC BYTE FINNUL;FRAD < IDEM A 'FIN' (!?!?!). WORD SPMTC XWOR%1: VAL $-LFMT/EFONC NFMT: EQU ZERO+XWOR%1 PAGE < < < C O N T E X T E D I S Q U E A M O V I B L E : < < DKU: EQU $ NVPDK:: VAL NVPMT+I < NVP D'ASSIGNATION DU DISQUE AMOVIBLE. NVPDKU:: VAL NVPASI?'0A < ON TRICHE AFIN QUE LE DISQUE AMOVIBLE < SOIT PARTAGEABLE... ASCI "!ASSIGN " BYTE NVPDKU=FCONV(MOCD;EGAL;"D";"K";VAR;EOT ASCI "!ASSIGN " BYTE NVPDKU=FCONV(MOCD;EGAL;SAVE;EOT WORD 0 < 'IASS'. BYTE NVPDKU;0 WORD BUF2;0;0 WORD NFDK < NOMBRE DE FONCTIONS RECONNUES. LFDK: EQU $ BYTE ROU;FINEX < READ ONLY UNIT. WORD SPDK1 BYTE RWU;FINEX < READ AND WRITE. WORD SPDK2 BYTE MVHD;FINEX < MOUVEMENT DE LA TETE. WORD SPDK3 BYTE FOUT;FWQ1 < ECRITURE, WORD SPDK4 BYTE FIN;FRQ1 < LECTURE. WORD SPDK5 BYTE FOUTDK;FWQ1 < ECRITURE, WORD SPDK4 BYTE FOUTDV;FWQ1 < ECRITURE, WORD SPDK4 BYTE FINDK;FRQ1 < LECTURE. WORD SPDK5 XWOR%1: VAL $-LFDK/EFONC NFDK: EQU ZERO+XWOR%1 PAGE < < < C O N T E X T E G P I 3 2 : < < GPI: EQU $ NVPGPI:: VAL NVPDK+I < NVP D'ASSIGNATION D'UN GPI32. ASCI "!ASSIGN " BYTE NVPGPI=FCONV(MOCD;EGAL;"C";"U";VAR;EOT ASCI "!ASSIGN " BYTE NVPGPI=FCONV(MOCD;EGAL;SAVE;EOT WORD 0 < 'IASS'. BYTE NVPGPI;0 WORD BUF2;0;0 WORD NFGPI < NOMBRE DE FONCTIONS GPI : LFGPI: EQU $ BYTE FOUT;FWCAN < ECRITURE EN MODE CANAL, WORD SPCU1 BYTE FCLOSE;FINEX < CLOSE DE L'ASSIGNATION. WORD SPCU2 XWOR%1: VAL $-LFGPI/EFONC NFGPI: EQU ZERO+XWOR%1 PAGE < < < F I N D E S C O N T E X T E S : < < NVPF:: VAL NVPGPI+I < PREMIER 'NVP' INEXISTANT... PAGE < < < P S E U D O - C O N T E X T E I M A G E : < < CIMAGE: EQU $ ASCI "!ASSIGN N=IMAD" ASCI "!ASSIGN N=SD" < 2 FAUSSES CARTES "!ASSIGN"... WORD 0 BYTE NVPDKU;FTVDKU < DEMANDE D'ACCES AUX IMAGES. WORD BUF2;0;0 WORD NFIMAG LFIMAG: EQU $ < LISTE DES FONCTIONS RECONNUES : XIN:: VAL '40 < MODE : 'TVMEM' --> PROGRAMME, XOUT:: VAL '00 < MODE : PROGRAMME --> 'TVMEM'. XPR:: VAL 1 < PROCESSEUR ROUGE, XPV:: VAL 2 < PROCESSEUR VERT, XPB:: VAL 3 < PROCESSEUR BLEU. BYTE READIM;FTVDKU < TRANSFERT : 'TVMEM' --> 'BOS'. WORD SPIM1 BYTE READIN;FTVDKU < IDEM... WORD SPIM1 BYTE WRITIM;FTVDKU < TRANSFERT : 'BOS' --> 'TVMEM'. WORD SPIM2 BYTE WRITIN;FTVDKU < IDEM... WORD SPIM2 BYTE FEND;FINEX < FONCTION DE CLOSE... WORD SPNOP XWOR%1: VAL $-LFIMAG/EFONC NFIMAG: EQU ZERO+XWOR%1 < NOMBRE DE FONCTIONS IMAGES RECONNUES. PAGE < < < P S E U D O - C O N T E X T E ' S G N ' : < < CSGN: EQU $ ASCI "!ASSIGN N=SGND" ASCI "!ASSIGN N=SD" < 2 FAUSSES CARTES "!ASSIGN"... WORD 0 FONSGN:: VAL '02 < FONCTION GENERALE 'SGN'... BYTE 0;FONSGN < POUR LE 'SGN', C'EST LE 'NVP', ET NON < PAS LA FONCTION QUI EST VARIABLE... WORD BUF2;0;0 WORD NFSGN LFSGN: EQU $ < LISTE DES FONCTIONS 'SGN' : BYTE FVSTN;FONSTN < STORE VALEUR 'SGN', WORD SPSGN1 BYTE FVLON;FONLON < LOAD VALEUR 'SGN', WORD SPSGN2 BYTE FVDLN;FONDLN < DELETE VALEUR 'SGN', WORD SPSGN3 BYTE FVSTNI;FONSTN < STORE 'SGN' DE L'IMAGE COURANTE, WORD SPSGN8 BYTE FVLONI;FONLON < VISUALISATION DE LA VALEUR 'SGN' COURANTE WORD SPSGN9 BYTE FNSTN;FONSTN < DEFINITION DU NOM COURANT, WORD SPSGN4 BYTE FNLON;FONLON < RECUPERATION DU NOM COURANT, WORD SPSGN5 BYTE FNDLN;FONDLN < DESTRUCTION DU NOM COURANT. WORD SPSGN6 BYTE FNNEXT;FONNXP?FONNXS WORD SPSGN7 < RECHERCHE DU NOM SUIVANT. XWOR%1: VAL $-LFSGN/EFONC NFSGN: EQU ZERO+XWOR%1 < NOMBRE DE FONCTIONS 'SGN' RECONNUES. PAGE < < < L I S T E D E S C O R R E S P O N D A N C E S < F U --> C M S 5 : < < LFUCON: EQU $ FUINEX:: VAL 0 < INDICATEUR D'INEXISTENCE... FUNUTI:: VAL -1 < INDICATEUR D'IMPOSSIBILITE D'UTILISATION. WORD FUINEX < 00 WORD VIS < 01 WORD VIS < 02 WORD VIS < 03 WORD VIS < 04 WORD FUINEX < 05 WORD FUINEX < 06 WORD CR < 07 WORD LP < 08 WORD MT < 09 WORD FUINEX < 0A WORD FUINEX < 0B WORD FUINEX < 0C WORD DKU < 0D WORD DKU < 0E WORD DKU < 0F WORD DKU < 10 WORD DKU < 11 WORD DKU < 12 WORD DKU < 13 WORD DKU < 14 WORD CIMAGE < 15 WORD GPI < 16 WORD CSGN < 17 WORD FUINEX < 18 WORD FUINEX < 19 WORD FUINEX < 1A WORD FUINEX < 1B WORD FUINEX < 1C AFUCOM: WORD VIS < 1D AFUGR: WORD VIS < 1E AFUTV: WORD VIS < 1F WORD FUNUTI < 20 WORD FUNUTI < 21 WORD FUNUTI < 22 WORD FUNUTI < 23 WORD DKU < 24 WORD DKU < 25 WORD DKU < 26 WORD DKU < 27 WORD DKU < 28 WORD DKU < 29 WORD DKU < 2A WORD DKU < 2B WORD DKU < 2C WORD DKU < 2D WORD DKU < 2E WORD DKU < 2F WORD DKU < 30 WORD DKU < 31 WORD DKU < 32 WORD DKU < 33 WORD DKU < 34 WORD DKU < 35 WORD DKU < 36 WORD DKU < 37 WORD DKU < 38 WORD DKU < 39 XNFU:: VAL $-LFUCON < PREMIERE 'FU' INEXISTANTE... FUGR:: VAL AFUGR-LFUCON < 'FU' SPECIALE GRAPHIQUE VISU, FUTV:: VAL AFUTV-LFUCON < 'FU' SPECIALE GRAPHIQUE TV. FUCOM:: VAL AFUCOM-LFUCON < 'FU' SPECIALE ENVOI CARTES CMS5 "!...". PAGE < < < F O R M A T D E S A R G U M E N T S G R A P H I Q U E S : < < DSEC < < SORTIE GRAPHIQUE SUR VISU : < GVIS: EQU $ VALG:: VAL 'FFFF < DONNEE D'ENCADREMENT DES ORDRES GRAPHI- < QUES POUR LES DISTINGUER DE L'ALPHA... VALRAZ:: VAL 'FFFE < ET CELLE-LA PROVOQUE L'EFFACEMENT DE < L'ECRAN DE LA VISU OU DE LA TV EN FIN < DE BUFFER... VISV1: WORD VALG < VALIDATION 1. VISSEG:: VAL $-GVIS < DEBUT DE LA ZONE A TRANSMETTRE A CMS5. VISY1: WORD 0 < Y1 (VECTEUR ARGUMENT), VISX1: WORD 0 < X1, VISY2: WORD 0 < Y2, VISX2: WORD 0 < X2. LVSEG:: VAL $-GVIS-VISSEG*NOCMO < LONGUEUR DE LA ZONE A TRANSMETTRE A CMS5. VISV2: WORD VALG < VALIDATION 2. LGVIS:: VAL $-GVIS*NOCMO < < SORTIE GRAPHIQUE SUR TV : < DSEC GTV: EQU $ TVSEG:: VAL $-GTV < DEBUT DE LA ZONE A TRANSMETTRE A CMS5. TVLCO: WORD 0 < MOT D'INHIBITION DES COULEURS (ET POUR < LE BLOC FLOTTANT EN TEMPORAIRE...) TVCOM: WORD 0 < MOT DE COMMANDE (MODE ET COULEURS). TVY1: WORD 0 < Y1 (VECTEUR RESULTAT), TVX1: WORD 0 < X1, TVY2: WORD 0 < Y2, TVX2: WORD 0 < X2. TVGY1: WORD 0 < Y1 (VECTEUR ARGUMENT), TVGX1: WORD 0 < X1, TVGY2: WORD 0 < Y2, TVGX2: WORD 0 < X2. LVTV:: VAL $-GTV-TVSEG*NOCMO < LONGUEUR DE LA ZONE A TRANSMETTRE A CMS5. TVV2: WORD VALG < VALIDATION 2. LGTV:: VAL $-GTV*NOCMO PROG PAGE < < < L O C A L : < < LOCAL LOC: EQU $ < < CONSTANTES : < KIN: WORD -1 < COMPTAGE DES ENTREES... XT800:: VAL '0800 < 1K, XT1000:: VAL '1000 < 2K, XT0:: VAL XT1000 < INITIALISATION... T0: WORD XT0 < REINITIALISATION... T800: WORD XT800 < 1K MOTS, T1000: WORD XT1000 < 2K MOTS. ETAT: WORD 0 < CONDITIONS DE RETOUR DES MODULES < SPECIFIQUES. ETATSV: WORD 0 < CODE D RETOUR DES 'SVC'. TRCDA: WORD 0 < CONSTANTE DE TRANSLATION DE L'ADRESSE < DE DEBUT DE LA 'CDA'... BTRANS: WORD 0 < POUR TRANSLATER L'ADRESSE DE 'BUF' < A CAUSE DES VALEURS 'SGN' QUI SONT < PRECEDEES D'UN NOM... RECOUV: WORD 0 < 0 : PAS DE RECOUVREMENT AVEC 'BOS', < 1 : RECOUVREMENT (AVANT SYNCHRO 'BOS'), < -1: RECOUVREMENT (APRES SYNCHRO 'BOS'). RECOUW: WORD 0 < POUR INITIALISER 'RECOUV' EN FONCTION < DE LA REPONSE AU MESSAGE 'M14'... FUCOUR: WORD 0 < NUMERO DE LA 'FU' COURANTE. < < CARTES CONTROLES AU 'CCI' : < ASSVIO: ASCI "!ASSIGN " BYTE NVPVIS=FCONV(MOCD;EGAL;"O";EOT CLOSE: ASCI "!CLOSE" BYTE EOT;0 CDAC: ASCI "!CDA" BYTE EOT;0 CDAG: ASCI "!CDA" BYTE "G";EOT L0: ASCI "!L" BYTE "0";EOT L1: ASCI "!L" BYTE "1";EOT QC000: ASCI "!QFF" CQC000: ASCI "C0" AQC000: ASCI "+0" BYTE EOT;0 XQC0: WORD "C0" < POUR AVOIR LES 2/3 DE DKU, XQFE: WORD "FE" < ET POUR PRESQUE TOUT DKU... < < MESSAGES DIVERS : < RETURN:: VAL '0D < CARRIAGE-RETURN. LF: BYTE '0C;RETURN LLF:: VAL $-LF*NOCMO VT: BYTE '0B;RETURN LVT:: VAL $-VT*NOCMO MNOM: BYTE 3;RCLF MNOMX: ASCI "XY" BUFIN: DZS 1 < BUFFER D'ENTREE DES COMMANDES. < < RELAIS DE SOUS-PROGRAMMES : < APRINT: WORD PRINT < EDITION D'UN MESSAGE. ACCI: WORD CCI < ACCES AU CCI INTERPRETATIF. AEXEC: WORD EXEC < EXECUTION D'UN 'SVC'. ASERV: WORD SERV < ENVOI D'UN SERVICE SIMPLE... ASPFON: WORD SPFON < PLACEMENT DUNE FONCTION DANS UNE DEMANDE. ASPMET: WORD SPMEMT < ALLOCATION MEMOIRE SEULE... ASPMEM: WORD SPMEM < ALLOCATION ET AJUSTEMENT MEMOIRE ET < REMISE A "SPACE" DU BUFFER... ASPME0: WORD SPMEM0 < MINIMISATION A 1K MOTS DE L'ESPACE... ARCDA: WORD RCDA < MOUVEMENT CDA-->BUFFER, AWCDA: WORD WCDA < MOUVEMENT BUFFER-->CDA. ASP: WORD 0 < ADRESSE DU MODULE SPECIFIQUE COURANT... AGBOX: WORD GBOX < RECUPERATION DE LA 'BOX' D'UNE DEMANDE. APCLOS: WORD PCLOSE < FERMETURE D'UNE ASSIGNATION. AWRITR: WORD WRITER < ECRITURE QUELCONQUE... ATESMT: WORD TESTMT < RELAI VERS LA MISE A JOUR DE L'ADRESSE < COURANTE POUR 'MT'... AREAD: WORD READ < LECTURE QUELCONQUE... AREADP: WORD READP < LECTURE QUELCONQUE AVEC CALCUL DE LA < PARITE DES CARACTERES. AREADF: WORD READF < LECTURE DE CARACTERES AVEC TEST DE FIN < SUR BUFFER PLEIN DE "SPACE", ET REGE- < NERATION DE LA PARITE... AREADO: WORD READO < LECTURE AVEC ECLATEMENT (GPI32-BENSON). ACODAR: WORD CODAR < GESTION DES ENTREES SUR CODE D'ARRET. ATRANS: WORD TRANS < TRANSLATION DE L'ADRESSE DE DEBUT DE 'CDA SENBOS: WORD SIMUM1 < POUR ENVOI 1 COUP/4 COUPS A 'BOS'... ASIMUB: WORD SIMULB < RELAI... < < DEMANDES A CMS5 : < DEMCDA: WORD '0005 < DEMANDE DE SYNCHRONISATION SUR WORD 0 < LES WORD 0 < VALEURS POSITIVES DE 'VCDA'. DEMIN: BYTE NVPIN;FRE < ENTREE D'UN CARACTERE... WORD BUFIN-ZERO*NOCMO WORD 1 DEMOUT: BYTE NVPOUT;FW < EDITION D'UN MESSAGE VARIABLE... WORD 0;0 DEMCCI: BYTE NVPIMM;'01 < ACCES AU CCI. DEMAS: BYTE NVPIMM;'02 < ENVOI D'UNE CARTE CONTROLE. WORD 0 WORD LCARTE DEMMEM: BYTE NVPIMM;'04 < AJUSTEMENT DE LA TAILLE MEMOIRE. WORD 0 WORD XT0 < INITIALISATION... DEMTEM: BYTE NVPIMM;'05 < TEMPORISATION... WORD 0 WORD 1 < DE 1 SECONDE... DEMLF: BYTE NVPLP;FW < POUR FAIRE UN SAUT DE PAGE. WORD LF-ZERO*NOCMO WORD LLF DEMVT: BYTE NVPLP;FW < POUR FAIRE UN SAUT DE PARAGRAPHE. WORD VT-ZERO*NOCMO WORD LVT OG: BYTE NVPVIS;'03 < MISE EN GRAPHIQUE DE LA VISU, CG: BYTE NVPVIS;'04 < RETOUR EN ALPHA-NUMERIQUE, ERASE: BYTE NVPVIS;'05 < EFFACEMENT DE L'ECRAN, WG: BYTE NVPVIS;'0A < ECRITURE GRAPHIQUE D'UN SEGMENT. WORD BUFVIS WORD LVSEG ABUFVI: WORD BUFVIS < POUR REINITIALISER WG+DEM1... WGTV: BYTE NVPDKU;FTVDKU < ECRITURE TV D'UN SEGMENT. WORD BUFTV WORD LVTV WORD K SGN: BYTE '86;FW < POUR LES ACCES AU SGN. WORD NOM2 WORD LIMAG*NCOOL+LNOM*NOCMO WORD LNOM*NOCMO DEMTV: BYTE NVPDKU;FTVDKU < DEMANDE D'ENVOI D'UNE IMAGE DE 'TV' < EN MODE ENTRELACE. WORD IMAGE2 ALIMA3: WORD LIMAG*NOCMO*NCOOL WORD 0 < < RELAIS DE TABLES : < LXCDA:: VAL BUFCDA-CDA < LONGUEUR DE L'EN-TETE DE 'CDA'. XCDA: DZS LXCDA < DUPLICATION DE L'EN-TETE DE 'CDA'. AXCDA: WORD XCDA XWOR%1: VAL TCODAR-CDA ATCODA: WORD XCDA+XWOR%1,X < RELAI D'ACCES A LA LISTE DES CODES < D'ARRET. ABUF: WORD BUF < ADRESSE MOT DU BUFFER, ABUF2: WORD BUF2 < ET SON ADRESSE OCTET. ABUFX: WORD BUF,X < RELAI INDEXE VERS LE BUFFER. ABUFX1: WORD BUF-I,X < IDEM POUR 'JDX'... ALFUCO: WORD LFUCON,X < ACCES AUX ASSOCIATIONS 'FU' DE BOS --> < CONTEXTES DE CMS5... ALCON: WORD LCON,X < LISTE DES CONTEXTES : LCON: EQU $-I WORD VIS WORD CR WORD LP WORD MT WORD DKU WORD GPI < < ENVOI DE COMMANDES PRE-PROGRAMMEES : < XLIM:: VAL 2+1 < INDEX DU LIMITEUR JOUANT LE ROLE DU < CARACTERE "EOT", < 2 : POUR <R/C><LF>, < 1 : POUR LE 'SPACE' SUIVANT. XPE:: VAL XLIM+I < INDEX DU "!" DU 'CCI', KPE:: VAL "!" < CARACTERE DU 'CCI'. XM:: VAL XPE+I < INDEX DU "M" DE "!M" DU 'CCI'. KM:: VAL "M" LIMIT: WORD 0 < CARACTERE JOUANT LE ROLE DE "EOT". CCINT: WORD '0002 < FONCTION D'ENVOI PAR 'BOS' D'UNE COMMAN- < DE PRE-PROGRAMMEE "!M...". WORD BUF2+XPE WORD LCARTE < < POUR L'EXTENSION D'ADRESSAGE 'DKU' : < BLKC: WORD 0 < NUMERO DU GROUPE DE '10000 SECTEURS ; < CE NUMERO NE PEUT VALOIR QUE 0 OU 1, < CAR ON ATTRIBUE 250 (='FA) CYLINDRES < CE QUI FAIT 10 GROUPES (DE 25) : < 'FA*20*24='1D4C0 SECTEURS<'20000... < < DONNEES D'INITIALISATION DU GRAPHWARE : < IBUF:: VAL 'FFFF < DONNEE ATTENDUE 'LGRAPH' FOIS DANS LE < BUFFER POUR SIGNIFIER UNE DEMANDE < D'INITIALISATION... IGRAPH: WORD 'BFFF;'BF1F;'BFFF;'BF17 LGRAPH:: VAL $-IGRAPH < NOMBRE DE DONNEES D'INITIALISATION... < < DONNEES DE NETTOYAGE DE L'ECRAN TV : < NOIR: ASCI "M-NOIR" BYTE EOT;0 LNOIR:: VAL $-NOIR < < DONNEES D'ENTREE GRAPHIQUE : < CU: BYTE NVPVIS;'06 < PUIS ACTIVATION DU CURSEUR, WORD 0 < ET VOILA, CELA MARCHE MIEUX AVEC CE < 'WORD 0' ; MAIS CE BUG AURA PERMIS DE < PLANTER LE SYSTEME... ET DE TROUVER < AINSI CERTAINEMENT LA PLUS ANCIENNE < ERREUR SYSTEME !!! LCU:: VAL '09 < FONCTION DE LECTURE GRAPHIQUE. < < DEFINITION DU NOM 'SGN' COURANT : < LSGN:: VAL 38 < NOMBRE D'OCTETS MAX AUTORISES... NOMSGN: EQU $ BYTE EOT;0 < DEPART SUR LE NOM VIDE... DZS LSGN/NOCMO-1 < NOM 'SGN' COURANT, QUE L'ON PEUT CREER < DETRUIRE OU LIRE PAR LES FONCTIONS < DU TYPE 'FN...'. BYTE EOT;0 < FIN DE NOM A PRIORI... DELTA:: VAL $-NOMSGN < DISTANCE NOM-VALEUR... RAZNOM: WORD NOMSGN < POUR DETRUIRE LE NOM... ANOMS1: WORD NOMSGN-I,X < RELAI POUR 'JDX', ANOMS0: WORD NOMSGN,X < ET POUR UN ACCES EN OCTETS... ASGN1: WORD SGN1 < S/P DE PERMUTATION DE LA FONCTION ET < DU 'NVP' DU 'SGN', CAR EN EFFET LE < PSEUDO-CONTEXTE DU 'SGN' DONNE DES 'NVP' < ET NOM PAS DES FONCTIONS... ASGN2: WORD SGN2 < MOUVEMENT : BUFFER --> NOM, ASGN3: WORD SGN3 < MOUVEMENT : BUFFER <-- NOM. ASGN4: WORD SGN4 < ENVOI DE 'NXP'/'NXS' AU SGN... ASGN5: WORD SGN5 < MISE A JOUR DE 'DEM2', PUIS 'GBOX'... ASPIM1: WORD SPIM1 < TRANSFERT : 'MEMTV' --> 'CDA', ASPIM2: WORD SPIMS < TRANSFERT : 'CDA' --> 'MEMTV'. APSGN1: WORD SPSGN1 < STORE VALEUR 'SGN', APSGN2: WORD SPSGN2 < LOAD VALEUR 'SGN'. XRAC: WORD 0 < MEMORISATION DE L'INDEX INITIAL. SXRAC: WORD 0 < SAVE LE (X) INITIAL. LMAX: WORD LSGN+1 < NOMBRE MAX DE CARACTERES A EXPLORER. < (+1 A CAUSE DE 'EOT') < < TRANSFERTS : 'BOS' <--> 'TVMEM' : < ALIMAG: WORD LIMAG*NOCMO < LONGUEUR D'UNE COMPOSANTE. AIMA1: WORD IMA1 < TRANSFERT GLOBAL : 'TVMEM' --> PROGRAMME. AIMA2: WORD IMA2 < MISE A JOUR DE 'DEMPER' ET ENVOI... AIMA3: WORD IMA3 < VALIDATION DE (IOCB2) ET (IOCB5). < < PILE : < STACK: EQU $-1 DZS 40 PROG USE W,CONTEX PAGE < < < A C C E S C C I I N T E R P R E T A T I F : < < < ARGUMENT : < A=ADRESSE D'UNE CARTE A INTERPRETER. < < CCI: EQU $ PSR A,X SLLS NOCMO=K STA DEMAS+DEM1 < MISE EN PLCE DE L'ADRESSE OCTET, LAD DEMAS SVC 0 < ET ENVOI DE LA CARTE... PLR A,X RSR < ON PEUT TESTER 'JE'/'JNE' AU RETOUR... PAGE < < < E X E C U T I O N D ' U N ' S V C ' : < < < ARGUMENT : < A=ADRESSE DE LA DEMANDE A CMS5. < W=ADRESSE DU CONTEXTE COURANT. < < EXEC: EQU $ PSR A,X < < SERVICE PROPREMENT DIT : < SVC 0 < EXECUTION DE LA DEMANDE, STX ETATSV < MEMORISATION DES CONDITIONS DE RETOUR... < < ASSIGNATION IMPLICITE EVENTUELLE : < LR X,A CPI '81 < LE CODE D'ERREUR (EVENTUELLEMENT NUL) < EST-IL CELUI DU 'NVP' NON ASSIGNE ??? JNE EXEC1 < NON, ON SORT... LAD ASSIGN < OUI, BSR ACCI < ON TENTE UN "!ASSIGN..." IMPLICITE... JNE EXEC1 < ON SORT, CAR IL EST REFUSE... STZ IASS IC IASS < (ON MEMORISE L'ASSIGNATION...) STZ DEMPER+DEM3 < ON RAZE 'DEM3', EN PARTICULIER A CAUSE < DE 'MT' QUI TRAVAILLE EN ACCES DIRECT. PLR A,X < S'IL EST ACCEPTE, JMP EXEC < ON RETENTE LE SERVICE... < < SORTIE : < EXEC1: EQU $ CPZR X < POUR LES TESTS EN RETOUR... PLR A,X RSR < ON PEUT TESTER 'JE'/'JNE' AU RETOUR... PAGE < < < R E N V O I D E L A ' B O X ' : < < < FONCTION : < PLACE DANS 'IOCB2' DE LA 'CDA' < LA 'BOX' DE LA DEMANDE COURANTE, < CE QUI DONNE EN FAIT LE NOMBRE < D'OCTETS REELLEMENT LUS. < < GBOX: EQU $ PSR A,B LA DEMPER+DEM2 STA ETAT < A PRIORI... ACTD BOX < B=(BOX), LR B,A CP DEMPER+DEM2 < ON VA CALCULER MIN(DEM2,BOX), A CAUSE < DU 'SGN' QUI RENVOIE TOUJOURS LA LON- < GUEUR TOTALE DE LA VALEUR... JGE GBOX1 < MIN(DEM2,BOX)=DEM2... STB ETAT < QUE L'ON RENVOIE DANS 'ETAT'... STB DEMPER+DEM2 < POUR LES CODES D'ARRET SUR LA VISU... < (PREND AINSI 'EOT' ET 'RC' COMME DES < CODES D'ARRET IMPLICITES...) GBOX1: EQU $ PLR A,B RSR PAGE < < < G E S T I O N D E S C O D E S D ' A R R E T : < < < FONCTION : < CE MODULE SI L'ENTREE EST SUR < CODE D'ARRET BALAYE LE BUFFER A < LA RECHERCHE D'UN CODE D'ARRET < FIGURANT DANS LA LISTE 'TCODAR'... < < CODAR: EQU $ PSR A,B,X LA XCDA+XIOCB TBT BCODAR < EST-CE UNE ENTREE SUR CODE D'ARRET ??? JNC CODAR1 < NON... LXI 0 < OUI, INITIALISATION DE L'INDEX... CODAR2: EQU $ LBY &ABUFX < A=CARACTERE COURANT, RBT BITPAR < ON ENLEVE LA PARITE, LR A,B < (B)=CARACTERE COURANT SANS PARITE, PSR X LXI 0 < (X)=INDEX DES CODES D'ARRET, CODAR4: EQU $ LBY &ATCODA RBT BITPAR < (A)=CODE D'ARRET COURANT, JAE CODAR5 < ET BIEN C'EST LA FIN DE LISTE : LE < CARACTERE COURANT (B) N'EST PAS UN < CODE D'ARRET... CPR A,B < EST-CE UN CODE D'ARRET ??? JE CODAR6 < OUI, ON S'ARRETE LA... ADRI I,X < NON, AU CODE D'ARRET SUIVANT... JMP CODAR4 CODAR5: EQU $ PLR X ADRI I,X < AU CARACTERE SUIVANT DU BUFFER, LR X,A CP DEMPER+DEM2 < S'IL EXISTE ??? JL CODAR2 < OUI... LAI COSBT?BITPAR=FMASK(0?RC=FCINST STBY &ABUFX < NON, ON MET A PRIORI UN R/C AU BOUT... ADRI -I,X CODAR3: EQU $ ADRI I,X STX ETAT < ETAT=NOMBRE D'OCTETS, Y COMPRIS LE < CODE D'ARRET S'IL EST LA... STX DEMPER+DEM2 < AU CAS OU IL S'AGIRAIT D'UNE SORTIE... CODAR1: EQU $ PLR A,B,X RSR CODAR6: EQU $ < CAS D'UN CODE D'ARRET RENCONTRE... PLR X JMP CODAR3 < VERS LE CALCUL DU COMPTE D'OCTETS... PAGE < < < E D I T I O N D ' U N M E S S A G E : < < < ARGUMENT : < A=ADRESSE DU MESSAGE. < < PRINT: EQU $ PSR A,X,W LR A,W < W=ADRESSE DU MESSAGE, ADR A,A ADRI I,A STA DEMOUT+DEM1 < ADRESSE-OCTET DU MESSAGE, LBY 0,W STA DEMOUT+DEM2 < LONGUEUR-OCTET DU MESSAGE. LAD DEMOUT SVC 0 < EDITION DU MESSAGE... PLR A,X,W RSR PAGE < < < I N S E R T I O N F O N C T I O N : < < < ARGUMENT : < A=FONCTION A INSERER DANS LA 'DEMPER' COURANTE. < < SPFON: EQU $ PSR A,B LR A,B LAI MNVP AND DEMPER < RECUPERATION DU 'NVP', ORR B,A < CONCATENATION DE LA FONCTION, STA DEMPER < ET MISE A JOUR DE LA DEMANDE... PLR A,B RSR PAGE < < < A L L O C A T I O N E T A J U S T E M E N T < E S P A C E M E M O I R E : < < < ARGUMENT : < X=NOMBRE D'OCTETS DE L'ECHANGE COURANT, < ET DONC LONGUEUR MINIMALE NECESSAIRE < AU BUFFER 'BUF'. < < SPMEM0: EQU $ PSR A,B,X,Y LY T0 < Y=LE MINIMUM... JMP SPMEM1 SPMEM: EQU $ BSR ASPMET < ALLOCATION MEMOIRE... < < CLEAR DU BUFFER : < PSR A,X,Y LR X,A < A=LONGUEUR D'ARRET, TBT NBITMO-I < LA LONGUEUR EST-ELLE IMPAIRE ??? ADCR A < SI OUI, ON LA REND PAIRE AFIN DE NET- < TOYER UN NOMBRE ENTIER DE MOTS (PROBLEME < A CAUSE DU 'MT1'...). LR A,Y < (Y)=LONGUEUR D'ARRET, LXI 0 < X=INDEX DE CLEAR, LAI COSBT?BITPAR=FMASK(0?" "=FCINST SPMEM4: EQU $ STBY &ABUFX < MISE A "SPACE" DU BUFFER... ADRI I,X < AU CARACTERE SUIVANT, CPR Y,X < S'IL EXISTE... JL SPMEM4 < OUI... LAI COSBT?BITPAR=FMASK(0?RC=FCINST STBY &ABUFX PLR A,X,Y RSR < < < A L L O C A T I O N S E U L E : < < SPMEMT: EQU $ PSR A,B,X,Y LR X,A ADRI NOCMO-I+'20+2,A < +'20 A CAUSE DE L'EN-TETE... < ET +2, PARCEQU'ON RAJOUTE UN R/C A < PRIORI AU BOUT DU BUFFER... AD ABUF2 < A=TAILLE MEMOIRE EN OCTETS NECESSAIRE < AU BON DEROULEMENT DE L'ECHANGE. LY T800 < Y=1K MOTS A PRIORI... CP T800 < CELA SUFFIT-IL ??? JLE SPMEM1 < OUI... LY T1000 < NON, Y=2K MOTS... LXI 8 < AFIN D'ESSAYER 8 TAILLES POSSIBLES. SPMEM2: EQU $ CPR Y,A < LA TAILLE (Y) SUFFIT-ELLE ??? JLE SPMEM1 < OUI, OK... XR A,Y AD T1000 < NON, ON ALLONGE... XR A,Y JDX SPMEM2 < A LA TAILLE SUIVANTE... LAI M2-ZERO BSR APRINT < BIZARRE !???!? QUIT 1 SPMEM1: EQU $ LR Y,A CP DEMMEM+DEM2 < LA TAILLE DEMANDEE (Y) N'EST-ELLE < PAS DEJA POSEDEE ??? JE SPMEM3 < OUI, RIEN A FAIRE... STA DEMMEM+DEM2 < NON, LAD DEMMEM SVC 0 < ON LA DEMANDE, JE SPMEM3 < ET ON L'A EU... LAI M3-ZERO BSR APRINT < BIZARRE ?!??! QUIT 1 SPMEM3: EQU $ PLR A,B,X,Y RSR PAGE < < < T R A N S L A T I O N D E L A ' C D A ' < E T D U B U F F E R : < < < ARGUMENT : < A=ADRESSE RELATIVE DANS LA 'CDA', < B=ADRESSE DU BUFFER. < < < RESULTAT : < A=ADRESSE RELATIVE TRANSLATEE DANS LA 'CDA', < B=ADRESSE TRANSLATEE DU BUFFER. < < TRANS: EQU $ AD TRCDA < TRANSLATION DE LA 'CDA', XR A,B AD BTRANS < PUIS DU BUFFER... XR A,B RSR PAGE < < < S I M U L A T I O N D ' U N E E C R I T U R E : < ( C D A --> B U F F E R ) < < < ARGUMENT : < X=NOMBRE D'OCTETS A TRANSFERER. < < RCDA: EQU $ PSR A,B,X,Y LR X,A LR X,Y < ET SAVE DANS 'Y'... ADRI NOCMO-I,A SLRS NOCMO=K LR A,X < X=NOMBRE DE MOTS A DEPLACER, LA XCDA+XIOCB+IOCB1 < (A)=ADRESSE RELATIVE EN 'CDA'... LB ABUF < B=ADRESSE DU RECEPTEUR, BSR ATRANS < TRANSLATION DE LA 'CDA'... RCDA < ET SIMULATION DE L'ECRITURE... LR Y,A < (Y)=(A)=NOMBRE D'OCTETS NECESSAIRES, TBT NBITMO-I < PAIR OU IMPAIR ??? JNC RCDA1 < PAIR, DONC LE 'RCDA' FUT BON... LR Y,X < IMPAIR, DONC UN OCTET DE TROP A ETE < TRANSFERE... LAI COSBT?BITPAR=FMASK(0?" "=FCINST STBY &ABUFX < ON EFFACE CET OCTET EN TROP... RCDA1: EQU $ PLR A,B,X,Y RSR PAGE < < < S I M U L A T I O N D ' U N E L E C T U R E : < ( B U F F E R --> C D A ) < < < ARGUMENT : < X=NOMBRE D'OCTETS A DEPLACER. < < WCDA: EQU $ PSR A,B,X LR X,A ADRI NOCMO-I,A SLRS NOCMO=K LR A,X < X=NOMBRE DE MOTS A DEPLACER, LA XCDA+XIOCB+IOCB1 < (A)=ADRESSE RELATIVE EN 'CDA'... LB ABUF < B=ADRESSE DE L'EMETTEUR, BSR ATRANS < TRANSLATION DE LA 'CDA'... WCDA < ET SIMULATION DE LA LECTURE... PLR A,B,X RSR PAGE < < < M O D U L E D E S I M U L A T I O N < D E S E N T R E E S - S O R T I E S < D E B O S - D : < < SIMUL: EQU $ LRM L,K WORD LOC+'80 WORD STACK STZ BTRANS < CLEAR A PRIORI DES TRANSLATIONS DU STZ TRCDA < BUFFER ET DE LA 'CDA'... LAI M8-ZERO BSR APRINT IC KIN < COMPTAGE DES ENTRIES : JE SIMUL1 < CAS DE LA PREMIERE... SIMUM2: EQU $ LAI M13-ZERO BSR APRINT < "CMS" OU "BOS" ??? LAD DEMIN BSR AEXEC LBY BUFIN < A=REPONSE : COUP1:: VAL -1 < BREAK 1 COUP, COUP4:: VAL -4 < BREAK 4 COUPS. ADRI -"0",A < QUE L'ON DECODE, NGR A,A JAE SIMUM3 < C'EST UN RETOUR A "CMS"... CPI COUP1 < NON, JE SIMUM4 < C'EST UN RETOUR A "BOS" 1 COUP... CPI COUP4 < EST-CE LE RETOUR A "BOS" 4 COUPS ??? JNE SIMUM2 < NON ?!???! < < RETOUR AU "BOS"-U (???) 1 COUP OU 4 COUPS : < SIMUM4: EQU $ STZ ETAT < RETOUR A "BOS" : STA XCDA+XSCDA < ON MET DANS 'XSCDA' UN CODE DISCRIMINANT < 1 COUP OU 4 COUPS... ERBREK:: VAL '7D+I < CODE D'ERREUR DU BREAK (1 DE PLUS QUE < POUR LE ALT-MODE)... LAI ERBREK < CODE D'ERREUR A ENVOYER A BOS... BR SENBOS < ET ON VA LUI ENVOYER... < < RETOUR A "CMS5" LE MAGNIFIQUE : < SIMUM3: EQU $ LAI M9-ZERO BSR APRINT LAD L0 BSR ACCI < PRIORITE NORMALE... LAD DEMCCI SVC 0 < POUR LES AUTRES, ON ATTEND SOUS CCI... JMP SIMULP < VERS L'INTERROGATION... < < CAS DE LA PREMIERE FOIS : < SIMUL1: EQU $ ACTD BOX < A=NOMBRE DE MOTS DISPONIBLES, ADRI '10,A < POUR L'EN-TETE DU PROGRAMME, SLLS NOCMO=K STA DEMMEM+DEM2 < SOIT EN OCTETS... STA T0 < POUR 'SPMEM0'... LAD CLOSE BSR ACCI < ENVOI DE "!CLOSE", E101: EQU $ LAI M19-ZERO BSR APRINT LAD DEMIN BSR AEXEC LBY BUFIN < VEUT-ON TOUT LE 'DKU' ??? LB XQFE < OUI A PRIORI... CPI RC JE E100 < 'RC' ==> TOUT DKU (OU PRESQUE : "!QFFFE") CPI EOT JE E100 < 'EOT' ==> "!QFFFE"... CPI "O" JE E100 < "O" ==> "!QFFFE"... LB XQC0 < NON A PRIORI... CPI "N" JNE E101 < ???!?!?!?! E100: EQU $ STB CQC000 < COMPLETION DE LA CARTE "!Q..." QUI < DEVIENT "!QFFFE" OU "!QFFC0"... LAD QC000 BSR ACCI < APPROPRIATION DU DEBUT DE 'DKU'... LAI M15-ZERO JNE SIMUN1 < IMPOSSIBLE... LAD CDAC BSR ACCI < ET DE "!CDA" POUR LIBERER LA "CDAG"... LAD CDAG BSR ACCI < ENVOI DE "!CDAG", JE SIMUL5 < OK, ON S'EST APPROPRIE LA "CDAG"... LAI M1-ZERO SIMUN1: EQU $ BSR APRINT < ET BIEN NON, ON LE SIGNALE... LAD DEMCCI SVC 0 < ET ON ATTEND SOUS LE CCI... JMP SIMUL1 < ET ON RETENTE SUR !GO... < < PRIORITE INFERIEURE : < SIMULP: EQU $ LAD L1 BSR ACCI < PRIORITE INFERIEURE... < < INITIALISATION DE LA "CDAG" ??? < SIMUL5: EQU $ LAD ASSVIO BSR ACCI < ENVOI DE "!ASSIGN NVPVIS=O" A PRIORI... LAI M11-ZERO BSR APRINT LAD DEMIN BSR AEXEC LBY BUFIN < A=REPONSE, CPI RC JE SIMULL < 'RC' EQUIVAUT A "N"... CPI EOT JE SIMULL < 'EOT' EQUIVAUT A "N"... CPI "N" JE SIMULL < "N" : ON NE REINITIALISE PAS LA 'CDA'... CPI "O" JNE SIMUL5 < ?!??!??! STZ XCDA+XVCDA < "O" : STZ XCDA+XSCDA < ON REINITIALISE LA 'CDA'... LAI CDA-CDA LB AXCDA BSR ATRANS < TRANSLATION DE LA 'CDA'... LXI LXCDA WCDA SIMULL:: EQU $ < < RECOUVREMENT DES ECRITURES ??? < SIMULU: EQU $ STZ RECOUW < RECOUW=0 A PRIORI, PAS DE RECOUVREMENT... LAI M14-ZERO BSR APRINT < "RECOUVREMENT ?" : LAD DEMIN BSR AEXEC LBY BUFIN < A=REPONSE ("O"/"N") : CPI "N" JE SIMULV < PAS DE RECOUVREMENT (RECOUW=0)... IC RECOUW < PEUT-ETRE (RECOUW=1)... CPI "O" JNE SIMULU < ??!??!?!?! SIMULV: EQU $ < < ASSIGNATION EVENTUELLE DES PERIPHERIQUES : < LXI NVPF-NVP0-I < X=INDEX D'ACCES A LA LISTE DES < CONTEXTES : SIMUL2: EQU $ PSR X LA &ALCON LR A,W < W=ADRESSE DU CONTEXTE COURANT... LA ASSNOM STA MNOMX < RECUPERATION DE SON NOM, SIMUL3: EQU $ LAD MNOM BSR APRINT < ET ENVOI... LAD DEMIN SVC 0 < ENTREE DE LA REPONSE... LBY BUFIN < A=OCTET RENVOYE PAR L'UTILISATEUR... CPI EOT JE SIMUL4 < 'NVP' INCHANGE... CPI '0D JE SIMUL4 < 'NVP' INCHANGE... BSR APCLOS < DESASSIGNATION PRELIMINAIRE... CPI "-" < EST-CE UNE DECONNEXION ??? JE SIMUL4 < OUI, C'EST FAIT... STBY ASSNUM < ON ADMET QUE LE CARACTERE INTRODUIT < EST LE NUMERO DU PERIPHERIQUE... LAD ASSIGN BSR ACCI < TENTATIVE D'ASSIGNATION... JE SIMULK < OK... LAI M10-ZERO BSR APRINT < IMPOSSIBLE (DEJA ASSIGNE, OU BIEN < PERIPHERIQUE N'EXISTANT PAS...). JMP SIMUL3 < IMPOSSIBLE ??? SIMULK: EQU $ STZ IASS IC IASS < MEMORISATION DE L'ASSIGNATION... STZ DEMPER+DEM3 < ON RAZE 'DEM3' A CAUSE DE 'MT' QUI < TRAVAILLE EN ACCES DIRECT... BSR APCLOS < ET ON REDESASSIGNE TOUT DE SUITE ; < AINSI, LES CARTES "!ASSIGN" SONT < INITIALISEES, ET PRETES POUR LES < ASSIGNATIONS IMPLICITES... < < PASSAGE AU PERIPHERIQUE SUIVANT : < SIMUL4: EQU $ PLR X JDX SIMUL2 < AU SUIVANT... PAGE < < < B O U C L E D ' E X P L O R A T I O N : < < SIMULB: EQU $ LAD DEMCDA SVC 0 < SYNCHRONISATION SUR LES VALEURS < POSITIVES DE 'VCDA'. LAI CDA-CDA LB AXCDA BSR ATRANS < TRANSLATION DE LA 'CDA'... LXI LXCDA RCDA < LECTURE DE L'EN-TETE DE 'CDA'. CPZ XCDA+XVCDA < Y-A-T'IL UNE DEMANDE ??? JLE SIMULB < NON, ON ATTEND... < < CAS D'UNE DEMANDE DE SERVICE : < SIMULA: EQU $ CPZ XCDA+XSCDA < VALIDATION DE 'SCDA' ??? JNE SIMULB < MAUVAIS, ON RECOMMENCE LE 'RCDA'... SIMULE: EQU $ STZ ETATSV < A PRIORI... STZ ETAT < < RECHERCHE DU PERIPHERIQUE DEMANDE : < LA XCDA+XIOCB ANDI MPIOCB SLRS MPIOCB=K STA FUCOUR < MEMORISATION DE LA 'FU' COURANTE... CPI XNFU < VALIDATION : JGE SIMUN2 < ERREUR, INEXISTANTE !!! LR A,X LA &ALFUCO < (A)=ADRESSE DU CONTEXTE ASSOCIE, JAG SIMULD < OK, ON L'A TROUVE... IF FUINEX,XWOR%,XWOR%, IF ATTENTION : LE TEST PRECEDENT EST MAUVAIS !!! XWOR%: VAL 0 IF FUNUTI,XWOR%,XWOR%, IF ATTENTION : LE TEST PRECEDENT EST MAUVAIS !!! XWOR%: VAL 0 SIMUN2: EQU $ LAI M4-ZERO BSR APRINT < ?!?!?! QUIT 1 < < RETOURS EN ERREUR DU PROGRAMME DE SIMULATION : < SIMULI: EQU $ JMP SIMULJ < ET ON VA AVERTIR LE BOS... < (SALE GAFTEUR ??!??!) < < CAS OU ON A TROUVE LE PERIPHERIQUE : < SIMULD: EQU $ LR A,W < (W)=ADRESSE DU CONTEXTE ASSOCIE A LA < 'FU' COURANTE... LX NFONC < X=NOMBRE DE FONCTIONS RECONNUES SUR < LE PERIPHERIQUE COURANT. PSR W < SAVE L'ADRESSE DU CONTEXTE COURANT. ADRI TFONC-CONTEX,W < W=ADRESSE DE LA PREMIERE ENTREE DE < LA LISTE DES FONCTIONS RECONNUES. LA XCDA+XIOCB TBT BFONSP < EST-CE UNE FONCTION SPECIALE ??? JNC SIMULO < OUI... RBT BFONSP < NON, UNE E/S REELLE... RBT BCODAR < ON SUPPRIME LE CODE D'ARRET. RBT BIT5 RBT BIT6 RBT BIT7 < ?!??! SIMULO: EQU $ ANDI MFIOCB XWOR%1: VAL MFIOCB=K SLRS XWOR%1 XWOR%1: VAL -XWOR%1 LYI TYPRET>XWOR%1 ANDR A,Y < Y=FONCTION DEMANDEE PAR BOS, SANS LE < TYPE DE RETOUR. LR A,B < B=FONCTION DEMANDEE PAR BOS... SIMULG: EQU $ LA TFONC1,W ANDI MFBOS RBT BFONSP < ON RAZE LE BIT 'FONCTION SPECIALE'... SLRS MFBOS=K CPR A,B < A-T'ON TROUVE LA FONCTION DEMANDEE ??? JE SIMULH < OUI... ADRI EFONC,W < NON, JDX SIMULG < ALLONS VOIR LA SUIVANTE... PLR W PSR W LX NFONC < X=NOMBRE DE FONCTIONS RECONNUES, ADRI TFONC-CONTEX,W < W=BASE DES FONCTIONS... SIMULQ: EQU $ LA TFONC1,W ANDI MFBOS SLRS MFBOS=K < A=FONCTION BOS COURANTE, CPR A,Y < EST-CE LA FONCTION DEMANDEE ??? JE SIMULH < OUI... ADRI EFONC,W < NON, A LA SUIVANTE, JDX SIMULQ < SI ELLE EXISTE... PLR W ERINEX:: VAL ERBREK+I < ERREUR 'FONCTION INEXISTANTE'... LAI ERINEX STA ETATSV < ON LA TRANSMET... LAI M6-ZERO ERRDK: EQU $ < CAS DES ERREURS D'ADRESSAGE 'DKU'... BSR APRINT QUIT 1 < BIZARRE ???!??! < < SORTIE "BRUTALE" : < EXECER: EQU $ LAI COUP4 < ET ON SIMULE UN BREAK STA XCDA+XSCDA < 4 COUPS... LA ETATSV < (A)=CONDITIONS DE RETOUR DE CMS5, JMP SIMUM1 < VERS LA TRANSMISSION A 'BOS'... < < EXECUTION DE LA FONCTION COURANTE : < SIMULH: EQU $ STZ RECOUV < PAS DE RECOUVREMENT A PRIORI... LA TFONC2,W TBT BINDEX < ALORS FAUT-IL RECOUVRIR ??? RBT BINDEX STA ASP < MISE EN PLACE DU MODULE SPECIFIQUE. JNC SIMULT < NON... LA RECOUW STA RECOUV < OUI, ON INITIALISE AVEC 'RECOUW'... SIMULT: EQU $ LA TFONC1,W ANDI MFCMS SLRS MFCMS=K PLR W < RESTAURATION DE L'ADRESSE DU CONTEXTE < COURANT (W), BSR ASPFON < ET MISE EN PLACE DE LA FONCTION CMS, < OU BIEN DE 'FINEX'... LR A,B < (B)=FONCTION DEMANDEE... LBY DEMPER CPI NVPDKU < EST-CE LE DISQUE ??? JNE PASDKU < NON... LA XCDA+XIOCB+IOCB5 STA DEMPER+DEM3 < OUI, MISE EN PLACE DE L'ADRESSE... < (POIDS FAIBLE) LR B,A < (A)=FONCTION DEMANDEE, CPI FINEX < EST-CE LA FONCTION INEXISTANTE ??? JE PASDKU < OUI (DONC EQUIVALENT A !CLOSE)... CPI FTVDKU < EST-CE LA 'CDAI' EN FAIT ??? JE PASDKU < OUI, CE N'EST PAS LE DISQUE EN FAIT... LA XCDA+XIOCB+IOCB6 CP BLKC < EST-CE LES POIDS FORTS PRECEDENTS ??? JE PASDKU < OUI, RIEN A FAIRE... JAL ERRDKU < ??!!?!?! CPI 2 JGE ERRDKU < ??!?!?!? STA BLKC < NON, ON VA SE POSITIONNER SUR LE < GROUPE DE '10000 SECTEURS CORRESPONDANT. ADRI "0",A < CONVERSION ASCI, STA AQC000 LAI "+" STBY AQC000 LAD QC000 BSR ACCI < ET ON S'Y POSITIONNE... JNE ERRDKU < !??!?!?! PASDKU: EQU $ LX XCDA+XIOCB+IOCB2 STX DEMPER+DEM2 < X=COMPTE D'OCTETS PRESUME... < (QU'IL Y AIT CODE D'ARRET OU PAS) CPZ RECOUV < PEUT-ON RECOUVRIR LA FONCTION ??? JNE SIMULR < OUI, ON PEUT FAIRE UN RECOUVREMENT... STX ETAT < ON INITIALISE 'ETAT' SUR UN COMPTE < D'OCTETS... SIMULR: EQU $ BSR ASP < EXECUTION DE LA DEMANDE COURANTE A < L'AIDE DU MODULE SPECIFIQUE... < AVEC : X=COMPTE D'OCTETS PRESUME... CPZ RECOUV < Y-A-T'IL RECOUVREMENT ??? JNE SIMUO1 < OUI, PAS DE TEST EN RETOUR... CPZ ETATSV < NON, DONC COMMENT CELA S'EST-IL PASSE ??? JNE EXECER < MAL, ON ABORTE !!! SIMUO1: EQU $ LA RECOUV NGR A,A < ON PASSE EVENTUELLEMENT D'AVANT A APRES ! STA RECOUV < < SYNCHRONISATION DU 'BOS' : < SIMULJ: EQU $ STZ XCDA+XSCDA IC XCDA+XSCDA < XSCDA=1... SIMUM5: EQU $ < CAS DE LA TRANSMISSION DE 1 COUP/4 < COUPS A "BOS", XSCDA=-1 OU -4... LA ETAT SIMUM1: EQU $ < CAS DES ERREURS EN RETOUR DE CMS5... STA XCDA+XIOCB+IOCB3 < RENVOI DES CONDITIONS DE RETOUR... PSR X STZ XCDA+XVCDA DC XCDA+XVCDA < XVCDA=-1 (POUR DISTINGUER UN NOUVEAU < SERVICE EN ATTENTE, DU PRECEDENT NON < ENCORE ACQUITTE), LAI CDA-CDA LB AXCDA BSR ATRANS < TRANSLATION DE LA 'CDA'... LXI LXCDA WCDA < ET SYNCHRONISATION DE BOS... PLR X CPZ XCDA+XSCDA < Y-A-T'IL UN BREAK ??? JL SIMULS < OUI, VERS LA DEMANDE SUIVANTE SANS < TESTER LE RECOUVREMENT... CPZ RECOUV < A-T'ON FAIT UN RECOUVREMENT ??? JE SIMULS < NON, ELLE EST DEJA EXECUTEE... STX ETAT < ???!??! BSR ASP < LES ECRITURES SONT MISES EN RECOUVREMENT. CPZ ETATSV < COMMENT CELA S'EST-IL PASSE ??? JNE EXECER < MAL, ON ABORTE !!! SIMULS: EQU $ BR ASIMUB < VERS LA DEMANDE SUIVANTE... < < TRAITEMENT DES ERREURS D'EXTENSION < D'ADDRESSES SUR 'DKU' (ON RESTE OU ON ETAIT) : < ERRDKU: EQU $ LAI M18-ZERO JMP ERRDK < VERS LA SIGNALISATION DE L'ERREUR... PAGE < < < S O U S - P R O G R A M M E V I D E : < < VIDE: EQU $ BSR ASPME0 < ON VA QUAND MEME MINIMISER L'ESPACE < MEMOIRE... RSR < DUR, DUR, DUR... PAGE < < < S E R V I C E S I M P L E : < < SERV: EQU $ BSR ASPME0 < ON MINIMISE LA MEMOIRE, LAD DEMPER BSR AEXEC < ET ON EXECUTE CE QUI EST DEMANDE... RSR PAGE < < < F E R M E T U R E D ' U N E A S S I G N A T I O N : < < PCLOSE: EQU $ PSR A LAD DESASS BSR ACCI < ENVOI D'UNE DEMANDE DE DESASSIGNATION... STZ IASS < ON MEMORISE LA DESASSIGNATION... PLR A RSR < ET C'EST TOUT... PAGE < < < E C R I T U R E : < < WRITE: EQU $ BSR ASPMEM < AJUSTEMENT DE L'OCCUPATION MEMOIRE. BSR ARCDA < RECUPERATION DU BUFFER A ECRIRE. JMP WRITES < VERS L'EXECUTION DE L'ECRITURE... < < < E C R I T U R E A V E C R E C O U V R E M E N T : < < WRITER: EQU $ CPZ RECOUV < AVANT OU APRES LA SYNCHRO 'BOS' ??? JE WRITE < PAS DE RECOUVREMENT ???!??!??! JL WRITES < APRES... < < RECOUV=1 : AVANT LA SYNCHRO 'BOS' : < BSR ASPMEM < AJUSTEMENT DE L'OCCUPATION MEMOIRE. BSR ARCDA < RECUPERATION DU BUFFER A ECRIRE. JMP WRITET < VERS LA SORTIE... < < RECOUV=-1 : APRES LA SYNCHRO 'BOS' : < WRITES: EQU $ LAD DEMPER BSR AEXEC < EXECUTION DE L'ECRITURE... < < TEST SUR 'MT' : < TESTMT: EQU $ CPZ ETATSV < MAIS COMMENT CELA S'EST-IL PASSE ??? JNE NWMT < MAL, PAS DE POSITION COURANTE... LBY DEMPER CPI NVPMT < LE 'NVP' COURANT EST-IL CELUI DE 'MT' ??? JNE NWMT < NON, RIEN A FAIRE... LA DEMPER PSR A < OUI, SAUVEGARDE DE LA FONCTION, LAI FAD BSR ASPFON < ET MISE EN PLACE DE LA FONCTION D'ACCES < AU NUMERO DE BLOC COURANT. LAD DEMPER BSR AEXEC < MISE DU NUMERO DE BLOC COURANT DANS < LA BOX, ACTD BOX < ET QUE L'ON RECUPERE... STB DEMPER+DEM3 < ET QUE L'ON MET DANS 'DEM3' EN TANT QUE < NUMERO DU PROCHAIN BLOC A MANIPULER... PLR A STA DEMPER < ET ENFIN RESTAURATION DE LA FONCTION... STZ ETATSV < PAR PRUDENCE... NWMT: EQU $ < < SORTIE : < WRITET: EQU $ RSR < < < L E C T U R E : < < READ: EQU $ BSR ASPMEM < AJUSTEMENT DE L'OCCUPATION MEMOIRE. LAD DEMPER BSR AEXEC < EXECUTION DE LA LECTURE. BSR AWCDA < RENVOI DU BUFFER LU. JMP TESTMT < VERS LE TEST SUR 'MT'... < < < L E C T U R E A V E C P A R I T E : < < READP: EQU $ BSR ASPMEM < AJUSTEMENT DE L'OCCUPATION MEMOIRE. LAD DEMPER BSR AEXEC < EXECUTION DE LA LECTURE. BSR AGBOX < DONNE : ETAT=NOMBRE DE CARACTERES LUS. PSR A,X LXI 0 READP1: EQU $ LBY &ABUFX PTY < CALCUL DE LA PARITE : JNC READP2 < ELLE EST PAIRE... SBT BITPAR < ELLE EST IMPAIRE... STBY &ABUFX READP2: EQU $ ADRI I,X < AU CARACTERE SUIVANT... LR X,A CP ETAT < S'IL EXISTE... JL READP1 < OUI... LAI COSBT?BITPAR=FMASK(0?RC=FCINST STBY &ABUFX PLR A,X BSR AWCDA < RENVOI DU BUFFER LU. RSR < < < L E C T U R E A V E C P A R I T E < E T T E S T D E F I N : < < READF: EQU $ BSR ASPMEM < AJUSTEMENT DE LA MMOIRE. LAD DEMPER BSR AEXEC < LECTURE DES DONNEES... BSR AGBOX < RECUPERATION DU NOMBRE DE CARACTERES LUS. < < TEST DES CARACTERES POUR REGENERATION < DE LA PARITE, ET TEST DE FIN : < PSR A,X,Y CPZ ETATSV < L'OPERATION S'EST BIEN DEROULEE ??? JNE READF5 < NON, ON SIMULE UNE FIN... LXI 0 < X=INDEX DES CARACTERES, LYI 0 < Y=COMPTEUR DES " "... READF1: EQU $ LBY &ABUFX < A=CARACTERE COURANT, CPI " " < EST-CE LE "SPACE" ??? JNE READF3 < NON... ADRI 1,Y < OUI, COMPTAGE DES "SPACE"... READF3: EQU $ PTY < CALCUL DE LA PARITE, JNC READF2 < PAIRE, SBT BITPAR < IMPAIRE. STBY &ABUFX READF2: EQU $ ADRI I,X < AU CARACTERE SUIVANT... LR X,A CP ETAT < S'IL EXISTE... JL READF1 < OUI... LAI COSBT?BITPAR=FMASK(0?RC=FCINST STBY &ABUFX LR Y,A < A=NOMBRE DE "SPACES" : CP ETAT < EST-CE UN BUFFFER "BLANC" ??? JNE READF4 < NON... READF5: EQU $ LXI 0 < OUI, LAI COSBT?BITPAR=FMASK(0?RC=FCINST STBY &ABUFX < ON MET UN 'R/C' EN DEBUT DE BUFFER... LAI 1 STA ETAT < ET ON NE RENVOIE QU'UN SEUL CARACTERE... READF4: EQU $ PLR A,X,Y RSR PAGE < < < V I S U ( O U T T Y S ) : < < SPVI: EQU $ < < < L E C T U R E : < < SPVI2: EQU $ LA FUCOUR CPI FUGR < EST-CE UNE LECTURE SUR LA 'FU' SPECIALE < GRAPHIQUE ??? JE SPGR < OUI, ON Y VA... BSR AREADP BSR AGBOX BSR ACODAR < PRISE EN COMPTE DES EVENTUELS CODES < D'ARRET... SPGR1: EQU $ RSR < < < L E C T U R E G R A P H I Q U E : < < SPGR: EQU $ LBY DEMPER < SAUVEGARDE DU 'NVP', LBI LCU STB DEMPER < MISE EN PLACE DE LA FONCTION, STBY DEMPER < ET RESTAURATION DU 'NVP'... LAD OG SVC 0 < MISE EN GRAPHIQUE DE LA VISU, LAD CU SVC 0 < ACTIVATION DU CURSEUR GRAPHIQUE, LX DEMPER+DEM2 < POUR 'SPMEM' DANS 'READ'... BSR AREAD < ET LECTURE GRAPHIQUE... JMP SPGR1 < VERS LE RETOUR... < < < E C R I T U R E : < < SPVI1: EQU $ CPZ RECOUV < AVANT OU APRES LA SYNCHRO 'BOS' ??? JNE SPVI1U < OK... BSR ASPMEM < PAS DE RECOUVREMENT : AJUSTEMENT DE < DE L'ESPACE MEMOIRE, BSR ARCDA < RECUPERATION DU BUFFER A ECRIRE, JMP SPVI1S < VERS LE TRAITEMENT DES PARITES... SPVI1U: EQU $ JL SPVI1S < APRES... < < RECOUV=1 : AVANT LA SYNCHRO 'BOS' : < BSR ASPMEM < AJUSTEMENT DE L'OCCUPATION MEMOIRE. BSR ARCDA < RECUPERATION DU BUFFER A ECRIRE. JMP SPVI1T < VERS LA SORTIE... < < RECOUV=-1 : APRES LA SYNCHRO 'BOS' : < SPVI1S: EQU $ PSR A,X LA ABUFVI ADRI -VISSEG*NOCMO,A STA WG+DEM1 < CAS DE 'FUGR' A PRIORI... LA DEMPER+DEM2 STA WG+DEM2 < (IDEM) STA WGTV+DEM2 < CAS DE 'FUTV' A PRIORI... LA FUCOUR < (A)='FU' COURANTE : CPI FUCOM < EST-CE LA 'FU' CARTE CMS5 "!..." ??? JE SPVI14 < OUI... CPI FUGR < EST-CE LA 'FU' GRAPHIQUE ??? JE SPVI42 < OUI... CPI FUTV < EST-CE LA 'FU' TELEVISION ??? JE SPVI43 < OUI... LA DEMPER+DEM2 < NON, TEST D'UN DEROUTEMENT GRAPHIQUE : CPI LGVIS < EST-CE UN ACCES GRAPHIQUE VISU : JE SPVI12 < PEUT-ETRE... CPI LGTV < EST-CE UN ACCES GRAPHIQUE TV : JE SPVI13 < PEUT-ETRE... SPVI14: EQU $ < ET BIEN NON, NI TV, NI VISU... LXI 0 < X=INDEX D'ACCES AU BUFFER, SPVI11: EQU $ LBY &ABUFX RBT BITPAR < ON ELIMINE LES PARITES... STBY &ABUFX ADRI I,X LR X,A CP DEMPER+DEM2 < EST-CE FINI ??? JL SPVI11 < NON... < < OUI, TEST D'UNE COMMANDE PRE- < PROGRAMMEE ; ON L'IDENTIFIE < PAR LA PRESENCE DE "!M" EN < TROISIEME PLACE : < LA FUCOUR < (A)='FU' COURANTE : CPI FUCOM < EST-CE LA 'FU' DES COMMANDES CMS5 ??? JE E110 < OUI, ON NE TESTE PAS "!M...", AFIN < DE NE PAS SE DEROUTER SUR 'SPVI22'... < SI "!M..." EST ABSENT CELA FERA UNE < ERREUR 'CCI'... LXI XPE LBY &ABUFX < (A)=CARACTERE POUVANT ETRE "!", CPI KPE < EST-CE LUI ??? JNE SPVI22 < NON, PEUT-ETRE DU GRAPHIQUE... LXI XM < OUI, LBY &ABUFX CPI KM < ALORS, A-T'ON BIEN "!M" ??? JNE SPVI22 < NON... E110: EQU $ LXI XLIM < OUI, LBY &ABUFX < (A)=LIMITEUR JOUANT LE ROLE DE "EOT", STA LIMIT < QUE L'ON MEMORISE... LXI XPE < (X)=INDEX D'EXPLORATION DE LA CARTE, SPVI30: EQU $ LBY &ABUFX < (A)=CARACTERE COURANT, CP LIMIT < EST-CE "EOT" ??? JE SPVI31 < OUI... ADRI I,X < NON, AU SUIVANT... LR X,A CPI XPE+LCARTE < MAIS EST-ON AU BOUT ??? JL SPVI30 < NON... ADRI -I,X < OUI, ON ECRASE LE DERNIER CARACTERE... SPVI31: EQU $ LAI EOT STBY &ABUFX < ON PLACE UN "EOT" AU BOUT... LAD CCINT BSR AEXEC < ET ON ENVOIE LA COMMANDE... JNE SPVI33 < ERREUR... QUIT 1 < C'EST BON, ON PASSE LA MAIN AU 'CCI'... JMP SPVI32 SPVI33: EQU $ LAI M17-ZERO BSR APRINT < MESSAGE D'ERREUR... SPVI32: EQU $ PLR A,X JMP SPVI1T < ET ON SORT... < < ECRITURES NORMALES : < SPVI22: EQU $ PLR A,X < OUI... BSR ACODAR < TEST DES CODES D'ARRET... LAD DEMPER BSR AEXEC < EXECUTION DE L'ECRITURE... < < SORTIE : < SPVI1T: EQU $ RSR < < TEST D'UN DEROUTEMENT GRAPHIQUE VISU : < SPVI12: EQU $ LXI VISV1-GVIS LA &ABUFX CPI VALG < A-T'ON L'ENCADREMENT 'VALG' ??? JNE SPVI14 < NON, DONC ALPHA-NUMERIQUE... LXI VISV2-GVIS LA &ABUFX CPI VALRAZ < EST-CE UN EFFACEMENT ??? JE SPVI16 < OUI... CPI VALG < A-T'ON L'ENCADREMENT 'VALG' ??? JNE SPVI14 < NON, DONC ALPHA-NUMERIQUE... LA ABUFVI STA WG+DEM1 < REINITIALISATION LAI LVSEG STA WG+DEM2 < DE 'WG'... SPVI42: EQU $ < ENTRY 'FUGR' : LA WG+DEM2 CPI NOCMO < EST-CE UNE DEMANDE D'ERASE ??? JE SPVI16 < OUI... LAD OG < NON, DONC GRAPHIQUE VISU : BSR AEXEC < OPEN GRAPHIQUE, LAD WG BSR AEXEC < ECRITURE D'UN SEGMENT, LAD CG JMP SPVI15 < VERS LE CLOSE GRAPHIQUE. SPVI16: EQU $ LAD ERASE JMP SPVI15 < VERS L'EFFACEMENT... < < TEST D'UN DEROUTEMENT GRAPHIQUE TV : < SPVI13: EQU $ LXI TVV2-GTV LA &ABUFX CPI VALRAZ < EST-CE UN EFFACEMENT ??? JE SPVI17 < OUI... CPI VALG < A-T'ON L'ENCADREMENT 'VALG' ??? JNE SPVI14 < NON, DONC ALPHA-NUMERIQUE... LAI LVTV STA WGTV+DEM2 < REINITIALISATION DE 'WGTV'... SPVI43: EQU $ < ENTRY 'FUTV' : LA WGTV+DEM2 CPI NOCMO < EST-CE UNE DEMANDE DE 'NOIR' ??? JE SPVI17 < OUI... LAD WGTV < NON... SPVI15: EQU $ BSR AEXEC < ECRITURE D'UN SEGMENT TV, OU 'CG'... PLR A,X JMP SPVI1T < VERS LA SORTIE... SPVI17: EQU $ LRM A,B,X WORD NOIR WORD BUF WORD LNOIR MOVE < GENERATION DU NOM "M-NOIR"... LX SGN+DEM2 < (X)=NOMBRE D'OCTETS POUR "M-NOIR", BSR ASPMET < AJUSTEMENT DE L'ESPACE MEMOIRE... LAD SGN BSR AEXEC < APPEL DE L'IMAGE "M-NOIR"... LAD DEMTV JMP SPVI15 < VERS L'ENVOI DE "M-NOIR" EN TV... PAGE < < < L E C T E U R D E C A R T E S : < < SPCR: EQU $ < < < C L O S E A S S I G N A T I O N : < < SPCR1: EQU PCLOSE < < < L E C T U R E : < < SPCR2: EQU $ BSR AREADF BSR ACODAR BSR AWCDA < TRANSFERT DU BUFFER... RSR PAGE < < < S I M U L A T I O N I M P R I M A N T E : < < < ARGUMENT : < X=COMPTE D'OCTETS PRESUME. < < SPLP: EQU $ < < < C L O S E A S S I G N A T I O N : < < SPLP4: EQU PCLOSE < < < E C R I T U R E : < < SPLP3: EQU $ CPZ RECOUV < AVANT OU APRES LA SYNCHRO 'BOS' ??? JNE SPLP3U < OK... BSR ASPMEM < PAS DE RECOUVREMENT : AJUSTEMENT DE < L'ESPACE MEMOIRE, BSR ARCDA < RECUPERATION DU BUFFER A ECRIRE, JMP SPLP3S < VERS LE TEST DES CODES D'ARRET... SPLP3U: EQU $ JL SPLP3S < APRES... < < RECOUV=1 : AVANT LA SYNCHRO 'BOS' : < BSR ASPMEM < AJUSTEMENT DE L'OCCUPATION MEMOIRE. BSR ARCDA < RECUPERATION DU BUFFER A ECRIRE. JMP SPLP3T < VERS LA SORTIE... < < RECOUV=-1 : APRES LA SYNCHRO 'BOS' : < SPLP3S: EQU $ BSR ACODAR < TEST DES CODES D'ARRET... LAD DEMPER BSR AEXEC < EXECUTION DE L'ECRITURE... < < SORTIE : < SPLP3T: EQU $ RSR < < < S A U T D E P A G E : < < SPLP2: EQU $ BSR ASPME0 < MINIMISATION DE L'ESPACE MEMOIRE. LAD DEMLF BSR AEXEC < EXECUTION DU SAUT DE PAGE. RSR < < < S A U T D E P A R A G R A P H E : < < SPLP1: EQU $ BSR ASPME0 < MINIMISATION DE L'ESPACE MEMOIRE. LAD DEMVT BSR AEXEC < EXECUTION DU SAUT DE PARAGRAPHE. RSR PAGE < < < S I M U L A T I O N G P I 3 2 E N M O D E C A N A L : < < < ARGUMENT : < X=COMPTE D'OCTETS PRESUME. < < SPCU: EQU $ < < < C L O S E A S S I G N A T I O N : < < SPCU2: EQU PCLOSE < < < E C R I T U R E : < < SPCU1: EQU $ CPZ RECOUV < AVANT OU APRES LA SYNCHRO 'BOS' ??? JNE SPCU1U < OK... BSR AREADO < PAS DE RECOUVREMENT : AJUSTEMENT DE < L'ESPACE MEMOIRE, < RECUPERATION DU BUFFER A ECRIRE, < ET ECLATEMENT DES MOTS EN 2 MOTS... JMP SPCU1S < VERS LE TEST DES CODES D'ARRET... SPCU1U: EQU $ JL SPCU1S < APRES... < < RECOUV=1 : AVANT LA SYNCHRO 'BOS' : < BSR AREADO < AJUSTEMENT DE L'OCCUPATION MEMOIRE, < RECUPERATION DU BUFFER A ECRIRE, < ET ECLATEMENT DES MOTS EN 2 MOTS... JMP SPCU1T < VERS LA SORTIE... < < RECOUV=-1 : APRES LA SYNCHRO 'BOS' : < SPCU1S: EQU $ BSR ACODAR < TEST DES CODES D'ARRET... LAD DEMPER BSR AEXEC < EXECUTION DE L'ECRITURE... < < SORTIE : < SPCU1T: EQU $ RSR < < < E C L A T E M E N T 1 M O T --> 2 M O T S : < < < FONCTION : < CETTE ROUTINE EST DESTINEE A < ACCEDER A L'IMPRIMANTE ELECTRO- < STATIQUE BENSON ; ELLE PRELEVE < LES 2 OCTETS DE CHAQUE MOT, ET < LES DISPOSE DANS 2 MOTS CONSE- < CUTIFS... < < READO: EQU $ BSR ASPMEM < PREMIER AJUSTEMENT MEMOIRE, BSR ARCDA < RECUPERATION DU BUFFER ARGUMENT... LR X,A < (A)=NOMBRE D'OCTETS ARGUMENTS, < < INITIALISATION EVENTUELLE DU GRAPHWARE : < CPI LGRAPH*NOCMO < EST-CE UNE DEMANDE D'INITIALISATION ??? JNE READO4 < NON... SLRS NOCMO=K LR A,X < (X)=NOMBRE DE MOTS A TESTER... READO5: EQU $ ADRI -I,X < AU MOT PRECEDENT, CPZR X < EST-CE FINI ??? JL READO8 < OUI, ON INITIALISE... LA &ABUFX < NON, ON ACCEDE AU MOT PRECEDENT : CPI IBUF < EST-CE UNE INITIALISATION ??? JNE READO6 < NON, UNE SORTIE NORMALE... JMP READO5 < OUI, ALLONS VOIR LE MOT PRECEDENT... READO8: EQU $ LRM A,B,X WORD IGRAPH WORD BUF WORD LGRAPH MOVE < MISE EN PLACE DES DONNEES D'INITIA- < LISATION DU GRAPHWARE... JMP READO2 < ET C'EST TOUT... READO6: EQU $ LAI LGRAPH*NOCMO < RESTAURE 'A'... < < DETECTION DES DEMANDES DE < PASSAGE EN GRAPHIQUE (PAR < 4 FOIS LE CODE 'IBUF' A LA < SUITE ET NON A CHEVAL SUR < 2 BUFFERS) : < READO4: EQU $ PSR A,X SLRS NOCMO=K ADCR A LR A,X < (X)=NOMBRE DE MOTS PAR EXCES. READOA: EQU $ ADRI -I,X < PASSAGE AU MOT PRECEDENT, CPZR X < S'IL EXISTE... JL READOB < NON, FINI... LA &ABUFX < (A)=MOT COURANT : CPI IBUF < EST-CE LE CODE GRAPHIQUE ??? JNE READOA < NON, PASSAGE AU MOT SUIVANT... ADRI -I,X < PEUT-ETRE, PASSAGE AU MOT PRECEDENT, CPZR X < S'IL EXISTE... JL READOB < NON, FINI... LA &ABUFX < (A)=MOT COURANT : CPI IBUF < EST-CE LE CODE GRAPHIQUE ??? JNE READOA < NON, PASSAGE AU MOT SUIVANT... ADRI -I,X < PEUT-ETRE, PASSAGE AU MOT PRECEDENT, CPZR X < S'IL EXISTE... JL READOB < NON, FINI... LA &ABUFX < (A)=MOT COURANT : CPI IBUF < EST-CE LE CODE GRAPHIQUE ??? JNE READOA < NON, PASSAGE AU MOT SUIVANT... ADRI -I,X < PEUT-ETRE, PASSAGE AU MOT PRECEDENT, CPZR X < S'IL EXISTE... JL READOB < NON, FINI... LA &ABUFX < (A)=MOT COURANT : CPI IBUF < EST-CE LE CODE GRAPHIQUE ??? JNE READOA < NON, PASSAGE AU MOT SUIVANT... PSR B,X < OUI : LAD &ABUFX LR A,B < (B)=ADRESSE DE LA ZONE RECEPTRICE < DANS LE BUFFER ARGUMENT, LAD IGRAPH < (A)=ADRESSE DE LA LISTE DES CODES < DE PASSAGE EN GRAPHIQUE DU < GRAPHWARE... LXI LGRAPH < (X)=NOMBRE DE MOTS A TRANSFERER... MOVE < MISE DES COMMANDES DANS LE BUFFER... PLR B,X JMP READOA < ET POURSUIVONS L'EXPLORATION ARRIERE < DU BUFFER... < < PREPARATION DE L'ECLATEMENT DU BUFFER : < READOB: EQU $ PLR A,X SLLS NOCMO=K < ET ON DOUBLE, CAR ON VA ECLATER UN < MOT DANS 2... STA DEMPER+DEM2 TBT NBITMO-I-I < LE NOMBRE D'OCTETS INITIAL ETAIT-IL < IMPAIR ??? JNC READO9 < NON, PAIR... ADRI I*NOCMO,A < OUI, IMPAIR, ON CALCULE LE NOMBRE DE < MOTS CONTENANT LE NOMBRE IMPAIR D'OCTETS. READO9: EQU $ LR A,X < (X)=NOMBRE D'OCTETS A ECHANGER APRES < ECLATEMENT... BSR ASPMET < ET BIEN SUR, IL FAUT REAJUSTER L'OCCU- < PATION MEMOIRE... SLRS NOCMO*NOCMO=K LR A,X < (X)=NOMBRE DE MOTS A ECLATER... < < BOUCLE D'ECLATEMENT : < READO1: EQU $ ADRI -I,X < DECOMPTAGE... CPZR X < EST-CE FINI ??? JL READO2 < ET OUI... LA &ABUFX < ET NON, (A)=MOT COURANT, PSR X ADR X,X < (X)=INDEX D'ECLATEMENT, SLRD NBITOC < (A)=OCTET GAUCHE, EORI MOCD < QUE L'ON INVERSE, STA &ABUFX < ET QUE L'ON MET DANS LE BUFFER. ADRI I,X < PROGRESSION DE L'INDEX, LAI K < CLEAR, SLLD NBITOC < (A)=OCTET DROIT, EORI MOCD < QUE L'ON INVERSE, STA &ABUFX < ET QUE L'ON MET DANS LE BUFFER... PLR X JMP READO1 < AU MOT PRECEDENT... < < SORTIE : < READO2: EQU $ RSR PAGE < < < B A N D E S M A G N E T I Q U E S : < < SPMT: EQU $ < < < C L O S E A S S I G N A T I O N : < < SPMT1: EQU $ BSR ASERV < ON REMBOBINE... STZ DEMPER+DEM3 < ON RAZE LE NUMERO DE BLOC COURANT... BSR APCLOS < ET ON CLOSE L'ASSIGNATION... RSR < < < R E M B O B I N A G E : < < SPMT2: EQU $ BSR ASERV < EXECUTION, STZ DEMPER+DEM3 < ET RAZ DU NUMERO DU BLOC COURANT... RSR < < < T A P E - M A R K : < < SPMT3: EQU SERV < < < S A U T A R R I E R E U N B L O C : < < SPMT5: EQU $ DC DEMPER+DEM3 RSR < < < S A U T A V A N T U N B L O C : < < SPMT6: EQU $ IC DEMPER+DEM3 RSR < < < L E C T U R E : < < SPMTC: EQU $ LA DEMPER+DEM2 TBT NBITMO-I < EST-CE IMPAIR ??? JNC SPMTC1 < NON, OK... ADCR A < OUI, IL FAUT UN NOMBRE ENTIER DE MOTS... STA DEMPER+DEM2 SPMTC1: EQU $ BSR ASPMEM < AJUSTEMENT MEMOIRE, LAD DEMPER BSR AEXEC < EXECUTION DE LA LECTURE, BSR ACODAR BSR AWCDA < TRANSFERT DU BUFFER... BR ATESMT < VERS LA MISE A JOUR DU NUMERO DE < BLOC COURANT... < < < E C R I T U R E : < < SPMTB: EQU $ LA DEMPER+DEM2 TBT NBITMO-I < EST-CE IMPAIR ??? JNC SPMTB1 < NON, OK... ADCR A < OUI, IL FAUT UN NOMBRE ENTIER DE MOTS... STA DEMPER+DEM2 SPMTB1: EQU $ BR AWRITR < VERS L'ECRITURE... PAGE < < < D I S Q U E A M O V I B L E : < < SPDK: EQU $ < < < P R O T E C T I O N : < < SPDK1: EQU VIDE SPDK2: EQU VIDE < < < L E C T U R E : < < SPDK5: EQU $ BSR AREAD CPZ ETATSV < COMMENT CELA S'EST-IL PASSE ??? JE SPDK5A < BIEN, ET VOUS MEME... LAI M16-ZERO < MAL, BSR APRINT < ON LE DIT, QUIT 1 < PUIS ON ATTEND, JMP SPDK5 < ET ENFIN, ON ITERE... SPDK5A: EQU $ BSR ACODAR RSR < < < E C R I T U R E : < < SPDK4: EQU WRITER < < < M O U V E M E N T D E S T E T E S : < < SPDK3: EQU VIDE PAGE < < < P R E P A R A T I O N D E ' D E M P E R ' < P O U R L E S A C C E S I M A G E S : < < < ARGUMENT : < (A)=PERMET LA SELECTION D'UN PROCESSEUR DE COULEUR. < < IMA2: EQU $ STA DEMPER+DEM3 < MISE A JOUR DE LA SELECTION COULEUR, LA DEMPER+DEM1 AD DEMPER+DEM2 STA DEMPER+DEM1 < PROGRESSION DE L'ADRESSE DU BUFFER, LAD DEMPER BSR AEXEC < ET ON RECUPERE UNE COMPOSANTE... RSR PAGE < < < T R A N S F E R T G L O B A L < ' T V M E M ' --> ' S I M U L ' : < < IMA1: EQU $ PSR A LA ABUF2 STA DEMPER+DEM1 < INITIALISATION DE L'ADRESSE BUFFER, LA ALIMAG STA DEMPER+DEM2 < INITIALISATION DE LA LONGEUR DE < L'ECHANGE, LAI XIN)XPR STA DEMPER+DEM3 < ET MISE EN LECTURE SUR LE ROUGE... LAD DEMPER BSR AEXEC < LECTURE DU ROUGE, LAI XIN)XPV BSR AIMA2 < LECTURE DU VERT, LAI XIN)XPB BSR AIMA2 < LECTURE DU BLEU. PLR A RSR PAGE < < < V A L I D A T I O N ( I O C B 2 ) E T ( I O C B 5 ) : < < < RESULTAT : < (X)=NOMBRE D'OCTETS A DEPLACER. < < IMA3: EQU $ LA XCDA+XIOCB+IOCB5 JAL IMA33 < ERREUR... STA BTRANS < POUR TRANSLATER LA ZONE DEPLACEE. LX XCDA+XIOCB+IOCB2 CPZR X JLE IMA34 < ERREUR... SLLS NOCMO=K < CONVERSION DE LA TRANSLATION EN OCTETS, SB ALIMA3 NGR A,A < (A)=LONGUEUR MAX DEPLACABLE, JAG IMA32 < (IOCB5) EST CORRECT... IMA33: EQU $ ERIMAG:: VAL ERINEX+I < ERREUR 'IOCB5' OU 'IOCB2' MAUVAIS... LAI ERIMAG STA ETATSV < QUE L'ON TRANSMET... JMP IMA31 < ET ON SORT... IMA32: EQU $ CPR A,X < VALIDATION DE (X)=(IOCB2) : JLE IMA31 < OK, INFERIEUR A CE QUI EST DISPONIBLE... IMA34: EQU $ LAI ERIMAG STA ETATSV < ON TRANSMET L'ERREUR... IMA31: EQU $ CPZ ETATSV < TEST DES CONDITIONS DE RETOUR, AFIN DE < SAUTER EVENTUELLEMENT SAUTER CE QUI < SUIT... RSR PAGE < < < T R A N S F E R T ' T V M E M ' --> ' B O S ' : < < SPIM1: EQU $ LX ALIMA3 BSR ASPMEM < AJUSTEMENT MEMOIRE POUR UNE IMAGE 12K... BSR AIMA1 < TRANSFERT : 'TVMEM' --> 'SIMUL', BSR AIMA3 < TRAITEMENT DE (IOCB2) ET (IOCB5)... JNE SPIM11 < ERREUR, ON SORT... BSR AWCDA < TRANSFERT : 'SIMUL' --> 'BOS' D'UN < MORCEAU D'IMAGE DONT L'ADRESSE RELATIVE < A L'IMAGE EST (IOCB5), ET LA LONGUEUR < EN OCTETS (IOCB2)... SPIM11: EQU $ STZ BTRANS RSR < < < T R A N S F E R T ' B O S ' --> ' T V M E M ' : < < SPIM2: EQU $ LX ALIMA3 BSR ASPMEM < AJUSTEMENT MEMOIRE POUR UNE IMAGE 12K... BSR AIMA1 < TRANSFERT : 'TVMEM' --> 'SIMUL', BSR AIMA3 < TRAITEMENT DE (IOCB2) ET (IOCB5)... JNE SPIM21 < ERREUR, ON SORT... BSR ARCDA < TRANSFERT : 'BOS' --> 'SIMUL' D'UN < MORCEAU D'IMAGE DONT L'ADRESSE RELATIVE < A L'IMAGE EST (IOCB5), ET LA LONGUEUR < EN OCTETS (IOCB2)... LAI 0 SPIM22: EQU $ AD ABUF2 STA DEMPER+DEM1 < INITIALISATION DE L'ADRESSE DU BUFFER, LA ALIMA3 STA DEMPER+DEM2 < ET DE LA LONGUEUR, LAI XOUT STA DEMPER+DEM3 < ET ENFIN DU MODE 'OUT'... LAD DEMPER BSR AEXEC < TRANSFERT GLOBAL EN MODE ENTRELACE : < 'SIMUL' --> 'TVMEM'... SPIM21: EQU $ STZ BTRANS RSR < < < T R A N S F E R T B U F F E R --> ' T V M E M ' : < < SPIMS: EQU $ < ENTRY POUR LE 'SGN'... LAI DELTA*NOCMO < POUR TRANSLATER LE BUFFER. JMP SPIM22 PAGE < < < M I S E - A - J O U R D E L A ' D E M P E R ' < D U P S E U D O - C O N T E X T E ' S G N ' : < < < FONCTION : < LE PSEUDO-CONTEXTE 'SGN' < DONNE DES CORRESPONDANCES < FONCTIONS 'BOS' --> 'NVP' DE 'CMS5', < (ET NON PAS DES FONCTIONS DE < 'CMS5') ; CE MODULE RETABLIT DONC < UN MAUVAIS PLACEMENT FAIT PAR < LA "RACINE" DE "SIMUL"... < ENFIN, IL POSITIONNE LE 'DEM3' < AVEC UN 'DELTA' EGAL A LA LONGUEUR < MAX DES NOMS 'SGN', ET 'DEM2' AVEC < LA LONGUEUR DEMANDEE, PLUS CE 'DELTA'... < < < RESULTAT : < (X)='DEM2' MODIFIE. < < SGN1: EQU $ PSR A LA DEMPER < LE 'NVP' EST MAL CADRE A DROITE, SLLS MOCG=K < ON LE CADRE A GAUCHE, ORI FONSGN < ET ON Y CONCATENE LA FONCTION 'SGN', STA DEMPER < ET C'EST TOUT POUR LE MOT0... LAI DELTA*NOCMO STA DEMPER+DEM3 < MISE EN PLACE DU 'DELTA' DU 'SGN'... AD DEMPER+DEM2 STA DEMPER+DEM2 < ET TRANSLATION DE 'DEM2'... LR A,X < (X)='DEM2' MODIFIE POUR 'SPMEM'... PLR A RSR PAGE < < < M O U V E M E N T : B U F F E R --> N O M : < < < FONCTION : < CE MODULE TRANSFERT LE BUFFER < VERS LE NOM 'SGN' COURANT, ET CE < JUSQU'A CONCURRENCE DE 'LSGN' < CARACTERES, OU DU PREMIER 'EOT' < RENCONTRE ; ENFIN, LE NOM COURANT < EST RAZE AVANT TOUT... < < SGN2: EQU $ PSR A,X,Y LXI LSGN/NOCMO SGN21: EQU $ STZ &ANOMS1 < CLEAR DU NOM COURANT. JDX SGN21 LA DEMPER+DEM2 < (A)=LONGUEUR COURANTE DEMANDEE : CPI LSGN < EN FAIT, ON PREND LE JLE SGN22 < MIN(LSGN,(DEMPER+DEM2))... LAI LSGN SGN22: EQU $ LR A,Y < (Y)=NOMBRE DE CARACTERES A DEPLACER, LXI 0 < (X)=INDEX DE DEPLACEMENT. SGN23: EQU $ LBY &ABUFX < DEPLACEMENT DE TOUT CARACTERE (D'AILLEURS < SANS TESTS DU TYPE 'NULL' : CE N'EST PAS < GRAVE CAR ULTERIEUREMENT, LE 'SGN' REN- < VERRA UN CODE D'ERREUR...). STBY &ANOMS0 ADRI I,X < (X)=NOMBRE DE CARACTERES DEPLACES A CE < NIVEAU. CPI EOT < EST-CE UNE FIN DE NOM ??? JE SGN24 < OUI, ON ARRETE ICI... ADRI -I,Y < NON, ON DECOMPTE LES CARACTERES DEPLACES, CPZR Y < ALORS ??? JG SGN23 < IL EN RESTE... SGN24: EQU $ STX ETAT < ON MET DANS 'ETAT' LE NOMBRE DE CARACTERE < DU NOM COURANT (Y COMPRIS OU PAS LE < CARACTERE DE FIN ; A NOTER QUE S'IL < N'EST PAS COMPTE, IL EXISTE QUAND MEME < EN BOUT DE BUFFER PAR INITIALISATION). PLR A,X,Y RSR PAGE < < < M O U V E M E N T : N O M --> B U F F E R : < < < FONCTION : < CE MODULE RENVOIE LE NOM < COURANT 'SGN' DANS LE BUFFER, < ET CE A CONCURRENECE DE 'LSGN' < CARACTERES, OU DU PREMIER 'EOT' < RENCONTRE... < ON S'ARRETE AUSSI SUR LE PREMIER < 'NULL' RENCONTRE, CE QUI PERMET DE < RENVOYER (ETAT)=0 SI LE NOM COURANT < N'EXISTE PAS... < < SGN3: EQU $ PSR A,X,Y LXI DELTA SGN35: EQU $ STZ &ABUFX1 < ON CLEAR LE DEBUT DU BUFFER... JDX SGN35 LA DEMPER+DEM2 < (A)=NOMBRE DE CARACTERES DEMANDES : CPI LSGN < ON PREND EN FAIT : JLE SGN32 < MIN(LSGN,(DEMPER+DEM2))... LAI LSGN SGN32: EQU $ LR A,Y < (Y)=NOMBRE DE CARACTERES MAX A DEPLACER, LXI 0 < (X)=INDEX DE DEPLACEMENT... SGN33: EQU $ LBY &ANOMS0 < DEPLACEMENT DU NOM... STBY &ABUFX JAE SGN34 < ON S'ARRETE SUR LE PREMIER 'NULL' < SANS INCREMENTER 'X', CE QUI FAIT QUE < (ETAT)=0 SI LE NOM COURANT N'EXISTE < PAS... ADRI I,X < (X)=NOMBRE D'OCTETS DEPLACES A CE NIVEAU, CPI EOT < EST-CE UN FIN DE NOM ??? JE SGN34 < OUI, ON ARRETE LA... ADRI -I,Y < NON, AU SUIVANT, CPZR Y < S'IL EXISTE ??? JG SGN33 < OUI... SGN34: EQU $ STX ETAT < ON RENVOIE PAR 'ETAT' LE NOMBRE DE < CARACTERES DEPLACES (Y COMPRIS OU < PAS 'EOT'...). PLR A,X,Y RSR PAGE < < < R E C H E R C H E ' N X P ' / ' N X S ' : < < < ARGUMENT : < (A)='NVP' A ENVOYER AU 'SGN', < (X)=INDEX COURANT DU NOM. < < < RESULTAT : < (A)=CONDITIONS DE RETOUR. < < SGN4: EQU $ CPZR X < OU EST L'INDEX DU NOM COURANT ??? JGE SGN41 < OK... PSR A LXI 0 < ON REINITIALISE LE PARCOURS... LAI EOT STBY &ABUFX PLR A SGN41: EQU $ STBY DEMPER < MISE EN PLACE DU 'NVP', LR X,A ADRI I,A STA DEMPER+DEM2 < MISE EN PLACE DE LA LONGUEUR COURANTE... DELTAF:: VAL -1 LAI DELTAF STA DEMPER+DEM3 < POUR LE 'NEXT', LE 'DELTA' DOIT ETRE < INFERIEUR A LA LONGUEUR VALEUR+NOM... LAD DEMPER BSR AEXEC < RECHERCHE DU SUIVANT SERIE/PARALLELE, LA ETATSV < (A)=CONDITION DE RETOUR... RSR PAGE < < < A C C E S A L A ' B O X ' D U ' S G N ' : < < SGN5: EQU $ PSR A LA DEMPER+DEM2 ADRI -DELTA*NOCMO,A < ON ENLEVE LE NOM DE LA VALEUR... STA DEMPER+DEM2 BSR AGBOX < ET RECUPERATION DE LA 'BOX'... PLR A RSR PAGE < < < S T O R E N O M C O U R A N T : < < SPSGN4: EQU $ BSR ASPMEM < AJUSTEMENT MEMOIRE, BSR ARCDA < TRANSFERT : CDA --> BUFFER, BSR ASGN2 < PUIS : BUFFER --> NOM... RSR < < < L O A D N O M C O U R A N T : < < SPSGN5: EQU $ BSR ASPMEM < AJUSTEMENT MEMOIRE, BSR ASGN3 < TRANSFERT : NOM --> BUFFER, BSR AWCDA < PUIS : BUFFER --> CDA... RSR < < < D E L E T E N O M C O U R A N T : < < SPSGN6: EQU $ STZ &RAZNOM < ET C'EST TOUT... RSR < < < A C C E S A U N O M S U I V A N T : < < SPSGN7: EQU $ BSR ASGN1 < MISE A JOUR DE 'DEMPER', BIEN QUE LE < 'NVP' NE SOIT QUE PROVISOIRE PUISQU'ON < VA BASCULER ENTRE 'NXP' ET 'NXS'... LXI DELTA*NOCMO+1 BSR ASPMEM < AJUSTEMENT MEMOIRE SUR LE PLUS LONG NOM < POSSIBLE... BSR ASGN3 < TRANSFERT : NOM --> BUFFER. < < CALCUL DE LA LONGUEUR DU NOM COURANT : < LXI 0 < INITIALISATION DE L'INDEX. STX XRAC < "A PARTIR DE"=0... SGN701: EQU $ LBY &ABUFX < ACCES UN CARACTERE DE LA RACINE. CPI EOT < EST-CE L'EOT ??? JE SGN702 < OUI. ADRI I,X < NON PROGRESSION INDEX. JMP SGN701 < ACCES CARACTERE SUIVANT. SGN702: EQU $ STX SXRAC < SAVE LA VALEUR DU X INITIAL. JMP SGN706 < ON DEMARRE SUR LE NEXT-PARALLELE... < < BOUCLE DE RECUPERATION DES CARACTERES : < SGN704: EQU $ LAI FONNXS BSR ASGN4 < DEMANDE DE NEXT-SERIE. CPI 5 < TEST DU CODE D'ERREUR. JE SGN707 < IL N'Y A PAS DE NEXT SERIE ... JAE SGN705 < OK , LE NEXT-SERIE EXISTE. LR X,A CP XRAC < EST-ON DE RETOUR SUR LA RACINE ??? JL SGN710 < OUI, ON ARRETE LA RECHERCHE (ETATSV)=0... ADRI -I,X < DANS LES AUTRES CAS D'ERREURS , < ON FAIT UN RETOUR ARRIERE , CAR < EN EFFET ON NE DOIT PLUS SAVOIR < OU L'ON EN EST SUITE A UN < DELETE SIMULTANE ... JMP SGN704 < N'ETANT PAS DE RETOUR SUR < LA RACINE , ON CONTINUE. < < CAS OU IL Y A UN NEXT-SERIE : < SGN705: EQU $ LR X,A CP LMAX < EST-CE LE MAX ??? JGE SGN711 < OUI, ON ARRETE LA RECHERCHE (ETATSV)=0... ADRI I,X LBY &ABUFX < RECUPERATION DE CE NEXT-SERIE. CPI EOT < EST-CE UNE FIN DE NOM ??? JNE SGN704 < NON , ON CONTINUE A RECUPERER. SGN711: EQU $ ADRI I,X < POUR PASSER DE LA LONGUEUR A L'INDEX... STX ETAT < AFIN DE RENVOYER LA LONGUEUR DU NOM < SUIVANT... IC DEMPER+DEM2 < POUR AVOIR 'EOT' DE FIN DE CHAINE... BSR ASGN2 < TRANSFERT : BUFFER --> NOM... < < FIN DE LA RECHERCHE : < SGN710: EQU $ RSR < AU RETOUR, (ETATSV) EST NUL SI LE NOM < SUIVANT A ETE TROUVE OU SI LA LONGUEUR < MAX A ETE ATTEINTE... < < RECHERCHE DU NEXT-PARALLELE : < SGN706: EQU $ SGN707: EQU SGN706 < ENTRY DE 1ERE RECHERCHE NEXT- < SERIE (CF. RACINE D'UN CATALOGUE) LAI FONNXP BSR ASGN4 < RECHERCHE NEXT-PARALLELE. CPI 5 < TEST DU CODE D'ERREUR. JE SGN709 < CAS DU NEXT-PARALLELE QUI < N'EXISTE PAS ... JANE SGN704 < AUTRES CAS DU SUREMENT A UN < DELETE SIMULTANE QUI DESORIENTE!!! < < CAS OU IL Y A UN NEXT-PARALLELE : < SGN708: EQU $ ADRI I,X LBY &ABUFX < RECUPERATION DE CELUI-CI. ADRI -I,X STBY &ABUFX < ET ON LE MET A SA BONNE PLACE. JMP SGN704 < ET RETOUR A LA BOUCLE DE < RECUPERATION. < < CAS OU IL N'Y A PAS DE NEXT-PARALLELE : < SGN709: EQU $ ADRI -I,X < RETOU ARRIERE DANS LE NOM. LR X,A < POUR VALIDATION. CP XRAC < EST-ON DE RETOUR SUR LA RACINE ??? JGE SGN706 < NON , ON CONTINUE ... JMP SGN710 < ON SORT, A NOTER QUE (ETATSV)#0... PAGE < < < S T O R E V A L E U R ' S G N ' : < < SPSGN1: EQU $ BSR ASGN1 < MISE A JOUR DE LA DEMANDE 'DEMPER', BSR ASPMEM < AJUSTEMENT MEMOIRE, BSR ASGN3 < DEPLACEMENT : NOM --> BUFFER, LAI DELTA STA BTRANS < AFIN DE TRANSLATER LA VALEUR DANS LE < BUFFER. BSR ARCDA < DEPLACEMENT : CDA --> BUFFER (VALEUR), STZ BTRANS LAD DEMPER BSR AEXEC < EXECUTION DU 'STN'... < < RETOUR DE LA LONGUEUR REELLE : < SGN220: EQU $ LA DEMPER+DEM2 ADRI -DELTA*NOCMO,A STA ETAT < AFIN DE RENVOYER LA LONGUEUR DE LA < VALEUR... < < RETOUR DU 'SGN' : < SGN221: EQU $ RSR < < < L O A D V A L E U R ' S G N ' : < < SPSGN2: EQU $ BSR ASGN1 < MISE A JOUR DE LA DEMANDE 'DEMPER', BSR ASPMEM < AJUSTEMENT MEMOIRE, BSR ASGN3 < DEPLACEMENT : NOM --> BUFFER, LAD DEMPER BSR AEXEC < EXECUTION DU 'STN'... JNE SGN201 < ERREUR D'EXECUTION... BSR ASGN5 < RECUPERATION DE LA TAILLE REELEMENT < CHARGEE, LAI DELTA STA BTRANS < TRANSLATION DU BUFFER... LX DEMPER+DEM2 < (X)=NOMBRE D'OCTETS RECUPERES... BSR AWCDA < DEPLACEMENT : BUFFER --> CDA (VALEUR). STZ BTRANS SGN201: EQU $ JMP SGN221 < VERS LE RETOUR DU 'SGN'... < < < D E L E T E V A L E U R ' S G N ' : < < SPSGN3: EQU $ BSR ASGN1 < MISE A JOUR DE LA DEMANDE 'DEMPER', BSR ASPMEM < AJUSTEMENT MEMOIRE, BSR ASGN3 < DEPLACEMENT : NOM --> BUFFER, LAI DELTAF STA DEMPER+DEM3 < POUR LE 'DELETE', LE 'DELTA' DOIT ETRE < INFERIEUR A LA LONGUEUR VALEUR+NOM... LAD DEMPER BSR AEXEC < EXECUTION DU 'DLN'... BSR ASGN5 < CA PEUT TOUJOURS SERVIR... JMP SGN221 < VERS LE RETOUR DU 'SGN'... PAGE < < < S T O R E I M A G E C O U R A N T E : < < SPSGN8: EQU $ STZ XCDA+XIOCB+IOCB5 < AFIN D'ASSURER UN LA ALIMA3 STA XCDA+XIOCB+IOCB2 < FONCTIONNEMENT CORRECT DE 'IMA3'... PSR W LRM W WORD CIMAGE < (W)=ADRESSE DU CONTEXTE IMAGE... BSR ASPIM1 < TRANSFERT : 'MEMTV' --> 'CDA', PLR W < (W)=ADRESSE DU CONTEXTE 'SGN'... CPZ ETATSV < CELA S'EST-IL BIEN PASSE ??? JNE SGN230 < NON, ON ABANDONNE... LX ALIMA3 < OUI, ON CONTINUE, ON FAIT : STX DEMPER+DEM2 < (X)=(DEM2)=LONGUEUR D'UNE IMAGE 12K... BSR APSGN1 < ET ON LA STORE 'SGN'... SGN230: EQU $ RSR < < < V I S U A L I S A T I O N V A L E U R C O U R A N T E : < < SPSGN9: EQU $ LX ALIMA3 STX DEMPER+DEM2 < (X)=(DEM2)=LONGUEUR D'UNE IMAGE 12K... BSR APSGN2 < ACCES A LA VALEUR DU NOM COURANT, CPZ ETATSV < CELA S'EST-IL BIEN PASSE ??? JNE SGN231 < NON, ON ABANDONNE... LA ETAT CP ALIMA3 < EST-CE UNE IMAGE 12K ??? JNE SGN232 < NON, ERREUR... PSR W LRM W WORD CIMAGE < (W)=ADRESSE DU CONTEXTE IMAGE... BSR ASPIM2 < OUI, TRANSFERT : 'CDA' --> 'MEMTV'... PLR W < (W)=ADRESSE DU CONTEXTE 'SGN'... SGN231: EQU $ RSR SGN232: EQU $ ERIM12:: VAL ERIMAG+'10 LAI ERIM12 STA ETATSV < ON RENVOIE UN CODE D'ERREUR... JMP SGN231 < ET ON SORT... PAGE < < < ' N O P ' : < < SPNOP: EQU $ RSR PAGE < < < M O D U L E S A B S E N T S : < < SPVI3: EQU $ SPVI4: EQU $ SPMT4: EQU $ SPMT7: EQU $ SPMT8: EQU $ SPMT9: EQU $ SPMTA: EQU $ LAI M7-ZERO BSR APRINT QUIT 1 RSR PAGE < < < B U F F E R D ' E N T R E E S - S O R T I E S : < < BUF: EQU $ < ADRESSE-MOTS DU BUFFER. XWOR%1: VAL BUF-ZERO*NOCMO BUF2: EQU ZERO+XWOR%1 < ET EN ADRESSE-OCTETS... XWOR%1: VAL BUF+VISSEG-ZERO*NOCMO BUFVIS: EQU ZERO+XWOR%1 XWOR%1: VAL BUF+TVSEG-ZERO*NOCMO BUFTV: EQU ZERO+XWOR%1 NOM: EQU BUF < NOM D'UNE IMAGE DE TV. XWOR%1: VAL NOM-ZERO*NOCMO NOM2: EQU ZERO+XWOR%1 < ADRESSE-OCTET DU NOM, IMAGE: EQU NOM+LNOM < ET IMAGE PROPREMENT DIT... XWOR%1: VAL IMAGE-ZERO*NOCMO IMAGE2: EQU ZERO+XWOR%1 < ADRESSE-OCTET DE L'IMAGE... END