NMPROC: VAL "DG" < NOM DU PROCESSEUR. IDP "DG - RELEASE 01/06/1979" IDP "JOHN F. COLONNA" EOT #SIP DEF PROCESSEUR# PROG WORD IMAGE < ENTRY POINT DU GENERATEUR. WORD 0 PIMAGE: EQU $ < P='12 !!! LRP L BR -2,L < ENTRY DANS LE PROCESSEUR. EOT #SIP DEFINITION ITEM# ITEM1: EQU ZERO+PILE-LTNI < @ITEM1. ITEM2: EQU ZERO+PILE-LTNI-LTNI PAGE < < < L O C A L : < < LOCAL LOC: EQU $ < < BUFFER ET MESSAGES : < NOMSEG: WORD 0 < SEGMENT INVALIDE INITIALEMENT. SEGSGN: DZS 4 < SEGMENT GRAPHIQUE COURANT. LONSEG: VAL $-NOMSEG*2 SEG: EQU SEGSGN SEG1: DZS 4 < SAUVEGARDE ET CUMUL SEGMENT. ORIG: DZS 4 < 1ER SEGMNT D'UNE ITERATION (POUR < 'EDSO' ET 'EDSE'). REP: WORD 0 < REPONSE DE REDUCTION. M1: BYTE 9;'6D ASCI "EDITION?" M2: BYTE 13;'6D ASCI "DEPLACEMENT=" MX: BYTE 2;'6D ASCI "X=" MY: BYTE 2;'6D ASCI "Y=" MK: BYTE 2;'6D ASCI "K=" MC: BYTE 1;0 < EDITION DU CODE GENERE. M3: BYTE 21;'6D ASCI "REDUCTION #SEGMENTS?" M4: BYTE 14;'6D ASCI "TRACE POINTS? " M5: BYTE 3;'6D ASCI "A=" M6: BYTE 3;'6D ASCI "B=" < < LISTES DE REMPLACEMENT DE 'A' ET 'B' : < LAB: VAL 10 < NBRE DE CARACTERES MAX. RA: DZS LAB/2 BYTE '04;0 < GARDE-FOU. RB: DZS LAB/2 BYTE '04;0 < GARDE-FOU. < < DEMANDES A CMS4 : < DEMREP: WORD '0101 < LECTURE DU FACTEUR DE REDUCTION. WORD REP-ZERO*2 WORD 1 < 1 CARACTERE. DEMA: WORD '0101 < ENTREE DES REMPLACANTS DE A. WORD RA-ZERO*2 WORD LAB DEMB: WORD '0101 < ENTREE DES REMPLACANTS DE B. WORD RB-ZERO*2 WORD LAB DEMOUT: WORD '0202 < EDITION MESSAGE. WORD 0 < @OCTET DU MESSAGE. WORD 0 < LONGUEUR DU MESSAGE. ERASE: WORD '0205 < EFFAEMENT ECRAN VISU. DERASE: EQU ERASE DEMGS: WORD '0008 < ACCES A LA ZDC. WORD NOMSEG-ZERO*2 WORD LONSEG WORD 'FFC0 DELGS: WORD '000A < ECRITURE DANS LA ZDC. WORD NOMSEG-ZERO*2 WORD SEGSGN-NOMSEG*2 WORD 'C000 DEMCCI: WORD '0001 < DEMANDE DE RETOUR AU CCI. DEMSGN: WORD '8402 < DEMANDE SGN OVERLAY. WORD BRANCH-ZERO*2 WORD ZERO-BRANCH+PILE-LTNI-LTNI*2 WORD -1 < < RELAIS DIVERS : < AGOGE: WORD GOGE < RETOUR A 'GE'. AOVL: WORD OVL < CHARGEMENT DES OVERLAYS. APRINT: WORD PRINT < EDITION D'UN MESSAGE. AENTER: WORD ENTER < ENTREE REPONSE OUI/NON. ASTOKA: WORD STOKA < PRIMITIVE 'A'. ASTOKB: WORD STOKB < PRIMITIVE 'B'. ASTOK: WORD STOK < GENERATION DU CODE DANS ITEM1. AENTC: WORD ENTC < ENTREE D'UNE CONSTANTE X/Y/K. ACONV: WORD CONV < CONVERSION BINAIRE-->ASCI. AMCV: WORD MCV < DETERMINATION DES DEPLACEMENTS 1/2/3/4. ADIVIS: WORD DIVIS AGETS: WORD GETS < ACCES A UN SEGMENT EN ZDC. AEDSO: WORD EDSO < GENERATION ORIGINE SEGMENT. AEDSE: WORD EDSE < GENRATION EXTREMITE SEGMENT. AEDSEG: WORD EDSEG < GENERATION ITERATION SEGMENT. AITEM: WORD ZERO+PILE-LTNI+LTN,X APILE: WORD PILE-1 ARAB: WORD 0 < RELAI INDEXE VERS RA OU RB. AMESS: WORD 0 < VARIABLE DE ENTER. < < CONSTANTES : < KIN: WORD -1 < COMPTEUR DES ENTREES DANS 'VG'. NGE: ASCI "GE" < NOM DU PROCESSEUR DE RETOUR. IEG: WORD 0 < INDEX COURANT ITEM. KSEG: WORD 0 < COMPTEUR DE SEGMENTS. NITER: WORD 0 < ITERATION DES DEPLACEMENTS CV. QK: WORD 0 < QK=QUOTIENT(KSEG/35), RK: WORD 0 < RK=RESTE(KSEG/35). KX: WORD 0 < CONSTANTE X DE GR. KY: WORD 0 < CONSTANTE Y DE GR. KK: WORD 0 < CONSTANTE K DE GR. CKX: WORD 0 < KX ASCI, CKY: WORD 0 < KY ASCI, CKK: WORD 0 < KK ASCI. CV: DZS 2 < CURSEUR VIRTUEL. DX: WORD 0 DY: WORD 0 DX1: WORD 0 DY1: WORD 0 X: VAL 1 < COORDONNEE X. Y: VAL 0 < COORDONNEE Y. CAR1: WORD 0 < INDEX DU 1ER CARACTERE GENERE. IEDIT: WORD 0 < 0=EDITION DU CODE GENERE. ALITEM: WORD NBCAR*NBLIG < NBRE DE CARACTERES D'UN ITEM. CTTE: WORD 0 < VARIABLE TEMPORAIRE. WORK1: WORD 0 < VARIABLE TEMPORAIRE. WORK2: WORD 0 < VARIABLE TEMPORAIRE. C35: WORD "Z"-"A"+10 < VALEUR BINAIRE DU 'Z' DE GR. NQ: WORD 0 < QUOTIENT D'UNE DIVISION, NR: WORD 0 < RESTE DE LA MEME DIVISION. NPAS: WORD 0 < NPAS=NQ*C35+NR. IOPT: WORD 0 < 0 : REDUIRE SI POSSIBLE LE NBRE DE SEGMEN < MENTS. ISOL: WORD 0 < 1 : GENERE LES SEQUENCES < DU TYPE 'AB' (SEGMENT=POINT). < < PILE DE TRAVAIL : < STACK: DZS 20 PAGE PROG < < < E M I S S I O N D ' U N M E S S A G E : < < < FONCTION : < EDITER UN MESSAGE ; DE PLUS SI < LE DEMANDEUR EST SOUS :SYS , < CETTE ROUTINE STABILISE L'IMAGE < VIDEO COURANTE. < < < ARGUMENT : < A=@MOT DU MESSAGE. < < PRINT: EQU $ PSR X LR A,C < C=@MOT DU MESSAGE. ADR A,A ADRI 1,A < A=@OCTET DU MESSAGE. STA DEMOUT+1 < MAJ DE DEMOUT. LBY 0,C < A=LONGUEUR DU MESSAGE. STA DEMOUT+2 < MAJ DE DEMOUT. LAD DEMOUT SVC 0 < EMISSION MESSAGE. PLR X RSR < < < E N T R E E R E P O N S E : < < < ARGUMENT : < A=@MESSAGE. < < < RESULTAT : < B=0 SI OUI, < 1 SI NON, ET DE PLUS < LES CODES CONDITIONS SONT POSITIONNES PAR 'CPZR B'. < < ENTER1: EQU $ LA AMESS < RESTAURE A=@MESSAGE. ENTER: EQU $ STA AMESS < SAVE @MESSAGE. BSR APRINT < ENVOI DU MESSAGE. LAD DEMREP SVC 0 LBY REP < ANALYSE DE LA REPONSE ENTREE. LBI 0 < OUI A PRIORI. CPI "O" JE ENTER2 < OUI. CPI "N" JNE ENTER1 < RIEN COMPRIS... LBI 1 < NON. ENTER2: EQU $ CPZR B < TEST EN RETOUR. RSR PAGE < < < G E N E R A T I O N D U C O D E : < < < ARGUMENT : < A=CARACTERE A INSERER, < IEG=INDEX D'INSERTION. < < < RESULTAT : < IEG<--(IEG)+1 < < STOK: EQU $ PSR A,X LX IEG < X=INDEX D'INSERTION. STBY &AITEM < GENERATION. IC IEG < MAJ DE L'INDEX COURANT. CPZ IEDIT < FAUT-IL EDITER ??? JNE STOK1 < NON. SBT 7 < OUI, MISE EN PLACE D'UN STA MC < LONGUEUR=1 DEVANT LE CARACTERE. LAD MC BSR APRINT < EDITION DU CODE GENERE. STOK1: EQU $ PLR A,X RSR < < < G E N E R A T I O N D E ' A ' O U ' B ' : < < STOKA: EQU $ LBI "A" < CAS OU RA EST VIDE.. LAD RA JMP STOK2 STOKB: EQU $ LBI "B" < CAS OU RB EST VIDE. LAD RB STOK2: EQU $ SBT 0 < BIT D'INDEXATION. STA ARAB < GENERATION DU RELAI VERS RA/RB. PSR X LXI 0 < DEPART SUR L'OCTET0 DE RA/RB. STOK3: EQU $ LBY &ARAB < A=OCTET COURANT DE REMPLACEMENT. CPI '04 < EOT ??? JE STOK4 < OUI, FINI... CPI '0D < RC ??? JE STOK4 < OUI, FINI... CPI " " < CODE AFFICHABLE ??? JGE STOK5 < OUI, OK. ADRI '40,A < NON, ON LE CONVERTIT EN CARACTERE SBT 8 < MIS EN EXPOSANT !!! STOK5: EQU $ BSR ASTOK < GENERATION DU CODE. ADRI 1,X < AU CARACTERE SUIVANT. JMP STOK3 < < FIN D'EXPLORATION : < STOK4: EQU $ CPZR X < S'EST-ON ARRETE SUR L'OCTET0 ??? JG STOK6 < NON, RIEN A FAIRE... LR B,A < OUI, IL FAUT GENERE 'A' OU 'B'... BSR ASTOK STOK6: EQU $ PLR X RSR PAGE < < < E N T R E E D ' U N E C O N S T A N T E : < < < ARGUMENT : < A=@MESSAGE A EMETTRE. < < < RESULTAT : < A=CONSTANTE EN BINAIRE, < B=CONSTANTE EN ASCI. < < ENTC1: EQU $ LR Y,A < RESTAURE A=@MESSAGE. ENTC: EQU $ LR A,Y < SAVE Y=@MESSAGE. BSR APRINT < ENVOI DU MESSAGE. PSR X LAD DEMREP SVC 0 < LECTURE DE LA CONSTANTE. PLR X LBY REP < A=CONSTANTE EN ACI, LR A,B < SAVE B=CONSTANTE ASCI. CPI "Z" < VALIDAION SUPERIEURE... JG ENTC1 < ERREUR, ON REDEMANDE. ADRI -"0",A < DECODAGE. JALE ENTC1 < ERREUR, ON REDEMANDE. CPI 9 < VALIDATION 0-9. JLE ENTC2 < OK... ADRI -"A"+"9"+1,A < DECODAGE SUITE. CPI 9 < VALIDATION A-Z. JLE ENTC1 < ERREUR, ON REDEMANDE. ENTC2: EQU $ RSR < ET C'EST TOUT... PAGE < < < C O N V E R S I O N A S C I : < < < ARGUMENT : < A=VALEUR BINAIRE A CONVERTIR. < < < RESULTAT : < A=CONSTANTE ASCI 0-9 OU A-Z. < < CONV: EQU $ ADRI "0",A < CODAGE. CPI "9" < VALIDATION 0-9. JLE CONV1 < OK. ADRI "A"-"9"-1,A < CODAGE SUITE. CONV1: EQU $ RSR < ET C'EST TOUT... PAGE < < < A C C E S S E G M E N T Z D C : < < < RESULTAT : < A=0 SI 'OAB'. < < GETS: EQU $ LAD DEMGS LOOP11: EQU $ SVC 0 CPZ NOMSEG < SEGMENT VALIDE ??? JE LOOP11 < NON, ON ATTEND... STZ NOMSEG < OUI, ON L'ACQUITTE. LAD DELGS SVC 0 LA SEG+0+X OR SEG+0+Y OR SEG+2+X OR SEG+2+Y < TEST DE FIN... RSR PAGE < < < G E N E R A T I O N S E G M E N T : < < < FONCTION : < GENERE UN SEGMENT SUIVANT LES < FORMES A,B,1,2,3,4. < < EDSO: EQU $ < < GENERATION DE X(ORIGINE) : < LA ORIG+0+X SB CV+X < A=DELTA(Z). LB KX < B=KX. LYI "1" < Y="1". BSR AMCV < GENERATION DEPLACEMENTS "1"/"3". STA WORK1 < SAVE CONDITIONS DE RETOUR. < < GENERATION DE Y(ORIGINE) : < LA ORIG+0+Y SB CV+Y < A=DELTA(Z). LB KY < B=KY. LYI "2" < Y="2". BSR AMCV < GENERATION DEPLACEMENTS "2"/"4". OR WORK1 < A-T'ON GENERE POUR L'ORIGINE ??? JAE LOOP12 < NON, RIEN A AJOUTER... BSR ASTOKA LOOP12: EQU $ RSR EDSE: EQU $ < < GENERATION DE X(EXTEMITE) : < LA ORIG+2+X SB CV+X < A=DELTA(Z). LB KX < B=KX. LYI "1" < Y="1". BSR AMCV < GENERATION DEPLACEMENTS "1"/"3". STA WORK1 < SAVE CONDITIONS DE RETOUR. JAE LOOP14 < LE 'CV' NE S'EST PAS DEPLACE... LA ORIG+2+X < OUI, DEPLACONS ADR B,A < 'ORIG' DE LA STA ORIG+2+X < MEME QUANTITE (B)... LOOP14: EQU $ < < GENERATION DE Y(EXTREMITE) : < LA ORIG+2+Y SB CV+Y < A=DELTA(Z). LB KY < B=KY. LYI "2" < Y="2". BSR AMCV < GENERATION DEPLACEMENTS "2"/"4". JAE LOOP15 < PAS DE DEPLACEMENT VERTICAL. XR A,B AD ORIG+2+Y < DEPLACONS 'ORIG' DE LA MEME STA ORIG+2+Y < QUE 'CV' (B). LR B,A < RESTAURE A... LOOP15: EQU $ OR ISOL < FAUT-IL GENERER LES CAS 'AB' ??? OR WORK1 < A-T'ON DEPLACE LE CV ??? JAE LOOP13 < NON, RIEN A FAIRE... BSR ASTOKB LOOP13: EQU $ RSR < < < I T E R A T I O N S E G M E N T : < < EDSEG: EQU $ CPZ IOPT < OPTIMISE-T'ON ??? JNE LOOP7 < NON... LX SEG1+2+X < OUI, IL FAUT DONC LY SEG1+2+Y < CHANGER L'EXTREMITE STX ORIG+2+X < DE ORIG. STY ORIG+2+Y LOOP7: EQU $ LAI 1 STA NITER < 1 ITERATION SUR CV. BSR AEDSO < ORIGINE SEGMENT. < < RESTE-T'IL QUELQUE CHOSE A FAIRE ??? < LA ORIG+2+X SB CV+X < A=DELTA(X), LB KX < B=KX. BSR ADIVIS < A=ABSVAL(DELTA(X))/KX. STA WORK2 < SAVE LE QUOTIENT. LA ORIG+2+Y SB CV+Y < A=DELTA(Y), LB KY < B=KY. BSR ADIVIS < A=ABSVAL(DELTA(Y))/KY. OR WORK2 < SOMMATION DES 2 RESULTATS. OR ISOL < FAUT-IL GENERER LES POINTS ??? JAE EDSEG4 < LE SEGMENT A CONSTRUIRE EST < INDETERMINE ('AB'). LA KSEG < A=COMPTEUR DE SEGMENTS IDENTIQUES. JAE $ < E R R E U R P R O G R A M M E. SARD 16 < EXTENSION 32 BITS. DV C35 STA QK < QUOTIENT, STB RK < RESTE. JAE EDSEG1 < QUOTIENT=0, VERS LE RESTE. CPI 1 JG EDSEG2 < QUOTIENT>1. < < CAS QUOTIENT=1 : < LAI '25 BSR ASTOK < % LAI "Z" BSR ASTOK < %Z LAI "(" BSR ASTOK < %Z( LA C35 STA NITER < C35 ITERATIONS SUR CV. BSR AEDSE < %Z(SEG JMP EDSEG3 < < CAS QUOTIENT>1 : < EDSEG2: EQU $ LAI '25 BSR ASTOK < % LA QK BSR ACONV BSR ASTOK < %Q LAI "(" BSR ASTOK < %Q( LAI '25 BSR ASTOK < %Q(% LAI "Z" BSR ASTOK < %Q(%Z LAI "(" BSR ASTOK < %Q(%Z( LA C35 MP QK STB NITER < QK*C35 ITERATIONS SUR CV. BSR AEDSE < %Q(%Z(SEG LAI ")" BSR ASTOK < %Q(%Z(SEG) EDSEG3: EQU $ LAI ")" BSR ASTOK < %Z(SEG) OU %Q(%Z(SEG)) < < TRAITEMENT DU RESTE : < EDSEG1: EQU $ LA RK JAE EDSEG4 < RESTE=0. STA NITER < RK ITERATIONS SUR CV. CPI 1 JG EDSEG5 < < CAS RESTE=1 : < BSR AEDSE < SEG JMP EDSEG4 < < CAS RESTE>1 : < EDSEG5: EQU $ LAI '25 BSR ASTOK < % LA RK BSR ACONV BSR ASTOK < %R LAI "(" BSR ASTOK < %R( BSR AEDSE < %R(SEG LAI ")" BSR ASTOK < %R(SEG) < < FIN DE GENERATION : < EDSEG4: EQU $ RSR PAGE < < < D I V I S I O N : < < < ARGUMENT : < A=DIVIDENDE, < B=DIVISEUR. < < < RESULTAT : < A=QUOTIENT DE ABSVAL(DIVIDENDE) PAR < EXCES OU PAR DEFAUT. < Y <-- (Y)+2 SI DIVIDENDE<0. < < DIVIS: EQU $ STB CTTE < SAVE CTTE=KX OU KY. JAG MCV2 < DELTA(Z)>0 : (Y) EST BON. NGR A,A < DELTA(Z)<0 : ON PREND < ABSVAL(DELTA(Z)), ADRI 2,Y < "1"/"2" --> "3"/"4". MCV2: EQU $ SARD 16 < EXTENSION 32 BITS DE < ABSVAL(DELTA(Z)). DV CTTE < DIVISONS PAR LE PAS DX/DY. ADR B,B < AFIN D'ETRE COMPATIBLE < AVEC G2.G3/GV. XR A,B CP CTTE JL MCV3 < DIVISION PAR DEFAUT, ADRI 1,B < DIVISION PAR EXCES. MCV3: EQU $ LR B,A < A=NBRE D'ITERATIONS DE (Y). RSR PAGE < < < G E N E R A T I O N D E P L A C E M E N T S : < < < ARGUMENT : < A=Z(SEG)-Z(CV), Z ETANT L'UNE DES COORDONNEES X/Y, < B=(KX) OU (KY) SUIVANT X/Y. < Y="1" OU "2" SUIVANT X/Y. < < < RESULTAT : < A=0 SI RIEN N'A ETE GENERE. < B=VALEUR DU DEPLACEMENT DE 'CV' SI A#0. < < MCV: EQU $ JAE MCV1 < DELTA(Z)=0, RIEN A FAIRE... BSR ADIVIS < CALCUL DU NBRE D'ITERATIONS DE (Y) < DANS LE REGISTRE A. STA NPAS < ET SAVE (A). JAE MCV1 < (A) EST NUL A (CTTE) PRES, DONC < RIEN A FAIRE... < < GENERATION DU CODE : < SARD 16 < EXTENSION 32 BITS. DV C35 < DIVISION PAR 'Z'. STA NQ < SAVE LE QUOTIENT, STB NR < ET SAVE LE RESTE. JAE MCV4 < QUOTIENT=0, ALLONS TRAITER < LE RESTE. < < TRAITEMENT DU QUOTIENT : < LAI '25 BSR ASTOK < % LAI "Z" BSR ASTOK < %Z LAI "(" BSR ASTOK < %Z( LA NQ CPI 5 < TEST DU QUOTIENT PAR RAPPORT A 5. JLE MCV5 < NQ<=5, PAS D'ITERATIONS. < < CAS DU QUOTIENT >5 : < LAI '25 BSR ASTOK < %Z(% LA NQ BSR ACONV < CONVERSION ASCI DE NQ. BSR ASTOK < %Z(%Q LAI "(" BSR ASTOK < %Z(%Q( LR Y,A < CARACTERE A ITERER. BSR ASTOK < %Z(%Q(Y LAI ")" BSR ASTOK < %Z(%Q(Y) JMP MCV6 < VERS LA FIN DU QUOTIENT. < < CAS DU QUOTIENT <=5 : < MCV5: EQU $ LR A,X < X=NBRE D'ITERATIONS DE (Y). LR Y,A < A=CARACTERE A GENERER. MCV7: EQU $ BSR ASTOK < %Z(Y..Y JDX MCV7 MCV6: EQU $ LAI ")" BSR ASTOK < %Z(%Q(Y)) OU %Z(Y..Y) < < TRAITEMENT DU RESTE : < MCV4: EQU $ LA NR JAE MCV9 < RESTE NUL, RIEN A FAIRE... CPI 5 < TEST DE NR PAR RAPPORT A 5. JLE MCV8 < NR<=5 : PAS D'ITERATION. < < CAS DU RESTE >5 : < LAI '25 BSR ASTOK < % LA NR BSR ACONV < CONVERSION ASCI DE NR. BSR ASTOK < %R LAI "(" BSR ASTOK < %R( LR Y,A < A=CARACTERE A ITERER. BSR ASTOK < %R(Y LAI ")" BSR ASTOK < %R(Y) JMP MCV9 < VERS LE CALCUL DE CV. < < CAS DU RESTE<=5 : < MCV8: EQU $ LR A,X < X=NBRE D'ITERATIONS DE (Y). LR Y,A < A=CARACTERE A ITERER. MCV10: EQU $ BSR ASTOK < Y..Y JDX MCV10 < < MISE A JOUR DE CV : < MCV9: EQU $ LA NPAS < DEPLACEMENT VIRTUEL EN < UNITE (CTTE). MP CTTE < B=DEPLACEMENT REEL EN POINTS. LR B,A MP NITER < ITERATIONS SUR CV. LR Y,A < A=TYPE DU DEPLACEMENT "1"/"2"/"3"/"4". CPI "2" < EST-IL POSITIF (X>0, OU Y>0) ??? JLE MCV11 < OUI : "1" OU "2". NGR B,B < NON : "3" OU "4", IL FAUT INVERSER < LE DEPLACEMENT REEL. MCV11: EQU $ TBT 15 < EST-IL SUR X OU SUR Y ??? JC MCV12 < IMPAR ("1" OU "3") : SUR X. < < DEPLACEMENTS SUR Y : < LA CV+Y ADR B,A STA CV+Y JMP MCV13 < < DEPLACEMENT SUR X : < MCV12: EQU $ LA CV+X ADR B,A STA CV+X < < SORTIE : < MCV13: EQU $ LAI 1 < A#0 : AU MPOINS UN DEPLACEMENT < DE GENERE. MCV1: EQU $ < A=0 : ON N'A PAS BOUGE... RSR PAGE < < < R E T O U R A G E : < < GOGE: EQU $ LA APILE LR A,K < REINITIALISATION DE K SUR < LA PILE DE SODOME. < < CHARGEMENT DE L'OVERLAY 'GE' : < LA NGE STA 0,W < MISE EN PLACE DU NOM DE 'GE' < EN TETE DE LA BRANCHE. LAI '06 STBY DEMSGN < NVP DE LOAD SOUS :SYS. E101: EQU $ LAD DEMSGN < A=@DEMSGN ; W=@BRANCH. BSR AOVL < TENTATIVE D'OVERLAY. LAD DEMCCI SVC 0 < SI OVERLAY IMPOSSIBLE , ON < FAIT UN RETOUR AU CCI. JMP E101 < PUIS NOUVELLE TENTATIVE SI !GO. PAGE < < < G E N E R A T E U R D E P R O G R A M M E < G R A P H I Q U E C O M P A C T E : < < < FONCTION : < CE PROCESSEUR, LORSQU'IL LUI RESTE < SUFFISAMENT EE PLACE DANS L'ITEM1 < RECUPERE UN SEGMENT EN ZDC, ET EN DEDUIT < UN DEPLACEMENT OPTIMISE DU TYPE G2/G3... < < WORD LOC+'80 IMAGE: EQU $ LRP L LA -1,L LR A,L < INITIALISATION DE L. LAD STACK-1 LR A,K < INITIALISATION DE K. IC KIN < COMPTAGE DES ENTRIES. JG GOGE < ABORT SI ALT-MODES... < < INITIALISATION DE L'ITEM : < LXI IINDIC-LTN*2 LBY &AITEM < A=TYPE DE L'ITEM1. JAE E40 < L'ITEM EST VIDE... ORI '10 < AFIN DE TESTER SIMULTANEMENT < 'D' ET 'T'. CPI "T" < EST-CE 'T' OU 'D' ??? JNE GOGE < NON, ON ABORTE... < < INITIALISATION DE L'EN-TETE : < E40: EQU $ LAI "T" STBY &AITEM < TYPE 'TEXTE'. LXI LRITEM-LTN LA ALITEM STA &AITEM < LONGUEUR DU CORPS DE L'ITEM. < < MISE DE L'ITEM1 A 'SPACE' : < LXI 0 E3: EQU $ LAI " " STBY &AITEM ADRI 1,X LR X,A CP ALITEM JL E3 < < FAUT-IL EDITER LE CODE GENERE ??? < LAD M1 BSR AENTER STB IEDIT < < GENERATION DES CAS 'AB' ??? < LAD M4 BSR AENTER IBT 15+16 < INVERSION DE LA REPONSE. STB ISOL < 1=OUI !!! < < REMPLACEMENTS DE 'A' ET 'B' : < LAD M5 BSR APRINT LAD DEMA SVC 0 LAD M6 BSR APRINT LAD DEMB SVC 0 < < REDUCTION DU NBRE DE SEGMENTS : < LAD M3 BSR AENTER STB IOPT < < DEPLACEMENT INITIAL 'CAR1' : < LAD M2 BSR AENTC STA CAR1 < CAR1>0 !!! < < ENTREE DES COEFFICIENTS K/X/Y : < LAD MK BSR AENTC STA KK STB CKK LAD MX BSR AENTC STA KX STB CKX LAD MY BSR AENTC STA KY STB CKY < < CALCUL DES COEFFICIENTS REELS : < LA KX MP KK STB KX < KX. LA KY MP KK STB KY < KY. < < FAUT-IL EFFACER L'ECRAN ??? < CPZ IEDIT JNE E5 < NON. LAD DERASE SVC 0 < OUI. E5: EQU $ < < BLOCAGE DES 'CAR1' PREMIERS MOTS : < LX CAR1 LAI " " E4: EQU $ BSR ASTOK JDX E4 < < DEBUT DU PROGRAMME GRAPHIQUE : < LAI "K" BSR ASTOK < K LA CKK BSR ASTOK < KK LAI "X" BSR ASTOK < KKX LA CKX BSR ASTOK < KKXX LAI "Y" BSR ASTOK < KKXXY LA CKY BSR ASTOK < KKXXYY BSR ASTOKA < < < R E C U P E R A T I O N D E S S E G M E N T S : < < BSR AGETS < RECUPERATION 1ER SEGMENT. JAE GOGE < DES LE DEBUT 'OAB' !!! JMP LOOP1 < VERS L'INITIALISATION DU PROCESSUS. < < S E G M E N T S S U I V A N T S : < LOOP: EQU $ LA ALITEM SB IEG < A=PLACE ENCORE DISPONIBLE. CPI 14+14+LAB*2+12 JLE GOGE < PAS SUFFISANT, ON ARRETE... BSR AGETS < OK, ON PREND LE SEGMENT < COURANT DE LA ZDC... JANE LOOP2 BSR AEDSEG < ON EDITE SI 'OAB'. JMP GOGE < PUIS ON ARRETE... < < COMPARAISON DE SEG ET SEG1 : < LOOP2: EQU $ LA SEG1+2+X CP SEG+0+X JNE LOOP3 < NON CONSECUTIFS. LA SEG1+2+Y CP SEG+0+Y JNE LOOP3 < NON CONSECUTIFS. LA SEG1+2+X SB SEG1+0+X STA DX1 LA SEG1+2+Y SB SEG1+0+Y STA DY1 LA SEG+2+X SB SEG+0+X STA DX LA SEG+2+Y SB SEG+0+Y STA DY JAE LOOP20 < DY=0. CPZ DY1 JE LOOP20 < DY1=0. EOR DY1 < SIGNES DE DY ET DY1 ??? JAL LOOP3 < PAS LA MEME DIRECTION. LOOP20: EQU $ LA DX JAE LOOP21 < DX=0. CPZ DX1 JE LOOP21 < DX1=0. EOR DX1 < SIGNES DE DX ET DX1 ??? JAL LOOP3 < PAS LA MEME DIRECTION. LOOP21: EQU $ LA DY MP DX1 < DY*DX1. LR A,X LR B,Y LA DX MP DY1 < DX*DY1. CPR A,X JNE LOOP3 < NON COLINEAIRES : CPR B,Y JNE LOOP3 < NON COLINEAIRES. < < CAS OU SEG ET SEG1 SONT COLINEAIRES, CONSECUTIFS, ET DE MEME DIRECTION : < CPZ IOPT < FAUT-IL OPTIMISER ??? JE LOOP4 < OUI... LA DX CP DX1 JNE LOOP3 < DX#DX1 : SEG#SEG1. LA DY CP DY1 JNE LOOP3 < DY#DY1 : SEG#SEG1. < < CAS OU SEG ET SEG1 SONT CUMULABLES : < IC KSEG < ON COMPTE LES SEGMENTS. JMP LOOP6 < VERS LE DEPLACEMENT DE SEG1. < (A CAUSE DES TESTS QUI < PRECEDENT...) LOOP4: EQU $ LA DX OR DY JAE LOOP23 < SEG EST INDETERMINE. LA DX1 OR DY1 < DX1.OR.DY1 JANE LOOP22 < SEG1 EST DETERMINE. LOOP23: EQU $ CPZ ISOL < FAUT-IL GENERER LES POINTS ??? JNE LOOP3 < OUI, ALLONS-Y POUR SEG1. LOOP22: EQU $ LX SEG+2+X < LORSQU'ON OPTIMISE, L'EXTREMITE LY SEG+2+Y < DE SEG, DEVIENT LA STX SEG1+2+X < NOUVELLE EXTREMITE STY SEG1+2+Y < DE SEG1. JMP LOOP < AU SUIVANT... < < CAS OU SEG ET SEG1 NE SONT PAS CUMULABLES : < LOOP3: EQU $ BSR AEDSEG < ON EDITE SEG1, < < RE-INITIALISATION DU PROCESSUS : < LOOP1: EQU $ LAI 1 STA KSEG < KSEG <-- 1. LAD ORIG LR A,B < B=@ORIG. LAD SEG < A=@SEG. LXI 4 < 4 MOTS A DEPLACER. MOVE < ORIG <-- (SEG). LOOP6: EQU $ LAD SEG1 LR A,B < B=@SEG1. LAD SEG < A=@SEG. LXI 4 < 4 MOTS A DEPLACER. MOVE < SEG1 <-- (SEG). JMP LOOP < AU SUIVANT... < < < I M P L A N T A T I O N : < < X12: EQU ZERO+PILE-LTNI-LTNI X10: VAL X12-$ ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLEGE SI < MAUVAISE IMPLANTATION. DZS X10+1 EOT #SIP GEN PROCESSEUR#