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'
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.