< < < < CE PROGRAMME PERMET D'AVOIR DES VUES STEREOSCOPIQUES < DE DESSINS DECRITS EN GEOMETRIE DESCRIPTIVE. < IL GENERE A VOLONTE DES IMAGES GRAPHIQUES OEIL DROIT < ET OEIL GAUCHE DONT ON PEUT PRECISER LA DISTANCE < POUR CHAQUE POINT DE VUE. < A CHAQUE POINT DE VUE, ON PEUT DEMANDER UN CERTAIN < NOMBRE DE COPIES(COPIEUR, CAMERA, ETC...) EN FIXANT < LA TEMPORISATION POUR CHAQUE COPIE. < ON PEUT EGALEMENT GENERER DES IMAGES VIDEO AUXQUELLES < ON DONNE UN NOM AU FUR ET A MESURE ( SI ON NE DONNE < PAS DE NOM, L'IMAGE N'EST PAS CONSERVEE) < ON PEUT ENFIN FIXER L'ECHELLE DE DESSIN < < < LE DESSIN DOIT COMPORTER L'ORIGINE DE LA DESCRIPTIVE < SUIVI D'UN OAB < ON DOIT ENSUITE AVOIR LE DESSIN VUE DE FACE SUIVI D'UN OAB < PUIS LE DESSIN VU DE DESSUS SUIVI D'UN OAB < ET ENFIN UNE SERIE DE TROIS DONNEES FINIE PAR UN OAB < CHAQUE TROIS DONNEE COMPREND LA POSITION OEIL DROIT, < LA POSITION OEIL GAUCHE, ET UN VECTEUR DONNANT LA < DIRECTION DU REGARD < < < PAGE REF SQRT TABLE ZERO: EQU $ EOT #SI CTE CMS# NMPROC: VAL "XX" EOT #SI CTE ITEM# EOT #SI IMA VI# NOM: EQU ZERO+PILE+5-LNOM-2 < NOM DE L'IMAGE VIDEO. IMAG: EQU NOM+LNOM+2 < IMAGE VIDEO PROPREMENT DITE. PAGE < < < INTERFACE AVEC 'CMS4' < < DZS '10 WORD DEBUT < < < POINT D'ENTREE < < WORD STEREO PROG DEBUT: EQU $ LRP L BR -1,L PAGE < < < BUFFERS < < BUF1: DZS 128 BUF2: DZS 128 BUF3: DZS 128 BUF4: DZS 128 PAGE LOCAL ADLOC: EQU $+'80 < < RELAIS A METTRE IMPERATIVEMENT EN TETE DU LOCAL : < (AFIN D'ETRE AISEMENT APPELABLE PAR LES ROUTINES < DE TRANSFORMATIONS CONTENUES DANS L'ITEM2) < < SET '81 (01) ASET: WORD SET < MISE D'UN POINT A 1. < ASET1: WORD SET1 < SET 1 PT SI NON HORS ECRAN < < CONSTANTES ET RELAIS : < X: VAL 1 < COORDONNEE X D'UN POINT, Y: VAL 0 < COORDONNEE Y D'UN POINT. SEGORG: DZS 2 < ORIGINE D'UN SEGMENT. SEGEXT: DZS 2 < EXTREMITE D'UN SEGMENT. AIMAG1: WORD IMAG-1,X < RELAI IMAGE PAR RAPPORT A 1. AIMAG0: WORD IMAG < @IMAGE PAR RAPPORT A 0. ADICO: WORD DICO < DICHOTOMIE D'UN SEGMENT. ATRACE: WORD TRACE < TRACE DICHOTOMIQUE D'UN < SEGMENT VIDEO. ANOM: WORD NOM < NOM DE L'IMAGE ALONG: WORD NOM+LNOM+1 < RELAI VERS INDIC IMAGE < < CONSTANTES DICHOTOMIQUES : < ALIMAG: WORD LIMAG < LONGUEUR IMAGE VIDEO. NMPL: WORD CNMPL < NBRE DE MOTS DE 16 BITS/LIGNE. NLIG: WORD 1024/RDY-1 < NBRE DE LIGNES-1 D'UNE IMAGE. DICOX: WORD 0 < X DU POINT VIDEO COURANT M. DICOY: WORD 0 < Y DU POINT VIDEO COURANT M. DICOX1: WORD 0 < X DE L'ORIGINE VIDEO COURANTE M1. DICOY1: WORD 0 < Y DE L'ORIGINE VIDEO COURANTE M1. DICOX2: WORD 0 < X EXTREMITE VIDEO COURANTE M2. DICOY2: WORD 0 < Y EXTREMITE VIDEO COURANTE M2. PAGE < < RESERVATIONS POUR LES MESSAGES < QGRA: BYTE 11;'6D ASCI "GRAPHIQUE?" QNCOP: BYTE 15;'6D ASCI "NB DE COPIES =" QTEMP: BYTE 8;'6D ASCI "TEMPO =" QEFF: BYTE 9;'6D ASCI "EFFACER?" DISTDG: BYTE 13;'6D ASCI "DIST. VUES =" QVID: BYTE 7;'6D ASCI "VIDEO?" QNOM: BYTE '6D;"N" ASCI "OM =" DISECR: BYTE 14;'6D ASCI "DIST. ECRAN =" ECHMUL: BYTE 10;'6D ASCI "ECHELLE =" ECHDIV: BYTE 3;" " ASCI "/ " QPERSP: BYTE 13;'6D ASCI "PERSPECTIVE?" Q2VUE: BYTE 11;'6D ASCI "DEUX VUES?" QUEST: WORD '0202 DZS 2 NMIMG: DZS 10 < NOM IMAGE BYTE 0;'04 LECNOM: WORD '0101 WORD NMIMG-ZERO*2 WORD 21 DEMNOM: WORD '0202 WORD QNOM-ZERO*2 WORD 6 < < MESSAGES D'ERREURS < ERRPD: BYTE 9;'6D ASCI "CYCLOPE" ERRVEC: BYTE 9;'6D ASCI "VERS OU?" ERRLIN: BYTE 12;'6D ASCI "SUR LE COTE" ERROAB: BYTE 11;'6D ASCI "PAS FINI??" ERRX: BYTE 13;'6D ASCI "X DIFFERENTS" PAGE < < ASSIGNATIONS < ASSN: ASCI "!ASSIGN " < ASSIGN NEW NASSN: BYTE 0;"=" ASCI "N,??STER" NFICN: BYTE 0;"?" IDE1: BYTE 0;'04 ASSO: ASCI "!ASSIGN 7=O,??STER" <ASSIGN OLD NFICO: BYTE 0;"?" IDE2: BYTE 0;'04 ASSR: ASCI "!ASSIGN 7=" < ASSIGN RELEASE BYTE "R";'04 ASSS: ASCI "!ASSIGN " < ASSIGN SAVE NASSS: BYTE 0;"=" BYTE "S";'04 PAGE < < < COMMON < < COMMON ACOM: EQU $ CCI: WORD '0001 < RETOUR AU CCI NOMSEG: WORD 0 < ZONE DE LECTURE DE ZDC SEG: DZS 4 LONSEG: VAL $-NOMSEG*2 Y1: EQU SEG X1: EQU SEG+1 Y2: EQU SEG+2 X2: EQU SEG+3 YSAV: DZS 1 < POUR EVITER TRACAGE INUTILE XSAV: DZS 1 DEMSEG: WORD '0008 < ACCES AU SEGMENT COURANT DE ZDC WORD NOMSEG-ZERO*2 WORD LONSEG WORD 'FFC0 < VALIDATION DES OCTETS DE ZDC DELSEG: WORD '000A < INVALIDATION DU SEGMENT ACQUIS WORD NOMSEG-ZERO*2 WORD SEG-NOMSEG*2 WORD 'C000 < VALIDATION DES OCTETS DE ZDC IF ORDI-"S",XWOR%,,XWOR% STABIL: WORD '8A01 < DEMANDE DE DIFFUSION IMAGE WORD IMAG-ZERO*2 WORD LIMAG*2 DZS 1 XWOR%: VAL 0 SEGM: WORD RESEGM < SP D'ACQUISITION D'UN SEGMENT CORCAR: WORD CARTE < SP D'ACQUISITION EN CARTESIEN RAC: WORD SQRT < SP DE RACINE CARREE MESS: WORD SPIMP < SP D'IMPRESSION DES MESSAGES SPCCI: WORD MESCCI < SP D'APPEL AU CCI INTERPRETATIF SEGT: WORD TSEG < ACQUISITION ET TRACE D'UN SEGMENT OAB: WORD SPOAB < SP POUR SAVOIR SI OAB OPN: WORD SPOPN < SP D'OPEN NEW D'UN FICHIER OPO: WORD SPOPO < SP D'OPEN OLD CLS: WORD SPCLS < SP DE CLOSE SAVE MATP: WORD SPMATP < SP DE CHGT DE REPERE HEX: WORD SPHEX < SP DE LECTURE EN HEXA PROJ: WORD SPPROJ < SP DE CALCUL DE PROJECTION FECH: WORD SPFECH < APPLICATION DE L'ECHELLE DIST2: WORD SPDIS2 < DISTANCE**2 ENTRE 2 POINTS DIST: WORD SPDIST < DISTANCE IF ORDI-"T",XWOR%,,XWOR% LESC: WORD SPLESC < SP DE LECTURE-ECRITURE EN SCRATCH XWOR%: VAL 0 DLEI: WORD SPDLEI < SP DE DEL-LEC-ECR D'UNE IMAGE DLFC: WORD SPDLFC < SP DE DELETE DES FICHIERS DLFP: WORD AUTDEL < DELETE FICHIERS PARTIEL LCON: WORD SPLCON < SP DE LECTURE OUI/NON DBEC: WORD SPDBEC < SP DE CALCUL DE DEBORDEMENT INVER: WORD SPINVE < SP D'INVERSION DE POINTS IF ORDI-"T",XWOR%,,XWOR% ETIM: WORD SPET < SP DE ET IMAGE ET SCRATCH OUIM: WORD SPOU < SP DE OU IMAGE ET SCRRATCH XWOR%: VAL 0 DEB: WORD SPDEB < SP DE DEBORDEMENT D'UN POINT DIFF: WORD SPDIFF < SP DE DIFF. PRODUIT DE COORD. DIFC: WORD SPDIFC < DIFFERENCE DE COORDONNEES INCO: WORD SPINCO < SP D'INVERSION DE COORDONNEES X0: DZS 1 < ORIGINE DE LA DESCRIPTIVE Y0: DZS 1 XC1: DZS 2 < OEIL DROIT YC1: DZS 2 ZC1: DZS 2 XC2: DZS 2 < OEIL GAUCHE YC2: DZS 2 ZC2: DZS 2 XV: DZS 2 < VECTEUR PROJECTIF YV: DZS 2 ZV: DZS 2 XO1: DZS 2 < ORIGINE REFERENTIEL OEIL DROIT YO1: DZS 2 ZO1: DZS 2 XO2: DZS 2 < ORIGINE REFERENTIEL OEIL GAUCHE YO2: DZS 2 ZO2: DZS 2 PD: DZS 2 < DISTANCE ENTRE-Z'YEUX PDS2: DZS 1 < IDEM/2 GD: DZS 2 < DISTANCE DES YEUX A L'ECRAN PGD: DZS 2 < PRODUIT DES DEUX GD1: DZS 1 < DISTANCE OEIL DROIT-ECRAN GD2: DZS 1 < DISTANCE OEIL GAUCHE-ECRAN T11: EQU XC1 < MATRICE DE PASSAGE AU NOUVEAU T12: EQU YC1 < REFERENTIEL T13: EQU ZC1 T21: EQU XC2 T22: EQU YC2 T23: EQU ZC2 T31: EQU XV T32: EQU YV T33: EQU ZV XX1: DZS 2 < COORDONNEES DE TRAVAIL YY1: DZS 2 ZZ1: DZS 2 XX2: DZS 2 YY2: DZS 2 ZZ2: DZS 2 MULT1: DZS 1 < DISTANCE ECRAN MULTI: DZS 1 < MULTIPLICATEUR ECHELLE DIVIS: DZS 1 < DIVISEUR ECHELLE DIV: DZS 2 < DIVISEUR POUR CHMT DE REPERE DVUE: DZS 1 < DISTANCE ENTRE LES VUES ORG: DZS 1 < ORIGINE D'UNE VUE C12: WORD 512 < MILIEU DE L'ECRAN DEPY: WORD -128 < DEPL. Y SUR ECRAN NBPTCM: WORD 50 < NB DE POINTS PAR CM PT5: FLOAT .5 PROX: FLOAT 1E-3 DIV1: DZS 1 < DIVISEUR DE TRAVAIL LIST: EQU $ < TABLE D'APPEL DE SQRT PARAM: DZS 2 RESUL: DZS 2 DZS 1 M23: WORD 1023 < MAX ECRAN DELTAX: DZS 1 < POUR POINTS INVISIBLES DELTAY: DZS 1 DELTAZ: DZS 1 NBSEG: DZS 1 < NB DE SEGMENTS DU DESSIN NBOEIL: DZS 1 < NB DE POINTS DE VUE FLT1: DZS 2 < POUR CALCUL FLOTTANT FLT2: DZS 2 FUN: FLOAT 1 FDEUX: FLOAT 2 ECRERR: WORD '0202 < ECRITURE DES MESSAGES D'ERREUR DZS 2 DONNEE: DZS 2 < POUR LECTURE EN HEXA LECDON: WORD '0101 WORD DONNEE-ZERO*2 WORD 4 ADON: WORD DONNEE+2,X LECON: WORD '0101 < LECTURE OUI/NON WORD DONNEE-ZERO*2 WORD 1 GRAPH: DZS 1 < GRAPHIQUE DEMANDE VIDEO: DZS 1 < VIDEO DEMANDEE NCOP: DZS 1 < NB DE COPIE TEMP: WORD '0005 < TEMPO POUR COPIE WORD 0 TEMPO: DZS 1 EFFMT: DZS 1 < EFFACEMENT DEMANDE PERSP: DZS 1 < PERSPECTIVE D2VUE: DZS 1 < DEUX VUES DEMCOP: WORD '0B07 < DEMANDE DE COPIE WORD '1B17 WORD '8D04 OPENO: WORD '0005 < OPEN OLD WORD 1 WORD 0 OPENN: WORD '0004 < OPEN NEW WORD 1 WORD 0 CLOSS: WORD '0007 < CLOSE SAVE WORD 1 WORD 0 CCII: WORD '0002 < CCI INTERPRETATIF WORD 0 WORD 80 LEC: WORD '0008 < LECTURE-ECRITURE SUR FICHIER WORD BUF1-ZERO*2 WORD 256 ECR1: WORD '0002 WORD BUF1-ZERO*2 WORD 256 ECR2: WORD '0002 WORD BUF2-ZERO*2 WORD 256 ECR3: WORD '0002 WORD BUF3-ZERO*2 WORD 256 LEC4: WORD '0008 WORD BUF4-ZERO*2 WORD 256 DEMDEL: WORD '8302 < DEMANDE DE DELETE DE FICHIER WORD ASSO-ZERO+6*2 WORD 10 WORD -1 DEMMEM: WORD '0004 < DEMANDE 8K POUR IMAGE REDMEM: WORD '0004 < RETOUR A 4K WORD '4000 WORD '2000 SGN: WORD '0002 < DEMANDE AU SGN POUR IMAGES WORD NOM-ZERO*2 WORD LIMAG+LNOM+2*2 WORD 2*LNOM IF ORDI-"T",XWOR%,,XWOR% NMIBD: ASCI "??STERSTER" < NOM IMAGE INTERMEDIAIRE BYTE '04;0 GRG: ASCI "GR" < NOM DES GRILLES BYTE '04;0 GBL: ASCI "GB" BYTE '04;0 TNMGR: WORD GBL < RELAIS VERS CES NOMS WORD GRG ANMGR: WORD TNMGR-1,X ECRSCR: WORD '0C00 < LECTURE-ECRITURE EN SCRATCH WORD 0 WORD 256 WORD 0 AOBF3: WORD BUF3-ZERO*2 < @ OCTET BUFFER SCRATCH AXBF3: WORD BUF3-1,X < RELAI XWOR%: VAL 0 ALPGRA: WORD '0B03 < PASSAGE ALPHA-GRAPHIQUE GRAALP: WORD '0B04 < PASSAGE GRAPHIQUE-ALPHA EFFAC: WORD '0B05 < EFFACEMENT TRAC1: WORD '0B0A < ORIGINE D'UN SEGMENT WORD Y1-ZERO*2 WORD 8 TRAC2: WORD '0B0A < EXTREMITE D'UN SEGMENT WORD Y2-ZERO*2 WORD 4 ABF1: WORD BUF1+1+126,X < RELAIS ABF2: WORD BUF2+1+126,X ABF3: WORD BUF3+1+126,X ABF4: WORD BUF4+1+126,X AREV: WORD REVOIR AREVDS: WORD REVVUE AVUEG: WORD REDESS RELLOC: WORD ADLOC < RELAI VERS LE LOCAL AREL4: WORD REL4 AATDES: WORD AUTDES KSTORE: DZS 40 < PILE DE TRAVAIL PAGE < < < PROGRAMME < < WORD ACOM+'80 PROG STEREO: EQU $ LRP C < INITIALISATION DE C LA -1,C LR A,C LA RELLOC < INITIALISATION DE L LR A,L REVOIR: EQU $ LAD KSTORE-1 < INITIALISATION DE K LR A,K PAGE < < PERIODE DE QUESTIONS-REPONSES < LAD QGRA < GRAPHIQUE? BSR LCON STA GRAPH JANE VVIDEO LAD Q2VUE < DEUX VUES? BSR LCON STA D2VUE JANE RENCOP REDIST: EQU $ LAD DISTDG < DISTANCE VUES BSR HEX JAL REDIST MP NBPTCM STB DVUE RENCOP: EQU $ LAD QNCOP < NB DE COPIES BSR HEX JAL RENCOP STA NCOP JAE PASCOP RETEMP: EQU $ LAD QTEMP < TEMPO BSR HEX JALE RETEMP STA TEMPO PASCOP: EQU $ LAD QEFF < EFFACEMENT BSR LCON STA EFFMT VVIDEO: EQU $ LAD QVID < VIDEO? BSR LCON STA VIDEO AND GRAPH < RIEN A FAIRE? JAE CONTI LAD CCI SVC 0 BR AREV CONTI: EQU $ CPZ GRAPH < SI PAS DE GRAPHIQUE, JE VUGRAP LAD Q2VUE < DEUX VUES? BSR LCON STA D2VUE VUGRAP: EQU $ LAD QPERSP < PERSPECTIVE? BSR LCON STA PERSP JANE RELMUL REDIEC: EQU $ LAD DISECR < DISTANCE ECRAN BSR HEX JALE REDIEC MP NBPTCM SLRD 1 STB MULT1 RELMUL: EQU $ LAD ECHMUL < ECHELLE BSR HEX JALE RELMUL STA MULTI RELDIV: EQU $ LAD ECHDIV BSR HEX JALE RELDIV STA DIVIS < < RELEVER IDESC < WORD '1E45 ORI '30 STBY IDE1 STBY IDE2 < < DETRUIRE LES FICHIERS < BSR DLFC < < ORIGINE DE LA DESCRIPTIVE < BSR SEGM LA X1 STA X0 LA Y1 STA Y0 < < VERIFIER LA FIN DE DEFINITION < BSR SEGM BSR OAB JAE BONOAB LAD ERROAB < ERREUR SINON BR MESS BONOAB: EQU $ < < EFFACER L'ECRAN < LAD EFFAC SVC 0 < < INITIALISER LES VALEURS RETENUES < LAI -1 STA XSAV STA YSAV LAD ALPGRA < PASSER AU MODE GRAPHIQUE SVC 0 < < OUVRIR LE FICHIER 6 ET INITIALISER L'ECRITURE < LAI 6 BSR OPN LAI 6 STBY ECR1 LXI -126 < PT SUR BUFFER LAI 0 < W=NB SEGMENTS LR A,W < < RECEVOIR LE 1ER DESSIN JUSQU'A OAB < REL1: EQU $ PSR X BSR SEGT < LE TRACER EN MEME TEMPS PLR X CPZR X < RESTE-T-IL DE LA PLACE DANS BUFFER JL PLAC1 < OUI LAD ECR1 < NON - L'ECRIRE SVC 0 LXI -126 PLAC1: EQU $ BSR OAB < RELEVER OAB EVENTUEL LR A,Y LA X1 < TRANSFERER LE SEGMENT STA &ABF1 ADRI 1,X LA Y1 STA &ABF1 ADRI 2,X LA X2 STA &ABF1 ADRI 1,X LA Y2 STA &ABF1 ADRI 2,X ADRI 1,W < INCREMENTER LE NB DE SEGMENTS CPZR Y < SI PAS OAB, CONTINUER JNE REL1 LAD ECR1 < C'EST LA FIN SVC 0 < ECRIRE LE DERNIER BUFFER LAI 6 < FERMER LE FICHIER BSR CLS < < RECEPTION DU DEUXIEME DESSIN < LAI 6 < OUVRIR LE FICHIER 6 OLD BSR OPO LAI 6 STBY LEC LAI 4 < OUVRIR LE FICHIER 4 NEW BSR OPN LAI 4 STBY ECR1 LR W,A < SAUVER LE NB DE SEGMENTS STA NBSEG LAD LEC < LIRE LE 1ER BUFFER SVC 0 LXI -126 REL2: EQU $ PSR X BSR SEGT < TRACER LE SEGMENT RECU PLR X CPZR X < EST-ON A LA FIN DU BUFFER? JL PLAC2 LAD ECR1 < OUI - ECRIRE LE COURANT SVC 0 LAD LEC < LIRE LE PROCHAIN SVC 0 LXI -126 PLAC2: EQU $ BSR OAB < PRELEVER OAB EVENTUEL LR A,Y < < TRAITEMENT DE LA PREMIERE COORDONNEE < LA X1 < VOIR SI LES X SONT EGAUX CP &ABF1 JE BONX1 LAD ERRX < SINON ERREUR BR MESS BONX1: EQU $ SB X0 < CALCUL DU X STA &ABF1 ADRI 1,X LA Y0 < CALCUL DU Y SB Y1 LB &ABF1 STA &ABF1 LR B,A < CALCUL DU Z SB Y0 ADRI 1,X STA &ABF1 ADRI 1,X < < TRAITEMENT DE LA DEUXIEME COORDONNEE < LA X2 < VERIFICATION DE L'EGALITE DES X CP &ABF1 JE BONX2 LAD ERRX < ERREUR SINON BR MESS BONX2: EQU $ SB X0 < CALCUL DU X STA &ABF1 ADRI 1,X LA Y0 < CALCUL DU Y SB Y2 LB &ABF1 STA &ABF1 LR B,A < CALCUL DU Z SB Y0 ADRI 1,X STA &ABF1 ADRI 1,X ADRI -1,W < DECOMPTE DU NB DE SEGMENTS CPZR W < ON DOIT AVOIR UN OAB SUR JE FIN1 < LE DEUXIEME DESSIN EN MEME CPZR Y < QUE LA FIN DU PREMIER DESSIN JNE REL2 ERRF: EQU $ LAD ERROAB < ERREUR SINON BR MESS FIN1: EQU $ CPZR Y JNE ERRF < < ECRIRE LE DERNIER BUFFER ET FERMER LES FICHIERS < LAD ECR1 SVC 0 LAI 6 BSR CLS LAI 4 BSR CLS DC NBSEG LAD GRAALP SVC 0 < < DETRUIRE LE FICHIER 6 < LYI 1 BSR DLFP < < OUVRIR LE FICHIER POINT DE VUE < LAI 3 BSR OPN LAI 3 STBY ECR1 LXI -126 STZ NBOEIL < < RECEVOIR LES POINTS DE VUE < NEWPOS: EQU $ CPZR X <PLACE DANS LE BUFFER? JL PLAC5 LAD ECR1 < NON - L'ECRIRE SVC 0 LXI -126 PLAC5: EQU $ PSR X < OEIL DROIT LAD &ABF1 BSR CORCAR PLR X BSR OAB < FIN? JAE FINPOS ADRI 3,X < OEIL GAUCHE PSR X LAD &ABF1 BSR CORCAR PLR X ADRI 3,X < VECTEUR PROJECTEUR PSR X LAD &ABF1 BSR CORCAR PLR X ADRI 3,X IC NBOEIL JMP NEWPOS < < FERMER LE FICHIER < FINPOS: EQU $ LAD ECR1 SVC 0 LAI 3 BSR CLS < < ROUVRIR LE FICHIER EN LECTURE < LAD EFFAC SVC 0 LAI 3 BSR OPO LAI 3 STBY LEC4 LXI 0 < OBLIGER LA LECTURE < < TRAITEMENT POUR UNE VISION < REVVUE: EQU $ CPZ NBOEIL < RESTE-T-IL DES DONNEES? JG AUTOEL LAI 3 < NON - FIN BSR CLS BSR DLFC LAD CCI SVC 0 BR AREV AUTOEL: EQU $ < < LIRE UN POINT DE VUE < CPZR X < EN RESTE-T-IL DANS LE BUFFER? JL PLAC6 LAD LEC4 < NON - LIRE SVC 0 LXI -126 PLAC6: EQU $ LAD XC1 < TRANSFERER LR A,W LYI 9 RETRAN: EQU $ LA &ABF4 FLT FST 0,W ADRI 1,X ADRI 2,W ADRI -1,Y CPZR Y JG RETRAN PSR X < < CALCUL DE LA DISTANCE ENTRE LES YEUX < < DY=SQRT((XC1-XC2)**2+(YC1-YC2)**2+(ZC1-ZC2)**2) < PSR L LAD XC1 LR A,L LAD XC2 LR A,W LAD XX1 LR A,Y BSR DIFC LAD XX1 LR A,L LR A,W BSR DIST FCAZ < ELLE DOIT ETRE NON NULLE JNE BONPD PLR L LAD ERRPD < ERREUR SINON BR MESS BONPD: EQU $ FST GD < SERT DE DISTANCE A ECRAN < < VERIFIER LA NON-COLINEARITE DES YEUX ET DU VECTEUR PROJECTIF < < COLINEARITE EXISTE SI: < XV(YC1-YC2)-YV(XC1-XC2)=0 ET < YV(ZC1-ZC2)-ZV(YC1-YC2)=0 ET < ZV(XC1-XC2)-XV(ZC1-ZC2)=0 < LAD XX1 LR A,W LAD XV LR A,L BSR DIFF FCAZ JNE COL2 ADRI 1,W ADRI 1,L BSR DIFF FCAZ JNE COL2 BSR INCO BSR DIFF FCAZ JNE COL1 PLR L LAD ERRLIN BR MESS < ERREUR COL1: EQU $ BSR INCO COL2: EQU $ < < CALCUL DE LA LONGUEUR DU VECTEUR PROJECTIF < < LV=SQRT(XV**2+YV**2+ZV**2) < LAD XV LR A,L LR A,W BSR DIST FCAZ < ELLE DOIT ETRE NON NULLE JNE BONGD PLR L LAD ERRVEC < ERREUR SINON BR MESS BONGD: EQU $ FST FLT1 < < NOUVEAU VECTEUR PROJECTIF < < XV=XV*DY/LV, YV=YV*DY/LV, ZV=ZV*DY/LV < FLD XV FMP GD FDV FLT1 FST XV FLD YV FMP GD FDV FLT1 FST YV FLD ZV FMP GD FDV FLT1 FST ZV < < CALCUL DES ORIGINES DES REFERENTIELS PAR OEIL < < CA SE COMPLIQUE. SUIVEZ BIEN CE QUI SUIT. < < EQUATION DE LA DROITE PASSANT PAR LES YEUX < X=XC1+(XC1-XC2)T, Y=YC1+(YC1-YC2)T, Z=ZC1+(ZC1-ZC2)T < < EQUATION DU PLAN PERPENDICULAIRE AU VECTEUR PROJECTIF < XV*X+YV*Y+ZV*Z=D < IL PASSE PAR L'EXTREMITE DU VECTEUR PROJECTIF, < DONT LES COORDONNEES SONT: < XV+(XC1+XC2)/2, YV+(YC1+YC2)/2, ZV+(ZC1+ZC2)/2 < CAR LE VECTEUR A POUR ORIGINE LE MILIEU DES YEUX < < D=XV(XV+(XC1+XC2)/2)+YV(YV+(YC1+YC2)/2)+ZV(ZV+(ZC1+ZC2)/2) < < LE POINT P D'INTERSECTION DE LA DROITE ET DU PLAN EST DONC < XV(XC1+(XC1-XC2)T)+YV(YC1+(YC1-YC2)T)+ZV(ZC1+(ZC1-ZC2)T)=D < < D'OU < XV(XV+(XC2-XC1)/2)+YV(YV+(YC2-YC1)/2)+ZV(ZV+(ZC2-ZC1)/2) < T= -------------------------------------------------------- < XV(XC1-XC2)+YV(YC1-YC2)+ZV(ZC1-ZC2) < < SI LE DENOMINATEUR EST NUL, PRENDRE M=N=1 ET ALLER EN (2) < < LE VECTEUR JOIGNANT C1 ET P VAUT DONC < (XC1-XC2)T, (YC1-YC2)T, (ZC1-ZC2)T < DONT LA LONGUEUR EST < B=SQRT(((XC1-XC2)T)**2+((YC1-YC2)T)**2+((ZC1-ZC2)T)**2) < < LA DISTANCE DE L'ORIGINE DU VECTEUR PROJECTIF A UN OEIL EST < A=GD/2 < < CALCULONS MAINTENANT M ET N QUI SONT LES RAPPORT D'HOMOTHETIE < A APPLIQUER SUR LE VECTEUR PROJECTIF POUR OBTENIR LES VECTEURS < OEIL-ORIGINE (OUF...ON APPROCHE DE LA FIN) < < SI T EST POSITIF, P EST DU COTE DE C1. DONC < M=B/(B+A), N=(B+2*A)/(B+A) < SI T EST NEGATIF, INVERSER M ET N < < (2) < < DONC............. < O1=(XC1+XV*M,YC1+YV*M,ZC1+ZV*M) < O2=(XC2+XV*N,YC2+YV*N,ZC2+ZV*N) < < ET C'EST FINI. MAIS OUI!!!!!!!! < LAD XV < DENOMINATEUR DE T LR A,L LAD XX1 LR A,W BSR DIST2 FST FLT2 FABS FCAM PROX JG PASPAR LAI 1 < LE VECTEUR PROJECTIF EST FLT < PERPENDICULAIRE A LA FST XX1 < DIRECTION DES YEUX FST YY1 JMP BONT PASPAR: EQU $ FLD XX1 < CALCUL DE T FNEG FDV FDEUX FAD XV FST XX2 FLD YY1 FNEG FDV FDEUX FAD YV FST YY2 FLD ZZ1 FNEG FDV FDEUX FAD ZV FST ZZ2 LAD XV LR A,L LAD XX2 LR A,W BSR DIST2 FDV FLT2 FST PD FMP XX1 < CALCUL DE B FST XX2 FLD PD FMP YY1 FST YY2 FLD PD FMP ZZ1 FST ZZ2 LAD XX2 LR A,L LR A,W BSR DIST FST FLT1 FLD GD < CALCUL DE A FDV FDEUX FST FLT2 FAD FLT1 < CALCUL DE M ET N FST YY1 FLD FLT1 FDV YY1 FST XX1 FLD FLT1 FAD GD FDV YY1 FST YY1 FCMZ PD < INVERSER M ET N SI T<0 JGE BONT FLD XX1 FST ZZ1 FLD YY1 FST XX1 FLD ZZ1 FST YY1 BONT: EQU $ FLD XV < CALCUL DES ORIGINES FMP XX1 FAD XC1 FST XO1 FLD YV FMP XX1 FAD YC1 FST YO1 FLD ZV FMP XX1 FAD ZC1 FST ZO1 FLD XV FMP YY1 FAD XC2 FST XO2 FLD YV FMP YY1 FAD YC2 FST YO2 FLD ZV FMP YY1 FAD ZC2 FST ZO2 < < CALCUL DES DISTANCES YEUX-ORIGINES < < GD1=SQRT((XC1-XO1)**2+(YC1-YO1)**2+(ZC1-ZO1)**2) < GD2=SQRT((XC2-XO2)**2+(YC2-YO2)**2+(ZC2-ZO2)**2) < LAD XC1 LR A,L LAD XO1 LR A,W LAD XX1 LR A,Y BSR DIFC LAD XC2 LR A,L LAD XO2 LR A,W LAD XX2 LR A,Y BSR DIFC LAD XX1 LR A,L LR A,W BSR DIST FAD PT5 FIX STA GD1 LAD XX2 LR A,L LR A,W BSR DIST FAD PT5 FIX STA GD2 < < DISTANCE ENTRE LES ORIGINES < < DO=SQRT((XO1-XO2)**2+(YO1-YO2)**2+(ZO1-ZO2)**2) < LAD XO1 LR A,L LAD XO2 LR A,W LAD XC1 LR A,Y BSR DIFC LAD XC1 LR A,L LR A,W BSR DIST FST PD FIX SLRS 1 STA PDS2 < < CALCUL DES COEFFICIENTS DE LA MATRICE DE TRANSFORMATION < SANS LES FACTEURS DIVISEURS < < XC1/PD YC1/PD ZC1/PD < (ZC1*YV-YC1*ZV)/PD.GD (XC1*ZV-ZC1*XV)/PD.GD (YC1*XV-XC1*YV)/PD.GD < XV/GD YV/GD ZV/GD < FLD T12 FMP ZV FST FLT1 FLD T13 FMP YV FSB FLT1 FST T21 FLD T13 FMP XV FST FLT1 FLD T11 FMP ZV FSB FLT1 FST T22 FLD T11 FMP YV FST FLT1 FLD T12 FMP XV FSB FLT1 FST T23 FLD PD FMP GD FST PGD < < VOIR SI ON REGARDE PAR EN-DESSOUS < LAD XO1 < CALCUL DE L'ORIGINE DU REPERE LR A,L < OEIL DROIT EXPRIME DANS LAD XO2 < LE REPERE OEIL GAUCHE LR A,W LAD XX1 LR A,Y BSR DIFC LAD XX1 LR A,L LAD T11 LR A,W BSR DIST2 FCAZ JGE VUENOR LAD T11 < REGARD PAR EN-DESSOUS, LR A,W < INVERSER LES COEFS SUR X ET Y LYI 6 REINXY: EQU $ FLD 0,W FNEG FST 0,W ADRI 2,W ADRI -1,Y CPZR Y JG REINXY VUENOR: EQU $ PLR L < < PASSAGE A 8K SI NECESSAIRE < CPZ VIDEO JNE NVID10 LAD DEMMEM SVC 0 NVID10: EQU $ < < OUVRIR LE FICHIER COORDONNEE ET LES FICHIERS OEIL < LAI 4 BSR OPO LAI 4 STBY LEC LAI 5 BSR OPN LAI 5 STBY ECR2 LAI 6 BSR OPN LAI 6 STBY ECR3 < < NB DE POINT DU DESSIN < LA NBSEG LR A,W ADR W,W LAD LEC < LIRE LE 1ER BUFFER SVC 0 LXI -126 < < APPLIQUER LES DEPLACEMENTS D'ORIGINES POUR UN POINT < REL3: EQU $ CPZR X < CHANGER DE BUFFER JL PLAC3 < SI NECESSAIRE LAD ECR2 < ECRIRE LES PLEINS SVC 0 LAD ECR3 SVC 0 LAD LEC < LIRE SVC 0 LXI -126 PLAC3: EQU $ LA &ABF1 FLT FST XX1 FST XX2 ADRI 1,X LA &ABF1 FLT FST YY1 FST YY2 ADRI 1,X LA &ABF1 FLT FST ZZ1 FST ZZ2 PSR L,W LAD XX1 LR A,L LAD XO1 LR A,W LR L,Y BSR DIFC LAD XX2 LR A,L LAD XO2 LR A,W LR L,Y BSR DIFC ADRI -2,X < < APPLIQUER LE CHANGEMENT DE REPERE < FLD PD < DIVISEUR 1ERE LIGNE FST DIV LAD XX1 < INITIALISATION DES ADRESSES LR A,W LAD T11 LR A,L BSR MATP < CALCUL NOUVELLE COORDONNEE STA &ABF2 ADRI 6,W BSR MATP < CALCUL POUR L'AUTRE OEIL STA &ABF3 ADRI 1,X < COUPLE DE COORDONNEES SUIVANTES ADRI -6,W ADRI 6,L FLD PGD FST DIV BSR MATP STA &ABF2 ADRI 6,W BSR MATP STA &ABF3 ADRI 1,X < DERNIERES COORDONNEES ADRI -6,W ADRI 6,L FLD GD FST DIV BSR MATP STA &ABF2 ADRI 6,W BSR MATP STA &ABF3 ADRI 1,X PLR L,W < < PASSER AU SEGMENT SUIVANT < ADRI -1,W CPZR W JG REL3 < < FERMETURE DES FICHIERS < LAD ECR2 < ECRIRE DERNIERS BUFFERS SVC 0 LAD ECR3 SVC 0 LAI 4 BSR CLS LAI 5 BSR CLS LAI 6 BSR CLS < < TRAITEMENT VUE PAR VUE < OUVRIR LE FICHIER < LAI 5 BSR OPO LAI 5 STBY LEC < < EFFACER L'ECRAN SI NECESSAIRE < CPZ EFFMT JNE PASEF LAD EFFAC SVC 0 PASEF: EQU $ < < CALCUL DE L'ORIGINE DE TRACAGE < LA DVUE SLRS 1 STA ORG < < TRAITEMENT DU FICHIER < LAI 2 PSR A REDESS: EQU $ LAD ALPGRA < PASSER EN GRAPHIQUE SVC 0 LAI -1 < INIT. VALEURS RETENUES STA XSAV STA YSAV CPZ VIDEO JNE NVID1 LX ALIMAG < RAZ DE L'IMAGE STZ &AIMAG1 JDX $-1 IF ORDI-"S",XWOR%,,XWOR% LAI TVPR < EFFACEMENT DES 3 COMPOSANTES STA STABIL+3 LAD STABIL SVC 0 LAI TVPV STA STABIL+3 LAD STABIL SVC 0 LAI TVPB STA STABIL+3 LAD STABIL SVC 0 XWOR%: VAL 0 NVID1: EQU $ LA NBSEG LR A,W LXI 0 REL4: EQU $ CPZR W < RESTE-T-IL DES SEGMENTS? JG SEGSUI BR AATDES SEGSUI: EQU $ CPZR X < OUI-BUFFER VIDE? JL PLAC4 LAD LEC < OUI-RELIRE SVC 0 LXI -126 PLAC4: EQU $ LYI -1 < INDIC. 1ER PASSAGE REPTVS: EQU $ LBI 0 < PAS DE PT INVISIBLE A PRIORI ADRI 2,X < RELEVER LE Z CPZ &ABF1 < PT 1 VISIBLE? JL ZDIFD1 LBI 1 < PT 1 INVISIBLE ZDIFD1: EQU $ ADRI 3,X LA &ABF1 < PT 2 VISIBLE? ADRI -5,X JAL ZDIFD2 ADRI 2,B < PT 2 INVISIBLE ZDIFD2: EQU $ CPZR Y < 1ER PASSAGE? JGE DEJVU LR B,Y < OUI - RELEVER POSITION POINTS DEJVU: EQU $ CPZR B JE PTVIS2 < DEUX PTS VISIBLES LR B,A CPI 3 JNE PT12VS ADRI 6,X < DEUX PTS INVISIBLES JMP VIS0 PT12VS: EQU $ LA &ABF1 < CALCUL DU DELTAX ADRI 3,X SB &ABF1 SARS 1 STA DELTAX ADRI -2,X < CALCUL DU DELTAY LA &ABF1 ADRI 3,X SB &ABF1 SARS 1 STA DELTAY ADRI -2,X < CALCUL DU DELTAZ LA &ABF1 ADRI 3,X SB &ABF1 SARS 1 STA DELTAZ ADRI -5,X < POSITIONNEMENT SUR PT INVISIBLE LR B,A CPI 1 JE UNINV1 ADRI 3,X LA DELTAX < INVERSER LES DELTA NGR A STA DELTAX LA DELTAY NGR A STA DELTAY LA DELTAZ NGR A STA DELTAZ UNINV1: EQU $ LA DELTAX < INVISIBLE SI DIST. ECRAN=1 OR DELTAY OR DELTAZ JANE TJSVIS LYI 3 JMP VIS0 TJSVIS: EQU $ LA &ABF1 < RENDRE LE POINT VISIBLE SB DELTAX STA &ABF1 ADRI 1,X LA &ABF1 SB DELTAY STA &ABF1 ADRI 1,X LA &ABF1 SB DELTAZ STA &ABF1 ADRI -2,X < REVOIR SI LE PT EST VISIBLE LR B,A CPI 1 JE REPTVS ADRI -3,X JMP REPTVS PTVIS2: EQU $ PSR Y ADRI 2,X < PROJECTION 1ER POINT LA &ABF1 ADRI -2,X SB GD1 NGR A STA DIV1 LYI 0 BSR PROJ STA SEGORG+X CPZ D2VUE JNE D2VUE1 AD ORG D2VUE1: EQU $ STA X1 ADRI 1,X LYI 1 BSR PROJ STA SEGORG+Y AD DEPY STA Y1 ADRI 4,X < PROJECTION 2EME POINT LA &ABF1 ADRI -2,X SB GD1 NGR A STA DIV1 LYI 0 BSR PROJ STA SEGEXT+X CPZ D2VUE JNE D2VUE2 AD ORG D2VUE2: EQU $ STA X2 ADRI 1,X LYI 1 BSR PROJ STA SEGEXT+Y AD DEPY STA Y2 ADRI 2,X PLR Y < < TRAITER LES POINTS INVISIBLES < VIS0: EQU $ LR Y,A JAE DEBORD < PTS VISIBLES CPI 3 JE NVID2 < PTS INVISIBLES CPI 2 JNE VIS1 < POINT 1 INVISIBLE PSR L,W < POINT 2 INVISIBLE LAD SEGORG < INVERSER LES POINTS LR A,W LAD SEGEXT LR A,L BSR INVER PLR L,W VIS1: EQU $ LA SEGORG+X < CALCUL DE DELTA X ET DELTA Y SB SEGEXT+X STA DELTAX LA SEGORG+Y SB SEGEXT+Y STA DELTAY VIS2: EQU $ LA SEGORG+X < POINT INVISIBLE DEBORDE? OR SEGORG+Y BSR DEB JE VIS3 LA SEGORG+X < NON - LE FORCER A DEBORDER AD DELTAX STA SEGORG+X LA SEGORG+Y AD DELTAY STA SEGORG+Y JMP VIS2 VIS3: EQU $ LR Y,A < A-T-ON INVERSER LES POINTS CPI 2 JNE VIS4 PSR L,W < OUI - LES RETABLIR LAD SEGORG LR A,W LAD SEGEXT LR A,L BSR INVER PLR L,W VIS4: EQU $ LA SEGORG+X < RECALCULER POUR VISU AD ORG STA X1 LA SEGORG+Y AD DEPY STA Y1 LA SEGEXT+X AD ORG STA X2 LA SEGEXT+Y AD DEPY STA Y2 < < TRAITEMENT DU DEBORDEMENT ET TRACAGE DU SEGMENT < DEBORD: EQU $ CPZ GRAPH < GRAPHIQUE JNE NGRA1 PSR W LAD SEG LR A,W BSR DBEC PLR W JNE NGRA1 PSR X < TRACAGE LA XSAV < VOIR SI ON ENVOIT LE 1ER PT CP X1 JNE ENTSEG LA YSAV CP Y1 JNE ENTSEG LAD TRAC2 < 2EME UNIQUEMENT SVC 0 JMP RELPT2 ENTSEG: EQU $ LAD ALPGRA SVC 0 LAD TRAC1 < LES DEUX POINTS SVC 0 RELPT2: EQU $ LA X2 < RELEVER DERNIER POINT STA XSAV LA Y2 STA YSAV PLR X NGRA1: EQU $ CPZ VIDEO < VIDEO JNE NVID2 PSR W LAD SEGORG LR A,W BSR DBEC PLR W JNE NVID2 BSR ATRACE < TRACAGE NVID2: EQU $ ADRI -1,W < SEGMENT SUIVANT BR AREL4 AUTDES: EQU $ LA PDS2 NGR A STA PDS2 LAD GRAALP SVC 0 CPZ D2VUE JNE NVID3 CPZ VIDEO JNE NVID3 IF ORDI-"T",XWOR%,,XWOR% < < ECRIRE L'IMAGE EN SCRATCH < LAI 2 BSR LESC < < LIRE LA GRILLE CORRESPONDANTE < PLR X < NUMERO DE LA GRILLE PSR X LA &ANMGR < NOM DE LA GRILLE LBI '85 < LECTURE BSR DLEI < < FAIRE UN ET DE L'IMAGE ET DE LA GRILLE < BSR ETIM XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% < < VISUALISATION DE LA COMPOSANTE CORRESPONDANTE < PLR A PSR A LBI TVPR CPI 2 JE CPROUG LBI TVPB CPROUG: EQU $ STB STABIL+3 LAD STABIL SVC 0 < < GENERATION DE L'IMAGE < LAD DEMNOM < DEMANDE DU NOM SVC 0 LAD LECNOM SVC 0 WORD '1E35 < SI LE NOM EST VIDE, ADRI -1,B CPZR B JLE NVID5 < ON NE CREE PAS L'IMAGE LAD NMIMG < DESTRUCTION DE L'IMAGE LBI '83 BSR DLEI LAD NMIMG < ET RECREATION LBI '84 BSR DLEI NVID5: EQU $ XWOR%: VAL 0 NVID3: EQU $ < < DESSIN SUIVANT < PLR X CPZ D2VUE JNE UNEIMG JDX NEWDES JMP DESFIN NEWDES: EQU $ PSR X LAI 5 < FERMER FICHIER BSR CLS IF ORDI-"T",XWOR%,,XWOR% < < GENERER LA PREMIERE IMAGE < CPZ VIDEO JNE NVID4 LAD NMIBD < LA DETRUIRE LBI '83 BSR DLEI LAD NMIBD < LA RECREER LBI '84 BSR DLEI NVID4: EQU $ XWOR%: VAL 0 < < PASSER A L'AUTRE OEIL < LA GD1 LY GD2 STY GD1 STA GD2 LAI 6 BSR OPO < OUVRIR LE FICHIER LAI 6 STBY LEC LA DVUE < NOUVELLE ORIGINE SLRS 1 NGR A STA ORG BR AVUEG < < UNE SEULE IMAGE < UNEIMG: EQU $ IF ORDI-"T",XWOR%,,XWOR% CPZ VIDEO JNE NVID5 LAI 'FF < CODE COULEUR JMP CODCOL XWOR%: VAL 0 < < FIN DU TRAITEMENT < DESFIN: EQU $ IF ORDI-"T",XWOR%,,XWOR% < < ECRIRE LA DEUXIEME IMAGE EN SCRATCH < CPZ VIDEO JNE NVID5 LAI 2 BSR LESC < < RELIRE LA PREMIERE < LAD NMIBD LBI '85 BSR DLEI < < LA DETRUIRE < LAD NMIBD LBI '83 BSR DLEI < < FAIRE UN OU AVEC L'IMAGE PRECEDENTE < BSR OUIM < < METTRE LE CODE DE COULEUR < LAI '80 CODCOL: EQU $ SWBR A ORI '80 LXI 0 STA &AIMAG0 < < GENERER L'IMAGE VIDEO < LAD DEMNOM SVC 0 LAD LECNOM SVC 0 WORD '1E35 < SI NOM VIDE,NE PAS GENERER ADRI -1,B CPZR B JLE NVID5 LAD NMIMG < LA DETRUIRE LBI '83 BSR DLEI LAD NMIMG < LA RECREER LBI '84 BSR DLEI NVID5: EQU $ XWOR%: VAL 0 < < COPIES EVENTUELLES < CPZ GRAPH JNE FINCOP LB NCOP NEWCOP: EQU $ CPZR B JLE FINCOP LAD DEMCOP SVC 0 LAD TEMP SVC 0 ADRI -1,B JMP NEWCOP FINCOP: EQU $ < < DETRUIRE LES FICHIERS < LAI 6 BSR CLS LYI 2 < DESTRUCTION PARTIELLE BSR DLFP LAD REDMEM < RENDRE LA MEMOIRE SVC 0 < < PASSER A UN AUTRE POINT DE VUE < DC NBOEIL PLR X BR AREVDS PAGE < < SP DE LECTURE D'UN SEGMENT DANS ZDC < RESEGM: EQU $ LAD DEMSEG < DEMANDE DU SEGMENT SVC 0 CPZ NOMSEG < BOUCLER SI NON-VALIDE JE RESEGM STZ NOMSEG < LIBERER LA ZDC LAD DELSEG SVC 0 RSR < < SP DE PASSAGE DE COORDONNEES DESCRIPTIVES EN COORDONNEES CARTESIENNES < CARTE: EQU $ LR A,W < @ ZONE RECEPTRICE BSR SEGM < LIRE LES DEUX POINTS LA X1 < EGALITE DES X? CP X2 JE VUX LAD ERRX < ERREUR SINON BR MESS VUX: EQU $ SB X0 < CALCUL DU X STA 0,W LA Y0 SB Y2 < DU Y STA 1,W LA Y1 SB Y0 < ET DU Z STA 2,W RSR PAGE < < SP D'IMPRESSION D'UN MESSAGE D'ERREUR < SPIMP: EQU $ LR A,W LAD GRAALP < REVENIR EN ALPHA SVC 0 LBY 0,W < NB CARACTERES STA ECRERR+2 LR W,A ADR A,A < @ MESSAGE OCTETS ADRI 1,A STA ECRERR+1 LAD ECRERR < ECRITURE DU MESSAGE SVC 0 LAD CCI < RETOUR AU CCI SVC 0 BR AREV < < SP D'APPEL AU CCI INTERPRETATIF < MESCCI: EQU $ SLLS 1 < @ MESSAGE STA CCII+1 LAD CCII SVC 0 RSR PAGE < < SP DE LECTURE ET TRACAGE D'UN SEGMENT < TSEG: EQU $ BSR SEGM < LIRE LE SEGMENT LA XSAV < TRACER CP X1 JNE TSEG1 LA YSAV CP Y1 JNE TSEG1 LAD TRAC2 SVC 0 JMP TSEG2 TSEG1: EQU $ LAD ALPGRA SVC 0 LAD TRAC1 SVC 0 TSEG2: EQU $ LA X2 STA XSAV LA Y2 STA YSAV RSR < < SP DE CALCUL DE OAB EVENTUEL < SPOAB: EQU $ LA X1 OR X2 OR Y1 OR Y2 RSR PAGE < < SP D'OPEN NEW < SPOPN: EQU $ STBY OPENN ORI '30 < FAIRE LE ASSIGN STBY NASSN STBY NFICN STBY NASSS LAD ASSS BSR SPCCI LAD ASSN BSR SPCCI LAD OPENN < OPEN SVC 0 RSR < < SP D'OPEN OLD < SPOPO: EQU $ STBY OPENO LAD OPENO SVC 0 RSR < < SP DE CLOSE SAVE < SPCLS: EQU $ STBY CLOSS LAD CLOSS SVC 0 RSR PAGE < < SP DE DISTANCE OU DE PRODUIT DE VECTEUR < SPDIS2: EQU $ FLD 0,W FMP 0,L FST FLT1 FLD 2,W FMP 2,L FAD FLT1 FST FLT1 FLD 4,W FMP 4,L FAD FLT1 RSR < < SP DE CALCUL DE DISTANCE < SPDIST: EQU $ BSR DIST2 FST PARAM LAD PARAM BSR RAC FLD RESUL RSR < < SP DE PRODUIT DE VECTEURS POUR LE CHANGEMENT DE REPERE < SPMATP: EQU $ BSR DIST2 FDV DIV FIX RSR < < SP DE LECTURE ET CONVERSION D'UN NOMBRE HEXADECIMAL < SPHEX: EQU $ LR A,W HEX3: EQU $ LBY 0,W < LONGUEUR DU MESSAGE STA QUEST+2 LR W,A < @ MESSAGE ADR A,A ADRI 1,A STA QUEST+1 LAD QUEST < QUESTION SVC 0 LAD LECDON SVC 0 LXI -4 LBI 0 < RESULTAT=0 HEX0: EQU $ LBY &ADON < FIN? CPI '0D JE HEX2 CPI '04 JE HEX2 ADRI -'30,A < CONVERSION JAL HEX3 CPI 9 JLE HEX1 CPI 17 JL HEX3 ADRI -7,A CPI 'F JG HEX3 HEX1: EQU $ SLLS 12 SCLD 4 JIX HEX0 HEX2: EQU $ LR B,A RSR < < SP DE CALCUL DE PROJECTION < SPPROJ: EQU $ CPZ PERSP JE PROJ1 LA &ABF1 < PAS DE PROJECTION FLT FST FLT1 CPZR Y < X OU Y? JNE PROJ0 CPZ D2VUE JNE PROJ0 LA PDS2 < X. DECALER LES VUES SLLS 1 FLT FAD FLT1 FST FLT1 PROJ0: EQU $ BSR FECH JMP PROJ3 PROJ1: EQU $ LA &ABF1 < FAIRE LA PROJECTION FLT FST FLT1 LA GD1 FLT FMP FLT1 FST FLT1 LA DIV1 FLT FST FLT2 FLD FLT1 FDV FLT2 FST FLT1 BSR FECH CPZR Y < X OU Y? JNE PROJ2 LA PDS2 < X. DECALER LES VUES SARS 2 FLT FAD FLT1 FST FLT1 PROJ2: EQU $ LA MULT1 FLT FMP FLT1 FST FLT1 PROJ3: EQU $ FIX AD C12 RSR < < APPLIQUER L'ECHELLE < SPFECH: EQU $ LA MULTI FLT FMP FLT1 FST FLT1 LA DIVIS FLT FST FLT2 FLD FLT1 FDV FLT2 FST FLT1 RSR PAGE IF ORDI-"T",XWOR%,,XWOR% < < SP DE LECTURE-ECRITURE D'UNE IMAGE EN SCRATCH < SPLESC: EQU $ LR A,B < POSITIONNER EN LECTURE OU ECRITURE LBY ECRSCR SWBR A ORR B,A STA ECRSCR LAI 31 < @ SECTEUR(DERNIER) STA ECRSCR+3 AUTSCR: EQU $ SLLS 7 < @ PARTIE IMAGE A LIRE-ECRIRE AD AIMAG0 SLLS 1 < EN OCTETS STA ECRSCR+1 LAD ECRSCR < FAIRE L'OPERATION SVC 0 DC ECRSCR+3 < SECTEUR SUIVANT LA ECRSCR+3 JAGE AUTSCR RSR XWOR%: VAL 0 < < SP DE DELETE-LECTURE-ECRITURE D'UNE IMAGE < SPDLEI: EQU $ XR A,B < PLACER L'OPERATION STBY SGN LR B,A < PLACER LE NOM LB ANOM LXI 11 MOVE LAI -3 < PLACER L'INDICATEUR STA &ALONG LAD SGN < FAIRE L'OPERATION SVC 0 RSR < < SP DE DELETE DES FICHIERS < SPDLFC: EQU $ LYI 4 < NB DE FICHIERS AUTDEL: EQU $ LAI '37 < !ASSIGN 7=S STBY NASSS LAD ASSS BSR SPCCI LR Y,A < NUMERO DU FICHIER NGR A ADRI '37,A STBY NFICO STBY NASSS LAD ASSS BSR SPCCI LAD ASSO < !ASSIGN X=O, BSR SPCCI LAD ASSR < !ASSIGN X=R BSR SPCCI LAD DEMDEL < DELETE SVC 0 ADRI -1,Y < FICHIER SUIVANT CPZR Y JG AUTDEL RSR < < SP DE LECTURE DE REPONSE OUI/NON < SPLCON: EQU $ LR A,W LBI 0 RELCON: EQU $ LBY 0,W < POSER LA QUESTION STA QUEST+2 LR W,A ADR A,A ADRI 1,A STA QUEST+1 LAD QUEST SVC 0 LAD LECON <LIRE LA REPONSE SVC 0 LBY DONNEE CPI "O" JE LCON1 CPI "N" JNE RELCON LBI 1 LCON1: EQU $ LR B,A RSR PAGE < < SP DE CALCUL DE DEBORDEMENT DE L'ECRAN < SPDBEC: EQU $ PSR Y DB1: EQU $ LYI 0 < INDICATEUR INVERSION POINTS LA X,W < (X1,Y1) DEBORDE? OR Y,W BSR DEB JE DB2 LA X+2,W < NON - (X2,Y2) DEBORDE? OR Y+2,W BSR DEB JNE DB8 LYI 1 < CAS OU (X1,Y1) DANS L'ECRAN ET BSR INVER < (X2,Y2) DEBORDE. INVERSER LES POINTS DB2: EQU $ LA Y,W < CAS (X1,Y1) DEBORDE SB Y+2,W < CALCULER LA PENTE DU SEGMENT FLT < ET SON INVERSE FST FLT1 LA X,W SB X+2,W FLT FDV FLT1 FST FLT2 FLD FUN FDV FLT2 FST FLT1 CPZ Y,W JGE DB3 LA Y+2,W < CALCUL DU POINT DE NGR A < DEBORDEMENT SUR Y=0 FLT FMP FLT2 FIX AD X+2,W BSR DEB JE DB3 STA X,W < POINT TROUVE BON STZ Y,W JMP DB7 DB3: EQU $ CPZ X,W JGE DB4 LA X+2,W < CALCUL DU POINT DE NGR A < DEBORDEMENT SUR X=0 FLT FMP FLT1 FIX AD Y+2,W BSR DEB JE DB4 STA Y,W < POINT BON STZ X,W JMP DB7 DB4: EQU $ LA Y,W CP M23 JLE DB5 LA M23 < CALCUL DU POINT DE SB Y+2,W < DEBORDEMENT SUR Y=1023 FLT FMP FLT2 FIX AD X+2,W BSR DEB JE DB5 STA X,W < POINT BON LA M23 STA Y,W JMP DB7 DB5: EQU $ LA M23 < CALCUL DU POINT DE SB X+2,W < DEBORDEMENT SUR X=1023 FLT FMP FLT1 FIX AD Y+2,W BSR DEB JNE DB6 LYI 1 < INTRACABLE JMP DB8 DB6: EQU $ STA Y,W < POINT BON LA M23 STA X,W DB7: EQU $ CPZR Y < POINTS INVERSES? JE DB1 BSR INVER < OUI - LES RETABLIR JMP DB1 DB8: EQU $ CPZR Y < POSITIONNER LE CODE DE CONDITION PLR Y RSR < < SP D'INVERSION DE POINTS < SPINVE: EQU $ LA X,W LB X+2,W STA X+2,W STB X,W LA Y,W LB Y+2,W STA Y+2,W STB Y,W RSR PAGE IF ORDI-"T",XWOR%,,XWOR% < < SP DE ET ET DE OU DE L'IMAGE RESIDENTE ET DE L'IMAGE SCRATCH < SPET: EQU $ PSR Y LYI 1 JMP ETOU SPOU: EQU $ PSR Y LYI 0 ETOU: EQU $ LBY ECRSCR < POSITIONNER EN LECTURE SWBR A STA ECRSCR LA AOBF3 < @ BUFFER STA ECRSCR+1 LAI 31 < @ SECTEUR STA ECRSCR+3 REASEC: EQU $ LAD ECRSCR SVC 0 LA ECRSCR+3 < @ FIN PARTIE IMAGE ADRI 1,A SLLS 7 LR A,X LAD &AIMAG1 LR A,W LXI 128 < NB MOTS REAMOT: EQU $ LA 0,W CPZR Y < OPERATION? JNE CESET OR &AXBF3 JMP ETOU1 CESET: EQU $ AND &AXBF3 ETOU1: EQU $ STA 0,W ADRI -1,W JDX REAMOT DC ECRSCR+3 < SECTEUR SUIVANT JGE REASEC PLR Y RSR XWOR%: VAL 0 < < SP DE TEST SI VALEUR DE A ENTRE 0 ET 1023 < SPDEB: EQU $ LBI 0 < DEBORDEMENT A PRIORI JAL SPDB1 CP M23 JG SPDB1 LBI 1 < POINT BON SPDB1: EQU $ CPZR B < POSITIONNEMENT DU CODE DE COND. RSR < < SP DE CALCUL DE LA DIFFERENCE DES PRODUITS DE COORDONNEES < SPDIFF: EQU $ FLD 0,W FMP 2,L FST FLT1 FLD 2,W FMP 0,L FSB FLT1 RSR < < SP DE CALCUL DE DIFFERENCE ENTRE DEUX POINTS < SPDIFC: EQU $ FLD 0,L FSB 0,W XR Y,W FST 0,W XR Y,W FLD 2,L FSB 2,W XR Y,W FST 2,W XR Y,W FLD 4,L FSB 4,W XR Y,W FST 4,W XR Y,W RSR < < SP D'INVERSION DE COORDONNEES < SPINCO: EQU $ FLD XV FST FLT1 FLD YV FST XV FLD FLT1 FST YV FLD XX1 FST FLT1 FLD YY1 FST XX1 FLD FLT1 FST YY1 RSR PAGE USE L,ADLOC < < < T R A C E D I C H O T O M I Q U E D ' U N S E G M E N T : < < DICO: EQU $ LA DICOX1 < A=X1. AD DICOX2 < A=X1+X2. SLRS 1 < A=(X1+X2)/2. STA DICOX < X DU MILIEU DE M1M2. LA DICOY1 < A=Y1. AD DICOY2 < A=Y1+Y2. SLRS 1 < A=(Y1+Y2)/2. STA DICOY < Y DU MILIEU DE M1M2. < < POSITION DE M PAR RAPPORT A M1 : < SB DICOY1 < A=Y-Y1. JANE DICO31 < M#M1. LA DICOX < A=X. SB DICOX1 < A=X-X1. JAE DICO32 < M=M1. < < POSITION DE M PAR RAPPORT A M2 : < DICO31: EQU $ LA DICOY < A=Y. SB DICOY2 < A=Y-Y2. JANE DICO30 < M#M2 ET M#M1. LA DICOX < A=X. SB DICOX2 < A=X-X2. JANE DICO30 < M#M2 ET M#M1. < < CAS OU M=M1 OU M=M2 : < DICO32: EQU $ LX DICOX LY DICOY BSR ASET < AFFICHAGE DU POINT M=(M1+M2)/2. RSR < ARRET PROVISOIRE DE LA DICHOTOMIE < DESCENDANTE. < < CAS OU M#M1 ET M#M2 : < DICO30: EQU $ LA DICOX2 < A=X2. LB DICOY2 < B=Y2. PSR A,B < SAVE LE POINT M2 COURANT. LA DICOX < A=X. STA DICOX2 < X2<--X. LA DICOY < A=Y. STA DICOY2 < Y2<--Y. BSR ADICO < DICHOTOMIE SUR LE SEGMENT M1M. LX DICOX2 < X=X2. LY DICOY2 < Y=Y2. BSR ASET < AFFICHAGE DU POINT M2 STX DICOX1 < X1<--X2. STY DICOY1 < Y1<--Y2. PLR A,B < RESTAURATION DU POINT M2 APRES < LE CHANGEMENT DU POINT M1. STA DICOX2 < RESTAURE X2. STB DICOY2 < RESTUARE Y2. JMP DICO < VERS LA POURSUITE DE LA DICHOTOMIE. PAGE < < < M I S E D ' U N P O I N T A 1 : < ET DE CES VOISINS IMMEDIATS(SAUF SI HORS IMAGE) < < ARGUMENTS : < X ET Y CONTIENNENT L'X ET L'Y DU POINT. < C=@IMAG. < < SET: EQU $ PSR B LBI 3 < LIGNE PRECEDENTE ET SUIVANTE ADRI -1,Y NEWLGP: EQU $ ADRI -1,X < POINT VOISINS BSR ASET1 ADRI 1,X BSR ASET1 ADRI 1,X BSR ASET1 ADRI -1,X ADRI 1,Y < LIGNE SUIVANTE ADRI -1,B CPZR B JG NEWLGP ADRI -2,Y PLR B RSR < < < MISE D'UN SEUL POINT A UN EN VERIFIANT LE DEBORDEMENT < < SET1: EQU $ PSR B,X,C LR Y,A JAL RETSET < DEBORDEMENT EN LIGNE CP NLIG JG RETSET MP NMPL < CONVERSION DE L'Y DU POINT EN < NUMERO DE MOT. ADR B,C LR X,A JAL RETSET < DEBORDEMENT EN POINT CP NLIG JG RETSET SLRS 4 ADR A,C < C=@MOT CONTENANT LE POINT (X,Y). LAI 'F ANDR A,X < CALCUL DE X MODULO 16. < X=NUMERO DU BIT DANS LE MOT. LA 0,C < A=MOT CONTENANT LE POINT (X,Y). SBT 0,X < MISE DU POINT A 1. STA 0,C < MISE A JOUR DE CE MOT. RETSET: EQU $ PLR B,X,C RSR PAGE < < < T R A C E D ' U N S E G M E N T V I D E O : < < TRACE: EQU $ PSR A,X,Y,C LA AIMAG0 LR A,C < C=@IMAGE VIDEO. < < CALCUL DES EXTREMITES M1 ET M2 DU SEGMENT VIDEO : < LA SEGORG+X < A=X(ORIGINE GRAPHIQUE). SLRS DEDX < REDUCTION VIDEO. STA DICOX1 < RANGEMENT DE X1. LA SEGORG+Y < A=Y(ORIGINE GRAPHIQUE). SLRS DEDY < REDUCTION VIDEO. NGR A,A AD NLIG < INVERSION DUE AU FAIT QUE LES < AXES Y VIDEO ET GRAPHIQUE SONT < INVERSES. STA DICOY1 < RANGEMENT Y1. LA SEGEXT+X < A=X(EXTREMITE GRAPHIQUE). SLRS DEDX < REDUCTION VIDEO. STA DICOX2 < RANGEMENT DE X2. LA SEGEXT+Y < A=Y(EXTREMITE GRAPHIQUE). SLRS DEDY < REDUCTION VIDEO. NGR A,A AD NLIG < INVERSION DES AXES Y. STA DICOY2 < RANGEMENT DE Y2. < < TRACE DICHOTOMIQUE DU SEGMENT : < LX DICOX1 < X=X1. LY DICOY1 < Y=Y1. BSR ASET < AFFICHAGE DU POINT M1. BSR ADICO < TRACE DU SEGMENT M1M2. LX DICOX2 < X=X2. LY DICOY2 < Y=Y2. BSR ASET < AFFICHAGE DU POINT M2. PLR A,X,Y,C RSR END