<
<
<
< 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
Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.