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