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