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