JMP ECPM4 DEBORDEMENT, ECHEC FATAL. INB STB 0,I JMP PAT00 ON RECOMMENCE AU DEBUT SPC 2 PM22 STA GAR36 C'EST LE 1ER AD3 AREESSAYER ADA D3 LDB 0,I B=BORNS CPB NBMAX DEBORDEMENT? JMP ECPM2 OUI,ECHEC PRESQUE CERTAIN INB ON INCREMENTE DE UN STB 0,I JMP PMT36 RETOUR SUR TYPE AD3 * PM25 STA PTPPM C'EST LE 1ER AD4 RENCONTRE STA GAR36 POUR REREMATCHER ADA D2 LDB 0,I STB BORNI INA LDB 0,I ON INITIALISE POUR PMT50 CLA STA INTYP CE N'EST PAS UN AD4' JMP PMT48 RETOUR SUR AD4 SPC 3 * PROCEDURE EN CAS DE SUCCES * PATOK LDA FIPPM ADA DM6 STA PTPPM POINTE DERNIER TYPE LDA 0,I CPA TYAD3 PROCEDURE SPECIALE SI AD3 RSS OUI CPA TYSD3 TYPE DE L'INDIRECTION RSS JMP PATO2 NON LDA NBMAX LDB PTPPM ADB D3 POINTE VERS LIMSP STA 1,I DERNIER POINT. OK PATO2 LDB FIPPM JSB POINT PATO6 LDA NBADR ON VIENT SI REF.=CH. VIDE CMA,INA STA COUPM ALS ADA PTPIL INA STA PTMOD TYP PIL INT. LDB .PILP INB STB PTPPM AD. PIL P.M. PATO3 JSB NAMIG ISZ COUPM JMP PATO3 PATO5 LDB NBADR CALCUL B POUR VIDPI CMB,INB BLS ADB PTPIL ON NE DEPILE PAS LA REF. JSB VIDPI POUR DEPILER PIL INT CLB STB INGOT INDICATEUR DE SUCCES INB STB NBADR REINITIALISATION * * IL FAUT EMPILER LA REF. ET LES BORNES * POUR UN REMPLACEMENT POSSIBLE * LDA TYAD0 JSB EPIL. LDA ADREF JSB EPIL. SZA,RSS JMP *+4 JSB LONG LDA PTPIL STA 1,I LDA TYA10 JSB EPIL. LDA .PILP ADA D2 LDA 0,I JSB EPIL. LDA TYA11 JSB EPIL. LDA FIPPM ADA DM3 LDA 0,I JSB EPIL. JMP PATMA,I SPC 2 PATO4 ADA D5 LE MODELE EST LA CH. VIDE STA FIPPM POUR METTRE LES BONNES ADA DM3 BORNES POUR UN EVENTUEL CLB,INB REMPLACEMENT. STB 0,I JMP PATO5 SPC 3 * ECHEC TRES CERTAIN - ECHEC FATAL. * ------------ * * VIDE LA PILE P. M. * ECPM4 LDB FIPPM FIN DE PILE P.M. CPB .PILP JMP EPM4 LA PILE P.M. EST DEJA VIDE EPM2 ADB DM6 STB PTPPM LDA 1,I AND MASKT CPA TYAD0 JSB EPM3 IL FAUT LIBERER LDB PTPPM CPB .PILP RSS C'EST FINI JMP EPM2 AU SUIVANT * EPM4 LDA ADREF SZA JSB LIBER CLA,INA STA NBADR REINITIALISATION NB ADR STA INGOT POSITIONNE EN ECHEC LDA GARCH (RANBO) SZA JSB LIBER CLA STA GARCH SPC 1 LDB DEPIR VIDER LA PILE INTERPRETEUR ADB DM1 JSB VIDPI * JSB NEXTL POUR NE PAS FAIRE LE REMPLACEMENT * JMP PATMA,I SPC 3 EPM3 NOP IL FAUT LIBERER DS LA PILE P.M. INB LDA 1,I JSB LIBER JMP EPM3,I SKP ************************************************************** * * * PILPM * * FABRICATION DE LA PILE PAT. MA. * * * ************************************************************** SPC 2 PILPM NOP LDA .PILP STA PTPPM INIT. DE PTPPM LDB NBADR CMB,INB STB COUPM BLS MULTIPLICATION PAR 2 ADB PTPIL STB PM02 POINTE SUR ADR. DE LA REFERENCE ADB DM1 LDA 1,I CPA TYAD6 RSS C'EST UN AD6 JMP PILPG FAIRE NORMALLEMENT LDA TYAD0 IL FAUT METTRE: AD0 OU AD2 STA 1,I INB LDA 1,I STA ADCHA POUR LE LIBERER APRES JSB RECTA CLA C'EST UNE CH. VIDE STA PM02,I LDA ADCHA JSB LIBER LIBER LE TYAD6 LDB PM02 LDA 1,I SZA,RSS JMP PILPF C'EST VIDE DONC AD0 - 0 ADA DM1 RECULER JUSQU'AU -N LDB 0,I DU SYMBOL SSB,RSS JMP *-3 LDB PM02 STA 1,I OK A = ADRESSE DU SYMBOL ADB DM1 LDA TYAD2 STA 1,I METTRE LE TYAD2 PILPG INB PILPF JSB RAN00 POUR REMPLIR ADREF DEF ADREF NOP LA REF EST LA CHAINE VIDE PILP0 LDB PM02 ON VA CHERCHER LES CHAINES MODELES INB LDA PTPPM INA STA PM03 POUR SAUVER LA CHAINE DS LA PILE LDA 1,I A = LE TYPE STA PTPPM,I METTRE LE TYPE DS LA PILE P.M. INB STB PM02 CPA TYAD2 RSS CPA TYAD6 JMP PILP6 C'EST UN TYPE AD6. BACK-REF ? AND MASKT CPA TYAD3 RSS CPA TYAD4 JMP PILP3 PILP9 LDA TYAD0 NI TYPE AD3,AD4,AD7. NI BACK-REF. STA PTPPM,I EMPILE TYPE AD0 JSB RAN00 PM03 NOP JMP PILP2 LA CH. EST VIDE .PTPPM BOUGE PAS LDB PM02 ADB DM1 POUR POINTER SUR LE TYPE LDA 1,I QUE L'ON VIENT DE RANGER CLB AND MASKT CPA TYAD0 STB PM02,I POUR NE PLUS LIBERER CETTE CH. PILP4 LDA PTPPM ADA D2 CLB,INB STB 0,I INITIALISE TOUS LES INA BORNE INF. ET LES STB 0,I BORNE SUP. A 1 INA CLB STB 0,I POUR LA LONGUEUR INA STB 0,I POUR L'INDIRECTION INA STA PTPPM LDB PM02 ADB DM1 LDA 1,I CPA TYPD3 RSS CPA TYPD4 JMP PILPC IL Y A UNE LONGUEUR PILP5 ISZ COUPM JMP PILP0 POUR LE PARAM. SUIVANT LDA PTPPM STA FIPPM INITIALISE FIPPM JMP PILPM,I RETOUR * PILP2 LDB PM02 LA CH. EST VIDE ADB DM1 A-T-ON UN AD6? LDA 1,I CPA TYAD6 RSS OUI JMP PILP5 NON AU SUIVANT LDA TYAD2 ON EMPILE LA CH. VIDE STA 1,I INB LDA .0000 STA 1,I JMP PILP5 * PILP3 LDA 1,I STA PM03,I RECOPIE L'ADR. DS LA PILE P.M. JMP PILP4 * PILP6 LDA PTPPM BACK. REF. ? PILP8 CPA .PILP JMP PILP9 PAS DE BACK-REF. IL FAUT RANGER ADA DM6 STA GAR31 LDB 0,I CPB TYAD7 EN CAS DE AD7, L'ADRESSE NE POINTE JMP PILP7 PAS VERS UNE CHAINE, ON SAUTE INA LDA 0,I LDB PM02,I JSB COMPA JMP PILP7 LES CH. SONT DIFFERENTES LDA GAR31 LDB 0,I VERIF. TYPE ORIGINE DU BACK-REF. CPB TYAD3 RSS CPB TYPD3 RSS CPB TYAD4 RSS CPB TYPD4 RSS JMP PILP7 PAS BACK-REF., AU SUIVANT LDA PM02 C'EST BIEN UN BACK-REF. ADA DM1 LDB 0,I CPB TYAD6 JMP PILPA CPB TYAD2 JMP PILPB HLT 0B SYSTEM ERROR!... PILPA LDA PM02,I ON VIENT D'UN AD6 JSB LIBER IL FAUT LIBERER ET PILPB LDB PM02 REMPILER UN TYAD7 ADB DM1 LDA TYAD7 TYPE DU BACK-REF STA 1,I METTRE TYAD7 DS LA PILE VRAIE STA PTPPM,I METTRE TYPAD7 DS LA PILE P.M. LDA GAR31 METTRE LE POINTEUR PTPPM STA PM03,I DANS LA PILE P.M. STA PM02,I DANS LA PILE VRAIE JMP PILP4 C'EST TERMINE PILP7 LDA GAR31 LDB PM02 JMP PILP8 VOIR LA SUIVANTE POUR LE BACK-REF. * PILPC ADB D3 IL Y A UNE LONGUEUR STB PM02 ISZ COUPM UN PARAM. DE MOINS A LIRE LDA 1,I SZA,RSS JMP PILP5 LA LONGUEUR EST NULLE, SUIVANT STB PILPD JSB FMRCD CALCULE LA LONGUEUR PILPD NOP .ER15 JSB ERR10 CE N'EST PAS UN NOMBRE LDB PTPPM ADB DM2 STA 1,I METTRE LA LONGUEUR DS. PILE P.M. JMP PILP5 AU SUIVANT SPC 2 NBMAX NOP NB MAX+1 DE CARA. DE LA REF. SKP ************************************************************* * * * NAMIG: PROCEDURE D'ASSIGNEMENT APRES UN PAT. MA. * * * ************************************************************* SPC 2 NAMIG NOP LDA PTMOD,I POUR LE TYPE STA SAVTY AND MASKT STA 1 ISZ PTMOD LDA PTMOD,I (A)=AD. MODEL PIL INT CPB TYAD0 JMP TYPE0 CPB TYAD1 JMP TYPE0 AD1 IDEM AD0 CPB TYAD2 JMP TYPE2 CPB TYAD3 JMP TYPE3 CPB TYAD4 JMP TYPE3 AD4 IDEM AD3 CPB TYAD7 JMP FINAM HLT 20B TYPE INCONNU * TYPE0 LDA PTPPM,I JSB LIBER JMP FINAM * TYPE2 JSB LONG LDA 1,I IFZ SSA JSB VAL1 XIF SZA,RSS EST-CE LA CH. VIDE? JMP FNAM2 OUI JMP TYPE0 NON * TYPE3 LDB .ASTE CHAINE SANS NON JSB COMPA RSS JMP TYPI5 C'EST LA CHAINE SANS NOM LDA PTPPM JSB RANBO POUR CREER LA CHAINE LDA SAVTY AND D2 SZA,RSS Y-A-T-IL UNE INDIRECTION ? JMP TYPI4 NON LDA PTMOD,I OUI JSB LONG LDA 1,I STA PTMOD,I TYPI4 JMP ASTY3 TYPI5 LDA SAVTY TYPE AVEC LONGUEUR ? SLA,RSS JMP FINAM NON ISZ COUPM OUI ISZ PTMOD IL FAUT SAUTER LA ISZ PTMOD CHAINE LONGUEUR * FINAM LDA PTPPM ADA D6 STA PTPPM FNAM2 ISZ PTMOD JMP NAMIG,I SPC 3 * ASSIGNEMENT PROPREMENT DIT ** * ASTY3 LDA PTMOD,I AD. MOD. INT. JSB RECTA JMP ATY32 LE SYMBOLE N'Y EST PAS ATY34 STA COBLC POUR L'ASSIGNER IFN LDA 0,I XIF IFZ LDB 0 JSB KILL POUR LIBERE SUR DISQUE XIF SZA A-T-ELLE UNE VALEUR? JSB LIBER OUI,ONLIBER LA VIEILLE LDA GARCH AD. DE LA NEW VALEUR LDB COBLC JSB ASSIG CLA STA GARCH JMP TYPI5 * ATY32 LDA GARCH LE SYMBOLE N'EST PAS DS. T.S. SZA,RSS LA VALEUR EST-ELLE VIDE? JMP TYPI5 OUI, C'EST FINI, LDA PTMOD,I NON, IL FAUT RAJOUTER LE SYMB. JSB ADTAB JMP ATY34 MEME FIN QUE S'IL Y ETAIT DEJA SKP * * POINT MET LES BONS POINTEURS DANS LA PIL P.M. * B=AD. DE LA FIN ACTUELLE DE LA PILE P.M. * * * POINT NOP ADB DM4 POUR AVOIR LIM. INF. LDA .PILP ADA DM3 STA GAR32 TEST FIN DE PILE P.M. POIN2 STB 0 LDA 0,I (A)=LIM. INF. ADB DM5 CPB GAR32 FIN DE PILE P.M.? JMP POINT,I OUI STA 1,I NON ADB DM1 LIMSP. SUIVANTE JMP POIN2 SPC 4 * * RANBO LDA POINTEUR AD. PILE P.M. * JSB RANBO * * RETOUR RANBO RANGE LA CHAINE CORRESPONDANTE AU BORNES * QUI SONT AU DESSUS DE(A), LA CH. EST SAUVEE * DANS GARCH * SI BORNI=BORNS, LA CH. EST VIDE ET GARCH=0 * RANBO NOP STA GAR35 LDA GARCH SZA JSB LIBER LDA GAR35 ADA D2 LDB 0,I ADA DM1 LDA 0,I CPA 1 JMP RANB2 CHAINE VIDE JSB NEWCH DEF ADREF .GARC DEF GARCH JMP RANBO,I * RANB2 CLA STA GARCH JMP RANBO,I * LST SKP * UNL REPLA * UNL ************************************************************ * * * REPLA: REMPLACEMENT DANS UN PATTERN MATCHING * * * ************************************************************ SPC 2 REPLA NOP LDA INGOT SZA HLT 0B PAS DE REMPLACEMENT SI PATTERN ECHOUE * * * REMPLACEMENT EN CAS DE SUCCES ***** * * JSB RAN12 DEF ADREP NOP RETOUR SI CHAINE VIDE CCB JSB PILE. CPA TYA11 RSS HLT 0B CLB JSB PILE. STA BORNS CCB JSB PILE. CPA TYA10 RSS HLT 0B CLB JSB PILE. STA BORNI JSB RAN12 DEF ADREF JMP REPL5 LA REF EST LA CH. VIDE CLA,INA LDB BORNI JSB REMPI ON EMPILE LA PARTIE GAUCHE LDA ADREP SZA,RSS EST-CE LA CH. VIDE JMP REPL2 OUI STA ADCH0 NON, PREPARATION DES CONSTANTES JSB LONG POUR EMPILER LA CH. PEMPLACEMENT STB COBLC JSB EMPI REPL3 LDA BORNS LDB ADREF,I CMB,INB INB JSB REMPI ON EMPILE LA PARTIE DTE. JSB CONC2 JSB CONC2 JSB EGAL LDA ADREF SZA JSB LIBER JMP REPLA,I SPC 1 REPL5 LDB PTPIL LA REF EST UNE CH. VIDE ADB DM2 IL FAUT DEPILER LE NOM DE REF. JSB VIDPI JMP REPLA,I SPC 4 REPL2 LDA TYAD2 REMPLAC. PAR LA CH. VIDE JSB EPIL. LDA .0000 JSB EPIL. JMP REPL3 * * * REMPI NOP STA GAR33 STB GAR34 LDA TYAD0 JSB EPIL. JSB EPIL. POUR AVOIR PTPIL STB REMP2 LDA GAR33 LDB GAR34 CPA 1 EST-CE LA CH. VIDE JMP REMP3 OUI JSB NEWCH NON DEF ADREF REMP2 NOP JMP REMPI,I * REMP3 CCA ADA REMP2 (A)=PTPIL-1 LDB TYAD2 STB 0,I INA LDB .0000 STB 0,I JMP REMPI,I * LST SKP * UNL SYSPI,SYSPO * UNL ******************************************************************** * * * SYSPI : * * LECTURE SUR LE TELETYPE * * APPEL DANS INDI SUR UN TYPE AD0 * * DANS RAN12 SUR TYPE AD2 * * RETOUR (B)=CBSPI AD. DU C.B. DE SYSPIT * * "" * ******************************************************************** SPC 2 SYSPI NOP STB CBSPJ CPB CBSPI JMP SYPI2 CPB CBSPR JMP SYPI3 JMP SYSPI,I SYPI2 LDA .QUET CLB,INB JSB IMPRI CLA,INA,RSS SYPI3 LDA D5 ADA O400 STA COWI1 LDA CBSPJ,I SSA .ER25 JSB ERR10 SYSPRT & SYSPIT NE SNONT PAS DISQUE SZA JSB LIBER JSB LECTU LDB CBSPJ JMP SYSPI,I * .QUET DEF *+1 DEC -4 ASC 2,_ SIGNALE LE CONTROLE SUR LE TTY SKP * * EGALITE REELLE. * AVEC TEST POUR LES SORTIES. * * APPEL: * LDA PTRCH (VALEUR A DONNER) * LDB C.B. SYMB. (COMPTEUR BLEU DU SYMBOL) * JSB ASSIG * * SPC 2 ASSIG NOP STB GAR61 IFZ LDB 1,I SSB,RSS JMP ASSI2 C'EST NORMAL. SZA JMP ASSI3 C'EST SUR LE DISQUE LDA ..0 CHAINE VIDE SUR DISQUE ASSI5 STA GAR61,I JMP ASSI4 ASSI3 JSB ECRIT ECRITURE SUR DISQUE JMP ASSI5 ASSI2 LDB GAR61 POUR RESTORER B XIF STA 1,I SZA JSB SAVE ASSI4 LDA GAR61 POUR LES I/O * * IMPRESSION ? * CLB CPA CBSPO CLB,INB CPA CBSPP LDB D4 CPA CBSPL LDB D6 SZB,RSS JMP ASSIG,I PAS DE SORTIE. LDA 0,I SZA,RSS LDA .ESIM JSB IMPRI JMP ASSIG,I SPC 2 .ESIM DEF *+1 DEC -1 ESPAC OCT 20040 * LST SKP * UNL GOTO1,RECLA,GOTOS,GOTOF,GOTFF * UNL ******************************************************************** * * * GOTO1 : * * BRANCHEMENT INCONDITIONNEL * * * ******************************************************************** SPC 2 GOTO1 NOP CCB JSB PILE. LECTURE DU TYPE D'AD. STA SAVTY CLB STB GAPA1 ON NE LIBERE PAS SI GAPA1=0 JSB PILE. DEPILE L'ADRESSE LDB SAVTY CPB TYAD5 JMP GOT12 CPB TYAD6 JMP GOT13 HLT 32B ERREUR D'AD. DANS LA CH.POST. GOT13 STA GAPA1 JSB RECLA RECHERCHE TABLE LABEL .ER01 JSB ERR10 PAS DANS LA TABLE LDA 0,I VALEUR DU C.B. LABEL GOT12 ADA DM1 AD. DE BRANCHEMENT MOINS UN STA PTPOS DEPI2 L'INCREMENTE POUR AVOIR LA BONNE AD. LDA GAPA1 SZA GAPA1=0? JSB LIBER POUR LE TYPE AD0 JMP GOTO1,I * * ************************************************************ * RECLA: RECHERCHE L'ADRESSE D'UN LABEL DANS LA TABLE * * DES LABELS * * APPEL: LDA PTRCH PTR. VERS LE LABEL A TROUVER * * JSB RECLA * * RETOUR: P+1 LABEL NON TROUVE * * P+2 LABEL TROUVE. (A)=AD. C.B.L. * ************************************************************ SPC 2 RECLA NOP STA PTR1 LDB DEBTL RECL2 STB PTR2 JSB COMPA JMP RECL3 STB 0 ISZ RECLA JMP RECLA,I RECL3 LDA PTR2 CPA FINTL JMP RECL4 JSB LONG INB LDA PTR1 JMP RECL2 RECL4 LDA PTR1 JMP RECLA,I SPC 4 ******************************************************************** * * * GOTOS: BRANCHEMENT CONDITIONNEL EN CAS DE SUCCES * * SI INGOT = 0 --> BRANCHEMENT * * POUR TOUTE AUTRE VALEUR, ON SAUTE * * * ******************************************************************** SPC 2 GOTOS NOP LDA INGOT SZA JSB GOTSF RETOUR EN P+2 JSB GOTO1 JMP GOTOS,I SPC 3 ******************************************************************** * * * GOTOF: BRANCHEMENT CONDITIONNEL EN CAS DE FAIL (ECHEC) * * SI INGOT # 0 --> BRANCHEMENT * SI INGOT = 0 --> ON SAUTE * * ******************************************************************** SPC 2 GOTOF NOP LDA INGOT SZA,RSS JSB GOTSF JSB GOTO1 JMP GOTOF,I SPC 4 * GOTSF SOUS PROG. UTILITAIRE * GOTSF NOP ISZ GOTSF LDB PTPIL ADB DM2 JSB VIDPI JMP GOTSF,I SPC 4 *************************************************************** * FINLG: OPERATEUR FIN DE LIGNE * *************************************************************** SPC 2 FINLG NOP CCB JSB PILE. CPA TYA11 JMP FINL3 C'EST UN PETTERN SANS REPLA. FINL2 LDA DEPIR LDB INDRE INDICATEUR DE -RETURN- STA INDRE REMISE INDI # 0 ADA DM1 CPA PTPIL JMP FINL4 OK;LA PILE EST BONNE SZB VIENT-ON DE RETURN .ER23 JSB ERR10 SYSTEM ERREUR:LA PILE N'EST PAS VIDE JSB DEFIN VIDER LA PILE ON A FAIT RETURN JMP FINL2 * * FINL4 JSB STATS SSA,RSS JSB FIMP NON,VOIR LA TABLE JMP FINLG,I * * FINL3 LDB PTPIL IL FAUT VIDER LA PILE ADB DM8 ( 4 CRANS ) JSB VIDPI JMP FINL2 SPC 5 DEFIN NOP LDB DEPIR ADB DM1 JSB VIDPI JMP DEFIN,I * LST SKP * UNL CALL * UNL ************************************************************* * * * CALL PERATEUR APPEL D'UNE FONCTION * * * ************************************************************* SPC 2 CALL NOP LDB PTPIL STB GAR51 GARDE LA VALEUR DE PTPIL LDA PTPOS,I ALF,ALF ALF.. ALF RAR,RAR AND O17 STA NBTRO NB. PARAM A L'APPEL ALS MULTIPLIE PAR 2 CMA,INA ADA PTPIL