DATE
PROG
TRN
<
<
< D E F I N I T I O N S G E N E R A L E S :
<
<
XUNDEF:: VAL -1 < POUR NE DEFINIR QUE LES 'XX...' DANS LES
< FICHIERS DE DEFINITION...
CALL #SIP DEFINITION CTTE#
<
< PREPARATION DE L'APPEL DE #SIP UTILITAIRES# :
<
XXXDEF: VAL XUNDEF
XXXLOC: VAL XUNDEF
XXXTAB: VAL XUNDEF
XXXPRO: VAL XUNDEF
CALL #SIP UTILITAIRES#
<
<
< D E F I N I T I O N D E L ' I M A G E :
<
<
XXXVEC: VAL XUNDEF < AFIN DE NE DEFINIR QUE LES 'XXVEC'...
CALL #SIP VECTEUR 512#
XXXVEC: VAL XXVEC1 < DEFINITION DES CONSTANTES IMAGE/VECTEUR.
CALL #SIP VECTEUR 512#
PAGE
<
<
< O P T I O N S D ' A S S E M B L A G E :
<
<
XOPT01: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'XOPT01'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
XOPT01:: VAL EXIST < TRACE GRAPHIQUE, ET VERIFICATIONS CROI-
< SEES DES EQUATIONS CALCULEES...
XEIF%: VAL ENDIF
PAGE
<
<
< B A S D E L A M E M O I R E :
<
<
ZERO: EQU $
DZS PEPROG-D+Z
<
< POINT D'ENTREE :
<
ENTRY: EQU $
LRM A,K
WORD DEBUT < POINT D'ENTREE DU PROGRAMME,
WORD STACK-DEPILE < INITIALISATION DE LA PILE.
PSR A
RSR < ON EFFECTUE AINSI UN 'GOTO' 'DEBUT'...
PAGE
<
<
< M E S S A G E S :
<
<
TABLE
<
< BUFFER BANDE :
<
LBUFMT: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'LBUFMT'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
LBUFMT:: VAL 4096
XEIF%: VAL ENDIF
BUFMT: EQU $
DZS LBUFMT/NOCMO
<
<
< C O M M O N :
<
<
COMMON
COM: EQU $
<
< MOT DESTINE AU BLOC FLOTTANT :
<
COMFLO: WORD NILK < MOT "BIDON" DESTINE AU BLOC FLOTTANT
< POUR QU'IL Y FIT SES MERDES...
ATSFLO: WORD TSFLO < POUR TESTER DE TEMPS EN TEMPS 'COMFLO'...
<
< INDICATEURS DE CONTROLE :
<
ABLOC0: WORD K < ADRESSE DU PREMIER BLOC A LIRE.
LBLOC: WORD LBUFMT < LONGUEUR DES BLOCS PHYSIQUES SUR LA
< BANDE.
FIRSTX: WORD K < PREMIER POINT A TRACER ('XMAX' OU 'K'),
LASTX: WORD XMAX < DERNIER POINT A TRACER ('K' OU 'XMAX').
< (FIRSTX,LASTX) PERMETTENT D'INVERSER
< LE SENS DU BALAYAGE HORIZONTAL.
FIRSTY: WORD YMAX < PREMIERE LIGNE A TRACER ('YMAX' OU 'K'),
LASTY: WORD K < DERNIERE LIGNE A TRACER ('K' OU 'YMAX'),
< (FIRSTY,LASTY) PERMETTENT D'INVERSER
< LE SENS DU BALAYAGE VERTICAL...
IERASE: WORD NEXIST < EFFACER ('EXIST'), OU NON ('NEXIST')
< L'ECRAN 512...
IVIDEO: WORD NEXIST < ECRIRE ('EXIST') L'IMAGE COURANTE SUR LE
< DISQUE VIDEO OU PAS ('NEXIST').
IQUIT: WORD NEXIST < S'ARRETER ('EXIST') OU PAS ('NEXIST')
< APRES CHAQUE IMAGE (POINT D'ARRET).
PASIXY: WORD W < DEFINITION DE L'IMAGE :
< 1 : 512*512,
< 2 : 256*256.
ICAMER: WORD NEXIST < ECRIRE ('EXIST') L'IMAGE COURANTE SUR LE
< DISQUE CAMER OU PAS ('NEXIST').
NCAMER: WORD NILK < NOMBRE D'IMAGES CAMERA A ENREGISTRER
< PAR IMAGE NUMERIQUE.
<
< CONSTANTES FLOTTANTES DE BASE :
<
F0: FLOAT <K<K<K < REMISE A ZERO FLOTTANTE...
F1: FLOAT <W<K<K < L'UNITE EN FLOTTANT...
XXXLOC: VAL YYYFLO < 'YYYFLO'.
CALL #SIP UTILITAIRES#
<
< DEMANDE DE TEMPORISATION
< APRES EFFACEMENT :
<
TEMPO: BYTE NVPSER;FONDOR
WORD NILK < INUTILE...
WORD XXXMOY < 2 PETITES SECONDES...
XXXLOC: VAL YYYGOT < 'YYYGOT'.
CALL #SIP UTILITAIRES#
XXXVEC: VAL XXVEC2 < DEFINITION DES DONNEES DU VECTEUR 512...
CALL #SIP VECTEUR 512#
APOINT: WORD POINT < SOUS-PROGRAMME DE MARQUAGE D'UN POINT
< DE COORDONNEES (X), DONT LE NIVEAU EST
< CALCULE VIA LA TABLE 'LNIVO'.
ALNIVO: WORD LNIVO,X < TABLE DE CORRESPONDANCE DES NIVEAUX POUR
< LE SOUS-PROGRAMME 'POINT'.
<
< ACCES AUX REGISTRES DE CONTROLE :
<
ACTRL1: WORD RCTRL1
ACTRL2: WORD RCTRL2
<
< GESTION DU DEROULEUR :
<
LBLOC0: WORD LBUFMT < POUR VALIDER 'LBLOC'...
NVPMT:: VAL '0B < 'NVP' D'ACCES AU DEROULEUR DE BANDES.
DEMMT: BYTE NVPMT;XFMTRA < DEMANDE DE LECTURE A ACCES DIRECT.
WORD BUFMT=FCTA*NOCMO
WORD LBUFMT
WORD NILK < ADRESSE DU BLOC COURANT.
IF Z-I,,XEIF%,
IF ATTENTION : L'INITIALISATION DE 'IBUFMT' ET
IF 'ZBUFMT' SERA MAUVAISE !!!
XEIF%: VAL ENDIF
IBUFMT: WORD LBUFMT-Z+I < INDEX COURANT DU BUFFER 'MT',
ZBUFMT: WORD LBUFMT-Z+I < ET POUR FORCER LA LECTURE DU PREMIER
< BLOC DE CHAQUE IMAGE...
ABUFMT: WORD BUFMT,X < ET RELAI D'ACCES...
ANIVO: WORD NIVO < SOUS-PROGRAMME D'ACCES AU NIVEAU COURANT.
<
< GESTION DU DISQUE VIDEO :
<
BUFVIW: BYTE "J";KCR
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVIW*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUFVW:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIW: BYTE XWOR%2;FAVW < COMMANDE DE L'ECRITURE SUR LE DISQUE
< VIDEO...
WORD BUFVIW=FCTA*NOCMO
WORD LBUFVW
BUFVIR: DZS W < BUFFER DE LECTURE DES ACQUITTEMENTS.
LBUFVR:: VAL $-BUFVIR*NOCMO
DEMVIR: BYTE XWOR%2;FAVR < LECTURE DES ACQUITTEMENTS DU DISQUE.
WORD BUFVIR=FCTA*NOCMO
WORD LBUFVR
<
< GENERATION DES SEQUENCES PERIODIQUES :
<
< ARGUMENTS :
< (KP1,KP2,KP3)=CHIFFRES (CENTAINE,DIZAINE,UNITE)
< DU PAS, SOIT LA PERIODE DU MOUVEMENT
< EXPRIMEE EN NOMBRE D'IMAGES.
< (NPERIO) =LE NOMBRE DE PERIODES A REPRESENTER.
<
NPERIO: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'NPERIO'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
NPERIO:: VAL K < 'NPERIO' EST ABSENT...
XEIF%: VAL ENDIF
KP1: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'KP1'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
KP1:: VAL K < 'KP1' EST ABSENT...
XEIF%: VAL ENDIF
KP2: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'KP2'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
KP2:: VAL K < 'KP2' EST ABSENT...
XEIF%: VAL ENDIF
KP3: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'KP3'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
KP3:: VAL K < 'KP3' EST ABSENT...
XEIF%: VAL ENDIF
MULTIS: VAL EXIST < A PRIORI, ON VA GENERER LA SEQUENCE
< PLUSIEURS FOIS...
IF NPERIO-K,XEIF%1,,XEIF%1
IF KP1-K,XEIF%2,,XEIF%2
IF KP2-K,XEIF%3,,XEIF%3
IF KP3-K,XEIF%4,,XEIF%4
MULTIS: VAL NEXIST < ET BIEN NON, LA SEQUENCE NE SERA
< GENEREE QU'UNE SEULE FOIS...
XEIF%4: VAL ENDIF
XEIF%3: VAL ENDIF
XEIF%2: VAL ENDIF
XEIF%1: VAL ENDIF
IF MULTIS-EXIST,XEIF%9,,XEIF%9
BUFVIG: BYTE "(";KCR
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVIG*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVIG:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIG: BYTE XWOR%2;FAVW < COMMANDE DE MEMORISATION DE L'ADRESSE
< DE DEBUT D'ITERATION...
WORD BUFVIG=FCTA*NOCMO
WORD LBUVIG
BUFVIN: EQU $
IF KP1-K,,XEIF%2,
BYTE "P";KP1=FCBA(MOCD;KP2=FCBA(MOCD;KP3=FCBA(MOCD;KCR
XWOR%1: VAL '0000000@@@@(MOCD
XEIF%2: VAL ENDIF
IF KP1-K,XEIF%1,,XEIF%1
IF KP2-K,,XEIF%2,
BYTE "P";KP2=FCBA(MOCD;KP3=FCBA(MOCD;KCR
XWOR%1: VAL '0000000@@@@(MOCD
XEIF%2: VAL ENDIF
IF KP2-K,XEIF%2,,XEIF%2
IF KP3-K,,XEIF%3,
BYTE "P";KP3=FCBA(MOCD;KCR
XWOR%1: VAL '0000000@@@@(MOCD
XEIF%3: VAL ENDIF
IF KP3-K,XEIF%3,,XEIF%3
IF ATTENTION (KP1,KP2,KP3) EST NUL !!!
XEIF%3: VAL ENDIF
XEIF%2: VAL ENDIF
XEIF%1: VAL ENDIF
XWOR%3: VAL $-BUFVIN*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVIN:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIN: BYTE XWOR%2;FAVW < COMMANDE DE MISE EN PLACE DU PAS
< VARIABLE...
WORD BUFVIN=FCTA*NOCMO
WORD LBUVIN
BUFVI1: BYTE "P";"1";KCR;NILK
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVI1*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVI1:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVI1: BYTE XWOR%2;FAVW < COMMANDE DE RETOUR AU PAS UNITE...
WORD BUFVI1=FCTA*NOCMO
WORD LBUVI1
BUFVID: BYTE ")";KCR
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVID*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVID:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVID: BYTE XWOR%2;FAVW < COMMANDE DE RETOUR EN DEBUT D'ITERATION.
WORD BUFVID=FCTA*NOCMO
WORD LBUVID
BUFVIC: BYTE KCR;NILK
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVIC*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVIC:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIC: BYTE XWOR%2;FAVW < COMMANDE DE PASSAGE A L'IMAGE SUIVANTE.
WORD BUFVIC=FCTA*NOCMO
WORD LBUVIC
XEIF%9: VAL ENDIF
<
< DONNEES DE BALAYAGE :
<
PASIX: WORD NILK < BALAYAGE HORIZONTAL,
PASIY: WORD NILK < BALAYAGE VERTICAL.
<
< DONNEES DE PILOTAGE D'UNE CAMERA :
<
COPY: BYTE NVPOUT;FAVWD < ECRITURE DIRECTE SUR LA VISU
< EN VUE DE FAIRE UN HARD-COPY.
BYTE '1B;'17;'8D;'1D < CTRL-SHIFT-K, CTRL-W, R/C, GS.
< AVEC LE BIT0=1 DESTINE AUX
< FIN DE MESSAGE DES EMISSIONS SUR
< LES LIGNES BOUCLEES VI1/VI2.
SLEEP: BYTE K;FONDOR < DEMANDE DE TEMPORISATION POUR
< FAIRE UNE COPY.
WORD NILK
WORD 4 < 4 SECONDES DE TEMPORISATION
< POUR FAIRE UN HARD-COPY.
PAGE
<
<
< T A B L E D E T R A N S C O D A G E D E S N I V E A U X :
<
<
< ARGUMENTS D'ASSEMBLAGE :
< ND=DIVISEUR DES NIVEAUX DE 'LNIVO' (0 OU 2),
< NI=TRANSLATION DES NIVEAUX DE 'LNIVO' (0 OU 128)...
<
<
NI: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'NI'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
NI:: VAL XXNOIR < LE NIVEAU INITIAL SERA LE NIVEAU NOIR.
XEIF%: VAL ENDIF
ND: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'ND'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
ND:: VAL W < PAS DE DIVISEUR DES NIVEAUX...
XEIF%: VAL ENDIF
LNIVO: EQU $
NTRN
XWOR%1: VAL NIV256+NOCMO-E/NOCMO
XWOR%2: VAL NIV256/NOCMO(K=FCREST
TRN
XWOR%3: VAL NIV256+XWOR%2
< INCREMENT DES OCTETS GAUCHES,
XWOR%4: VAL XWOR%3+NOCMO-Z
< INCREMENT DES OCTETS DROITS.
NTRN
<*******************************************************************************
DO XWOR%1
BYTE K=FCDO)MFFFF+N-Z*NOCMO+XWOR%3/ND+NI;K=FCDO)MFFFF+N-Z*NOCMO+XWOR%4/ND+NI
XWOR%5: VAL '0000000@@@@ < RECUPERATION DU DERNIER MOT,
<*******************************************************************************
TRN
IF XWOR%2-K,,XEIF%,
XWOR%5: VAL XWOR%5(MOCG < DANS LE CAS D'UNE TABLE DE LONGUEUR
< IMPAIRE, ON EFFACE LE DERNIER OCTET
< GENERE,
$EQU $-D < ON REVIENT D'UN MOT EN ARRIERE,
WORD XWOR%5 < ET ON REGENERE LE DERNIER MOT...
XEIF%: VAL ENDIF
NLS
DO XC512
FLOAT <NILK<NILK<NILK < LIGNE PRECEDENTE.
LST
PAGE
<
<
< P I L E D E T R A V A I L :
<
<
STACK: EQU $
DZS 64
PROG
XXXVEC: VAL XXVEC3 < DEFINITION DES PROGRAMMES VECTEUR 512...
CALL #SIP VECTEUR 512#
PAGE
<
<
< M A R Q U A G E D ' U N P O I N T :
<
<
< FONCTION :
< CE SOUS-PROGRAMME MARQUE
< LE POINT ARGUMENT (X,Y) AVEC
< COMME NIVEAU, LE NIVEAU ARGU-
< MENT (A) TRANSCODE VIA LA TA-
< BLE 'LNIVO', CE QUI PERMET PAR
< EXEMPLE LA SUPERPOSITION DE
< PLUSIEURS IMAGES, EN FAISANT
< QUE LEURS TABLES 'LNIVO' SOIENT
< COMPLEMENTAIRES...
<
<
< ARGUMENTS :
< (A)=NIVEAU,
< (X,Y)=COORDONNEES DU POINT.
<
<
< RESULTAT :
< (A)=NIVEAU TRANSCODE.
<
<
POINT: EQU $
<
< TRANSCODAGE DU NIVEAU :
<
PSR X < SAUVEGARDE DE LA COORDONNEE 'X'...
LR A,X < (X)=NIVEAU ARGUMENT,
LBY &ALNIVO < (A)=NIVEAU TRANSCODE,
PLR X < RESTAURE :
< (X)=COORDONNEE 'X'.
<
< MARQUAGE DU POINT :
<
BSR ASTORP < MARQUAGE : (X,Y) <-- (A)...
<
< ET RETOUR :
<
RSR
PAGE
<
<
< T E S T P E R I O D I Q U E D E ' C O M F L O ' :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EST
< APPELE DERRIERE CHAQUE
< 'FDV' EXPLICITE AINSI
< QU'APRES LES APPELS DE
< 'RAC' ET 'CRAMR'...
<
<
TSFLO: EQU $
PSR A
LA COMFLO < TEST DE 'COMFLO' PAR UN 'LA' AFIN DE NE
< PAS MODIFIER LES CODES (CARY & CO)...
JAE TSFLO1 < OK...
QUIT XXQUIT < E R R E U R P R O G R A M M E ...
< ON A :
< (A)=INDICATEURS FLOTTANTS...
< BIT 0 : UNDERFLOW,
< BIT 1 : OVERFLOW,
< BIT 2 : DIVISION PAR ZERO,
< BIT 3 : 'FIX' IMPOSSIBLE.
STZ COMFLO < PUIS RAZ, CAR CES INDICATEURS SONT
< REMANENTS...
TSFLO1: EQU $
PLR A
RSR
XXXPRO: VAL YYYGOT < 'YYYGOT'.
CALL #SIP UTILITAIRES#
XXXPRO: VAL YYYFLO < 'YYYFLO'.
CALL #SIP UTILITAIRES#
PAGE
<
<
< A C C E S A U N I V E A U C O U R A N T :
<
<
< ARGUMENT :
< (IBUFMT)=INDEX DE L'OCTET COURANT.
<
<
< RESULTAT :
< (A)=OCTET COURANT.
<
<
NIVO: EQU $
<
< INITIALISATIONS :
<
PSR B,X
<
< TEST DE L'ETAT DU BUFFER :
<
LA IBUFMT < (A)=INDEX COURANT :
CP ZBUFMT < LE BUFFER A-T'IL ETE VIDE (OU EST-CE
< L'ETAT INITIAL) ???
JL NIVO1 < NON...
<
< CAS OU LE BUFFER EST VIDE :
<
NIVO2: EQU $
LAD DEMMT < (A)=ADRESSE DE LA DEMANDE,
SVC < QUE L'ON ENVOIE...
JE NIVO3 < OK...
QUIT XXQUIT < E R R E U R D ' A S S I G N A T I O N..
JMP NIVO2 < ET ON RE-TENTE, OU BIEN ON ARRETE S'IL
< S'AGIT D'UN 'TAPE-MARK'...
NIVO3: EQU $
IC DEMMT+ARGESC < PREPARATION DE L'ADRESSE DU BLOC SUIVANT,
ACTD XXXSIZ < RECUPERATION DE LA 'BOX'...
LR B,A < (A)=NOMBRE D'OCTETS REELS DU BLOC :
CP DEMMT+COESC < LE BUFFER EST-IL BON ???
JNE NIVO2 < NON, ON LIT L'ENREGISTREMENT SUIVANT...
LAI K < (A)=INDEX DU PREMIER OCTET.
<
< ACCES A L'OCTET COURANT :
<
NIVO1: EQU $
LR A,X < (X)=INDEX DE L'OCTET COURANT,
LBY &ABUFMT < (A)=OCTET COURANT...
ADRI I,X < ET PREPARATION DE
STX IBUFMT < L'ACCES SUIVANT...
<
< ET RETOUR :
<
PLR B,X
RSR
PAGE
<
<
< P O I N T D ' E N T R E E :
<
<
DEBUT: EQU $
<
< INITIALISATION DES REGISTRES :
<
LRM C,K
WORD COM+DEPBAS < POSITIONNEMENT DE 'C',
WORD STACK-DEPILE < ET DE 'K'.
<
< CONNEXION A LA 'CDA' :
<
LAI PAGER
BSR AGPCDA < AFIN D'ATTEINDRE LA MEMOIRE DU '68000'
< ET LA MEMOIRE 'SOLAR' QUI LA PRECEDE
< AFIN D'Y METTRE 'BUF'...
<
<
< E N T R Y D E R E B O U C L A G E :
<
<
DEBUT4: EQU $
LA ABLOC0
STA DEMMT+ARGESC < MISE EN PLACE DE L'ADRESSE DU PREMIER
< BLOC A LIRE...
DEBUT9: EQU $
<
< MODIFICATION A PRIORI DU 'PRESC' :
<
LRM A
WORD DEBUT5 < POUR 'XXXPRE'...
ACTD XXXPRE < ON CHANGE ALORS SYSTEMATIQUEMENT APRES
< PASSAGE ICI LE 'PRESC' DU PROGRAMME, AFIN
< DE REVENIR SUR LA VISUALISATION APRES
< CHAQUE ALT-MODE (VIA 'DEBUT5'...).
<
<
< I N I T I A L I S A T I O N S :
<
<
INIT01: EQU $
<
< GESTION DE LA BANDE :
<
INIT10: EQU $
LA LBLOC < (A)=LONGUEUR DES BLOCS PHYSIQUES SUR
< LA BANDE :
JALE INIT11 < BERKKK...
CP LBLOC0 < VALIDATION :
JLE INIT12 < OK...
INIT11: EQU $
QUIT XXQUIT < E R R E U R P A R A M E T R E ...
JMP INIT10 < ET ON RETENTE...
INIT12: EQU $
STA DEMMT+COESC < ET ON INITIALISE LA DEMANDE DE LECTURE...
STA ZBUFMT
STA IBUFMT < POUR PROVOQUER LA LECTURE DU PREMIER
< BLOC...
<
< BALAYAGE HORIZONTAL :
<
LBI +I < (B)=BALAYAGE VERS LA DROITE A PRIORI...
LA FIRSTX < (A)=PREMIER POINT,
CP LASTX < EST-IL AVANT LE DERNIER ???
JL INIT22 < OUI, ON VA A DROITE A PRIORI...
NGR B,B < NON, ON VA A GAUCHE, ON INVERSE (B)...
INIT22: EQU $
INIT25: EQU $
LA PASIXY < (A)=DEFINITION DE L'IAMGE :
CPI W < 512*512 ???
JE INIT23 < OUI, (B) EST BON...
CPI W+W < 256*256 ???
JE INIT24 < OUI...
QUIT XXQUIT < E R R E U R P A R A M E T R E ...
JMP INIT25 < ET ON RETESTE...
INIT24: EQU $
ADR B,B < ET ON DOUBLE DONC LE PAS DE PARCOURS...
INIT23: EQU $
STB PASIX < MISE EN PLACE DU PAS DE BALAYAGE
< HORIZONTAL...
<
< BALAYAGE VERTICAL :
<
LBI +I < (B)=BALAYAGE VERS LE BAS A PRIORI...
LA FIRSTY < (A)=PREMIERE LIGNE,
CP LASTY < EST-ELLE AVANT LA DERNIERE ???
JL INIT02 < OUI, ON DESCEND, (B) EST BON...
NGR B,B < NON, ON MONTE, ON INVERSE (B)...
INIT02: EQU $
INIT05: EQU $
LA PASIXY < (A)=DEFINITION DE L'IAMGE :
CPI W < 512*512 ???
JE INIT03 < OUI, (B) EST BON...
CPI W+W < 256*256 ???
JE INIT04 < OUI...
QUIT XXQUIT < E R R E U R P A R A M E T R E ...
JMP INIT05 < ET ON RETESTE...
INIT04: EQU $
ADR B,B < ET ON DOUBLE DONC LE PAS DE PARCOURS...
INIT03: EQU $
STB PASIY < MISE EN PLACE DU PAS DE BALAYAGE
< VERTICAL...
<
<
< G E N E R A T I O N D E L ' I M A G E :
<
<
GEN69: EQU $
CPZ IERASE < FAUT-IL EFFACER ???
JE GEN69N < NON...
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
<
< EFFACEMENT DE L'ECRAN :
<
XWOR%1: VAL NIV256=K
IF BIT>XWOR%1-NIV256,,XWOR%,
IF ATTENTION : LE CALCUL DU MASQUE SELECTANT TOUS
IF LES PLANS EST ABSURDE !!!
XWOR%: VAL ENDIF
LAI NIV256-MASK)MOCD
STA MCDAJ
LA ARPLAN < (A)=ADRESSE DU REGISTRE DE SELECTION...
BSR APWCDA < ET ON SELECTIONNE TOUS LES PLANS...
LAI ERASE
STA MCDAJ
LA ARCMD
BSR APWCDA < EFFACEMENT DE L'ECRAN, ET REINITIALISA-
< TION DE TOUS LES REGISTRES...
LAD TEMPO
SVC < ET ON FAIT UN PETIT DODO...
LAI XCTRL1
STA MCDAJ
LA ACTRL1
BSR APWCDA < INITIALISATION DE 'CTRL1'.
LAI XCTRL2
STA MCDAJ
LA ACTRL2
BSR APWCDA < INITIALISATION DE 'CTRL2'.
<
< RECUPERATION DE L'IMAGE :
<
GEN69N: EQU $
LY FIRSTY < (Y)=COORDONNEE 'Y'...
GEN01: EQU $
LX FIRSTX < (X)=COORDONNEE 'X'...
GEN02: EQU $
BSR ANIVO < (A)=NIVEAU DU POINT (X,Y),
BSR APOINT < ET ON MARQUE LE POINT (X,Y)...
LB PASIXY < (B)=DEFINITION DE L'IAMGE :
XR A,B < (A)=DEFINITION DE L'IMAGE,
< (A)=NIVEAU DU POINT...
CPI W < 512*512 ???
XR A,B < RESTAURE (A) ET (B)...
JE GEN07 < OUI, 512*512...
PSR X,Y < NON, 256*256 :
ADRI I,X
BSR APOINT < MARQUAGE DE (X+1,Y),
CPZ PASIY < MONTE-T'ON OU DESCEND-ON ???
JL GEN05 < ON DESCEND...
ADRI I,Y < ON MONTE...
JMP GEN06
GEN05: EQU $
ADRI -I,Y < ON DESCEND...
GEN06: EQU $
BSR APOINT < MARQUAGE DE (X+1,Y+-1),
ADRI -I,X
BSR APOINT < MARQUAGE DE (X,Y+-1).
PLR X,Y < ET RESTAURATION DE (X,Y)...
GEN07: EQU $
LA PASIX < (A)=PAS DE BALAYAGE HORIZONTAL,
ADR A,X < PASSAGE A UN AUTRE POINT,
LR X,A
CPZ PASIX < VA-T'ON A DROITE OU A GAUCHE ???
JL GEN13 < A GAUCHE...
CP LASTX < A DROITE, A-T'ON FINI ???
JLE GEN02 < NON...
JMP GEN14 < OUI...
GEN13: EQU $
CP LASTX < A GAUCHE, A-T'ON FINI ???
JGE GEN02 < NON...
GEN14: EQU $ < OUI, C'EST FINI...
LA PASIY < (A)=PAS DE BALAYAGE VERTICAL,
ADR A,Y < PASSAGE A LA LIGNE SUIVANTE,
LR Y,A
CPZ PASIY < MONTE-T'ON OU DESCEND-T'ON ???
JL GEN03 < ON DESCEND...
CP LASTY < ON MONTE, A-T'ON FINI ???
JLE GEN01 < NON...
JMP GEN04 < OUI...
GEN03: EQU $
CP LASTY < ON DESCEND, A-T'ON FINI ???
JGE GEN01 < NON...
GEN04: EQU $ < OUI, C'EST FINI...
<
< NON, TRAITEMENT DE FIN...
<
CPZ IQUIT < FAUT-IL S'ARRETER ???
JE GEN410 < NON...
IF EXIST-K,XEIF%,,XEIF%
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
QUIT XXQUIT < OUI...
GEN410: EQU $
CPZ IVIDEO < FAUT-IL ECRIRE ???
JE GEN400 < NON...
IF EXIST-K,XEIF%,,XEIF%
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
PSR X < OUI :
IF MULTIS-NEXIST,XEIF%,,XEIF%
LAD DEMVIW
SVC < ON ECRIT L'IMAGE COURANTE...
LAD DEMVIR
SVC < ET ON ATTEND L'ACQUITTEMENT...
XEIF%: VAL ENDIF
IF MULTIS-EXIST,XEIF%,,XEIF%
LAD DEMVIG
SVC < ON MEMORISE L'ADRESSE COURANTE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
LAD DEMVIN
SVC < ON ENVOIE LE PAS (KP1,KP2,KP3)...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
LRM X
WORD NPERIO < (X)=NOMBRE D'IMAGES A ECRIRE=NOMBRE
< DE PERIODES.
GEN999: EQU $
PSR X
LAD DEMVIW
SVC < ECRITURE D'UNE IMAGE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
PLR X
JDX GEN999 < VERS L'IMAGE SUIVANTE...
LAD DEMVI1
SVC < RESTAURATION DU PAS UNITE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
LAD DEMVID
SVC < RETOUR EN DEBUT DE SEQUENCE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
LAD DEMVIC
SVC < ET PROGRESSION UNITAIRE DE L'IMAGE
< COURANTE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
XEIF%: VAL ENDIF
PLR X
GEN400: EQU $
CPZ ICAMER < FAUT-IL FILMER ???
JE GEN470 < NON...
IF EXIST-K,XEIF%,,XEIF%
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
PSR X < OUI :
LX NCAMER < (X)=NOMBRE D'IMAGES A FILMER...
GEN471: EQU $
PSR X
LAD COPY
SVC < ENVOI DE LA COMMANDE HARD-COPY.
LAD SLEEP
SVC < ET ON ATTEND LA FIN DE LA PRISE DE VUE...
PLR X
JDX GEN471
PLR X
GEN470: EQU $
BSR AGOTO
WORD DEBUT9 < A L'IMAGE SUIVANTE...
<
<
< E N T R Y A L T - M O D E :
<
<
DEBUT5: EQU $
QUIT XXQUIT < A T T E N T E ...
LRM C,K < ON REINITIALISE 'C' ET 'K' AU CAS
< D'UNE RE-ENTREE PAR UN 'ALT-MODE'...
WORD COM+DEPBAS < 'C',
WORD STACK-DEPILE < 'K'.
BSR AGOTO
WORD DEBUT4 < (A)=ADRESSE D'ITERATION SUR ALT-MODE...
PAGE
<
<
< T A B L E D E S S Y M B O L E S :
<
<
IF '00000000000@,XEIF%,,XEIF%
EST
XEIF%: VAL ENDIF
DATE
END DEBUT
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.