<***********************************************************************
<* *
<* *
<* L I N K - E D I T E U R 6 4 K :
<* *
<* LKSYS CHARGE EN ABSOLU SUR LES DISQUES
<* ELLE DEMANDE LE NUMERO DE DISQUE(2 OU 3), *
<* L'ADRESSE DE DEBUT DE CHARGEMENT, L'ADRESSE DE FIN *
<* POUR VERIFICATION, ET UNE ADRESSE DE TRANSLATION *
<* PERMETTANT UN CHARGEMENT DECALE. *
<* LES DEUX VERSIONS DEMANDENT LES NOMS DE FICHIERS A CHARGER *
<* *
<* MESSAGES D'ERREURS : *
<* - 0X : ERREUR SYSTEME OU ASSEMBLEUR *
<* - '01 : ERREUR LORS DE LA LECTURE DU BINAIRE *
<* - 1X : ERREURS DUES A L'ASSEMBLEUR *
<* - '11 : NUMERO DE COMMANDE ERRONNEE *
<* - '12 : COMMANDE ABSOLUE EN TRANSLATABLE *
<* - '13 : ERREUR DE CHECKSUM *
<* - 2X : ERREUR DE PROGRAMMATION *
<* -'21 : ADRESSE GENEREE DANS UNE INSTRUCTION > 32K *
<* - '22 : ADRESSE DE CHARGEMENT > 32K *
<* - '23 : PROGRAMME DEPASSANT LA PARTITION MEMOIRE MAXI *
<* - '24 : ENTRY DEJA DEFINI *
<* - '25 : EXTERN NON DEFINI(S) *
<* - '26 : DEBORDEMENT DE LA TABLE DE REFERENCES *
<* - 3X : ERREUR CHARGEMENT DISQUE *
<* -'31 : DEPASSEMENT ADRESSE FIN CHARGEMENT *
<* -'32 : AUTO-CHAINAGE : LE SYSTEME N'A PU
<* DISCRIMINER UN BIT D'INDEXATION
<* DU BIT FORT D'UNE ADRESSE.
<* *
<* *
<***********************************************************************
PAGE
IDP "LINK 64K DISQUE - RELEASE 12/12/1977"
IF ORDI-"T",XWOR%,,XWOR%
IDP "VERSION EXECUTABLE SOUS CMS4 - T1600"
QUANTA: VAL 1 < UNITE D'ALLOCATION DISQUE.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
IDP "VERSION EXECUTABLE SOUS CMS5 - SOLAR"
QUANTA: VAL 3 < UNITE D'ALLOCATION DISQUE.
XWOR%: VAL 0
PAGE
<***********************************************************************
<* *
<* RESERVATION DE PLACE POUR LE PROGRAMME A CHARGER. *
<* *
<***********************************************************************
TABLE
<***********************************************************************
<* *
<* INTERFACE AVEC CMS4. *
<* *
<***********************************************************************
ZERO: EQU $ < ZERO TRANSLATABLE DU PROGRAMME
DZS 'C
DITEM: EQU $
ASCI "LKSY"
BYTE "S";'04
DBCHIT: EQU $
WORD SIZE
WORD PLOAD
<***********************************************************************
<* *
<* ENTREE DANS LE PROCESSEUR. *
<* *
<***********************************************************************
WORD LOAD
PROG
PLOAD: EQU $
LRP L
BR -1,L
BUFSOR: DZS 128
TOUDEB: EQU $
BUFBIN: DZS 128*QUANTA < BUFFER D'ENTREE DU BINAIRE.
BUFREF: DZS 128 < BUFFER POUR LES REFERENCES
PAGE
<***********************************************************************
<* *
<* COMMON. *
<* *
<***********************************************************************
M1K: BYTE 17;" "
ASCI "MOINS D'1 K MOTS"
MK: BYTE 7;" "
ASCI "K MOTS"
MSOIT: BYTE 6;'6D
ASCI " SOIT "
MOK: BYTE 45;'6D
ASCI "OK? (I=INITIALISER DK,O=NE PAS INITIALISER) "
MDK: BYTE 9;'6D
ASCI "NSP DK ="
MAP: BYTE 21;'6D
ASCI " A PARTIR DU SECTEUR"
MLON: BYTE 21;'6D
ASCI " SUR UNE LONGUEUR DE "
COMMON
COM: EQU $
SAVES: BYTE 23;'6D
ASCI "ANOMALIE AVEC XXXXXX "
KIN: WORD -1 < COMPTAGE DU PASSAGE SUR LA
< DEMANDE DES INFOS DISQUES.
KEN: WORD -1 < COMPTAGE DES ENTREES DANS LKSYS.
BUFFER: DZS 40 < BUFFER D'ECRITURE DES MESSAGES
INDEX: WORD 128*QUANTA-1/3*3*2 < INDEX DU BUFFER BINAIRE.
NBREF: WORD 0 < NB DE REFERENCES
XBUFRF: WORD -128 < PT SUR LE BUFFER DES REFERENCES
NORFCP: DZS 1 < COMPTAGE DES REFERENCES EXISTANTES
ECRREF: WORD '0C02 < ECRITURE REFERENCES EN SCRATCH
WORD BUFREF-ZERO*2
WORD 256
WORD 0
LECREF: WORD '0C00 < LECTURE
WORD BUFREF-ZERO*2
WORD 256
WORD 0
AM1K: WORD M1K
AMK: WORD MK
AMSOIT: WORD MSOIT
AMLON: WORD MLON
AMAP: WORD MAP
AMDK: WORD MDK
AMOK: WORD MOK
DEMOUT: WORD '0202 < EDITION DES MESSAGES.
WORD 0
WORD 0
APRINT: WORD PRINT < EDITION DES MESSAGES SUR DEMOUT.
CHKSUM: DZS 1 < CHECKSUM
ABSMOD: WORD -1 < INDICATEUR TRANSLATABLE-ABSOLU
ADSTOC: DZS 2 < QUADRUPLET 'AU FRAIS'
PAFINI: DZS 1 < RELAI POUR SUITE DE COMMANDE
FINMOD: DZS 1 < INDICATEUR DE FIN DE MODULE
CPTLOD: DZS 1 < COMPTEUR DE REPEAT LOAD
OPNBO: WORD '0305 < OPEN-OLD ENREGISTREMENT
WORD 1 < CLE=1.0
WORD 0
CCI: WORD 1 < RETOUR AU CCI SI ERREUR
IOCBIN: WORD '0308 < LECTURE MODE SAVE
WORD BUFBIN-ZERO*2
WORD 128*QUANTA*2
IOCBL: WORD '0202 < SORTIE LISTING
WORD BUFFER-ZERO*2
WORD 0
MESDSK: BYTE '6D;"D" < MESSAGE N0 DISQUE
ASCI "K="
MESAD1: BYTE '6D;'40 < MESSAGE ADRESSE DEBUT
ASCI " DEBUT ="
MESAD2: BYTE '6D;'40 < MESSAGE ADRESSE FIN
ASCI " FIN ="
MESTRA: BYTE '6D;"T" < ADRESSE TRANS
ASCI "RANS ="
DSKMES: WORD '0202 < ENVOI DES MESSAGES
WORD MESDSK-ZERO*2
WORD 4
AD1MES: WORD '0202
WORD MESAD1-ZERO*2
WORD 10
AD2MES: WORD '0202
WORD MESAD2-ZERO*2
WORD 8
TRAMES: WORD '0202
WORD MESTRA-ZERO*2
WORD 8
RELBEN: WORD BUFFER+2,X
HEXDEC: WORD SPHEXA < SP CONVERSION CARAC.-BINAIRE
DEMDSK: WORD '0101 < DEMANDE N0 DISQUE
WORD BUFFER-ZERO*2
WORD 1
DEMADR: WORD '0101 < DEMANDE ADRESSE DISQUE
WORD BUFFER-ZERO*2
WORD 4
ASSDSK: WORD '0003 < DEMANDE ASSIGNATION DISQUE
WORD '0400
DSKDEB: WORD 0 < ADRESSE DEBUT
DSKFIN: WORD 0 < ADRESSE FIN
ADDTRA: WORD 0 < ADRESSE TRANS
UNFFF: WORD '1FFF
LIRDSK: WORD '0400 < LECTURE DISQUE
WORD BUFSOR-ZERO*2
WORD 256
WORD 0
ECRDSK: WORD '0402 < ECRITURE DISQUE
WORD BUFSOR-ZERO*2
WORD 256
WORD 0
ADISK: WORD BUFSOR,X < RELAI VERS BUFFER
LIRMOT: WORD LECMOT < SP DE LECTURE(DISQUE)
ECRMOT: WORD PLAMOT < SP D'ECRITURE UN MOT(DISQUE)
SWRITE: WORD WRITED < SP D'ECRITURE DISQUE
ADLANC: WORD DEBPG < DEBUT DU PROGRAMME CHARGE
RELBUF: WORD BUFBIN+1,X < RELAI BUFFER BINAIRE BIT INDEX
ABUFB: WORD BUFBIN
ABUFRF: WORD BUFREF+128,X
ABUFAB: WORD BUFREF+128-3,X < POUR ACCES AU 1ER MOT D'UN
< DESCRIPTEUR DE SYMBOLE REF/DEF.
SORMES: WORD ENTMOT < SP DE SORTIE QUESTIONS
MERCLF: WORD MSGRC < SP DE SORTIE DE CR-LF
MESER: WORD MSGERR < SP DE SORTIE D'ERREURS
BANDEF: WORD FINBAN
AFINT: WORD FINTOU
LITQ: WORD SPLITQ < SP DE LECTURE 1 QUADRUPLET
AUFRAI: WORD ADSTOC+2,X < QUADRUPLET 'AU FRAIS'
TABCDE: WORD TABAIG,X < AIGUILLAGE SUIVANT COMMANDE
TABAIG: WORD DEBUT < CHARGER EN
WORD SUITE < CHARGER A LA SUITE SANS TRANSL.
WORD LANCT < ADRESSE DE LANCEMENT
WORD REPEAT < REPEAT LOAD
WORD CHECK < FIN BANDE ET CHECKSUM
WORD COMENT < COMMENTAIRE
WORD PACDE < SUITE DE COMMANDE
WORD TRANSL < CHARGER A LA SUITE EN TRANS.
WORD REMADR < REMONTER CHAINE ADRESSES
WORD DEPADR < DEPLACEMENT SUR ADRESSE
WORD LECTUR < DEBUT DE PST
WORD NSECT < NOM DE SECTION
WORD ENT < ENTRY
WORD REMJMP < DEF. DE REF. AVANT RELATIVE
TRANSB: WORD BTRANS < SP DE TRANSLATION DE B
RANGB: WORD VERIFW < SP RANGE B EN VERIFIANT ADRESSE
NEWCHG: WORD AUTMOD < RELANCE DU MODULE
AREMA2: WORD REMAD2 < SUITE DE COMMANDE CHAINE
ADEPA2: WORD DEPAD2 < SUITE DE COMMANDE DEPLACEMENT
ADRFAT: WORD RFATAL < TRAITEMENT ERREUR FATALE
ADLECT: WORD LECTUR < LECTURE DE QUADRUPLETS
AREXT1: WORD REXT1 < SUITE DE COMMANDE EXT
AREXT2: WORD REXT2
AREXT3: WORD REXT3
ASECT1: WORD SECT1 < SUITE DE COMMANDE SECTION
ASECT2: WORD SECT2
ARENT1: WORD RENT1
ARENT2: WORD RENT2
ARENT3: WORD RENT3
ARJMP2: WORD REMJM2 < SUITE DE COM. REF. AVANT REL.
CHAINE: WORD SPCHAI < SP DE REMONTEE D'UNE CHAINE D'ADRESSE
CHREF: WORD SPCHRF < SP DE RECHERCHE DE REFERENCE
PLNOM: WORD SPLNOM < SP DE PLACEMENT NOM REFERENCE
SORCAR: WORD PRECAR < SORTIE DE 3 CARACTERES
SORC6: WORD SORTI6 < SORTIE DE 6 CARACTERES
SORADR: WORD ECRADR < SORTIE ADRESSE
SORHEX: WORD BUFFER+3,X < POUR ADRESSE RELATIVE
ADINIT: DZS 1 < DEBUT CHARGEMENT D'UN MODULE
RCLF: WORD '0D0A < CR-LF
ERREUR: ASCI "ERU " < MESSAGE D'ERREUR
START: ASCI "RUN " < MESSAGE RUN
TRENTE: WORD '3030
NB7FFF: WORD '7FFF
BLQ: ASCI " '"
DNMF: BYTE '6D;"F" < DEMANDE DU NOM DE FICHIER
ASCI "ICH="
DEMNMF: WORD '0202
WORD DNMF-ZERO*2
WORD 6
ASSO: ASCI "!ASSIGN 3=O,"
NMFC: DZS 20 < NOM DU FICHIER
DEMASS: WORD '0002
WORD ASSO-ZERO*2
WORD 80
LECNMF: WORD '0101 < LECTURE DU NOM
WORD NMFC-ZERO*2
WORD 40
MCLOS: ASCI "!CLOSE" < !CLOSE
BYTE '04;0
DEMCLO: WORD '0002 < DEMANDE DE "!CLOSE"
WORD MCLOS-ZERO*2
WORD 80
LOCAL: WORD LOC+'80 < POUR INITIALISER L.
KSTORE: DZS 20 < PILE DE TRAVAIL.
<
<
< L O C A L :
<
<
LSEND: VAL 64 < NBRE D'OCTETS EMIS SIMULTANEMENT.
XWORK1: VAL 256/LSEND*LSEND
XWORK1: VAL 256-XWORK1
IF XWORK1,,XWORK,
IF ATTENTION : 'LSEND' DOIT DIVISER '256' !!!
XWORK: VAL 0
BSEND: DZS LSEND/2 < BUFFER D'EMISSION SUR 'OB.
BSEND1: BYTE '40;0 < CARACTERE DE FIN D'EMISSION.
< ("A-ROND")
LOCAL
LOC: EQU $
ABSEND: WORD BSEND,X < RELAI D'ACCES A 'BSEND'.
IBSEND: WORD 0 < INDEX DE 'BSEND'.
KHORL0: VAL '1000 < ON SORTIRA L'ADRESSE COURANTE (W)
< TOUS LES 'KHORL0' MOTS LORS DE
< L'EMISSION SUR '0B.
KHORL: WORD KHORL0 < DECOMPTEUR DES MOTS EMIS.
IKHORL: WORD KHORL0 < POUR REINITIALISER KHORL.
DSEND: WORD '0B02 < DEMANDE D'EMISSION 'LSEND' CARACTERES.
WORD BSEND-ZERO*2
WORD LSEND
DSEND1: WORD '0B02 < ENVOI D'UNE FIN DE MESSAGE.
WORD BSEND1-ZERO*2
WORD 1
MSEND: BYTE 15;'6D
ASCI "SEND SUR '0B ?"
LONG: WORD 0 < NBRE DE MOTS (0-64K) A EMETTRE.
MLONG: BYTE 7;'6D
ASCI "#MOTS="
MFSEND: BYTE 9;'6D
ASCI "FIN SEND"
MINIT: BYTE 19;'6D
ASCI "INITIALISATION DK!"
IF ORDI-"S",XWOR%,,XWOR%
MCMS: BYTE 7;'6D
ASCI "CMS5 ?"
XWOR%: VAL 0
PAGE
<***********************************************************************
<* *
<* C H A R G E U R . *
<* *
<* INITIALISATION DU CHARGEUR. *
<* *
<***********************************************************************
PROG
WORD COM+'80
LOAD: EQU $
LRP C < INITIALISATION DE LA BASE C
LA -1,C
LR A,C
LAD KSTORE-1 < INITIALISATION DE K
LR A,K
LA LOCAL
LR A,L < INITIALISATION DE L.
EORR W < ADRESSE DEBUT CHARGEMENT
STZ KIN < REINITIALISATION DE KIN,
DC KIN < A CAUSE DES ALT-MODES....
BSR MERCLF < ENVOI DE CRT CHARGEMENT
LAD DEMCLO < !CLOSE
SVC 0
IC KEN < COMPTAGE DES ENTREES.
JE GOON < C'EST LA 1ERE, OK..
<
< ABORT SUR LES ALT-MODES :
<
ABORT: EQU $
LAD CCI
SVC 0
JMP ABORT < ABORT DEFINITIF...
<
< CAS DE LA 1ERE ENTREE :
<
GOON: EQU $
BR BANDEF
<***********************************************************************
<* *
<* OUVERTURE DU FICHIER CONTENANT LE MODULE A CHARGER. *
<* *
<***********************************************************************
AUTMOD: EQU $
SUIVAN: EQU $
LAD DEMASS < ASSIGN
SVC 0
LAD OPNBO < OUVERTURE DU FICHIER BINAIRE
SVC 0 < DANS LE MODE OPEN-OLD-ENREGIS-
< TREMENT
JE RELANS < GO ON SI OPEN OK
<***********************************************************************
<* *
<* SORTIE EN ERREUR DU LOAD. *
<* *
<***********************************************************************
HORTEN: EQU $
LBY ASSDSK+1 < DESASSIGNER LE DISQUE
STZ ASSDSK+1
STBY ASSDSK+1
LAD ASSDSK
SVC 0
LAD CCI < RETOUR AU CCI
SVC 0
JMP $-1
<***********************************************************************
<* *
<* ERREUR FATALE. *
<* *
<***********************************************************************
RFATAL: EQU $
XR A,K < REINITIALISATION DE K
LAD KSTORE-1
XR A,K
BSR MESER < SORTIE DU MESSAGE D'ERREUR
JMP HORTEN
PAGE
<***********************************************************************
<* *
<* DEBUT DU CHARGEMENT. *
<* COMMANDE 'A3 POUR TRANSLATABLE, *
<* SINON, C'EST EN ABSOLU. *
<* *
<***********************************************************************
RELANS: EQU $
BSR LITQ < LECTURE 1ER QUADRUPLET
CPI 'A3 < MODULE TRANSLATABLE ?
JNE ANALIZ < SI ABSOLU, ABSMOD=-1
IC ABSMOD < SI TRANSLATABLE, ABSMOD=0
<***********************************************************************
<* *
<* LECTURE DES QUADRUPLETS ET ANALYSE D'UNE COMMANDE. *
<* *
<***********************************************************************
LECTUR: EQU $
BSR LITQ < LECTURE D'UN QUADRUPLET
ANALIZ: EQU $
ANDI 3 < COMMANDE ABSOLU OU TRANSLATABLE
JAE ABSOL
CPI 2 < COMMANDE TRANSLATABLE
JNE VOIEXT
CPZ ABSMOD
JL PATRAN
LBY ADSTOC < NUMERO DE LA COMMANDE
ANDI '1C
ADRI '18,A
NUMCDE: EQU $ < AIGUILLAGE SUIVANT COMMANDE
SLRS 2
LR A,X
BR &TABCDE
ABSOL: EQU $ < COMMANDE ABSOLUE
LBY ADSTOC
ANDI '1C
CPI '14
JLE NUMCDE
ERCMDE: EQU $ < NUMERO COMMANDE ERRONNE
LAI '11
BR ADRFAT
PATRAN: EQU $ < COMMANDE ABSOLUE EN TRANSLATAB.
LAI '12
BR ADRFAT
VOIEXT: EQU $
LBY ADSTOC
CPI 'A5 < EXT
JNE ERCMDE
PAGE
<***********************************************************************
<* *
<* 'A5 - REF
<* *
<***********************************************************************
STB BUFFER < PLACER 2 PREMIER CARAC. DU NOM
LA AREXT1 < ATTENDRE LA SUITE
STA PAFINI
JMP LECTUR
REXT1: EQU $ < SUITE
STB BUFFER+1 < 2 CARAC. SUIVANTS
LA AREXT2 < ATTENDRE LA SUITE
STA PAFINI
JMP LECTUR
REXT2: EQU $ < SUITE
STB BUFFER+2 < 2 DERNIER CARAC.
LA AREXT3 < ATTENDRE LA SUITE
STA PAFINI
JMP LECTUR
REXT3: EQU $ < FIN
BSR TRANSB < ADRESSE RELATIVE DEBUT PARTITION
BSR CHREF < CHERCHER LE REFERENCE
JANE EXTABS
PSR W < ELLE EXISTE
LR B,W < SAUVER VALEUR EXT
LA &ABUFRF < VALEUR REF.
CPZ &ABUFAB < TEST BIT0 DU MOT0 ???
JL DEJEXT < BIT0=1 : DEJA REFERENCEE.
LR A,B < DEFINI ENT
BSR CHAINE < PLACER VALEUR DANS CHAINE
RETEXT: EQU $
PLR W
JMP LECTUR
DEJEXT: EQU $
BSR LIRMOT
CP NB7FFF < POUR LA CHAINER AVEC LA PRECEDENTE
JE EXT10
LR A,W
JMP DEJEXT
EXT10: EQU $
LA &ABUFRF
STB &ABUFRF
LR A,B
LA 0,W
JAGE $+2 < INDEXATION
SBT 16
BSR ECRMOT
LAD ECRREF
SVC 0
JMP RETEXT
EXTABS: EQU $
BSR PLNOM < ABSENT - LA PLACER
STB &ABUFRF
LA &ABUFAB < ACCES AU MOT0 DU DESCRIPTEUR,
SBT 0 < BIT0=1 : INDICATEUR 'REF' REFERENCEE
STA &ABUFAB < MAIS NON ENCORE DEFINI...
ADRI 1,X
STX XBUFRF
LAD ECRREF
SVC 0
IC NBREF
JMP LECTUR
PAGE
<***********************************************************************
<* *
<* 'A0 - CHARGER EN. *
<* POSITIONNER W. *
<* *
<***********************************************************************
DEBUT: EQU $
BSR TRANSB < ADRESSE RELATIVE DEBUT PARTITIO
LR B,W
JMP LECTUR
PAGE
<***********************************************************************
<* *
<* '24 - CHARGER A LA SUITE SANS TRANSLATER. *
<* RANGER A LA SUITE EN TENANT COMPTE DU REPEAT LOAD. *
<* *
<***********************************************************************
SUITE: EQU $
BSR RANGB < RANGEMENT DE L'INFORMATION
ADRI 1,W
DC CPTLOD < REPEAT LOAD?
JG SUITE
STZ CPTLOD < REMISE A ZERO DU REPEAT LOAD
JMP LECTUR
PAGE
<***********************************************************************
<* *
<* '28 - ADRESSE DE LANCEMENT. *
<* RELEVER L'ADRESSE. *
<* *
<***********************************************************************
LANCT: EQU $
BSR TRANSB < ADRESSE RELATIVE DEBUT PARTITIO
STB &ADLANC
IC FINMOD < FIN DE MODULE=1
JMP LECTUR
PAGE
<***********************************************************************
<* *
<* 'AC - REPEAT LOAD. *
<* POSITIONNER LE COMPTEUR. *
<* *
<***********************************************************************
REPEAT: EQU $
STB CPTLOD
BR ADLECT
PAGE
<***********************************************************************
<* *
<* '30 - CHECKSUM ET FIN DE BANDE. *
<* VERIFICATION DU CHECKSUM ET FIN DE CHARGEMENT. *
<* *
<***********************************************************************
CHECK: EQU $
LA CHKSUM < VERIFICATION
CPR B,A
JE BONSUM
LAI '13 < ERREUR DANS LE CHECKSUM
BR ADRFAT
BONSUM: EQU $
LA OPNBO < MISE EN MODE CLOSE-SAVE DE LE
LR A,Y < SAUVER L'ETAT ACTUEL
ORI 2 < DEMANDE 'OPNBO'
STA OPNBO
LAD OPNBO < FERMETURE EN SAVE DE
SVC 0 < L'ENREGISTREMENT
STY OPNBO < RESTAURER L'ETAT INITIAL
CPZ FINMOD < FIN DE MODULE?
JE FINBAN < FIN DE BANDE UNIQUEMENT
LA &ADLANC
JAL FINBAN < FIN DE MODULE SANS LANCEMENT
FINTOU: EQU $
BSR SWRITE < ECRIRE DERNIER SECTEUR
LAD DEMCLO < !CLOSE
SVC 0
LAD START < IMPRESSION ADRESSE LANCEMENT
BSR SORMES
LA &ADLANC
BSR SORADR
<
< IMPRESSION TABLE LIENS ET EXTERNES NON DEFINIS
<
LXI 0 < PT SUR BUFFER
STZ LECREF+3 < PREMIER SECTEUR
DC LECREF+3
EORR L < CPTE D'ERREURS
REREXT: EQU $
CPZ NBREF < Y-EN-A-T'IL ENCORE?
JLE FEREXT
CPZR X < DOIT-ON RELIRE?
JL ENCEXT
IC LECREF+3
LAD LECREF
SVC 0
LXI -128
ENCEXT: EQU $
LR X,Y < IMPRESSION NOM
BSR MERCLF
LR Y,X
LAD BUFFER
LR A,B
LAD &ABUFRF
LXI 3
MOVE
BSR SORC6
LR Y,X
ADRI 3,X < ERREUR SI EXT NON DEFINI
LA &ABUFRF
CPZ &ABUFAB < SYMBOLE DEFINI ???
JGE PAERXT < OUI, OK...
ADRI 1,L
LA NB7FFF
PAERXT: EQU $
BSR SORADR < IMPRESSION ADRESSE
LR Y,X
ADRI 4,X < AUTRE REFERENCE
DC NBREF
JMP REREXT
FEREXT: EQU $
CPZR L < ERREURS?
JE PASRXT
LAI '25
BR ADRFAT
PASRXT: EQU $
<
<
< E M I S S I O N S U R ' 0 B :
<
<
< FORMAT DES CARACTERES EMIS :
< LES MOTS ENVOYES SONT CODES EN CARACTERES
< ASCI HEXADECIMAUX (0, 1,..., 9, A, B,...,F);
< LA FIN DE LA CHAINE TRANSMISE EST INDIQUEE
< PAR LE CARACTERE "A-ROND".
<
<
LA LOCAL
LR A,L < RESTAURATION BASE L.
SEND1: EQU $
LAD MSEND
BSR APRINT
LAD DEMDSK
SVC 0 < INTERROGATION UTILISATEUR ???
LBY BUFFER < A=CARACTERE REPONSE.
CPI "N"
JE GOCCI < NON, RETOUR AU CCI...
CPI "O"
JNE SEND1 < RIEN COMPRIS...
<
< OK, EMISSION DEMANDEE, INITIALISATION :
<
EORR W,W < W=0 : DEPART SUR LE 1ER MOT.
LA DSKFIN
SB DSKDEB < A=NBRE DE SECTEURS,
SLLS 7 < A=NBRE DE MOTS.
STA LONG < POUR LE TEST DE FIN SUR W.
LAD MLONG
BSR APRINT < EDITION DU
LA LONG
BSR SORADR < NBRE DE MOTS A ENVOYER...
<
< BOUCLE D'EMISSION PAR MOT :
<
SEND2: EQU $
LR W,A
CP LONG < EST-CE FINI ???
JE FSEND < OUI...
BSR LIRMOT < NON, A=MOT A EMETTRE.
LR A,B < B=MOT A EMETTRE,
LXI 4 < SUR 4 CARACTERES ASCI-HEXA.
<
< ENVOI D'UN CARACTERE :
<
SEND3: EQU $
LAI 0
SLLD 4 < DECONCATENATION 1 CHIFFRE HEXA.
CPI 9 < CHIFFRE DECIMAL ???
JLE SEND4 < OUI...
ADRI "A"-"9"-1,A < NON, CHIFFRE HEXADECIMAL.
SEND4: EQU $
ADRI "0",A < ET CODAGE ASCI...
PSR X
LX IBSEND < X=INDEX COURANT DE 'BSEND'.
STBY &ABSEND < INSERTION DU CARACTERE COURANT.
IC IBSEND < PROGRESSION DE L'INDEX COURANT,
LA IBSEND < ET TEST
CPI LSEND < D'EMISSION ???
JL SEND6 < NON...
STZ IBSEND < OUI, ON REINITIALISE L'INDEX.
SEND5: EQU $
LAD DSEND
SVC 0 < TENTATIVE D'EMISSION...
JE SEND6 < OK, '0B ASSIGNE...
LAD CCI < NON,
SVC 0 < RETOUR AU CCI, POUR !ASSIGN...
JMP SEND5 < ET ON REESSAYE...
SEND6: EQU $
PLR X
JDX SEND3 < AU CARACTERE SUIVANT.
DC KHORL
JG SEND7 < PAS ENCORE...
LA IKHORL < OUI, ON REINITIALISE D'ABORD.
STA KHORL
LR W,A
BSR SORADR < ON EDITE (W).
SEND7: EQU $
ADRI 1,W < PUIS, AU MOT SUIVANT.
JMP SEND2
<
< FIN D'EMISSION :
<
FSEND: EQU $
LAD DSEND1
SVC 0 < ENVOI D'UNE FIN DE MESSAGE.
LAD MFSEND
BSR APRINT < ENVOI D'UN MESSAGE DE FIN...
<
<
< R E T O U R D E F I N I T I F A U C C I :
<
<
GOCCI: EQU $
LBY ASSDSK+1
STZ ASSDSK+1
STBY ASSDSK+1
LAD ASSDSK
SVC 0 < DESASSIGNATION DU DISQUE.
LAD CCI < RETOUR CCI
SVC 0
JMP $-2
<***********************************************************************
<* *
<* FIN DE BANDE - RETOUR AU MONITEUR. *
<* *
<***********************************************************************
FINBAN: EQU $
LR W,A < DEBUT MODULE SUIVANT
STA ADINIT
<
<
< D I S Q U E D E C H A R G E M E N T :
<
<
IC KIN < COMPTAGE DES PASSAGES...
IF ORDI-"T",XWOR%,,XWOR%
JG DKOK < PASSAGES SUIVANTS...
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
JG ADKOK < PASSAGE SUIVANTS...
XWOR%: VAL 0
DDSK1: EQU $
<
< CAS DU 1ER PASSAGE : DEMANDE DES INFOS DISQUES :
<
LBY ASSDSK+1 < N0 DISQUE=0
STZ ASSDSK+1
STBY ASSDSK+1
LAD DSKMES < N0 DISQUE
SVC 0
LAD DEMDSK
SVC 0
LBY BUFFER < A=CARACTERE REPONSE...
IF ORDI-"S",XWOR%,,XWOR%
CPI '04 < VIDE ???
JE CMS51 < OUI...
CPI '0D < VIDE ???
JNE CMS52 < NON...
CMS51: EQU $
LAD MCMS
BSR APRINT
LAD DEMDSK
SVC 0
LBY BUFFER
CPI "N" < ERREUR ???
JE DDSK1 < OUI, ON REMONTE...
CPI "O" < EST-CE LE LINKAGE DE CMS5 ???
JNE CMS51 < NON, ERREUR...
LRM A,B,X,Y < OUI :
BYTE '04;'25 < A=ASSIGNATION VERS 'DKF',
WORD '0680 < B=ADRESSE DE DEBUT,
WORD '087F < X=ADRESSE DE FIN,
WORD '0000 < Y=TRANSLATION...
STA ASSDSK+1
STB DSKDEB
STB LIRDSK+3
STB ECRDSK+3
STX DSKFIN
STY ADDTRA
JMP CMS53 < ET ON SAUTE L'ENTREE...
ADKOK: JMP DKOK < RELAI...
CMS52: EQU $
XWOR%: VAL 0
ADRI -'30,A
CPI 2
JE DDSK2
CPI 3
JNE DDSK1
DDSK2: EQU $
ADRI '22,A < PLACER
AD ASSDSK+1 < DANS ASSIGN DISQUE
STA ASSDSK+1
LAD AD1MES < ADRESSE DEBUT
SVC 0
LAD DEMADR
SVC 0
BSR HEXDEC
JANE DDSK1
LR B,A < VERIFICATION
JAL DDSK1
CP UNFFF
JG DDSK1
STB DSKDEB < PLACER
STB LIRDSK+3
STB ECRDSK+3
LAD AD2MES < ADRESSE FIN
SVC 0
LAD DEMADR
SVC 0
BSR HEXDEC
JANE DDSK1
LR B,A < VERIFICATION
JAL DDSK1
CP UNFFF
JG DDSK1
STB DSKFIN
LR B,A < VERIFICATION
CP DSKDEB
JLE DDSK1
LAD TRAMES < ADRESSE TRANS
SVC 0
LAD DEMADR
SVC 0
BSR HEXDEC
JANE DDSK1
STB ADDTRA
<
< VERFICATION DES ARGUMENTS :
<
IF ORDI-"S",XWOR%,,XWOR%
CMS53: EQU $
XWOR%: VAL 0
LA AMDK
BSR APRINT
LA ASSDSK+1
ANDI 'FF < SUPPRESSION DU NVP ASSOCIE AU NSP.
BSR SORADR < EDITION DU NVP DU DISQUE.
LA AMAP
BSR APRINT
LA DSKDEB
BSR SORADR < EDITION DU NUMERO 1ER SECTEUR.
LA AMLON
BSR APRINT
LA DSKFIN
SB DSKDEB
PSR A
BSR SORADR < EDITION DU NBRE DE SECTEURS.
LA AMSOIT
BSR APRINT
PLR A
ADRI 8-1,A < POUR UN ARRONDI SUPERIEUR.
SARS 3 < CALCUL DU NBRE DE KMOTS
< IMMEDIATEMENT SUPERIEUR.
JALE EM1K < BIZARRE !!!
BSR SORADR < EDITION DU NBRE DE KMOTS.
LA AMK
BSR APRINT
JMP TOK < VERS L'INTERROGATION...
EM1K: EQU $
LA AM1K
BSR APRINT
TOK: EQU $
LA AMOK
BSR APRINT
LAD DEMDSK < L'UTILISATEUR EST-IL SATISFAIT
SVC 0 < DES PARAMETRES ???
LBY BUFFER < A=REPONSE...
<
< REPONSES RECONNUES :
< N : ON REDEMANDE LES ARGUMENTS,
< I : OK, ON INITIALISE L'ESPACE DK,
< O : OK, ON N'INITIALISE PAS L'ESPACE DK.
<
CPI "N"
JE DDSK1 < NON, ON REDEMANDE...
CPI "O"
JE PINIT < O : ON N'INITIALISE PAS L'ESPACE DK...
CPI "I" < INITIALISATION ESPACE DK ???
JNE TOK < RIEN COMPRIS...
<
< I N I T I A L I S A T I O N E S P A C E :
<
LAD MINIT
BSR APRINT
LAD ASSDSK < ASSIGNER LE DISQUE
SVC 0
LA DSKDEB < MISE A ZERO ESPACE DISQUE
STA ECRDSK+3
ECRZER: EQU $
LAD ECRDSK
SVC 0
IC ECRDSK+3
LA ECRDSK+3
CP DSKFIN
JL ECRZER
JMP DKOK < OK...
PINIT: EQU $ < PAS D'INITIALISATION DK.
LAD ASSDSK
SVC 0 < ASSIGNATION DU DISQUE.
LAD LIRDSK
SVC 0 < LECTURE DU 1ER SECTEUR, AU
< CAS, OU IL N'Y AURAIT NI
< INITIALISATION DISQUE, NI
< EDITION DE LIENS...
DKOK: EQU $ < OK, ON Y VA...
RENMFC: EQU $
LAD DEMNMF < NOM DU FICHIER
SVC 0
LAD LECNMF
SVC 0
WORD '1E35 < NOM VIDE?
ADRI -1,B
CPZR B
JG ETI10 < NON, ON CONTINUE...
BR AFINT < OUI, FIN DE CHARGEMENT...
ETI10: EQU $
STZ CHKSUM < REINITIALISER LES VALEURS DE
LAI 126
ADR A,A
STA INDEX
LAI -1
STA ABSMOD
STZ FINMOD
STZ CPTLOD
BR NEWCHG < TRAITER LE MODULE SUIVANT
PAGE
<***********************************************************************
<* *
<* 'B4 - COMMENTAIRE. *
<* L'ECRIRE. *
<* *
<***********************************************************************
COMENT: EQU $
BSR SORCAR
BR ADLECT
PAGE
<***********************************************************************
<* *
<* '22 - SUITE DE COMMANDE. *
<* SE REBRANCHER A LA COMMANDE CONCERNEE. *
<* *
<***********************************************************************
PACDE: EQU $
BR PAFINI
PAGE
<***********************************************************************
<* *
<* 'A6 - CHARGER A LA SUITE EN TRANSLATANT. *
<* TRANSLATER ET ALLER CHARGER. *
<* *
<***********************************************************************
TRANSL: EQU $
BSR TRANSB < ADRESSE RELATIVE DEBUT PARTITIO
BR TABAIG+1
PAGE
<***********************************************************************
<* *
<* 'AA - REMONTER UNE CHAINE D'ADRESSES. *
<* MEMORISATION DE L'ADRESSE DE DEBUT DE CHAINE. *
<* *
<***********************************************************************
REMADR: EQU $
PSR W < PROTEGER W
BSR TRANSB < ADRESSE RELATIVE DEBUT PARTITIO
LR B,W < MEMORISER L'ADRESSE
LA AREMA2 < PREPARER LA SUITE DE COMMANDE
STAPAF: EQU $
STA PAFINI
BR ADLECT
<***********************************************************************
<* *
<* SUITE DE COMMANDE CHAINE. *
<* REMONTER LA CHAINE POUR Y PLACER LA VALEUR. *
<* *
<***********************************************************************
REMAD2: EQU $
BSR TRANSB
BSR CHAINE
JMP PLRW
PAGE
<***********************************************************************
<* *
<* '2E - DEPLACEMENT SUR ADRESSE. *
<* MEMORISATION DE L'ADRESSE. *
<* *
<***********************************************************************
DEPADR: EQU $
PSR W < PROTEGER W
BSR TRANSB < ADRESSE RELATIVE DEBUT PARTITIO
LR B,W < PRELEVER L'ADRESSE A MODIFIER
LA ADEPA2 < PREPARER LA SUITE DE COMMANDE
JMP STAPAF
<***********************************************************************
<* *
<* SUITE DE COMMANDE DEPLACEMENT. *
<* MODIFICATION DE LA VALEUR. *
<* *
<***********************************************************************
DEPAD2: EQU $
BSR LIRMOT
ADR A,B < MODIFICATION
ADNORM: EQU $
BSR ECRMOT
<***********************************************************************
<* *
<* RESTAURER W. *
<* *
<***********************************************************************
PLRW: EQU $
PLR W
BR ADLECT
PAGE
<***********************************************************************
<* *
<* '36 - NOM DE SECTION. *
<* IMPRESSION DU DEBUT DU NOM. *
<* *
<***********************************************************************
NSECT: EQU $
BSR MERCLF < IMPRESSION DE CR-LF
BSR SORCAR < IMPRESSION DES TROIS PREMIERS
< CARACTERES DU NOM
LA ASECT1 < 1ERE SUITE DE NOM
JMP STAPAF
SECT1: EQU $
BSR SORCAR
LA ASECT2 < PREPARER LA SUITE DE NOM
JMP STAPAF
<***********************************************************************
<* *
<* SUITE DE COMMANDE NOM. *
<* IMPRESSION DE LA FIN DE NOM ET DE L'ADRESSE DE DEBUT. *
<* *
<***********************************************************************
SECT2: EQU $
BSR SORCAR < IMPRESSION DE FIN DE NOM
LR W,A < IMPRESSION DE ADRESSE IMPLANTA.
BSR SORADR
BR ADLECT
PAGE
<***********************************************************************
<* *
<* '3A - COMMANDE DEF.
<* *
<***********************************************************************
ENT: EQU $
STB BUFFER < PLACER 2 CARAC.
LA ARENT1 < SUITE
STA PAFINI
BR ADLECT
RENT1: EQU $
STB BUFFER+1 < PLACER 2 CARAC. A SUIVRE
LA ARENT2
STA PAFINI
BR ADLECT
RENT2: EQU $
STB BUFFER+2 < PLACER FIN NOM
LA ARENT3 < ATTENDRE ADRESSE
STA PAFINI
BR ADLECT
RENT3: EQU $
BSR TRANSB < ADRESSE RELATIVE PARTITION
BSR CHREF < RECHERCHE DANS TABLE
JANE ENTABS
LA &ABUFRF < ELLE EXISTE
CPZ &ABUFAB < TEST DU BIT0(MOT0) ???
JL VUEXT < PAS ENCORE DEFINIE...
LY BUFFER < ERREUR - DOUBLE DEFINITION
BSR MERCLF
STY BUFFER
BSR SORC6
LAI '24
BSR MESER
BR ADLECT
VUEXT: EQU $
PSR W < ELLE EXISTE EN EXT
LR A,W
BSR CHAINE
PLR W
STB &ABUFRF < MISE A JOUR TABLE
LA &ABUFAB < ACCES AU MOT0 DU SYMBOLE COURANT,
RBT 0 < ON MEMORISE AINSI QU'IL EST
STA &ABUFAB < DEFINI MAINTENANT...
LAD ECRREF
SVC 0
BR ADLECT
ENTABS: EQU $
BSR PLNOM < ABSENTE- LA PLACER
STB &ABUFRF
ADRI 1,X
STX XBUFRF
LAD ECRREF
SVC 0
IC NBREF
BR ADLECT
PAGE
<***********************************************************************
<* *
<* 'BE - REFERENCE EN AVANT RELATIVE. *
<* PRELEVER LE PREMIER MAILLON. *
<* *
<***********************************************************************
REMJMP: EQU $
PSR W < PROTEGER W
BSR TRANSB < ADRESSE RELATIVE DEBUT PARTITIO
LR B,W < RELEVER LE 1ER MAILLON
LA ARJMP2 < PREPARER LA SUITE DE COMMANDE
JMP STAPAF
<***********************************************************************
<* *
<* SUITE DE REFERENCE AVANT RELATIVE. *
<* MODIFICATION SUR LA CHAINE. *
<* *
<***********************************************************************
REMJM2: EQU $
BSR TRANSB < ADRESSE RELATIVE DEBUT PARTITIO
LR B,A < A=REF. EN AVANT
SBR W,A < DIFFERENCE D'ADRESSE
PSR A
BSR LIRMOT
LR A,B
PLR A
SCRD 8 < FABRICATION DU MOT DEFINITIF
SWBR B
BSR ECRMOT
SWBR A < AD. RELATIVE MAILLON SUIVANT
SBR A,W < AD. ABSOLUE DU MAILLON SUIVANT
JANE REMJM2 < CHAINE FINIE PAR 0
JMP PLRW
PAGE
<***********************************************************************
<* *
<* LECTURE D'UN QUADRUPLET. *
<* *
<***********************************************************************
SPLITQ: EQU $
LYI 0 < POUR SIGNALER 1ER CARACTERE
LXI -4 < NB CARACTERE
PSR B,X,Y < PROTEGER LES REGISTRES DE TRAV.
IF ORDI-"T",XWOR%,,XWOR%
LAI 128*QUANTA-1/3*3
ADR A,A
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
LRM A < DOIT-ON RELIRE ???
WORD 128*QUANTA-1/3*3*2
XWOR%: VAL 0
CP INDEX
JNE PAVID
LAD IOCBIN < LECTURE
SVC 0
JNE NOPAIR < ERREUR DANS LE SGF
STZ INDEX
PAVID: EQU $
LX INDEX < PRELEVER LE BYTE SUIVANT
LBY &RELBUF
IC INDEX
PLR B,X,Y < RESTAURER LES REGISTRES
STBY &AUFRAI
CPZR Y < 1ER CARACTERE(COMMANDE)?
JNE STOCK
ANDI '60 < SI BLANC, RELIRE
CPI '20
JNE SPLITQ+2
ADRI 1,Y < 1ER CARACTERE TROUVE
ADRI 1,X
STOCK: EQU $
JIX SPLITQ+2 < PRELEVER LES 3 AUTRES CARAC.
LBY ADSTOC
CPI '30 < DOIT-ON LE RENTRER DANS CHECKSU
JE PACHEK
LBY ADSTOC < CALCUL CHECKSUM
AD CHKSUM
ADCR A
AD ADSTOC+1
ADCR A
STA CHKSUM
PACHEK: EQU $
LB ADSTOC+1 < A=COMMANDE,B=VALEUR
LBY ADSTOC
RSR
NOPAIR: EQU $ < ERREUR DE PARITE
LAI '01
BR ADRFAT
PAGE
<***********************************************************************
<* *
<* TRANSLATION DE L'ADRESSE CONTENUE DANS B. *
<* *
<***********************************************************************
BTRANS: EQU $
LR B,A
AD ADINIT < TRANSLATION
LR A,B
RSR
PAGE
<***********************************************************************
<* *
<* RANGEMENT DE B AVEC DEPLACEMENT DU CHARGEUR SI NECESSAIRE. *
<* *
<***********************************************************************
VERIFW: EQU $
LR W,A < ADRESSE>32K?
WNORM: EQU $ < ADRESSE DANS LE CHARGEUR?
BSR ECRMOT
RSR
PAGE
<***********************************************************************
<* *
<* LECTURE D'UN MOT POINTE PAR W DANS A. *
<* *
<***********************************************************************
LECMOT: EQU $
LR W,A < ADRESSE DANS SECTEUR
AD ADDTRA
ANDI '7F
LR A,X
LR W,A < N0 SECTEUR
AD ADDTRA
SLRS 7
AD DSKDEB < VERIFICATION LIMITE
JAL ERRDSK < ERREUR !!!
CP DSKFIN
JGE ERRDSK
CP LIRDSK+3 < RESIDENT?
JNE LRMT1
LA &ADISK < OUI - LIRE LE MOT
RSR
LRMT1: EQU $
PSR X < NON - ECRIRE SECTEUR COURANT
PSR A
BSR SWRITE
PLR A < LIRE BON SECTEUR
STA LIRDSK+3
LAD LIRDSK
SVC 0
PLR X < LIRE LE MOT
LA &ADISK
RSR
<***********************************************************************
<* *
<* ECRITURE D'UN MOT POINTE PAR W CONTENU DANS B. *
<* *
<***********************************************************************
PLAMOT: EQU $
PSR A < ADRESSE DANS SECTEUR
LR W,A
AD ADDTRA
ANDI '7F
LR A,X
LR W,A < N0 SECTEUR
AD ADDTRA
SLRS 7
AD DSKDEB < VERIFICATION LIMITE
JAL ERRDSK < ERREUR !!!
CP DSKFIN
JGE ERRDSK
CP LIRDSK+3 < RESIDENT?
JNE PLMT1
STB &ADISK < OUI - PLACER LE MOT
PLR A
RSR
PLMT1: EQU $
PSR X < NON - ECRIRE SECTEUR COURANT
PSR A
BSR SWRITE
PLR A < LIRE BON SECTEUR
STA LIRDSK+3
LAD LIRDSK
SVC 0
PLR X < PLACER LE MOT
STB &ADISK
PLR A
RSR
ERRDSK: EQU $
LAI '31 < ERREUR DISQUE
BR ADRFAT
<***********************************************************************
<* *
<* CONVERSION DE 4 CARACTERES EN BINAIRE(DANS B) *
<* *
<***********************************************************************
SPHEXA: EQU $
LXI -4
HEXA1: EQU $
LBY &RELBEN < TRAITER UN CARACTERE
ADRI -'30,A
CPI 9
JLE HEXA2
ADRI -7,A
HEXA2: EQU $
JAL HEXA3 < VERIFICADRESSEATION
CPI 'F
JG HEXA3
SLLS 12
SCLD 4
JIX HEXA1
LAI 0
RSR
HEXA3: EQU $
LAI 1
RSR
<***********************************************************************
<* *
<* SP D'ECRITURE SUR DISQUE *
<* *
<***********************************************************************
WRITED: EQU $
LA LIRDSK+3
STA ECRDSK+3
LAD ECRDSK
SVC 0
RSR
PAGE
<***********************************************************************
<* *
<* SP DE REMONTEE D'UNE CHAINE D'@ POUR Y PLACER LA VALEUR *
<* CONTENUE DANS B EN PARTANT A L'ADRESSE CONTENUE DANS W *
<* *
<***********************************************************************
SPCHAI: EQU $
PSR X
SPCH: EQU $
BSR LIRMOT
PSR B < SAVE LA VALEUR !!!
CPZR B < EST-CE UN SYMBOLE>32K ???
JL BIT00 < OUI, ON SAIT ALORS QU'IL NE
< PEUT Y AVOIR AUSSI INDEXATION !!!
<
< CAS DES SYMBOLES<32K : ON SAIT QU'ALORS, SI LE
< BIT0 EST A 1, IL S'AGIT DE L'INDEXATION, CAR
< L'ASSEMBLEUR FAIT DES VERIFICATIONS ET IMPOSE
< DES CONTRAINTES SEVERES :
<
JAL BIT01 < PRELEVER SON BIT D'INDEX
RBT 16
JMP BIT00
BIT01: EQU $
SBT 16
RBT 0
BIT00: EQU $
BSR ECRMOT
PLR B < RESATAURE LA VALEUR...
CP NB7FFF < FIN DE CHAINE?
JE RETCH
CPR A,W < AUTO-CHAINAGE ???
JNE SPCH1 < NON, OK...
<
< ERREUR D'AUTO-CHAINAGE : ELLES SONT DUES
< AU FAIT QU'IL EST DES CAS OU L'ON NE
< PEUT DISTINGUER LE BIT D'INDEXATION
< DU BIT FORT D'UNE ADRESSE 32-64K, PAR
< EXEMPLE LORS DE LA TRANSLATION DES
< CHAINAGES DE REFERENCES EN AVANT
< LORS D'UNE EDITION DE PLUSIEURS
< MODULES, ALORS QUE LA TRANSLATION D'UN
< MODULE PEUT FAIRE FRANCHIR A DES ADRESSES
< LA FRONTIERE DES 32K !!!
<
LAD SAVES
BSR APRINT < EDITION DU SYMBOLE PROBA-
< BLEMENT EN CAUSE...
LAI '32
BR ADRFAT < ABORT...
SPCH1: EQU $
LR A,W < NON - POURSUIVRE
JMP SPCH
RETCH: EQU $
PLR X
RSR
PAGE
<***********************************************************************
<* *
<* SP DE RECHERCHE D'UNE REFERENCE. *
<* *
<***********************************************************************
SPCHRF: EQU $
LA BUFFER+0 < EN PREVISION D'UN
STA SAVES+8+0 < AUTO-CHAINAGE,
LA BUFFER+1
STA SAVES+8+1 < ON SAUVEGARDE LE
LA BUFFER+2
STA SAVES+8+2 < SYMBOLE COURANT...
PSR W
LAI -1 < N0 DE SECTEUR DE RECHERCHE
STA LECREF+3
STZ NORFCP < N0 REFERENCE A COMPARER
LXI 0 < PT DANS SECTEUR RECHERCHE
AUTREF: EQU $
CPZR X < EN RESTE-T-IL DANS LE BUFFER?
JL RFNVID
IC LECREF+3 < NON - SECTEUR SUIVANT
LA LECREF+3
CPI 32
JL OKSEC
LAI '26
BR ADRFAT
OKSEC: EQU $
LAD LECREF
SVC 0
LXI -128
RFNVID: EQU $
LA NORFCP < A-T-ON FINI?
CP NBREF
JGE ABSREF < OUI - ABSENTE
LA &ABUFRF
RBT 0 < RAZ DE L'INDICATEUR ''RENCONTRE
< MAIS NON DEFINI'...
EOR BUFFER < EST-CE LE BON ???
LR A,W
ADRI 1,X
LA BUFFER+1
EOR &ABUFRF
EORR A,W
ADRI 1,X
LA BUFFER+2
EOR &ABUFRF
EORR W,A
ADRI 1,X
JAE REFVUE
ADRI 1,X < NON - SUIVANT
IC NORFCP
JMP AUTREF
REFVUE: EQU $
LAI 0 < TROUVEE
JMP RETREF
ABSREF: EQU $
LAI 1 < ABSENTE
RETREF: EQU $
PLR W
LY LECREF+3
STY ECRREF+3
RSR
PAGE
<***********************************************************************
<* *
<* SP DE PLACEMENT DU NOM D'UNE REFERENCE *
<* *
<***********************************************************************
SPLNOM: EQU $
LX XBUFRF < A-T-ON DE LA PLACE?
CPZR X
JL PLREF
LXI -128
PLREF: EQU $
LA BUFFER
STA &ABUFRF
ADRI 1,X
LA BUFFER+1
STA &ABUFRF
ADRI 1,X
LA BUFFER+2
STA &ABUFRF
ADRI 1,X
RSR
PAGE
<***********************************************************************
<* *
<* IMPRESSION DU CONTENU DE A. *
<* *
<***********************************************************************
ECRADR: EQU $
SLRD 16 < PREPARER LE DECOUPAGE PAR 4 BIT
LXI -4
CARSUI: EQU $
SLLD 4 < ISOLER 4 BITS
ADRI '30,A < CARACTERE IMPRIMABLE
CPI '39
JLE $+2
ADRI 7,A
STBY &SORHEX < MISE DANS LE BUFFER
LAI 0
JIX CARSUI
STZ &SORHEX
LA BLQ < METTRE '
STA BUFFER
JMP SORTI6
<***********************************************************************
<* *
<* SORTIE DE TROIS CARACTERES. *
<* *
<***********************************************************************
PRECAR: EQU $
LA ADSTOC+1 < PLACER 2 CARAC. DANS BUFFER
STA BUFFER
JMP SORTI2
<***********************************************************************
<* *
<* SORTIE D'UN MESSAGE SUIVANT LE NOMBRE DE CARACTERES. *
<* *
<***********************************************************************
SORTI6: EQU $
LXI 6 < 6 CARACTERES
JMP $+2
SORTI2: EQU $
LXI 2 < 2 CARAC.
STX IOCBL+2
LXI 0 < X=0 LOG LISTING
JMP APIOCS
MSGRC: EQU $ < SORTIE DE RC-LF
LXI 2
STX IOCBL+2
LXI 0
JMP RETLF
MSGERR: EQU $ < SORTIE D'UN MESSAGE
LXI 8
STX IOCBL+2
LXI 1 < X=1 ERROR LISTING
SLRD 4 < NUMERO ERREUR
SLLS 4
SLLD 4
AD TRENTE
STA BUFFER+3
LAD ERREUR
JMP INBUF4
ENTMOT: EQU $ < PREPARATION DU MESSAGE
LXI 6
STX IOCBL+2
LXI 0
INBUF4: EQU $
XR A,W
LB 0,W
STB BUFFER+1
LB 1,W
STB BUFFER+2
XR A,W
RETLF: EQU $ < CR-LF
LA RCLF
STA BUFFER
APIOCS: EQU $ < IMPRESSION
LAD IOCBL
SVC 0
RSR
PAGE
<
<
< E D I T I O N M E S S A G E :
<
<
< ARGUMENT :
< A=ADRESSE MOT DU MESSAGE.
< OCTET0(MESSAGE)=LONGUEUR.
<
<
PRINT: EQU $
PSR L,X
LR A,L
ADR A,A
ADRI 1,A
STA DEMOUT+1 < ADRESSE OCTET DU MESSAGE.
LBY 0,L
STA DEMOUT+2 < LONGUEUR DU MESSAGE.
LAD DEMOUT
SVC 0 < EDITION DU MESSAGE.
PLR L,X
RSR
PAGE
DEBPG: WORD 0
WORD 1 < RETOUR AU CCI
FITEM: EQU $
LGIT: VAL FITEM-DBCHIT*2
SIZE: EQU ZERO+LGIT
PAGE
<***********************************************************************
<* *
<* GENERATION DU CHARGEUR EN TANT QUE ITEM. *
<* *
<***********************************************************************
LOCAL
LONGR: VAL FITEM-DITEM
DEMSGN: WORD '8402 < DEMANDE GENERATION
WORD DITEM-ZERO*2
WORD LONGR*2
WORD 6
PROG
WORD DEMSGN+128
WORD COM+128
GENERE: EQU $
LRP L < INITIALISATIONS DES BASES
LR L,C
LA -2,L
LR A,L
LA -1,C
LR A,C
LAD KSTORE-1
LR A,K
DEM: EQU $
LAD DEMSGN
SVC 0
JE FIN
LAD CCI
SVC 0
JMP DEM
FIN: EQU $
LAD CCI
SVC 0
JMP FIN
END GENERE
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.