NMPROC: VAL "PA" < NOM DU PROCESSEUR.
IDP "PA - RELEASE 01/06/1979"
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 40 < 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.
<
< 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
M9: BYTE 5;'6D
ASCI "RAZ?"
M10: BYTE 35;'6D
ASCI "MODE (AD=1/SB=2/OR=3/AND=4/EOR=5)="
M1: BYTE 10;'6D
ASCI "LONGUEUR= "
M2: BYTE 10;'6D
ASCI "PATTERN1= "
M3: BYTE 10;'6D
ASCI "PATTERN2= "
M4: BYTE 4;'6D
ASCI "--> "
M5: BYTE 12;'6D
ASCI "HORIZONTAL? "
M6: BYTE 7;'6D
ASCI "PAS X="
M7: BYTE 7;'6D
ASCI "PAS Y="
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 :
<
< RESET 00 ('80)
ARESET: WORD RESET < MISE D'UN POINT A 0.
< SET 01 ('81)
ASET: WORD SET < MISE D'UN POINT A 1.
< INVER 10 ('82)
AINVER: WORD INVER < INVERSION D'UN POINT.
< TEST 11 ('83)
ATEST: WORD TEST < TEST DE L'ETAT D'UN POINT.
< EXISTENCE
AVOISE: WORD VOISE < TEST ETAT ET EXISTENCE.
<
< MESSAGES :
<
AM1: WORD M1
AM2: WORD M2
AM3: WORD M3
AM4: WORD M4
AM5: WORD M5
AM6: WORD M6
AM7: WORD M7
AM9: WORD M9
AM10: WORD M10
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
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
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.
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
<
< 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.
PASX: WORD 0 < PAS DE PARCOURS SUR OX,
PASY: WORD 0 < PAS DE PARCOURS SUR OY.
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.
INDIC: WORD 0 < RESULTAT (0/1) DES TESTS
< VIRTUELS.
SAVE: WORD 0 < VARIABLE TEMPORAIRE DE 'PS'.
IHORIZ: WORD 0 < 0=PARCOURS HORIZONTAL,
< 1=PARCOURS VERTICAL.
XPAT: WORD 0 < INDEX COURANT DE LA PATTERN.
LPAT: WORD 0 < LONGUEUR DE LA PATTERN
< (DE 1 A 32).
PAT: DZS 2 < PATTERN RECHERCHEE.
NPAT: DZS 2 < PATTERN DE REMPLACEMENT.
MPAT: DZS 2 < MASQUE DE VALIDATION DE
< 'PAT' ET 'NPAT'.
XIMAG: WORD 0 < X LORS D'UN DEBUT DE COMPARAISON
< ENTRE 'PAT' ET UNE SUITE
< DE BITS DE L'IMAGE,
YIMAG: WORD 0 < DE MEME Y.
<
< 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.
AREP: WORD REP,X < RELAI D'ACCES AUX REPONSES.
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.
AOVL: WORD OVL < CHARGEMENT DES OVERLAYS.
AEXIST: WORD EXIST < EXISTENCE D'UN POINT.
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
AINCXY: WORD INCXY < INCREMENTATION DE X ET Y.
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).
ACONTI: WORD CONTI < RETOUR DE LA ZONE SCRATCH
< EN MEMOIRE.
ARAZDK: WORD RAZDK < RAZ DE LA ZONE SCRATCH DK.
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
<
< 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.
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
PAGE
<
<
< 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
<
<
< R A Z D E L A Z O N E S C R A T C H :
<
<
RAZDK: EQU $
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..
RSR
PAGE
<
<
< 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
<
<
< 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
<
<
< 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
<
<
< 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).
IF ORDI-"T",XWOR%,,XWOR%
<
<
< V I S U A L I S A T I O N I M A G E :
<
<
TIMAG: WORD IMAG < ADRESSE RELATIVE IMAGE VIDEO.
SP3: EQU $
LRP L
LB TIMAG-$+1,L < B=@RELATIVE IMAGE.
LA 10,W < A=SLO(ESCLAVE).
ADR A,B < B=@ABSOLUE IMAGE.
LXI NSPTV
BSR ACADCT,C < L=@DCT-VIDEO.
STB ADM,L < DEMANDE DE VISUALISATION IMAGE.
RSR
XWOR%: VAL 0
<
<
< I N C R E M E N T A T I O N X E T Y :
<
<
< FONCTION :
< CETTE ROUTINE INCREMENTE X ET Y AFIN
< D'ASSURER UN PARCORS CLASSIQUE DE
< L'IMAGE ; S'IL Y A SORTIE DE CELLE-CI,
< UN RETOUR A GE EST OPERE...
<
<
INCXY: EQU $
CPZ IHORIZ < DIRECTION DE PARCOURS ???
JNE INCXY2 < VERTICALE.
<
< PARCOURS HORIZONTAL :
<
LA PASX
ADR A,X
LR X,A
CP NPPL < VALIDATION DE X.
JLE INCXY1 < OK.
LXI 0 < RETOUR EN DEBUT,
LA PASY < ET CHANGEMENT
ADR A,Y < DE LIGNE.
LR Y,A
CP NLIG < VALIDATION DE Y.
JLE INCXY1 < OK.
INCXY3: EQU $
ADRI -1,K
BR AGOGE < C'EST FINI : RETOUR A 'GE'.
INCXY1: EQU $
RSR < RETOUR NORMAL.
<
< PARCOURS VERTICAL :
<
INCXY2: EQU $
LA PASY
ADR A,Y
LR Y,A
CP NLIG < VALIDATION DE Y.
JLE INCXY1 < OK.
LYI 0 < RETOUR 1ERE LIGNE.
LA PASX
ADR A,X
LR X,A
CP NPPL < VALIDATION DE X.
JLE INCXY1 < OK.
JMP INCXY3 < FIN D'IMAGE.
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.
BSR AVIRE < TOUTE L'IMAGE VIRTUELLE EST
< RENVOYEE EN SCRATCH AVANT
< LE RETOUR A 'GE'.
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
<
<
< R E C H E R C H E D E F O R M E S
< L I N E A I R E S :
<
<
< FONCTION :
< CE PROCESSEUR RECHERCHE DES FORMES
< DE POINTS LINEAIRES D'AU PLUS 32
< POINTS ; LORSQU'IL EN TROUVE UNE,
< IL LA REMPLACE PAR UNE AUTRE DE MEME LONGUEUR.
<
<
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.
LAD DEMMEM
SVC 0
IF ORDI-"T",XWOR%,,XWOR%
<
< 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.
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'.
TR3: EQU $
<
< INITIALISATION DU DISQUE :
<
LA AM9
BSR AINTER < FAUT-IL RAZER L'IMAGE SCRATCH.
JNE RZ1 < NON.
BSR ARAZDK
RZ1: EQU $
<
< DIRECTION DE PARCOURS :
<
LA AM5
BSR AINTER
STB IHORIZ < 0=HORIZONTAL, 1=VERTICAL.
<
< PAS DE PARCOURS DE L'IMAGE :
<
LA AM6
BSR APAS
STA PASX
LA AM7
BSR APAS
STA PASY
<
< ENTREE DES FORMES ARGUMENTS :
<
PA1: EQU $
LA AM1
BSR ACOEF < ENTREE DE LA LONGUEUR.
JALE PA1 < ERREUR.
CPI 32 < VALIDATION.
JG PA1 < ERREUR.
STA LPAT < SAVE LONGUEUR.
LR A,X < X=INDEX DU 1ER BIT NON SIGNI-
< FICATIF DES PATTERNS.
LAI 0 < CLEAR MASK,
LBI 0 < CLEAR MASK.
PA13: EQU $
XR A,X
CPI 32 < EST-ON AU BOUT DE (A,B) ???
XR A,X
JGE PA17 < OUI, FIN DE MASQUE;
SBT 0,X < NON, GENERATION MASQUE...
ADRI 1,X < BIT SUIVANT.
JMP PA13
PA17: EQU $
STA MPAT+0 < SAUVEGARDE DU
STB MPAT+1 < MASQUE 'MPAT'.
PA2: EQU $
LA AM2
BSR ACOEF < ENTREE DE 'PAT1'.
STA PAT+0
AND MPAT+0 < VALIDATION DE 'PAT1'.
JANE PA2 < ERREUR.
PA14: EQU $
LA AM4
BSR ACOEF < ENTREE DE 'NPAT1'.
STA NPAT+0
AND MPAT+0 < VALIDATION DE 'NPAT1'.
JANE PA14 < ERREUR.
LA LPAT
CPI 16 < Y-A-T'IL PLUS DE 16 POINTS ???
JLE PA3 < NON, IL SUFFIT....
PA15: EQU $
LA AM3
BSR ACOEF < ENTREE DE 'PAT2'.
STA PAT+1
AND MPAT+1 < VALIDATION DE 'PAT2'.
JANE PA15 < ERREUR.
PA16: EQU $
LA AM4
BSR ACOEF < ENTREE DE 'NPAT2'.
STA NPAT+1
AND MPAT+1 < VALIDATION DE 'NPAT2'.
JANE PA16 < ERREUR.
PA3: EQU $
<
< R E C H E R C H E R C H E :
<
LXI 0 < POSITIONNEMENT AU
LYI 0 < DEBUT DE L'IMAGE.
PA4: EQU $
STZ XPAT < POSITIONNEMENT AU DEBUT
< DE LA PATTERN CHERCHEE.
STX XIMAG < SAVE LE POINT COURANT
STY YIMAG < DE L'IMAGE.
PA5: EQU $
LBI 0 < INITIALISATION INDICATEUR.
BSR AVOISE < TEST POINT COURANT (X,Y) :
< B=0 : (X,Y)=0 ; B=1 : (X,Y)=1.
PSR B,X
LA PAT+0 < ACCES A LA PATTERN CHERCHEE.
LB PAT+1
LX XPAT < INDEX COURANT PATTERN
TBT 0,X < TEST DU BIT COURANT PATTERN.
LAI 0
ADCR A < A=0 : BIT=0 ; A=1 : BIT=1.
PLR B,X
CPR A,B
JNE PA6
<
< CAS OU L'ON A TROUVE 2 BITS COINCIDANTS :
<
IC XPAT < PROGRESSION DANS LA PATTERN.
LA XPAT
CP LPAT < EST-ON AU BOUT DE LA PATTERN ???
JGE PA7 < OUI, DONC REMPLACEMENT.
BSR AINCXY < NON, PASSAGE POINT SUIVANT.
JMP PA5
<
< CAS DE 2 FORMES COINCIDANTES :
<
PA7: EQU $
LX XIMAG < RETOUR AU POINT DE DEBUT
LY YIMAG < DE LA COINCIDENCE.
STZ XPAT < RETOUR DEBUT DE PATTERN.
<
< RECOPIE DE LA NOUVELLE PATTERN :
<
PA8: EQU $
LA NPAT+0 < ACCES A LA NOUVELLE PATTERN.
LB NPAT+1
PSR X < SAVE COORDONNEE X.
LX XPAT < X=INDEX COURANT PATTERN.
TBT 0,X < FAUT-IL METTRE UN 1 OU UN 0 ???
PLR X < RESTAURE COORDONNEE X.
JC PA9 < METTRE UN 1.
BSR ARSETV < METTRE UN 0.
JMP PA10
PA9: EQU $
BSR ASETV < METTRE UN 1.
PA10: EQU $
BSR AINCXY < PROGRESSION IMAGE.
IC XPAT < PASSAGE AU POINT SUIVANT 'NPAT'
LA XPAT
CP LPAT < ET VALIDATION.
JL PA8 < AU POINT SUIVANT DE 'NPAT'.
JMP PA4 < SI NON, RECHERCHE NOUVELLE
< COINCIDENCE.
<
< CAS DE 2 BITS DIFFERENTS :
<
PA6: EQU $
LX XIMAG < RETOUR AU DEBUT DE LA
LY YIMAG < COINCIDENCE.
BSR ATEST < TEST POINT (X,Y).
JC PA11 < METTRE UN 1.
BSR ARSETV < ON RECOPIE UN 0.
JMP PA12
PA11: EQU $
BSR ASETV < ON RECOPIE UN 1.
PA12: EQU $
BSR AINCXY < PASSAGE AU POINT IMAGE SUIVANT.
DC XPAT
JGE PA6 < IL RESTE AU MOINS UN POINT
< A RECOPIER.
JMP PA4 < VERS LA RECHERCHE D'UN COINCIDENCE.
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.