IDP "FORMATU: FORMATAGE DKU"
IDP "RELEASE 03/09/80"
IDP "P. FRANCONNET"
PROG
ZERO: EQU $
DZS '10 < INTERFACE AVEC LE SYSTEME.
WORD RUN
WORD ENTRY
RUN: EQU $
LRP L
BR -1,L
<
< CE PROGRAMME FORMATE LE DISPACK PLACE SUR L'UNITE DE DISQUE 'DKU'
< EN FAISANT DES DEMANDES D'ECRITURE, PISTE PAR PISTE.
<
< CHAQUE ECRITURE SE FAIT AVEC LA FONCTION '6 , C'EST-A-DIRE
< "SYNCHRONISATION SECTEUR 0" ET ECRITURE.
<
< ERREURS POSSIBLES:
<
< - ERREUR D'ECRITURE.
< - ERREUR DE LECTURE ( CAR ON RELIT POUR VERIFICATION).
< - ERREUR VALIDITE PISTE (PISTE RELUE # PISTE ECRITE).
<
QUANTA: VAL 3 < QUANTA UTILISE.
NBMPS: VAL 128 < NOMBRE DE MOTS PAR SECTEUR.
NBSPP: VAL 24 < NOMBRE DE SECTEURS PAR PISTE.
PILE: DZS 10 < PILE POUR 'K'
BUDKU: DZS NBMPS*NBSPP < BUFFER DKU (UNE PISTE ENTIERE)
BUDKUF: EQU $ < FIN BUFFER DKU
<
< MESSAGES A ENVOYER PAR LE S/P 'ENVOI'
<
M: EQU $
MIMP: BYTE '6D;"D"
ASCI "KU INACCESSIBLE !!!"
WORD 0
MDEBF: BYTE '6D;"D"
ASCI "EBUT FORMATAGE DKU"
WORD 0
MFINF: BYTE '6D;"F"
ASCI "IN FORMATAGE DKU"
WORD 0
MABC: BYTE '6D;"B"
ASCI "LOC COURANT="
MABC1: DZS 2
WORD 0
MERRE: BYTE '6D;"E"
ASCI "RREUR ECRITURE DKU"
WORD 0
MERRL: BYTE '6D;"E"
ASCI "RREUR LECTURE DKU"
WORD 0
MERRV: BYTE '6D;"E"
ASCI "RREUR VALIDITE PISTE DKU"
WORD 0
COMMON
COM: EQU $
AM: WORD M < POUR LE S/P 'ENVOI'.
AXTRAV: WORD '8000 < RELAI DE TRAVAIL.
ABUDKU: WORD BUDKU < ADRESSE MOT BUFFER DKU.
AXBUDK: WORD BUDKU-1,X < RELAI INDEXE MOT SUR BUFFER DKU.
LBUDKU: WORD BUDKUF-BUDKU < LONGUEUR MOTS BUFFER DKU.
<
AENVOI: WORD ENVOI < ENVOI D'UN MESSAGE STANDARD.
ACONVA: WORD CONVA < CONVERSION HEXADECIMAL --> ASCI.
<
DMOUT: WORD '0202 < ENVOI MESSAGE.
WORD 0
WORD 0
DMCCI: WORD '0001 < RETOUR CCI.
DMWDKU: WORD '8A02 < WRITE DKU AVEC SYNCHRO SECTEUR 0.
WORD BUDKU-ZERO*2
WORD BUDKUF-BUDKU*2
ABC: WORD 0 < ADRESSE BLOC COURANT.
ABCD: WORD '0000 < ADRESSE BLOC DEBUT.
ABCF: WORD 'FA00-1 < ADRESSE BLOC FIN.
DMRDKU: WORD '8A00 < READ DKU.
WORD BUDKU-ZERO*2
WORD BUDKUF-BUDKU*2
WORD 0
<
< DEMANDES CCI :
<
MON: ASCI "!DK S0 O"
BYTE "N";'04
MOFF: ASCI "!DK S0 OFF"
BYTE '04;0
MASS: ASCI "!ASSIGN A=DK"
BYTE "U";'04
MDASS: ASCI "!ASSIGN A="
BYTE "S";'04
DON: WORD '0002 < "!DK S0 ON"
WORD MON-ZERO*2
WORD 80
DOFF: WORD '0002 < "!DK S0 OFF"
WORD MOFF-ZERO*2
WORD 80
DASS: WORD '0002 < "!ASSIGN A=DKU"
WORD MASS-ZERO*2
WORD 80
DDASS: WORD '0002 < "!ASSIGN A=S"
WORD MDASS-ZERO*2
WORD 80
PROG
PAGE
ENTRY: EQU $
<
< INITIALISATIONS
<
LRM C,K
WORD COM+'80 < COMMON.
WORD PILE-1 < PILE.
LA ABCD < ADRESSE BLOC DEBUT.
STA ABC < ADRESSE BLOC COURANT.
LAD DASS
SVC 0 < "!ASSIGN A=DKU"...
JE E1 < OK, ON L'A...
LAI MIMP-M
BSR AENVOI < ET BIEN NON, ON LE DIT...
JMP E2 < ET ON SORT...
E1: EQU $
LAD DON < OK,
SVC 0 < "!DK S0 ON"...
JNE $ < !?!???!
LAI MDEBF-M < MESSAGE 'DEBUT DE FORMATAGE'.
BSR AENVOI
<
< BOUCLE DE LECTURE-ECRITURE-VALIDATION-INCREMENTATION.
<
FU1: EQU $
LA ABC
STA DMRDKU+3 < ADRESSE BLOC POUR LECTURE FUTURE.
LRM Y
WORD MABC1-ZERO*2
BSR ACONVA < CONVERSION ASCI BLOC COURANT.
SLLS 8 < ON N'EDITERA LE NUMERO DE BLOC COURANT
JANE FU11 < QUE DE TEMPS EN TEMPS.
LAI MABC-M < EDITION NUMERO BLOC COURANT.
BSR AENVOI
FU11: EQU $
<
< RAZ BUFFER DKU.
<
LX LBUDKU < LONGUEUR MOTS BUFFER DKU.
STZ &AXBUDK < RAZ MOT COURANT.
JDX $-1
<
< WRITE AVEC SYNCHRONISATION SECTEUR 0.
<
LAD DMWDKU
JMP $+1 < POUR '1E16 EVENTUEL.
SVC 0
JE FU2
LAI MERRE-M < MESSAGE ERREUR LECTURE.
JMP FUER < VERS TRAITEMENT D'ERREUR.
<
< LECTURE.
<
FU2: EQU $
LAD DMRDKU
JMP $+1 < POUR '1E16 EVENTUEL.
SVC 0
JE FU3
LAI MERRL-M < MESSAGE ERREUR LECTURE.
JMP FUER < VERS TRAITEMENT D'ERREUR.
<
< VALIDATION.
<
FU3: EQU $
LAI 0
LX LBUDKU < LONGUEUR BUFFER.
FU4: EQU $
OR &AXBUDK
JDX FU4
JAE FU5
LAI MERRV-M < MESSAGE ERREUR VALIDATION PISTE.
JMP FUER < VERS TRAITEMENT D'ERREUR.
<
< INCREMENTATION.
<
FU5: EQU $
LAI NBSPP/QUANTA < PAS D'INCREMENTATION ADRESSE SECTEUR.
AD ABC
STA ABC < NOUVEAU BLOC COURANT.
EOR ABCF
TBT 0
LA ABC
JC FU7
< DE MEME SIGNE.
JAL FU6
< TOUS DEUX POSITIFS.
CP ABCF
JLE FU1 < OK.
JMP FUF < FIN.
FU6: EQU $
< TOUS DEUX NEGATIFS.
CP ABCF
JLE FU1 < OK.
JMP FUF < FIN.
FU7: EQU $
< DE SIGNES DIFFERENTS.
JAGE FU1 < OK.
<
FUF: EQU $
<
< FIN DE FORMATAGE.
<
LAI MFINF-M < MESSAGE DE FIN DE FORMATAGE.
BSR AENVOI
LAD DOFF
SVC 0 < "!DK S0 OFF"...
JNE $ < ??!???!
LAD DDASS
SVC 0 < "!ASSIGN A=S"...
JNE $ < ??!??!
E2: EQU $
LAD DMCCI < RETOUR CCI
SVC 0
JMP ENTRY < VERS NOUVELLE EXECUTION.
FUER: EQU $
< TRAITEMENT D'ERREUR; ICI 'A' = ARGMENT D'APPEL S/P 'ENVOI' (MESSAGE).
BSR AENVOI < MESSAGE D'ERREUR.
LAI MABC-M < ENVOI NUMERO BLOC COURANT.
BSR AENVOI
WORD '1E16 < POUR DEBUGGING...
JMP FU1 < VERS NOUVELLE TENTATIVE.
PAGE
CONVA: EQU $
<
< S/P DE CONVERSION D'UN MOT EN ASCI
<
< ARGUMENT:
< A = MOT A TRADUIRE
< Y = ADRESSE OCTET DE RANGEMENT DU RESULTAT
<
PSR A,B,X,Y < SAUVEGARDES
<
ADRI 3,Y < ADRESSE OCTET DERNIER CHIFFRE
PSR A
LXI 4 < INIT COUNT
CONVA1: EQU $
PLR A
SLRD 4
PSR A
SLLD 4
ANDI 'F < RECUPERATION CHIFFRE HEXA
CPI '9
JLE $+2
ADRI 7,A
ADRI '30,A < CARACTERE ASCI
PSR X < SVG COUNT
LR Y,X < INDEX CHIFFRE EN COURS
STBY &AXTRAV
ADRI -1,Y < INDEX CHIFFRE SUIVANT
PLR X < RECUPERATION COUNT
JDX CONVA1
<
PLR A < A NE PAS OUBLIER !
PLR A,B,X,Y < RESTAURATIONS
RSR
PAGE
ENVOI: EQU $
<
< ENVOI D'UN MESSAGE SUR UL '02
<
< EN ENTREE
<
< A=DEPLACEMENT MOTS DU MESSAGE A ENVOYER PAR RAPPORT
< A M. TOUT MESSAGE EST DELIMITE PAR '00
<
<
< NOTA: ON A
< EN TABLE: M: EQU $+128
< MES1: ASCI "TEXTE..."
< WORD 0
< EN COMMON: AM: WORD M
< APPEL PAR: LAI MESI-M
< BSR AENVOI
<
PSR A,X
AD AM < @ MOT MESSAGE
ADR A,A < @ OCT MESSAGE
STA DMOUT+1
STZ DMOUT+2
LR A,X
ENV1: EQU $ < BOUCLE JUSQU'A DELIM '00
LBY &AXTRAV
JAE ENV2
IC DMOUT+2 < LONGUEUR='+1
ADRI 1,X
JMP ENV1
ENV2: EQU $
LAD DMOUT
SVC 0
PLR A,X
RSR
LST
NDS
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.