NMPROC: VAL "VO" < NOM DU PROCESSEUR.
IDP "VO - RELEASE 03/03/1980"
EOT #SIP DEFINITION CMS5#
EOT #SIP DEF PROCESSEUR#
PROG
WORD IMAGE < ENTRY POINT DU GENERATEUR.
WORD 0
PIMAGE: EQU $ < P='12 !!!
LRP L
BR -2,L < ENTREE DANS LE PROCESSEUR.
EOT #SIP DEFINITION ITEM#
ITEM1: EQU ZERO+PILE-LTNI
ITEM2: EQU ZERO+PILE-LTNI-LTNI
PAGE
<
< PILE DU PROGRAMME :
<
SSTACK: VAL 60 < IL FAUT CE QU'IL FAUT...
STACK: DZS SSTACK
EOT #SIP IMAGE 256#
NOM: EQU ZERO+PILE+5-LNOM-2 < NOM DE L'IMAGE VIDEO.
IMAG: EQU NOM+LNOM+2 < IMAGE VIDEO.
IF ORDI-"S",XWOR%,,XWOR%
ENTIM: EQU IMAG-LENTIM < EN-TETE IMAGE (TRACE VIDEO SOLAR).
IMAG2: EQU IMAG+LIMAG < IMAGE2 EST EN SOLAR L'IMAGE SCRATCH
< SIMULEE. CECI DU FAIT QUE LES INTER-
< POLATIONS SONT FAITES PAR LE SYSTEME
< ET QUE PAR CONSEQUENT ON NE "SAIT"
< PLUS TRACER SUR DISQUE SCRATCH.
XWOR%: VAL 0
<
< VALIDATION DU FORMAT DE L'IMAGE (CARREE) :
<
X20: VAL 1024/DY < NBRE DE LIGNES/IMAGE.
X21: VAL CNMPL*16 < NBRE DE POINTS/LIGNE.
IF X20-X21,,X100,
IF ATTENTION : L'IMAGE N'EST PAS CARREE !!!
X100: VAL 0
<
< BUFFER DES SECTEURS SCRATCHES :
<
SECTOR: EQU STACK+SSTACK
DZS 128 < CELA PEUT TOUJOURS SERVIR !!!
PAGE
<
<
< L O C A L :
<
<
TABLE
M1: BYTE 2;'6D
ASCI "??"
M9: BYTE 5;'6D
ASCI "RAZ?"
M10: BYTE 35;'6D
ASCI "MODE (AD=1/SB=2/OR=3/AND=4/EOR=5)="
M4: BYTE 15;'6D
ASCI "GRAPHIQUE ZDC?"
M5: BYTE 14;'6D
ASCI "TAILLE POINT= "
M6: BYTE 17;'6D
ASCI "MEMOIRE SCRATCH "
M7: BYTE 2;"O";"N";0
M8: BYTE 3;"O";"F";"F"
M20: BYTE 9;'6D
ASCI "COULEUR="
M21: BYTE 6;'6D
ASCI "MODE="
LOCAL
LOC: EQU $
<
< RELAIS A METTRE EN TETE DU LOCAL AFIN
< D'ABSOLUTISER LES DEPLACEMENTS D'ACCES SIMPLIFIANT
< AINSI L'ECRITURE DES SOUS-PROGRAMMES EN OVERLAY
< IMPLEMENTES DANS L'ITEM2 :
<
IF ORDI-"S",XWOR%,,XWOR%
WORD -1
WORD -1
XWOR%: VAL 0
IF ORDI-"T",XWOR%,,XWOR%
< RESET 00 ('80)
ARESET: WORD RESET < MISE D'UN POINT A 0.
< SET 01 ('81)
ASET: WORD SET < MISE D'UN POINT A 1.
XWOR%: VAL 0
< INVER 10 ('82)
AINVER: WORD INVER < INVERSION D'UN POINT.
< TEST 11 ('83)
ATEST: WORD TEST < TEST DE L'ETAT D'UN POINT.
< EXISTENCE
IF ORDI-"S",XWOR%,,XWOR%
WORD -1
XWOR%: VAL 0
IF ORDI-"T",XWOR%,,XWOR%
AVOISE: WORD VOISE < TEST ETAT ET EXISTENCE.
XWOR%: VAL 0
<
< MESSAGES :
<
AM1: WORD M1
AM4: WORD M4
AM5: WORD M5
AM6: WORD M6
AM7: WORD M7
AM8: WORD M8
AM9: WORD M9
AM10: WORD M10
AM20: WORD M20
AM21: WORD M21
CURSOR: BYTE "N";0 < CARACTERE DE DEBLOCAGE DU
< CURSEUR (ERREUR A PRIORI).
DZS 2 < COORDONNEES Y ET X.
REP: DZS 2 < ENTREE DE NBRES HEXADECIMAUX.
<
< DEMANDES A CMS4 :
<
DEMSGN: WORD '0602 < CHARGEMENT DES OVERLAYS.
WORD BRANCH-ZERO*2
WORD ZERO-BRANCH+PILE-LTNI-LTNI*2
WORD -1
DEMCCI: WORD '0001 < APPEL DU CCI INTERACTIF.
DEMMEM: WORD '0004 < DEMANDE D'ALOCATION 8K MOTS.
RELMEM: WORD '0004 < DEMANDE D'ALLOCATION 4K MOTS.
WORD '4000
WORD '2000
IF ORDI-"S",XWOR%,,XWOR%
DEMM12: WORD '0004 < DEMANDE D'ALLOCATION 12K MOTS.
ATRSV: WORD TRSV < TRACE SEGMENT VIDEO SOLAR.
WORD '6000
XWOR%: VAL 0
DEMOUT: WORD '0202 < ECRITURE DES MESSAGES.
WORD 0
WORD 0
DEMIN: WORD '0101 < ENTREE SUR '01.
WORD REP-ZERO*2
WORD 4
DEMREP: WORD '0101 < LECTURE 1 CARACTERE REPONSE.
WORD REP-ZERO*2
WORD 1
OG: WORD '0103 < OPEN GRAPHIQUE DE '01.
CU: WORD '0106 < MISE EN FONCTION DU CURSEUR
WORD 0 < GRAPHIQUE DE '01 (AMDEM=0).
LCU: WORD '0109 < LECTURE CURSEUR GRAPHIQUE
WORD CURSOR-ZERO*2 < DE '01.
WORD 6
CG: WORD '0104 < CLOSE GRAPHIQUE DE '01.
IF ORDI-"T",XWOR%,,XWOR%
RDK: WORD '0C00 < LECTURE SCRATCH DU DISQUE.
WORD SECTOR-ZERO*2
WORD 128*2
WORD 0 < NUMERO DU SECTEUR.
WDK: WORD '0C02 < ECRITURE SCRATCH DU DISQUE.
WORD SECTOR-ZERO*2
WORD 128*2
WORD 0 < NUMERO DU SECTEUR.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
AEDKS: WORD EDKS < ECHANGE IMAGE2 <--> DK SCRATCH.
DMEDKS: WORD '0C00 < ECHANGE DK SCRATCH <--> IMAGE2.
DZS 1 < ADRESSE OCTETS MEMOIRE.
WORD 128*2 < COMPTE D'OCTETS.
DZS 1 < ADRESSE SECTEUR DK SCRATCH.
XWOR%: VAL 0
LOADI: WORD '0502 < RECUPERATION D'UNE IMAGE.
WORD NOM-ZERO*2
WORD LIMAG+LNOM+2*2
WORD 2*LNOM
DELI: WORD '0302 < DELETE D'UNE IMAGE.
WORD NOM-ZERO*2
WORD LIMAG+LNOM+2*2
WORD 2*LNOM
STORI: WORD '0402
WORD NOM-ZERO*2
WORD LIMAG+LNOM+2*2
WORD 2*LNOM
IF ORDI-"S",XWOR%,,XWOR%
STABIL: WORD '8A01 < DEMANDE DE STABILISATION IMAGE.
WORD IMAG-ZERO*2
WORD LIMAG*2
WORD TVPV < SUR LE PROCESSEUR VERT.
XWOR%: VAL 0
<
< CONSTANTES :
<
KIN: WORD -1 < COMPTEUR DES ENTRIES DANS KO.
NGE: WORD "GE" < NOM DU PROCESSEUR GE.
IF ORDI-"T",XWOR%,,XWOR%
ACNSYS: ASCI ":SYS"
XWOR%: VAL 0
NMOTS: WORD 2*LTNI < NBRE DE MOTS DE ITEM1+ITEM2.
ALIMAG: WORD LIMAG < NBRE DE MOTS DE L'IMAGE.
NMPL: WORD CNMPL < NBRE MOTS DE 16 BITS PAR LIGNE.
NLIG: WORD 1024/DY-1 < NBRE DE LIGNES/IMAGE-1.
NPPL: WORD CNMPL*16-1 < NBRE DE POINTS/LIGNE-1.
ITEST: WORD 1 < 0 : TEST SUR LA VALEUR 0 DES POINTS,
< 1 : TEST SUR VALEUR 1 DES POINTS.
X: VAL 1 < COORDONNEE X D'UN POINT.
Y: VAL 0 < COORDONNEE Y D'UN POINT.
POINT: DZS 2 < POINT COURANT CURSEUR VIDEO.
IF ORDI-"T",XWOR%,,XWOR%
TEMPO: WORD '400*2 < TEMPO DE CLIGNOTEMENT VIDEO.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
TEMPO: WORD 5*2 < NOMBRE DE CLIGNOTEMENTS CURSEUR.
XWOR%: VAL 0
INDIC: WORD 0 < RESULTAT (0/1) DES TESTS
< VIRTUELS.
SAVE: WORD 0 < VARIABLE TEMPORAIRE DE 'PS'.
INDM: WORD 0 < 0 : SCRATCH INACTIVE.
C3: WORD 3 < POUR MULTIPLIER
C4: WORD 4 < PAR 4/3...
<
< SEGMENT D'INTERFACE ZDC :
<
NOMSEG: WORD 0 < MOT DE VALIDATION.
SEG: DZS 4
SEGORG: EQU SEG+0 < ORIGINE D'UN SEGMENT.
SEGEXT: EQU SEG+2 < EXTREMITE D'UN SEGMENT.
LONSEG: VAL $-NOMSEG*2
IF ORDI-"T",XWOR%,,XWOR%
AIMAGZ: WORD IMAG-1,X < RELAI POUR RAZER L'IMAGE.
ADICO: WORD DICO < DICHOTOMIE D'UN SEGMENT.
XWOR%: VAL 0
ATRACE: WORD TRACE < TRACE DICHOTOMIQUE D'UN
< SEGMENT VIDEO.
ATRACV: WORD TRACEV < IDEM A 'TRACE' SANS 'ZDC'.
IF ORDI-"S",XWOR%,,XWOR%
AIMAG2: WORD IMAG2-1,X < RELAI DE RAZ IMAGE2.
XWOR%: VAL 0
IGRAPH: WORD 0 < 0=EMETTRE PAR LA ZDC 'SEG'.
<
< INTERFACE D'ACCES ZDC :
<
STOGS: WORD '000A
WORD NOMSEG-ZERO*2
WORD LONSEG
WORD 'FFC0
GETGS: WORD '0008
WORD NOMSEG-ZERO*2
WORD SEG-NOMSEG*2
WORD 'C000
ASTORE: WORD STORE < ENVOI SEGMENT DANS ZDC.
<
< RELAIS DIVERS :
<
ATYP: WORD ITEM2+IINDIC < ACCES AU TYPE DE L'ITEM2.
AITEM2: WORD ITEM2+LTN < POINT D'ENTREE D'UN SOUS-
< PROGRAMME EN OVERLAY
< DANS L'ITEM2.
ASECT: WORD SECTOR-1,X < RELAI DE RAZ BUFFER SECTEUR.
AIMAG1: WORD IMAG,X < ACCES A L'IMAGE VIDEO COURANTE.
AIMAG0: WORD 0 < POUR METTRE LES SECTEURS
< SCRATCH DANS L'IMAGE COURANTE.
ASECT1: WORD SECTOR,X < ACCES AU SECTEUR COURANT.
AIMAG: WORD IMAG-1,X < RELAI DE RAZ IMAGE COURANTE.
IF ORDI-"S",XWOR%,,XWOR%
AEIC: DZS 1 < ADRESSE MOT EN-TETE IMAGE COURANTE
< IMAGE1 OU IMAGE2.
XWOR%: VAL 0
AREP: WORD REP,X < RELAI D'ACCES AUX REPONSES.
ACLIGN: WORD CLIGN < CLIGNOTEMENT DES POINTS VIDEO.
IF ORDI-"T",XWOR%,,XWOR%
ASETV: WORD SETV < MISE D'UN POINT VIRTUEL A 1.
ARSETV: WORD RSETV < MISE D'UN POINT VIRTUEL A 0.
AINVEV: WORD INVEV < INVERSION D'UN POINT VIRTUEL.
ATESTV: WORD TESTV < TEST D'UN POINT VIRTUEL.
AXISTV: WORD XISTV < EXISTENCE VIRTUELLE...
APS: WORD PS < SBT.
APR: WORD PR < RBT.
API: WORD PI < IBT.
APT: WORD PT < TBT.
AOP: WORD 0 < PS/PR/PI/PT SUIVANT LES BESOINS.
XWOR%: VAL 0
AOVL: WORD OVL < CHARGEMENT DES OVERLAYS.
IF ORDI-"T",XWOR%,,XWOR%
AEXIST: WORD EXIST < EXISTENCE D'UN POINT.
XWOR%: VAL 0
APILE: WORD PILE-1 < PILE DE SMC.
ASTACK: WORD STACK-1 < PILE DE KO.
AI1: WORD ITEM1-1,X < RELAI DE RAZ ITEM1.
AI2: WORD ITEM2-1,X < RELAI DE RAZ ITEM1+ITEM2.
IF ORDI-"T",XWOR%,,XWOR%
ASP3: WORD SP3 < STABILISATION IMAGE VIDEO
< SI :SYS, 0 SINON.
XWOR%: VAL 0
AGOGE: WORD GOGE < RETOUR A GE.
APRINT: WORD PRINT < EDITION DES MESSAGES.
AINTER: WORD INTER < INTERROGATION OUI/NON.
AHEX: WORD HEX < CONVERSION ASCI --> BINAIRE.
ACOORD: WORD COORD < ENTREE COORDONNE X/Y.
ACOEF: WORD COEF < ENTREE RAPPORT DE ZOOM.
APAS: WORD PAS < ENTREE D'UN PAS (#0).
ACUR: WORD CUR < ENTREE DU CURSEUR GRAPHIQUE.
IF ORDI-"T",XWOR%,,XWOR%
ACONTI: WORD CONTI < RETOUR DE LA ZONE SCRATCH
< EN MEMOIRE.
XWOR%: VAL 0
ARAZDK: WORD RAZDK < RAZ DE LA ZONE SCRATCH DK.
IF ORDI-"S",XWOR%,,XWOR%
OPER: DZS 1 < OPERATION CHOISIE (REPONSE A LA
< QUESTION MODE...) :
< 1=AD, 2=SB, 3=OR, 4=AND, 5=EOR.
MODI: DZS 1 < MODE DEMANDE POUR L'INTERPOLATION
< ('TRSV') :
< = -1 : IBT,
< = -2 : RBT,
< = -3 : SBT.
XWOR%: VAL 0
IF ORDI-"T",XWOR%,,XWOR%
AINS: WORD INS < INSTRUCTION VARIABLE DE 'PS'.
ACODE: WORD CODE,X < LISTE DES CODES POSSIBLES
< POUR 'INS' (L'OCTET 0
< EN CONTIENT LE NOMBRE).
CODE: EQU $
BYTE 5;'89;'88;'92;'93;'94
XWOR%: VAL 0
ACOM: WORD COM1,X < RECONNAISSANCE DES COMMANDES.
ALOOP: WORD LOOP < ENTREE DES COMMANDES.
<
< CONSTANTES SPIRALES :
<
NM: WORD 1 < NBRE DE PAS DE GENERATION
< DE LA SPIRALE.
IF ORDI-"T",XWOR%,,XWOR%
NX: WORD 1 < POUR CALCULER LA LONGUEUR
< HORIZONTALE.
NY: WORD 1 < ID. SUR LA VERTICALE.
SNX: WORD 0 < DECOMPTEUR A PARTIR DE NX.
SNY: WORD 0 < DECOMPTEUR A PARTIR DE NY.
ASPI: WORD SPIR < TRACE D'UNE SPIRALE.
AVALXY: WORD VALXY < VALIDATION DE (X,Y); SI OK,
< TRACE DU POINT.
AVALN: WORD VALN < VALIDATION DE NX ET NY PAR
< RAPPORT A NM.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
X1: DZS 1 < POUR TRACE SEGMENT.
Y1: DZS 1 < IDEM.
X2: DZS 1 < IDEM.
Y2: DZS 1 < IDEM.
IPCONF: DZS 1 < INDICATEUR POINTS CONFONDUS :
< = 0 : POINTS DISTINCTS,
< = 1 POINTS CONFONDUS.
< UTILISE LORSQU'ON DOIT TRACER UN
< SEGMENT D'UN POINT P1 VERS UN POINT P2,
< SI LES DEUX POINTS SONT CONFONDUS, IL
< EST INUTILE D'APPELER LE SYSTEME POUR
< INTERPOLER.
<
< DONNEES D'ACCES AUX 8
< COULEURS SIMULTANEMENT :
<
NCOOL:: VAL 3 < NOMBRE DE PROCESSEURS DE COULEURS.
MODEV: WORD 0 < =0 : MODE 8 COULEURS "OFF",
< #0 : DONNE ALORS LE MODE DE TRACE (VOIR
< LA LISTE 'EVIDEO' ET LE MOT 'COLOR'.
COLOR: WORD 0 < COULEUR DU TRACE (0-8).
AVIDEO: WORD EVIDEO,X < TABLE DE TRANSCODAGE ENTRE LES MODES
< DEMANDES, ET LA COMMANDE DE 'DKU'.
XWOR%: VAL 0
<
< MISE EN PLACE DES ROUTINES DE TRAITEMENT DES POINTS :
< (X=-3 : SET / X=-2 : RESET / X=-1 : INVER)
<
IF ORDI-"T",XWOR%,,XWOR%
LRR: WORD $+3+1,X;SET;RESET;INVER
LRV: WORD $+3+1,X;SETV;RSETV;INVEV
APOINT: WORD 0 < CONTIENT L'UNE DES 6 ADRESSES
< PRECEDENTES.
XWOR%: VAL 0
MODE: WORD -3 < MODE 'SET' A PRIORI; PERMET
< DE POSITIONNER 'APOINT'.
<
< CONSTANTES DICHOTOMIQUES :
<
DICOX: WORD 0 < X DU POINT VIDEO COURANT M.
DICOY: WORD 0 < Y DU POINT VIDEO COURANT M.
DICOX1: WORD 0 < X DE L'ORIGINE VIDEO COURANTE M1.
DICOY1: WORD 0 < Y DE L'ORIGINE VIDEO COURANTE M1.
DICOX2: WORD 0 < X EXTREMITE VIDEO COURANTE M2.
DICOY2: WORD 0 < Y EXTREMITE VIDEO COURANTE M2.
IF ORDI-"T",XWOR%,,XWOR%
<
< TOPOGRAPHIE MEMOIRE :
<
NSEC: VAL LIMAG/128 < NRE DE SECTEURS POUR UNE IMAGE.
XSECR: VAL 2*LTNI-128
NSECR: VAL XSECR/128 < NBRE DE SECTEURS RESIDANTS
< SI PAS DE TRANSFORMATION.
XSECRT: VAL LTNI-128
NSECRT: VAL XSECRT/128 < NBRE DE SECTEURS RESIDANTS
< SI TRANSFORMATION.
ANCIEN: WORD 1 < EST INCREMENTE DE 1 A CHAQUE
< MODIFICATION DE LA MEMOIRE
< VIRTUELLE (CONSTITUE DONC
< UNE HORLOGE).
ALS: WORD LSECT-1,X < RELAI D'INITIALISATION DE
< LA LISTE LSECT.
ALSECT: WORD LSECT,X < REALI D'ACCES A LSECT.
ATOPO: WORD TOPO-1,X < RELAI D'ACCES A TOPO.
ASECTC: WORD 0 < RELAI COURANT D'ACCES A UN
< SECTEUR MANIPULE.
AUSE: WORD USE-1,X < RELAI D'ACCES A USE.
INFINI: WORD '7FFF
CSECT: WORD 0 < MEMORISE LE SECTEUR COURANT.
WDKT: WORD '0C02 < ECRITURE 1 SECTEUR TOPO.
WORD 0
WORD 128*2
WORD 0
RDKT: WORD '0C00 < LECTURE 1 SECTEUR TOPO.
WORD 0
WORD 128*2
WORD 0
ABUF1: WORD PILE-XSECR/128*128*2
< @OCTET DU 1ER BUFFER LIBRE.
ABUF: WORD PILE-XSECR/128*128*2
< 1ER BUFFER LIBRE SI PAS TRANS.
ABUFT: WORD PILE-XSECRT/128*128*2
< 1ER BUFFER LIBRE SI TRANS.
ANSECR: WORD NSECR < NBRE DE SECTEURS RESIDANTS
< INITIALISE SUR 'PAS TRANS'.
AWSE: WORD WSE < ROUTINE DE REECRITURE
< D'UN SECTEUR TOPO.
AVIRE: WORD VIRE < ROUTINE SUPPRIMANT LA TOPO.
ARESID: WORD RESID < REND LE SECTEUR SCRATCH (B)
< RESIDENT EN MEMOIRE.
<
< LISTE DES SECTEURS REELS (DE 0 A NSEC-1) :
<
LSECT: EQU $
DO NSEC
WORD -1 < INITIALEMENT NON RESIDENT.
<
< LISTE D'OCCUPATION DES BUFFERS (DE 1 A NSECR) :
<
TOPO: EQU $
DO NSECR
WORD -1 < INOCCUPE INITIALEMENT.
<
< COMPTEUR D'USAGE DES BUFFERS :
<
USE: EQU $
DO NSECR
WORD 0 < INUTILISE INITIALEMENT.
XWOR%: VAL 0
<
< LISTE DES COMMANDES RECONNUES :
<
COM1: EQU $
WORD "A";GENA
WORD "B";GENB
WORD "+";GENS
WORD "-";GENR
WORD "I";GENI
WORD "0";GEN0
WORD "1";GEN1
WORD "2";GEN2
WORD "F";GENF
WORD "S";GENE
WORD "V";GENV
WORD "W";GENW
WORD "Z";GENZ
WORD "T";GENT
WORD "R";GENCCI
WORD "M";GENM
IF ORDI-"S",XWOR%,,XWOR%
WORD "5";GEN5
WORD "6";GEN6
WORD "7";GEN7
WORD "K";GENCOL
WORD "L";GENMOD
XWOR%: VAL 0
WORD -1 < FIN DE LISTE.
EVIDEO: EQU $ < MODE :
WORD '0000 < =0 : "OFF",
WORD '0180 < =1 : "OR" FLOU,
WORD '0080 < =2 : "AND" FLOU,
WORD 'FF80 < =3 : "EOR" FLOU,
WORD '01B0 < =4 : "FORCAGE NIVEAU",
WORD '01F0 < =5 : "NE TRACER QUE SUR LE NOIR",
WORD '0380 < =6 : "OR" BINAIRE,
WORD '0280 < =7 : "AND" BINAIRE,
WORD 'FD80 < =8 : "EOR" BINAIRE.
LVIDEO:: VAL $-EVIDEO-1
PAGE
PROG
<
<
< E D I T I O N D ' U N M E S S A G E :
<
<
< ARGUMENT :
< A=@MESSAGE.
<
<
PRINT: EQU $
PSR C,X
LR A,C < C=@MESSAGE.
ADR A,A
ADRI 1,A < A=@OCTET DU MESSAGE.
STA DEMOUT+1
LBY 0,C < A=LONGUEUR DU MESSAGE.
STA DEMOUT+2
LAD DEMOUT
SVC 0 < EDITION DU MESSAGE.
PLR C,X
RSR
<
<
< I N T E R R O G A T I O N :
<
<
< ARGUMENT :
< A=@MESSAGE A EMETTRE.
<
<
< RESULTAT :
< B=0 : REPONSE=OUI,
< 1 : REPONSE=NON,
< CARRY POSITIONNE PAR UN 'CPZR B'.
<
<
INTER1: EQU $
LR Y,A < RESTAURE A=@MESSAGE.
INTER: EQU $
LR A,Y < SAVE Y=@MESSAGE.
BSR APRINT < EMISSION DU MESSAGE (A).
LAD DEMREP
SVC 0 < ENTREE DE LA REPONSE.
LBI 0 < B=0 (OUI A PRIORI).
LBY REP < A=CARACTERE REPONDU.
CPI "O"
JE INTER2 < OUI.
LBI 1 < B=1 (NON A PRIORI).
CPI "N"
JNE INTER1 < INCOMPREHENSIBLE...
INTER2: EQU $
CPZR B < POSITIONNEMENT CODES CONDITION.
RSR
<
<
< E N T R E E C U R S E U R
< G R A P H I Q U E :
<
<
< RESULTAT :
< SI LE CARACTERE FRAPPE N'EST PAS 'C',
< X,Y=COORDONNE VIDEO DU CURSEUR GRAPHIQUE,
< POUR 'C', LE PROGRAMME REBOUCLE EN
< CLIGNOTANT.
<
<
CUR: EQU $
LAD OG
SVC 0
LAD CU
SVC 0
LAD LCU
SVC 0
IF ORDI-"T",XWOR%,,XWOR%
LA ASP3
JAE CUR2 < ON N'EST PAS SOUS :SYS..
WORD '1EC5 < SOUS :SYS, ON STABILISE IMAGE.
CUR2: EQU $
XWOR%: VAL 0
LA CURSOR+1 < Y(CURSEUR).
MP C4 < POUR ATTEINDRE
DV C3 < TOUTE LA VIDEO...
SLRS DEDY
SB NLIG
NGR A,Y < Y(VIDEO).
LA CURSOR+2 < X(CURSEUR).
SLRS DEDX
LR A,X < X(VIDEO).
LBY CURSOR < A=CARACTERE DE DEBLOCAGE.
CPI "C" < EST-CE UN CLIGNOTEMENT ???
JNE CUR3 < NON - ALLER VERS LA SORTIE.
BSR ACLIGN < OUI - CLIGNOTEMENT DU POINT (X,Y).
JMP CUR < ET ON REBOUCLE.
CUR3: EQU $
STX POINT+X < SAVE LES COORDONNEES
STY POINT+Y < DU CURSEUR VIDEO.
RSR < NON, ON SORT...
PAGE
IF ORDI-"T",XWOR%,,XWOR%
<
<
< T R A C E D I C H O T O M I Q U E D ' U N S E G M E N T :
<
<
DICO: EQU $
LA DICOX1 < A=X1.
AD DICOX2 < A=X1+X2.
SLRS 1 < A=(X1+X2)/2.
STA DICOX < X DU MILIEU DE M1M2.
LA DICOY1 < A=Y1.
AD DICOY2 < A=Y1+Y2.
SLRS 1 < A=(Y1+Y2)/2.
STA DICOY < Y DU MILIEU DE M1M2.
<
< POSITION DE M PAR RAPPORT A M1 :
<
SB DICOY1 < A=Y-Y1.
JANE DICO31 < M#M1.
LA DICOX < A=X.
SB DICOX1 < A=X-X1.
JAE DICO32 < M=M1.
<
< POSITION DE M PAR RAPPORT A M2 :
<
DICO31: EQU $
LA DICOY < A=Y.
SB DICOY2 < A=Y-Y2.
JANE DICO30 < M#M2 ET M#M1.
LA DICOX < A=X.
SB DICOX2 < A=X-X2.
JANE DICO30 < M#M2 ET M#M1.
<
< CAS OU M=M1 OU M=M2 :
<
DICO32: EQU $
LX DICOX
LY DICOY
BSR ASPI < SPIRALE CENTREE SUR M=(M1+M2)/2.
RSR < ARRET PROVISOIRE DE LA DICHOTOMIE
< DESCENDANTE.
<
< CAS OU M#M1 ET M#M2 :
<
DICO30: EQU $
LA DICOX2 < A=X2.
LB DICOY2 < B=Y2.
PSR A,B < SAVE LE POINT M2 COURANT.
LA DICOX < A=X.
STA DICOX2 < X2<--X.
LA DICOY < A=Y.
STA DICOY2 < Y2<--Y.
BSR ADICO < DICHOTOMIE SUR LE SEGMENT M1M.
LX DICOX2 < X=X2.
LY DICOY2 < Y=Y2.
BSR ASPI < SPIRALE CENTREE SUR M2.
STX DICOX1 < X1<--X2.
STY DICOY1 < Y1<--Y2.
PLR A,B < RESTAURATION DU POINT M2 APRES
< LE CHANGEMENT DU POINT M1.
STA DICOX2 < RESTAURE X2.
STB DICOY2 < RESTUARE Y2.
JMP DICO < VERS LA POURSUITE DE LA DICHOTOMIE.
XWOR%: VAL 0
<
<
< T R A C E D ' U N S E G M E N T V I D E O :
<
<
TRACEV: EQU $
LA INDM
TBT 15 < SCRACTCH EST-ELLE ACTVIVE ???
JNC NTRACV < NON, RIEN A FAIRE...
IF ORDI-"S",XWOR%,,XWOR%
<
< CHOIX MODE DE TRACE POUR L'INTERPOLATEUR ('MODI') SUR IMAGE2
< EN FONCTION DE 'OPER' ET 'MODE' :
<
< - SI 'MODE' = -1 (INVERSION) ON FERA 'MODI'=IBT, QUEL QUE SOIT OPER,
< - SI 'MODE' = -2 (NOIR) ON FERA 'MODI'=RBT, QUEL QUE SOIT OPER,
< - SI 'MODE' = -3 (BLANC) ON FERA :
< - 'MODI'=SBT SI 'OPER'=OR,
< - 'MODI'=IBT SI 'OPER'=EOR,
< - RIEN DU TOUT SI 'OPER'=AND.
< - NOTA: SI 'OPER' = AD OU SB, ON NE FAIT JAMAIS RIEN
< SUR IMAGE2.
<
LRM A
WORD IMAG2-LENTIM < ADRESSE MOT EN-TETE IMAGE COURANTE,
STA AEIC < POUR 'TRSV'.
<
STZ MODI < VALEUR INITIALE.
LA OPER
ADRI -3,A
JAL NTRACV < SI 'OPER' = AD OU SB, ON NE FAIT RIEN.
< ON EST SUR ICI QUE 3 <= 'OPER' <= 5.
LA MODE
CPI -1 < TEST 'MODE' :: IBT.
JE TRAIBT
CPI -2 < TEST 'MODE' :: RBT.
JE TRARBT
< ICI, 'MODE' = SBT.
LA OPER < VOYONS DONC 'OPER'.
CPI 4
JE NTRACV < C'EST AND, RIEN A FAIRE...
CPI 5
JE TRAIBT < C'EST EOR.
< ICI, 'MODE' = SBT ET 'OPER' = OR.
TRASBT: EQU $ < FAIRE 'MODI' = -3 ('SBT').
DC MODI
TRARBT: EQU $ < FAIRE 'MODI' = -2 ('RBT').
DC MODI
TRAIBT: EQU $ < FAIRE 'MODI' = -1 ('IBT').
DC MODI
XWOR%: VAL 0
PSR X,Y,C
JMP TRACE1 < IDEM A 'TRACE' MAIS IGNORE
< SYSTEMATIQUEMENT LA 'ZDC' !!!
TRACE: EQU $
IF ORDI-"S",XWOR%,,XWOR%
LA MODE
STA MODI < 'MODI' = 'MODE' (TRACE "REEL").
<
LRM A
WORD ENTIM < ADREESSE EN-TETE IMAGE1 POUR 'TRSV'.
STA AEIC
XWOR%: VAL 0
PSR X,Y,C
<
< MODE GRAPHIQUE ???
<
CPZ IGRAPH
JNE TRACE1 < NON, JUSTE VIDEO.
LA DICOX1
SLLS DEDX
STA SEGORG+X < X(ORIGINE GRAPHIQUE).
LA DICOY1
SB NLIG
NGR A,A
SLLS DEDY
STA SEGORG+Y < Y(ORIGINE GRAPHIQUE).
LA DICOX2
SLLS DEDX
STA SEGEXT+X < X(EXTREMITE GRAPHIQUE).
LA DICOY2
SB NLIG
NGR A,A
SLLS DEDY
STA SEGEXT+Y < Y(EXTREMITE GRAPHIQUE).
BSR ASTORE < ENVOI DU SEGMENT EN ZDC.
TRACE1: EQU $
IF ORDI-"S",XWOR%,,XWOR%
<
< T R A C E D ' U N " S E G M E N T " V I D E O E N
<
< S O L A R.
<
<
< ON VA REMPLIR DEUX CARRES DE TAILLE 'NM' * 'NM' CENTRES
< RESPECTIVEMENT EN M1 ET M2 (DICOX1,DICOY1),(DICOX2,DICOY2)
< EN PROCEDANT COMME CECI:
< EN CHAQUE POINT P1 DU CARRE 1 ON TIRE UN TRAIT VERS LE POINT
< CORRESPONDANT P2 DU CARRE 2.
<
PSR A,B,X
<
< POSITIONNEMENT DE L'INDICATEUR 'IPCONF' : POINTS CONFONDUS.
<
STZ IPCONF < DISTINCTS A PRIORI.
LA DICOX1
CP DICOX2
JNE TRAC3
LA DICOY1
CP DICOY2
JNE TRAC3
IC IPCONF < POINTS CONFONDUS.
TRAC3: EQU $
LA NM < TAILLE DEMANDEE.
ADRI -1,A
SLRD 16+1 < 'B' = E((NM-1)/2).
<
< ON VA PARTIR DU POINT INFERIEUR GAUCHE DU CARRE A DECRIRE.
<
< X1,Y1 = COORDONNEES POINT INFERIEUR GAUCHE DU CARRE 1 (M1).
LA DICOX1
SBR B,A
STA X1
LA DICOY1
ADR B,A
STA Y1
< X2,Y2 = COORDONNEES POINT INFERIEUR GAUCHE DU CARRE 2 (M2).
LA DICOX2
SBR B,A
STA X2
LA DICOY2
ADR B,A
STA Y2
<
CPZ IPCONF < TEST POINTS CONFONDUS.
JNE TRAC5 < POINTS CONFONDUS, VERS TRAITEMENT
< SIMPLIFIE.
<
< ON VA MAINTENANT PARCOURIR POINT PAR POINT CES DEUX CARRES, ET
< RELIER DEUX A DEUX LES POINTS CORRESPONDANTS.
<
LX NM < TAILLE DEMANDEE.
TRAC1: EQU $
PSR X
LA X1
LB X2
PSR A,B < SAVE LES X.
LX NM < POUR AVOIR 'NM' * 'NM'.
TRAC2: EQU $
BSR ATRSV < TRACE SEGMENT P1-P2.
IC X1
IC X2
JDX TRAC2 < POINT SUIVANT.
PLR A,B < RESTAURATION DES X.
STA X1
STB X2
DC Y1
DC Y2
PLR X
JDX TRAC1
JMP TRAC4
<
TRAC5: EQU $
<
< POINTS CONFONDUS, TRAITEMENT SIMPLIFIE :
< ON VA SE CONTENTER DE REMPLIR UN CARRE DE SURFACE
< 'NM' * 'NM' CENTRE EN (DICOX1,DICOY1).
<
LA X1
AD NM
ADRI -1,A
STA X2
LX NM < NM SEGMENTS HORIZONTAUX A TRACER.
TRAC6: EQU $
BSR ATRSV < TRACE 1 SEGMENT HORIZONTAL DU CARRE.
DC Y1
DC Y2
JDX TRAC6
<
TRAC4: EQU $
CPZ MODEV < 3 OU 8 COULEURS ???
JNE TRAC10 < 8 COULEURS...
LAD STABIL < 3 COULEURS :
SVC 0 < VISUALISATION...
TRAC10: EQU $
PLR A,B,X
XWOR%: VAL 0
IF ORDI-"T",XWOR%,,XWOR%
<
< TRACE DICHOTOMIQUE DU SEGMENT :
<
LX DICOX1 < X=X1.
LY DICOY1 < Y=Y1.
PSR X,Y < SAVE M1.
BSR ASPI < SPIRALE CENTREE SUR M1.
LA DICOX1
CP DICOX2
JNE TRACE2 < M1#M2 : TRACE D'UN SEGMENT...
LA DICOY1
CP DICOY2
JE TRACE3 < M1=M2 : TRACE UN POINT SEUL :
< C'EST FINI....
TRACE2: EQU $
BSR ADICO < TRACE DU SEGMENT M1M2.
LX DICOX2 < X=X2.
LY DICOY2 < Y=Y2.
BSR ASPI < SPIRALE CENTREE SUR M2.
TRACE3: EQU $
PLR X,Y
STX DICOX1 < RESTORE M1.
STY DICOY1 < RESTORE M1.
XWOR%: VAL 0
PLR X,Y,C
NTRACV: EQU $
RSR
IF ORDI-"T",XWOR%,,XWOR%
<
<
< V A L I D A T I O N N X E T N Y :
<
<
< RESULTAT :
< A=0 SI NX EY NY SONT OK.
<
<
VALN: EQU $
LA NX
CP NM
JG VALN1 < NX INVALIDE.
LA NY
CP NM
JG VALN1 < NY INVALIDE.
LAI 0 < NX ET NY VALIDES.
VALN1: EQU $
RSR
<
<
< V A L I D A T I O N E T T R A C E
< D U P O I N T ( X , Y ) :
<
<
< ARGUMENT :
< X,Y=COORDONNEES D'UN POINT A VALIDER.
<
<
VALXY: EQU $
LR X,A
JAL VALXY1 < X INVALIDE.
CP NPPL
JG VALXY1 < X INVALIDE.
LR Y,A
JAL VALXY1 < Y INVALIDE.
CP NLIG
JG VALXY1 < Y INVALIDE.
BSR APOINT < OK, TRACE DU POINT (X,Y).
VALXY1: EQU $
RSR
<
<
< T R A C E D ' U N E S P I R A L E :
<
<
< ARGUMENT :
< X,Y=COORDONNEES DU CENTRE.
<
<
SPIR: EQU $
PSR X,Y < SAVE LE CENTRE.
LAI 1
STA NX
STA NY
SPIR1: EQU $
<
< X=X+1 NX FOIS :
<
LA NX
STA SNX < DECOMPTEUR HORIZONTAL.
SPIR2: EQU $
BSR AVALXY < TRACE EVENTUEL DE (X,Y).
ADRI 1,X < X=X+1.
DC SNX
JNE SPIR2 < PARCOURS HORIZONTAL.
IC NX < SI FIN, ON ALLONGE LA LONGUEUR
< DE LA PROCHAINE HORIZONTALE.
BSR AVALN < VALIDATION NX.
JANE SPIRF < C'EST FINI...
<
< Y=Y+1 NY FOIS :
<
LA NY
STA SNY < DECOMPTEUR VERTICAL.
SPIR12: EQU $
BSR AVALXY < TRACE EVENTUEL DE (X,Y).
ADRI 1,Y < Y=Y+1.
DC SNY
JNE SPIR12 < PRACOURS VERTICAL.
IC NY < SI FIN, ON ALLONGE LA LONGUEUR
< DE LA PROCHAINE VERTICALE.
BSR AVALN < VALIDATION NY.
JANE SPIRF < C'EST FINI...
<
< X=X-1 NX FOIS :
<
LA NX
STA SNX
SPIR22: EQU $
BSR AVALXY < TRACE EVENTUEL DE (X,Y).
ADRI -1,X < X=X-1.
DC SNX
JNE SPIR22 < PARCOURS HORIZONTAL.
IC NX < ALLONGEMENT HORIZONTAL.
BSR AVALN < VALIDATION NX.
JANE SPIRF < C'EST FINI...
<
< Y=Y-1 NY FOIS :
<
LA NY
STA SNY
SPIR32: EQU $
BSR AVALXY < TRACE EVENTUEL DE (X,Y).
ADRI -1,Y < Y=Y-1.
DC SNY
JNE SPIR32 < PARCOURS VERTICAL.
IC NY < ALLONGEMENT VERTICAL.
BSR AVALN < VALIDATION NY.
JAE SPIR1 < ET ON CONTINUE...
<
< C'EST FINI :
<
SPIRF: EQU $
IF ORDI-"S",XWOR%,,XWOR%
LAD STABIL < STABILISATION DE L'IMAGE.
SVC 0
XWOR%: VAL 0
PLR X,Y
RSR
XWOR%: VAL 0
<
<
< E N V O I E N Z D C :
<
<
STORE: EQU $
LAD GETGS
SVC 0
CPZ NOMSEG < LE SEGMENT PRECEDENT A-T'IL
< ETE ACQUITTE ???
JNE STORE < NON, ON ATTEND.
DC NOMSEG < OUI, VALIDONS LE SUIVANT.
LAD STOGS
SVC 0 < QUE L'ON ENVOIE.
RSR
PAGE
IF ORDI-"S",XWOR%,,XWOR%
<
< T R A C E V I D E O D ' U N S E G M E N T E N S O L A R.
<
< (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !).
<
<
<
TRSV: EQU $
<
< PROLOGUE: SAUVEGARDE DES REGISTRES UTILISES ET SAUVEGARDE DANS LA PILE
< (QUI EST GRANDE !) DE LA ZONE QU'ON VA UTILISER POUR CONSTRUIRE L'EN-TETE
< DE L'IMAGE.
<
PSR A,B,X,W
<
LR K,B
ADRI 1,B < ZONE RECEPTRICE.
LA AEIC < ZONE EMETTRICE (A SAUVER DANS LA PILE).
LR A,W < POUR BASER L'EN-TETE DE L'IMAGE.
LXI LENTIM < LONGUEUR EN-TETE IMAGE.
MOVE
ADRI LENTIM,K < MISE A JOUR DE 'K'.
<
< ICI, ON A SAUVEGARDE LA ZONE DE CONSTRUCTION DE L'EN-TETE DANS LA PILE,
< ON VA CONSTRUIRE L'EN-TETE ET FAIRE LA DEMANDE D'INTERPOLATION VIDEO.
<
< CONVERSION DES COORDONNEES VIDEO EN COORDONNEES GRAPHIQUES.
<
LA X1 < X1 VIDEO.
SLLS DEDX
STA DEPX1,W < X1 GRAPHIQUE.
LA X2 < X2 VIDEO.
SLLS DEDX
STA DEPX2,W < X2 GRAPHIQUE.
LA Y1 < Y1 VIDEO.
SB NLIG
NGR A,A
SLLS DEDY
STA DEPY1,W < Y1 GRAPHIQUE.
LA Y2 < Y2 VIDEO.
SB NLIG
NGR A,A
SLLS DEDY
STA DEPY2,W < Y2 GRAPHIQUE.
<
< DISCRIMINATION 3/8 COULEURS :
<
CPZ MODEV < ALORS ???
JE SEG10 < 3 COULEURS (ANCIEN MODE)...
<
< 8 COULEURS (NOUVEAU MODE) :
<
LA STABIL+1
LB STABIL+2
LX STABIL+3
PSR A,B,X,W < SAUVEGARDE DE LA DEMANDE 'STABIL'.
LRM A,B,W
WORD ENTIM-ZERO*2 < (A)=ADRESSE DE L'EN-TETE (EN OCTETS),
WORD LENTIM*2 < (B)=LONGUEUR DE L'EN-TETE,
WORD ENTIM < (W)=ADRESSE DE L'EN-TETE (EN MOTS).
STA STABIL+1 < MISE-A-JOUR
STB STABIL+2 < DE LA
STZ STABIL+3 < DEMANDE 'STABIL'.
LA MODEV < ACCES AU MODE DE TRACE,
OR COLOR < CONCATENATION DE LA COULEUR,
STA DEPMOD,W < ET MISE DANS L'EN-TETE...
LRM A
WORD '7F00
STA DEPSPA,W
LAD STABIL
SVC 0 < ET TRACE...
PLR A,B,X,W
STX STABIL+3 < RESTAURATION
STB STABIL+2 < DE LA
STA STABIL+1 < DEMANDE 'STABIL'...
JMP SEG11 < ET SORTIE...
<
< 3 COULEURS (ANCIEN MODE) :
<
SEG10: EQU $
<
< POSITIONNEMENT DU MODE DE TRACE ('SBT'/'RBT'/'IBT').
<
STZ DEPMOD,W < MODE TRACE = 'RBT' A PRIORI.
LA MODI < MODE DEMANDE.
CPI -2
JE SEG1 < C'EST 'RBT'.
CPI -3
JE SEGS < C'EST 'SBT'.
DC DEPMOD,W < C'EST 'IBT'.
JMP SEG1
SEGS: EQU $
IC DEPMOD,W < C'EST 'SBT'.
SEG1: EQU $
LA AEIC
SLLS 1 < ADRESSE OCTET EN-TETE IMAGE.
LRM X
WORD LENTIM+LIMAG*2 < LONGUEUR OCTETS EN-TETE + IMAGE.
STA STABIL+1
STX STABIL+2
LB STABIL+3 < SAVE COMPOSANTE DIFFUSION.
STZ STABIL+3 < INTERPOLATION SEULE.
LAD STABIL < DEMANDE D'INTERPOLATION.
SVC 0
LRM A,X
WORD IMAG-ZERO*2 < RESTAURATION ADRESSE ET
WORD LIMAG*2 < LONGUEUR IMAGE DANS LA DEMANDE.
STA STABIL+1
STX STABIL+2
STB STABIL+3 < RESTAURATION COMPOSANTE DIFFUSION.
<
< EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...).
<
SEG11: EQU $
ADRI -LENTIM,K < RESTAURATION DE 'K'.
LR K,A
ADRI 1,A < ZONE EMETTRICE.
LB AEIC < ZONE RECEPTRICE (A RESTAURER).
LXI LENTIM < LONGUEUR.
MOVE
<
PLR A,B,X,W
RSR
PAGE
EDKS: EQU $
<
< E C H A N G E D K S C R A T C H < - - > I M A G E 2 ( SOLAR)
<
< ARGUMENT:
< - 'A' = 0 : LIRE.
< - 'A' = 2 : ECRIRE.
<
< DETRUIT 'A'.
<
PSR X
<
LR A,X
LA DMEDKS
ANDI 'FF00
ORR X,A
STA DMEDKS < SENS DE L'ECHANGE.
<
LRM A
WORD IMAG2-ZERO*2
STA DMEDKS+1 < ADRESSE OCTET COURANTE.
<
STZ DMEDKS+3 < ADRESSE SECTEUR SCRATCH COURANTE.
<
XWOR%1: VAL LIMAG/128 < NOMBRE D'ECHANGES.
XWOR%2: VAL XWOR%1*128
IF LIMAG-XWOR%2,,XWOR%3,
IF ERREUR VOLONTAIRE : NOMBRE D'ECHANGES INCORRECT.
XWOR%3: VAL 0
LXI XWOR%1 < NOMBRE D'ECHANGES.
EDKS1: EQU $
PSR X
<
LAD DMEDKS < ECHANGE.
SVC 0
LA DMEDKS+1
AD DMEDKS+2
STA DMEDKS+1 < NOUVELLE ADRESSE COURANTE.
IC DMEDKS+3 < NOUVELLE ADRESSE SECTEUR COURANTE.
<
PLR X
JDX EDKS1
<
PLR X
RSR
XWOR%: VAL 0
PAGE
IF ORDI-"T",XWOR%,,XWOR%
<
<
< R O U T I N E D E C R E A T I O N
< D ' I M A G E S V I R T U E L L E S :
<
<
< ARGUMENT :
< X=X DU POINT A TRAITER,
< Y=Y DU POINT A TRAITER.
<
<
< RESULTAT :
< LE CARY EST POSITIONNE POUR 'TESTV', DE
< PLUS, LE SECTEUR COURANT PEUT CHANGER...
<
<
PS: EQU $
STA SAVE < SAUVEGARDE TEMPORAIRE DU
< MOT COURANT DE L'IMAGE.
LAI 0 < GENERATION D'UN
SBT 0,X < MASQUE.
INS: OR SAVE < INSTRUCTION VARIABLE (AD,
< SB, OR, AND, EOR) ENTRE
< LE MASQUE ET LE MOT COURANT.
RSR
PR: EQU $
RBT 0,X
RSR
PI: EQU $
IBT 0,X
RSR
PT: EQU $
CPZ ITEST < TEST DU MODE 0/1 DE TEST.
JNE PT1 < MODE 1.
IBT 0,X < MODE 0.
PT1: EQU $
TBT 0,X
LAI 1 < A EST DESTRUCTIBLE !!!
SBCR A < CALCUL DU RESULTAT,
STA INDIC < ET TRANSMISSION A 'EXISTV'.
RSR
<
< A C C E S I M A G E V I R T U E L L E :
<
SETV: EQU $
LA APS < SBT.
JMP VIRT
RSETV: EQU $
LA APR < RBT.
JMP VIRT
TESTV: EQU $
LA APT < TBT.
JMP VIRT
INVEV: EQU $
LA API
VIRT: EQU $
STA AOP < MISE EN PLACE DE LA ROUTINE
< VARIABLE...
PSR B,X,Y
LR Y,A
MP NMPL < B=NUMERO 1ER MOT DE LA LIGNE
< CONTENANT LE POINT ARGUMENT.
LR X,A
SLRS 4
ADR A,B < B=NUMERO DU MOT CONTENANT
< LE POINT ARGUMENT.
LAI '0F
ANDR A,X < X=NUMERO DU BIT REPRESENTANT
< LE POINT ARGUMENT DANS LE
< MOT (B).
LR B,A
SLRD 7 < A=NUMERO DU SECTEUR LE CONTENANT.
XR A,B < B=NUMERO DU SECTEUR.
SLRS 9 < A=NUMERO DU MOT DANS LE SECTEUR.
LR A,Y < Y=NUMERO DU MOT DANS LE SECTEUR.
BSR ARESID < REND LE SECTEUR (B) RESIDENT.
XR X,Y < X=NUMERO MOT, Y=NUMERO BIT.
LA &ASECTC < ACCES MOT.
XR X,Y < X=NUMERO BIT, Y=NUMERO MOT.
BSR AOP < EXECUTION OPERATION SPECIFIQUE.
XR X,Y < X=NUMERO MOT, Y=NUMERO BIT.
LB AOP < ACCES A LA FONCTION DEMANDEE.
XR A,B
CP APT < EST-CE LE TEST VIRTUEL ???
XR A,B
JE VIRT3 < OUI, DONC PAS DE MISE A JOUR
< DE L'IMAGE VIRTUELLE...
STA &ASECTC < MAJ IMAGE VIRTUELLE.
VIRT3: EQU $
PLR B,X,Y
RSR
<
<
< R E S I D E N C E D ' U N S E C T E U R :
<
<
< ARGUMENT :
< B=NUMERO DU SECTEUR A RENDRE RESIDENT.
<
<
RESID: EQU $
PSR X,Y
LR B,X < X=SECTEUR REFERENCE.
LA &ALSECT
JAG VIRT1 < LE SECTEUR REFERENCE EST DEJA
< RESIDENT A L'ADRESSE=(A).
<
< CAS OU LE SECTEUR REFERENCE (X) N'EST PAS RESIDENT :
<
IC ANCIEN < MODIFICATION DE LA
< MEMOIRE VIRTUELLE.
STX CSECT < SAUVEGARDE DE (X).
LX ANSECR
LA INFINI < RECHERCHE D'UN BUFFER.
VIRT2: EQU $
CPZ &ATOPO < LE BUFFER COURANT EST-IL
< LIBRE ???
JGE VIRT4 < OUI, PAR LE SECTEUR (A).
LR X,Y < NON, (Y)=BUFFER CHOISI.
JMP VIRT5
VIRT4: EQU $
CP &AUSE < EST-IL PEU UTILISE ???
JL VIRT10 < NON, ON LE LAISSE.
LA &AUSE < NON, IL DEVIENT LE MINI.
LR X,Y < PEUT-ETRE SERA-T'IL ELU..
VIRT6: EQU $
JDX VIRT2
<
< OK, ON A TROUVE UN BUFFER (Y)PEU OU PAS UTILISE :
<
VIRT5: EQU $
LR Y,X < X=NUMERO DE BUFFER/1.
BSR AWSE < REECRITURE DU SECTEUR TOPO
< ASSOCIE PAR 'TOPO' AU
< BUFFER (X).
LA ANCIEN
STA &AUSE < ON MEMORISE AINSI LA 'DATE'
< DE MODIFICATION DU
< BUFFER (X).
LX CSECT < X=SECTEUR A CHARGER.
LA WDKT+1 < A=@OCTET DU BUFFER LIBERE.
STA RDKT+1 < C'EST LA QU'ON VA LIRE (X).
SLRS 1 < A=@MOT DU BUFFER.
STA &ALSECT < LE SECTEUR (X) SERA RESIDENT
< A L'ADRESSE (A).
STX RDKT+3
XR X,Y < Y=SECTEUR A CHARGER,
< X=NUMERO DU BUFFER.
STY &ATOPO < ON MEMORISE LE NUMERO
< DU SECTEUR (Y) ASSOCIE
< AU BUFFER (X).
XR X,Y < X=SECTEUR A CHARGER,
< Y=NUMERO DU BUFFER.
LAD RDKT
SVC 0 < CHARGEMENT DU SECTEUR.
LX CSECT
LA &ALSECT < A=@MOT DU BUFFER.
VIRT1: EQU $
SBT 0 < BIT D'INDEX.
STA ASECTC < GENERATION D'UN RELAI D'ACCES
< TEMPORAIRE AU SECTEUR (X).
SLLS 1 < CONVERSION EN UNE ADRESSE
< D'OCTET.
SB ABUF1
SLRS 8
ADRI 1,A < A=NUMERO DU BUFFER LE CONTENANT.
LR A,X
PLR X,Y
RSR
<
< CAS DES SECTEURS TRES UTILISES :
<
VIRT10: EQU VIRT6
<
<
< R E E C R I T U R E D ' U N B U F F E R :
<
<
< ARGUMENT :
< X=NUMERO DE CE BUFFER.
<
<
WSE: EQU $
LR X,A
ADRI -1,A
SLLS 8
AD ABUF1
STA WDKT+1 < @OCTET DU BUFFER.
LA &ATOPO < A=SECTEUR ASSOCIE.
JAL WSE1 < IL N'EXISTE PAS...
PSR X
STA WDKT+3 < SI EXISTE MAJ DE WDKT.
LAD WDKT
SVC 0 < REECRITURE DU SECTEUR.
LX WDKT+3 < X=SECTEUR ASSOCIE.
LAI -1
STA &ALSECT < LE SECTEUR ASSOCIE N'EST
< PLUS RESIDENT.
PLR X < RESTAURE : X=NUMERO BUFFER.
STA &ATOPO < LE BUFFER EST LIBRE.
STZ &AUSE < ET NON UTILISE...
WSE1: EQU $
RSR
<
<
< R E E C R I T U R E D E T O U S L E S
< B U F F E R S E N S C R A T C H :
<
<
VIRE: EQU $
PSR X
LXI NSECR < X=NBRE DE BUFFERS.
VIRE1: EQU $
BSR AWSE < ECRITURE DU BUFFER (X).
JDX VIRE1
PLR X
RSR
PAGE
<
<
< R E T O U R D E L A Z O N E S C R A T C H
< E N M E M O I R E I M A G E :
<
<
CONTI: EQU $
STZ RDK+3 < DEPART SUR LE SECTEUR 0.
LA AIMAG1
RBT 0
STA AIMAG0 < INITIALISATION SUR @IMAG.
LXI LIMAG/128 < X=NBRE DE SECTEURS.
ECH1: EQU $
PSR X
LB RDK+3 < B=NUMERO DU SECTEUR COURANT.
BSR ARESID < QUE L'ON REND RESIDENT.
LX RDK+3
LA &ALSECT < A=@BUFFER QUI LE CONTIENT.
JAG ECH2 < OK, IL EST OCCUPE...
WORD '1E16 < E R R E U R P R O G !!!
ECH2: EQU $
LXI 128 < X=NBRE DE MOTS/SECTEUR.
LB AIMAG0 < B=@RECEPTEUR=@IMAGE.
MOVE < GENERATION IMAGE.
LXI 128 < X=NBRE DE MOTS/SECTEUR.
ADR X,B < PROGRESSION @IMAGE.
STB AIMAG0
IC RDK+3 < PASSAGE AU SECTEUR SUIVANT.
PLR X
JDX ECH1
RSR
XWOR%: VAL 0
<
<
< R A Z D E L A Z O N E S C R A T C H :
<
<
RAZDK: EQU $
IF ORDI-"T",XWOR%,,XWOR%
STZ WDK+3 < DEPART SUR LE SECTEUR 0.
LXI 128
RAZ1: EQU $
STZ &ASECT < RAZ DU BUFFER SECTOR.
JDX RAZ1
LXI LIMAG/128 < NBRE DE BUFFERS SCRATCH
< NECESSAIRE POUR 1 IMAGE.
RAZ2: EQU $
PSR X < SAVE LE DECOMPTEUR.
LB WDK+3 < B=NUMERO DU SECTEUR COURANT.
BSR ARESID < QUE L'ON REND RESIDENT.
LX WDK+3
LB &ALSECT < B=RECEPTEUR=@BUFFER ASSOCIE.
CPZR B < VALIDATION...
JG RAZ3 < OK, IL EST OCCUPE..
WORD '1E16 < E R R E U R P R O G !!
RAZ3: EQU $
LA ASECT1
RBT 0 < A=@EMETTEUR DES '0000.
LXI 128 < X=NBRE DE MOTS A RAZER.
MOVE < RAZ DU SECTEUR COURANT.
PLR X < RESTAURE LE DECOMPTEUR.
IC WDK+3 < PASSGE AU SECTEUR SUIVANT.
JDX RAZ2 < DECOMPTAGE..
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
<
< EN SOLAR 'IMAGE SCRATCH EST SIMULEE DANS 'IMAG2'.
<
LX ALIMAG < NOMBRE DE MOTS DE L'IMAGE.
STZ &AIMAG2 < RAZ.
JDX $-1
LAI 2 < SENS DE L'ECHANGE = ECRITURE.
BSR AEDKS < IMAGE2 --> DKS.
XWOR%: VAL 0
RSR
PAGE
IF ORDI-"T",XWOR%,,XWOR%
<
<
< M I S E D ' U N B I T A 1 :
<
<
< ARGUMENTS :
< X ET Y CONTIENNENT X ET Y DU POINT.
< C=@IMAG (IMAGE VIDEO).
<
<
SET: EQU $
PSR B,X,C
LR Y,A
MP NMPL < CONVERSION DE L'Y DU POINT EN
< UN NUMERO DE MOT.
ADR B,C
LR X,A
SLRS 4
ADR A,C < C=@MOT CONTENANT LE POINT (X,Y).
LAI 'F
ANDR A,X < CALCUL DE X MODULO 16 ;
< X=NUMERO DU BIT DANS LE MOT.
LA 0,C < A=MOT CONTENANT LE POINT (X,Y).
SBT 0,X < POSITIONNEMENT DU POINT.
STA 0,C < MISE A JOUR DE CE MOT.
PLR B,X,C
RSR
<
<
< E F F A C E M E N T D ' U N P O I N T :
<
<
< ARGUMENTS :
< X ET Y CONTIENNENT X ET Y DU POINT.
< C=@IMAG (IMAGE VIDEO).
<
<
RESET: EQU $
PSR B,X,C
LR Y,A
MP NMPL
ADR B,C
LR X,A
SLRS 4
ADR A,C < C=@MOT CONTENANT LE POINT (X,Y).
LAI 'F
ANDR A,X < X=NUMERO DU BIT REPRESENTANT
< LE POINT DANS LE MOT ((C)).
LA 0,C < A=MOT CONTENANT LE POINT (X,Y).
RBT 0,X < EFFACEMENT DU POINT.
STA 0,C < MISE A JOUR DE CE MOT.
PLR B,X,C
RSR
XWOR%: VAL 0
<
<
< I N V E R S I O N V I D E O U N P O I N T :
<
<
< ARGUMENT :
< X ET Y CONTIENNENT X ET Y DU POINT A INVERSER.
< C=@IMAG (IMAGE VIDEO).
<
<
INVER: EQU $
PSR B,X,C
LR Y,A
MP NMPL
ADR B,C
LR X,A
SLRS 4
ADR A,C < C=@MOT CONTENANT LE POINT (X,Y).
LAI 'F
ANDR A,X < X=NUMERO DU BIT REPRESENTANT
< LE POINT DANS LE MOT ((C)).
LA 0,C < A=MOT CONTENANT LE POINT (X,Y).
IBT 0,X < INVERSION VIDEO DU POINT.
STA 0,C < MISE A JOUR DE CE MOT.
PLR B,X,C
RSR
<
<
< C L I G N O T E M E N T D ' U N P O I N T :
<
<
CLIGN: EQU $
IF ORDI-"T",XWOR%,,XWOR%
PSR B
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
CPZ MODEV < 3 OU 8 COULEURS ???
JNE CLIGN2 < 8 COULEURS : PAS DE CLIGNOTEMENT...
PSR A,B < 3 COULEURS...
XWOR%: VAL 0
LB TEMPO < B=NBRE DE CLIGNOTEMENTS.
CLIGN1: EQU $
BSR AINVER < INVERSION DU POINT (X,Y).
IF ORDI-"S",XWOR%,,XWOR%
PSR X
LAD STABIL < STABILISATION DE L'IMAGE.
SVC 0
PLR X
XWOR%: VAL 0
ADRI -1,B < DECOMPTAGE.
CPZR B < EST-CE FINI ???
JG CLIGN1 < NON.
IF ORDI-"T",XWOR%,,XWOR%
PLR B < OUI.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
PLR A,B
CLIGN2: EQU $
XWOR%: VAL 0
RSR
<
<
< T E S T D ' U N P O I N T :
<
<
< FONCTION DE ITEST :
< ITEST=0 : CARY=1 SI POINT=0 ,
< =1 : CARY=1 SI POINT=1.
<
<
< ARGUMENTS :
< X ET Y CONTIENNENT L'X ET L'Y DU POINT ,
< C=@IMAG.
<
<
< RESULTAT :
< CARY POISITIONNE PAR LE POINT (0/1) 9
<
<
TEST: EQU $
PSR B,X,C
LR Y,A < A=COORDONNEE Y DU POINT.
MP NMPL
ADR B,C
LR X,A < A=COORDONNEE X DU POINT.
SLRS 4
ADR A,C < C#MOT CONTENANT LE POINT (X,Y).
LAI 'F
ANDR A,X < X=NUMERO DU POINT DANS LE MOT (C)
LA 0,C
CPZ ITEST < TEST DE LA VALEUR LOGIQUE DU
< POINT.
JNE E1022 < CONVENTION NORMALE (1).
IBT 0,X < CAS DES CONVENTIONS INVERSEES (1)
E1022: EQU $
TBT 0,X < TEST DU POINT.
PLR B,X,C
RSR
IF ORDI-"T",XWOR%,,XWOR%
<
<
< E X I S T E N C E E T C O M P T A G E
< D E S V O I S I N S :
<
<
< ARGUMENT :
< X,Y = COORDONNEE D'UN VOISIN.
<
<
< RESULTAT :
< B EST INCREMENTE DE 1 SI CE POINT EXISTE
< ET EST A 1.
< LE CARRY EST NON SIGNIFICATIF !!!!
<
<
VOISE: EQU $
LR X,A
JAL NVOISE < X INVALIDE.
CP NPPL
JG NVOISE < X INVALIDE.
LR Y,A
JAL NVOISE < Y INVALIDE.
CP NLIG
JG NVOISE < Y INVALIDE.
BSR ATEST < TEST DU POINT EXISTANT (X,Y).
ADCR B < B EST INCREMENTE DE 1
< SI (X,Y) EXISTE.
NVOISE: EQU $
RSR
PAGE
<
<
< E X I S T E N C E E T V A L E U R P O I N T :
<
<
< ARGUMENT :
< X ET Y CONTIENNENT L'X ET L'Y D'UN POINT.
<
<
< RESULTAT :
< A#0 : M(X,Y) N'EXISTE PAS , OU
< M(X,Y) EXISTE ET M(X,Y)=0.
<
<
EXIST: EQU $
LR X,A
JAL NEXIST < X INVALIDE (<0).
CP NPPL
JG NEXIST < X INVALIDE (>NPPL).
LR Y,A
JAL NEXIST < M(X,Y) N'EXISTE PAS : A<0#0 !!!
CP NLIG
JG NEXIST < M(X,Y) N'EXISTE PAS : A>0#0 !!!
<
< CAS OU LE POINT M(X,Y) EXISTE :
<
BSR ATEST < TEST DE LA VALEUR DE M(X,Y).
LAI 1
SBCR A < A=0 SI M(X,Y)=1.
NEXIST: EQU $
RSR
<
<
< E X I S T E N C E V I R T U E L L E :
<
<
XISTV: EQU $
LR X,A
JAL NXISTV < POINT VIRTUEL INEXISTANT.
CP NPPL
JG NXISTV < POINT VIRTUEL INEXISTANT.
LR Y,A
JAL NXISTV < POINT VIRTUEL INEXISTANT.
CP NLIG
JG NXISTV < POINT VIRTUEL INEXISTANT.
BSR ATESTV < TEST D'UN POINT VIRTUEL.
LA INDIC < A=RESULTAT DU TEST VIRTUEL.
NXISTV: EQU $
RSR < VOIR 'EXIST' POUR (A).
TIMAG: WORD IMAG < @RELATIVE IMAGE VIDEO.
EOT #SIP SP3#
XWOR%: VAL 0
PAGE
<
<
< E N T R E E U N E C O O R D O N N E E :
<
<
< ARGUMENT :
< A=@MESSAGE A EMETTRE.
<
<
< RESULTAT :
< A=COORDONNEE (X OU Y).
<
<
COORD1: EQU $ < RETOUR EN ERREUR.
LR B,A < RESTAURE A=@MESSAGE.
COORD: EQU $
PSR X,Y
LR A,B < SAVE B=@MESSAGE.
BSR APRINT < ENVOI DU MESSAGE ARGUMENT.
LAD DEMIN
SVC 0 < ENTREE D'UN NBRE HEXADECIMAL.
LYI 4 < 4 CHIFFRES MAX A CONVERTIR.
BSR AHEX < ESSAI DE CONVERSION...
PLR X,Y
JNE COORD1 < ERREUR : ON RECOMMENCE.
JAL COORD1 < COORDONNEE<0 : ERREUR..
CPI X20-1 < DEBORDEMENT : ERREUR...
JG COORD1 < ERREUR...
RSR < OK, (A)=VALEUR HEXA.
<
<
< E N T R E E C O E F F I C I E N T :
<
<
< ARGUMENT :
< A=@MESSAGE A EMETTRE.
<
<
< RESULTAT :
< A=COEFFICIENT.
<
<
COEF1: EQU $
LR B,A < RESTAURE A=@MESSAGE.
COEF: EQU $
PSR X,Y
LR A,B < SAVE B=@MESSAGE.
BSR APRINT < ENVOI DU MESSAGE.
LAD DEMIN
SVC 0 < ENTREE DE 4 CARACTERES.
LYI 4
BSR AHEX < CONVERSION HEXA.
PLR X,Y
JNE COEF1 < ERREUR SYNTAXE HEXADECIMALE.
RSR < OK...
<
<
< E N T R E D ' U N P A S :
<
<
< ARGUMENT :
< A=@MESSAGE A EMETTRE.
<
<
< RESULTAT :
< A=PAS#0.
<
<
PAS1: EQU $
LR B,A < RESTAURE A=@MESSAGE.
PAS: EQU $
PSR X,Y
LR A,B < SAVE B=@MESSAGE.
BSR APRINT < ENVOI MESSAGE.
LAD DEMIN
SVC 0 < ENTREE DU PAS.
LYI 4 < Y=NBRE CARACTERES A DECODER.
BSR AHEX < CONVERSION HEXA-BINAIRE.
PLR X,Y
JNE PAS1 < ERREUR SYNTAXE.
JALE PAS1 < REFUS DE PAS<=0.
CPI X20-1 < VALIDATION.
JG PAS1 < ERREUR.
RSR
<
<
< C O N V E R S I O N A S C I --> B I N A I R E :
<
<
< RESULTAT :
< A=VALEUR CONVERTIE S'IL N'Y A PAS
< D'ERREUR, LES CODES DE CONDITION
< L'INDIQUANT.
<
<
HEX: EQU $
PSR B,X
LXI 0 < X=INDEX DE 'REP'.
LBI 0 < B=CUMUL COURANT.
HEX1: EQU $
LBY &AREP < A=CARACTERE COURANT DE 'REP'.
CPI '04 < EST-CE 'EOT' ???
JE HEX5 < OUI, FIN DE CONVERSION.
CPI '0D < EST-CE 'R/C' ???
JE HEX5 < OUI, FIN DE CONVERSION.
ADRI -'30,A < CONVERSION BIANIRE.
JAL HEX2 < ERREUR.
CPI 9 < EST-CE UN CHIFFRE DECIMAL ???
JLE HEX3 < OUI.
ADRI -"A"+"9"+1,A < NON.
CPI 'A < VALIDATION HEXDECIMALE ???
JL HEX2 < ERREUR.
CPI 'F < VALIDATION HEXADECIMALE ???
JG HEX2 < ERREUR.
HEX3: EQU $
SCRS 4 < CUMUL PARTIEL DE LA
SCLD 4 < VALEUR A CONVERTIR.
ADRI 1,X < PASSAGE AU CARACTERE SUIVANT.
CPR X,Y < EST-CE FINI ???
JNE HEX1 < NON.
HEX5: EQU $
LR B,A < OUI, A=RESULTAT.
LBI 0 < B=0 : OK.
HEX4: EQU $
CPZR B < POSITIONNEMENT DES CODES
< DE CONDITION SUR ERREUR.
PLR B,X
RSR
HEX2: EQU $ < CAS DES ERREURS.
LBI 1 < B=1#0 : ERREUR.
JMP HEX4 < VERS LA SORTIE...
PAGE
<
<
< R E T O U R A ' G E ' :
<
<
GOGE: EQU $
GOGEX: EQU $ < ENTRY ALT-MODE.
IF ORDI-"T",XWOR%,,XWOR%
BSR AVIRE < TOUTE L'IMAGE VIRTUELLE EST
< RENVOYEE EN SCRATCH AVANT
< LE RETOUR A 'GE'.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
LA INDM
TBT 15 < OPTION "SCRATCH" ACTIVE ?
JNC GOGE3 < NON.
LAI 2 < OUI, ALORS ECRIRE IMAGE2 EN SCRATCH.
BSR AEDKS < SENS DE L'ECHANGE = ('A').
GOGE3: EQU $
XWOR%: VAL 0
ERR: EQU $ < SORTIE EN ERREUR...
LAI BRANCH-ZERO
LR A,W < W=@BRANCH.
<
< RAZ DES ITEMS 1 ET 2 :
<
LX NMOTS < X=NBRE DE MOTS A RAZER.
GOGE1: EQU $
STZ &AI2
JDX GOGE1
<
< MISE EN PLACE DU NOM DE 'GE' :
<
LA NGE
STA 0,W < (W)=@BRANCH.
<
< RETOUR A 4K, ET SMC :
<
LA APILE
LR A,K
LAD RELMEM
SVC 0
GOGE2: EQU $
LAD DEMSGN < A=@DEMSGN.
BSR AOVL < CHARGEMENT DE 'GE'.
LAD DEMCCI
SVC 0 < RETOUR AU CCI SI ERREUR.
JMP GOGE2
PAGE
<
<
< G E N E R A T E U R D E V O L E T S :
<
<
< FONCTION :
< A PARTIR DU CURSEUR GRAPHIQUE DE
< LA VISU '01, IL PERMET DE TRACER
< SIMULTANEMENT SUR L'IMAGE RESIDEN-
< TE ET SUR L'IMAGE SCRATCH DES IMAGES
< LINEAIRES POUVANT SERVIR ENSUITE
< DE CONTOURS DE VOLETS, MAIS AUSSI
< AVEC L'EMISSION OPTIONNELLE PAR ZDC
< PERMET DE GENERER LE DESSIN EQUIVALENT
< A UNE IMAGE VIDEO...
<
<
WORD IMAG < VALEUR BASE C.
WORD LOC+'80 < VALEUR BASE L.
WORD BRANCH < VALEUR BASE W.
IMAGE: EQU $
LRP K
ADRI -1,K
PLR C,L,W < INITIALISATION C,L,W.
LA ASTACK
LR A,K < INITIALISATION K.
IC KIN < COMPTAGE DES ENTRIES.
JG GOGEX < ABORT SI ALT-MODE.
IF ORDI-"S",XWOR%,,XWOR%
LAD DEMM12 < SOLAR: IL FAUT 12K A PRIORI PUISQUE
SVC 0 < L'IMAGE SCRATCH EST SIMULEE EN 'IMAG2'.
XWOR%: VAL 0
IF ORDI-"T",XWOR%,,XWOR%
LAD DEMMEM
SVC 0
<
< TEST DU NUMERO DE COMTE D'APPEL :
<
WORD '1E25 < A,B=ACN.
CP ACNSYS
JNE INIT1 < ON N'EST PAS SOUS :SYS.
LR B,A
CP ACNSYS+1
JE INIT2 < ON EST SOUS :SYS.
INIT1: EQU $
STZ ASP3 < PAS DE STABILISATION D'IMAGE.
INIT2: EQU $
XWOR%: VAL 0
<
< MODE DE GENERATION DE L'IMAGE SCRATCH :
<
OPER1: EQU $
LA AM10
BSR APRINT < EMISSION D'UN MESSAGE.
LAD DEMREP
SVC 0 < ENTREE DU MODE DE GENERATION.
LBY REP < A=MODE CHOISI.
ADRI -'30,A < DECODAGE ASCI-NUMERIQUE.
JALE OPER1 < ERREUR.
IF ORDI-"S",XWOR%,,XWOR%
CPI 5
JG OPER1
STA OPER < OPERATION DEMANDEE.
XWOR%: VAL 0
IF ORDI-"T",XWOR%,,XWOR%
LXI 0
CPBY &ACODE < VALIDATION PAR RAPPORT AU
< MODE MAX.
JG OPER1 < ERREU.
LR A,X < X=MODE CHOISI.
LBY &ACODE < A=OPERATION ASSOCIEE.
STBY &AINS < QUE L'ON MET DANS 'PS'
< POUR LA ROUTINE 'SETV'.
XWOR%: VAL 0
TR3: EQU $
<
< INITIALISATION DU DISQUE :
<
IF ORDI-"S",XWOR%,,XWOR%
< SOLAR, LIRE L'IMAGE SCRATCH EN 'IMAG2'.
LAI 0 < SENS DE L'ECHANGE = LECTURE.
BSR AEDKS < DK SCRATCH --> IMAGE2.
XWOR%: VAL 0
LA AM9
BSR AINTER < FAUT-IL RAZER L'IMAGE SCRATCH.
JNE RZ1 < NON.
BSR ARAZDK
RZ1: EQU $
<
< DOIT-ON EMETTRE PAR ZDC ???
<
LA AM4
BSR AINTER < FAUT-IL EMETTRE PAR ZDC ???
STB IGRAPH < SAVE LA REPONSE 0/1.
<
< A T T E N T I O N :
<
< ON SUPRIME LE CODE SUIVANT
< QUI AVAIT POUR OBJET D'ACTIVER
< LA ZONE SCRATCH ; DESORMAIS,
< CELLE-CI SERA INACTIVE INITIA-
< LEMENT !!!
<
< LAI "M" < ON VA SIMULER UNE COMMANDE
< JMP SIMULM < 'M', AFIN DE RENDRE ACTIVE
< < LA ZONE SCRATCH.
<
<
< A N A L Y S E D E S C O M M A N D E S :
<
<
< COMMANDES RECONNUES :
< A : ORIGINE D'UN SEGMENT,
< B : EXTREMITE D'UN SEGMENT,
< S : EXTREMITE ETOILEE D'UN SEGMENT,
< 0 : MISE D'UN POINT A 0,
< 1 : MISE D'UN POINT A 1,
< 2 : INVERSION D'UN POINT,
< + : MODE 'SET',
< - : MODE 'RESET',
< I : MODE 'INVER',
< V : VOLET 1 SUR FOND 0,
< W : VOLET 0 SUR FOND 1,
< Z : RAZ DE L'IMAGE RESIDENTE.
< T : CHANGEMENT TAILLE SPIRALE AUTOUR D'UN POINT.
< C : CURSEUR VIDEO,
< R : RETOUR TEMPORAIRE AU CCI.
< M : ACTIVATION/DESACTIVATION EN BASCULE SCRATCH.
IF ORDI-"S",XWOR%,,XWOR%
< 5 : COMPOSANTE ROUGE ACTIVE.
< 6 : COMPOSANTE VERTE ACTIVE.
< 7 : COMPOSANTE BLEUE ACTIVE.
XWOR%: VAL 0
< F : FIN.
<
<
LOOP: EQU $
BSR ACUR < ENTREE DU CURSEUR+COMMANDE.
SIMULM: EQU $ < LA 1ERE COMMANDE EST SIMULEE ('M').
LXI 0 < INDEX 1ERE COMMANDE.
LOOP1: EQU $
CPZ &ACOM < EST-CE LA FIN DE LISTE ???
JG LOOP2 < NON, OK.
LA AM1 < OUI, ERREUR.
BSR APRINT < ENVOI MESSAGE D'ERREUR.
JMP LOOP < ET ON RECOMMENCE.
LOOP2: EQU $
CP &ACOM < LA COMMANDE (A) EST-ELLE
< LA COMMANDE COURANTE (X) ???
JNE LOOP3 < NON.
ADRI 1,X < OUI, ON VA DONC LA
BR &ACOM < TRAITER...
LOOP3: EQU $
ADRI 2,X < INDEX COMMANDE SUIVANTE.
JMP LOOP1 < ET ON REANALYSE...
<
< FIN D'ANALYSE :
<
GENF: EQU $
CPZ IGRAPH < ENVOI EN ZDC ???
JNE ANA30 < NON.
STZ SEG+0 < OUI, ON ENVOIE 'OAB'.
STZ SEG+1
STZ SEG+2
STZ SEG+3
BSR ASTORE < ENVOI DU 'OAB' DANS ZDC.
ANA30: EQU $
BR AGOGE < C'EST FINI...
<
< R E T O U R A U C C I :
<
GENCCI: EQU $
LAD DEMCCI
SVC 0
BR ALOOP < RETOUR SI !GO...
<
< C O M M A N D E S D E M O D E :
<
GENS: EQU $
LAI -3 < MODE 'SET'.
JMP GEN10
GENR: EQU $
LAI -2 < MODE 'RESET'.
JMP GEN10
GENI: EQU $
LAI -1 < MODE 'INVER'.
GEN10: EQU $
STA MODE < MISE EN PLACE DU MODE.
BR ALOOP < VERS LA COMMANDE SUIVANTE.
IF ORDI-"S",XWOR%,,XWOR%
<
<
< C H O I X 3 / 8 C O U L E U R S :
<
<
GENMOD: EQU $
PSR X,Y < SAUVEGARDES...
LA AM21
BSR APRINT < MESSAGE,
LAD DEMIN
SVC 0 < ENTREE DU MODE,
LYI 4
BSR AHEX < ET CONVERSION BINAIRE...
PLR X,Y
JNE GENMOD < ERREUR DE SYNTAXE...
JAL GENMOD < MAUVAIS MODE...
CPI LVIDEO
JG GENMOD < MAUVAIS MODE...
PSR X
LR A,X
LA &AVIDEO
STA MODEV < ET MEMORISATION DU MODE :
< =0 : ANCIEN MODE (3 COULEURS),
< #0 : NOUVEAU MODE (8 COULEURS).
PLR X
LA INDM
TBT 15 < LA ZONE SCRATCH EST-ELLE ACTIVE ???
JC GENM < OUI, ON LA DESACTIVE...
BR ALOOP < NON, VERS L'INTERPRETEUR...
<
<
< C H O I X D E L A C O U L E U R :
<
<
GENCOL: EQU $
PSR X,Y < SAUVEGARDES...
LA AM20
BSR APRINT < MESSAGE,
LAD DEMIN
SVC 0 < ENTREE DU COULEUR,
LYI 4
BSR AHEX < ET CONVERSION BINAIRE...
PLR X,Y
JNE GENCOL < ERREUR DE SYNTAXE...
JAL GENCOL < MAUVAIS COULEUR...
CPI 1>NCOOL-1+1
JG GENCOL < MAUVAIS COULEUR...
STA COLOR < ET MEMORISATION DE LA COULEUR...
BR ALOOP < ET VERS L'INTERPRETEUR...
XWOR%: VAL 0
<
< O R I G I N E D ' U N S E G M E N T :
<
GENA: EQU $
LA POINT+X
STA DICOX1 < ORIGINE X(M1).
LA POINT+Y
STA DICOY1 < ORIGINE Y(M1).
BR ALOOP < VERS LA COMMANDE SUIVANTE.
<
< E X T R E M I T E D ' U N S E G M E N T :
<
GENE: EQU $ < COMMANDE 'S'.
GENB: EQU $
LA POINT+X
STA DICOX2 < EXTREMITE X(M2).
LA POINT+Y
STA DICOY2 < EXTREMITE Y(M2).
IF ORDI-"T",XWOR%,,XWOR%
LX MODE
LA &LRR < MISE EN PLACE DE LA ROUTINE
STA APOINT < DE TRAITEMENT REEL.
BSR ATRACE < TRACE REEL DE M1M2.
LA &LRV < MISE EN PLACE DE LA ROUTINE
STA APOINT < DE TRAITEMENT VIRTUEL.
BSR ATRACV < TRACE VIRTUEL DE M1M2.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
BSR ATRACE < TRACE REEL.
BSR ATRACV < TRACE IMAGE2 ("SCRATCH").
XWOR%: VAL 0
LBY CURSOR < RECUPERATION DE LA COMMANDE.
CPI "B" < DISCRIMINATION 'B'/'S' ???
JE GENA < 'B' : ON FAIT UN 'A' IMPLICITE.
BR ALOOP < 'S' : COMMANDE SUIVANTE.
<
< T R A C E P O I N T S I S O L E S :
<
GEN2: EQU $
LAI -1 < MODE 'INVER'.
JMP GEN11
GEN0: EQU $
LAI -2 < MODE 'RESET'.
JMP GEN11
GEN1: EQU $
LAI -3 < MODE 'SET'.
GEN11: EQU $
STA SAVE < SAVE PROVISOIRE.
LA DICOX1
LB DICOY1
LX DICOX2
LY DICOY2
PSR A,B,X,Y < SAVE M1 ET M2.
LA POINT+X
STA DICOX1 < M1 ET
STA DICOX2 < M2 SONT CONFONDUS.
LA POINT+Y
STA DICOY1 < M1 ET
STA DICOY2 < M2 SONT CONFONDUS.
IF ORDI-"T",XWOR%,,XWOR%
LX SAVE < RECUPERATION DU MODE DEMANDE.
LA &LRR < ROUTINE DE TRAITEMENT REEL.
STA APOINT
BSR ATRACE < TRACE REEL DE M, ET ZDC EVENTUEL.
LA &LRV < ROUTINE DE TRAITEMENT VIRTUEL.
STA APOINT
BSR ATRACV < TRACE VIRTUEL DE M.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
< SAUVEGARDE MODE COURANT, ET ON LUI SUBSTITUE ('SAVE').
LA SAVE
XM MODE
STA SAVE
BSR ATRACE < TRACE REEL.
BSR ATRACV < TRACE IMAGE2 ("SCRATCH").
< RESTAURATION DU MODE COURANT.
LA SAVE
XM MODE
STA SAVE
XWOR%: VAL 0
PLR A,B,X,Y < RESTAURE M1 ET M2.
STY DICOY2
STX DICOX2
STB DICOY1
STA DICOX1
BR ALOOP < VERS LA COMMANDE SUIVANTE.
<
< T A I L L E D E S S P I R A L E S :
<
GENT: EQU $
LA AM5 < MESSAGE A EMETTRE.
BSR APAS < ENTREE DE LA NOUVELLE TAILLE.
STA NM
BR ALOOP < ET C'EST TOUT...
<
< R A Z I M A G E R E S I D E N T E :
<
GENZ: EQU $
LX ALIMAG
GEN40: EQU $
STZ &AIMAG
JDX GEN40
IF ORDI-"S",XWOR%,,XWOR%
LAD STABIL < VISUALISATION IMAGE RAZEE.
SVC 0
XWOR%: VAL 0
BR ALOOP < VERS LA COMMANDE SUIVANTE.
<
< G E N E R A T I O N D E S V O L E T S :
<
GENW: EQU $
LAI 0
JMP GEN20
GENV: EQU $
LAI 1
GEN20: EQU $
STA ITEST < MODE DE TEST DES POINTS REELS.
LY NLIG < BALAYGAE VERTICAL.
E1001: EQU $
LX NPPL < BALAYAGE HORIZONTAL.
E1002: EQU $
BSR ATEST < TEST REEL DU POINT (X,Y).
JC E1003 < ON A TROUVE LE DERNIER
< POINT DE LA LIGNE (Y).
ADRI -1,X
CPZR X < EST-ON AU DEBUT DE LIGNE ???
JGE E1002 < NON...
E1004: EQU $
ADRI -1,Y < CHANGEMENT DE LIGNE.
CPZR Y < EST-CE FINI ???
JGE E1001 < NON.
BR ALOOP < OUI, COMMANDE SUIVANTE.
<
< CAS DU DERNIER POINT D'UNE LIGNE :
<
E1003: EQU $
LR X,B < SAVE SON ABSCISSE DANS B.
LXI 0 < BALAYONS LA LIGNE (Y)
< EN PARTANT DE LA GAUCHE.
E1005: EQU $
BSR ATEST < TEST REEL DU POINT (X,Y).
JC E1006 < ON A TROUVE LE 1ER POINT
< DE LA LIGNE (Y).
ADRI 1,X < POINT SUIVANT.
JMP E1005 < PAS DE TEST DE FIN, CAR ON
< SAIT QU'IL Y A AU MOINS UN
< POINT SUR CETTE LIGNE.
<
< CAS DU 1ER POINT BLANC D'UNE LIGNE :
<
E1006: EQU $
STX DICOX1 < X(M1),
STY DICOY1 < Y(M1).
STB DICOX2 < X(M2),
STY DICOY2 < Y(M2).
IF ORDI-"T",XWOR%,,XWOR%
LX MODE < MODE DE TRAITEMENT.
LA &LRR < TRAITEMENT REEL.
STA APOINT
BSR ATRACE < REMPLISSAGE REEL, ET ZDC EVENTUEL.
LA &LRV < TRAITEMENT VIRTUEL.
STA APOINT
BSR ATRACV < REMPLISSAGE VIRTUEL.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
BSR ATRACE < TRACE REEL.
BSR ATRACV < TRACE IMAGE2 ("SCRATCH").
XWOR%: VAL 0
JMP E1004 < VERS LA LIGNE PRECEDENTE.
<
<
< B A S C U L E Z O N E S C R A T C H :
<
<
GENM: EQU $
LA AM6
BSR APRINT
LA INDM
IBT 15 < INVERSION DE L'ETAT.
TBT 15 < VIENT-ON D'ACTIVER ???
JNC GENM3 < NON...
CPZ MODEV < OUI : 3 OU 8 COULEURS ???
JE GENM3 < 3, OK, ANCIEN MODE...
LA AM1 < 8 : ON INTERDIT LA ZONE SCRATCH...
BSR APRINT < MESSAGE D'ERREUR !!!
BR ALOOP < VERS L'INTERPRETEUR...
GENM3: EQU $
STA INDM
TBT 15 < TEST DU NOUVEL ETAT ???
LA AM7 < 'ON' A PRIORI.
JC GENM1 < OUI, C'EST ON...
LA AM8 < ET NON, C'EST OFF...
IF ORDI-"S",XWOR%,,XWOR%
BSR APRINT
LAI 2 < SENS DE L'ECHANGE = ECRITURE.
BSR AEDKS < IMAGE2 --> DK SCRATCH.
LAD DEMMEM < ET 8K SEULEMENT...
SVC 0
JMP GENM2
XWOR%: VAL 0
GENM1: EQU $
BSR APRINT < MESSAGE D'ETAT.
IF ORDI-"S",XWOR%,,XWOR%
LAD DEMM12 < IL FAUT 12K MOTS.
SVC 0
LAI 0 < SENS DE L'ECHANGE = LECTURE.
BSR AEDKS < DK SCRATCH --> IMAGE2.
GENM2: EQU $
XWOR%: VAL 0
BR ALOOP < VERS L'INTERROGATION...
IF ORDI-"S",XWOR%,,XWOR%
<
<
< A C T I V A T I O N D ' U N E C O M P O S A N T E :
<
<
GEN5: EQU $
LBI TVPR+TVIN < ROUGE.
JMP GEN100
GEN6: EQU $
LBI TVPV+TVIN < VERT.
JMP GEN100
GEN7: EQU $
LBI TVPB+TVIN < BLEU.
GEN100: EQU $
STB STABIL+3 < LIRE LA COMPOSANTE.
LAD STABIL
SVC 0
NBTVIN: VAL TVIN=0
NBTVIN: VAL 15-NBTVIN
RBT 16+NBTVIN < REPASSER EN DIFFUSION.
STB STABIL+3
BR ALOOP < VERS L'INTERROGATION...
XWOR%: VAL 0
PAGE
<
<
< I M P L A N T A T I O N :
<
<
X12: EQU ZERO+PILE-LTNI-LTNI
X10: VAL X12-$
ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE VOLONTAIRE
< SI MAUVAISE IMPLANTATION...
DZS X10+1 < PAR PROPRETE !!!!
EOT #SIP GEN PROCESSEUR#
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.