DF'SIOC CARTE' ED'SIOC CARTE' IN0 PAGE IDP "SIOC CARTE" < < < E N T R E E A P A R T I R D E C A R T E S : < < < FONCTION : < CE MODULE LIT 4*256 CARTE (4 CARTE < CORRESPONDANT A UNE LIGNE D'IMAGE) ; < CHAQUE COLONNE DONNE UN NIVEAU DE GRIS < CODE DE 0 A 7 ; ON GENERE UNE IMAGE < RESIDENTE QUI EST SIMULTANEMENT < VISUALISEE A PARTIR DE CES DONNEES. < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DU BUFFER CARTE... CBUF: DZS LCBUF/NOCMO < BUFFER CARTE... ACBUF: WORD CBUF,X < RELAI VERS LE BUFFER. L64:: VAL 64 < NOMBRE DE CARACTERES PAR CARTE... DEMCR: BYTE '0A;'00 < LECTURE ASCI SANS ECHO SUR CR1. WORD CBUF-ZERO*NOCMO WORD LCBUF PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ LA XR ANDI L64-1 < CALCUL DE 'XR' MODULO 64, LR A,X < POUR INDEXER LE BUFFER CARTE... JANE SPU1 < OK, LE BUFFER EST BON, PSR X < X=0, IL FAUT LIRE UNE NOUVELLE CARTE, SPU3: EQU $ LAD DEMCR SVC 0 < LECTURE ASCI SANS ECHO D'UNE CARTE... JE SPU2 < OK... QUIT 1 < ??? MANQUE L'ASSIGN ??? JMP SPU3 < ET ON RETENTE... SPU2: EQU $ PLR X SPU1: EQU $ LBY &ACBUF < ACCES AU CARACTERE (X), ADRI -"0",A < ET DECODAGE, BSR ASPRPR < CE QUI DONNE UN NIVEAU QUE L'ON FORCE < AU POINT RESIDENT (XR,YR)... FLD F0 < U=0... RSR < < < C O M P O S A N T E ' V ' : < < SPV: EQU $ FLD F0 RSR < < < C O M P O S A N T E ' W ' : < < SPW: EQU $ FLD F0 RSR :F :F < <<'SIOC CARTE' DF'SIOC CARTE RASTER 1' ED'SIOC CARTE RASTER 1' IN0 PAGE IDP "SIOC CARTE RASTER 1" < < < E N T R E E C A R T E S R A S T E R 1 : < < < FONCTION : < CE MODULE LIT SUR L'UNITE < '0B DES NIVEAUX DE GRIS, ET < LES AFFICHE SEQUENTIELLEMENT < SUR L'ECRAN... < < < ARGUMENT : A0:: VAL 0 < TRANSLATION PRELIMINAIRE, ET A1:: VAL A0+1 < FACTEUR DE REDUCTION DES NIVEAUX DE GRIS. A2:: VAL A1+1 < ADRESSE DU PREMIER BLOC SUR LA BANDE ; < SI CETTE ADRESSE EST FOURNIE NEGATIVE, < ALORS, ON RECUPERE L'ADRESSE COURANTE < DANS LA 'BOX'... A10:: VAL '10 < DEFINITION DU NIVEAU MAX ASSOCIE A 0, A11:: VAL A10+1 < DEFINITION DU NIVEAU MAX ASSOCIE A 1, A12:: VAL A11+1 < DEFINITION DU NIVEAU MAX ASSOCIE A 2, A13:: VAL A12+1 < DEFINITION DU NIVEAU MAX ASSOCIE A 3, A14:: VAL A13+1 < DEFINITION DU NIVEAU MAX ASSOCIE A 4, A15:: VAL A14+1 < DEFINITION DU NIVEAU MAX ASSOCIE A 5, A16:: VAL A15+1 < DEFINITION DU NIVEAU MAX ASSOCIE A 6, A17:: VAL A16+1 < DEFINITION DU NIVEAU MAX ASSOCIE A 7, < 'NIVEAU MAX' S'ENTENDANT DANS (0,255), < ET LES 'A10',...,'A17' ETANT SUPPOSE < FOURNIS DANS L'ORDRE CROISSANT... < < < L O C A L : < < LOCAL FLOC: EQU $ < < INDICATEUR DE PREMIER PASSAGE : < IPREM: WORD -1 < < DEFINITION ET ACCES AU BUFFER : < LCBUF:: VAL '800 < LONGUEUR EN OCTETS DU BUFFER, CBUF: EQU IMAGE < IL EST EN RECOUVREMENT AVEC 'IMAGE'... NVPMT:: VAL '0B < 'NVP' D'ACCES A LA BANDE MAGNETIQUE... DEMADC: BYTE NVPMT;'05 < MISE DE L'ADRESSE COURANTE DANS LA 'BOX'. DEMMT: BYTE NVPMT;'08 < LECTURE EN ACCES DIRECT DE LA BANDE : WORD CBUF-ZERO*2 WORD LCBUF ADMT: WORD 0 < ADRESSE COURANTE DE BLOC ('A2'). AXBUF: WORD CBUF,X < RELAI D'ACCES AU BUFFER, XBUF: WORD LCBUF < INDEX COURANT DU BUFFER, MAXBUF: WORD LCBUF < VALEUR COURANTE DE 'XBUF'. < < CONSTANTES : < C10: WORD 10 < CONVERSION DECIMALE. XA0: WORD 0 < COEFFICIENT 'A0'. XA1: WORD 0 < COEFFICIENT 'A1'. FINITE: FLOAT 1000000 < < LISTE D'ASSOCIATION DES NIVEAUX : < ALNIV: WORD NIV0,X < RELAI D'ACCES A LA LISTE : NIV0: WORD 0 NIV1: WORD 0 NIV2: WORD 0 NIV3: WORD 0 NIV4: WORD 0 NIV5: WORD 0 NIV6: WORD 0 NIV7: WORD 0 < < RELAIS : < ASP1: WORD SP1 < CONVERSION DECIMALE PAR CARACTERE, ASP2: WORD SP2 < ACCES A UN CARACTERE. PROG < < < C O M P O S A N T E E N ' U ': < < SPU: EQU $ < < ENTREE DES PARAMETRES : < CPZ IPREM < EST-CE NECESSAIRE ??? JGE SPU1 < NON... IC IPREM < OUI... LXI A0 BSR ASPCT BSR AROND STA XA0 LXI A1 BSR ASPCT BSR AROND STA XA1 LXI A2 BSR ASPCT BSR AROND STA ADMT < ADRESSE COURANTE SUR LA BANDE : JAGE SPU3 < OK, ELLE EST POSITIVE OU NULLE... SPU4: EQU $ LAD DEMADC < SI ELLE EST NEGATIVE, SVC 0 < ON RECUPERE L'ADRESSE COURANTE SUR LE < BANDE. JE SPU5 < OK... QUIT 1 < "!ASSIGN B=MT1" MANQUE SUREMENT... JMP SPU4 < TRY AGAIN... SPU5: EQU $ ACTD 3 < RECUPERATION DE 'BOX' : STB ADMT < CE QUI DONNE L'ADRESSE COURANTE SUR LA < BANDE... SPU3: EQU $ LXI A10 BSR ASPCT BSR AROND STA NIV0 LXI A11 BSR ASPCT BSR AROND STA NIV1 LXI A12 BSR ASPCT BSR AROND STA NIV2 LXI A13 BSR ASPCT BSR AROND STA NIV3 LXI A14 BSR ASPCT BSR AROND STA NIV4 LXI A15 BSR ASPCT BSR AROND STA NIV5 LXI A16 BSR ASPCT BSR AROND STA NIV6 LXI A17 BSR ASPCT BSR AROND STA NIV7 SPU1: EQU $ < < COMPOSANTE : < FLD FINITE < POUR FORCER UN OVERSCREEN... RSR < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ < < COMPOSANTE : < FLD FINITE < POUR FORCER UN OVERS-SCREEN... RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ < < ACCES AU NIVEAU DE GRIS COURANT : < LBI 0 < INITIALISATION DU CUMUL, BSR ASP1 < DECODAGE DU PREMIER CHIFFRE, BSR ASP1 < DU DEUXIEME, BSR ASP1 < DU TROISIEME, BSR ASP1 < ET DU QUATRIEME... LA XA0 ADR A,B < TRANSLATION PRELIMINAIRE, LAI 0 DV XA1 < ET REDUCTION... < (A)=NIVEAU DE GRIS... LXI 0 < (X)=PREMIER NIVEAU (0-7) ESSAYE : SPW1: EQU $ CP &ALNIV < (A) EST-IL AVANT OU APRES ??? JLE SPW2 < JUSTE AVANT, ON S'ARRETE... ADRI 1,X < APRES, AU SUIVANT... XR A,X CPI NIVMAX < S'IL EXISTE ??? XR A,X JLE SPW1 < OUI... ADRI -1,X < NON, RETOUR EN ARRIERE... SPW2: EQU $ LR X,A < (A)=NIVEAU (0-7) A MARQUER... < < MARQUAGE DU POINT COURANT : < LX XR STX XS LY YR STY YS BSR ASPRPS < MARQUAGE DU POINT (XS,YS)=(XR,YR) < AVEC LE NIVEAU (A)... < < COMPOSANTE : < FLD F0 RSR < < < A C C E S A U C A R A C T E R E C O U R A N T : < < SP2: EQU $ PSR B,X SP24: EQU $ LA XBUF < (A)=INDEX COURANT DU BUFFER, CP MAXBUF < EST-ON AU BOUT DU BUFFER (EN PARTICULIER < CAS DE LA PREMIERE LECTURE...) ??? JL SP21 < NON... STZ XBUF < OUI, ON SE RAMENE EN TETE DU BUFFER... SP23: EQU $ LAD DEMMT SVC 0 < ON LIT LE BLOC COURANT... JE SP22 < OK... LR X,A CPI '45 < EST-CE UN 'TAPE-MARK' ??? JNE SP29 < NON, AUTRE ERREUR... LAD DEMMT < OUI, ON TENTE DE RELIRE... SVC 0 < LECTURE DU BLOC COURANT... JE SP22 < OK, ON A SAUTE LE 'TAPE-MARK'... SP29: EQU $ QUIT 1 < ERREUR D'ASSIGNATION PROBABLEMENT... JMP SP23 SP22: EQU $ IC ADMT < PASSAGE AU BLOC SUIVANT... ACTD 3 < RECUPERATION DE LA 'BOX'... LR B,A < (A)=BOX... CP MAXBUF < ET VALIDATION... JLE SP28 < OK... QUIT 1 < !?!???!?! SP28: EQU $ LA XBUF < (A)=INDEX COURANT DU BUFFER... SP21: EQU $ IC XBUF < ET PASSAGE AU CARACTERE SUIVANT... LR A,X LBY &AXBUF < (A)=CARACTERE COURANT DU BUFFER : CPI " " < ET TEST... JL SP24 < ON IGNORE TOUS LES CONTROLES... JG SP25 < OK, CHIFFRE (PEUT-ETRE...). LAI "0" < LE BLANC EST TRANSFORME EN "0"... SP25: EQU $ CPI "0" < ET VALIDATION... JL SP26 < ERREUR... CPI "9" < VALIDATION... JG SP26 < ERREUR... ADRI -"0",A < DECODAGE BINAIRE... SP27: EQU $ PLR B,X RSR < ET SORTIE... SP26: EQU $ QUIT 1 < ?!????!??! LAI 0 < ET ON FORCE 0... JMP SP27 < ET ON SORT... < < < C O N V E R S I O N B I N A I R E : < < SP1: EQU $ LR B,A < (A)=CUMUL COURANT, MP C10 < QUE L'ON MULTIPLIE PAR 10... BSR ASP2 < ACCES AU CARACTERE COURANT... ADR A,B < ET CUMUL... RSR :F :F < <<'SIOC CARTE RASTER 1' DF'SIOC CARTE RHO 1' ED'SIOC CARTE RHO 1' IN0 PAGE IDP "SIOC CARTE RHO 1" < < < E N T R E E A P A R T I R D E C A R T E S R H O 1 : < ( L I S T E ( R H O ) ) < < < FORMAT : < ON TROUVE DANS L'ORDRE : < 1 - UN PREMIER PAQUET DE 'XX3' CARTE < INUTILES... < 2 - UN DEUXIEME PAQUET CONTENANT 'XX1' < VALEURS DE 'RHO' CODEES SUR 'XX2' < CHIFFRES DECIMAUX. < < < ARGUMENT : < A0=CONSTANTE MULTIPLICATIVE DE 'RHO'. < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: DZS LCBUF/NOCMO < BUFFER DES CARTE, ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. DEMCR: BYTE '0A;'00 < LECTURE DES CARTE. WORD CBUF-ZERO*NOCMO WORD LCBUF XX1:: VAL 91 < LONGUEUR DES LISTES DES 'RHO', XX2: VAL 5 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUN DES 'RHO'. XX3:: VAL 2 < NOMBRE DE CARTE INUTILES EN TETE... A0:: VAL 0 < ARGUMENT... C10: WORD 10 < CONSTANTE DE CONVERSION DECIMALE. ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 C4000: FLOAT 4000 C180: FLOAT 180 FRHO: FLOAT 0 FTETA: FLOAT 0 PAS: FLOAT 2 < PAS DE TETA EN TETA... (PI/90) PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ LA YR OR XR JANE SPU1 < AUTRES FOIS... < < LECTURE DES CARTE DE TETE : < LXI XX3 SPU30: EQU $ PSR X SPU51: EQU $ LAD DEMCR SVC 0 JE SPU52 < OK... QUIT 1 < MANQUE LE !ASSIGN ??? JMP SPU51 < TRY AGAIN... SPU52: EQU $ PLR X JDX SPU30 < < CAS DE LA PREMIERE FOIS : < LYI 0 < INDEX DES 'RHOS' : SPU12: EQU $ LAD DEMCR SVC 0 < LECTURE D'UNE CARTE 'Y'... JE SPU50 < OK... QUIT 1 < MANQUE LE !ASSIGN ??? JMP SPU12 < TRY AGAIN... SPU50: EQU $ LXI 0 < X=INDEX DES CARACTERES DE LA CARTE. SPU15: EQU $ BSR ASP1 < DECODAGE DECIMAL... FLT FCAM C4000 JL SPU20 FLD C4000 < ON MAJORE... SPU20: EQU $ FDV C4000 FSB F1 FNEG < EN FAIT : RHO=1-(RHO/4000). FST FRHO PSR X LXI A0 BSR ASPCT PLR X FMP FRHO < ET MISE A L'ECHELLE... FST FRHO LR Y,A < Y='TETA' A UNE CONSTANTE PRES... FLT FMP PAS FMP PI3141 FDV C180 FST FTETA < CE QUI DONNE 'TETA' EN RADIANS... BSR ACOS FMP FRHO BSR AROND AD TRY STA XS < D'OU : XS=RHO*COS(TETA). FLD FTETA BSR ASIN FMP FRHO BSR AROND AD TRX STA YS < ET : YS=RHO*SIN(TETA). LAI NIVMAX BSR ASPRPS < FORCAGE DU POINT (XS,YS). ADRI 1,Y LR Y,A CPI XX1 < EST-CE FINI ??? JE SPU16 < OUI... LR X,A < NON, CPI LCBUF/XX2*XX2 < FAUT-IL CHANGER DE CARTE ??? JL SPU15 < NON... JMP SPU12 < OUI... SPU16: EQU $ IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... < < CAS DES AUTRES FOIS : < SPU1: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ BSR ASP2 < ACCES AU PREMIER CARACTERE. MP C10 STB FWORK BSR ASP2 < ACCES AU DEUXIEME CARACTERE. AD FWORK MP C10 STB FWORK BSR ASP2 < ACCES AU TROISIEME CARACTERE. AD FWORK MP C10 STB FWORK BSR ASP2 < ACCES AU QUATRIEME CARACTERE. AD FWORK MP C10 STB FWORK BSR ASP2 < ACCES AU CINQUIEME CARACTERE. AD FWORK RSR SP2: EQU $ LBY &ACBUF ADRI 1,X < POUR LE CARACTERE SUIVANT... ADRI -"0",A < CONVERSION... CPI " "-"0" JNE SP21 LAI 0 < " "="0"... SP21: EQU $ JAL SP22 CPI BASE10 JL SP23 SP22: EQU $ QUIT 1 SP23: EQU $ RSR < < < C O M P O S A N T E ' V ' : < < SPV: EQU $ FLD F0 RSR < < < C O M P O S A N T E ' W ' : < < SPW: EQU $ FLD F0 RSR :F :F < <<'SIOC CARTE RHO 1' DF'SIOC CARTE XY 1' ED'SIOC CARTE XY 1' IN0 PAGE IDP "SIOC CARTE XY 1" < < < E N T R E E A P A R T I R D E C A R T E S X Y 1 : < ( L I S T E ( X , Y ) ) < < < FORMAT : < ON TROUVE DANS L'ORDRE : < 1 - UN PREMIER PAQUET CONTENANT 'XX1' < COORDONNEES 'X' EN ENTIER SUR 'XX2' CHIFFRES. < 2 - UN DEUXIEME PAQUET CONTENANT 'XX1' < COORDONNEES 'Y' EN ENTIER SUR 'XX2' CHIFFRES. < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: DZS LCBUF/NOCMO < BUFFER DES CARTE, ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. DEMCR: BYTE '0A;'00 < LECTURE DES CARTE. WORD CBUF-ZERO*NOCMO WORD LCBUF XX1:: VAL 101 < LONGUEUR DES LISTES DE COORDONNEES, XX2: VAL 3 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. ALXY: WORD TV2 < ADRESSE DE 'LXY' DANS 'CDAI'... LXY: WORD 0 < MOT COURANT DE 'LXY'. BLXY: WORD LXY C10: WORD 10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 ASPWXY: WORD SPWXY < ECRITURE DANS 'LXY', ASPRXY: WORD SPRXY < LECTURE DANS 'LXY'. PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ LA YR OR XR JANE SPU1 < AUTRES FOIS... < < CAS DE LA PREMIERE FOIS : < LYI 0 < INDEX DE 'LXY'. SPU2: EQU $ SPU4: EQU $ LAD DEMCR SVC 0 < LECTURE DE LA CARTE : JE SPU3 < OK... QUIT 1 < !ASSIGN ??? JMP SPU4 SPU3: EQU $ LXI 0 < INDEX DES CARACTERES CARTE. SPU5: EQU $ BSR ASP1 < DECODAGE DECIMAL, STA LXY BSR ASPWXY < ET STOCKAGE DE 'X'... ADRI 1,Y LR Y,A CPI XX1 < EST-CE FINI ??? JE SPU6 < OUI... LR X,A < NON, CPI LCBUF/XX2*XX2 < FAUT-IL LIRE UNE AUTRE CARTE ??? JL SPU5 < NON... JMP SPU2 < OUI... SPU6: EQU $ LYI 0 < INDEX DE 'LXY' : SPU12: EQU $ LAD DEMCR SVC 0 < LECTURE D'UNE CARTE 'Y'... LXI 0 < X=INDEX DES CARACTERES DE LA CARTE. SPU15: EQU $ BSR ASP1 < DECODAGE DECIMAL... AD ALIGM1 NGR A,A STA YS BSR ASPRXY < RECUPERATION DE 'X', LA LXY STA XS LAI NIVMAX BSR ASPRPS < FORCAGE DU POINT (XS,YS). ADRI 1,Y LR Y,A CPI XX1 < EST-CE FINI ??? JE SPU16 < OUI... LR X,A < NON, CPI LCBUF/XX2*XX2 < FAUT-IL CHANGER DE CARTE ??? JL SPU15 < NON... JMP SPU12 < OUI... SPU16: EQU $ IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... < < CAS DES AUTRES FOIS : < SPU1: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ BSR ASP2 < ACCES AU PREMIER CARACTERE. MP C10 STB FWORK BSR ASP2 < ACCES AU DEUXIEME CARACTERE. AD FWORK MP C10 STB FWORK BSR ASP2 < ACCES AU TROISIEME CARACTERE. AD FWORK IF NLIGM1-NPOLM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 CPI NLIGM1?NPOLM1 JLE SP11 < OK... QUIT 1 SP11: EQU $ RSR SP2: EQU $ LBY &ACBUF ADRI 1,X < POUR LE CARACTERE SUIVANT... ADRI -"0",A < CONVERSION... CPI " "-"0" JNE SP21 LAI 0 < " "="0"... SP21: EQU $ JAL SP22 CPI BASE10 JL SP23 SP22: EQU $ QUIT 1 SP23: EQU $ RSR < < < A C C E S A ' L X Y ' : < < SPRXY: EQU $ PSR A,X LA ALXY ADR Y,A < Y=INDEX D'ACCES. LB BLXY LXI 1 RCDA PLR A,X RSR SPWXY: EQU $ PSR A,X LA ALXY ADR Y,A < Y=INDEX D'ACCES. LB BLXY LXI 1 WCDA PLR A,X RSR < < < C O M P O S A N T E ' V ' : < < SPV: EQU $ FLD F0 RSR < < < C O M P O S A N T E ' W ' : < < SPW: EQU $ FLD F0 RSR :F :F < <<'SIOC CARTE XY 1' DF'SIOC CARTE XY 2' ED'SIOC CARTE XY 2' IN0 PAGE IDP "SIOC CARTE XY 2" < < < E N T R E E A P A R T I R D E C A R T E S X Y 2 : < ( L I S T E ( X , Y ) ) < < < FORMAT : < ON TROUVE DANS L'ORDRE : < 1 - UN PREMIER PAQUET CONTENANT 'XX1' < COORDONNEES 'X' EN ENTIER SUR 'XX2' CHIFFRES. < 2 - UN DEUXIEME PAQUET CONTENANT 'XX1' < COORDONNEES 'Y' EN ENTIER SUR 'XX2' CHIFFRES. < < < FONCTION : < TRACE LA COURBE DONNEE SOUS LA < FORME DE 2 LISTE (X(I)) ET (Y(I)), < SACHANT QUE CHAQUE POINT EST REPRESENTE < PAR UN PAVE (SPIRALE) DE SURFACE < PROPORTIONNELLE AU RAYON DE COURBURE. < < < ARGUMENT : < A0000=CONSTANTE DE PROPORTIONNALITE POUR < CALCULER LE RAYON DE COURBURE. A0:: VAL 0 < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: EQU BUFIN < BUFFER DES CARTE, IF STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR% IF ATTENTION : ERREUR DE RECOUVREMENT !!! XWOR%: VAL 0 ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. DEMCR: BYTE '0A;'00 < LECTURE DES CARTE. WORD CBUF-ZERO*NOCMO WORD LCBUF XX1:: VAL 101 < LONGUEUR DES LISTES DE COORDONNEES, XX2:: VAL 3 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. XX3:: VAL 4 < PARAMETRE DE CALCUL DES DERIVEES < SECONDES (PAS D'APPROXIMATION). ALXY: EQU CTCDA < ADRESSE DE 'LXY' DANS 'CDAI'... LXY: EQU DXDU+0 < MOT COURANT DE 'LXY'. C10: WORD BASE10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 XSM: EQU DXDU+1 < X(I-1), YSM: EQU DXDV+0 < Y(I-1), XSP: EQU DXDV+1 < X(I+1), YSP: EQU DYDU+0 < Y(I+1). ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 ASP3: WORD SP3 < RECUPERATION DE X ET Y DANS LXY... ASPWXY: WORD SPWXY < ECRITURE DANS 'LXY', ASPRXY: WORD SPRXY < LECTURE DANS 'LXY'. < < DONNEES DE TRACE DES SPIRALES : < LB0: EQU DYDU+1 < LONGUEUR DU BRAS COURANT DE LA SPIRALE. LB: EQU DYDV+0 < NOMBRE DE POINTS ENCORE A TRAITER < SUR LE BRAS COURANT DE LA SPIRALE. NP: EQU DYDV+1 < NOMBRE DE POINTS DEJA TRAITES, NPM: EQU DZDU+0 < NOMBRE DE POINTS A TRAITER. DELTAX: EQU DZDU+1 < PAS D'INCREMENTATION DE X, DELTAY: EQU DZDV+0 < PAS D'INCREMENTATION DE Y. PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ < < NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0... < LYI 0 < INDEX DE 'LXY'. SPU2: EQU $ SPU4: EQU $ LAD DEMCR SVC 0 < LECTURE DE LA CARTE : JE SPU3 < OK... QUIT 1 < !ASSIGN ??? JMP SPU4 SPU3: EQU $ < < NOTA : (X)=0 APRES LE SVC !!! < SPU5: EQU $ BSR ASP1 < DECODAGE DECIMAL, BSR ASPWXY < ET STOCKAGE DE 'X'... LR Y,A CPI XX1 < EST-CE FINI ??? JE SPU6 < OUI... LR X,A < NON, CPI LCBUF/XX2*XX2 < FAUT-IL LIRE UNE AUTRE CARTE ??? JL SPU5 < NON... JMP SPU2 < OUI... SPU6: EQU $ LYI 0 < INDEX DE 'LXY' : SPU12: EQU $ LAD DEMCR SVC 0 < LECTURE D'UNE CARTE 'Y'... < < NOTA : (X)=0 APRES LE SVC !!! < SPU15: EQU $ BSR ASP1 < DECODAGE DECIMAL... AD ALIGM1 NGR A,A SWBR A,A BSR ASPRXY < RECUPERATION DE 'X', OR LXY BSR ASPWXY < RANGEMENT DE (Y,X). LR Y,A CPI XX1 < EST-CE FINI ??? JE SPU16 < OUI... LR X,A < NON, CPI LCBUF/XX2*XX2 < FAUT-IL CHANGER DE CARTE ??? JL SPU15 < NON... JMP SPU12 < OUI... SPU16: EQU $ < < EXPLOITATION DE LA LISTE LXY : < LYI 0 < Y=INDEX DE 'LXY'... SPU20: EQU $ MKX:: VAL '00FF < MASQUE DES X DANS LXY, MKY:: VAL 'FF00 < ET CELUI DES Y... BSR ASP3 STA XS < GENERATION DU POINT COURANT STB YS < (XS,YS)=(X(I),Y(I)). ADRI -XX3,Y CPZR Y < EST-CE LE PREMIER POINT ??? JL SPU21 < OUI, ON GARDE (XS,YS)... BSR ASP3 < NON, ON PREND LE PRECEDENT... SPU21: EQU $ STA XSM < GENERATION DU POINT PRECEDENT STB YSM < (X(I-1),(Y(I-1)). ADRI 2*XX3,Y LR Y,A CPI XX1 < EST-CE LE DERNIER POINT ??? LA XS LB YS JGE SPU22 < OUI, ON GARDE (XS,YS)... BSR ASP3 < NON, ON PREND LE SUIVANT... SPU22: EQU $ STA XSP < GENERATION DU POINT SUIVANT STB YSP < (X(I+1),(Y(I+1)). ADRI -XX3+1,Y < POUR LE PASSAGE AU POINT SUIVANT. AD XSM SB XS SB XS < D2X/DS=XSP-2*XS+XSM. STA FWORK1 MP FWORK1 STB FWORK1 < ON A ICI LE CARRE DE LA DERIVEE < SECONDE DE 'X' EN (XS,YS). LA YSP AD YSM SB YS SB YS < D2Y/DS=YSP-2*YS+YSM. STA FWORK2 MP FWORK2 LR B,A < ON A ICI LE CARRE DE LA DERIVEE < SECONDE DE 'Y' EN (XS,YS). AD FWORK1 ADRI 1,A < POUR QU'IL NE SOIT PAS NUL... FLT BSR ARAC < CE QUI DONNE L'INVERSE DU < RAYON DE COURBURE... FST FWORK LXI A0 BSR ASPCT < ACCES A LA CONSTANTE 'A0000', FDV FWORK < CE QUI DONNE LE RAYON DE COURBURE < A UNE CONSTANTE MULTIPLICATIVE PRES... BSR AROND STA NPM < D'OU LA TAILLE DES SPIRALES... < < TRACE D'UNE SPIRALE : < SPMOY: EQU $ PSR A,B,X,Y STZ NP < NP=NOMBRE DE POINTS TRAITES. LAI 1 STA DELTAX < DELTAX <-- +1, STZ DELTAY < DELTAY <-- 0. STA LB0 < INITIALISATION DE LA LONGUEUR DU < PREMIER BRAS DE LA SPIRALE. < < PARCOURS D'UN BRAS : < SPMOY1: EQU $ LA LB0 STA LB < LONGUEUR DU BRAS COURANT. < < TRAITEMENT DU POINT COURANT : < SPMOY2: EQU $ IC NP < COMPTAGE DES POINTS TRAITES : LA NP CP NPM < FINI ??? JG SPMOY3 < OUI... LA XS < NON : JAL SPMOY4 < LE POINT EST HORS-ECRAN... CPI NPOLM1 JG SPMOY4 < HORS-ECRAN... LA YS JAL SPMOY4 < HORS-ECRAN... CPI NLIGM1 JG SPMOY4 < HORS-ECRAN... LAI NIVMAX BSR ASPRPS < TRACE DU POINT (XS,YS) COURANT... SPMOY4: EQU $ LA XS AD DELTAX < CHANGEMENT DE STA XS LA YS AD DELTAY < POINT COURANT (XS,YS). STA YS DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE : JG SPMOY2 < OK, IL EN RESTE... CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER < LA LONGUEUR COURANTE DES BRANCHES ??? JNE SPMOY5 < NON (DX#0) ... IC LB0 < OUI (DX=0) ... SPMOY5: EQU $ LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE < (0,-1,1,0)... STA DELTAX < DELTAX=-DELTAY, STB DELTAY < DELTAY=DELTAX. JMP SPMOY1 < VERS LA BRANCHE SUIVANTE < < SORTIE DU MODULE DE TRACE : < SPMOY3: EQU $ PLR A,B,X,Y LR Y,A CPI XX1 < EST-CE FINI ??? JL SPU20 < NON... < < OUI, FIN DE L'IMAGE COURANTE... < IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... SPU1: EQU $ < < < C O M P O S A N T E E N ' V ' E T ' W ' : < < SPV: EQU $ SPW: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ BSR ASP2 < ACCES AU PREMIER CARACTERE. MP C10 STB FWORK BSR ASP2 < ACCES AU DEUXIEME CARACTERE. AD FWORK MP C10 STB FWORK BSR ASP2 < ACCES AU TROISIEME CARACTERE. AD FWORK IF NLIGM1-NPOLM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 CPI NLIGM1?NPOLM1 JG SP22 < ERREUR !!! RSR SP2: EQU $ LBY &ACBUF ADRI 1,X < POUR LE CARACTERE SUIVANT... ADRI -"0",A < CONVERSION... CPI " "-"0" JNE SP21 LAI 0 < " "="0"... SP21: EQU $ JAL SP22 CPI BASE10 JL SP23 SP22: EQU $ QUIT 1 SP23: EQU $ RSR < < < A C C E S A ' L X Y ' : < < SPRXY: EQU $ PSR A,B,X LA ALXY ADR Y,A < Y=INDEX D'ACCES. LBI LXY-ZERO LXI 1 RCDA SPXY1: EQU $ PLR A,B,X RSR SPWXY: EQU $ STA LXY < A=ARGUMENT D'APPEL... PSR A,B,X LA ALXY ADR Y,A < Y=INDEX D'ACCES. LBI LXY-ZERO LXI 1 WCDA ADRI 1,Y JMP SPXY1 < < < R E C U P E R A T I O N D E S C O O R D O N N E E S : < < SP3: EQU $ BSR ASPRXY LA LXY < LXY=(Y,X), LBI 0 SCLD MKY=0 < B=COORDONNEE 'Y', SLRS MKY=0 < A=COORDONNEE 'X'. RSR :F :F < <<'SIOC CARTE XY 2' DF'SIOC CARTE XY 3' ED'SIOC CARTE XY 3' IN0 PAGE IDP "SIOC CARTE XY 3" < < < E N T R E E A P A R T I R D E C A R T E S X Y 3 : < ( L I S T E ( X , Y , C ) ) < < < FORMAT : < ON TROUVE UN PAQUET CONTENANT 'XX1' < TRIPLET (X(I),Y(I),C(I)) CHAQUE NOMBRE < ETANT CODE SUR 'XX2' CHIFFRES (EN ENTIER). < < FONCTION : < TRACE LA COURBE DONNEE SOUS LA < FORME DE 2 LISTE (X(I)) ET (Y(I)), < SACHANT QUE CHAQUE POINT EST REPRESENTE < PAR UN PAVE (SPIRALE) DE SURFACE < PROPORTIONNELLE AU RAYON DE COURBURE. < < < ARGUMENT : < A0000=CONSTANTE DE PROPORTIONNALITE POUR < CALCULER LE RAYON DE COURBURE. A0:: VAL 0 < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: EQU BUFIN < BUFFER DES CARTE, IF STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR% IF ATTENTION : ERREUR DE RECOUVREMENT !!! XWOR%: VAL 0 ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. DEMCR: BYTE '0A;'00 < LECTURE DES CARTE. WORD CBUF-ZERO*NOCMO WORD LCBUF XX1:: VAL 101 < LONGUEUR DES LISTES DE COORDONNEES, XX2:: VAL 3 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. XX3:: VAL 3 < NOMBRE DE VALEURS PAR TRIPLET. XX4:: VAL XX2*XX3 < NOMBRE DE CHIFFRES PAR TRIPLET. LXY: EQU DXDU+0 < MOT COURANT DE 'LXY'. C10: WORD BASE10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 < < DONNEES DE TRACE DES SPIRALES : < LB0: EQU DYDU+1 < LONGUEUR DU BRAS COURANT DE LA SPIRALE. LB: EQU DYDV+0 < NOMBRE DE POINTS ENCORE A TRAITER < SUR LE BRAS COURANT DE LA SPIRALE. NP: EQU DYDV+1 < NOMBRE DE POINTS DEJA TRAITES, NPM: EQU DZDU+0 < NOMBRE DE POINTS A TRAITER. DELTAX: EQU DZDU+1 < PAS D'INCREMENTATION DE X, DELTAY: EQU DZDV+0 < PAS D'INCREMENTATION DE Y. PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ < < NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0... < LYI 0 < INDEX DE 'LXY'. LXI LCBUF/XX2*XX2 < < ITERATION SUR LES POINTS : < SPU5: EQU $ BSR ASP1 < DECODAGE DECIMAL, STA XS < COORDONNEE X(I), BSR ASP1 AD ALIGM1 NGR A,A STA YS < COORDONNEE Y(I), BSR ASP1 FLT < COURBURE(I). FST FWORK PSR X LXI A0 BSR ASPCT < ACCES A LA CONSTANTE 'A0000', PLR X FDV FWORK < CE QUI DONNE LE RAYON DE COURBURE < A UNE CONSTANTE MULTIPLICATIVE PRES... BSR AROND STA NPM < D'OU LA TAILLE DES SPIRALES... < < TRACE D'UNE SPIRALE : < SPMOY: EQU $ PSR A,B,X,Y STZ NP < NP=NOMBRE DE POINTS TRAITES. LAI 1 STA DELTAX < DELTAX <-- +1, STZ DELTAY < DELTAY <-- 0. STA LB0 < INITIALISATION DE LA LONGUEUR DU < PREMIER BRAS DE LA SPIRALE. < < PARCOURS D'UN BRAS : < SPMOY1: EQU $ LA LB0 STA LB < LONGUEUR DU BRAS COURANT. < < TRAITEMENT DU POINT COURANT : < SPMOY2: EQU $ IC NP < COMPTAGE DES POINTS TRAITES : LA NP CP NPM < FINI ??? JG SPMOY3 < OUI... LA XS < NON : JAL SPMOY4 < LE POINT EST HORS-ECRAN... CPI NPOLM1 JG SPMOY4 < HORS-ECRAN... LA YS JAL SPMOY4 < HORS-ECRAN... CPI NLIGM1 JG SPMOY4 < HORS-ECRAN... LAI NIVMAX BSR ASPRPS < TRACE DU POINT (XS,YS) COURANT... SPMOY4: EQU $ LA XS AD DELTAX < CHANGEMENT DE STA XS LA YS AD DELTAY < POINT COURANT (XS,YS). STA YS DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE : JG SPMOY2 < OK, IL EN RESTE... CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER < LA LONGUEUR COURANTE DES BRANCHES ??? JNE SPMOY5 < NON (DX#0) ... IC LB0 < OUI (DX=0) ... SPMOY5: EQU $ LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE < (0,-1,1,0)... STA DELTAX < DELTAX=-DELTAY, STB DELTAY < DELTAY=DELTAX. JMP SPMOY1 < VERS LA BRANCHE SUIVANTE < < SORTIE DU MODULE DE TRACE : < SPMOY3: EQU $ PLR A,B,X,Y ADRI 1,Y < AU TRIPLET SUIVANT... LR Y,A CPI XX1 < EST-CE FINI ??? JNE SPU5 < NON, ON ITERE... < < OUI, FIN DE L'IMAGE COURANTE... < SPU30: EQU $ IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... SPU1: EQU $ < < < C O M P O S A N T E E N ' V ' E T ' W ' : < < SPV: EQU $ SPW: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ BSR ASP2 < ACCES AU PREMIER CARACTERE. MP C10 STB FWORK BSR ASP2 < ACCES AU DEUXIEME CARACTERE. AD FWORK MP C10 STB FWORK BSR ASP2 < ACCES AU TROISIEME CARACTERE. AD FWORK IF NLIGM1-NPOLM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 CPI NLIGM1?NPOLM1 JG SP22 < ERREUR !!! RSR < < < A C C E S A U N C A R A C T E R E : < < SP2: EQU $ LR X,A CPI LCBUF/XX2*XX2 < FAUT-IL LIRE UNE CARTE ??? JL SP24 < NON... SP25: EQU $ LAD DEMCR < OUI : SVC 0 < LECTURE D'UNE CARTE... JE SP24 < OK... A NOTER : (X)=0 !!! QUIT 1 < !ASSIGN ??? JMP SP25 < ET ON RETENTE... SP24: EQU $ LBY &ACBUF ADRI 1,X < POUR LE CARACTERE SUIVANT... ADRI -"0",A < CONVERSION... CPI " "-"0" JNE SP21 LAI 0 < " "="0"... SP21: EQU $ JAL SP22 CPI BASE10 JL SP23 SP22: EQU $ QUIT 1 SP23: EQU $ RSR :F :F < <<'SIOC CARTE XY 3' DF'SIOC CARTE XY 4' ED'SIOC CARTE XY 4' IN0 PAGE IDP "SIOC CARTE XY 4" < < < E N T R E E A P A R T I R D E C A R T E S X Y 4 : < ( L I S T E ( X , Y , C ) ) < < < FORMAT : < ON TROUVE UN PAQUET DE CARTE CONTENANT < UN NOMBRE VARIABLE DE TRIPLETS (X(I),Y(I),P(I)) < X(I) ET Y(I) ETANT DES COORDONNEES DANS LE < SEGMENT (0,255), ET P(I) UN ORDRE DE TRACE : < P(I)=0 : ARRET D'UNE CHAINE DE SEGMENTS, < 1 : DEBUT D'UNE NOUVELLE CHAINE, < 2 : FIN DE L'IMAGE COURANTE, < 3 : FIN DE LA SUITE D'IMAGE. < X(I) ET Y(I) SONT CODES SUR XX2 CHIFFRES, < P(I) SUR XX3 CHIFFRES, ET IL Y A XX4 TRIPLETS < PAR CARTE. < < FONCTION : < TRACE LE MAILLAGE DONNE PAR UNE < SUITE DE TRIPLETS DEFINISSANT UNE < SUITE DE CHAINES DE SEGMENTS. < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: EQU BUFIN < BUFFER DES CARTE, IF STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR% IF ATTENTION : ERREUR DE RECOUVREMENT !!! XWOR%: VAL 0 ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. DEMCR: BYTE '0A;'00 < LECTURE DES CARTE. WORD CBUF-ZERO*NOCMO WORD LCBUF XX2:: VAL 3 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. XX3:: VAL 2 < NOMBRE DE CHIFFRES DEFINISSANT LE CODE < P(I) DE LA "PLUME", DONT LES VALEURS < POSSIBLES SONT : YY0:: VAL 0 < ARRET D'UNE CHAINE, YY1:: VAL 1 < DEBUT D'UNE CHAINE, YY2:: VAL 2 < FIN D'UNE IMAGE, YY3:: VAL 3 < FIN D'UNE SUITE D'IMAGES. XX4:: VAL 10 < NOMBRE DE TRIPLETS PAR CARTE. XX5:: VAL XX2+XX2+XX3*XX4 < NOMBRE DE CARACTERES PAR CARTE. IF LCBUF-XX5,,XWOR%,XWOR% IF 'XX5' EST MAUVAIS !!! XWOR%: VAL 0 C10: WORD BASE10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 PREM: WORD 0 < 0 : ON N'A PAS RENCONTRE LE PREMIER < TRIPLET, < 1 : DEJA RENCONTRE... ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 < < DONNEES DE L'INTERPOLATION : < ENTFLO: WORD 0 < MOT INUTILISE, ENTMOD: WORD '0188 < MODE DE TRACE 'SBT' ANTI-ALIASING, ENTYV1: WORD 0 < SEGMENT VIDEO, ENTXV1: WORD 0 ENTYV2: WORD 0 ENTXV2: WORD 0 ENTYG1: WORD 0 < SEGMENT GRAPHIQUE. ENTXG1: WORD 0 ENTYG2: WORD 0 ENTXG2: WORD 0 LENT:: VAL $-ENTFLO < LONGUEUR DE L'EN-TETE. DEMINT: WORD TVDKU < DEMANDE D'INTERPOLATION ANTI-ALIASING. WORD ENTFLO-ZERO*NOCMO WORD LENT*NOCMO WORD 0 PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ < < NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0... < LXI XX5 < INDEX COURANT DES CARTE... STZ PREM < PAS ENCORE DE PREMIER TRIPLET... < < BOUCLE DE RECUPERATION D'UN TRIPLET : < SPU10: EQU $ LYI 0 < MODE "LECTURE X OU Y"... BSR ASP1 STA XS < RECUPERATION DE X(I), BSR ASP1 STA YS < RECUPERATION DE Y(I), LYI 1 < MODE "LECTURE P"... BSR ASP1 < < AIGUILLAGE : < CPZ PREM < LE PREMIER TRIPLET A-T'IL ETE RENCONTRE ? JNE SPU14 < OUI... IC PREM < NON, C'EST DONC LUI... JMP SPU13 < ON FAIT COMME SI ON AVAIT RECU P(I)=YY0, < SANS LE VERIFIER... SPU14: EQU $ CPI YY2 JE SPU30 < C'EST FINI... CPI YY3 JE SPU30 < C'EST FINI... CPI YY1 JE SPU12 < CAS D'UN CHAINAGE DE SEGMENT... CPI YY0 JE SPU13 < CAS D'UN DEBUT DE CHAINE... QUIT 1 < ?!??!??! < < CAS DU DEBUT DE CHAINE : < SPU13: EQU $ LA XS < INITIALISATION DE LA CHAINE... STA ENTXG1 LA YS STA ENTYG1 JMP SPU10 < VERS LE TRIPLET SUIVANT... < < CAS D'UN SEGMENT DANS UNE CHAINE : < SPU12: EQU $ LA XS STA ENTXG2 LA YS STA ENTYG2 PSR X LAD DEMINT SVC 0 < TRACE ANTI-ALIASING DU SEGMENT COURANT... PLR X LA ENTXG2 < ET CHAINAGE... STA ENTXG1 LA ENTYG2 STA ENTYG1 JMP SPU10 < VERS LE TRIPLET SUIVANT... < < OUI, FIN DE L'IMAGE COURANTE... < SPU30: EQU $ IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... SPU1: EQU $ < < < C O M P O S A N T E E N ' V ' E T ' W ' : < < SPV: EQU $ SPW: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ BSR ASP2 < ACCES AU PREMIER CARACTERE. MP C10 STB FWORK BSR ASP2 < ACCES AU DEUXIEME CARACTERE. AD FWORK CPZR Y < QUEL EST LE MODE ??? JNE SP11 < MODE "LECTURE P"... MP C10 STB FWORK BSR ASP2 < ACCES AU TROISIEME CARACTERE. AD FWORK SLLS DEDX?DEDY < CONVERSION AU FORMAT VISU... SP11: EQU $ RSR < < < A C C E S A U N C A R A C T E R E : < < SP2: EQU $ LR X,A CPI XX5 < FAUT-IL LIRE UNE CARTE ??? JL SP24 < NON... SP25: EQU $ LAD DEMCR < OUI : SVC 0 < LECTURE D'UNE CARTE... JE SP24 < OK... A NOTER : (X)=0 !!! QUIT 1 < !ASSIGN ??? JMP SP25 < ET ON RETENTE... SP24: EQU $ LBY &ACBUF ADRI 1,X < POUR LE CARACTERE SUIVANT... ADRI -"0",A < CONVERSION... CPI " "-"0" JNE SP21 LAI 0 < " "="0"... SP21: EQU $ JAL SP22 CPI BASE10 JL SP23 SP22: EQU $ QUIT 1 SP23: EQU $ RSR :F :F < <<'SIOC CARTE XY 4' DF'SIOC CARTE XY 5' ED'SIOC CARTE XY 5' IN0 PAGE IDP "SIOC CARTE XY 5" < < < E N T R E E A P A R T I R D E C A R T E S X Y 5 : < ( L I S T E ( X , Y , C ) ) < < < FORMAT : < ON TROUVE UN PAQUET DE CARTE CONTENANT < UN NOMBRE VARIABLE DE TRIPLETS (X(I),Y(I),P(I)) < X(I) ET Y(I) ETANT DES COORDONNEES DANS LE < SEGMENT (0,255), ET P(I) UN ORDRE DE TRACE : < P(I)=0 : ARRET D'UNE CHAINE DE SEGMENTS, < 1 : DEBUT D'UNE NOUVELLE CHAINE, < 2 : FIN DE L'IMAGE COURANTE, < 3 : FIN DE LA SUITE D'IMAGE. < X(I) ET Y(I) SONT CODES SUR XX2 CHIFFRES, < P(I) SUR XX3 CHIFFRES, ET IL Y A XX4 TRIPLETS < PAR CARTE. < < < BLOCAGE DES ENREGISTREMENTS : < ON BLOQUE 'XX6' CARTE PAR ENRE- < GISTREMENT SUR LA BANDE MAGNETIQUE. < < FONCTION : < TRACE LE MAILLAGE DONNE PAR UNE < SUITE DE TRIPLETS DEFINISSANT UNE < SUITE DE CHAINES DE SEGMENTS. < < < ASSIGNATIONS : < !ASSIGN A=DKU, < !ASSIGN B=MT1. < < < ARGUMENT : < A0000=CONSTANTE DE TRANSLATION DES COORDONNEES Y. A0:: VAL 0 < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: EQU IMAGE < BUFFER DES CARTE, KCARTE: WORD 0 < DECOMPTEUR DE DEBLOCAGE DES CARTE < DANS LE BUFFER BANDE MAGNETIQUE. ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. ACBUF0: WORD CBUF,X < ET POUR LE REINITIALISER... XX2:: VAL 3 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. XX3:: VAL 2 < NOMBRE DE CHIFFRES DEFINISSANT LE CODE < P(I) DE LA "PLUME", DONT LES VALEURS < POSSIBLES SONT : YY0:: VAL 0 < ARRET D'UNE CHAINE, YY1:: VAL 1 < DEBUT D'UNE CHAINE, YY2:: VAL 2 < FIN D'UNE IMAGE, YY3:: VAL 3 < FIN D'UNE SUITE D'IMAGES. XX4:: VAL 10 < NOMBRE DE TRIPLETS PAR CARTE. XX5:: VAL XX2+XX2+XX3*XX4 < NOMBRE DE CARACTERES PAR CARTE. IF LCBUF-XX5,,XWOR%,XWOR% IF 'XX5' EST MAUVAIS !!! XWOR%: VAL 0 XX6:: VAL 45 < FACTEUR DE BLOCAGE DES CARTE DANS LE < BUFFER DE LA BANDE MAGNETIQUE... DEMCR: BYTE '0B;'00 < LECTURE DES ENREGISTREMENTS. WORD CBUF-ZERO*NOCMO WORD LCBUF*XX6 WORD 0 C10: WORD BASE10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 PREM: WORD 0 < 0 : ON N'A PAS RENCONTRE LE PREMIER < TRIPLET, < 1 : DEJA RENCONTRE... ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 < < DONNEES DE L'INTERPOLATION : < ENTFLO: WORD 0 < MOT INUTILISE, ENTMOD: WORD '0188 < MODE DE TRACE 'SBT' ANTI-ALIASING, ENTYV1: WORD 0 < SEGMENT VIDEO, ENTXV1: WORD 0 ENTYV2: WORD 0 ENTXV2: WORD 0 ENTYG1: WORD 0 < SEGMENT GRAPHIQUE. ENTXG1: WORD 0 ENTYG2: WORD 0 ENTXG2: WORD 0 LENT:: VAL $-ENTFLO < LONGUEUR DE L'EN-TETE. DEMINT: WORD TVDKU < DEMANDE D'INTERPOLATION ANTI-ALIASING. WORD ENTFLO-ZERO*NOCMO WORD LENT*NOCMO WORD 0 PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ < < CLEAR DE L'IMAGE "CDAI" : < STZ XS SPU40: EQU $ STZ YS SPU41: EQU $ LAI 0 BSR ASPRPS < NIVEAU(XS,YS) <-- 0. IC YS LAI NPOLM1 CP YS JGE SPU41 < BALAYAGE D'UNE COLONNE, IC XS LAI NLIGM1 CP XS JGE SPU40 < CHANGEMENT DE COLONNE... < < NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0... < LXI XX5 < INDEX COURANT DES CARTE... STZ PREM < PAS ENCORE DE PREMIER TRIPLET... < < BOUCLE DE RECUPERATION D'UN TRIPLET : < SPU10: EQU $ LYI 0 < MODE "LECTURE X OU Y"... BSR ASP1 STA XS < RECUPERATION DE X(I), BSR ASP1 STA YS < RECUPERATION DE Y(I), PSR X LXI A0 BSR ASPCT < RECUPERATION DE 'A0000', BSR AROND < ET CONVERSION ENTIERE, AD YS < PUIS TRANSLATION STA YS < DE 'YS'... PLR X LYI 1 < MODE "LECTURE P"... BSR ASP1 < < AIGUILLAGE : < CPZ PREM < LE PREMIER TRIPLET A-T'IL ETE RENCONTRE ? JNE SPU14 < OUI... IC PREM < NON, C'EST DONC LUI... JMP SPU13 < ON FAIT COMME SI ON AVAIT RECU P(I)=YY0, < SANS LE VERIFIER... SPU14: EQU $ CPI YY2 JE SPU30 < C'EST FINI... CPI YY3 JE SPU30 < C'EST FINI... CPI YY1 JE SPU12 < CAS D'UN CHAINAGE DE SEGMENT... CPI YY0 JE SPU13 < CAS D'UN DEBUT DE CHAINE... QUIT 1 < ?!??!??! < < CAS DU DEBUT DE CHAINE : < SPU13: EQU $ LA XS < INITIALISATION DE LA CHAINE... STA ENTXG1 LA YS STA ENTYG1 JMP SPU10 < VERS LE TRIPLET SUIVANT... < < CAS D'UN SEGMENT DANS UNE CHAINE : < SPU12: EQU $ LA XS STA ENTXG2 LA YS STA ENTYG2 PSR X LAD DEMINT SVC 0 < TRACE ANTI-ALIASING DU SEGMENT COURANT... PLR X LA ENTXG2 < ET CHAINAGE... STA ENTXG1 LA ENTYG2 STA ENTYG1 JMP SPU10 < VERS LE TRIPLET SUIVANT... < < OUI, FIN DE L'IMAGE COURANTE... < SPU30: EQU $ STZ KCARTE < LA FIN DU BLOC COURANT EST IGNOREE... IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... SPU1: EQU $ < < < C O M P O S A N T E E N ' V ' E T ' W ' : < < SPV: EQU $ SPW: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ BSR ASP2 < ACCES AU PREMIER CARACTERE. MP C10 STB FWORK BSR ASP2 < ACCES AU DEUXIEME CARACTERE. AD FWORK CPZR Y < QUEL EST LE MODE ??? JNE SP11 < MODE "LECTURE P"... MP C10 STB FWORK BSR ASP2 < ACCES AU TROISIEME CARACTERE. AD FWORK SLLS DEDX?DEDY < CONVERSION AU FORMAT VISU... SP11: EQU $ RSR < < < A C C E S A U N C A R A C T E R E : < < SP2: EQU $ LR X,A CPI XX5 < FAUT-IL LIRE UNE CARTE ??? JL SP24 < NON... SP25: EQU $ LA ACBUF ADRI LCBUF/NOCMO,A STA ACBUF < PROGRESSION DU BUFFER CARTE DANS LE < BUFFER BANDE MAGNETIQUE... DC KCARTE < ALORS, FAUT-IL LIRE UN NOUVEL < ENREGISTREMENT ??? JGE SP28 < NON... LAI XX6-1 < OUI, (-1 A CAUSE DU 'DC' QUI MANQUE) STA KCARTE < REINITIALISATION DU FACTEUR DE DEBLOCAGE, LA ACBUF0 STA ACBUF < ET DU RELAI DU BUFFER CARTE... SP27: EQU $ LAD DEMCR < OUI : SVC 0 < LECTURE D'UNE CARTE... JE SP28 < OK... QUIT 1 < !ASSIGN ??? JMP SP27 < ET ON RETENTE... SP28: EQU $ LXI 0 < REINITIALISATION DE L'INDEX CARACTERE. SP24: EQU $ LBY &ACBUF ADRI 1,X < POUR LE CARACTERE SUIVANT... ANDI '0F < DECODAGE 'ASCI' OU 'EBCDIC', EN TENANT < COMPTE DE L'EQUIVALENCE ENTRE "SPACE" < ET LE CHIFFRE "0". CPI BASE10 JL SP23 QUIT 1 SP23: EQU $ RSR :F :F < <<'SIOC CARTE XY 5' DF'SIOC CARTE XY 6' ED'SIOC CARTE XY 6' IN0 PAGE IDP "SIOC CARTE XY 6" < < < E N T R E E A P A R T I R D E C A R T E S X Y 6 : < ( L I S T E ( X , Y ) ) < < < FORMAT : < ON TROUVE DANS L'ORDRE : < 1 - UN PREMIER PAQUET CONTENANT 'XX1' < COORDONNEES 'X' EN ENTIER SUR 'XX2' CHIFFRES. < 2 - UN DEUXIEME PAQUET CONTENANT 'XX1' < COORDONNEES 'Y' EN ENTIER SUR 'XX2' CHIFFRES. < < < FONCTION : < FAIT UN TRACE ANTI-ALIASING < DE LA CHAINES DE SEGMENTS ARGU- < MENT... < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: DZS LCBUF/NOCMO < BUFFER DES CARTE, ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. DEMCR: BYTE '0B;'00 < LECTURE DES CARTE. WORD CBUF-ZERO*NOCMO WORD LCBUF XX1:: VAL 101 < LONGUEUR DES LISTES DE COORDONNEES, XX2: VAL 3 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. ALXY: WORD TV2 < ADRESSE DE 'LXY' DANS 'CDAI'... LXY: WORD 0 < MOT COURANT DE 'LXY'. BLXY: WORD LXY C10: WORD 10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 ASPWXY: WORD SPWXY < ECRITURE DANS 'LXY', ASPRXY: WORD SPRXY < LECTURE DANS 'LXY'. < < DONNEES DE L'INTERPOLATION : < PREM: WORD 0 < 0 : CAS DU PREMIER POINT... ENTFLO: WORD 0 < MOT INUTILISE, ENTMOD: WORD '0188 < MODE DE TRACE 'SBT' ANTI-ALIASING, ENTYV1: WORD 0 < SEGMENT VIDEO, ENTXV1: WORD 0 ENTYV2: WORD 0 ENTXV2: WORD 0 ENTYG1: WORD 0 < SEGMENT GRAPHIQUE. ENTXG1: WORD 0 ENTYG2: WORD 0 ENTXG2: WORD 0 LENT:: VAL $-ENTFLO < LONGUEUR DE L'EN-TETE. DEMINT: WORD TVDKU < DEMANDE D'INTERPOLATION ANTI-ALIASING. WORD ENTFLO-ZERO*NOCMO WORD LENT*NOCMO WORD 0 PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ LA YR OR XR JANE SPU1 < AUTRES FOIS... < < CAS DE LA PREMIERE FOIS : < LYI 0 < INDEX DE 'LXY'. SPU2: EQU $ SPU4: EQU $ LAD DEMCR SVC 0 < LECTURE DE LA CARTE : JE SPU3 < OK... QUIT 1 < !ASSIGN ??? JMP SPU4 SPU3: EQU $ LXI 0 < INDEX DES CARACTERES CARTE. SPU5: EQU $ BSR ASP1 < DECODAGE DECIMAL, STA LXY BSR ASPWXY < ET STOCKAGE DE 'X'... ADRI 1,Y LR Y,A CPI XX1 < EST-CE FINI ??? JE SPU6 < OUI... LR X,A < NON, CPI LCBUF/XX2*XX2 < FAUT-IL LIRE UNE AUTRE CARTE ??? JL SPU5 < NON... JMP SPU2 < OUI... SPU6: EQU $ LYI 0 < INDEX DE 'LXY' : SPU12: EQU $ LAD DEMCR SVC 0 < LECTURE D'UNE CARTE 'Y'... LXI 0 < X=INDEX DES CARACTERES DE LA CARTE. SPU15: EQU $ BSR ASP1 < DECODAGE DECIMAL... STA YS BSR ASPRXY < RECUPERATION DE 'X', LA LXY STA XS LB YS CPZ PREM < EST-CE LE PREMIER POINT ??? JNE SPU24 < NON, ON VA TRACER UN SEGMENT... IC PREM < OUI, ON MEMORISE QU'AU COUP SUIVANT, < C'EST UN SEGMENT QUE L'ON TRACERA... STA ENTXG1 < MEMORISATION DU STB ENTYG1 < PREMIER POINT... JMP SPU20 < VERS LE POINT SUIVANT... SPU24: EQU $ STA ENTXG2 < MEMORISATION DU POINT COURANT, ET STB ENTYG2 < CHAINAGE AU POINT PRECEDENT... PSR A,X LAD DEMINT SVC 0 < TRACE ANTI-ALIASING... PLR A,X STA ENTXG1 < FUTUR PREMIER POINT STB ENTYG1 < D'UN SEGMENT... SPU20: EQU $ ADRI 1,Y LR Y,A CPI XX1 < EST-CE FINI ??? JE SPU16 < OUI... LR X,A < NON, CPI LCBUF/XX2*XX2 < FAUT-IL CHANGER DE CARTE ??? JL SPU15 < NON... JMP SPU12 < OUI... SPU16: EQU $ IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... < < CAS DES AUTRES FOIS : < SPU1: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ BSR ASP2 < ACCES AU PREMIER CARACTERE. MP C10 STB FWORK BSR ASP2 < ACCES AU DEUXIEME CARACTERE. AD FWORK MP C10 STB FWORK BSR ASP2 < ACCES AU TROISIEME CARACTERE. AD FWORK IF NLIGM1-NPOLM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 CPI NLIGM1?NPOLM1 JLE SP11 < OK... QUIT 1 SP11: EQU $ SLLS DEDX?DEDY < MISE AU FORMAT VISU... RSR SP2: EQU $ LBY &ACBUF ADRI 1,X < POUR LE CARACTERE SUIVANT... ADRI -"0",A < CONVERSION... CPI " "-"0" JNE SP21 LAI 0 < " "="0"... SP21: EQU $ JAL SP22 CPI BASE10 JL SP23 SP22: EQU $ QUIT 1 SP23: EQU $ RSR < < < A C C E S A ' L X Y ' : < < SPRXY: EQU $ PSR A,X LA ALXY ADR Y,A < Y=INDEX D'ACCES. LB BLXY LXI 1 RCDA PLR A,X RSR SPWXY: EQU $ PSR A,X LA ALXY ADR Y,A < Y=INDEX D'ACCES. LB BLXY LXI 1 WCDA PLR A,X RSR < < < C O M P O S A N T E ' V ' : < < SPV: EQU $ FLD F0 RSR < < < C O M P O S A N T E ' W ' : < < SPW: EQU $ FLD F0 RSR :F :F < <<'SIOC CARTE XY 6' DF'SIOC CARTE XY 7' ED'SIOC CARTE XY 7' IN0 PAGE IDP "SIOC CARTE XY 7" < < < E N T R E E A P A R T I R D E C A R T E S X Y 7 : < < < FONCTION : < CE MODULE PERMET L'ENTREE DE < CHAMPS VECTORIELS DONT ON SE < DONNE POUR CHAQUE POINT LES < 3 COMPOSANTES. < < < FORMAT : < ON TROUVE SUR CHAQUE CARTE UNE LISTE DE < 'XX1' COORDONEES Y CODEES SUR 'XX2' CHIFFRES. < < < ARGUMENT : < A0000=FACTEUR D'ECHELLE DES VECTEURS. A0:: VAL 0 < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: EQU BUFIN < BUFFER DES CARTE, IF STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR% IF ATTENTION : ERREUR DE RECOUVREMENT !!! XWOR%: VAL 0 ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. DEMCR: BYTE '0B;'00 < LECTURE DES CARTE. WORD CBUF-ZERO*NOCMO WORD LCBUF XX1:: VAL 16 < LONGUEUR DES LISTES DE COORDONNEES, XX2:: VAL 5 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. XX4:: VAL 0 < INDEX DU PREMIER OCTET DU PREMIER < NOMBRE... C10: WORD 10 < CONSTANTE DE CONVERSION DECIMALE. ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 SIGNE: WORD 0 < 0 : SIGNE "+", < 1 : SIGNE "-". CUMUL: WORD 0 < CUMUL DES NOMBRES DECIMAUX. WORK: WORD 0 < ZONE DE TRAVAIL. COMPRE: FLOAT 0 < CONSTANTE DE PROPORTION... INDEX: WORD 0 < INDEX COURANT DU BUFFER. KIN7: WORD -1 < COMPTAGE DES ENTREES... PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ IC KIN7 JG SPU1 < CAS DES AUTRES FOIS... < < CAS DE LA PREMIERE FOIS : < LXI A0 BSR ASPCT FST COMPRE < FACTEUR D'ECHELLE, LXI XX1*XX2 STX INDEX < ET INDEX D'EXTRACTION DES CARTE... < < CAS DES AUTRES ENTREES : < SPU1: EQU $ BSR ASP1 < ENTREE DE LA COORDONNEE SUR 'OX', FMP COMPRE < MISE A L'ECHELLE... RSR < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ BSR ASP1 < ENTREE DE LA COORDONNEE SUR 'OY', FMP COMPRE < MISE A L'ECHELLE.. RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ BSR ASP1 < ENTREE DE LA COORDONNEE SUR 'OZ', FMP COMPRE < MISE A L'ECHELLE... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ LA INDEX CPI XX1*XX2 < EST-ON AU BOUT DU BUFFER ??? JL SP13 < NON... SP15: EQU $ LAD DEMCR < OUI, SVC 0 < ON LIT UN ENREGISTREMENT... JE SP14 < OK... QUIT 1 < ERREUR : SUREMENT "!ASSIGN"... JMP SP15 < ET ON ITERE... SP14: EQU $ LAI XX4 < ET ON REINITIALISE L'INDEX... SP13: EQU $ LR A,X < (X)=INDEX DU BUFFER. STZ SIGNE < "+" A PRIORI... STZ CUMUL PSR Y LYI XX2 < Y=NOMBRE DE CHIFFRES A DECODER, XR X,Y SP11: EQU $ XR X,Y BSR ASP2 < ACCES A UN CHIFFRE ET CUMUL... XR X,Y JDX SP11 < AU SUIVANT... XR X,Y PLR Y LA CUMUL CPZ SIGNE < ALORS POSITIF OU NEGATIF ??? JE SP12 < POSITIF... NGR A,A < NEGATIF... SP12: EQU $ FLT < CONVERSION FLOTTANTE, STX INDEX < ET MEMORISATION DE L'INDEX... RSR < < < A C C E S A U N C A R A C T E R E : < < SP2: EQU $ LBY &ACBUF < A=UN CARACTERE, RBT 8 < EFFACEMENT DE LA PARITE... ADRI 1,X < ET PASSAGE AU SUIVANT... CPI " " < EST-CE LE 'SPACE' ??? JNE SP22 < NON... LAI "0" < OUI, IL VAUT "0"... SP22: EQU $ CPI "0" < EST-CE UN CHIFFRE ??? JL SP21 < NON... CPI "9" < EST-UNE CHIFFRE ??? JG SP21 < NON... < < CAS DES CHIFFRES : < ADRI -"0",A < TRANSLATION, STA WORK LA CUMUL MP C10 LR B,A AD WORK STA CUMUL < ET CUMUL... SP23: EQU $ RSR < < CAS DES AUTRES CARACTERES : < SP21: EQU $ STZ SIGNE < "+" A PRIORI... CPI "+" JE SP23 < CAS DE "+" : SIGNE=0. IC SIGNE < "-" A PRIORI... CPI "-" JE SP23 < CAS DE "-" : SIGNE=1. QUIT 1 < ???!?!?! JMP SP23 :F :F < <<'SIOC CARTE XY 7' DF'SIOC CARTE XY 8' ED'SIOC CARTE XY 8' IN0 PAGE IDP "SIOC CARTE XY 8" < < < E N T R E E A P A R T I R D E C A R T E S X Y 8 : < ( L I S T E ( X , Y , N ) ) < < < FORMAT : < ON TROUVE UN PAQUET DE CARTE CONTENANT < UN NOMBRE VARIABLE DE TRIPLETS (X(I),Y(I),N(I)) < X(I) ET Y(I) ETANT DES COORDONNEES DANS LE < SEGMENT (0,255), ET N(I) UN NIVEAU DE GRIS. < X(I) ET Y(I) SONT CODES SUR XX2 CHIFFRES, < N(I) SUR XX3 CHIFFRES, ET IL Y A XX4 TRIPLETS < PAR CARTE. < < < BLOCAGE DES ENREGISTREMENTS : < ON BLOQUE 'XX6' CARTE PAR ENRE- < GISTREMENT SUR LA BANDE MAGNETIQUE, < CE QUI FAIT 'NOCT' OCTETS INFERIEUR < OU EGAL A LCBUF*XX6... < < FONCTION : < TRACE LE NUAGE DE POINTS DEFINI < PAR LES TRIPLETS (X,Y,N) ; LA COORDONNEE < X=-999 INDIQUE LA FIN D'UNE IMAGE, < ET LES NIVEAUX SUPERIEURS A 7 < IGNORES... < < < ASSIGNATIONS : < !ASSIGN A=DKU, < !ASSIGN B=MT1. < < < ARGUMENTS : A0:: VAL 0 < INDICATEUR DE PREMIERE FOIS : < =0 : PREMIERE FOIS, < #0 : FOIS SUIVANTES. < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: EQU IMAGE < BUFFER DES CARTE, NOCT:: VAL 1000 < 1000 OCTETS PAR ENREGISTREMENT. KCAR: WORD 0 < POUR DETECTER LA DERNIERE CARTE INCOM- < PLETE... KCARTE: WORD 0 < DECOMPTEUR DE DEBLOCAGE DES CARTE < DANS LE BUFFER BANDE MAGNETIQUE. ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. ACBUF0: WORD CBUF,X < ET POUR LE REINITIALISER... XX2:: VAL 4 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. XX3:: VAL 2 < NOMBRE DE CHIFFRES DEFINISSANT LE NIVEAU. XX4:: VAL 8 < NOMBRE DE TRIPLETS PAR CARTE. XX5:: VAL XX2+XX2+XX3*XX4 < NOMBRE DE CARACTERES PAR CARTE. IF LCBUF-XX5,,XWOR%,XWOR% IF 'XX5' EST MAUVAIS !!! XWOR%: VAL 0 XX6:: VAL 13 < FACTEUR DE BLOCAGE DES CARTE DANS LE < BUFFER DE LA BANDE MAGNETIQUE... DEMCR: BYTE '0B;'00 < LECTURE DES ENREGISTREMENTS. WORD CBUF-ZERO*NOCMO WORD LCBUF*XX6 WORD 0 C10: WORD BASE10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 SXX5: WORD XX5 < SAUVEGARDE DU REGISTRE 'X' D'UNE FOIS < A L'AUTRE... ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 FIN: WORD -999 < ABSCISSE DE FIN D'IMAGE... SIGNE: WORD 0 < 0 : SIGNE "+", < 1 : SIGNE "-". < < DONNEES DE PASSAGE DES ARGUMENTS < DE DEBLOCAGE D'UNE FOIS A L'AUTRE : < NVPDK:: VAL '0C < ACCES A LA ZONE SCRATCH, LBUFDK:: VAL 128 < LONGUEUR DE LA ZONE DE SAUVEGARDE, SECTDK:: VAL 0 < NUMERO DU SECTEUR DE SAUVEGARDE. DEMWDK: BYTE NVPDK;'02 < SAUVEGARDE DES DONNEES. WORD FLOC-ZERO*NOCMO WORD LBUFDK*NOCMO WORD SECTDK DEMRDK: BYTE NVPDK;'00 < RESTAURATION DES DONNEES. WORD FLOC-ZERO*NOCMO WORD LBUFDK*NOCMO WORD SECTDK PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ < < NOTA : ON NE PASSE ICI QU'AVEC XR=YR=0... < LXI A0 BSR ASPCT FCAZ < EST-CE LA PREMIERE FOIS ??? JE SPU40 < OUI, RIEN A RESTAURER... LAD DEMRDK < NON, SVC 0 < ON RESTAURE LES DONNEES DE DEBLOCAGE... SPU40: EQU $ LX SXX5 < X=INDEX COURANT DES CARTE... < < BOUCLE DE RECUPERATION D'UN TRIPLET : < SPU10: EQU $ LYI 0 < MODE "LECTURE X OU Y"... BSR ASP1 STA XS < RECUPERATION DE X(I), BSR ASP1 STA YS < RECUPERATION DE Y(I), LYI 1 < MODE "LECTURE P"... BSR ASP1 < < RECUPERATION DU NIVEAU : < LR A,B < A=B=NIVEAU, < < TEST DE FIN D'IMAGE : < LA XS < ABSCISSE : CP FIN < FIN ??? JE SPU30 < OUI, FINI... LR B,A < A=NIVEAU : CPI NIVMAX < FAUT-IL L'IGNORER ??? JG SPU10 < OUI... < < NON, TRACE DU POINT : < BSR ASPRPS < TRACE DE (XS,YS) AVEC LE NIVEAU (A). JMP SPU10 < AU TRIPLET SUIVANT... < < OUI, FIN DE L'IMAGE COURANTE... < SPU30: EQU $ STX SXX5 < SAUVEGARDE DE L'INDEX CARTE... LAD DEMWDK SVC 0 < SAUVEGARDE DES DONNEES DE DEBLOCAGE... IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... SPU1: EQU $ < < < C O M P O S A N T E E N ' V ' E T ' W ' : < < SPV: EQU $ SPW: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ STZ SIGNE < "+" A PIORI, CPZR Y < COORDONNEE OU NIVEAU ??? JNE SP13 < NIVEAU, PAS DE SIGNE... BSR ASP2 < COORDONNE : ENTREE DU SIGNE... SP13: EQU $ BSR ASP2 < ACCES AU PREMIER CARACTERE. MP C10 STB FWORK BSR ASP2 < ACCES AU DEUXIEME CARACTERE. AD FWORK CPZR Y < QUEL EST LE MODE ??? JNE SP11 < MODE "LECTURE P"... MP C10 STB FWORK BSR ASP2 < ACCES AU TROISIEME CARACTERE. AD FWORK CPZ SIGNE < POSITIF OU NEGATIF ??? JE SP12 < POSITIF... NGR A,A < NEGATIF... SP12: EQU $ SP11: EQU $ RSR < < < A C C E S A U N C A R A C T E R E : < < SP2: EQU $ DC KCAR JGE SP22 LRM A < CAS DE LA DERNIERE CARTE INCOMPLETE : WORD NOCT-1 STA KCAR JMP SP25 SP22: EQU $ LR X,A CPI XX5 < FAUT-IL LIRE UNE CARTE ??? JL SP24 < NON... SP25: EQU $ LA ACBUF ADRI LCBUF/NOCMO,A STA ACBUF < PROGRESSION DU BUFFER CARTE DANS LE < BUFFER BANDE MAGNETIQUE... DC KCARTE < ALORS, FAUT-IL LIRE UN NOUVEL < ENREGISTREMENT ??? JGE SP28 < NON... LAI XX6-1 < OUI, (-1 A CAUSE DU 'DC' QUI MANQUE) STA KCARTE < REINITIALISATION DU FACTEUR DE DEBLOCAGE, LA ACBUF0 STA ACBUF < ET DU RELAI DU BUFFER CARTE... SP27: EQU $ LAD DEMCR < OUI : SVC 0 < LECTURE D'UNE CARTE... JE SP28 < OK... QUIT 1 < !ASSIGN ??? JMP SP27 < ET ON RETENTE... SP28: EQU $ LXI 0 < REINITIALISATION DE L'INDEX CARACTERE. SP24: EQU $ LBY &ACBUF BITPAR:: VAL 8 RBT BITPAR < ELIMINATION PARITE... CPI " " < ESPACE OU "+" ??? JE SP21 < OUI... CPI "+" JE SP21 CPI "-" < "-" ??? JNE SP29 < NON, DONC CHIFFRE... IC SIGNE < CAS DU SIGNE "-"... JMP SP21 SP29: EQU $ ADRI 1,X < POUR LE CARACTERE SUIVANT... ANDI '0F < DECODAGE 'ASCI' OU 'EBCDIC', EN TENANT < COMPTE DE L'EQUIVALENCE ENTRE "SPACE" < ET LE CHIFFRE "0". CPI BASE10 JL SP23 QUIT 1 SP23: EQU $ RSR SP21: EQU $ LAI 0 < ON RENVOIE LE NUL... JMP SP29 < VERS L'INCREMENTATION DE L'INDEX... :F :F < <<'SIOC CARTE XY 8' DF'SIOC CARTE Y 1' ED'SIOC CARTE Y 1' IN0 PAGE IDP "SIOC CARTE Y 1" < < < E N T R E E A P A R T I R D E C A R T E S Y 1 : < ( L I S T E ( Y ) ) < < < FONCTION : < CE MODULE PERMET EN PARTICULIER < DE FAIRE LES VASES COMMUNICANTS... < < < FORMAT : < ON TROUVE SUR CHAQUE CARTE UNE LISTE DE < 'XX1' COORDONEES Y CODEES SUR 'XX2' CHIFFRES. < < < ARGUMENT : < A0000=FACTEUR DE COMPRESSION VERTICAL (ENVIRON 8...). A0:: VAL 0 < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: EQU BUFIN < BUFFER DES CARTE, IF STACK-BUFIN*NOCMO-LCBUF,,XWOR%,XWOR% IF ATTENTION : ERREUR DE RECOUVREMENT !!! XWOR%: VAL 0 ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. DEMCR: BYTE '0B;'00 < LECTURE DES CARTE. WORD CBUF-ZERO*NOCMO WORD LCBUF XX1:: VAL 6 < LONGUEUR DES LISTES DE COORDONNEES, XX2:: VAL 5 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. XX3:: VAL 2 < COULEUR CHOISIE POUR LA REPRESENTATION < DES NIVEAUX HORIZONTAUX. XX5:: VAL 1 < COULEUR DE REMPLISSAGE. XX6:: VAL 4 < COULEUR DES BORDS. XX7:: VAL 6 < COULEUR DU FOND (PERMET D'AIDER A LA < DETECTION DES CONTOURS...). XX4:: VAL 4 < INDEX DU PREMIER OCTET DU PREMIER < NOMBRE... C10: WORD 10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 SIGNE: WORD 0 < 0 : SIGNE "+", < 1 : SIGNE "-". CUMUL: WORD 0 < CUMUL DES NOMBRES DECIMAUX. WORK: WORD 0 < ZONE DE TRAVAIL. COMPRE: WORD 0 < CONSTANTE DE PROPORTION... MILIEU: WORD NLIG/2 < MILIEU DE L'ECRAN. MAXXS: WORD -1 < MAXIMUM DE 'XS' LORS DU BALAYAGE D'UNE < COLONNE. PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ LA YR OR XR JANE SPU1 < AUTRES FOIS... < < CAS DE LA PREMIERE FOIS : < LYI 0 < INDEX DES NOMBRE DECIMAUX. SPU2: EQU $ SPU4: EQU $ LAD DEMCR SVC 0 < LECTURE DE LA CARTE : JE SPU3 < OK... QUIT 1 < !ASSIGN ??? JMP SPU4 SPU3: EQU $ LXI A0 BSR ASPCT FIX STA COMPRE < CONSTANTE DE PROPORTION... STZ XS < ON COMMENCE A GAUCHE... LXI XX4 < INDEX DES CARACTERES CARTE... SPU5: EQU $ STZ MAXXS DC MAXXS < REINITIALISATION DE 'MAXXS'... BSR ASP1 < RECUPERATION DE YS. < < RECHERCHE D'UN BORD GAUCHE : < SPU8: EQU $ BSR ASPGPS < ACCES AU POINT (XS,YS) : IC XS < ET PASSAGE AU SUIVANT... JAE SPU8 < ON BOUCLE TANT QUE C'EST NOIR... SPU70: EQU $ BSR ASPGPS < ACCES AU POINT (XS,YS) : IC XS < ET PASSAGE AU SUIVANT... CPI XX7 < EST-ON SUR LE FOND ??? JE SPU70 < OUI, ON BOUCLE JUSQU'A TROUVER LE BORD < GAUCHE SUIVANT... CPI XX6 < NON, CE DOIT ETRE UN BORD... JE SPU71 < OUI... QUIT 1 < ??!??!?! SPU71: EQU $ < < BALAYAGE DES COLONNES JUSQU'AU BORD DROIT : < SPU6: EQU $ BSR ASPGPS < TEST DU POINT (XS,YS) : IC XS JANE SPU7 < ON S'ARRETE AU PREMIER NON NOIR, DC XS < RETOUR SUR LE POINT NOIR... LAI XX3 BSR ASPRPS < PAR CONTRE, ON COLORIE LES POINTS NOIRS. LA YS PSR A < < COLORIAGE D'UNE COLONNE : < SPU20: EQU $ IC YS BSR ASPGPS < ON VA REMPLIR LES POINTS EN-DESSOUS DU < BORD SUPERIEUR... CPI XX6 < EST-ON AU BORD (MAIS EN BAS) ??? JE SPU30 < C'EST FINI... JANE SPU20 < DEJA REMPLI, DESCENDONS EN COLONNE... LAI XX5 BSR ASPRPS < COLORIAGE DES POINTS PAR COLONNE EN 'XS'. < < COLORIAGE D'UNE LIGNE EN UN POINT < DE LA COLONNE COURANTE : < LA XS PSR A < SAVE 'XS'... SPU40: EQU $ DC XS < ON VA VERS LE BORD GAUCHE : BSR ASPGPS CPI XX6 < EST-ON AU BORD ??? JE SPU41 < (XS,YS) EST SUR LE BORD GAUCHE... LAI XX5 < NON, IL EST NOIR, BSR ASPRPS < ON LE COLORIE... JMP SPU40 < AU SUIVANT... SPU41: EQU $ PLR A STA XS < RETOUR A LA COLONNE SUIVANTE... PSR A SPU42: EQU $ IC XS < ON VA VERS LE BORD DROIT... BSR ASPGPS CPI XX6 < EST-ON AU BORD ??? JE SPU43 < (XS,YS) EST SUR LE BORD DROIT... LAI XX5 < NON, IL EST NOIR, BSR ASPRPS < ON LE COLORIE... JMP SPU42 < AU SUIVANT... SPU43: EQU $ LA XS CP MAXXS JL SPU60 STA MAXXS < RECHERCHE DE MAX(XS). SPU60: EQU $ PLR A STA XS < RETOUR A LA COLONNE COURANTE... JMP SPU20 < A LA COLONNE SUIVANTE... SPU30: EQU $ PLR A STA YS IC XS JMP SPU6 < AU POINT SUIVANT... SPU7: EQU $ LA MAXXS ADRI 1,A STA XS < ON REPART SUR LE MAX(XS)+1, AFIN DE NE < PAS AVOIR DE PROBLEME DE BALAYAGE... SPU61: EQU $ BSR ASPGPS IC XS CPI XX6 < EST-CE UN BORD ??? JE SPU61 < ELIMINATION DES POINTS DOUBLES (EN < EPAISSEUR) DU CONTOUR... DC XS ADRI 1,Y LR Y,A CPI XX1 < ENCORE ??? JL SPU5 < ET OUI... SPU16: EQU $ IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... < < CAS DES AUTRES FOIS : < SPU1: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ STZ SIGNE < "+" A PRIORI... STZ CUMUL PSR Y LYI XX2 < Y=NOMBRE DE CHIFFRES A DECODER, XR X,Y SP11: EQU $ XR X,Y BSR ASP2 < ACCES A UN CHIFFRE ET CUMUL... XR X,Y JDX SP11 < AU SUIVANT... XR X,Y PLR Y LA CUMUL CPZ SIGNE < ALORS POSITIF OU NEGATIF ??? JE SP12 < POSITIF... NGR A,A < NEGATIF... SP12: EQU $ SARD NBITMO DV COMPRE < COMPRESSION, AD MILIEU < TRANSLATION, AD ALIGM1 NGR A,A < INVERSION, STA YS < CE QUI DONNE 'YS'... RSR < < < A C C E S A U N C A R A C T E R E : < < SP2: EQU $ LBY &ACBUF < A=UN CARACTERE, ADRI 1,X < ET PASSAGE AU SUIVANT... CPI " " < EST-CE LE 'SPACE' ??? JNE SP22 < NON... LAI "0" < OUI, IL VAUT "0"... SP22: EQU $ CPI "0" < EST-CE UN CHIFFRE ??? JL SP21 < NON... CPI "9" < EST-UNE CHIFFRE ??? JG SP21 < NON... < < CAS DES CHIFFRES : < ADRI -"0",A < TRANSLATION, STA WORK LA CUMUL MP C10 LR B,A AD WORK STA CUMUL < ET CUMUL... SP23: EQU $ RSR < < CAS DES AUTRES CARACTERES : < SP21: EQU $ STZ SIGNE < "+" A PRIORI... CPI "+" JE SP23 < CAS DE "+" : SIGNE=0. IC SIGNE < "-" A PRIORI... CPI "-" JE SP23 < CAS DE "-" : SIGNE=1. QUIT 1 < ???!?!?! JMP SP23 < < < C O M P O S A N T E ' V ' : < < SPV: EQU $ FLD F0 RSR < < < C O M P O S A N T E ' W ' : < < SPW: EQU $ FLD F0 RSR :F :F < <<'SIOC CARTE Y 1' DF'SIOC CARTE Y 2' ED'SIOC CARTE Y 2' IN0 PAGE IDP "SIOC CARTE Y 2" < < < E N T R E E A P A R T I R D E C A R T E S Y 2 : < ( L I S T E ( Y ) ) < < < FORMAT : < ON TROUVE 'XX1' COORDONNEES 'Y' < CODEES EN ENTIER SUR 'XX2' CHIFFRES, < ET SEPARES PAR 'XX3' 'ESPACE'... < ON PEUT PAR EXEMPLE AINSI TRAITER < LES BANDES D'ADAM... < < < ARGUMENTS : A0000:: VAL 0 < FACTEUR D'ECHELLE 'Y', A0001:: VAL 1 < X MINIMUM, A0002:: VAL 2 < X MAXIMUM. A0003:: VAL 3 < TRANSLATION SUR 'Y'. A0004:: VAL 4 < ON TRACE UNE IMAGE SUR 'A0004'... < < LOCAL FLOC: EQU $ LCBUF:: VAL 80 < LONGUEUR DES CARTE. CBUF: DZS LCBUF/NOCMO < BUFFER DES CARTE, ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. DEMCR: BYTE '0B;'00 < LECTURE DES CARTE. WORD CBUF-ZERO*NOCMO WORD LCBUF XX1:: VAL 200 < LONGUEUR DES LISTES DE COORDONNEES, XX2: VAL 2 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. XX3:: VAL 1 < NOMBRE D'ESPACES DERRIERE CHAQUE < COORDONNEE 'Y'. C10: WORD 10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 XA0000: FLOAT 0 < FACTEUR D'ECHELLE SUR 'Y'. XA0001: WORD 0 < X MIMIMUM. XA0002: FLOAT 0 < FACTEUR D'ECHELLE SUR 'X'. COORXS: WORD 0 < COORDONNEE 'X' IMPLICITE COURANTE. TRANSY: WORD 0 < TRANSLATION SUR 'Y'. UNSURN: WORD 0 < ON TRACE UNE IMAGE SUR 'A0004'. PREM: WORD 0 < PREM=0 : PREMIERE IMAGE D'UNE SERIE... PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ LA YR OR XR JANE SPU1 < AUTRES FOIS... < < CAS DE LA PREMIERE FOIS : < STZ COORXS < INITIALISATION DES COORDONNEES 'X' < IMPLICITES. DC COORXS < (AFIN DE COMMENCER A 0) LXI A0000 BSR ASPCT FST XA0000 < FACTEUR D'ECHELLE SUR 'Y'. LXI A0001 BSR ASPCT FST XA0002 < TEMPORAIRE... (X MIN) BSR AROND STA XA0001 < VALEUR DU 'X' MIMIMUM. LXI A0002 BSR ASPCT FSB XA0002 < AMPLITUDE SUR 'X', FST XA0002 < TEMPORAIRE... LAI NPOLM1 ADRI 1,A FLT FDV XA0002 FST XA0002 < FACTEUR D'ECHELLE SUR 'X'. LXI A0003 BSR ASPCT BSR AROND STA TRANSY < TRANSLATION SUR 'Y'. LXI A0004 BSR ASPCT BSR AROND STA UNSURN < ON TRACE UNE IMAGE SUR 'A0004'... < < TRACE D'UNE SERIE D'IMAGE : < SPU40: EQU $ LYI 0 < INDEX GENERAL DES COORDONNEES. SPU12: EQU $ LAD DEMCR SVC 0 < LECTURE D'UNE CARTE 'Y'... JE SPU30 < OK... QUIT 1 < MANQUE !ASSIGN ??? JMP SPU12 < ON RETENTE... SPU30: EQU $ LXI 0 < X=INDEX DES CARACTERES DE LA CARTE. SPU15: EQU $ IC COORXS < PROGRESSION DES COORDONNEES IMPLICITES. BSR ASP1 < DECODAGE DECIMAL... CPZ PREM < EST-CE LA PREMIERE IMAGE ??? JNE SPU41 < NON, ON LA SAUTE... < < CAS DE LA PREMIERE IMAGE (ON LA TRACE) : < FLT FMP XA0000 < FACTEUR D'ECHELLE SUR 'Y', BSR AROND AD TRANSY < ON TRANSLATE 'Y'... AD ALIGM1 NGR A,A STA YS < COORDONNEE 'YS' : JAL SPU6 < HORS-ECRAN... CPI NLIGM1 JG SPU6 < HORS-ECRAN... LA COORXS < RECUPERATION DES 'X' IMPLICITES : SB XA0001 < REMISE A L'ORIGINE, FLT FMP XA0002 < FACTEUR D'ECHELLE SUR 'X' : BSR AROND STA XS < COORDONNEE 'XS' : JAL SPU6 < HORS-ECRAN... CPI NPOLM1 JG SPU6 < HORS-ECRAN... LAI NIVMAX BSR ASPRPS < FORCAGE DU POINT (XS,YS). SPU6: EQU $ SPU41: EQU $ ADRI 1,Y LR Y,A CPI XX1 < EST-CE FINI ??? JE SPU16 < OUI... LR X,A < NON, CPI LCBUF/XX2*XX2 < FAUT-IL CHANGER DE CARTE ??? JL SPU15 < NON... JMP SPU12 < OUI... SPU16: EQU $ IC PREM < CE N'EST PLUS LA PREMIERE IMAGE... DC UNSURN < EST-CE FINI ??? JG SPU40 < NON, MAIS ON NE TRACE PLUS RIEN... IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... < < CAS DES AUTRES FOIS : < SPU1: EQU $ FLD F0 < U=0... RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ BSR ASP2 < ACCES AU PREMIER CARACTERE. MP C10 STB FWORK BSR ASP2 < ACCES AU DEUXIEME CARACTERE. AD FWORK ADRI XX3,X < POUR LES 'SPACES'... SP11: EQU $ RSR SP2: EQU $ LBY &ACBUF ADRI 1,X < POUR LE CARACTERE SUIVANT... ADRI -"0",A < CONVERSION... CPI " "-"0" JNE SP21 LAI 0 < " "="0"... SP21: EQU $ JAL SP22 CPI BASE10 JL SP23 SP22: EQU $ QUIT 1 SP23: EQU $ RSR < < < C O M P O S A N T E ' V ' : < < SPV: EQU $ FLD F0 RSR < < < C O M P O S A N T E ' W ' : < < SPW: EQU $ FLD F0 RSR :F :F < <<'SIOC CARTE Y 2' DF'SIOC CARTE RASTER 2' ED'SIOC CARTE RASTER 2' IN0 PAGE IDP "SIOC CARTE RASTER 2" < < < E N T R E E C A R T E S R A S T E R 2 : < < < FONCTION : < CE MODULE LIT SUR L'UNITE '0B < DES NIVEAUX DE GRIS, LES STOCKE < DANS LE Z-BUFFER, ET EN FAIT LA < COORDONNEE 'W' : < U <-- (VARU), < V <-- (VARV), < W <-- (Z-BUFFER). < < < ARGUMENT : A0:: VAL 0 < TRANSLATION PRELIMINAIRE, ET A1:: VAL A0+1 < FACTEUR DE REDUCTION DES NIVEAUX DE GRIS. A2:: VAL A1+1 < MODULATION FINALE DE 'W'. A3:: VAL A2+1 < TRANSLATION SUR 'U', A4:: VAL A3+1 < TRANSLATION SUR 'V', A5:: VAL A4+1 < TRANSLATION SUR 'W'. A6:: VAL A5+1 < ADRESSE DU PREMIER BLOC SUR LA BANDE ; < SI CETTE ADRESSE EST FOURNIE NEGATIVE, < ALORS ON RECUPERE L'ADRESSE COURANTE < DANS LA 'BOX'... < < < L O C A L : LOCAL FLOC: EQU $ < < INDICATEUR DE PREMIER PASSAGE : < IPREM: WORD -1 < < DEFINITION ET ACCES AU BUFFER : < LCBUF:: VAL '800 < LONGUEUR EN OCTETS DU BUFFER, CBUF: EQU IMAGE < IL EST EN RECOUVREMENT AVEC 'IMAGE'... NVPMT:: VAL '0B < 'NVP' D'ACCES A 'MT1'... DEMADC: BYTE NVPMT;'05 < DEMANDE D'ACCES A L'ADRESSE COURANTE < DANS LA 'BOX'... DEMMT: BYTE NVPMT;'08 < LECTURE EN ACCES DIRECT DE LA BANDE : WORD CBUF-ZERO*2 WORD LCBUF ADMT: WORD 0 < ADRESSE COURANTE DE BLOC ('A6'). AXBUF: WORD CBUF,X < RELAI D'ACCES AU BUFFER, XBUF: WORD LCBUF < INDEX COURANT DU BUFFER, MAXBUF: WORD LCBUF < VALEUR COURANTE DE 'XBUF'. < < CONSTANTES : < C10: WORD 10 < CONVERSION DECIMALE. XA0: WORD 0 < COEFFICIENT 'A0'. XA1: WORD 0 < COEFFICIENT 'A1'. XFA2: FLOAT 0 < MODULATION DE 'W'. XFA3: FLOAT 0 < TRANSLATION SUR 'U', XFA4: FLOAT 0 < TRANSLATION SUR 'V', XFA5: FLOAT 0 < TRANSLATION SUR 'W'. GNIV1: FLOAT 0 < POUR GNIV2: FLOAT 0 < INTERPOLER GNIV3: FLOAT 0 < DANS LA GNIV4: FLOAT 0 < MAILLE DE BASE... GXS: FLOAT 0 < COORDONNEES GYS: FLOAT 0 < FLOTTANTES DU POINT (XS,YS). GINCU: FLOAT 0 < DISTANCE FLOTTANTE- GINCV: FLOAT 0 < ENTIERE... < < RELAIS : < ASP1: WORD SP1 < CONVERSION DECIMALE PAR CARACTERE, ASP2: WORD SP2 < ACCES A UN CARACTERE. ASPIR: WORD SPIR < POUR ACCES AU Z-BUFFER... PROG < < < C O M P O S A N T E E N ' U ': < < SPU: EQU $ < < ENTREE DES PARAMETRES : < CPZ IPREM < EST-CE NECESSAIRE ??? JGE SPU1 < NON... IC IPREM < OUI... LXI A0 BSR ASPCT BSR AROND STA XA0 < TRANSLATION PRELIMINAIRE DES NIVEAUX. LXI A1 BSR ASPCT BSR AROND STA XA1 < REDUCTION PRELIMINAIRE DES NIVEAUX. LXI A2 BSR ASPCT FST XFA2 < MODULATION D'AMPLITUDE FINALE DE 'W'. LXI A3 BSR ASPCT FST XFA3 < TRANSLATION DE 'U'. LXI A4 BSR ASPCT FST XFA4 < TRANSLATION DE 'V'. LXI A5 BSR ASPCT FST XFA5 < TRANSLATION DE 'W'. LXI A6 BSR ASPCT BSR AROND STA ADMT < ADRESSE COURANTE SUR LA BANDE : JAGE SPU3 < OK, ELLE EST POSITIVE (OU NULLE)... SPU4: EQU $ LAD DEMADC < SI ELLE EST NEGATIVE, SVC 0 < ON RECUPERE L'ADRESSE COURANTE SUR LA < BANDE. JE SPU5 < OK... QUIT 1 < "!ASSIGN B=MT1" MANQUE SUREMENT... JMP SPU4 < TRY AGAIN... SPU5: EQU $ ACTD 3 < RECUPERATION DE 'BOX' : STB ADMT < CE QUI DONNE L'ADRESSE COURANTE SUR LA < BANDE... SPU3: EQU $ < < INITIALISATION DU Z-BUFFER : < LYI YSTORE < (Y)=FONCTION DE 'STORE', LAI 0 < (A)=(YS,XS)=POINT INITIAL... SPU2: EQU $ PSR A < SAUVEGARDE DE L'ADRESSE COURANTE... LBI 0 < INITIALISATION DU CUMUL, BSR ASP1 < DECODAGE DU PREMIER CHIFFRE, BSR ASP1 < DU DEUXIEME, BSR ASP1 < DU TROISIEME, BSR ASP1 < ET ENFIN DU QUATRIEME. LA XA0 ADR A,B < TRANSLATION INITIALE, LAI 0 DV XA1 < MISE A L'ECHELLE INITIALE. LR A,B < (B)=VALEUR A RANGER DANS LE Z-BUFFER, PLR A < A L'ADRESSE (A)... BSR AGZB < ET ON MEMORISE DANS LE Z-BUFFER... ADRI 1,A < PUIS PASSAGE AU (YS,XS) SUIVANT... JANE SPU2 < S'IL EXISTE... SPU1: EQU $ < < COMPOSANTE : < FLD VARU < ON RENVOIE 'VARU', FAD XFA3 < TRANSLATE... RSR < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ < < COMPOSANTE : < FLD VARV < ON RENVOIE 'VARV', FAD XFA4 < TRANSLATE... RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ < < CALCUL DU POINT COURANT, ET POSITION < DE CE POINT DANS UN CARRE A < COORDONNEES ENTIERES : < FLD VARU FDV KFU FDV KUZ FST FWORK LA TRX FLT FAD FWORK FST GXS < COORDONNEE 'XS' DU POINT COURANT, FIX STA XS < COORDONNEE 'X' DU PREMIER SOMMET, FLT FSB GXS FNEG FST GINCU < POSITION SUR L'AXE DES 'X', FLD VARV FDV KFV FDV KVZ FST FWORK LA TRY FLT FAD FWORK FST GYS < COORDONNEE 'YS' DU POINT COURANT. FIX STA YS < COORDONNEE 'Y' DU PREMIER SOMMET, FLT FSB GYS FNEG FST GINCV < POSITION SUR L'AXE DES 'Y'. < < CALCUL DES NIVEAUX DES 4 SOMMETS : < BSR ASPIR FST GNIV1 < NIVEAU(XS,YS). IC XS BSR ASPIR FST GNIV2 < NIVEAU(XS+1,YS). IC YS BSR ASPIR FST GNIV3 < NIVEAU(XS+1,YS+1). DC XS BSR ASPIR FST GNIV4 < NIVEAU(XS,YS+1). DC YS < RETOUR AU POINT DE DEPART... < < CALCUL DU NIVEAU INTERPOLE < DANS LE CARRE "ENTIER" : < FLD F1 FSB GINCU FST FWORK1 < W1=1-FU, FLD F1 FSB GINCV FST FWORK2 < W2=1-FV, FMP FWORK1 FMP GNIV1 FST FWORK < (1-FU)*(1-FV)*N1, FLD GINCU FMP FWORK2 FMP GNIV2 BSR APWORK < +FU*(1-FV)*N2, FLD GINCU FMP GINCV FMP GNIV3 BSR APWORK < +FU*FV*N3, FLD FWORK1 FMP GINCV FMP GNIV4 BSR APWORK < +(1-FU)*FV*N4, < < MODULATION FINALE : < FMP XFA2 FAD XFA5 RSR < < < A C C E S A U C A R A C T E R E C O U R A N T : < < SP2: EQU $ PSR B,X SP24: EQU $ LA XBUF < (A)=INDEX COURANT DU BUFFER, CP MAXBUF < EST-ON AU BOUT DU BUFFER (EN PARTICULIER < CAS DE LA PREMIERE LECTURE...) ??? JL SP21 < NON... STZ XBUF < OUI, ON SE RAMENE EN TETE DU BUFFER... SP23: EQU $ LAD DEMMT SVC 0 < ON LIT LE BLOC COURANT... JE SP22 < OK... LR X,A CPI '45 < EST-CE UN 'TAPE-MARK' ??? JNE SP29 < NON, AUTRE ERREUR... LAD DEMMT < OUI, ON TENTE DE RELIRE... SVC 0 < LECTURE DU BLOC COURANT... JE SP22 < OK, ON A SAUTE LE 'TAPE-MARK'... SP29: EQU $ QUIT 1 < ERREUR D'ASSIGNATION PROBABLEMENT... JMP SP23 SP22: EQU $ IC ADMT < ET PASSAGE AU BLOC SUIVANT... ACTD 3 < RECUPERATION DE LA 'BOX'... LR B,A < (A)=BOX... CP MAXBUF < ET VALIDATION... JLE SP28 < OK... QUIT 1 < !?!???!?! SP28: EQU $ LA XBUF < (A)=INDEX COURANT DU BUFFER... SP21: EQU $ IC XBUF < ET PASSAGE AU CARACTERE SUIVANT... LR A,X LBY &AXBUF < (A)=CARACTERE COURANT DU BUFFER : CPI " " < ET TEST... JL SP24 < ON IGNORE TOUS LES CONTROLES... JG SP25 < OK, CHIFFRE (PEUT-ETRE...). LAI "0" < LE BLANC EST TRANSFORME EN "0"... SP25: EQU $ CPI "0" < ET VALIDATION... JL SP26 < ERREUR... CPI "9" < VALIDATION... JG SP26 < ERREUR... ADRI -"0",A < DECODAGE BINAIRE... SP27: EQU $ PLR B,X RSR < ET SORTIE... SP26: EQU $ QUIT 1 < ?!????!??! LAI 0 < ET ON FORCE 0... JMP SP27 < ET ON SORT... < < < C O N V E R S I O N B I N A I R E : < < SP1: EQU $ LR B,A < (A)=CUMUL COURANT, MP C10 < QUE L'ON MULTIPLIE PAR 10... BSR ASP2 < ACCES AU CARACTERE COURANT... ADR A,B < ET CUMUL... RSR < < < I N T E R P O L A T I O N D A N S L A M A I L L E : < < < ARGUMENTS : < (XS,YS)=POINT COURANT. < < < RESULTAT : < (A,B)=VALEUR CONTENUE EN (YS,XS) DU Z-BUFFER. < < SPIR: EQU $ LA YS SWBR A,A OR XS LYI YLOAD BSR AGZB < RECUPERATION DE LA VALEUR CONTENUE EN < (YS,XS) DU Z-BUFFER, LR B,A FLT < ET FLOTTAGE... RSR :F :F < <<'SIOC CARTE RASTER 2' DF'SIOC CARTE RASTER 3' ED'SIOC CARTE RASTER 3' IN0 PAGE IDP "SIOC CARTE RASTER 3" < < < E N T R E E C A R T E S R A S T E R 3 : < < < FONCTION : < CE MODULE LIT SUR L'UNITE < '0B DES NIVEAUX DE GRIS, ET < LES AFFICHE SEQUENTIELLEMENT < SUR L'ECRAN... < LA VERSION 'RASTER 3' EST < SIMPLIFIEE PAR RAPPORT A LA < VERSION 'RASTER 1', CAR EN < EFFET CHAQUE POINT EST CODE < PAR UN SEUL CARACTERE DONNANT < DIRECTEMENT SON NIVEAU DE GRIS... < < < ARGUMENT : A2:: VAL 2 < ADRESSE DU PREMIER BLOC SUR LA BANDE ; < SI CETTE ADRESSE EST FOURNIE NEGATIVE, < ALORS, ON RECUPERE L'ADRESSE COURANTE < DANS LA 'BOX'... < < < L O C A L : < < LOCAL FLOC: EQU $ < < INDICATEUR DE PREMIER PASSAGE : < IPREM: WORD -1 < < DEFINITION ET ACCES AU BUFFER : < LCBUF:: VAL NMOTL*NBITMO < LONGUEUR EN OCTETS DU BUFFER, CBUF: EQU IMAGE < IL EST EN RECOUVREMENT AVEC 'IMAGE'... NVPMT:: VAL '0B < 'NVP' D'ACCES A LA BANDE MAGNETIQUE... DEMADC: BYTE NVPMT;'05 < MISE DE L'ADRESSE COURANTE DANS LA 'BOX'. DEMMT: BYTE NVPMT;'08 < LECTURE EN ACCES DIRECT DE LA BANDE : WORD CBUF-ZERO*2 WORD LCBUF ADMT: WORD 0 < ADRESSE COURANTE DE BLOC ('A2'). AXBUF: WORD CBUF,X < RELAI D'ACCES AU BUFFER, XBUF: WORD LCBUF < INDEX COURANT DU BUFFER, MAXBUF: WORD LCBUF < VALEUR COURANTE DE 'XBUF'. < < CONSTANTES : < C10: WORD 10 < CONVERSION DECIMALE. FINITE: FLOAT 1000000 < < RELAIS : < ASP1: WORD SP1 < CONVERSION DECIMALE PAR CARACTERE, ASP2: WORD SP2 < ACCES A UN CARACTERE. PROG < < < C O M P O S A N T E E N ' U ': < < SPU: EQU $ < < ENTREE DES PARAMETRES : < CPZ IPREM < EST-CE NECESSAIRE ??? JGE SPU1 < NON... IC IPREM < OUI... LXI A2 BSR ASPCT BSR AROND STA ADMT < ADRESSE COURANTE SUR LA BANDE : JAGE SPU3 < OK, ELLE EST POSITIVE OU NULLE... SPU4: EQU $ LAD DEMADC < SI ELLE EST NEGATIVE, SVC 0 < ON RECUPERE L'ADRESSE COURANTE SUR LE < BANDE. JE SPU5 < OK... QUIT 1 < "!ASSIGN B=MT1" MANQUE SUREMENT... JMP SPU4 < TRY AGAIN... SPU5: EQU $ ACTD 3 < RECUPERATION DE 'BOX' : STB ADMT < CE QUI DONNE L'ADRESSE COURANTE SUR LA < BANDE... SPU3: EQU $ SPU1: EQU $ < < COMPOSANTE : < FLD FINITE < POUR FORCER UN OVERSCREEN... RSR < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ < < COMPOSANTE : < FLD FINITE < POUR FORCER UN OVERS-SCREEN... RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ < < ACCES AU NIVEAU DE GRIS COURANT : < LBI 0 < INITIALISATION DU CUMUL, BSR ASP1 < DECODAGE D'UN SEUL CHIFFRE... LR B,A < (A)=NIVEAU DE GRIS COURANT, < < MARQUAGE DU POINT COURANT : < LX XR STX XS LY YR STY YS BSR ASPRPS < MARQUAGE DU POINT (XS,YS)=(XR,YR) < AVEC LE NIVEAU (A)... < < COMPOSANTE : < FLD F0 RSR < < < A C C E S A U C A R A C T E R E C O U R A N T : < < SP2: EQU $ PSR B,X SP24: EQU $ LA XBUF < (A)=INDEX COURANT DU BUFFER, CP MAXBUF < EST-ON AU BOUT DU BUFFER (EN PARTICULIER < CAS DE LA PREMIERE LECTURE...) ??? JL SP21 < NON... STZ XBUF < OUI, ON SE RAMENE EN TETE DU BUFFER... SP23: EQU $ LAD DEMMT SVC 0 < ON LIT LE BLOC COURANT... JE SP22 < OK... LR X,A CPI '45 < EST-CE UN 'TAPE-MARK' ??? JNE SP29 < NON, AUTRE ERREUR... LAD DEMMT < OUI, ON TENTE DE RELIRE... SVC 0 < LECTURE DU BLOC COURANT... JE SP22 < OK, ON A SAUTE LE 'TAPE-MARK'... SP29: EQU $ QUIT 1 < ERREUR D'ASSIGNATION PROBABLEMENT... JMP SP23 SP22: EQU $ IC ADMT < PASSAGE AU BLOC SUIVANT... ACTD 3 < RECUPERATION DE LA 'BOX'... LR B,A < (A)=BOX... CP MAXBUF < ET VALIDATION... JLE SP28 < OK... QUIT 1 < !?!???!?! SP28: EQU $ LA XBUF < (A)=INDEX COURANT DU BUFFER... SP21: EQU $ IC XBUF < ET PASSAGE AU CARACTERE SUIVANT... LR A,X LBY &AXBUF < (A)=CARACTERE COURANT DU BUFFER : MASKCA:: VAL '000F < MASQUE DE CONVERSION --> BINAIRE... ANDI MASKCA < ON NE FAIT AUCUNE VERIFICATION SUR LA < CARACTERE COURANT... PLR B,X RSR < ET SORTIE... < < < C O N V E R S I O N B I N A I R E : < < SP1: EQU $ LR B,A < (A)=CUMUL COURANT, MP C10 < QUE L'ON MULTIPLIE PAR 10... BSR ASP2 < ACCES AU CARACTERE COURANT... ADR A,B < ET CUMUL... RSR :F :F < <<'SIOC CARTE RASTER 3' DF'SIOC CARTE XY 9' ED'SIOC CARTE XY 9' IN0 PAGE IDP "SIOC CARTE XY 9" < < < E N T R E E A P A R T I R D E C A R T E S X Y 9 : < ( L I S T E ( X , Y ) ) < < < FORMAT : < ON TROUVE UN PAQUET DE CARTES CONTENANT < UN NOMBRE VARIABLE DE DOUBLETS (X(I),Y(I)) < X(I) ET Y(I) ETANT DES COORDONNEES DANS LE < SEGMENT (0,255); ON CONSIDERE QUE LA LISTE < S'ARRETE SUR LE POINT (0,0)... < X(I) ET Y(I) SONT CODES SUR 'XX2' CHIFFRES, < ET IL Y A 'XX4' DOUBLETS PAR CARTE. < < < BLOCAGE DES ENREGISTREMENTS : < ON BLOQUE 'XX6' CARTE PAR ENRE- < GISTREMENT SUR LA BANDE MAGNETIQUE. < < < FONCTION : < TRACE LE MAILLAGE DONNE PAR UNE < SUITE DE DOUBLETS DEFINISSANT UNE < SUITE DE CHAINES DE SEGMENTS. < < < ASSIGNATIONS : < !ASSIGN A=DKU, < !ASSIGN B=MT1. < < < ARGUMENTS : < A0000=CONSTANTE DE TRANSLATION DES COORDONEES X, < A0001=CONSTANTE DE TRANSLATION DES COORDONNEES Y, < A0002=COULEUR DU POINT A TRACER ; SI CELLE-CI < EST NEGATIVE, ON CLIGNOTE... < A0003=ADRESSE DU PREMIER BLOC A LIRE SUR LA < BANDE MAGNETIQUE ; SI CELUI-CI EST < NEGATIF, ON PREND LA POSITION COU- < RANTE... < A0004=TEMPORISATION INTER-POINT... A0:: VAL 0 < TRANSLATION EN 'X', A1:: VAL A0+1 < TRANSLATION EN 'Y'. A2:: VAL A1+1 < COULEUR DU TRACE. A3:: VAL A2+1 < ADRESSE DU PREMIER BLOC SUR BANDE. A4:: VAL A3+1 < TEMPORISATION INTER-POINT... < < LOCAL FLOC: EQU $ < < INDICATEUR DE PREMIER PASSAGE : < IPREM: WORD -1 < < DONNEES D'ACCES A LA BANDE : < LCBUF:: VAL 8 < LONGUEUR DES CARTE. CBUF: EQU IMAGE < BUFFER DES CARTE, KCARTE: WORD 0 < DECOMPTEUR DE DEBLOCAGE DES CARTE < DANS LE BUFFER BANDE MAGNETIQUE. ACBUF: WORD CBUF,X < ET SON RELAI D'ACCES. ACBUF0: WORD CBUF,X < ET POUR LE REINITIALISER... XX2:: VAL 4 < NOMBRE DE CHIFFRES DECIMAUX CODANT < CHACUNE DES COORDONNEES. XX4:: VAL 1 < NOMBRE DE DOUBLETS PAR CARTE. XX5:: VAL XX2+XX2*XX4 < NOMBRE DE CARACTERES PAR CARTE. IF LCBUF-XX5,,XWOR%,XWOR% IF 'XX5' EST MAUVAIS !!! XWOR%: VAL 0 XX6:: VAL 32 < FACTEUR DE BLOCAGE DES CARTE DANS LE < BUFFER DE LA BANDE MAGNETIQUE... NVPMT:: VAL '0B < 'NVP' D'ACCES A LA BANDE MAGNETIQUE. DEMADC: BYTE NVPMT;'05 < DEMANDE D'ACCES A L'ADRESSE COURANTE. DEMCR: BYTE NVPMT;'08 < ACCES DIRECT AUX ENREGISTREMENTS. WORD CBUF-ZERO*NOCMO WORD LCBUF*XX6 ADMT: WORD 0 < ADRESSE COURANTE SUR LA BANDE... < < CONSTANTES : < XTEMPO: WORD 0 < TEMPORISATION INTER-POINT... TRNLXS: WORD 0 < TRANSLATION DE 'XS', TRNLYS: WORD 0 < TRANSLATION DE 'YS'. NIVOXY: WORD 0 < NIVEAU DU TRACE ; SI CELUI-CI EST NEGATIF < ON FAIT UN CLIGNOTEMENT... C10: WORD BASE10 < CONSTANTE DE CONVERSION DECIMALE. ALIGM1: WORD -NLIGM1 < < RELAIS : < ASP1: WORD SP1 < SOUS-PROGRAMME DE CONVERSION. ASP2: WORD SP2 ASP3: WORD SP3 < TEMPORISATION INTER-POINT. PROG < < < C O M P O S A N T E ' U ' : < < SPU: EQU $ < < ENTREE DES PARAMETRES : < CPZ IPREM < EST-CE NECESSAIRE ??? JGE SPU1 < NON... IC IPREM < OUI... LXI A0 BSR ASPCT < RECUPERATION DE 'A0000', BSR AROND < ET CONVERSION ENTIERE, STA TRNLXS < ET SAVE... LXI A1 BSR ASPCT < RECUPERATION DE 'A0001', BSR AROND < ET CONVERSION ENTIERE, STA TRNLYS < ET SAVE... LXI A2 BSR ASPCT < RECUPERATION DE 'A0002', BSR AROND < ET CONVERSION ENTIERE, CE QUI DONNE < LE NIVEAU DU POINT A TRACER... STA NIVOXY < ET SAVE... LXI A3 BSR ASPCT BSR AROND STA ADMT < ADRESSE COURANTE SUR LA BANDE : JAGE SPU3 < OK, ELLE EST POSITIVE (OU NULLE)... SPU4: EQU $ LAD DEMADC < SI ELLE EST NEGATIVE, SVC 0 < ON RECUPERE L'ADRESSE COURANTE SUR LA < BANDE. JE SPU5 < OK... QUIT 1 < "!ASSIGN B=MT1" MANQUE SUREMENT... JMP SPU4 < TRY AGAIN... SPU5: EQU $ ACTD 3 < RECUPERATION DE 'BOX' : STB ADMT < CE QUI DONNE L'ADRESSE COURANTE SUR LA < BANDE... SPU3: EQU $ LXI A4 BSR ASPCT BSR AROND STA XTEMPO < TEMPORISATION INTER-POINT... < < INITIALISATIONS : < SPU1: EQU $ LXI XX5 < INDEX COURANT DES CARTE... < < BOUCLE DE RECUPERATION D'UN DOUBLET : < SPU10: EQU $ BSR ASP1 STA XS < RECUPERATION DE X(I), BSR ASP1 STA YS < RECUPERATION DE Y(I), OR XS < POUR TESTER LE POINT (0,0)... JAE SPU30 < FIN DE LISTE... < < TRACE DU POINT COURANT : < LA XS AD TRNLXS STA XS < TRANSLATION DE 'XS' : JAL SPU11 < HORS-ECRAN... CPI NPOLM1 JG SPU11 < HORS-ECRAN... LA YS AD TRNLYS STA YS < TRANSLATION DE 'YS' : JAL SPU11 < HORS-ECRAN... CPI NLIGM1 JG SPU11 < HORS-ECRAN... LA NIVOXY < (A)=NIVEAU A UTILISER POUR LE TRACE : JAL SPU12 < UN CLIGNOTEMENT EST DEMANDE... BSR ASPRPS < UN FORCAGE EST DEMANDE... BSR ASP3 < TEMPORISATION INTER-POINT... JMP SPU11 < ET ON SORT... SPU12: EQU $ NGR A,B BSR ASPGPS < SAUVEGARDE DU NIVEAU ANTERIEUR, XR A,B BSR ASPRPS < ET ON BSR ASP3 < TEMPORISATION... XR A,B BSR ASPRPS < CLIGNOTE... SPU11: EQU $ JMP SPU10 < VERS LE DOUBLET SUIVANT... < < OUI, FIN DE L'IMAGE COURANTE... < SPU30: EQU $ STZ KCARTE < LA FIN DU BLOC COURANT EST IGNOREE... IF NPOLM1-NLIGM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LAI NPOLM1?NLIGM1 BSR AFLT FST FXR < ON FORCE XR ET FST FYR < YR POUR STOPPER LA TRANSFORMATION... < < < C O M P O S A N T E E N ' V ' E T ' W ' : < < SPV: EQU $ SPW: EQU $ FLD F0 < U=0... RSR < < < T E M P O R I S A T I O N I N T E R - P O I N T : < < SP3: EQU $ PSR X LX XTEMPO CPZR X < ALORS ??? JLE SP31 < PAS DE TEMPORISATION... SP32: EQU $ JDX SP32 < TEMPORISATION... SP31: EQU $ PLR X RSR < < < C O N V E R S I O N D E C I M A L E : < < SP1: EQU $ STZ FWORK < INITIALISATION DU CUMUL... DO XX2 BSR ASP2 < (A)=COORDONNEE COURANTE. RSR < < < A C C E S A U N C A R A C T E R E E T C U M U L : < < SP2: EQU $ LR X,A CPI XX5 < FAUT-IL LIRE UNE CARTE ??? JL SP24 < NON... SP25: EQU $ LA ACBUF ADRI LCBUF/NOCMO,A STA ACBUF < PROGRESSION DU BUFFER CARTE DANS LE < BUFFER BANDE MAGNETIQUE... DC KCARTE < ALORS, FAUT-IL LIRE UN NOUVEL < ENREGISTREMENT ??? JGE SP28 < NON... LAI XX6-1 < OUI, (-1 A CAUSE DU 'DC' QUI MANQUE) STA KCARTE < REINITIALISATION DU FACTEUR DE DEBLOCAGE, LA ACBUF0 STA ACBUF < ET DU RELAI DU BUFFER CARTE... SP27: EQU $ LAD DEMCR < OUI : SVC 0 < LECTURE D'UNE CARTE... JE SP29 < OK... QUIT 1 < !ASSIGN ??? JMP SP27 < ET ON RETENTE... SP29: EQU $ IC ADMT < POUR L'ACCES AU BLOC SUIVANT... SP28: EQU $ LXI 0 < REINITIALISATION DE L'INDEX CARACTERE. SP24: EQU $ LBY &ACBUF ADRI 1,X < POUR LE CARACTERE SUIVANT... ANDI '0F < DECODAGE 'ASCI' OU 'EBCDIC', EN TENANT < COMPTE DE L'EQUIVALENCE ENTRE "SPACE" < ET LE CHIFFRE "0". CPI BASE10 JL SP23 QUIT 1 SP23: EQU $ PSR A < SAVE LE CHIFFRE COURANT, LA FWORK MP C10 < DECALAGE, PLR A ADR B,A < ET CUMUL... STA FWORK < (A)=(FWORK)=RESULTAT... RSR :F :F < <<'SIOC CARTE XY 9' DF'SIOC CARTE RASTER 4' ED'SIOC CARTE RASTER 4' IN0 PAGE IDP "SIOC CARTE RASTER 4" < < < E N T R E E C A R T E S R A S T E R 4 : < < < FONCTION : < CE MODULE LIT SUR L'UNITE < '0B DES NIVEAUX DE GRIS, ET < LES AFFICHE SEQUENTIELLEMENT < SUR L'ECRAN... < LA VERSION 'RASTER 4' SE DIFFE- < RENCIE DES AUTRES VERSIONS PAR LE < FAIT QUE L'IMAGE TRANSMISE N'EST < PAS 256*256, MAIS 1024*1024, ET < PEUT MEME POSSEDER PLUS DE LIGNES < (IL SUFFIT DE SE POSITIONNER ALORS < SUR LA BANDE PAR 'A2') ; CHAQUE < BLOC CONTIENT 64 PAQUETS DE 4 CHIF- < FRES HEXA-DECIAMUX QUI CODENT EN < FAIT LA CONFIGURATION DES 16 POINTS < TOUT OU RIEN DES PAVES 4*4 DE LA GRANDE < IMAGE QUE L'ON VA DONC REPRESENTER < PAR UNE TRANSFORMATION HABILE DE < CES 16 BITS... < < < ARGUMENTS : A0:: VAL 0 < MODE DE REPRESENTATION : XMOD00:: VAL 0 < MODE 'MAX' : ON VISUALISE MAX(A(I,J)). XMOD01:: VAL XMOD00+1 < MODE 'SIGMA' : ON VISUALISE LE SIGMA < DES A(I,J). A2:: VAL A0+2 < ADRESSE DU PREMIER BLOC SUR LA BANDE ; < SI CETTE ADRESSE EST FOURNIE NEGATIVE, < ALORS, ON RECUPERE L'ADRESSE COURANTE < DANS LA 'BOX'... A3:: VAL A2+1 < TAILLE DU PAVE ELEMENTAIRE : < 1 : 1*1 --> 1 POINT D'IMAGE, < 2 : 2*2 --> 1 POINT D'IMAGE, < 4 : 4*4 --> 1 POINT D'IMAGE. A4:: VAL A3+1 < XMIN(FENETRE) DANS : < (0,1023) POUR LA TAILLE 1, < (0,511) POUR 2, < (0,255) POUR 4. A5:: VAL A4+1 < YMIN(FENETRE), A6:: VAL A5+1 < XMAX(FENETRE), A7:: VAL A6+1 < YMAX(FENETRE). A8:: VAL A7+1 < TRANSPOSITION DE 'VNIVO' : < =0 : NON, < #0 : OUI. < < < L O C A L : < < LOCAL FLOC: EQU $ < < INDICATEUR DE PREMIER PASSAGE : < IPREM: WORD -1 < < DEFINITION ET ACCES AU BUFFER : < LCBUF:: VAL NMOTL*NBITMO < LONGUEUR EN OCTETS DU BUFFER, CBUF: EQU IMAGE < IL EST EN RECOUVREMENT AVEC 'IMAGE'... NVPMT:: VAL '0B < 'NVP' D'ACCES A LA BANDE MAGNETIQUE... DEMADC: BYTE NVPMT;'05 < MISE DE L'ADRESSE COURANTE DANS LA 'BOX'. DEMMT: BYTE NVPMT;'08 < LECTURE EN ACCES DIRECT DE LA BANDE : WORD CBUF-ZERO*2 WORD LCBUF ADMT: WORD 0 < ADRESSE COURANTE DE BLOC ('A2'). AXBUF: WORD CBUF,X < RELAI D'ACCES AU BUFFER, XBUF: WORD LCBUF < INDEX COURANT DU BUFFER, MAXBUF: WORD LCBUF < VALEUR COURANTE DE 'XBUF'. < < CONSTANTES : < FINITE: FLOAT 1000000 VMODE: WORD 0 < 'A0' : MODE DE REPRESENTATION. VNIVO: WORD 0 < RNAGEMENT DU PAQUET DE 4 CHIFFRES < HEXA-DECIMAUX COURANT. TPAVE: WORD 0 < 'A3' : TAILLE DU PAVE A TRAITER. PXMIN: WORD 0 < 'A4' : XMIN(FENETRE), PYMIN: WORD 0 < 'A5' : YMIN(FENETRE), PXMAX: WORD 0 < 'A6' : XMAX(FENETRE), PYMAX: WORD 0 < 'A7' : YMAX(FENETRE). ITRVNI: WORD 0 < TRANSPOSITION DE 'VNIVO' : < =0 : NON, < #0 : OUI. < < LISTES DE TRAITEMENT DES PAVES 2*2 : < LIS11: EQU $ WORD 0;0;1;1;0;0;1;1;4;4;5;5;4;4;5;5 LIS12: EQU $ WORD 2;2;3;3;2;2;3;3;6;6;7;7;6;6;7;7 LIS21: EQU $ WORD 8;8;9;9;8;8;9;9;12;12;13;13;12;12;13;13 LIS22: EQU $ WORD 10;10;11;11;10;10;11;11;14;14;15;15;14;14;15;15 ALIS11: WORD LIS11,X < PASSAGE DU PAVE 4*4 AU PAVE 2*2 (1,1), ALIS12: WORD LIS12,X < PASSAGE DU PAVE 4*4 AU PAVE 2*2 (1,2), ALIS21: WORD LIS21,X < PASSAGE DU PAVE 4*4 AU PAVE 2*2 (2,1), ALIS22: WORD LIS22,X < PASSAGE DU PAVE 4*4 AU PAVE 2*2 (2,2). LISTR: EQU $ WORD 15;14;13;12;11;10;9;8;7;6;5;4;3;2;1;0 ALISTR: WORD LISTR,X < LISTE DE TRANSPOSITION DE 'VNIVO'. < < TABLE DE COLORIAGE : < LISCOU: EQU $ WORD 0;1;1;2;2;3;3;4;4;5;5;6;6;7;7;7;7 ALISCO: WORD LISCOU,X < RELAI D'ACCES A LA TABLE DE COLORIAGE... < < RELAIS : < ASP1: WORD SP1 < CONVERSION DECIMALE PAR CARACTERE, ASP2: WORD SP2 < ACCES A UN CARACTERE. ASPMAR: WORD SPMAR < MARQUAGE D'UN POINT SUIVANT LE MODE < 'MAX' OU 'SIGMA'. ASPW0: WORD SPW0 < RELAI... PROG < < < C O M P O S A N T E E N ' U ': < < SPU: EQU $ < < ENTREE DES PARAMETRES : < CPZ IPREM < EST-CE NECESSAIRE ??? JGE SPU1 < NON... IC IPREM < OUI... LXI A0 BSR ASPCT BSR AROND STA VMODE < MODE DE REPRESENTATION... LXI A2 BSR ASPCT BSR AROND STA ADMT < ADRESSE COURANTE SUR LA BANDE : JAGE SPU3 < OK, ELLE EST POSITIVE OU NULLE... SPU4: EQU $ LAD DEMADC < SI ELLE EST NEGATIVE, SVC 0 < ON RECUPERE L'ADRESSE COURANTE SUR LE < BANDE. JE SPU5 < OK... QUIT 1 < "!ASSIGN B=MT1" MANQUE SUREMENT... JMP SPU4 < TRY AGAIN... SPU5: EQU $ ACTD 3 < RECUPERATION DE 'BOX' : STB ADMT < CE QUI DONNE L'ADRESSE COURANTE SUR LA < BANDE... SPU3: EQU $ LXI A3 BSR ASPCT BSR AROND STA TPAVE < TAILLE DU PAVE COURANT. LXI A4 BSR ASPCT BSR AROND STA PXMIN < XMIN(FENETRE), LXI A5 BSR ASPCT BSR AROND STA PYMIN < YMIN(FENETRE), LXI A6 BSR ASPCT BSR AROND STA PXMAX < XMAX(FENETRE), LXI A7 BSR ASPCT BSR AROND STA PYMAX < YMAX(FENETRE). LXI A8 BSR ASPCT BSR AROND STA ITRVNI < TRANSPOSITION DE 'VNIVO' ??? SPU1: EQU $ < < COMPOSANTE : < FLD FINITE < POUR FORCER UN OVERSCREEN... RSR < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ < < COMPOSANTE : < FLD FINITE < POUR FORCER UN OVERS-SCREEN... RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ LX XR LY YR STX XS < POISITIONEMENT DANS LE COIN SUPERIEUR STY YS < GAUCHE DU PAVE COURANT... < < ACCES AU NIVEAU DE GRIS COURANT : < LBI 0 < INITIALISATION DU CUMUL, DO NBRHEX BSR ASP1 < DECODAGE DU PAQUET DE 4 CHIFFRES... STB VNIVO < (VNIVO)=PAQUET COURANT DE 4 CHIFFRES < HEXA-DECIMAUX. CPZ ITRVNI < FAUT-IL TRANSPOSER 'VNIVO' ??? JE SPW9 < NON... LB VNIVO < (B)=LISTE DES POINTS DU PAVE 4*4, LAI 0 < (A)=LISTE TRANSPOSEE DU PAVE 4*4, LXI NBITMO < (X)=NOMBRE DE POINTS DE LA LISTE (B). SPD21: EQU $ ADRI -1,X LY &ALISTR < (Y)=INDEX DE TRANSPOSITION DE (X), XR X,Y TBT NBITMO,X < TEST DE B(Y), XR X,Y JNC SPD22 < 0... SBT 0,X < 1 : ON MARQUE A(X)... SPD22: EQU $ CPZR X < LE TRANSFERT EST-IL FINI ??? JGE SPD21 < NON... STA VNIVO < ET ON RESTAURE 'VNIVO'... SPW9: EQU $ < < AIGUILLAGE EN FONCTION < DE LA TAILLE DU PAVE : < LA TPAVE < (A)=TAILLE DEMANDEE : CPI 4 JE SPW4 < ON VA VISUALISER UN PAVE 4*4 PAR POINT. CPI 2 JE SPW2 < ON VA VISUALISER UN PAVE 2*2 PAR POINT. CPI 1 JE SPW1 < ON VA VISUALISER UN PAVE 1*1 PAR POINT. QUIT 1 < BERKKK... BR ASPW0 < ET ON SORT... < < VISUALISATION D'UN PAVE 4*4 < PAR POINT DE L'IMAGE 256*256 : < SPW4: EQU $ BSR ASPMAR < MARQUAGE DU POINT (XS,YS) SUIVANT < L'UN DES MODES 'MAX' OU 'SIGMA'... BR ASPW0 < ET ON SORT... < < MARQUAGE D'UN PAVE 1*1 < PAR POINT DE L'IMAGE 256*256 : < SPW1: EQU $ ECHEL: VAL 4 < FACTEUR D'ECHELLE. IF ECHEL*ECHEL-NBITMO,,XWOR%, IF ATTENTION : INCOHERENCE !!! XWOR%: VAL 0 LA XS SLLS ECHEL=0 SB PXMIN STA XS < CHANGEMENT DE LA YS SLLS ECHEL=0 SB PYMIN STA YS < COORDONNEES... LYI 0 < (Y)=INDEX DE LA LISTE DE POINTS < 'VNIVO', LXI ECHEL < (X)=NOMBRE DE LIGNES A TRACER. SPW11: EQU $ LA XS PSR A,X < SAVE L'ABSCISSE INITIALE, ET LE NOMBRE < DE LIGNES ENCORE A TRACER... LXI ECHEL < (X)=NOMBRE DE POINTS SUR LA LIGNE. SPW12: EQU $ LA XS < VALIDATION DE 'XS' : AD PXMIN CP PXMIN JL SPW13 < HORS-FENETRE... CP PXMAX JG SPW13 < HORS-FENETRE... LA YS < VALIDATION DE 'YS' : AD PYMIN CP PYMIN JL SPW13 < HORS-FENETRE... CP PYMAX JG SPW13 < HORS-FENETRE... LA VNIVO < (A)=LISTE DES POINTS DU PAVE 4*4, XR X,Y TBT 0,X < LE POINT (XS,YS) COURANT EST-IL BLANC ??? XR X,Y LAI 0 < NON A PRIORI... JNC SPW14 < NOIR... LAI NIVMAX < BLANC... SPW14: EQU $ BSR ASPRPS < ET MARQUAGE DU POINT COURANT (XS,YS)... SPW13: EQU $ ADRI 1,Y < PASSAGE AU POINT SUIVANT DU PAVE... IC XS < PROGRESSION SUR LA LIGNE, JDX SPW12 < SUR 4 POINTS... PLR A,X < AU BOUT DE 4 POINTS, STA XS < ON RESTAURE L'ABSCISSE INITIALE, ET LE < NOMBRE DE LIGNES ENCORE A TRACER, IC YS < PROGRESSION DU NUMERO DE LIGNE, JDX SPW11 < SUR 4 LIGNES... BR ASPW0 < ET C'EST FINI... < < MARQUAGE D'UN PAVE 2*2 < PAR POINT DE L'IMAGE 256*256 : < SPW2: EQU $ ECHEL: VAL 2 < FACTEUR D'ECHELLE... LA XS SLLS ECHEL=0 SB PXMIN STA XS < CHANGEMENT DE LA YS SLLS ECHEL=0 SB PYMIN STA YS < COORDONNEES... LB VNIVO < (B)=LISTE DES POINTS DU PAVE 4*4, LAI 0 < (A)=LISTE DES POINTS DU PAVE 2*2, LXI NBITMO < (X)=NOMBRE DE POINTS DE LA LISTE (B). SPW21: EQU $ ADRI -1,X LY &ALIS11 < (Y)=INDEX DE TRANSFERT DE (X), XR X,Y TBT NBITMO,X < TEST DE B(Y), XR X,Y JNC SPW22 < 0... SBT 0,X < 1 : ON MARQUE A(X)... SPW22: EQU $ CPZR X < LE TRANSFERT EST-IL FINI ??? JGE SPW21 < NON... XM VNIVO < OUI, ON MODIFIE PROVISOIREMENT 'VNIVO', BSR ASPMAR < ET ON MARQUE LE PAVE 2*2 (1,1)... STA VNIVO < ET ON RESTAURE 'VNIVO'... LB VNIVO < (B)=LISTE DES POINTS DU PAVE 4*4, LAI 0 < (A)=LISTE DES POINTS DU PAVE 2*2, LXI NBITMO < (X)=NOMBRE DE POINTS DE LA LISTE (B). SPWA1: EQU $ ADRI -1,X LY &ALIS12 < (Y)=INDEX DE TRANSFERT DE (X), XR X,Y TBT NBITMO,X < TEST DE B(Y), XR X,Y JNC SPWA2 < 0... SBT 0,X < 1 : ON MARQUE A(X)... SPWA2: EQU $ CPZR X < LE TRANSFERT EST-IL FINI ??? JGE SPWA1 < NON... XM VNIVO < OUI, ON MODIFIE PROVISOIREMENT 'VNIVO', IC XS < PROGRESSION SUR LA LIGNE... BSR ASPMAR < ET ON MARQUE LE PAVE 2*2 (1,2)... STA VNIVO < ET ON RESTAURE 'VNIVO'... LB VNIVO < (B)=LISTE DES POINTS DU PAVE 4*4, LAI 0 < (A)=LISTE DES POINTS DU PAVE 2*2, LXI NBITMO < (X)=NOMBRE DE POINTS DE LA LISTE (B). SPWB1: EQU $ ADRI -1,X LY &ALIS21 < (Y)=INDEX DE TRANSFERT DE (X), XR X,Y TBT NBITMO,X < TEST DE B(Y), XR X,Y JNC SPWB2 < 0... SBT 0,X < 1 : ON MARQUE A(X)... SPWB2: EQU $ CPZR X < LE TRANSFERT EST-IL FINI ??? JGE SPWB1 < NON... XM VNIVO < OUI, ON MODIFIE PROVISOIREMENT 'VNIVO', DC XS IC YS < ET ON PROGRESSE... BSR ASPMAR < ET ON MARQUE LE PAVE 2*2 (2,1)... STA VNIVO < ET ON RESTAURE 'VNIVO'... LB VNIVO < (B)=LISTE DES POINTS DU PAVE 4*4, LAI 0 < (A)=LISTE DES POINTS DU PAVE 2*2, LXI NBITMO < (X)=NOMBRE DE POINTS DE LA LISTE (B). SPWC1: EQU $ ADRI -1,X LY &ALIS22 < (Y)=INDEX DE TRANSFERT DE (X), XR X,Y TBT NBITMO,X < TEST DE B(Y), XR X,Y JNC SPWC2 < 0... SBT 0,X < 1 : ON MARQUE A(X)... SPWC2: EQU $ CPZR X < LE TRANSFERT EST-IL FINI ??? JGE SPWC1 < NON... XM VNIVO < OUI, ON MODIFIE PROVISOIREMENT 'VNIVO', IC XS < ET ON PROGRESSE... BSR ASPMAR < ET ON MARQUE LE PAVE 2*2 (2,2)... STA VNIVO < ET ON RESTAURE 'VNIVO'... < < FIN DE MARQUAGE : < SPW0: EQU $ FLD F0 RSR < < < M A R Q U A G E D ' U N P O I N T < S U I V A N T ' M A X ' O U ' S I G M A ' : < < SPMAR: EQU $ PSR A,B,X,Y LA XS < VALIDATION DE 'XS' : AD PXMIN CP PXMIN JL SPM999 < HORS-FENETRE... CP PXMAX JG SPM999 < HORS-FENETRE... LA YS < VALIDATION DE 'YS' : AD PYMIN CP PYMIN JL SPM999 < HORS-FENETRE... CP PYMAX JG SPM999 < HORS-FENETRE... LA VMODE < QUEL EST LE MODE DE REPRESENTATION ??? CPI XMOD00 JE SPM100 < MODE 'MAX'... CPI XMOD01 JE SPM200 < MODE 'SIGMA'... QUIT 1 < BERKKK... JMP SPM999 < ET ON ABANDONNE... < < CAS DU MODE 'MAX' : < SPM100: EQU $ LAI 0 < (A)=NIVEAU NOIR A PRIORI, CPZ VNIVO < Y-A-T'IL AU MOINS UN BIT A 1 ??? JE SPM101 < NON ==> NOIR... LAI NIVMAX < OUI ==> BLANC... SPM101: EQU $ JMP SPM800 < VERS LE TRACE... < < CAS DU MODE 'SIGMA' : < SPM200: EQU $ LA VNIVO < (A)=CHAMP DONT ON DOIT COMPTER LES BITS, LYI 0 < (Y)=COMPTEUR DES BITS A 1, SPM201: EQU $ JAE SPM202 < C'EST FINI, ON A TROUVE TOUS LES BITS < A 1... DBT < NON, RECHERCHE DU PROCHAIN BIT A 1, ADRI 1,Y < ON LE COMPTE... RBT 0,X < ET ON L'ELIMINE... JMP SPM201 < AU SUIVANT... SPM202: EQU $ LR Y,X < (X)=NOMBRE DE BITS A 1, LA &ALISCO < (A)=NIVEAU DE MARQUAGE. JMP SPM800 < VERS LE MARQUAGE... < < MARQUAGE DU POINT COURANT : < SPM800: EQU $ BSR ASPRPS < MARQUAGE DU POINT (XS,YS)=(XR,YR) < AVEC LE NIVEAU (A)... < < ET SORTIE : < SPM999: EQU $ PLR A,B,X,Y RSR < < < A C C E S A U C A R A C T E R E C O U R A N T : < < SP2: EQU $ PSR B,X SP24: EQU $ LA XBUF < (A)=INDEX COURANT DU BUFFER, CP MAXBUF < EST-ON AU BOUT DU BUFFER (EN PARTICULIER < CAS DE LA PREMIERE LECTURE...) ??? JL SP21 < NON... STZ XBUF < OUI, ON SE RAMENE EN TETE DU BUFFER... SP23: EQU $ LAD DEMMT SVC 0 < ON LIT LE BLOC COURANT... JE SP22 < OK... LR X,A CPI '45 < EST-CE UN 'TAPE-MARK' ??? JNE SP29 < NON, AUTRE ERREUR... LAD DEMMT < OUI, ON TENTE DE RELIRE... SVC 0 < LECTURE DU BLOC COURANT... JE SP22 < OK, ON A SAUTE LE 'TAPE-MARK'... SP29: EQU $ QUIT 1 < ERREUR D'ASSIGNATION PROBABLEMENT... JMP SP23 SP22: EQU $ IC ADMT < PASSAGE AU BLOC SUIVANT... ACTD 3 < RECUPERATION DE LA 'BOX'... LR B,A < (A)=BOX... CP MAXBUF < ET VALIDATION... JLE SP28 < OK... QUIT 1 < !?!???!?! SP28: EQU $ LA XBUF < (A)=INDEX COURANT DU BUFFER... SP21: EQU $ IC XBUF < ET PASSAGE AU CARACTERE SUIVANT... LR A,X LBY &AXBUF < (A)=CARACTERE COURANT DU BUFFER : MASKCA:: VAL '003F < MASQUE PERMETTANT DE PRENDRE EN COMPTE < AUSSI BIEN L'EBCDIC QUE L'ASCI... ANDI MASKCA CPI "0" < EST-CE UN CHIFFRE ??? JGE SP27 < PEUT-ETRE... ORI '40 < NON, ON TENTE UNE CONVERSION EN < LETTRE (DE "A" A "F")... SP27: EQU $ ADRI -"0",A < CONVERSION DECIMALE : JAL SP25 < ERREUR... CPI BASE10-1 JLE SP26 < C'EST UN CHIFFRE (DE "0" A "9")... ADRI -"A"+"9"+1,A < CONVERSION HEXA-DECIMALE : CPI BASE10 JL SP25 < ERREUR... CPI BASE16-1 JLE SP26 < C'EST UNE LETTRE (DE "A" A "F")... SP25: EQU $ QUIT 1 < BERKK... SP26: EQU $ PLR B,X RSR < ET SORTIE... < < < C O N V E R S I O N H E X A - D E C I M A L E : < < SP1: EQU $ SLLD NBRHEX < DECALAGE DU CUMUL COURANT DANS 'B', BSR ASP2 < ACCES AU CARACTERE COURANT... ORR A,B < ET CUMUL... RSR :F :F < <<'SIOC CARTE RASTER 4'