< << DELETE 'SISP'
DF'SISP CMS5 BOOT VISU'
DF'SISP CMS5 DMKDEF'
DF'SISP CMS5 DOL1'
DF'SISP CMS5 DOL2'
DF'SISP CMS5 DSEC'
DF'SISP CMS5 FTHDEB'
DF'SISP CMS5 GENPIL1'
DF'SISP CMS5 GENPIL2'
DF'SISP CMS5 IC'
DF'SISP CMS5 ICPSTH'
DF'SISP CMS5 IREST'
DF'SISP CMS5 JREST'
DF'SISP CMS5 MKDEF'
DF'SISP CMS5 PSTH'
DF'SISP CMS5 PSTH-IC'
DF'SISP CMS5 RST'
DF'SISP CMS5 SST'
DF'SISP CMS5 THDEB'
DF'SIS CMS5'
DF'SISP CMS5 NBIT1'
DF'SISP CMS5 KREG'
DF'SISP CMS5 REC'
DF'SISP CMS5 TAB1'
DF'SISP CMS5 TAB2'
DF'SISP CMS5 ASCI'
DF'SISP CMS5 EXTEND'
DF'SISP CMS5 BYTE'
DF'SISP CMS5 GENPIL3'
DF'SISP CMS5 VALITN'
DF'SISP CMS5 SAVE'
DF'SISP CMS5 RESTAURE'
DF'SISP CMS5 DELETE'
DF'SISP CMS5 PSRSLO'
DF'SISP CMS5 PLRSLO'
DF'SISP CMS5 PAGE0'
DF'SISP CMS5 W ZERO'
DF'SISP CMS5 W TRACE'
DF'SISP CMS5 BASE C'
DF'SISP CMS5 GEN DEF'
DF'SISP CMS5 GEN CTE'
DF'SISP CMS5 CHECK'
< << DELETE 'SISP'
< ******* F I N D E D E L E T E ...
ED'SISP CMS5 BOOT VISU'
IN0
<
<
< B O O T V I S U :
<
<
< FONCTION :
< CE MODULE EST A IMPLANTER A
< UNE CERTAINE ADRESSE DANS LA MEMOIRE
< DU SOLAR 16.65; LANCE A L'ADRESSE 'YOOT',
< IL LIT DES OCTETS A PARTIR DESQUELS
< IL GENERE DES MOTS DE 16 BITS. DES QU'IL
< RENCONTRE 'A-ROND', IL S'ARRETE...
< A NOTER, QUE CE BOOT-STRAP S'ECRASE
< LUI-MEME, CE QU'IL PEUT FAIRE, PUISQU'IL
< NE TRAVAILLE QUE SUR DES REGISTRES...
<
<
<
<
< I M P L A N T A T I O N :
<
<
$EQU $ < PEU ORIGINAL...
<
<
< L O C A L :
<
<
YSV01:: VAL 'C8 < ADRESSE DU COUPLEUR.
LOCAL
YOC: EQU $
WORD K < AFIN DE NE PAS TRANSLATER CE QUI SUIT.
YNFIN: WORD YSV01?FPHIN < ENTREE INFORMATION SUR ASV01.
YTATIN: WORD YSV01?FPHETA < ENTREE DE L'ETAT DE ASV01.
YOCOM1: WORD YSV01?FPHCMD < SORTIE COMMANDE 1 SUR ASV01.
YOM1: WORD '0001 < VALIDATION INTERRUPTIONS !?!?!?!
YOCOM2: WORD YSV01?FPHCME < SORTIE COMMANDE 2 SUR ASV01.
YOM2: WORD '0140 < 7 BITS, PAS DE PARITE, 1 STOP.
<
<
< M O D U L E D E C H A R G E M E N T
< S U R A S V 0 1 :
<
<
PROG
YOOT: EQU $
LRM L < INITIALISATION DE L.
WORD YOC+DEPBAS
LA YOM2
SIO YOCOM2 < SORTIE COMMANDE...
LA YOM1
SIO YOCOM1 < COMMANDE SUIVANTE...
SIO YNFIN < ENTREE POUR CLEAR.
CALL #SISP CMS5 W ZERO# < DEPART SUR LE PREMIER MOT.
<
< BOUCLE DE RECUPERATION DES MOTS :
<
YOOP1: EQU $
LYI NBITMO/NBITCX < 4 CHIFFRES PAR MOT.
<
< BOUCLE DE RECUPERATION DES 4 CHIFFRES D'UN MOTS :
<
YOOP2: EQU $
SIO YTATIN < ENTREE DE L'ETAT,
TBT ETANXT < INFO VALIDE ???
JNC YOOP2 < NON, ON ATTEND...
SIO YNFIN < OUI, ENTREE 1 CARACTERE.
CPI KAROND < FIN DE LISTE ???
JE $ < OUI, S T O P...
ADRI -HZERO,A < DECODAGE BINAIRE.
JAL $ < E R R E U R !!!
CPI BASE10-Z < CHIFFRE DECIMAL ???
JLE YOOP3 < OUI.
ADRI -HA+HNEUF+Z,A < DECODAGE SUITE.
CPI BASE16-Z < VALIDATION...
JG $ < E R R E U R !!!
YOOP3: EQU $
SCRS NBITCX
SCLD NBITCX < CONCTENATION DANS A.
ADRI -I,Y < DECOMPTAGE DES 4 CHIFFRES.
CPZR Y < FIN ???
JG YOOP2 < NON, ENCORE AU MOINS 1...
STB O,W < OUI, RANGEMENT 1 MOT,
ADRI P,W < PROGRESSION ADRESSE MOT...
JMP YOOP1 < ET C'EST REPARTI...
:F
:F
< <<'SISP CMS5 BOOT VISU'
ED'SISP CMS5 DMKDEF'
IN0
NLS
<
<
< S I S P C M S 5 D M K D E F :
<
<
LST
DC KTDEFS < AUTORISATION DES TESTS DE 'TDEFS'.
:F
:F
< <<'SISP CMS5 DKMDEF'
ED'SISP CMS5 DOL1'
IN0
NLS
<
<
< S I S P C M S 5 D O L 1 :
<
<
< FONCTION :
< CETTE PROCEDURE SAUVEGARDE
< LE "$" COURANT DANS 'DOLAR2',
< ET REPOSITIONNE LE "$" EN
< MEMOIRE BASSE ('DOLAR1').
<
<
DOLAR2: VAL $-ZERO
IF MEMORY*UMEM-DOLAR2,XEIF%1,XEIF%1,
IF E R R E U R D ' I M P L A N T A T I O N
XEIF%1: VAL ENDIF
XWORK: VAL DOLAR1-DOLAR2
LST
$EQU $+XWORK <<<<< MEMOIRE BASSE
:F
:F
< <<'SISP CMS5 DOL1'
ED'SISP CMS5 DOL2'
IN0
NLS
<
<
< S I S P C M S 5 D O L 2 :
<
<
< FONCTION :
< CETTE PROCEDURE SAUVEGARDE
< LE "$" COURANT DANS 'DOLAR1',
< ET REPOSITIONNE LE "$" EN
< MEMOIRE HAUTE ('DOLAR2').
<
<
DOLAR1: VAL $-ZERO
IF MEMORY*UMEM-DOLAR1,,,XEIF%1
IF E R R E U R D ' I M P L A N T A T I O N
XEIF%1: VAL ENDIF
XWORK: VAL DOLAR2-DOLAR1
LST
$EQU $+XWORK <<<<< MEMOIRE HAUTE
:F
:F
< <<'SISP CMS5 DOL2'
ED'SISP CMS5 DSEC'
IN0
NLS
<
<
< S I S P C M S 5 D S E C :
<
<
LST
<
<
< F O R M A T ' P S T S ' :
<
<
DSEC
PSTS: EQU $
SA: WORD K
SB: WORD K
SX: WORD K
SY: WORD K
SC: WORD NIL
SL: WORD NIL
SW: WORD NIL
SK: WORD NIL
SP: WORD NIL
SS: WORD K
SSLO: WORD NIL
SSLE: WORD NIL
XLPSTS:: VAL $-PSTS < LONGUEUR D'UNE 'PSTS'.
<
<
< F O R M A T ' P S T H ' F O R M A T ' I C ' :
<
<
DSEC
PSTH: EQU $
HC: WORD NIL
HK: WORD NIL
HP: WORD NIL
HS: WORD K
LPSTH:: VAL $-PSTH < LONGUEUR D'UNE 'PSTH'.
XICSA0:: VAL K < VALEUR INITIALE DE 'ICSAV'...
ICSAV: WORD XICSA0 < INDICATEUR DE SAUVEGARDE.
LONGIC:: VAL $-PSTH < LONGUEUR D'UN 'IC'.
:F
:F
< <<'SISP CMS5 DSEC'
ED'SISP CMS5 FTHDEB'
IN0
NLS
<
<
< S I S P C M S 5 F T H D E B :
<
<
LST
PAGE
<
<
< F A U X P R O L O G U E D E T A C H E H A R D W A R E :
<
<
< NOTA :
< ON L'APPELLE "FAUX PROLOGUE"
< CAR EN EFFET, ON NE GENERE PAS
< LE SYMBOLE 'THXX', AINSI QUE LE
< CODE DE MASQUAGE GENERAL DES
< INTERRUPTIONS. IL EST UTILISE
< PAR LE DEFAUT SECTEUR...
<
<
< PARAMETRE D'ASSEMBLAGE :
< NEANT...
<
<
PSR A,B,X,Y < SAUVEGARDE A,B,X,Y...
PSR L,W < ...L,W DE LA TACHE INTERROMPUE.
USE C,PSTH < TEMPORAIREMENT! RAPPELONS QUE
< LE 'C' DE NOTRE 'PSTH' BASE
< NOTRE 'IC'.
< ET RAPPELONS QUE 'PSTH' ET 'IC'
< UTILISENT LA MEME 'DSEC'.
< ET 'PSTH' UTILISENT LA MEME DSEC
USE L,COM+DEPCS < POUR RAISONS D'ASSEMBLAGE...
IC ICSAV
LR C,L < L BASE LE 'IC' DE NOTRE TACHE.
CALL #SISP CMS5 BASE C#
USE C,COM+DEPCS
CALL #SISP CMS5 PSRSLO#
< SAVE (SLO,SLE) DE LA TACHE INTERROMPUE.
PSR L < SAUVEGARDE DE 'L', BASE DE NOTRE
< 'IC'...
USE L,PSTH < PEUT ETRE UTILE...
:F
:F
< <<'SISP CMS5 FTHDEB'
ED'SISP CMS5 GENPIL1'
IN0
NLS
<
<
< S I S P C M S 5 G E N P I L 1 :
<
<
< FONCTION :
< CETTE PROCEDURE GENERE UNE
< PILE EN MEMOIRE HAUTE, PUIS
< REPOSITIONNE LE "$" EN MEMOIRE
< BASSE.
<
<
< PARAMETRES :
< XWPILE=LONGUEUR-MOTS DE LA PILE.
<
<
LST
CALL #SISP CMS5 DOL2#
@@
CALL #SISP CMS5 GENPIL2#
CALL #SISP CMS5 DOL1#
:F
:F
< <<'SISP CMS5 GENPIL1'
ED'SISP CMS5 GENPIL2'
IN0
NLS
<
<
< S I S P C M S 5 G E N P I L 2 :
<
<
< FONCTION :
< CETTE PROCEDURE GENERE LA
< PARTIE "UTILE" D'UNE PILE
< EN Y IMPLEMENTANT LE "$",
< CE QUI PERMET DE CONNAITRE
< A POSTERIORI CE QUI AURA
< ETE UTILISE...
<
<
< PARAMETRE :
< XWPILE=LONGUEUR-MOTS DEMANDEE POUR LA PILE.
<
<
XWOR%7: VAL D < CONSTANTE LOCALE.
LST
DO XWPILE-XWOR%7
WORD $ < AFIN DE CONNAITRE LE STRICT MINIMUM...
NLS
XXPILI: @
XWOR%1: VAL KOLTED=FMASK+KOL0=FVAL+KOLTEF=FMASK+KOL1=FVAL
XWOR%2: VAL KOLC=FMASK+KDP=FVAL?FCTES
XWOR%5: VAL MSYMBI=FMASK+KOL0=FVAL+MSYMBL=FMASK+XWOR%1=XWOR%2=FVAL
XWOR%3: VAL XWOR%5=FCSYMT < TEST DE L'EXISTENCE DE 'XXPILI' ???
IF XWOR%3,XEIF%,,XEIF%
XWOR%6: VAL $-ZERO < SAUVEGARDE DU '$'...
<*******************************************************************************
WORD ZERO+D < LA VALEUR GENEREE SERA 'NIL' SI L'ON
XWOR%4: VAL '0000000@@@@ < SE SITUE DANS UNE 'DSEC' : RECUPERATION..
<*******************************************************************************
XWOR%6: VAL $-ZERO-XWOR%6
$EQU $-XWOR%6 < ANNULATION DU CODE GENERE...
XWOR%6: VAL NIL-ZERO < ABSOLUTISATION DE 'NIL'.
IF XWOR%4-XWOR%6,,XEIF%9,
LST
IF ATTENTION : ON N'EST PAS DANS UNE 'DSEC', ET
IF 'XXPILI' N'A PAS ENCORE ETE DEFINI !!!
NLS
XEIF%9: VAL ENDIF
IF XWOR%4-XWOR%6,XEIF%9,,XEIF%9
LST
DO XXPILJ
WORD XXDEF0
NLS
XEIF%9: VAL ENDIF
XEIF%: VAL ENDIF
IF XWOR%3,,XEIF%,
LST
DO XXPILI
WORD XXDEF0 < POUR LE DEFAUT SECTEUR !!!
NLS
XEIF%: VAL ENDIF
LST
DO XWOR%7
WORD XXBAC0 < INDICATEUR DE SOMMET DE LA PILE...
:F
:F
< <<'SISP CMS5 GENPIL2'
ED'SISP CMS5 IC'
IN0
NLS
<
<
< S I S P C M S 5 I C :
<
<
XWOR%1: VAL XWKNIV>DGNS
LST
IC@@: EQU $
CALL #SISP CMS5 ICPSTH#
WORD XICSA0 < ICSAV
:F
:F
< <<'SISP CMS5 IC'
ED'SISP CMS5 ICPSTH'
IN0
NLS
<
<
< S I S P C M S 5 I C P S T H :
<
<
XWOR%1: VAL XWKNIV>DGNS
LST
WORD IC@@ < C POINTE SUR L'INTERRUPT-
< CONTEXT LUI-MEME, CELA POUR
< PERMETTRE LE POSITIONNEMENT DE
< ICSAV EN PROLOGUE DE TACHE HARD
< SANS TOUCHER AUX REGISTRES DE
< LA TACHE INTEROMPUE N'AYANT PAS
< PARTICIPE AUX CHANGEMENTS DE CONTEXTES.
NLS
IF XWKNIV-NUMDEF,,XEIF%2,
XWOR%1: VAL XWKNIV
LST
WORD PILTH@ < K,
NLS
XEIF%2: VAL ENDIF
IF XWKNIV-NUMDEF,XEIF%2,,
XWOR%1: VAL XWKNIV
LST
WORD PLTH@@ < K,
NLS
XEIF%2: VAL ENDIF
XWOR%1: VAL XWKNIV>DGNS
LST
WORD TH@@ < P,
WORD SMST < S.
XWKNIV: VAL XWKNIV+I < NIVEAU HARDWARE SUIVANT (SI EXISTE...).
:F
:F
< <<'SISP CMS5 ICPSTH'
ED'SISP CMS5 IREST'
IN0
NLS
<
<
< S I S P C M S 5 I R E S T :
<
<
LST
LYI -YENA < A PRIORI, ON SUPPOSE QU'IL N'Y
< AURA PAS A SIMULER D'ACTIVATION
< DE 'TACHE HARDWARE'...
IF YENA-K,,,XEIF%
IF A T T E N T I O N : L'ADRESSE 'YENA' EST MAUVAISE !!!
XEIF%: VAL ENDIF
LA TYPDEF < ACCES AU TYPE DE LA TACHE
< INTERROMPUE PAR L'EVENTUEL
< DEFAUT SECTEUR.
CPI TYPTH < S'IL S'AGIT D'UNE 'TACHE HARDWARE',
< IL FAUT LAISSER LES INTERRUPTIONS
< MASQUEES, AFIN QUE LA TACHE 'HARDWARE'
< REPRENNE LA MAIN IMMEDIATEMENT, DANS
< UN CONTEXTE IDENTIQUE A CELUI QU'ELLE
< POSSEDAIT LORSQU'ELLE FUT INTERROMPUE
< DANS 'TDEFS'...
JE REST%9 < ET OUI, C'EST UNE 'TACHE HARDWARE',
< IL FAUT DEMASQUER LES INTERRUPTIONS.
<
< CAS DES TACHES 'SOFTWARES' (OU BIEN
< DES TACHES 'HARDWARES' ENCORE INTER-
< RUPTIBLES, C'EST-A-DIRE AVANT LE
< MASQUAGE DES INTERRUPTIONS) :
<
LA MKDEF < NON, C'ETAIT UNE 'TACHE SOFTWARE',
< ALLONS VOIR LE MOT 'MKDEF' :
< ('MKDEF')='SMASK0' : LES INTERRUPTIONS
< N'ETAIENT PAS MASQUEES AU MOMENT DU
< DEFAUT SECTEUR.
< PAR CONTRE SI 'MKDEF' EST SUPERIEUR
< A 'SMASK0', ALORS ELLES L'ETAIENT...
CPI SMASK0
JG REST%5 < INTERRUPTIONS MASQUEES...
LYI K < LORSQUE LES INTERRUPTIONS SONT A
< DEMASQUER, ON FORCE L'EXECUTION
< D'UN 'ACTD', AFIN DE PRENDRE EN
< COMPTE DES 'IPI' EMIS ET PRIS EN
< COMPTE PAR LA MICRO-MACHINE MAIS
< POUR LESQUELS LE DEFAUT SECTEUR EST
< APPARU AVANT QUE LA TACHE 'ALARME'
< NE SE MASQUE ; UN 'IPI' SITUE A
< LA FIN DE CETTE SEQUENCE N'EST ALORS
< PAS SUFFISANT, CAR EN EFFET LA BOITE
< AUX LETTRES DU PROCESSEUR A ETE
< REMISE A '0' AVANT LE DEFAUT SECTEUR...
JMP REST%2 < INTERRUPTIONS DEMASQUEES...
<
< CAS DES TACHES 'HARDWARES' INTERROMPUES DANS 'TDEFS' :
<
REST%9: EQU $ < CAS DES 'TACHES HARDWARES'.
LA IDEDEF < (A)=NUMERO DE LA 'TACHE HARDWARE',
LYI NTH0 < A PRIORI, ON SUPPOSE QU'IL
< S'AGIT DE LA TACHE ALARME ('0').
< EST-CE LA TACHE ALARME ?
JAE REST%5 < OUI, SA REACTIVATION EST SIMPLE...
< (DE PLUS ON VA LAISSER LES INTER-
< RUPTIONS MASQUEES...)
XWORK7: VAL S < AMPLITUDE DU DECALAGE...
CPI BITSIG+XWORK7
JG REST%4 < OK, LA REACTIVATION VA BIEN SE PASSER.
BSR ASYSER < IL NE S'AGIT PAS A PROPREMENT PARLER
< D'UNE ERREUR SYSTEME... MAIS LA REACTI-
< VATION VA MAL SE PASSER CAR LA MICRO-
< MACHINE FAIT UN DECALAGE ARITHMETIQUE
< ET NON PAS LOGIQUE SUR LE CONTENU DE 'X'
< QUEL SCANDALE !!!
REST%4: EQU $
LR A,X < NON, METTONS DANS 'X' SON NUMERO.
LAI K < ET GENERONS UN MASQUE DE MISE
< DE MISE A JOUR DU REGISTRE 'HV'.
SBT NBITAB-XWORK7-TH0,X
< (ON FAIT '-1', CAR LE REGISTRE
< 'H' RECEVRA LE CONTENU DE 'X'
< DECALE D'UNE UNITE A DROITE, IL
< FAUT DONC FAIRE UN DECALAGE D'UNE
< UNITE A GAUCHE AVANT...
LR A,X < (X)=MASQUE DE MISE A JOUR DE 'HV'
< DECALE D'UNE UNITE A GAUCHE.
LYI YENA < AFIN DE SIMULER UNE INTERRUPTION
< SUR LE NIVEAU CORRESPONDANT...
JMP REST%5 < VERS LA SIMULATION DE L'INTERRUPTION,
< MAIS EN LAISSANT LES VRAIES INTER-
< RUPTIONS MASQUEES...
REST%2: EQU $
LAI K < INTERRUPTIONS NON MASQUEES : IL
SBT IOM < FAUT DONC DEMASQUER 'IOM',
SBT IPM < ET 'IPM'.
JMP REST%6 < VERS LE DEMASQUAGE DE 'IOM' ET 'IPM'.
REST%5: EQU $
LAI K < LES INTERRUPTIONS ETAIENT MASQUEES,
< IL FAUT DONC QU'ELLES LE RESTENT...
REST%6: EQU $
SBT LCM < DANS TOUS LES CAS, ON DEMASQUE 'LCM',
SBT V < ET ON REINITIALISE LES
SBT C < INDICATEURS 'V' ET 'C'.
#@PSR A < #SISP CMS5 KREG#
LAI -TYPTS-TYPTH
STA TYPDEF < REINITIALISATION DE 'TYPDEF'
LAI -NMTS-NMTH
STA IDEDEF < ET DE 'IDEDEF'.
STZ MKDEF < AVANT LE DEMASQUAGE EVENTUEL DES
< INTERRUPTIONS, ON REINITIALISE
< 'MKDEF' AUTORISANT AINSI UN DEFAUT
< SECTEUR A APPARAITRE IMMEDIATEMENT !!!
STZ DEFOK < INDICATION DE FIN DE TRAITEMENT
< DU DEFAUT SECTEUR...
LA SC
LR A,C < RESTAURATION DE LA BASE 'C'.
< (MAINTENANT QU'ON N'EN A PLUS BESOIN)
PLR A
<
< REACTIVATION EVENTUELLE D'UNE 'TACHE
< HARDWARE' INTERROMPUE PAR LE DEFAUT
< SECTEUR : CETTE REACTIVATION, ETANT
< DONNE LA NON-INTERRUPTIBILITE DES
< 'TACHES HARDWARES' (SAUF AU DEFAUT
< SECTEUR), NE PORTE QUE SUR UNE SEULE
< TACHE ; S'IL S'AGIT DE LA TACHE D'ALARME,
< IL SUFFIT DE FAIRE UN 'ACTD', LE
< CHAMP 'MALARM' ETANT REGENERE PAR
< 'TDEFS', PAR CONTRE POUR LES AUTRES
< 'TACHE HARDWARES', IL FAUT SE BRANCHER
< DANS LE MICRO-PROGRAMME AU MODULE
< DE CHANGEMENT DES CONTEXTES PARTIELS,
< ET DE LA MISE A JOUR DU REGISTRE
< 'HV'...
< ON NOTERA AVEC ATTENTION QUE LES INTERRUPTIONS
< SONT LAISSEES A L'ETAT MSAQUEES PAR LE
< 'RESTART' AFIN QUE LA TACHE 'HARDWARE' SOIT
< CONTENTE DU CONTEXTE QU'ON LUI FOURNIT...
< A T T E N T I O N : DERRIERE LE 'ROMB',
< OU BIEN L''ACTD', LES INTERRUPTIONS SE
< TROUVENT DEMASQUEES PAR L''ACQ' QUI TER-
< MINE CHAQUE 'TACHE HARDWARE', MAIS CELA
< N'A AUCUNE IMPORTANCE ; EN EFFET D'UNE
< MANIERE GENERALE SI UNE 'TACHE HARDWARE'
< EST ACTIVE C'EST QUE LES INTERRUPTIONS
< N'ETAIENT PAS MASQUEES LORS DE SON APPEL ;
< LA SEULE EXCEPTION EST LA TACHE ALARME ('0')
< A L'EXCEPTION DU TRAITEMENT DES 'IPI' ;
< MAIS QU'IL Y AIT ALORS DEFAUT SECTEUR
< OU PAS, LES INTERRUPTIONS SE TROUVENT
< DEMASQUEES APRES L'ALARME, DONC IL EST
< LOGIQUE LORS DU 'RESTART' DE FAIRE DE
< MEME...
<
CPZR Y < Y-A-T'IL UNE REACTIVATION DE
< 'TACHE HARDWARE' ???
JL REST%1 < NON, C'EST UNE 'TACHE SOFTWARE'
< QUI A ETE INTERROMPUE...
JG REST%3 < OUI, ET CE N'EST PAS LA TACHE ALARME.
ACTD < OUI, REACTIVATION DE LA TACHE ALARME ;
< NOTONS QUE CET 'ACTD' ECRASE LE
< CHAMP 'MALARM' MAIS QUE CE DERNIER
< SERA RESTAURE AVANT DE SORTIR DE
< 'TDEFS'...
JMP REST%1
REST%3: EQU $
ROMB < ET ON SIMULE UNE INTERRUPTION SUR
< LE NIVEAU CORRESPONDANT ; ON A :
< (Y)=ADRESSE DU MICRO-PROGRAMME DE
< CHANGEMENT DE CONTEXTES PARTIELS,
< (X)=MASQUE DECALE D'UNE UNITE A GAUCHE
< A SUPERPOSER A 'HV'.
REST%1: EQU $
RST < REMISE A '0' DES INDICATEURS 'V' ET
< 'C', DEMASQUAGE DES INTERRUPTIONS 'LCM',
< AINSI QUE DES INTERRUPTIONS 'IOM' ET
< 'IPM' SI ELLES ETAIENT MASQUEES AU
< MOMENT DU DEFAUT SECTEUR.
< (CE DEMASQUAGE N'A LIEU COMME DEJA
< MENTIONNE QUE SI L'ON N'A PAS EXECUTE
< NI UN 'ROMB', NI UN 'ACTD')
LRM A < MISE EN PLACE D'UN MASQUE DE SELECTION
XWOR%1: VAL COSBT?V=FMASK(K=FCINST
WORD COSBT?C=FMASK(K?XWOR%1=FCINST
< DES INDICATEURS 'V' ET 'C' DE 'ST'.
AND SS < EN EFFET, ON NE PEUT PRENDRE
< BRUTALEMENT 'SS' COMME JE L'AVAIS
< FAIT PRECEDEMMENT : DANS LE CAS OU
< LA 'TACHE SOFTWARE' A ETE INTERROMPUE
< PAR UNE 'TACHE HARDWARE', ELLE MEME
< INTERROMPUE PAR LE DEFAUT SECTEUR, LE
< REGISTRE 'S' DE LA 'TACHE SOFTWARE'
< EST EN GENERAL RECUPERE DANS LA 'PSTH'
< DE LA 'TACHE HARDWARE', AUQUEL IL Y A
< DES BITS POSITIONNES DANS LE CHAMP
< 'MALARM', ET EN PARTICULIER LE
< FATIDIQUE BIT 'STOP'.
SST < REINIALISATION DES INDICATEURS
< 'V' ET 'C' (LES AUTRES 'MS' ET
< 'SVCS' RESTENT INCHANGES).
PLR A,X,Y < RESTAURATION DES REGISTRES 'A', 'X', 'Y'.
PLR W < RESTAURATION DE LA BASE 'W'.
IPI < ET OUI, ON ENVOIE ICI UN 'IPI' TOUT
< SEUL ; EN EFFET LE DEFAUT SECTEUR AYANT
< PU APPARAITRE DANS UNE PHASE MASQUEE
< DANS LAQUELLE UN 'IPI' A ETE EMIS,
< CE DERNIER ('IPI') A ETE PERDU ; AINSI
< POUR RECUPERER TOUS LES 'IPI' PERDUS,
< ON EN ENVOIE UN TOUT SEUL ICI
< QUI N'AURA D'EFFET QUE SUR LES PROCES-
< SEURS AYANT LEUR BOITE AUX LETTRES
< POSITIONNEE...
:F
:F
< <<'SISP CMS5 IREST'
ED'SISP CMS5 JREST'
IN0
NLS
<
<
< S I S P C M S 5 J R E S T :
<
<
< FONCTION :
< 'JREST' A ETE CREE AFIN
< DE FAIRE PROGRESSER LE
< CARACTERE "POUR-CENT" DE
< 'IREST'...
<
<
LST
CALL #SISP CMS5 IREST#
:F
:F
< <<'SISP CMS5 JREST'
ED'SISP CMS5 MKDEF'
IN0
NLS
<
<
< S I S P C M S 5 M K D E F :
<
<
LST
IC KTDEFS < INHIBITION DES TESTS DE 'TDEFS'.
:F
:F
< <<'SISP CMS5 MKDEF'
ED'SISP CMS5 PSTH'
IN0
NLS
<
<
< S I S P C M S 5 P S T H :
<
<
XWOR%1: VAL XWKNIV
LST
PSTH@@: EQU $
CALL #SISP CMS5 ICPSTH#
:F
:F
< <<'SISP CMS5 PSTH'
ED'SISP CMS5 PSTH-IC'
IN0
NLS
<
<
< S I S P C M S 5 P S T H - I C :
<
<
< FONCTION :
< CETTE PROCEDURE PERMET
< DE GENERER L'ENSEMBLE DES
< 'PSTH' ET DES 'IC' DE CMS5...
<
<
LST
PAGE
<
<
< P S T H :
<
<
< NOTA :
< LA GENERATION DES 'PSTH'
< EST SEMI-PARAMETREE ; ELLE
< DOIT ETRE MODIFIEE A LA MAIN,
< EN CAS DE CHANGEMENT DANS LA
< CONFIGURATION...
<
<
XWKNIV: VAL NTH0 < NIVEAU DE 'TH0'.
DO NMTH
CALL #SISP CMS5 PSTH#
XWKNIV: VAL NUMDEF < NIVEAU HARD '10 (DEFSEC).
CALL #SISP CMS5 PSTH#
PAGE
<
<
< ' I C ' : I N T E R R U P T C O N T E X T S :
<
<
< NOTA :
< LA GENERATION DES 'IC'
< EST SEMI-PARAMETREE, ET DOIT
< DONC ETRE MODIFIEE A LA MAIN
< EN CAS DE CHANGEMENTS DANS LA
< CONFIGURATION...
<
<
XWKNIV: VAL NTH0 < NIVEAU DE 'TH0'.
DO NMTH
CALL #SISP CMS5 IC#
XWKNIV: VAL NUMDEF < NIVEAU HARD '10 (DEFSEC).
CALL #SISP CMS5 IC#
:F
:F
< <<'SISP CMS5 PSTH-IC'
ED'SISP CMS5 RST'
IN0
NLS
<
<
< S I S P C M S 5 R S T :
<
<
LST
LAI K < CLEAR DU REGISTRE 'A' AFIN DE LIRE
RST < LE REGISTRE 'ST' DANS 'A' PAR 'RST'.
:F
:F
< <<'SISP CMS5 RST'
ED'SISP CMS5 SST'
IN0
NLS
<
<
< S I S P C M S 5 S S T :
<
<
LST
LAI K < CLEAR DU REGISTRE 'A' AFIN DE LIRE
SST < LE REGISTRE 'ST' DANS 'A' PAR 'SST'.
:F
:F
< <<'SISP CMS5 SST'
ED'SISP CMS5 THDEB'
IN0
NLS
<
<
< S I S P C M S 5 T H D E B :
<
<
< FONCTION :
< CETTE PROCEDURE PERMET
< DE GENERE LE PROLOGUE DE
< CHAQUE TACHE HARDWARE DU
< SYSTEME...
<
<
< PARAMETRE :
< XWKNIV=NIVEAU DE LA TACHE HARDWARE.
<
<
LST
PAGE
<
<
< P R O L O G U E D E T A C H E H A R D W A R E :
<
<
XWOR%: VAL XWKNIV>DGNS
TH@@: EQU $
PSR A,B,X,Y < SAUVEGARDE A,B,X,Y...
PSR L,W < ...L,W DE LA TACHE INTERROMPUE
USE C,PSTH < TEMPORAIREMENT! RAPPELONS QUE
< LE 'C' DE NOTRE 'PSTH' BASE
< NOTRE 'IC'.
< ET RAPPELONS QUE 'PSTH' ET 'IC'
< UTILISENT LA MEME 'DSEC'.
< ET 'PSTH' UTILISENT LA MEME DSEC
USE L,COM+DEPCS < POUR RAISONS D'ASSEMBLAGE...
IC ICSAV
LR C,L < L BASE LE 'IC' DE NOTRE TACHE...
CALL #SISP CMS5 BASE C#
USE C,COM+DEPCS
USE L,DCT0
<
< LE MASQUAGE GENERAL DES 'IT' N'EST UTILE QUE DANS LES
< TACHES HARD AUTRES QUE DEFSEC
<
NLS
IF XWKNIV-NUMDEF,,XEIF%,XEIF%
LST
BSR ASMMK < MASQUAGE GENERAL DES IT,
< NOTA : ON NE PEUT APPELER CETTE
< ROUTINE QU'APRES AVOIR CORRECTEMENT
< CHARGE LE REGISTRE 'C', C'EST POURQUOI
< ON REINITIALISE 'C' AVANT D'APPELER
< ASMMK!!!!
RDHV < APRES MASQUAGE DES INTERRUPTIONS, LISONS
< LE REGISTRE 'HV' DES TACHES HARDWARES
< EN COURS,
STA SAVHV < QUE L'ON SAUVEGARDE DANS 'SAVHV', QUE
< LE DEFAUT SECTEUR PEUT ECRASER (MAIS
< AVEC LA MEME VALEUR...),
IC COMPTH < ET VALIDONS LA VALEUR DE 'SAVHV'...
NLS
XEIF%: VAL ENDIF
LST
CALL #SISP CMS5 PSRSLO#
< SAVE (SLO,SLE) DE LA TACHE INTERROMPUE.
PSR L < SAUVEGARDE DE 'L', BASE DE NOTRE
< 'IC'.
USE L,PSTH < PEUT ETRE UTILE...
:F
:F
< <<'SISP CMS5 THDEB'
ED'SIS CMS5'
IN0
PAGE
<
<
< A S S E M B L A G E D E C M S 5 L E M A G N I F I Q U E :
<
<
NSDKF:: VAL '0FE0 < ET OUI, MON BON MONSIEUR, SI ON NE
< COMMUNIQUE PAS CETTE VALEUR INFERIEURE
< A LA VALEUR REELLE ('1000), LA COPIE
< DKF --> DKM SE MET EN 'WATCHDOG' SUR
< LES SECTEURS SUPERIEURS A 'NSDKF' !!!
DATE
PAGE
PAGE
CALL #SIS CMS5 1#
DATE
PAGE
PAGE
CALL #SIS CMS5 2#
DATE
PAGE
PAGE
CALL #SIS CMS5 3#
DATE
PAGE
PAGE
CALL #SIS CMS5 4#
DATE
PAGE
PAGE
CALL #SIS CMS5 5#
DATE
PAGE
PAGE
CALL #SIS CMS5 6#
DATE
PAGE
PAGE
CALL #SIS CMS5 7#
DATE
PAGE
PAGE
CALL #SIS CMS5 8#
DATE
PAGE
PAGE
CALL #SIS CMS5 9#
DATE
PAGE
PAGE
CALL #SIS CMS5 10#
DATE
PAGE
PAGE
CALL #SIS CMS5 11#
DATE
PAGE
PAGE
CALL #SIS CMS5 12#
DATE
PAGE
PAGE
CALL #SIS CMS5 13#
DATE
PAGE
PAGE
CALL #SIS CMS5 14#
DATE
PAGE
PAGE
CALL #SIS CMS5 15#
DATE
PAGE
PAGE
<
<
< S U P P R E S S I O N D E C E R T A I N E S S Y S E R S :
<
<
XSAVD1: EQU $ < SAUVEGARDE DU DOLLAR...
$EQU SYSCBM
NOP < PREMIER DEFAUT SUR LE 'CBM-TV'.
$EQU SYSCBN
NOP < DEUXIEME DEFAUT SUR LE 'CBM-TV'.
$EQU SYSCBJ
NOP < PREMIER DEFAUT SUR LE 'CBJ-TV'.
$EQU SYSCBK
NOP < DEUXIEME DEFAUT SUR LE 'CBJ-TV'.
$EQU ZZZDKM
NOP < FAUSSE FIN DE CYLINDRE SUR 'DKM'.
$EQU DEFCBM
NOP < DEFAUT SUR 'CBM' AU RESTART.
<
< RETOUR AU DOLLAR :
<
$EQU XSAVD1
XWOR%1: VAL '00000000000@ < VAUDRA '0 SI 'LST' EN COURS...
IF XWOR%1-K,XEIF%,,XEIF%
PAGE
PAGE
EST
XEIF%: VAL ENDIF
END
:F
:F
< <<'SIS CMS5'
ED'SISP CMS5 NBIT1'
IN0
NLS
<
<
< S I S P C M S 5 N B I T 1 :
<
<
< FONCTION :
< CETTE PROCEDURE GENERE
< UNE LISTE DE BITS A 1.
<
<
< PARAMETRE :
< XWORK7=NOMBRE DE BITS A 1 DANS LA LISTE.
<
<
LST
XWOR%7: VAL XWORK7 < NOMBRE DE BITS CONSECUTIFS A '1.
NTRN
XWOR%8: VAL XWOR%7/NBITMO < NOMBRE DE MOTS PLEINS.
XWOR%9: VAL XWOR%7/NBITMO(K=FCREST < NOMBRE DE BITS RESIDUELS.
TRN
IF XWOR%8,XEIF%,XEIF%,
DO XWOR%8
WORD MMOT
XEIF%: VAL ENDIF
IF XWOR%9,XEIF%,XEIF%,
XWOR%6: VAL NBITMO-XWOR%9 < NOMBRE DE BITS RESTANT A '0.
WORD BIT>XWOR%6-N)MMOT
XEIF%: VAL ENDIF
:F
:F
< <<'SISP CMS5 NBIT1'
ED'SISP CMS5 KREG'
IN0
<*******************************************************************************
@@
XWOR%1: VAL '0000000@@@@ < RECUPERATION DE L'INSTRUCTION PRECEDENTE.
<*******************************************************************************
NLS
<
<
< S I S P C M S 5 K R E G :
<
<
< FONCTION :
< CETTE PROCEDURE COMPTE
< LE NOMBRE DE REGISTRES
< EMPILES OU DEPILES ET EN
< FAIT LE CUMUL DANS 'XKREG'
< EN NEGATIF...
<
<
< UTILISATION :
< CETTE PROCEDURE DOIT S'APPELER A
< L'AIDE D'UN EOT IMPLICITE DE FACON
< A RECUPERER LE CODE DE L'INSTRUCTION
< COURANTE ; ELLE CUMULE LE NOMBRE DE
< REGISTRES EMPILES OU DEPILES DANS
< 'XKREG' EN COMPLEMENT A 2...
<
<
LST
XWOR%1: VAL XWOR%1(MOCD < ON NE CONSERVE QUE LA LISTE DES
< REGISTRES EMPILES...
XWOR%2: VAL BIT>NBITCX-N < MASQUE D'UN CHIFFRE HEXA-DECIMAL.
DO NBITMO
XWOR%1: VAL XWOR%1=K=FCPUSH-NBITMO+B)MMOT+N(XWOR%2+CORBT=FMASK+XWOR%1=FCINST
DO NBITMO
XKREG: VAL 0=FCPULL-NBITMO=FCSIGN+XKREG
:F
:F
< <<'SISP CMS5 KREG'
ED'SISP CMS5 REC'
IN
< SISGEN CMS5 PROC
RL'SISGEN CMS5 PROC''XXXX'
< SIS CMS5 1
RL'SIS CMS5 1''XXXX'
< SIS CMS5 2
RL'SIS CMS5 2''XXXX'
< SIS CMS5 3
RL'SIS CMS5 3''XXXX'
< SIS CMS5 4
RL'SIS CMS5 4''XXXX'
< SIS CMS5 5
RL'SIS CMS5 5''XXXX'
< SIS CMS5 6
RL'SIS CMS5 6''XXXX'
< SIS CMS5 7
RL'SIS CMS5 7''XXXX'
< SIS CMS5 8
RL'SIS CMS5 8''XXXX'
< SIS CMS5 9
RL'SIS CMS5 9''XXXX'
< SIS CMS5 10
RL'SIS CMS5 10''XXXX'
< SIS CMS5 11
RL'SIS CMS5 11''XXXX'
< SIS CMS5 12
RL'SIS CMS5 12''XXXX'
< SIS CMS5 13
RL'SIS CMS5 13''XXXX'
< SIS CMS5 14
RL'SIS CMS5 14''XXXX'
< SIS CMS5 15
RL'SIS CMS5 15''XXXX'
:F
:F
< <<'SISP CMS5 REC'
ED'SISP CMS5 TAB1'
IN0
NLS
<
<
< S I S P C M S 5 T A B 1 :
<
<
< FONCTION :
< CETTE PROCEDURE GENERE
< LA TABULATION STANDARD DU
< SYSTEME...
<
<
@1 1 1
XWOR%1: VAL KOLMOE=FMASK+KOL0=FVAL+KOLMOR=FMASK+KOL0+KOLON=FVAL
XWOR%2: VAL KOLF=FMASK+KOLMOV=FVAL+KOLMOL=FMASK+KOLON=FVAL
XWOR%3: VAL XWOR%1=XWOR%2 < DEPLACEMENT CARTE1 --> CARTE2.
@ASCI "'
XWOR%1: VAL KOLTED=FMASK+KOL2=FVAL+KOLTEF=FMASK+KOL3=FVAL
XWOR%2: VAL KOLF=FMASK+KOLTES=FVAL+KOLC=FMASK+KQUOTE=FVAL
XWORK1: VAL XWOR%1=XWOR%2+I < XWORK1=INDEX DE RANGEMENT COURANT.
XWORK2: VAL KOL0+KOLON < XWORK2=INDEX DE TEST DE CARTE2.
XWORK3: VAL NBITCX < XWORK3=DECOMPTEUR DE BITS DE GENERA-
< TION D'UN CHIFFRE HEXA-DECIMAL.
XWORK4: VAL 0 < XWORK4=CUMUL DE GENERATION D'UN
< CHIFFRE HEXA-DECIMAL.
DO KOLON
CALL #SISP CMS5 TAB2#
XWOR%1: VAL KOLC=FMASK+KDQ=FVAL?FCSTO
XWOR%3: VAL XWORK1=XWOR%1 < "FERMETURE" DE LA CARTE 'ASCI'...
LST
@@ < GENERATION DE LA LISTE DE TABULATION.
:F
:F
< <<'SISP CMS5 TAB1'
ED'SISP CMS5 TAB2'
IN0
NLS
<
<
< S I S P C M S 5 T A B 2 :
<
<
LST
XWOR%1: VAL XWORK2=FCGET < ACCES AU CARACTERE DE RANG (XWORK2).
XWORK2: VAL XWORK2+I < PROGRESSION DE L'INDEX CARTE2.
IF XWOR%1-KSP,XEIF%,,XEIF%
XWOR%1: VAL HZERO < LE 'SPACE' EST REMPLACE PAR "0"...
XEIF%: VAL ENDIF
XWOR%1: VAL XWOR%1=FCAB < CONVERSION BINAIRE DU CARACTERE.
XWOR%2: VAL BIT)BIT
IF XWOR%1-XWOR%2,,XEIF%,
IF XWOR%1-BIT,,XEIF%,
IF ATTENTION LA CARTE ARGUMENT CONTIENT D'AUTRES
IF CARACTERES QUE "0", "1" OU 'SPACE' !!!
XEIF%: VAL ENDIF
XWORK4: VAL XWORK4>BIT?XWOR%1 < CUMUL DU CHIFFRE HEXA-DECIMAL...
XWORK3: VAL XWORK3-I < DECOMPTE DES BITS DU CHIFFRE...
IF XWORK3,XEIF%,,XEIF%
XWORK3: VAL NBITCX < REINITIALISATION DU DECOMPTEUR.
XWOR%2: VAL XWORK4=FCBA(MOCD?FCSTO
XWOR%3: VAL XWORK1=XWOR%2 < RANGEMENT DU CHIFFRE COURANT...
XWORK1: VAL XWORK1+I < PROGRESSION DE L'INDEX DE RANGEMENT,
XWORK4: VAL 0 < REINITIALISATION DU CUMUL...
XEIF%: VAL ENDIF
:F
:F
< <<'SISP CMS5 TAB2'
ED'SISP CMS5 ASCI'
IN0
NLS
<
<
< S I S P C M S 5 A S C I :
<
<
XETI%:: EQU $ < SAUVEGARDE DU '$' AVANT D'EXECUTER
< LA CARTE 'ASCI' ARGUMENT :
<*******************************************************************************
@@
XWOR%1: VAL '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
XWOR%2: VAL $-XETI%*NOCMO+XWOR%1-W
< XWOR%2=LONGUEUR DU MESSAGE PROPREMENT DIT
< (-W POUR EXCLURE LA LONGUEUR ELLE-MEME).
XLASCI: VAL XWOR%2 < RENVOI LA LONGUEUR DU MESSAGE...
IF XWOR%2-MBAS16,XEIF%,XEIF%,
IF ATTENTION : LA LONGUEUR EST TROP GRANDE POUR
IF SUPPORTER LE CODAGE SUIVANT 'MBAS16' !!!
XEIF%: VAL ENDIF
$EQU XETI% < RETOUR AVANT 'ASCI'...
XWOR%4: VAL KOL2
XWOR%3: VAL XWOR%4=FCGET < POUR VALIDER 'ASCI' :
IF XWOR%3-KDQ,,XEIF%,
IF ATTENTION : LA CARTE 'ASCI' EST MAUVAISE !!!
XEIF%: VAL ENDIF
XWOR%4: VAL XWOR%4+I < INDEX DU PREMIER CARACTERE SUIVANT 'KDQ':
XWOR%3: VAL XWOR%4=FCGET
IF XWOR%3-KSP,,XEIF%,
IF ATTENTION : IL FAUT LAISSER UN 'SPACE' EN TETE DE
IF 'ASCI' POUR Y METTRE LA LONGUEUR !!!
XEIF%: VAL ENDIF
XWOR%1: VAL KOLC=FMASK+HZERO?XWOR%2=FVAL?FCSTO
XWOR%8: VAL HZERO?MBAS16
XWOR%9: VAL HZERO)MBAS16
IF XWOR%8-XWOR%9,,XEIF%,
IF ATTENTION : LE CODAGE DE LA LONGUEUR EST MAUVAIS !!!
XEIF%: VAL ENDIF
XWOR%3: VAL XWOR%4=XWOR%1 < INSERTION DE LA LONGUEUR DU MESSAGE,
LST
@@ < ET ASSEMBLAGE DEFINITIF DE 'ASCI'...
:F
:F
< <<'SISP CMS5 ASCI'
ED'SISP CMS5 EXTEND'
IN0
NLS
<
<
< S I S P C M S 5 E X T E N D :
<
<
XETI%:: EQU $ < SAUVEGARDE DU '$' AVANT D'EXECUTER
< LA CARTE 'BYTE' ARGUMENT :
NTRN
XWOR%9: VAL NKEXT+NOCMO-E/NOCMO
TRN
DO XWOR%9
BYTE K;K < REINITIALISATION DE LA ZONE...
$EQU XETI% < RETOUR A L'ORIGINE DE LA CARTE 'BYTE'.
<*******************************************************************************
@@
XWOR%1: VAL '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
XWOR%2: VAL $-XETI%*NOCMO+XWOR%1-W
< XWOR%2=LONGUEUR DU MESSAGE PROPREMENT DIT
< (-W POUR EXCLURE LA LONGUEUR ELLE-MEME).
XXLEXT: VAL XWOR%2 < POUR COMMUNIQUER LA LONGUEUR...
IF XWOR%2-NKEXT+W,XEIF%,XEIF%,
IF ATTENTION : LA LONGUEUR EST TROP GRANDE POUR
IF ETRE COMPATIBLE AVEC 'NKEXT' !!!
XEIF%: VAL ENDIF
IF XWOR%2-BASE10,XEIF%,,
IF ATTENTION : LA LONGUEUR EST INCOMPATIBLE
IF AVEC UN CODAGE DECIMAL !!!
XEIF%: VAL ENDIF
$EQU XETI% < RETOUR AVANT 'BYTE'...
XWOR%4: VAL KOL2 < INDEX DU PREMIER CARACTERE :
XWOR%3: VAL XWOR%4=FCGET
IF XWOR%3-KZERO,,XEIF%,
IF ATTENTION : IL FAUT LAISSER UN 'ZERO' EN TETE DE
IF 'BYTE' POUR Y METTRE LA LONGUEUR !!!
XEIF%: VAL ENDIF
XWOR%1: VAL KOLC=FMASK+XWOR%2=FCBA(MOCD=FVAL?FCSTO
XWOR%3: VAL XWOR%4=XWOR%1 < INSERTION DE LA LONGUEUR DU MESSAGE,
LST
@@ < ET ASSEMBLAGE DEFINITIF DE 'ASCI'...
NLS
$EQU XETI%+XWOR%9 < AFIN DE GENERER DES OCTETS NULS...
LST
:F
:F
< <<'SISP CMS5 EXTEND'
ED'SISP CMS5 BYTE'
IN0
NLS
<
<
< S I S P C M S 5 B Y T E :
<
<
XETI%:: EQU $ < SAUVEGARDE DU '$' AVANT D'EXECUTER
< LA CARTE 'BYTE' ARGUMENT :
<*******************************************************************************
@@
XWOR%1: VAL '000000000@@=FCSIGN-SIGNP
<*******************************************************************************
XWOR%2: VAL $-XETI%*NOCMO+XWOR%1-W
< XWOR%2=LONGUEUR DU MESSAGE PROPREMENT DIT
< (-W POUR EXCLURE LA LONGUEUR ELLE-MEME).
IF XWOR%2-MBAS16,XEIF%,XEIF%,
IF ATTENTION : LA LONGUEUR EST INCOMPATIBLE
IF AVEC UN CODAGE SUIVANT 'MBAS16' !!!
XEIF%: VAL ENDIF
$EQU XETI% < RETOUR AVANT 'BYTE'...
XWOR%4: VAL KOL2+I < INDEX DU PREMIER CARACTERE :
XWOR%3: VAL XWOR%4=FCGET
IF XWOR%3-KSP,,XEIF%,
IF ATTENTION : IL FAUT LAISSER UN 'SPACE' EN TETE DE
IF 'BYTE' POUR Y METTRE LA LONGUEUR !!!
XEIF%: VAL ENDIF
XWOR%1: VAL KOLC=FMASK+HZERO?XWOR%2=FVAL?FCSTO
XWOR%3: VAL XWOR%4=XWOR%1 < INSERTION DE LA LONGUEUR DU MESSAGE,
LST
@@ < ET ASSEMBLAGE DEFINITIF DE 'ASCI'...
:F
:F
< <<'SISP CMS5 BYTE'
ED'SISP CMS5 GENPIL3'
IN0
NLS
<
<
< S I S P C M S 5 G E N P I L 3 :
<
<
< FONCTION :
< CETTE PROCEDURE GENERE
< UNE PILE DU TYPE "PUSH/
< PULL".
<
<
< PARAMETRE :
< XWPILE=LONGUEUR-MOTS DE LA PILE.
<
<
XWOR%1: VAL XLMPIL=K
XWOR%7: VAL XWPILE>XWOR%1 < LONGUEUR MAXIMALE DE LA PILE,
XWOR%2: VAL XLCPIL=K
XWOR%8: VAL K>XWOR%2 < LONGUEUR COURANTE (NULLE INITIALEMENT).
LST
WORD XWOR%7?XWOR%8 < POINTEUR DE LA PILE,
DZS XWPILE < ET CORPS DE LA PILE PROPREMENT DIT...
:F
:F
< <<'SISP CMS5 GENPIL3'
ED'SISP CMS5 VALITN'
IN0
NLS
<
<
< S I S P C M S 5 V A L I T N :
<
<
< FONCTION :
< CETTE PROCEDURE PERMET DE
< VERIFIER QUE DEUX 'ITN' GE-
< NERES NE SONT PAS IDENTIQUES...
<
<
< PARAMETRE :
< CUMITN=CUMUL DES 'ITN' A RAISON D'UN BIT PAR 'ITN'.
<
<
LST
XWOR%1: VAL '0@@@@ < RECUPERATION DE 'ITN' COURANT, QUI EST
< AUSSI UN SOUS-NIVEAU D'INTERRUPTION
< D'EXCEPTION...
<*******************************************************************************
IF XWOR%1-NBITMO,XEIF%,,
IF ATTENTION : LE CUMUL NE PEUT SE FAIRE SUR UN MOT !!!
XEIF%: VAL ENDIF
XWOR%2: VAL COSBT?XWOR%1=FMASK(K=FCINST
IF CUMITN(XWOR%2,,XEIF%,
IF ATTENTION : CET 'ITN' EST DEJA UTILISE !!!
XEIF%: VAL ENDIF
CUMITN: VAL CUMITN?XWOR%2 < CUMUL DU NOUVEL 'ITN'...
:F
:F
< <<'SISP CMS5 VALITN'
ED'SISP CMS5 SAVE'
IN0
DF'SVS CMS5 1'
DF'SVS CMS5 2'
DF'SVS CMS5 3'
DF'SVS CMS5 4'
DF'SVS CMS5 5'
DF'SVS CMS5 6'
DF'SVS CMS5 7'
DF'SVS CMS5 8'
DF'SVS CMS5 9'
DF'SVS CMS5 10'
DF'SVS CMS5 11'
DF'SVS CMS5 12'
DF'SVS CMS5 13'
DF'SVS CMS5 14'
DF'SVS CMS5 15'
CO'SIS CMS5 1''SVS CMS5 1'
CO'SIS CMS5 2''SVS CMS5 2'
CO'SIS CMS5 3''SVS CMS5 3'
CO'SIS CMS5 4''SVS CMS5 4'
CO'SIS CMS5 5''SVS CMS5 5'
CO'SIS CMS5 6''SVS CMS5 6'
CO'SIS CMS5 7''SVS CMS5 7'
CO'SIS CMS5 8''SVS CMS5 8'
CO'SIS CMS5 9''SVS CMS5 9'
CO'SIS CMS5 10''SVS CMS5 10'
CO'SIS CMS5 11''SVS CMS5 11'
CO'SIS CMS5 12''SVS CMS5 12'
CO'SIS CMS5 13''SVS CMS5 13'
CO'SIS CMS5 14''SVS CMS5 14'
CO'SIS CMS5 15''SVS CMS5 15'
:F
:F
< <<'SISP CMS5 SAVE'
ED'SISP CMS5 RESTAURE'
IN0
DF'SIS CMS5 1'
DF'SIS CMS5 2'
DF'SIS CMS5 3'
DF'SIS CMS5 4'
DF'SIS CMS5 5'
DF'SIS CMS5 6'
DF'SIS CMS5 7'
DF'SIS CMS5 8'
DF'SIS CMS5 9'
DF'SIS CMS5 10'
DF'SIS CMS5 11'
DF'SIS CMS5 12'
DF'SIS CMS5 13'
DF'SIS CMS5 14'
DF'SIS CMS5 15'
CO'SVS CMS5 1''SIS CMS5 1'
CO'SVS CMS5 2''SIS CMS5 2'
CO'SVS CMS5 3''SIS CMS5 3'
CO'SVS CMS5 4''SIS CMS5 4'
CO'SVS CMS5 5''SIS CMS5 5'
CO'SVS CMS5 6''SIS CMS5 6'
CO'SVS CMS5 7''SIS CMS5 7'
CO'SVS CMS5 8''SIS CMS5 8'
CO'SVS CMS5 9''SIS CMS5 9'
CO'SVS CMS5 10''SIS CMS5 10'
CO'SVS CMS5 11''SIS CMS5 11'
CO'SVS CMS5 12''SIS CMS5 12'
CO'SVS CMS5 13''SIS CMS5 13'
CO'SVS CMS5 14''SIS CMS5 14'
CO'SVS CMS5 15''SIS CMS5 15'
:F
:F
< <<'SISP CMS5 RESTAURE'
ED'SISP CMS5 DELETE'
IN0
DF'SVS CMS5 1'
DF'SVS CMS5 2'
DF'SVS CMS5 3'
DF'SVS CMS5 4'
DF'SVS CMS5 5'
DF'SVS CMS5 6'
DF'SVS CMS5 7'
DF'SVS CMS5 8'
DF'SVS CMS5 9'
DF'SVS CMS5 10'
DF'SVS CMS5 11'
DF'SVS CMS5 12'
DF'SVS CMS5 13'
DF'SVS CMS5 14'
DF'SVS CMS5 15'
:F
:F
< <<'SISP CMS5 DELETE'
ED'SISP CMS5 PSRSLO'
IN0
NLS
<
<
< S I S P C M S 5 P S R S L O :
<
<
LST
RDOE
PSR A,B < SAUVEGARDE DE (SLO,SLE) COURANT.
:F
:F
< <<'SISP CMS5 PSRSLO'
ED'SISP CMS5 PLRSLO'
IN0
NLS
<
<
< S I S P C M S 5 P L R S L O :
<
<
LST
PLR A,B
WOE < RESTAURATION DE (SLO,SLE).
:F
:F
< <<'SISP CMS5 PLRSLO'
ED'SISP CMS5 PAGE0'
IN0
NLS
<
<
< S I S P C M S 5 P A G E 0 :
<
<
LST
LRM A,B
WORD SO < (A)='SLO' DE LA PAGE 0,
WORD SE < (B)='SLE) DE LA PAGE 0.
WOE < ET POSITIONNEMENT SUR LA PAGE 0 (DE 32K).
:F
:F
< <<'SISP CMS5 PAGE0'
ED'SISP CMS5 W ZERO'
IN
NLS
<
<
< S I S P C M S 5 W Z E R O :
<
<
XWOR%1: VAL '1234
XWOR%2: VAL XWOR%1)XWOR%1
IF ZERO+XWOR%2-ZERO,,XEIF%,
IF ATTENTION : LA MISE DE 'ZERO' DANS 'W' EST IDIOTE !!!
XEIF%: VAL ENDIF
LST
EORR W,W < (W)=BASE DE LA MEMOIRE DEBANALISEE.
:F
:F
< <<'SISP CMS5 W ZERO'
ED'SISP CMS5 W TRACE'
IN
NLS
<
<
< S I S P C M S 5 W T R A C E :
<
<
XWOR%1: VAL '1234
IF XWOR%1)XWOR%1-K,,XEIF%,
IF ATTENTION : LA MISE A ZERO DE 'W' EST IDIOTE !!!
XEIF%: VAL ENDIF
LST
EORR W,W < (W)=0...
:F
:F
< <<'SISP CMS5 W TRACE'
ED'SISP CMS5 BASE C'
IN0
NLS
<
<
< S I S P C M S 5 B A S E C :
<
<
LST
LRM C
WORD COM+DEPCS < 'C' EST LA BASE GENERALE DU COMMON
< DE CMS5.
:F
:F
< <<'SISP CMS5 BASE C'
ED'SISP CMS5 GEN DEF'
IN0
NLS
<
<
< S I S P C M S 5 G E N D E F :
<
<
< FONCTION :
< CETTE PROCEDURE CREE INCRE-
< MENTALEMENT LE FICHIER
< 'SIP DEFINITION CMS5' CONTE-
< NANT LA DEFINITION DES DIFFE-
< RENTS SYMBOLES UTILISES PAR
< LES PROCESSEURS-SYSTEME...
<
<
XWOR%1: VAL KOLMOE=FMASK+KOL0=FVAL < EMETTEUR,
XWOR%2: VAL KOLMOR=FMASK+KOL0+KOLON=FVAL < RECEPTEUR,
XWOR%3: VAL FCMOV?KOLON
XWOR%4: VAL XWOR%1?XWOR%2=XWOR%3 < MISE DE LA CARTE ARGUMENT EN CARTE
< 'CD2'...
@:F;:F;:F;
XWOR%1: VAL KOLMOE=FMASK+KOL1=FVAL < EMETTEUR,
XWOR%2: VAL KOLMOR=FMASK+KOL0+KOLON+KOLON=FVAL < RECEPTEUR,
XWOR%4: VAL XWOR%1?XWOR%2=XWOR%3 < MISE DE LA FERMETURE DU FICHIER
< EN CARTE 'CD3'...
;ED @'SIP DEFINITION CMS5';IF ;
< MISE DE L'EDITION DU FICHIER QUE
< L'ON MET A JOUR EN CARTE 'CD1'...
EE
LST
:F
:F
< <<'SISP CMS5 GEN DEF'
ED'SISP CMS5 GEN CTE'
IN0
NLS
<
<
< S I S P C M S 5 G E N C T E :
<
<
< FONCTION :
< CETTE PROCEDURE CREE INCRE-
< MENTALEMENT LE FICHIER
< 'SIP DEFINITION CTTE' CONTENANT
< LA DEFINITION DE DIFFERENTS SYM-
< BOLES UTILISES PAR LES PROCES-
< SEURS-SYSTEME...
<
<
XWOR%1: VAL KOLMOE=FMASK+KOL0=FVAL < EMETTEUR,
XWOR%2: VAL KOLMOR=FMASK+KOL0+KOLON=FVAL < RECEPTEUR,
XWOR%3: VAL FCMOV?KOLON
XWOR%4: VAL XWOR%1?XWOR%2=XWOR%3 < MISE DE LA CARTE ARGUMENT EN CARTE
< 'CD2'...
@:F;:F;:F;
XWOR%1: VAL KOLMOE=FMASK+KOL1=FVAL < EMETTEUR,
XWOR%2: VAL KOLMOR=FMASK+KOL0+KOLON+KOLON=FVAL < RECEPTEUR,
XWOR%4: VAL XWOR%1?XWOR%2=XWOR%3 < MISE DE LA FERMETURE DU FICHIER
< EN CARTE 'CD3'...
;ED @'SIP DEFINITION CTTE';IF ;
< MISE DE L'EDITION DU FICHIER QUE
< L'ON MET A JOUR EN CARTE 'CD1'...
EE
LST
:F
:F
< <<'SISP CMS5 GEN CTE'
ED'SISP CMS5 CHECK'
IN0
NLS
<
<
< S I S P C M S 5 C H E C K :
<
<
< FONCTION :
< CETTE PROCEDURE GENERE
< LES CHAINAGES INTER-BLOCS
< DE SIMULATION DES "RAM"/"ROM"...
<
<
LST
WORD CHAINK < CHAINAGE DES BLOCS "ROM"-"RAM"...
NLS
IF ICHAIN-EXIST,,XEIF%,
LST
WORD NILK < EMPLACEMENT DU CHECK-SUM DU BLOC "RAM"
< PRECEDENT.
NLS
XEIF%: VAL ENDIF
ICHAIN: VAL -ICHAIN < BASCULE DU GENERATEUR DU CHECK-SUM, LES
< BLOCS "RAM" ET "ROM" ETANT INTERCALES...
LST
:F
:F
< <<'SISP CMS5 CHECK'
Copyright © Jean-François COLONNA, 2017-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2017-2024.