IDP "COMP - RELEASE 15/12/1978"
ORDI: @
IF 4='F700,X100,,X100
ORDI: VAL "T"
X100: VAL 0
IF ORDI-"S",,X100,
ORDI: VAL "T"
X100: VAL 0
IF ORDI-"T",X100,,X100
QUANTA: VAL 1
IDP "VERSION T1600"
X100: VAL 0
IF ORDI-"S",X100,,X100
QUANTA: VAL 3
IDP "VERSION SOLAR"
X100: VAL 0
IDP "SERGE SOUZEAU"
PAGE
<
<
< PROGRAMME POUR COMPARER DEUX FICHIERS
<
<
TABLE
ZERO: EQU $
DZS '10
WORD DEB
<
< ENTREE DANS LE PROCESSEUR
<
WORD DEBUT
PROG
DEB: EQU $
LRP L
BR -1,L
PAGE
<
< BUFFERS
<
BUF1: DZS 128*QUANTA
BUF2: DZS 128*QUANTA
<
< ASSIGN
<
ASSF1: ASCI "!ASSIGN 3=O,"
NMF1: DZS 10
ASSF2: ASCI "!ASSIGN 4=O,"
NMF2: DZS 10
CLOS: ASCI "!CLOSE"
BYTE '04;0
AROND:: VAL '40
DEBUG: ASCI "!M;!DEBUG;"
BYTE AROND;","
DEBUG1: ASCI "XYZT;M;;"
BYTE AROND;","
DEBUG2: ASCI "XYZT;M;;"
BYTE '04;0
<
< MESSAGES
<
NMFS: BYTE 15;'6D
ASCI "NOM DU FICHIER"
NMFS1: BYTE 3;"1"
ASCI " ="
NMFS2: BYTE 3;"2"
ASCI " ="
ETOI: BYTE 21;'6D
ASCI "********************"
ERR: BYTE 42;'6D
ASCI "NOM DE FICHIER ERRONNE OU CLE INEXISTANTE"
FICH: BYTE 18;'6D
ASCI "LES FICHIERS SONT"
IDEN: BYTE 11;" "
ASCI "IDENTIQUES"
DIFF: BYTE 11;" "
ASCI "DIFFERENTS"
MSIBO: BYTE 59;'6D
ASCI "FICHIERS SOURCES,BINAIRES,"
ASCI "DUMP OU QUELCONQUES (S/B/D/Q) = "
CLE1: BYTE 15;'6D
ASCI "CLE ENTIERE = "
CLE2: BYTE 16;'6D
ASCI "CLE DECIMALE = "
LGBL: BYTE 27;'6D
ASCI "NOMBRE DE MOTS PAR BLOC = "
NOSC: BYTE 26;'6D
ASCI "NUMERO DU SECTEUR = "
NSCT: DZS 3
ENER: BYTE 27;'6D
ASCI "ERREUR EN '"
ENR1: DZS 2
ASCI " ET '"
ENR2: DZS 2
PAGE
<
< COMMON
<
COMMON
CCI: WORD 1
OPEN1: WORD '0305 < OPEN FICHIERS
DZS 2
OPEN2: WORD '0405
DZS 2
ABUF1: WORD BUF1,X < RELAIS BUFFERS FICHIER
ABUF2: WORD BUF2,X
ABUF10: WORD BUF1
ABUF20: WORD BUF2
READ1: WORD '0308 < LECTURE FICHIERS
WORD BUF1-ZERO*2
WORD 256*QUANTA
READ2: WORD '0408
WORD BUF2-ZERO*2
WORD 256*QUANTA
ECR: WORD '0202 < ECRITURE MESSAGES
DZS 2
LECT: WORD '0101 < LECTURE D'UNE REPONSE
DZS 2
APCCI: WORD '0002 < APPEL CCI INTERPRETATIF
DZS 1
WORD 80
DIX: WORD 10 < POUR CONVERSION DES CLES
LGBLOC: WORD 128*QUANTA < LONGUEUR D'UN BLOC
NMOTPB: DZS 1 < LONGUEUR UTILE DU BUFFER
AASSF1: WORD ASSF1 < RELAIS MESSAGES
ANMF1: WORD NMF1
AASSF2: WORD ASSF2
ANMF2: WORD NMF2
ACLOS: WORD CLOS
ANMFS: WORD NMFS
ANMFS1: WORD NMFS1
ANMFS2: WORD NMFS2
AETOI: WORD ETOI
AERR: WORD ERR
AFICH: WORD FICH
AIDEN: WORD IDEN
ADIFF: WORD DIFF
AMSIBO: WORD MSIBO
ACLE1: WORD CLE1
ACLE2: WORD CLE2
ALGBL: WORD LGBL
ANOSC: WORD NOSC
ANSCT: WORD NSCT-ZERO*2
AENER: WORD ENER
AENR1: WORD ENR1-ZERO*2
AENR2: WORD ENR2-ZERO*2
SECR: WORD SPSECR < RELAIS SSP
SLEC: WORD SPSLEC
SNUM: WORD SPSNUM
SCCI: WORD SPSCCI
SERR: WORD SPSERR
HEXA: WORD SPHEXA
DECI: WORD SPDECI
ENT: DZS 3 < BUFFER LECTURE
AENT: WORD ENT+3,X < RELAI BUFFER DE LECTURE
AZER: WORD ZERO,X < RELAI DEBUT INDEXE
AD1: WORD DEBUG1-ZERO*2
AD2: WORD DEBUG2-ZERO*2
ADEBUG: WORD DEBUG < ADRESSE DE LA CARTE "!M...".
SIBO: DZS 1 < INDICATEUR DE TYPE FICHIERS :
< -1 : SOURCE,
< 0 : BINAIRE,
< +1 : DUMP/QUELCONQUES.
AE100: WORD E100 < RELAI
KSTORE: DZS 10
PAGE
<
< PROGRAMME
<
PROG
WORD CCI+'80
DEBUT: EQU $
LRP C < INITIALISATION DES BASES
LA -1,C
LR A,C
LAD KSTORE-1
LR A,K
E100: EQU $
LA ACLOS < FERMER LES FICHIERS
BSR SCCI
EORR L < INITIALISATION DU NUMERO DE SECTEUR
E101: EQU $
LA ANMFS < LIRE LE 1ER NOM
BSR SECR
LA ANMFS1
BSR SECR
LA ANMF1
LBI 20
BSR SLEC
LA AASSF1 < ESSAI D'ASSIGNATION
BSR SCCI
JE E102
BSR SERR < ERREUR
JMP E101
E102: EQU $
LA ANMFS < LIRE LE 2EME NOM
BSR SECR
LA ANMFS2
BSR SECR
LA ANMF2
LBI 20
BSR SLEC
LA AASSF2 < ESSAI D'ASSIGNATION
BSR SCCI
JE E103
BSR SERR < ERREUR
JMP E102
E103: EQU $
LA LGBLOC < INITIALISATION DE LA LONGUEUR
STA NMOTPB < UTILE D'UN BLOC
LAI -1 < DEMANDE DU TYPE
STA SIBO
LA AMSIBO
BSR SECR
LAD ENT
LBI 1
BSR SLEC
LBY ENT < ANALYSE DU TYPE
CPI "S"
JE E104
IC SIBO
CPI "B"
JE E104
IC SIBO
CPI "D"
JE E150 < TYPE "DUMP"...
CPI "Q"
JNE E103
E104: EQU $
CPZ SIBO
JE E105
JG E106
LAI 2 < TYPE SOURCE - CLE = 2.0
LBI 0
JMP E107
E105: EQU $
LAI 1 < TYPE BINAIRE - CLE = 1.0
LBI 0
JMP E107
E150: EQU $
LAI 3 < TYPE DUMP - CLEF = 3.0
LBI 0
JMP E107
E106: EQU $
LA ALGBL < TYPE QUELCONQUE - LIRE LA
BSR SNUM < LONGUEUR UTILE D'UN BLOC
CPI 1 < SI ELLE EST <= 1, ON
JLE E118 < PREND TOUT LE BLOC
STA NMOTPB
E118: EQU $
LA ACLE1 < LIRE LES CLES
BSR SNUM
LR A,B
LA ACLE2
BSR SNUM
XR A,B
E107: EQU $
STA OPEN1+1 < POSITIONNER LES CLES
STA OPEN2+1
STB OPEN1+2
STB OPEN2+2
LAD OPEN1 < ESSAI D'OPEN
SVC 0
JNE E108
LAD OPEN2
SVC 0
JE E110
E108: EQU $
BSR SERR < ERREUR
JMP E100
E110: EQU $
LAD READ1 < LIRE LES 2 FICHIERS
SVC 0
JNE E114
CPZ &ABUF10
JL E114
LAD READ2
SVC 0
JNE E117
CPZ &ABUF20
JL E117
ADRI 1,L < COMPTER LE SECTEUR
LXI 1 < INITIALISATION POINTEUR BUFFER
E111: EQU $
CPZ SIBO < SOURCE?
JGE E113
LA &ABUF1 < OUI - FIN SECTEUR(1ER CARAC)?
SLRS 8
CPI 'FF
JNE E112
LA &ABUF2 < OUI
SLRS 8
CPI 'FF
JNE E117
JMP E110
E112: EQU $
LA &ABUF1 < FIN SECTEUR(2EME CARAC)?
ANDI 'FF
CPI 'FF
JNE E113
LA &ABUF1 < OUI
CP &ABUF2
JNE E117
JMP E110
E113: EQU $
LA &ABUF1 < COMPARER LES DEUX BUFFERS
CP &ABUF2
JNE E117
E116: EQU $
ADRI 1,X < MOT SUIVANT
LR X,A < FIN DU BUFFER?
CP NMOTPB
JL E111
JMP E110 < OUI - SUIVANT
E114: EQU $
LAD READ2 < FIN 1ER - VERIF. FIN 2EME
SVC 0
JNE E115
CPZ &ABUF20
JGE E117
E115: EQU $
LA AFICH < FICHIERS IDENTIQUES
BSR SECR
LA AIDEN
BSR SECR
LA ACLOS < FERMER LES FICHIERS
BSR SCCI
LAD CCI
SVC 0
BR AE100
E117: EQU $
LA AETOI < FICHIERS DIFFERENTS
BSR SECR
LA AFICH
BSR SECR
LA ADIFF
BSR SECR
LA AETOI
BSR SECR
LA ANSCT < SORTIE DU NUMERO DE SECTEUR
LR L,B
BSR DECI
LA ANOSC
BSR SECR
LAD &ABUF1
LR A,B
LA AENR1
BSR HEXA
LAD &ABUF2
LR A,B
LA AENR2
BSR HEXA
LA AENER
BSR SECR
LAD &ABUF1
LR A,B
LA AD1
BSR HEXA
LAD &ABUF2
LR A,B
LA AD2
BSR HEXA
LA ADEBUG
BSR SCCI < ENVOI DE "!M..." POUR APPEL DU DEBUG...
WORD '1E16 < ARRET POUR DEBUG
JMP E116
PAGE
<
< SOUS-PROGRAMME DE SORTIE DE MESSAGES
<
SPSECR: EQU $
PSR A,X,W
LR A,W < SAUVER L'ADRESSE DU MESSAGE
ADR A,A < CALCULER SON ADRESSE OCTET
ADRI 1,A
STA ECR+1 < LA PLACER DANS L'ECRITURE
LBY 0,W < RELEVER SA LONGUEUR
STA ECR+2 < LA PLACER
LAD ECR < ET ECRIRE
SVC 0
PLR A,X,W
RSR
<
< SOUS-PROGRAMME DE LECTURE D'UNE REPONSE
<
SPSLEC: EQU $
PSR A,X
ADR A,A < PLACER L'ADRESSE OCTET
STA LECT+1 < DU BUFFER DE LECTURE
STB LECT+2 < ET LA LONGUEUR DE LA LECTURE
LAD LECT < ET LIRE
SVC 0
PLR A,X
RSR
<
< SOUS-PROGRAMME DE LECTURE D'UN NOMBRE DECIMAL
<
SPSNUM: EQU $
PSR B,W
PSR A < SAUVER L'ADRESSE DU MESSAGE
SNUM1: EQU $
PLR A < IMPRIMER LE MESSAGE
PSR A
BSR SECR
LAD ENT < LIRE LE NOMBRE
LBI 6
BSR SLEC
EORR W < RESULTAT = 0
LXI -6 < ANALYSE DE 6 CHIFFRES
SNUM2: EQU $
LBY &AENT < RELEVER UN CARACTERE
CPI '0D < SI C'EST RETURN OU EOT
JE SNUM3 < C'EST LA FIN DU NOMBRE
CPI '04
JE SNUM3
ADRI -'30,A < SINON, CE DOIT ETRE UN CHIFFRE
JAL SNUM1
CPI 9
JG SNUM1
XR A,W < L'INCORPORER AU RESULTAT
MP DIX
JANE SNUM1 < ON DOIT RESTER < 32768
CPZR B
JL SNUM1
ADR B,W
JV SNUM1
JIX SNUM2 < ET CHIFFRE SUIVANT
SNUM3: EQU $
PLR A < NOMBRE FINI,LE RENDRE DANS A
LR W,A
PLR B,W
RSR
<
< SOUS-PROGRAMME D'APPEL AU CCI INTREPRETATIF
<
SPSCCI: EQU $
PSR A,X
ADR A,A < PLACER L'ADRESSE OCTET DU MESSAGE
STA APCCI+1
LAD APCCI < ET DEMANDER SON INTERPRETATION PAR LE CCI
SVC 0
PLR A,X
RSR
<
< SOUS-PROGRAMME DE SORTIE DU MESSAGE D'ERREUR
<
SPSERR: EQU $
PSR A
LA AETOI < SORTIR UNE LIGNE D'ETOILE
BSR SECR
LA AERR < LE MESSAGE D'ERREUR
BSR SECR
LA AETOI < ET UNE AUTRE LIGNE D'ETOILES
BSR SECR
PLR A
RSR
<
< SOUS-PROGRAMME D'EDITION D'UN NOMBRE EN HEXADECIMAL
< A=ADRESSE OCTET DE LA ZONE RECEPTRICE
< B=NOMBRE
<
SPHEXA: EQU $
PSR A,B,X,Y
LR A,X
LYI 4
HEXA2: EQU $
LAI 0
SLLD 4
CPI 9
JLE HEXA1
ADRI 7,A
HEXA1: EQU $
ADRI '30,A
STBY &AZER
ADRI 1,X
ADRI -1,Y
CPZR Y
JG HEXA2
PLR A,B,X,Y
RSR
<
< SOUS-PROGRAMME D'EDITION D'UN NOMBRE EN DECIMAL
< A=ADRESSE OCTET DE LA ZONE RECEPTRICE
< B=NOMBRE
<
SPDECI: EQU $
PSR A,B,X,Y
LR A,X
ADRI 4,X
LYI 5
DECI1: EQU $
LAI 0
DV DIX
XR A,B
ADRI '30,A
STBY &AZER
ADRI -1,X
ADRI -1,Y
CPZR Y
JG DECI1
PLR A,B,X,Y
RSR
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.