NMTD: VAL "TU" NMG: VAL " =" IF NMPROC-NMTD,,XWOR%, IF NMPROC-NMG,,XWOR%, IF ATTENTION : 'NMPROC' EST MAUVAIS !!! XWOR%: VAL 0 IF NMPROC-NMTD,XWOR%9,,XWOR%9 IDP "TU - VERSION EXTENSION VOLUME DE TW" XWOR%9: VAL 0 IF NMPROC-NMG,XWOR%9,,XWOR%9 IDP " = - VERSION DE 'TU' INTERPRETATIVE" XWOR%9: VAL 0 IDP "RELEASE 27/05/1980" EOT #SIP DEFINITION CMS5# EOT #SIP DEF PROCESSEUR# PROG WORD TW < POINT D'ENTREE... WORD 0 PTW: EQU $ < DOIT VALOIR '12... LRP L BR -2,L < ENTREE DANS LE PROCESSEUR... EOT #SIP DEFINITION ITEM# ITEM2: EQU ZERO+PILE-LTNI-LTNI ITEM1: EQU ITEM2+LTNI EOT #SIP IMAGE 256# NBITMO: VAL 16 < NOMBRE DE BITS PAR MOT. NOCMO: VAL 2 < NOMBRE D'OCTETS PAR MOT... NBITOC: VAL NBITMO/NOCMO < NOMBRE DE BITS PAR OCTET... NBRHEX: VAL 4 < NOMBRE DE CHIFFRES HEXAS PAR MOT. BIT: VAL 1 NMOTL: VAL CNMPL < NOMBRE DE MOTS PAR LIGNE. NLIG: VAL LIMAG/NMOTL < NOMBRE DE LIGNES PAR TRAME. NLIGM1: VAL NLIG-1 < ORDONNEE MAXIMALE. XWOR%1: VAL NLIGM1+1 XWOR%2: VAL XWOR%1=0 IF BIT>XWOR%2-XWOR%1,,XWOR%, IF ATTENTION : 'NLIGM1' DOIT ETRE UN MASQUE !!! XWOR%: VAL 0 NPOLM1: VAL NMOTL*NBITMO-1 < ABSCISSE MAXIMALE. XWOR%1: VAL NPOLM1+1 XWOR%2: VAL XWOR%1=0 IF BIT>XWOR%2-XWOR%1,,XWOR%, IF ATTENTION : 'NPOLM1' DOIT ETRE UN MASQUE !!! XWOR%: VAL 0 NCOOL: VAL 3 < NOMBRE DE COULEURS DE BASE. NIVMAX: VAL BIT>NCOOL-BIT < NIVEAU MAX RECONNU. MFFFF: VAL 'FFFF < MASQUE DU MOT. EOT: VAL '04 < CARACTERE 'EOT'. SGNDLN: VAL 3 < FONCTION DE DELETE SGN, SGNSTN: VAL 4 < FONCTION DE STORE SGN, SGNLON: VAL 5 < FONCTION DE LOAD SOUS ACN SGN, SGNLNS: VAL 6 < FONCTION DE LOAD SOUS :SYS SGN. PAGE < < < S E L E C T I O N D U M O D E D ' E N T R E E : < < NMPROD: VAL NMPROC < SAUVEGARDE DU NOM REEL DU PROCESSEUR, < ON NE SAIT JAMAIS ??!?!?!? VISU: VAL 0 < MODE D'ENTREE PAR LA VISU, ITEM: VAL 1 < MODE D'ENTREE PAR L'ITEM1. MODE: VAL VISU < A PRIORI, 'TW'/'TX' : ENTREE VISU... IF NMPROC-NMG,XWOR%,,XWOR% NMPROC: VAL NMTD < SI " =", ON LE REMPLACE PAR "TU", MODE: VAL ITEM < AVEC ENTREE PAR L'ITEM1. XWOR%: VAL 0 PAGE < < < D E F I N I T I O N D E L ' I M A G E : < < NOM: EQU ZERO+PILE+5-LNOM IMAG: EQU NOM+LNOM IMAGE: EQU IMAG IMAGR: EQU IMAGE+0 IMAGV: EQU IMAGR+LIMAG IMAGB: EQU IMAGV+LIMAG TV1:: VAL 0 < ZONE DE VISUALISATION TELEVISION. IF TV1,,XWOR%, IF ATTENTION : DE NOMBREUSES CHOSES VONT MERDER !!! XWOR%: VAL 0 AMASK:: VAL NCOOL*LIMAG+TV1 < ADRESSE DU MASQUE DANS LA 'CDA'. IZBUF:: VAL AMASK+LIMAG < DEBUT DU BLOC COURANT DU Z-BUFFER DANS < LA 'CDA' QUAND ON EST EN '!CDAI'... LIZBUF:: VAL '1000 < LE Z-BUFFER EST DECOUPE EN BLOCS DE < 16K MOTS. NZBUF:: VAL 16 < CE QUI FAIT DONC 16 BLOCS... LEZBUF:: VAL 2 < MAIS, OH SURPRISE, LE Z-BUFFER PEUT < AVOIR DES ENTREES DE 2 MOTS (CF. " +") !! LK:: VAL 1024 XWOR%1: VAL LK XWOR%2: VAL LIZBUF/XWOR%1*NZBUF XWOR%3: VAL LIMAG/XWOR%1*NBITMO IF XWOR%3-XWOR%2,,XWOR%, IF ATTENTION : LIZBUF ET NZBUF INCOMPATIBLES !!! XWOR%: VAL 0 LSDKU:: VAL 128 NSDKU:: VAL LIZBUF/LSDKU < INCREMENT DE PASSAGE D'UN BLOC DU < Z-BUFFER AU SUIVANT SUR 'DKU'... TV2:: VAL IZBUF+LIZBUF < ZONE DE SAUVEGARDE DE L'IMAGE RESIDENTE < LORS DES INTERPOLATIONS DE COULEURS. LNOMP: VAL LNOM-1 < LONGUEUR UTILE DU NOM (A CAUSE DE < L'EOT A PRIORI... PAGE < < < D E S C R I P T E U R D ' U N P O I N T < D A N S U N E I M A G E H A U T E - D E F I N I T I O N : < < DSEC POINT: BYTE 1;2;3;4 < 1 : NIVEAU DE ROUGE BITS 1-8, < 2 : NIVEAU DE VERT BITS 1-8, < 3 : NIVEAU DE BLEU BITS 1-8, < 4 : CONTIENT EN TETE LES BITS 0 < DES NIVEAUX DE ROUGE, DE VERT, < ET DE BLEU DANS L'ORDRE : BR:: VAL NBITMO+NBITOC+0 < POIDS FORT DU NIVEAU DE ROUGE, BV:: VAL BR+1 < DE MEME POUR LE VERT, BB:: VAL BV+1 < ET ENFIN POUR LE BLEU... LPOINT:: VAL $-POINT PROG PAGE < < < M E S S A G E S : < < MMCDA: BYTE 5;'6D MCDAP: ASCI "!CDA" PI: BYTE "P";EOT MCDA: ASCI "!CDA" BYTE EOT;0 MDKS: ASCI "!DK " BYTE "S";EOT MDKF: ASCI "!DK " BYTE "F";EOT MDKON: ASCI "!DK S0 O" BYTE "N";EOT MDKOFF: ASCI "!DK S0 OFF" BYTE EOT;0 REP: DZS NBRHEX/NOCMO < BUFFER DES REPONSES. MERR: BYTE 1;"?" IF MODE-VISU,XWOR%7,,XWOR%7 MOK: BYTE 4;'6D ASCI "OK?" MSAV: BYTE 5;'6D ASCI "SAVE" MREST: BYTE 8;'6D ASCI "RESTORE" MINT: BYTE 2;'6D;">";0 MNOM: BYTE 5;'6D ASCI "NOM=" MORGX: BYTE 3;'6D ASCI "X=" MORGY: BYTE 3;'6D ASCI "Y=" MTORE: BYTE 5;'6D ASCI "TOR?" MDK: BYTE 4;'6D ASCI "DK? " MAD: BYTE 3;'6D ASCI "@=" MMEM: BYTE 5;'6D ASCI "MEM=" MLON: BYTE 3;'6D ASCI "L=" MTRAN: BYTE 3;'6D ASCI "T=" MASKO: BYTE 9;'6D ASCI "MASK ON?" MSLAS: BYTE 1;"/" MVOL: BYTE 6;"O" ASCI "LUME=" MVIDEO: BYTE 10;'6D ASCI "DK VIDEO=" MINIVO: BYTE 5;'6D ASCI "INC=" MMODUL: BYTE 5;'6D ASCI "MOD?" XWOR%7: VAL 0 < < ZONE EN RECOUVREMENT : < BUFIN: EQU ITEM2+'518 < BUFFER D'ENTREE DES FONDS. LBUFIN: VAL NBITMO/NOCMO LSTACK:: VAL 30 < LONGUEUR DE LA PILE DE TRAVAIL. STACK: EQU BUFIN+LBUFIN < PILE DE TRAVAIL. LMC:: VAL NIVMAX+1 MC: EQU STACK+LSTACK < MEMOIRE DES COULEURS. IF ITEM1-MC-LMC,,,XWOR% IF ATTENTION : LA ZONE EN RECOUVREMENT DE IF L'ITEM2, RECOUVRE AUSSI L'ITEM1 !!! XWOR%: VAL 0 PAGE < < < L O C A L : < < LOCAL LOC: EQU $ < < CONSTANTES : < IF MODE-VISU,XWOR%7,,XWOR%7 NGE: ASCI "GE" < NOM DU PROCESSEUR DE RETOUR. XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 NSD: ASCI "SD" < NOM DE L'OVERLAY D'APPEL. TCALL: WORD "GE";"EI" < NOM DES OVERLAYS DE RETOUR SI ALT-MODE. NCALL: WORD TCALL,X NPCALL: WORD 0 < NOM DU PROCESSEUR DE RETOUR SI ALT-MODE. XWOR%7: VAL 0 SAVER: WORD 0 < SAUVEGARDE D'UN MOT DE LA TRAME < RESIDENTE ROUGE, SAVEV: WORD 0 < DE MEME POUR LE VERT, SAVEB: WORD 0 < DE MEME POUR LE BLEU. MCDAR: EQU SAVER < SAUVEGARDE D'UN MOT DE LA TRAME < SCRATCH ROUGE, MCDAV: EQU SAVEV < DE MEME POUR LE VERT, MCDAB: EQU SAVEB < DE MEME POUR LE BLEU. SAVEK: WORD 0 < SAUVEGARDE DU REGISTRE 'K'. KIN: WORD -1 < COMPTEUR DES ENTREES... IF MODE-VISU,XWOR%7,,XWOR%7 NMOTS: WORD 2*LTNI < LONGUEUR MOTS DES 2 ITEMS. XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 NMOTS: WORD LTNI < POUR NE RAZER QUE L'ITEM2... XWOR%7: VAL 0 XR: WORD 0 < COORDONNEE X D'UN POINT RESIDENT, YR: WORD 0 < COORDONNEE Y D'UN POINT RESIDENT, XS: WORD 0 < COORDONNEE X D'UN POINT SCRATCH, YS: WORD 0 < COORDONNEE Y D'UN POINT SCRATCH. ORGX: WORD 0 < ORIGINE EN X DE L'IMAGE SCRATCH < PAR RAPPORT A L'IMAGE RESIDENTE, ORGY: WORD 0 < DE MEME, ORIGINE EN Y... MODX: WORD 0 < 0 : "TORE" SUR LES X, < 1 : L'IMAGE SCRATCH NE SE REFERME PAS... MODY: WORD 0 < DE MEME SUR L'AXE DES Y. WORK1: WORD 0 < VARIABLE DE TRAVAIL... MCDAM: WORD 0 < MOT COURANT DE LA 'CDA'. IMASKO: WORD 0 < 0 : MASK OFF, < 1 : MASK ON... IF MODE-ITEM,XWOR%7,,XWOR%7 < < DONNEES DE SIMULATION DES ENTREES : < IEG: WORD 0 < INDEX COURANT DE L'ITEM1. NCP: WORD NBCAR*NBLIG-LNOM < LONGUEUR MAX D'UN ITEM, < ON RETRANCHE LNOM, CAR LE NOM < D'UNE IMAGE DOIT ETRE IMPERATIVEMENT < DEVANT L'IMAGE... AI1: WORD ITEM1+LTN,X < RELAI D'ACCES A L'ITEM1. ABUFC: WORD 0 < RELAI D'ACCES AU BUFFER COURANT. XWOR%7: VAL 0 < < RELAIS DE TABLES, D'IMAGES... < ACOM: WORD KOM,X < TABLE DES COMMANDES RECONNUES. AMERR: EQU MERR < MESSAGE D'ERREUR. IF MODE-VISU,XWOR%7,,XWOR%7 AMINT: EQU MINT < MESSAGE D'INVITATION. AMNOM: EQU MNOM < "NOM=" AMORGX: EQU MORGX < "ORGX=" AMORGY: EQU MORGY < "ORGY=" AMTORE: EQU MTORE < "TORE?" AMASKO: EQU MASKO < "MASK ON?" AMSLAS: EQU MSLAS < "/" AMDK: EQU MDK < "DK?" AMAD: EQU MAD < "@=" AMMEM: EQU MMEM < "MEM=" AMLON: EQU MLON < "L=" AMTRAN: EQU MTRAN < "T=" XWOR%7: VAL 0 AREP: WORD REP < ACCES AU BUFFER DE REPONSE... AREPX: WORD REP,X < DE MEME EN INDEXE... ABUFIN: WORD BUFIN,X < ACCES AU BUFFER DE GENERATION DU FOND. AMCDAP: EQU MCDAP < !CDAP. AMCDA: EQU MCDA < !CDA. AMMCDA: EQU MMCDA < !CDA. API: WORD PI < RELAI POUR RANGER "P" OU "I"... AIMAGR: WORD IMAGR,X < RELAI TRAME ROUGE, AIMAGV: WORD IMAGV,X < RELAI TRAME VERTE, AIMAGB: WORD IMAGB,X < RELAI TRAME BLEUE. AITEM2: WORD ITEM2-1,X < POUR RAZER LES ITEMS 1 ET 2. AEOT: WORD NOM+LNOMP < POUR FORCER UN EOT... < < RELAIS DE SOUS-PROGRAMMES : < AOVL: WORD OVL < CHARGEMENT DES OVERLAYS... IF MODE-VISU,XWOR%7,,XWOR%7 APRINT: WORD PRINT < EDITION D'UN MESSAGE. XWOR%7: VAL 0 AENTER: WORD ENTER < ENTREE DE QUELQUE CHOSE SUR LA VISU... AHEX: WORD HEX < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE AIN: WORD IN < ENTREE D'UN CARACTERE REPONSE. AIHEX: WORD IHEX < ENTREE D'UN NOMBRE HEXA-DECIMAL. ACCI: WORD CCI < ACCES AU CCI. AGOSGN: WORD GOSGN < POUR ACCEDER AU SGN... ASPAPR: WORD SPAPR < ACCES A UN POINT RESIDENT (X,Y). ASPAPS: WORD SPAPS < ACCES A UN POINT SCRATCH (X,Y). ASPSPR: WORD SPSPR < RANGEMENT D'UN POINT RESIDENT (X,Y). ASPSPS: WORD SPSPS < RANGEMENT D'UN POINT SCRATCH (X,Y). ASPGPR: EQU ASPAPR ASPGPS: EQU ASPAPS ASPRPR: EQU ASPSPR ASPRPS: EQU ASPSPS ASPACD: WORD SPACD < TRANSFERT EN RESIDENT AVEC MASQUE, AINVER: WORD INVER < MODULE DE "PERMUTATION" DES COULEURS. APCHNI: WORD PCHNI < MODULO DE TRANSLATION DES NIVEAUX. APMOV5: WORD PMOV5 < TV R --> RESIDENT, APMOV6: WORD PMOV6 < TV V --> RESIDENT, APMOV7: WORD PMOV7 < TV B --> RESIDENT. ASP: WORD 0 < RELAI VARIABLE CONTENANT L'ADRESSE DE < L'UN DES SOUS-PROGRAMMES PRECEDENTS. ASPOP: WORD SPOP < OPERATIONS INTER-IMAGES... ALOOP: WORD LOOP < BOUCLE DE L'INTERROGATION. IF MODE-ITEM,XWOR%7,,XWOR%7 AALTM: WORD ALTM < TRAITEMENT DES RETOURS BRUTAUX... XWOR%7: VAL 0 < < DEMANDES A CMS5 : < DEMIN: WORD '0101 < ENTREE D'UN CARACTERE DE REPONSE. WORD REP-ZERO*NOCMO WORD 1 DEMHEX: WORD '0101 < ENTREE D'UN NOMBRE HEXA-DECIMAL. WORD REP-ZERO*NOCMO WORD NBRHEX DEMOUT: WORD '0202 < ECRITURE D'UN MESSAGE SUR LA VISU. WORD MERR-ZERO*NOCMO+1 WORD 1 < MESSAGE D'ERREUR POUR " P"... DEMMEM: WORD 4 < DEMANDE DE 16 K MOTS... RELMEM: WORD 4 < RETOUR A 4K MOTS... WORD '8000 WORD '2000 DEMCC: WORD 2 < ACCES AU CCI INTERPRETATIF. WORD 0 < ADRESSE DE LA CARTE. WORD 80 NOMIN: WORD '0101 < ENTREE DU NOM D'UNE IMAGE. WORD NOM-ZERO*NOCMO WORD LNOMP*NOCMO SGN: WORD '0002 < POUR LES ACCES AU SGN. WORD NOM-ZERO*NOCMO WORD LIMAG*NCOOL+LNOM*NOCMO WORD -1 < LA VALEUR SUIT LE NOM... NDKU:: VAL '8A < 'NVP' D'ACCES A 'DKU'... TVDKU: VAL NDKU>NBITOC?'01 < ACCES A 'DKU' POUR LA 'TV'. DEMTVR: WORD TVDKU < ACCES AU ROUGE. WORD IMAGR-ZERO*NOCMO WORD LIMAG*NOCMO WORD TVPR IF MODE-ITEM,XWOR%7,,XWOR%7 NITER: WORD 1 < NITER=NOMBRE D'ITERATIONS DES LECTURES < 'DKU' AFIN DE RALENTIR LE DEBIT. XWOR%7: VAL 0 DEMTVV: WORD TVDKU < ACCES AU VERT. WORD IMAGV-ZERO*NOCMO WORD LIMAG*NOCMO WORD TVPV DEMTVB: WORD TVDKU < ACCES AU BLEU. WORD IMAGB-ZERO*NOCMO WORD LIMAG*NOCMO WORD TVPB DEMLOD: BYTE '80?SGNLNS;'02 < DEMANDE DE CHARGEMENT DE "GE". WORD BRANCH-ZERO*NOCMO WORD ZERO-BRANCH+PILE-LTNI-LTNI*NOCMO WORD -1 < < DONNEES DE SAUVEGARDE DE LA 'CDAI' : < NBDKU:: VAL 4 < NOMBRE D'OPERATIONS ELEMENTAIRES... XWOR%1: VAL NBDKU=0 IF 1>XWOR%1-NBDKU,,XWOR%, IF ATTENTION : 'NBDKU' N'EST PAS UNE PUISSANCE DE 2 !!! XWOR%: VAL 0 XWOR%1: VAL XWOR%1+1 < +1 CAR LA SAUVEGARDE/RESTAURATION < SE FAIT EN 2 ETAPES... TSDKU:: VAL '2000 < TAILLE MOTS DE CHACUN DES BLOCS QUE < L'ON SAUVEGARDE... IF TSDKU>XWOR%1,,XWOR%, IF ATTENTION : LA 'CDAI' EST INCOMPLETEMENT SAUVEGARDEE !!! XWOR%: VAL 0 MAXDKU: WORD NZBUF*NSDKU*LEZBUF < PREMIERE ADRESSE DKU DERRIERE LE < Z-BUFFER DISPONIBLE... INCDKU: WORD TSDKU/LSDKU < POUR PASSER D'UN BLOC 'DKU' A L'AUTRE. RWDKU: BYTE NDKU;'00 < DEMANDE DE LECTURE/ECRITURE DE 'CDAI'. WORD TV1*NOCMO WORD TSDKU*NOCMO WORD NZBUF*NSDKU*LEZBUF IF MODE-ITEM,XWOR%7,,XWOR%7 SITEM1: DZS LNOM/NOCMO < POUR SAUVEGARDER LA FIN DE L'ITEM1. XWOR%7: VAL 0 < < BUFFER DE TRANSFERT ENTRE < LES ADRESSES HAUTES ET BASSES < DE LA 'CDAI' : < LBTRAN:: VAL 64 BTRAN: EQU $ DZS LBTRAN PAGE < < < C O M M O N : < < COMMON COMON: WORD 0 < LE PREMIER MOT DU COMMON EST RESERVE < A L'OPERATEUR FLOTTANT !!! < < DONNEES DE PASSAGE DE 'MEMTV' A 'DKU' : < SDKUR:: VAL '04 < 'DKU' --> 'MEMTV'. SDKUW:: VAL '06 < 'MEMTV' --> 'DKU'. ROUGE:: VAL 0 < PREMIER MOT DE 'MEMTV'. SDKU: BYTE NDKU;0 < DEMANDE D'ECHANGE 'MEMTV'-'DKU'. AMDKU: WORD ROUGE LODKU: WORD LIMAG*NOCMO*NCOOL ASDKU: WORD 0 < ADRESSE COURANTE SUR 'DKU'. XASDKU:: VAL ZERO-BRANCH < PAR OU TRANSMETTRE L'ADRESSE 'DKU' < COURANTE... (MOT0) TDKU: WORD '23 < CONSTANTE DE PASSAGE D'UNE IMAGE A < UNE AUTRE, EN LAISSANT UN "GAP" ENTRE 2. ASPDK1: WORD SPDK1 < CHOIX ENTRE 'DKU' ET... IF MODE-VISU,XWOR%7,,XWOR%7 EOM:: VAL '0D < SI VISU : LIMITEUR=R/C... XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 EOM:: VAL '04 < SI ITEM : LIMITEUR=EOT... XWOR%7: VAL 0 DKURP: BYTE "+";EOM < INCREMENTATION AUTOMATIQUE, DKURM: BYTE "-";EOM < DECREMENTATION AUTOMATIQUE. < < ACCES AU VOLUME EXTENSION : < MQFFFF: ASCI "!QFFFF" BYTE EOT;0 AASDKU: ASCI "!ASSIGN A=DK" BYTE "U";'04 MVDKU: ASCI "!DKU M A" NAVOL: BYTE "=";"X";"Y";"Z";"T";'04 ANAVOL: WORD NAVOL,X < POUR GENERER LE NUMERO DE VOLUME. MDVDKU: ASCI "!DKU D A" BYTE '04;0 MCLOSE: ASCI "!ASSIGN A=" BYTE "S";'04 VOLNUM: WORD 0 < NUMERO DU VOLUME COURANT (0=ABSENT)... < < GESTION DU DISQUE VIDEO : < LMDKV:: VAL 20 < LONGUEUR MAX DES MESSAGES VERS LE < DISQUE VIDEO... MBDKV: BYTE '6D;"*" < POUR FAIRE L'ECHO DES MESSAGES REN- < VOYES PAR LE DISQUE VIDEO. LMBDKV:: VAL $-MBDKV*NOCMO < ET LONGUEUR... BDKV: DZS LMDKV/NOCMO < BUFFER DES MESSAGES DISQUE VIDEO... ABDKV: WORD BDKV,X < RELAI D'ACCES AU BUFFER... DMDKV: WORD '0101 < ENTREE DES MESSAGES DESTINES AU DISQUE WORD BDKV-ZERO*NOCMO < VIDEO. WORD LMDKV SDKV: WORD '8C02 < ENVOI DES MESSAGES AU DISQUE VIDEO : WORD BDKV-ZERO*NOCMO LMIN: WORD 0 < LONGUEUR COURANTE DU MESSAGE (DEFINIE < PAR 'ENTER'). DMDKVC: WORD '8C07 < POUR CLEARER LE BUFFER D'ANTICIPATION BYTE '04;0 < DE LA VISU8... IREADV: WORD 1 < +1 >0 : LIRE LE COMPTE-RENDU DU DISQUE, < -1 <0 : NE PAS LE LIRE, CE QUI PERMET < DES OPERATIONS PARALLELES... DMDKVR: WORD '8C00 < LECTURE DES REPONSES DU DSQIE VIDEO. WORD BDKV-ZERO*NOCMO WORD LMDKV IREPDV: WORD 1 < +1 >0 : EDITER LES REPONSES DU DISQUE, < -1 <0 : NE PAS LES EDITER (VOIR LA COM- < MANDE EN BASCULE "H"). DMDKVW: WORD '0202 < EDITION DES REPONSES. WORD MBDKV-ZERO*NOCMO WORD 0 < LONGUEUR VARIABLE... < < ENVOI EN ZDC : < VALZDC: WORD 0 < MOT DE SYNCHRONISATION... LONZDC:: VAL $-VALZDC*2 DEMZDC: WORD '0008 < ACCES A LA SYNCHRONISATION... WORD VALZDC-ZERO*2 WORD LONZDC WORD 'C001 DELZDC: WORD '000A < ENVOI DE L'ACQUITTEMENT ZDC. WORD VALZDC-ZERO*2 WORD LONZDC WORD 'C000 < < DONNEES DE TRANSLATION DES NIVEAUX : < INIVO: WORD 0 < AMPLITUDE DE LA TRANSLATION DES NIVEAUX, TNIVO: WORD 0 < =0 : LES NIVEAUX SERONT CALCULES MODULO, < #0 : LES NIVEAUX DEBORDANTS SERONT MIS < AU NOIR. PAGE < < < T A B L E D E S C O M M A N D E S : < < REP0: VAL "+" < PREMIERE COMMANDE. KOM: EQU $-REP0 < ELLES COMMENCENT A "+"... WORD STORE < + : STORE SGN LE RESIDENT AERROR: WORD ERROR < , WORD DELETE < - : DELETE SGN LE RESIDENT WORD ERROR <. WORD ERROR < / WORD MOV0 < 0 : TV <-- RESIDENT R+V+B WORD MOV1 < 1 : TV <-- RESIDENT R WORD MOV2 < 2 : TV <-- RESIDENT V WORD MOV3 < 3 : TV <-- RESIDENT B WORD MOV4 < 4 : RESIDENT <-- TV R+V+B WORD MOV5 < 5 : RESIDENT <-- TV R WORD MOV6 < 6 : RESIDENT <-- TV V WORD MOV7 < 7 : RESIDENT <-- TV B WORD RESTOR < 8 : RESTAURATION 'DKU' --> 'CDAI' WORD SAVE < 9 : SAUVEGARDE 'CDAI' --> 'DKU' WORD ERROR < : WORD ERROR < ; WORD ERROR < < WORD DEFDKU < = : DEFINITION DES ECHANGES 'DKU' WORD ERROR < > WORD ERROR < ? WORD ERROR < @ WORD ERROR < A WORD BON < B : "!DK S0 ON" WORD DKUS < C : "!DK S" : MISE DE DKU EN MODE 'SLOW' WORD DISP < D : RESIDENT <-- IMAGE SGN WORD ERROR < E WORD GOGE < F : FIN WORD VIDEO < G : COMMANDE DU DISQUE VIDEO WORD INVREP < H : EDITER OUI/NON LES REPONSES 'DKV' WORD COMPL < I : "PERMUTATION" DES COULEURS WORD GETZDC < J : SYNCHRONISATION SUR LA 'ZDC' WORD PNITER < K : RALENTISSEMENT DU DEBIT DE " =" WORD IMLOAD < L : RESIDENT <-- (SCRATCH) SANS MASQUE WORD MAUVAI < M : "!DK S0 OFF" WORD NAME < N : NOMME L'IMAGE RESIDENTE WORD ERROR < O WORD CHNIV < P : TRANSLATION DES NIVEAUX WORD CRDKV < Q : LIRE OUI/NON LE COMPTE-RENDU 'DKV' WORD DKUF < R : "!DK F" : MISE DE DKU EN MODE 'FAST' WORD IMSAV < S : SCRATCH <-- (RESIDENT) WORD ERROR < T WORD IMUP < U : RESIDENT <-- (SCRATCH) AVEC MASQUE WORD VOLUME < V : ENTREE DU VOLUME COURANT WORD GOCCI < W : RETOUR TEMPORAIRE AU CCI WORD GORGX < X : POSITIONNEMENT DE 'ORGX' WORD GORGY < Y : POSITIONNEMENT DE 'ORGY' REPZ: VAL $-KOM-1 < DERNIERE COMMANDE. PAGE PROG IF MODE-VISU,XWOR%7,,XWOR%7 < < < E D I T I O N D ' U N M E S S A G E : < < < ARGUMENT : < A=ADRESSE MOT DU MESSAGE, DONT LE < PREMIER OCTET EST LA LONGUEUR. < < PRINT: EQU $ PSR A,X,C LR A,C ADR A,A ADRI 1,A < CALCUL DE L'ADRESSE OCTET DU MESSAGE. STA DEMOUT+1 LBY 0,C < ACCES A LA LONGUEUR... STA DEMOUT+2 LAD DEMOUT SVC 0 < ENVOI DU MESSAGE... PLR A,X,C RSR XWOR%7: VAL 0 PAGE < < < E N T R E E D E Q U E L Q U E C H O S E : < < < ARGUMENT : < A=ADRESSE DE LA DEMANDE. < < IF MODE-VISU,XWOR%7,,XWOR%7 ENTER: EQU $ PSR A,B,X SVC 0 < ENVOI DE LA DEMANDE... ACTD 3 < ENTREE DE LA 'BOX', STB LMIN < ON MEMORISE DONC LE NOMBRE DE CARACTERES < LUS LORS DES ENTREES VISUS... CPZR X < AU CAS OU... PLR A,B,X RSR XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 ENTER: EQU $ PSR A,X,Y,W LR A,W < W=ADRESSE DE LA DEMANDE : LRM A WORD '0101 CP 0,W < EST-CE BIEN UNE ENTREE AVEC ECHO < SUR LA VISU UTILISATEUR ??? JE ENTER1 < OUI... QUIT 1 < NON, ???!???! ENTER1: EQU $ LA 1,W < A=ADRESSE OCTET DU BUFFER, LYI 0 < Y=INDEX DU BUFFER, SLRS NOCMO=0 < CONVERSION EN UNE ADRESSE MOT, ADCR Y < Y=INDEX INITIAL DU BUFFER COURANT. SBT 0 < MISE EN PLACE DU BIT INDEX, STA ABUFC < ET GENERATION DU RELAI VERS LE BUFFER. LX 2,W < X=NOMBRE D'OCTETS MAX A DEPLACER... ENTER2: EQU $ PSR X LA IEG < A=INDEX COURANT DE L'ITEM1, CP NCP < ET VALIDATION ??? JL ENTER3 < OK... BR AALTM < NON, ON FAIT COMME SI UN ALT-MODE < ETAIT ARRIVE... ENTER3: EQU $ IC IEG < PROGRESSION DE L'INDEX DE L'ITEM1. LR A,X < X=INDEX D'ACCES A L'ITEM1, LBY &AI1 < A=CARACTERE COURANT DE L'ITEM1, CPI " " < EST-CE L'ELEMENT NEUTRE ??? JNE ENTER6 < NON... PLR X < OUI, LR X,A CP 2,W < EST-ON EN TETE DU MESSAGE ??? JE ENTER2 < OUI, ON IGNORE LE 'SPACE'... PSR X < NON, ON LE CONSERVE... LAI " " < RESTAURATION DE 'A'... ENTER6: EQU $ CPI ";" < EST-CE LA FIN DE MESSAGE ??? JNE ENTER4 < NON, LAI '04 < OUI, ON LE REMPLACE PAR 'EOT'... ENTER4: EQU $ LR Y,X STBY &ABUFC < ET RANGEMENT DANS LE BUFFER... ADRI 1,Y < PROGRESSION DE L'INDEX BUFFER. PLR X CPI '04 < EST-CE UNE FIN DE MESSAGE ??? JE ENTER5 < OUI, ON ARRETE LA... JDX ENTER2 < NON, ON CONTINUE... ENTER5: EQU $ STY LMIN < SIMULATION DE LA 'BOX'... PLR A,X,Y,W RSR XWOR%7: VAL 0 PAGE < < < C O N V E R S I O N H E X A --> B I N A I R E : < < < ARGUMENT : < LE BUFFER 'REP'. < < < RESULTAT : < B=0 : (A)=VALEUR BINAIRE, < B#0 : ERREUR DE SYNTAXE HEXA-DECIMALE. < LES INDICATEURS POSITIONNES SUR (B). < < HEX: EQU $ BASE10: VAL 10 BASE16: VAL 16 PSR X,Y LYI NBRHEX LXI 0 < INDEX DU BUFFER DE REPONSE. LBI 0 < CLEAR LE REGISTRE B. HEX1: EQU $ LBY &AREPX < A=CARACTERE COURANT DU BUFFER. ADRI -"0",A JAL HEX4 < ERREUR : CARACTERE NON RECONNU. CPI BASE10 < EST-CE UN CHIFFRE ??? JL HEX2 < OUI , C'EST UN CHIFFRE. ADRI -"A"+"9"+1,A < NON. CPI BASE10 < VALIDATION. JL HEX4 < ERREUR : CARACTERE NON RECONNU. CPI BASE16 < VALIDATION. JGE HEX4 < ERREUR : CARACTERE NON RECONNU. HEX2: EQU $ SCRS NBITMO/NBRHEX < MISE DES 4 BITS EN TETE DE A. SCLD NBITMO/NBRHEX < ET CONCATENATION A B. ADRI 1,X < PROGRESSION DE L'INDEX. CPR X,Y < EST-CE FINI ??? JNE HEX1 < NON , ON CONTINUE. LR B,A < A=VALEUR BINAIRE DE (REP). LBI 0 < B=0 : RETOUR OK. HEX3: EQU $ PLR X,Y CPZR B < POSITIONNEMENT DES INDICATEURS. RSR < < RETOURS EN ERREUR : < HEX4: EQU $ LR B,A < A=VALEUR COURANTE... LBI 1 < B#0. JMP HEX3 < VERS LA SORTIE ... PAGE < < < E N T R E E U N C A R A C T E R E : < < IN: EQU $ LAD DEMIN BSR AENTER LBY &AREP < A=CARACTERE REPONSE. RSR PAGE < < < E N T R E E U N N O M B R E H E X A - D E C I M A L : < < IHEX: EQU $ LAD DEMHEX BSR AENTER BSR AHEX < DONC MEMES RESULTATS QUE 'HEX'... RSR PAGE < < < E N V O I D ' U N E C A R T E A U C C I : < < < ARGUMENT : < A=ADRESSE MOT DE LA CARTE. < < CCI: EQU $ ADR A,A < CONVERSION EN UNE ADRESSE OCTET. STA DEMCC+1 LAD DEMCC SVC 0 < ET ENVOI DE LA CARTE... RSR PAGE < < < T R A I T E M E N T D E S E R R E U R S : < < ERROR: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMERR-ZERO BSR APRINT < ENVOI D'UN MESSAGE D'ERREUR... XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 LAD DEMOUT SVC 0 < EDITION DU MESSAGE D'ERREUR... XWOR%7: VAL 0 BR ALOOP < ET C'EST TOUT... PAGE < < < R E T O U R A ' G E ' : < < GOGE: EQU $ LA ASDKU STA XASDKU,W < TRANSMISSION DE L'ADRESSE COURANTE 'DKU'. IF MODE-ITEM,XWOR%7,,XWOR%7 LAI BRANCH-ZERO LR A,W < W=ADRESSE DE LA BRANCHE... LA NSD STA 0,W < GENERATION DU NOM DE L'OVERALY, ACTD 4 < A='IDESC', ORI "0" < CONVERTI EN ASCI, STBY 2,W < QUI FAIT PARTIE DU NOM... LAI SGNLON STBY DEMLOD < MISE EN MODE 'LOAD SOUS ACN'... STZ CDRET,W < RETOUR OK... GOGE2: EQU $ LRM A,B,X WORD SITEM1 < A=ZONE DE SAUVEGARDE, WORD NOM < B=ZONE A RESTAURER, WORD LNOM/NOCMO < X=NOMBRE DE MOTS A RESTAURER. MOVE < RESTAURATION DU BOUT DE L'ITEM1... LX NMOTS GOGE3: EQU $ STZ &AITEM2 < RAZ DE L'ITEM2... JDX GOGE3 XWOR%7: VAL 0 LA SAVEK LR A,K < RESTAURATION DE 'K'... LAI 0 ACTD 'A < RESTAURATION DU ALT-MODE... IF MODE-VISU,XWOR%7,,XWOR%7 LAD RELMEM SVC 0 < RETOUR A 4K MOTS... LX NMOTS < X=NOMBRE DE MOTS A RAZER... TW2: EQU $ STZ &AITEM2 < RAZE DES ITEMS 1 ET 2. JDX TW2 LAI BRANCH-ZERO LR A,W < RESTAURATION DE 'W'. STZ MODCAL,W < REINITIALISATION DU MODE D'APPEL... LA NGE STA 0,W < MISE EN PLACE DU NOM DE "GE"... XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 LA IEG STA MODCAL,W < RENVOI DE L'INDEX COURANT DE ITEM1, XWOR%7: VAL 0 LAI AMCDA-ZERO BSR ACCI < ENVOI DE !CDA. GOGE1: EQU $ LAD DEMLOD BSR AOVL < ET TENTATIVE DE CHARGEMENT... QUIT 1 < EN CAS D'ERREUR, JMP GOGE1 < ET ON RETENTE... IF MODE-ITEM,XWOR%7,,XWOR%7 < < < T R A I T E M E N T D E S A L T - M O D E S : < < ALTM: EQU $ LAI BRANCH-ZERO LR A,W < W=ADRESSE DE LA BRANCHE... LA NPCALL JANE ALTM1 < OK... LA MODCAL,W < MODCAL EST ENCORE A SA VALEUR INITIALE. LXI 0 < "GE" A PRIORI... TBT 0 < "EI" OU "GE" ??? ADCR X LA &NCALL < A=OVERLAY A APPELER... ALTM1: EQU $ STA 0,W < DANS LE CAS D'UN ALT-MODE, ON REVIENT < DIRECTEMENT A "GE" OU A "EI"... LAI " " < ON RESTAURE, AU CAS OU LE ALT-MODE STBY 2,W < APPARAITRAIT DANS 'GOGE'... LAI SGNLNS < IDEM... STBY DEMLOD LAI 2 STA CDRET,W < TRANSMISSION DU ALT-MODE... JMP GOGE2 XWOR%7: VAL 0 PAGE < < < E N T R Y : < < TW: EQU $ LRM C,L WORD COMON+128 < C=BASE DU COMMON... WORD LOC+128 < L=BASE DU LOCAL... IC KIN < COMPTAGE DES ENTREES : IF MODE-VISU,XWOR%7,,XWOR%7 JG TW1 < CAS DES ALT-MODES... XWOR%7: VAL 0 LAD DMDKVC SVC 0 < CLEAR INITIAL DU BUFFER D'ANTICI- < PATION DU DISQUE VIDEO... IF MODE-ITEM,XWOR%7,,XWOR%7 JG ALTM < ABORT IMMEDIAT SUR ALT-MODE... LA CDRET,W < A=RELAI D'ACCES A ITEM1/ITEM2... CP AI1 < SEUL ITEM1 EST AUTORISE... JNE ALTM < L'ITEM2 PROVOQUE UN ABORT... LA MODCAL,W < A=INDEX INITIAL DE L'ITEM1... LXI 0 < "GE" A PRIORI... TBT 0 < "GE" (0) OU "EI" (1) ??? ADCR X RBT 0 STA IEG LA &NCALL STA NPCALL < NOM DU PROCESSEUR A APPELER SUR LA < RECEPTION D'UN ALT-MODE. LRM A,B,X WORD NOM < A=ZONE A SAUVEGARDER, WORD SITEM1 < B=ZONE DE SAUVEGARDE, WORD LNOM/NOCMO < X=NOMBRE DE MOTS. MOVE < SAUVEGARDE... XWOR%7: VAL 0 LA XASDKU,W STA ASDKU < ADRESSE INITIALE SUR 'DKU'... LR K,A < CAS DE LA PREMIERE, STA SAVEK < SAUVEGARDE DE K... TW1: EQU $ LRM K WORD STACK-1 < INITIALISATION DE K... TW20: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMCDA-ZERO BSR APRINT < EDITION DE "!CDA"... XWOR%7: VAL 0 BSR AIN < CHOIX ENTRE !CDAI ET !CDAP... CPI "P" JE TW21 < VERS LA 'CDA-PRIVEE'... CPI "I" JNE TW20 < ?!??!??! TW21: EQU $ STBY &API < MISE EN PLACE DE "P" OU "I"... LAI AMCDAP-ZERO BSR ACCI < TENTATIVE DE !CDAP OU !CDAI, JNE GOGE < ET BIEN CELA NE MARCHE PAS... LAD AASDKU BSR ACCI < TENTATIVE D'APPROPRIATION DE 'DKU' ; A < NOTER QU'ON NE LE RENDRA JAMAIS !!! STZ IMASKO < MISE DU MASQUE OFF A PRIORI... STZ VOLNUM < PAS DE VOLUME A PRIORI... LRM A WORD LIMAG*NCOOL+LNOM*NOCMO STA SGN+2 < A PRIORI... LAI 0 ACTD 'A < ON RESTAURE LE ALT-MODE A PRIORI... LAD DEMMEM SVC 0 < PASSAGE A 16 K... LAI '18 WORD '1E15 LR B,X < X=ORIGINE DE LA 'CDAP'/'CDAI', LAI '19 WORD '1E15 SBR X,B XWOR%1: VAL -4 < B=LONGUEUR UTILE DE LA 'CDAP'/'CDAI', LRM A WORD IZBUF-TV1>XWOR%1 < A=LONGUEUR NECESSAIRE (IMAGE+MASQUE), CPR A,B < CELA SUFFIT-IL ??? JL GOGE < B<A : INSUFFISANT POUR TRAVAILLER... TW13: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMASKO-ZERO BSR APRINT < EDITION DE "MASK ON?"... XWOR%7: VAL 0 BSR AIN STZ IMASKO < OFF A PRIORI... CPI "N" JE TW14 < OK, IMASKO=0 ==> OFF... IC IMASKO < A PRIORI, IMASKO=1 ==> ON... CPI "O" JNE TW13 < ?!??!??! TW14: EQU $ PAGE < < < B O U C L E D ' I N T E R R O G A T I O N : < < LOOP: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMINT-ZERO BSR APRINT < ENVOI DU MESSAGE ">", XWOR%7: VAL 0 BSR AIN CPI REP0 < ET VALIDATION... JL TW12 < ERREUR... CPI REPZ < VALIDATION, SUITE... JG TW12 < ERREUR... LR A,X < X=COMMANDE DEMANDEE, BR &ACOM < BRANCHEMENT AU MODULE SPECIFIQUE... TW12: EQU $ BR AERROR < ERREUR... PAGE < < < A C C E S A U C C I : < < GOCCI: EQU $ QUIT 1 < ACCES AU CCI INTERACTIF... BR ALOOP PAGE < < < S A U V E G A R D E / R E S T A U R A T I O N < D E L A ' C D A I ' : < < RESTOR: EQU $ < ENTRY DE RESTAURATION : FREST:: VAL '0C < FONCTION DE RESTAURATION... IF MODE-VISU,XWOR%7,,XWOR%7 LAI MREST-ZERO BSR APRINT XWOR%7: VAL 0 LAI FREST < (A)=FONCTION DE LECTURE. LRM B WORD TSDKU/LSDKU*NBDKU < POUR COMMENCER PAR LE HAUT DE LA 'CDAI'.. JMP RES1 SAVE: EQU $ < ENTRY DE SAUVEGARDE : FSAVE:: VAL '0E < FONCTION DE SAUVEGARDE... IF MODE-VISU,XWOR%7,,XWOR%7 LAI MSAV-ZERO BSR APRINT XWOR%7: VAL 0 LAI FSAVE < (A)=FONCTION DE SAUVEGARDE. LBI 0 < POUR COMMENCER PAR LE BASE DE LA 'CDAI'.. RES1: EQU $ < < INITIALISATION DE LA DEMANDE 'DKU' : < STA RWDKU < FONCTION, LAI NDKU STBY RWDKU < ET NVP. LAI TV1*NOCMO STA RWDKU+1 < ADRESSE MEMOIRE-OCTETS EN 'CDAI'. LA MAXDKU ADR B,A < POUR COMMENCER SOIT PAR LE HAUT (RESTAU- < RATION) OU PAR LE BAS (SAUVEGARDE)... STA RWDKU+3 < ADRESSE SUR 'DKU'. IF MODE-VISU,XWOR%7,,XWOR%7 LAI MOK-ZERO BSR APRINT < ENVOI D'UN MESSAGE 'OK?'... XWOR%7: VAL 0 BSR AIN < ENTREE D'UNE REPONSE... CPI "O" JE RES2 < SEUL "O" EST ACCEPTE... RES5: EQU $ BR AERROR < TOUT AUTRE REPONSE EST UNE ERREUR... RES2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI MOK-ZERO BSR APRINT < ET ON REDEMANDE... XWOR%7: VAL 0 BSR AIN < ENTREE D'UNE DEUXIEME REPONSE... CPI "O" JNE RES5 < IL FAUT 2 "O" DE SUITE !!! < < PREMIERE PARTIE DE L'OPERATION : < (ECRITURE DU BAS DE LA 'CDAI' < POUR UNE SAUVEGARDE, ET LECTURE < DU HAUT POUR UNE RESTAURATION) < LXI NBDKU < (X)=NOMBRE D'OPERATIONS, RES3: EQU $ PSR X LAD RWDKU SVC 0 < OPERATION ELEMEMTAIRE... PLR X JE RES4 < OK... QUIT 1 < ???!?!?! JMP RES3 < ON ITERE... RES4: EQU $ LA RWDKU+1 AD RWDKU+2 STA RWDKU+1 < PROGRESSION DE L'ADRESSE MEMOIRE... LA RWDKU+3 AD INCDKU STA RWDKU+3 < PROGRESSION DE L'ADRESSE SUR 'DKU'. JDX RES3 < AU BLOC SUIVANT... < < PHASE INTERMEDIAIRE : < DEPLACEMENT DU HAUT VERS LE BAS < POUR UNE SAUVEGARDE, ET DU BAS < VERS LE HAUT POUR UNE RESTAURATION) < XWOR%1: VAL LBTRAN=0 IF 1>XWOR%1-LBTRAN,,XWOR%, IF ATTENTION : 'LBTRAN' DOUIT ETRE UNE PUISSANCE DE 2 !!! XWOR%: VAL 0 XWOR%1: VAL -XWOR%1 LRM X WORD TSDKU*NBDKU>XWOR%1 < (X)=DECOMPTEUR DES MOUVEMENTS DE BUFFER, LA RWDKU MOCD:: VAL '00FF ANDI MOCD < (A)=FONCTION COURANTE : CPI FSAVE < EST-CE UNE SAUVEGARDE ??? LRM A,B,Y < A PRIORI SAUVEGARDE : WORD TSDKU*NBDKU+TV1 < (A)=ADRESSE DU HAUT DE LA 'CDAI', WORD BTRAN < (B)=ADRESSE DU BUFFER DE TRANSIT, WORD TSDKU*NBDKU < (Y)=TRANSLATION DE PASSAGE DU BAS VERS < LE HAUT DE LA 'CDAI'... JE RES10 < OUI, C'EST UNE SAUVEGARDE... LA MAXDKU < NON, C'EST UNE RESTAURATION, IL FAUT STA RWDKU+3 < REPARTIR DU BAS... NGR Y,Y < ON INVERSE LA TRANSLATION (HAUT-->BAS)... LAI TV1 < (A)=ADRESSE DU BAS DE LA 'CDAI'... RES10: EQU $ RES11: EQU $ PSR X < SAUVEGARDE DU DECOMPTEUR, LXI LBTRAN < (X)=NOMBRE DE MOTS A DEPLACER, RCDA < CDAI --> BTRAN, SBR Y,A < COMMUTATION HAUT-BAS, LXI LBTRAN < (X)=NOMBRE DE MOTS A DEPLACER, WCDA < BTRAN --> CDAI... ADR Y,A < RE-COMMUATION BAS-HAUT, XWOR%2: VAL 2 TRN XWOR%1: VAL LBTRAN/XWOR%2 NTRN DO XWOR%2 ADRI LBTRAN/XWOR%2,A < ET PROGRESSION DE L'ADRESSE COURANTE < EN 'CDAI'... PLR X JDX RES11 < AU BLOC SUIVANT... < < PHASE SECONDAIRE : < (SAUVEGARDE DU HAUT OU < RESTAURATION DU BAS) < LXI NBDKU < (X)=NOMBRE D'OPERATIONS, RES20: EQU $ PSR X LAD RWDKU SVC 0 < OPERATION ELEMEMTAIRE... PLR X JE RES31 < OK... QUIT 1 < ???!?!?! JMP RES3 < ON ITERE... RES31: EQU $ LA RWDKU+1 AD RWDKU+2 STA RWDKU+1 < PROGRESSION DE L'ADRESSE MEMOIRE... LA RWDKU+3 AD INCDKU STA RWDKU+3 < PROGRESSION DE L'ADRESSE SUR 'DKU'. JDX RES20 < AU BLOC SUIVANT... BR ALOOP PAGE < < < D E F I N I T I O N D U V O L U M E C O U R A N T : < < VOLUME: EQU $ STZ VOLNUM < ET PAS DE VOLUME A PRIORI... IF MODE-VISU,XWOR%7,,XWOR%7 LAI MVOL-ZERO BSR APRINT < DEMANDE DU NUMERO DE VOLUME : XWOR%7: VAL 0 BSR AIHEX < ET CONVERSION BINAIRE : JNE ERRORV < BERK... < < MONTAGE DU VOLUME DEMANDE : < JAE VOL3 < EN FAIT, IL S'AGIT D'UN DEMONTAGE, OK... STA VOLNUM < ET NON, MONTAGE : MEMORISATION DU NUMERO < DE VOLUME, LXI 4 VOL1: EQU $ ADRI -1,X LBY &AREPX < TRANSFERT DU NOM ADRI 1,X STBY &ANAVOL < DU VOLUME EN ASCI... JDX VOL1 LAD MVDKU BSR ACCI < ET TENTATIVE DE MONTAGE... JE LOOP < OK, ON VA ACCEDER A DES IMAGES DE TYPE < EXTENSION SUR VOLUME... VOL2: EQU $ STZ VOLNUM < ET ON DEMONTE SI ERREUR... ERRORV: BR AERROR < (ET RELAI...) < < DEMONTAGE : < VOL3: EQU $ LAD MDVDKU BSR ACCI < ENVOI DE LA DEMANDE DE DEMONTAGE... JMP LOOP < VERS LA BOUCLE D'INTERROGATION... PAGE < < < M O D U L E S D ' A C C E S A U S G N : < < < FONCTION : < PERMETTENT L'ACCES AU SGN < POUR LES IMAGES SUIVANT : < N : NOMME L'IMAGE RESIDENTE, < JUSQU'A UNE COMMANDE 'N' < SUIVANTE, < D : AFFICHE L'IMAGE PRECEDEMMENT < NOMMEE PAR 'N'. < + : CREE L'IMAGE PRECEDEMMENT < NOMMEE PAR 'N', < - : DETRUIT L'IMAGE PRECEDEMMENT < NOMMEE PAR 'N'. < < < NOTA : < S'IL Y A UN VOLUME DE MONTE < PAR LA COMMANDE "V", LES IMAGES < SONT OBTENUES PAR L'INTERMEDIAIARE < DU VOLUME EXTENSION... < < NAME: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMNOM-ZERO BSR APRINT XWOR%7: VAL 0 LAD NOMIN BSR AENTER < ENTREE DU NOM COURANT, LAI EOT STBY &AEOT < ET ON FORCE A PRIORI UN 'EOT'... BR ALOOP < ET C'EST TOUT... < < SOUS-PROGRAMME GENERAL D'ACCES AU SGN : < (LORS DES 'LNS' ET 'LON', IL REGARDE < SI LA LONGUEUR DE L'IMAGE VAUT EXACTE- < MENT LIMAG*NCOOL*NOCMO ; SI NON, ELLE < REITERE L'OPERATION AVEC UN DELTA < NOM-VALEUR DE -1 CORRESPONDANT A UNE < ANCIENNE VERSION DU PROGRAMME) < GOSGN: EQU $ < RESPONSABLE DE TOUS LES ACCES SGN... STBY SGN < MISE EN PLACE DU 'NVP' ARGUMENT, LAI LNOM*NOCMO STA SGN+3 < A PRIORI... CPZ VOLNUM < Y-A-T'IL UN VOLUME DE MONTE ??? JE GOSGN2 < NON... < < CAS DES ACCES AU VOLUME : < NSPDKU:: VAL 'A3 < DISCRIMINATEUR... LAI NSPDKU STBY SGN+3 < MISE EN PLACE DU DISCRIMINATEUR... LAI '1C ACTD 'A < INHIBITION DU ALT-MODE PARCEQUE ON VA < MODIFIER LE DEBUT DE L'IMAGE RESIDENTE. LA SGN+2 PSR A < SAUVEGARDE DU COMPTE D'OCTETS... LIMVO:: VAL 4 < UNE IMAGE EXTENSION FAIT 4 OCTETS... LXI 0 LA &AIMAGR ADRI 1,X LB &AIMAGR PSR A,B < SAUVEGARDE DU DEBUT DE L'IMAGE... STZ &AIMAGR < POUR LE NUMERO DE BLOC, ADRI -1,X LA VOLNUM STA &AIMAGR < NUMERO DE VOLUME... LAI LNOM*NOCMO+LIMVO STA SGN+2 < MISE EN PLACE DE LA LONGUEUR, LAD SGN SVC 0 < ET ENVOI AU 'SGN'... PLR A,B PSR X < SAUVEGARDE DU CODE DE RETOUR... LXI 0 XM &AIMAGR < ET RESTAURATION DU ADRI 1,X STB &AIMAGR < DEBUT DE L'IMAGE... PLR X < RESTAURATION DU CODE DE RETOUR... LR A,Y < (Y)=NUMERO DE VOLUME DE L'IMAGE QUE L'ON < SUPPOSE CHARGEE... PLR A STA SGN+2 < RESTAURATION DE LA LONGUEUR... LAI 0 ACTD 'A < RESTAURATION DU ALT-MODE... LBY SGN CPI SGNLON < EST-CE UN 'LOAD' QUE L'ON VIENT DE FAIRE? JNE GOSGN1 < NON, PAS DE VALIDATIONS... CPZR X < COMMENT CELA S'EST-IL PASSE ??? JNE GOSGN3 < MAL, ON SORT... GOSGN4: EQU $ LR Y,A CP VOLNUM < L'IMAGE CHARGEE APPARTIENT-ELLE AU BON < VOLUME ??? JNE GOSGN3 < NON, ERREUR... ACTD 3 < (B)='BOX' : IVALEX:: VAL 0 < BIT DISCRIMINATEUR... LR B,A < (A)-LONGUEUR OCTETS, LYI 0 < ON FORCE UN NUMERO DE NUL, POUR POSITION- < NER LES INDICATEURS EN CAS D'ERREUR A < SUIVRE... JAGE GOSGN4 < LONGUEUR INACCEPTABLE, ERREUR... RBT IVALEX CPI LIMVO < ALORS, EST-CE UNE EXTENSION ??? JNE GOSGN3 < NON, ERREUR... JMP GOSGN1 < OUI, VERS LA SORTIE... < < CAS DES ACCES NORMAUX AU SGN : < GOSGN2: EQU $ LAD SGN SVC 0 < ET ENVOI DE LA DEMANDE... LBY SGN CPI SGNDLN JE GOSGN1 < CAS D'UN DELETE... CPI SGNSTN JE GOSGN1 < CAS D'UN STORE... ACTD 3 < CAS D'UN LOAD : B=LONGUEUR DE L'IMAGE, LRM A WORD LIMAG*NCOOL*NOCMO CPR A,B < S'AGIT-IL D'UNE ANCIENNE OU D'UNE < NOUVELLE IMAGE ??? JE GOSGN1 < NOUVELLE : DELTA=LNOM*NOCMO... LAI -1 < ANCIENNE : STA SGN+3 < IL FAUT LA RECUPERER AVEC DELTA=-1... LAD SGN SVC 0 < ON REITERE LE LOAD... GOSGN1: EQU $ CPZR X < TEST DES CONDITIONS DE RETOUR... GOSGN3: EQU $ RSR < < MODULES SPECIFIQUES : < DISP: EQU $ < COMMANDE 'D' : LAI SGNLON < ON COMMENCE PAR L'ACN DU DEMANDEUR, BSR AGOSGN JE DISP1 < OK, IL EXISTE... LAI SGNLNS < NON, ON TENTE SOUS :SYS... BSR AGOSGN JE DISP1 < OK... DISP2: EQU $ BR AERROR < TRAITEMENT DES ERREURS... DISP1: EQU $ BR ALOOP < VERS LA BOUCLE SI OK... DELETE: EQU $ < COMMANDE '-' : LAI SGNDLN DELET1: EQU $ BSR AGOSGN JE DISP1 < OK... JMP DISP2 < ERREUR... STORE: EQU $ < COMMANDE '+' : LAI SGNSTN JMP DELET1 PAGE < < < A C C E S A U N P O I N T R E S I D E N T : < < < FONCTION : < CE SOUS-PROGRAMME RECONSTITUE < LE NIVEAU ASSOCIE A 3 BITS < PARALLELES. < < < ARGUMENT : < XR,YR = COORDONNEES DU POINT, < < < RESULTAT : < A = NIVEAU DE GRIS DU POINT, SOIT R+V*2+B*4. < -1 SI LE POINT N'EXISTE PAS. < < SPAPR: EQU $ PSR B,X,Y LX XR < X=ABSCISSE, LY YR < Y=ORDONNEE. LR Y,A JAL SPAPR1 < HORS-ECRAN... CPI NLIGM1 JG SPAPR1 < HORS-ECRAN... LR X,A < A=COORDONNEE X, JAL SPAPR1 < HORS-ECRAN... CPI NPOLM1 JG SPAPR1 < HORS-ECRAN... LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 < B=NUMERO DE MOT DANS LA LIGNE, SLRS NBITMO-XWOR%1 < A=NUMERO DE BIT DANS LE MOT, LXI NBITMO-BIT SBR A,X < X=DECALAGE D'ACCES AU BIT COURANT. XR Y,B < Y=NUMERO DU MOT DANS LA LIGNE, SLLD NMOTL=0 IF NBITMO-NMOTL,,XWOR%, IF ATTENTION : LA CONCATENATION QUI SUIT EST COMPLETEMENT IF STUPIDE !!! XWOR%: VAL 0 ORR B,Y < Y=NUMERO DU MOT DANS LA TRAME. XR Y,X LA &AIMAGB < ACCES A LA TRAME BLEU, PSR A LA &AIMAGV < ACCES A LA TRAME BLEUE, PSR A LA &AIMAGR < ACCES A LA TRAME ROUGE. XR X,Y SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT ROUGE, PLR A SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT VERT, PLR A SLRS 0,X ANDI BIT < RECUPERATION D'UN BIT BLEU. SLLD NCOOL-BIT < A=NIVEAU DE GRIS DU POINT (X,Y). SPAPR2: EQU $ PLR B,X,Y RSR < < CAS DES POINTS HORS-ECRAN : < SPAPR1: EQU $ LAI -1 < ON RENVOIE LE NIVEAU -1... JMP SPAPR2 PAGE < < < A C C E S A U N P O I N T S C R A T C H : < < < FONCTION : < CE SOUS-PROGRAMME RECONSTITUE < LE NIVEAU ASSOCIE A 3 BITS < PARALLELES. < < < ARGUMENTS : < XS,YS = COORDONNEES DU POINT SCRATCH, < < < RESULTAT : < A=NIVEAU DE GRIS DU POINT SCRATCH. < < SPAPS: EQU $ PSR B,X,Y LX XS < X=ABSCISSE, LY YS < Y=ORDONNEE. LR X,A LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 < B=NUMERO DU MOT DANS LA LIGNE, SLRS NBITMO-XWOR%1 LXI NBITMO-BIT SBR A,X < X=DECALAGE D'ACCES AUX BITS, PSR X XR Y,B SLLD NMOTL=0+NBITMO ORR Y,A < A=NUMERO DU MOT DANS LA TRAME. LRM B,X,Y WORD MCDAR WORD 1 WORD LIMAG < Y=LONGUEUR EN MOTS D'UNE TRAME. RCDA < ACCES A UN MOT ROUGE, LRM B,X WORD MCDAV WORD 1 ADR Y,A RCDA < ACCES A UN MOT VERT, LRM B,X WORD MCDAB WORD 1 ADR Y,A RCDA < ACCES A UN MOT BLEU. PLR X < RESTAURATION DU DECALAGE, LA MCDAR SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT ROUGE, LA MCDAV SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT VERT, LA MCDAB SLRS 0,X ANDI BIT < RECUPERATION D'UN BIT BLEU, SLLD NCOOL-BIT < A=NIVEAU DE GRIS DU POINT. PLR B,X,Y RSR < < < A C C E S A U N P O I N T S C R A T C H < D E C O O R D O N N E E S I D E N T I Q U E S < A C E L L E S D U P O I N T R E S I D E N T : < < SPGPT: EQU $ PSR X,Y LX XR LY YR STX XS STY YS BSR ASPGPS < ACCES AU POINT (XS,YS)=(XR,YR)... PLR X,Y RSR PAGE < < < R A N G E M E N T D ' U N P O I N T R E S I D E N T : < < < FONCTION : < CE SOUS-PROGRAMME RANGE LE < NIVEAU D'UN POINT SUR 3 BITS < PARALLELES. < < < ARGUMENTS : < XR,YR = COORDONNEES DU POINT, < A = SON NIVEAU DE GRIS. < < SPSPR: EQU $ PSR A,B,X,Y LX XR < X=ABSCISSE, LY YR < Y=ORDONNEE. PSR A LR X,A LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 SLRS NBITMO-XWOR%1 LR A,X < X=NUMERO DE BITS. XR Y,B SLLD NMOTL=0 ORR B,Y < Y=NUMERO DU MOT DANS LA TRAME. PLR A < A=NIVEAU DE GRIS DU POINT. SLRD NCOOL < ET MISE DANS B... XR X,Y LA &AIMAGR < ACCES A UN MOT ROUGE, STA SAVER LA &AIMAGV < ACCES A UN MOT VERT, STA SAVEV LA &AIMAGB < ACCES A UN MOT BLEU. XR X,Y SCLS 0,X SLLD BIT < RECUPERATION DU BIT BLEU, SCRS BIT,X STA SAVEB LA SAVEV SCLS 0,X SLLD BIT < RECUPERATION DU BIT VERT, SCRS BIT,X STA SAVEV LA SAVER SCLS 0,X SLLD BIT < RECUPERATION DU BIT ROUGE, SCRS BIT,X XR X,Y STA &AIMAGR < RANGEMENT DU MOT ROUGE, LA SAVEV STA &AIMAGV < RANGEMENT DU MOT VERT, LA SAVEB STA &AIMAGB < RANGEMENT DU MOT BLEU. PLR A,B,X,Y RSR PAGE < < < R A N G E M E N T D ' U N P O I N T S C R A T C H : < < < FONCTION : < CE SOUS-PROGRAMME RANGE LE < NIVEAU D'UN POINT SUR 3 BITS < PARALLELES EN SCRATCH. < < < AGUMENTS : < XS,YS = COORDONNEES DU POINT, < A = SON NIVEAU DE GRIS. < < SPSPS: EQU $ PSR A,B,X,Y PSR A < SAUVEGARDE DU NIVEAU, LX XS < DU POINT LY YS < SCRATCH (XS,YS). LR X,A LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 SLRS NBITMO-XWOR%1 LXI NBITMO-BIT SBR A,X < X=AMPLITUDE DU DECALAGE... PSR X XR Y,B SLLD NMOTL=0+NBITMO ORR Y,A < A=ADRESSE DU MOT ROUGE CONTENANT < (XS,YS) DANS LA 'CDA'... LRM B,X,Y WORD MCDAR WORD 1 WORD LIMAG < Y=POUR PASSER D'UNE COULEUR A L'AUTRE. RCDA < ACCES AU MOT ROUGE, LRM B,X WORD MCDAV WORD 1 ADR Y,A RCDA < ACCES AU MOT VERT, LRM B,X WORD MCDAB WORD 1 ADR Y,A RCDA < ACCES AU MOT BLEU. PLR X < X=AMPLITUDE DU DECALAGE, STA WORK1 < SAUVEGARDE DE LA DERNIERE ADRESSE... PLR A < A=NIVEAU DE GRIS DE (XS,YS). SLRD NCOOL < ET CADRAGE DANS 'B'... LA MCDAB < MSE A JOUR DU BLEU, SCRS 0,X SLRS BIT SLLD BIT SCLS 0,X STA MCDAB LA MCDAV < MISE A JOUR DU VERT, SCRS 0,X SLRS BIT SLLD BIT SCLS 0,X STA MCDAV LA MCDAR < MISE A JOUR DU ROUGE. SCRS 0,X SLRS BIT SLLD BIT SCLS 0,X STA MCDAR LA WORK1 < A=ADRESSE EN 'CDA' DU BLEU... LRM B,X WORD MCDAB WORD 1 WCDA < MISE A JOUR DU BLEU, LRM B,X WORD MCDAV WORD 1 SBR Y,A WCDA < MISE A JOUR DU VERT, LRM B,X WORD MCDAR WORD 1 SBR Y,A WCDA < MISE A JOUR DU ROUGE. PLR A,B,X,Y RSR PAGE < < < O P E R A T I O N I N T E R - I M A G E S : < < < FONCTION : < CETTE VERSION PROVISOIRE REALISE < L'OPERATION .OP. DE LA FACON < SUIVANTE : < RESIDENT <-- (RESIDENT).OP.(SCRATCH) < CETTE OPERATION N'ETANT EFFECTUEE < QUE POUR LES BITS A 1 DU MASQUE... < < SPOP: EQU $ PSR A,B,X,Y LY ORGY STY YS < ORDONNEE SCRATCH. LYI 0 < Y=ORDONNEE. STY YR SPOP1: EQU $ LXI 0 STX XR < X=ABSCISSE. LX ORGX STX XS SPOP2: EQU $ LX XS LY YS PSR X,Y < SAUVEGARDE DE 'XS' ET 'YS'... LA XS CPZ MODX < EST-ON SUR UN X-TORE ??? JE SPOP3 < OUI... JAL SPOP5 < NON, ET XS EST OVERSCREEN... CPI NPOLM1 JG SPOP5 < DE MEME... JMP SPOP4 < OK, XS EST DANS L'ECRAN... SPOP3: EQU $ < CAS OU L'ON EST SUR UN X-TORE : ANDI NPOLM1 STA XS < CALCUL MODULO DE XS... SPOP4: EQU $ LA YS CPZ MODY < EST-ON SUR UN Y-TORE ??? JE SPOP6 < OUI... JAL SPOP5 < NON, ET YS EST OVERSCREEN... CPI NLIGM1 JG SPOP5 < DE MEME... JMP SPOP7 SPOP6: EQU $ < CAS OU L'ON EST SUR UN Y-TORE : ANDI NLIGM1 STA YS < CALCUL MODULO DE YS... SPOP7: EQU $ CPZ IMASKO JE SPOP8 < LE MASQUE EST OFF... PSR X,Y LX XR < X=COORDONNEE RESIDENTE, LY YR < AINSI QUE Y... LR X,A LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 < B=NUMERO DU MOT SUR LA LIGNE, SLRS NBITMO-XWOR%1 < A=NUMERO DU BIT DANS LE MOT, LR A,X < X=NUMERO DU BIT DANS LE MOT, XR Y,B SLLD NMOTL=0+NBITMO ORR A,Y < Y=NUMERO DU MOT DANS LE MASQUE, LRM A WORD AMASK ADR Y,A < A=ADRESSE DU MOT DANS LA 'CDA'. PSR X LRM B,X WORD MCDAM < B=ADRESSE DU MOT DE TRANSIT, WORD 1 < X=NOMBRE DE MOTS A DEPLACER. RCDA PLR X LA MCDAM < ACCES AU MASQUE, TBT 0,X < ALORS ??? PLR X,Y JNC SPOP5 < LE MOT (X,Y) EST MASQUE... SPOP8: EQU $ BSR ASP < EXECUTION DE L'OPERATION VARIABLE .OP. < SUR LE COUPLE DE POINTS (X,Y). SPOP5: EQU $ PLR X,Y < RESTAURATION DE XS ET YS... STX XS STY YS IC XS < PROGRESSION DE XS, IC XR < ET DE XR, LA XR CPI NPOLM1 < EST-ON EN BOUT DE LIGNE ??? JLE SPOP2 < NON... BALAYAGE HORIZONTAL... IC YS < OUI, PROGRESSION DE YS, IC YR < ET DE YR... LA YR CPI NLIGM1 < EST-ON EN BOUT D'IMAGE ??? JLE SPOP1 < NON, BALAYAGE VERTICAL... PLR A,B,X,Y RSR PAGE < < < M O U V E M E N T S D ' I M A G E S : < < < FONCTIONS : < ON DISTINGUE 3 COMMANDES DE < MOUVEMENT D'IMAGES : < "U" : 'SCRATCH' --> 'RESIDENT' AVEC 'MASQUE. < "S" : 1 - 'RESIDENT' --> 'SCRATCH', < 2 - 'MEMTV' --> 'DKU'. < "L" : 1 - 'SCRATCH' --> 'RESIDENT' SANS 'MASQUE', < 2 - 'DKU' --> 'MEMTV'. < < < " S " : < < IMSAV: EQU $ < ENVOI DU RESIDENT EN SCRATCH. BSR ASPDK1 < 'DKU' ??? LBI SDKUW < OUI A PRIORI EN 'WRITE'... JE DKUS1 < OUI... < < NON, 'RESIDENT' --> 'SCRATCH' : < LRM A,B,X WORD ROUGE WORD IMAGE WORD LIMAG*NCOOL WCDA BR ALOOP XERROR: EQU $ BR AERROR < < < " U " : < < IMUP: EQU $ < RAPPEL DU SCRATCH EN RESIDENT AVEC MASK. LB ASPACD JMP IM2 < < < " L " : < < IMLOAD: EQU $ < RAPPEL DU SCRATCH EN RESIDENT SANS MASK. BSR ASPDK1 < 'DKU' ??? LBI SDKUR < OUI A PRIORI EN 'READ'... JE DKUS1 < OUI... < < NON, 'SCRATCH' --> 'RESIDENT' : < LRM A,B,X WORD ROUGE WORD IMAGE WORD LIMAG*NCOOL RCDA BR ALOOP < < OPERATIONS MOT A MOT : < IM1: EQU $ IM2: EQU $ STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME. BSR ASPOP BR ALOOP < < < E C H A N G E S ' M E M T V ' - ' D K U ' : < < DKUS1: EQU $ STB SDKU < SENS DE L'OPERATION... IF MODE-ITEM,XWOR%7,,XWOR%7 LR B,X < ET SAVE DANS 'X'... XWOR%7: VAL 0 LAI NDKU STBY SDKU < 'NVP' DU 'DKU'... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMAD-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX < ENTREE DE L'ADRESSE ABSOLUE EVENTUELLE : JE DKUS2 < OUI, (A)=ADRESSE ABSOLUE... LBY &AREP < A=PREMIER CARACTERE : LBI 0 < A PRIORI, C'EST LE LIMITEUR, CPI EOM < ALORS ??? JE DKUS3 < OUI, PAS DE TRANSLATION : B=0... LA &AREP < NON : LB TDKU < B=CONSTANTE DE TRANSLATION, CP DKURP < EST-CE UNE INCREMENTATION ??? JE DKUS3 < OUI... NGR B,B < B=CONSTANTE DE TRANSLATION, CP DKURM < EST-CE UNE DECREMENTATION ??? JNE XERROR < NON, ON ABORTE... DKUS3: EQU $ LA ASDKU < A=ADRESSE COURANTE, ADR B,A < TRANSLATION... DKUS2: EQU $ STA ASDKU < MISE A JOUR DE L'ADRESSE COURANTE... IF MODE-ITEM,XWOR%7,,XWOR%7 LR X,A < (A)=FONCTION LECTURE/ECRITURE. LXI 1 < (X)=1 ITERATION A PRIORI... CPI SDKUR < EST-CE UNE LECTURE ??? JNE DKUS4 < NON, (X)=1 ITERATION, LX NITER < OUI, (X)='NITER' ITERATIONS... DKUS4: EQU $ < < BOUCLE DE RALENTISSEMENT : < DKUS5: EQU $ PSR X < SAVE LE NOMBRE D'ITERATIONS... XWOR%7: VAL 0 LAD SDKU SVC 0 < ENVOI DE LA DEMANDE... IF MODE-ITEM,XWOR%7,,XWOR%7 PLR X < RESTAURE LE NOMBRE D'ITERATIONS... XWOR%7: VAL 0 JNE XERROR < ERREUR ?!????!?! (PROTECTION,...) IF MODE-ITEM,XWOR%7,,XWOR%7 JDX DKUS5 < ET ON ITERE AFIN DE RALENTIR LE DEBIT... XWOR%7: VAL 0 BR ALOOP < ET C'EST TOUT... < < < C H O I X ' D K U ' E T ' S C R A T C H ' : < < SPDK1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMDK-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN < A=REPONSE... CPI "O" JE SPDK11 < "O" CPI "N" JNE SPDK1 < ??!??!? CPI "O" < POUR LES CODES DE RETOUR... SPDK11: EQU $ RSR PAGE < < < D E F I N I T I O N D E ' D K U ' : < < DEFDKU: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMEM-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX JNE DEFDKU STA AMDKU < ADRESSE DE DEBUT DE L'ECHANGE 'MEMTV'. DEFDK1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMLON-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX JNE DEFDK1 STA LODKU < LONGUEUR DE L'ECHANGE EN OCTETS. DEFDK2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRAN-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX JNE DEFDK2 STA TDKU < CONSTANTE DE TRANSLATION DES ADRESSES < DE Q-SECTEURS. BR ALOOP < ET C'EST TOUT... PAGE < < < S E L E C T I O N D E L A V I T E S S E < D E ' D K U ' : < < DKUS: EQU $ LAI MDKS-ZERO JMP DKU DKUF: EQU $ LAI MDKF-ZERO DKU: EQU $ BSR ACCI < ENVOI DE LA CARTE "!DK S"/"!DK F"... BR ALOOP < ET C'EST TOUT... PAGE < < < C H O I X D E L A V I T E S S E D E L E C T U R E : < < < FONCTION : < SOUS " =", IL EST POSSIBLE DE < RALENTIR LE DEBIT EN LECTURE EN < ITERANT CELLES-CI... < < IF MODE-VISU,XWOR%7,,XWOR%7 PNITER: EQU ERROR < N'EXISTE PAS SOUS "TU", INUTILE... XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 PNITER: EQU $ BSR AIHEX < ENTREE DU NOMBRE D'ITERATIONS... JNE PNITER < ERREUR DE SYNTAXE... JALE PNITER < ON REFUSE LES NOMBRES NEGATIFS OU NULS... STA NITER < SAUVEGARDE DU NOMBRE D'ITERATIONS, BR ALOOP < ET VERS L'INTERROGATION... XWOR%7: VAL 0 PAGE < < < C O N T R O L E D E S E R R E U R S S U R D K U : < < BON: EQU $ LAI MDKON-ZERO JMP DKS0 MAUVAI: EQU $ LAI MDKOFF-ZERO DKS0: EQU $ BSR ACCI < ENVOI DE "!DK S0 ON"/"!DK S0 OFF"... BR ALOOP < ET C'EST TOUT... PAGE < < < G E S T I O N D U D I S Q U E V I D E O : < < VIDEO: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI MVIDEO-ZERO BSR APRINT < ENVOI D'UN MESSAGE... XWOR%7: VAL 0 LAD DMDKV BSR AENTER < ENTREE DES COMMANDES AU DISQUE VIDEO, LX LMIN ADRI -1,X LBY &ABDKV < (A)=DERNIER CARACTERE DU MESSAGE, CPI '04 < LE CARACTERE COURANT EST-IL UN 'EOT' ??? JNE VIDEO2 < NON... LAI '0D < OUI, STBY &ABDKV < ON EN FAIT UN 'R/C'... VIDEO2: EQU $ LAD SDKV SVC 0 < ENVOI DU MESSAGE AU DISQUE VIDEO... CPZ IREADV < FAUT-IL LIRE LE COMPTE-RENDU ??? JL VIDEO4 < NON... LAD DMDKVR < OUI : SVC 0 < LECTURE DE LA REPONSE, CPZ IREPDV < EDITE-T'ON LES REPONSES ??? JL VIDEO3 < NON... ACTD 3 < OUI : < (B)=LONGUEUR DE SA REPONSE, ADRI -1+LMBDKV,B < -1 POUR SUPPRIMER LE RETOUR-CHARRIOT < DE FIN DE MESSAGE... STB DMDKVW+2 LAD DMDKVW SVC 0 < ET EDITION DE SA REPONSE... VIDEO3: EQU $ VIDEO4: EQU $ BR ALOOP < ET C'EST TOUT... < < < I N V E R S I O N D E S R E P O N S E S ( " H " ) : < < INVREP: EQU $ LA IREPDV NGR A,A < ON INVERSE L'INDICATEUR... STA IREPDV BR ALOOP < ET C'EST TOUT... < < < I N V E R S I O N C O M P T E - R E N D U ( " Q " ) : < < CRDKV: EQU $ LA IREADV NGR A,A < INVERSION STA IREADV < DE 'IREADV' (BASCULE)... JAL CRDKV1 < ON INHIBE LA LECTURE DU COMPTE-RENDU... LAD DMDKVC < ON AUTORISE LA LECTURE DU COMPTE-RENDU, SVC 0 < ON CLEAR DONC LE BUFFER D'ANTICIPATION... CRDKV1: EQU $ BR ALOOP < ET C'EST TOUT... PAGE < < < S Y N C H R O N I S A T I O N ' Z D C ' : < < GETZDC: EQU $ < < ACCES A LA 'ZDC' : < LAD DEMZDC ZDCIN1: EQU $ SVC 0 < ACCES A LA ZDC : CPZ VALZDC < EST-ELLE VALIDE ??? JE ZDCIN1 < NON, ON ATTEND... STZ VALZDC < OUI, ON L'ACQUITTE... LAD DELZDC SVC 0 < ACQUITTEMENT... BR ALOOP < ET C'EST TOUT... PAGE < < < E N T R E E D E ' O R G X ' E T ' O R G Y ' : < < GORGX: EQU $ STZ MODX < TORE A PRIORI... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMORGX-ZERO BSR APRINT < EDITION DU MESSAGE. XWOR%7: VAL 0 BSR AIHEX < ENTREE DE ORGX, JE GORGX1 < OK... GORGX2: EQU $ BR AERROR < ET NON... GORGX1: EQU $ NGR A,A STA ORGX GORGX3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTORE-ZERO BSR APRINT < "TORE?" XWOR%7: VAL 0 BSR AIN < ENTREE DE LA REPONSE... CPI "O" JE GORGX4 < TORE... CPI "N" JNE GORGX3 < ERREUR... IC MODX < CE N'EST PAS LE MODE TORE... GORGX4: EQU $ BR ALOOP < OK... GORGY: EQU $ STZ MODY < MODE TORE A PRIORI... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMORGY-ZERO BSR APRINT < EDITION DU MESSAGE... XWOR%7: VAL 0 BSR AIHEX < ENTREE DE ORGY, JNE GORGX2 < ERREUR... NGR A,A STA ORGY GORGY3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTORE-ZERO BSR APRINT < "TORE?" XWOR%7: VAL 0 BSR AIN < ENTREE DE LA REPONSE... CPI "O" JE GORGY4 < TORE... CPI "N" JNE GORGY3 < ERREUR... IC MODY < CE N'EST PAS LE MODE TORE... GORGY4: EQU $ BR ALOOP < OK... PAGE < < < M O U V E M E N T S R E S I D E N T <--> T V : < < MOV0: EQU $ < RESIDENT R+V+B --> TV. LAD DEMTVR SVC 0 < ROUGE, LAD DEMTVV SVC 0 < VERT, MOV3: EQU $ < RESIDENT B --> TV. LAD DEMTVB SVC 0 < BLEU. BR ALOOP MOV1: EQU $ < RESIDENT R --> TV. LAD DEMTVR SVC 0 < ROUGE. BR ALOOP MOV2: EQU $ < RESIDENT V --> TV. LAD DEMTVV SVC 0 < VERT. BR ALOOP PMOV5: EQU $ < TV R --> RESIDENT. LA DEMTVR+3 LR A,B ORI TVIN < MISE EN ENTREE, STA DEMTVR+3 LAD DEMTVR SVC 0 < ENTREE DU ROUGE, STB DEMTVR+3 < ET RESTAURATION... RSR PMOV6: EQU $ < TV V --> RESIDENT. LA DEMTVV+3 LR A,B ORI TVIN STA DEMTVV+3 LAD DEMTVV SVC 0 < ENTREE DU VERT... STB DEMTVV+3 RSR PMOV7: EQU $ < TV B --> RESIDENT. LA DEMTVB+3 LR A,B ORI TVIN STA DEMTVB+3 LAD DEMTVB SVC 0 < ENTREE DU BLEU... STB DEMTVB+3 RSR MOV4: EQU $ < TV R+V+B --> RESIDENT. BSR APMOV5 < ROUGE, BSR APMOV6 < VERT, MOV7: EQU $ < TV B --> RESIDENT. BSR APMOV7 < BLEU. BR ALOOP MOV5: EQU $ < TV R --> RESIDENT. BSR APMOV5 BR ALOOP MOV6: EQU $ < TV V --> RESIDENT. BSR APMOV6 BR ALOOP PAGE < < < T R A N S F E R T S R E S I D E N T - S C R A T C H : < < < FONCTION : < CE MODULE ASSURE LES TRANSFERTS < BRUTAUX ENTRE LE RESIDENT, ET LE < SCRATCH (QUI EST EN FAIT LA 'CDA'). < < SPACD: EQU $ < TRANSFERT AVEC MASQUE... PSR A BSR ASPGPS < ACCES AU POINT SCRATCH COURANT, BSR ASPRPR < ET MISE EN RESIDENT... PLR A RSR PAGE < < < " P E R M U T A T I O N " D E S C O U L E U R S : < < < FONCTION : < LA COMMANDE "I" PROCEDE AUX < PERMUTATIONS SUIVANTES : < NOIR --> NOIR, < ROUGE --> BLANC, < VERT --> CYAN, < JAUNE --> MAGENTA, < BLEU --> BLEU, < MAGENTA --> JAUNE, < CYAN --> VERT, < BLANC --> ROUGE. < < INVER: EQU $ PSR A BSR ASPGPR < (A)=NIVEAU(XR,YR), ADRI -NIVMAX-1,A NGR A,A ANDI NIVMAX < ON PERMUTE, BSR ASPRPS < CE QUI DONNE NIVEAU(XS,YS)... PLR A RSR < < < C O M M A N D E " I " : < < COMPL: EQU $ LB AINVER STB ASP BSR ASPOP < PERMUTATION DES COULEURS POINT A POINT... BR ALOOP < ET C'EST TOUT... PAGE < < < T R A N S L A T I O N D E S N I V E A U X : < < < FONCTION : < SUITE A LA COMMANDE "P", < ON PEUT TRANSLATER EN + OU EN < - LES NIVEAUX EN FAISANT UN < CALCUL MODULO OU PAS... < < PCHNI: EQU $ PSR A BSR ASPGPR < (A)=NIVEAU(XR,YR), AD INIVO < TRANSLATION, CPZ TNIVO < MODULO OU PAS ??? JNE PCHNI1 < NON, SEUILLAGE AU NOIR... ANDI NIVMAX < OUI, CALCUL MODULO... PCHNI1: EQU $ JAL PCHNI2 < LES NIVEAUX NEGATIFS SONT MIS AU NOIR, CPI NIVMAX JLE PCHNI3 < OK... PCHNI2: EQU $ LAI 0 < DE MEME QUE LES NIVEAUX TROP BLANCS... PCHNI3: EQU $ BSR ASPRPS < CE QUI DONNE LE NIVEAU DE (XS,YS)... PLR A RSR < < < C O M M A N D E " P " : < < CHNIV: EQU $ CHNIV1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI MINIVO-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX JNE CHNIV1 < ERREUR... STA INIVO < OK, ON A L'AMPLITUDE DE TRANSLATION... CHNIV3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI MMODUL-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN STZ TNIVO < MODULO A PRIORI... CPI "O" < ??? JE CHNIV2 < MODULO... CPI "N" JNE CHNIV3 < ??!??! IC TNIVO < SEUILLAGE... CHNIV2: EQU $ LB APCHNI STB ASP < MISE EN PLAC DU MODULE... BSR ASPOP < ET TRANSLATION DES NIVEAUX... BR ALOOP < ET RETOUR A L'INTERROGATION... PAGE < < < G E N E R A T I O N E T V A L I D A T I O N : < < XWOR%1: VAL ITEM2-ZERO IF $-ZERO-XWOR%1,XWOR%,, IF ATTENTION : TROP LONG !!! XWOR%: VAL 0 XWOR%1: VAL PILE-LTNI-LTNI XWOR%2: VAL $-ZERO DZS XWOR%1-XWOR%2+1 < NETTOYAGE... EOT #SIP GEN PROCESSEUR#