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#