NMTD: VAL "TD"
NMG: VAL " G"
IF NMPROC-NMTD,,XWOR%,
IF NMPROC-NMG,,XWOR%,
IF ATTENTION : 'NMPROC' EST MAUVAIS !!!
XWOR%: VAL 0
IF NMPROC-NMTD,XWOR%9,,XWOR%9
IDP "TD - VERSION SUPER-DETAILS DE TW"
XWOR%9: VAL 0
IF NMPROC-NMG,XWOR%9,,XWOR%9
IDP " G - VERSION DE 'TD' 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 " G", ON LE REMPLACE PAR "TD",
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...
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
REP: DZS NBRHEX/NOCMO < BUFFER DES REPONSES.
MERR: BYTE 1;"?"
IF MODE-VISU,XWOR%7,,XWOR%7
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 6;'6D
ASCI "TORE? "
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;"/"
MMOD: BYTE 25;'6D
ASCI "0=HD/BD 1=BD/HD 2=HD/HD?"
MWDK: BYTE 10;'6D
ASCI "ENVOI DK? "
MNOIR: BYTE 12;'6D
ASCI "ENVOI NOIR? "
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="
AMMOD: EQU MMOD < "0=HD/BD..."
AMWDK: EQU MWDK < "ENVOI DK?"
AMNOIR: EQU MNOIR < "ENVOI NOIR?"
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,
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
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
IF MODE-ITEM,XWOR%7,,XWOR%7
SITEM1: DZS LNOM/NOCMO < POUR SAUVEGARDER LA FIN DE L'ITEM1.
XWOR%7: VAL 0
PAGE
<
<
< C O M M O N :
<
<
COMMON
COMON: WORD 0 < LE PREMIER MOT DU COMMON EST RESERVE
< A L'OPERATEUR FLOTTANT !!!
<
< DONNEES POUR LE TRACE VIDEO :
<
CDA: EQU $ < BLOC DE DONNEES POUR LA VISUALISATION :
SIGNAL:: VAL -1 < POUR LA SYNCHRONISATION...
CDAVAL: WORD 0 < -1 : L'INFORMATION EST VALIDE POUR
< UN GET ; LE GET LE REMET A 0;
< 0 : INFORMATION NON VALIDE POUR
< UN GET...
CDABLK: EQU $ < BLOC DE DONNEES PROPREMENT DIT...
CDAX: WORD 0 < COORDONNEE X,
CDAY: WORD 0 < COORDONNEE Y,
CDANR: WORD 0 < NIVEAU DE ROUGE DU POINT,
CDANV: WORD 0 < NIVEAU DE VERT DU POINT,
CDANB: WORD 0 < NIVEAU DE BLEU DU POINT,
CDAXXX: WORD 0 < INUTILISE, MAIS PERMET DE FAIRE QUE
< LA LONGUEUR TOTALE SOIT DE 8 MOTS...
LBLOC:: VAL $-CDABLK
CDAACK: WORD 0 < -1 : INFORMATION NON ENCORE PRISE
< EN COMPTE PAR LE GET ;
< 0 : INFORMATION PRISE EN COMPTE PAR GET.
LCDA:: VAL $-CDA < LONGUEUR DU BLOC D'INFORMATION.
IF LCDA-8,,XWOR%,
IF C'EST MIEUX SI LCDA FAIT 8 MOTS !!!
XWOR%: VAL 0
CDA1:: VAL 0 < PREMIER BLOC,
CDA2:: VAL CDA1+LCDA < DEUXIEME BLOC EN BASCULE AVEC CDA1.
ACDA: WORD CDA1 < CDA1 OU CDA2 : ADRESSE DU BLOC ACTIF.
CUMUL: WORD 0 < NOMBRE DE POINTS EXISTANTS LORS DES
< INTERPOLATIONS.
VMODE: WORD 0 < -1 : HD --> BD : VISUALISATION EN SCRATCH
< D'UNE IMAGE HAUTE-DEFINITION,
< 0 : BD --> HD : ENVOI DE L'IMAGE
< RESIDENTE EN HAUTE-DEFINITION,
< +1 : HD --> HD : ENVOI EN HAUTE DEFINITIO
< D'UNE IMAGE HAUTE DEFINITION.
INOIR: WORD 0 < 0 : PAS D'ENVOI DES POINTS NOIRS,
< 1 : DENVOI DE TOUS LES POINTS, MEME
< LES NORS...
<
< SOUS-PROGRAMMES :
<
ASP1: WORD SP1 < CUMUL DES NIVEAUX D'UN POINT.
ASP2: WORD SP2 < APPAUVRISSEMENT DES NIVEAUX DE GRIS.
AGCOUL: WORD GCOUL < RECUPERATION DE LA MEMOIRE DE COULEURS.
ADIAP1: WORD DIAPO1
ADIAP2: WORD DIAPO2
ADIAPD: WORD DIAP2
ASPG: WORD 0 < CONTIENT ASPGPR OU ASPGPT...
ASPGPT: WORD SPGPT < VERSION DE 'SPGPS' AVEC TRANSFERT
< INITIAL (XR,YR) --> (XS,YS).
<
< IMAGE HAUTE-DEFINITION :
<
IHD2:: VAL 2 < RAPPORT ENTRE LA DEFINITION NORMALE
< ET LA HAUTE DEFINITION.
IHDNL:: VAL NLIG*IHD2 < NOMBRE DE LIGNES,
IHDNP:: VAL NMOTL*NBITMO*IHD2
< NOMNRE DE POINTS/LIGNE.
MIHDNL: WORD IHDNL < NOMBRE DE LIGNES,
MIHDNP: WORD IHDNP < NOMBRE DE POINTS PAR LIGNE.
IHDNIV:: VAL 512 < NOMBRE DE NIVEAUX DE GRIS PAR COULEUR.
XWOR%1: VAL IHDNL=0
IF BIT>XWOR%1-IHDNL,,XWOR%,
IF ATTENTION : IHDNL DOIT ETRE UNE PUISSANCE DE 2 !!!
XWOR%: VAL 0
XWOR%2: VAL IHDNP=0
IF BIT>XWOR%2-IHDNP,,XWOR%,
IF ATTENTION : IHDNP DOIT ETRE UNE PUISSANCE DE 2 !!!
XWOR%: VAL 0
XWOR%3: VAL XWOR%1+XWOR%2
XWOR%4: VAL LK=0
XWOR%5: VAL XWOR%3-XWOR%4
LKIMAG:: VAL BIT>XWOR%5*LPOINT < LONGUEUR EN K-MOTS D'UNE IMAGE HAUTE-
< DEFINITION.
LKBUF:: VAL 8 < LONGUEUR DU BUFFER DE PAGINATION
< D'UNE IMAGE HAUTE-DEFINITION.
IF LKBUF*LK/LPOINT-IHDNL,,XWOR%,XWOR%
IF ATTENTION : UNE PAGE DOIT CONTENIR PLUS D'UNE
IF COLONNE A CAUSE DE L'ENTRELACEMENT...
XWOR%: VAL 0
XWOR%6: VAL LKBUF=0
IF BIT>XWOR%6-LKBUF,,XWOR%,
IF ATTENTION : LKBUF DOIT ETRE UNE PUISSANCE DE 2 !!!
XWOR%: VAL 0
NPAGES:: VAL LKIMAG/LKBUF < NOMRE DE PAGES POUR DEFINIR UNE IMAGE
< HAUTE DEFINITION.
BUFI: EQU IMAGE < LE BUFFER DE PAGINATION EST IMPLANTE
< DANS L'IMAGE RESIDENTE...
RDKUI: BYTE NDKU;'08 < LECTURE DU DKU EN QUANTA=1.
WORD BUFI-ZERO*NOCMO
WORD LKBUF*LK*NOCMO
WORD 0 < ADRESSE SECTEUR DE LA PAGE COURANTE...
WDKUI: BYTE NDKU;'0A < ECRITURE DU DKU EN QUANTA=1.
WORD BUFI-ZERO*NOCMO
WORD LKBUF*LK*NOCMO
WORD -1 < ADRESSE DE LA PAGE EN COURS DE REMPLIS-
< SAGE (-1 LA PREMIERE FOIS INDIQUE QU'
< ELLE N'EXISTE PAS).
INDK: WORD 0 < LORS DES OPERATION DE TYPE 'BD -->'
< INDIQUE :
< 0 : ENVOI BD --> PROCESSEUR SPECIALISE,
< 1 : ENVOI BD --> DKU.
NSBUF:: VAL LKBUF*LK/LSDKU < NOMBRE DE SECTEURS PAR PAGES.
ABUFI: WORD BUFI,X < RELAI D'ACCES A LA PAGE COURANTE.
<
< MEMOIRE INSTANTANEE DES COULEURS :
<
NNIV:: VAL 16 < NOMBRE DE NIVEAUX PAR CANAUX.
AMC: WORD MC,X
<
< 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.
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 ERROR < 8
WORD ERROR < 9
WORD ERROR < :
WORD ERROR < ;
WORD ERROR < <
WORD DEFDKU < = : DEFINITION DES ECHANGES 'DKU'
WORD ERROR < >
WORD ERROR < ?
WORD ERROR < @
WORD ERROR < A
WORD ERROR < B
WORD ERROR < C
WORD DISP < D : RESIDENT <-- IMAGE SGN
WORD ERROR < E
WORD GOGE < F : FIN
WORD RECUP < G : COMMANDE INVERSE DE 'V'
WORD ERROR < H
WORD ERROR < I
WORD ERROR < J
WORD ERROR < K
WORD IMLOAD < L : RESIDENT <-- (SCRATCH) SANS MASQUE
WORD ERROR < M
WORD NAME < N : NOMME L'IMAGE RESIDENTE
WORD ERROR < O
WORD ERROR < P
WORD ERROR < Q
WORD ERROR < R
WORD IMSAV < S : SCRATCH <-- (RESIDENT)
WORD ERROR < T
WORD IMUP < U : RESIDENT <-- (SCRATCH) AVEC MASQUE
WORD DIAPO < V : EDITION IMAGE EN HAUTE-DEFINITION
WORD GOCCI < W : RETOUR TEMPORAIRE AU CCI
WORD GORGX < X : POSITIONNEMENT DE 'ORGX'
WORD GORGY < Y : POSITIONNEMENT DE 'ORGY'
WORD ERROR < Z
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 X
SVC 0 < ENVOI DE LA DEMANDE...
PLR 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 $
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'...
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
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...
STZ IMASKO < MISE DU MASQUE OFF 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
<
<
< 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'.
<
<
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...
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...
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
<
<
< R E C U P E R A T I O N D E L A M E M O I R E
< D E S C O U L E U R S :
<
<
GCOUL: EQU $
LAI NSPCOL
SBT 0
ACTD 1
LR B,A < A=ADRESSE DU REGISTRE 0,
LXI 0 < X=NUMERO DE REGISTRE.
GCOUL1: EQU $
ACTD 1 < B=REGISTRE(X),
STB &AMC < QUE L'ON SAUVEGARDE...
ADRI 1,A < REGISTRE
ADRI 1,X < SUIVANT...
XR A,X
CPI NIVMAX < ON SE LIMITE AU BANK0...
XR A,X
JLE GCOUL1
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...
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...
LAD SDKU
SVC 0 < ENVOI DE LA DEMANDE...
JNE XERROR < ERREUR ?!????!?! (PROTECTION,...)
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
<
<
< E N V O I D ' U N E I M A G E N O R M A L E
< D A N S L E S Y S T E M E H A U T E - D E F I N I T I O N :
<
<
< FONCTION :
< CETTE COMMANDE ADMET TROIS MODES
< DE FONCTIONNEMENT :
< -1 : L'IMAGE HAUTE DEFINITION STOCKEE
< AU DEBUT DE DKU EST RECUPEREE, ET
< PAR APPAUVRISSEMENT EST PLACEE EN
< IMAGE SCRATCH.
< 0 : DEUX MODES DE FONCTIONNEMENT :
< 1 - SI INDK=0 : L'IMAGE RESIDENTE EST ENVOYEE VERS
< LE PROCESSEUR SPECIALISE HAUTE-DEFINITION VIA LA CDA.
< 2 - SI INDK=1 : L'IMAGE SCRATCH EST ENVOYEE VERS
< DKU EN HAUTE DEFINITION...
< +1 : L'IMAGE HAUTE-DEFINITION STOCKEE
< AU DEBUT DE DKU EST ENVOYEE AU
< PROCESSEUR SPECIALISE HAUTE-DEFINITION
< VIA LA CDA COMMUNE.
< CES MODES SONT APPELES :
< -1 : HD --> BD,
< 0 : BD --> HD,
< +1 : HD --> HD.
< (H=HAUTE, B=BASSE, D=DEFINITION)
<
<
< FORMAT D'UNE IMAGE HAUTE-DEFINITION :
< CHAQUE POINT EST CODE SUR 2 MOTS
< DONT LA DSEC 'POINT' DONNE LE FORMAT ;
< L'IMAGE EST RANGEE COLONNE PAR COLONNE :
< COLONNE(X=0) : POINTS (0,0), (0,1),..., (0,511),
< COLONNE(X=1) : POINTS (1,0), (1,1),..., (1,511),
< ...
< COLONNE(X=511) : POINTS (511,0), (511,1),..., (511,511).
< NOTA : UNE PAGE CONTENANT PLUS D'UNE COLONNE
< LES PROBLEMES D'ENTRELACEMENT SONT SIMPLES...
<
<
DIAPO: EQU $
STZ INDK < A PRIORI, PAS DE PAGE DKU EN COURS
< DE GENERATION...
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMMOD-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < A=MODE DESIRE :
ADRI -"1",A < CONVERSION BINAIRE,
CPI -1
JL DIAPO < ERREUR...
CPI 1
JG DIAPO < ERREUR...
STA VMODE
JANE DIAP42 < CAS HD --> BD ET HD --> HD...
<
< CAS D'UN ACCES A L'IMAGE RESIDENTE :
<
DIAP41: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMWDK-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < A=REPONSE OUI/NON...
LB ASPGPR < B=IMAGE RESIDENTE A PRIORI...
STZ INDK < INDK=0 : PAS D'ENVOI DKU A PRIORI...
CPI "N"
JE DIAP40 < NON, PAS D'ENVOI DKU...
CPI "O"
JNE DIAP41 < ?!???!?!
LB ASPGPT < B=IMAGE SCRATCH...
IC INDK < INDK=1 : ENVOI A DKU UNIQUEMENT...
STZ WDKUI+3
DC WDKUI+3 < PAS DE PAGE EN GENERATION INITIALEMENT.
< (ADRESSE NEGATIVE)
DIAP40: EQU $
STB ASPG < MISE EN PLACE DU SOUS-PROGRAMME VARIABLE
< D'ACCES A L'IMAGE SCRATCH OU RESIDENTE
< SUIVANT LA VALEUR DE INDK...
DIAP42: EQU $
CPZ VMODE
JL DIAP1 < MODE HD --> BD : LA CDA COMMUNE
< N'EST PAS NECESSAIRE...
CPZ INDK < EST-CE BD --> DKU ???
JNE DIAP1 < OUI, LA AUSSI LA CDA N'EST PAS UTILE...
<
< CAS DES ACCES A LA CDA :
<
LAI AMCDA-ZERO
BSR ACCI < ACCES A LA CDA COMMUNE.
DIAP10: EQU $
IF MODE-VISU,XWOR%7,,XWOR%7
LAI AMNOIR-ZERO
BSR APRINT
XWOR%7: VAL 0
BSR AIN < A=REPONSE...
STZ INOIR < INOIR=0 : NON A PRIORI...
CPI "N"
JE DIAP11
CPI "O"
JNE DIAP10 < ??!?!?!
IC INOIR < INOIR=1 : OUI...
DIAP11: EQU $
<
< INITIALISATION DU PROCESSUS :
<
STZ CDAX
STZ CDAY
STZ CDANR
STZ CDANV
STZ CDANB
STZ CDAVAL
STZ CDAACK
LAI CDA1
STA ACDA < INITIALISATION DE LA BASCULE...
LRM B,X < INITIALISATION DE LA CDA1,
WORD CDA
WORD LCDA
WCDA
LAI CDA2
LXI LCDA < INITIALISATION DE LA CDA2.
WCDA
DIAP1: EQU $
<
< RECUPERATION DE LA MEMOIRE DE COULEURS :
<
BSR AGCOUL
<
< EXPLORATION DE L'IMAGE RESIDENTE :
<
LXI 0 < X=COORDONNEE X HAUTE-DEFINITION.
<
< BALAYAGE EN X :
<
DIAPO1: EQU $
LYI 0 < Y=COORDONNEE Y HAUTE-DEFINITION.
<
< BALAYAGE EN Y :
<
DIAPO2: EQU $
PSR X,Y
<
< TRAITEMENT DU POINT COURANT :
<
STX CDAX
STZ CDANR
STZ CDANV
STZ CDANB
LR X,A
SLRS IHD2=0
STA XR < XR=X/2.
STZ CUMUL
IC CUMUL < CUMUL=1.
XXMOD:: VAL 2 < CONSTANTE D'ENTRELACEMENT DES Y :
< ON PERMUTE 2*2 BITS...
LR Y,A < A=COORDONNEE Y AVANT ENTRELACEMENT,
SCRS IHDNL=0-XXMOD
SLRD XXMOD < ON PERMUTE LES 2 PREMIERS BITS DE LA
< COORDONNEE Y AVEC SES 2 DERNIERS, EN
< SUPPOSANT XXMOD=2...
SLLS XXMOD
SCLS IHDNL=0-XXMOD
SLLD XXMOD
LR A,Y < Y=COORDONNEE Y APRES ENTRELACEMENT...
STY CDAY
CPZ VMODE
JE DIAP60 < CAS DES MODES N'UTILISANT PAS DKU...
BR ADIAPD < CAS DES MODES UTILISANT DKU...
DIAP60: EQU $
<
< ENVOI DE L'IMAGE RESIDENTE EN HAUTE-DEFINITION :
<
SLRS IHD2=0
STA YR < YR=Y ENTRELACE/2.
JC YNP1 < Y ENTRELACE EST IMPAIR...
LR X,A
TBT NBITMO-1
JC YPXNP1 < X EST IMPAIR...
<
< X ET Y ENTRELACE SONT PAIRS :
< (LES POINTS (X,Y) ET (XR,YR) SONT CONFONDUS)
<
BSR ASPG < NIV(X/2,Y/2).
BSR ASP1 < CALCUL DES NIVEAUX...
JMP DIAPO3
<
< Y ENTRELACE EST PAIR, ET X IMPAIR :
< (ON INTERPOLE SUR L'AXE DES X)
<
YPXNP1: EQU $
BSR ASPG < NIV(X/2,Y/2).
BSR ASP1 < CUMUL DES NIVEAUX...
IC XR
BSR ASPG < NIV((X+2)/2,Y/2).
JAL YPXNP2 < POINT INEXISTANT...
BSR ASP1 < CUMUL DES NIVEAUX...
IC CUMUL
YPXNP2: EQU $
JMP DIAPO3
YNP1: EQU $
LR X,A
TBT NBITMO-1
JC YNPXNP < X EST IMPAIR...
<
< Y ENTRELACE EST IMPAIR, ET X EST PAIR :
< (ON INTERPOLE SUR L'AXE DES Y)
<
YNPXP: EQU $
BSR ASPG < NIV(X/2,Y/2).
BSR ASP1 < CUMUL DES NIVEAUX...
IC YR
BSR ASPG < NIV(X/2,(Y+2)/2).
JAL YNPXP1 < POINT INEXISTANT...
BSR ASP1 < CUMUL DES NIVEAUX...
IC CUMUL
YNPXP1: EQU $
JMP DIAPO3
<
< Y ENTRELACE ET X SONT IMPAIRS :
< (INTERPOLATION SUR LES 2 AXES)
<
YNPXNP: EQU $
BSR ASPG < NIV(X/2,Y/2).
BSR ASP1 < CUMUL DES NIVEAUX...
IC XR
BSR ASPG < NIV((X+2)/2,Y/2).
JAL XYNP1 < POINT INEXISTANT...
BSR ASP1 < CUMUL DES NIVEAUX...
IC CUMUL
XYNP1: EQU $
IC YR
BSR ASPG < NIV((X+2)/2,(Y+2)/2).
JAL XYNP2 < POINT INEXISTANT...
BSR ASP1 < CUMUL DES NIVEAUX...
IC CUMUL
XYNP2: EQU $
DC XR
BSR ASPG < NIV(X/2,(Y+2)/2).
JAL XYNP3 < POINT INEXISTANT...
BSR ASP1 < CUMUL DES NIVEAUX...
IC CUMUL
XYNP3: EQU $
<
< TRAITEMENT DES NIVEAUX DE GRIS :
<
DIAPO3: EQU $
XWOR%2: VAL IHDNIV/NNIV=0
LA CDANR
SARD NBITMO-XWOR%2
DV CUMUL
STA CDANR < NIVEAU DE ROUGE DE (X,Y ENTRELACE).
LA CDANV
SARD NBITMO-XWOR%2
DV CUMUL
STA CDANV < NIVEAU DE VERT DE (X,Y ENTRELACE).
LA CDANB
SARD NBITMO-XWOR%2
DV CUMUL
STA CDANB < NIVEAU DE BLEU DE (X,Y ENTRELACE)
CPZ INDK < ENVOI AU PROCESSEUR SPECIALISE ???
JE SCDA1 < OUI...
<
< ENVOI DE L'IMAGE RESIDENTE A DKU :
<
LR X,A
ANDI LKBUF*LK/LPOINT/IHDNL-1
JANE DIAP21
CPZR Y
JNE DIAP21
<
< CAS DU PASSAGE A UNE NOUVELLE PAGE :
<
PSR A
CPZ WDKUI+3 < EST-CE L'INITIALISATION ???
JL DIAP22 < OUI...
PSR X
LAD WDKUI
SVC 0 < GENERATION DE LA PAGE PRECEDENTE...
PLR X
DIAP22: EQU $
LR X,A
SLRS LKBUF*LK/LPOINT/IHDNL=0
SLLS NSBUF=0
STA WDKUI+3 < INITIALISATION DE L'ADRESSE DE LA
< NOUVELLE PAGE...
PLR A
<
< GENERATION DU POINT COURANT :
<
DIAP21: EQU $
MP MIHDNL
ADR Y,B
XWOR%1: VAL LPOINT=0
XWOR%2: VAL NOCMO=0
SLLD XWOR%1+XWOR%2
LR B,X < X=INDEX DE RANGEMENT DES NIVEAUX
< DE COULEUR EN COMMENCANT PAR ROUGE.
LBI 0 < CLEAR B...
LA CDANR < NIVEAU DE ROUGE SUR 9 BITS :
SLLS NBITOC-BIT
SCLD BIT
SLRS NBITOC
STBY &ABUFI < NIVEAU DE ROUGE (BITS 1-8).
ADRI 1,X
LA CDANV < NIVEAU DE VERT SUR 9 BITS :
SLLS NBITOC-BIT
SCLD BIT
SLRS NBITOC
STBY &ABUFI < NIVEAU DE VERT (BITS 1-8).
ADRI 1,X
LA CDANB < NIVEAU DE BLEU SUR 9 BITS :
SLLS NBITOC-BIT
SCLD BIT
SLRS NBITOC
STBY &ABUFI < NIVEAU DE BLEU (BITS 1-8).
ADRI 1,X
SLLD NBITMO+NBITOC-NCOOL
STBY &ABUFI < BITS 0 DES NIVEAUX DE ROUGE, DE
< VERT ET DE BLEU.
JMP DIAPO5 < VERS LE POINT SUIVANT...
<
< ENVOI AU PROCESSEUR SPECIALISE :
<
SCDA1: EQU $
LA CDANR
OR CDANV
OR CDANB
OR INOIR
JAE DIAPO5 < ON ELIMINE LES POINTS NOIRS...
LA ACDA
ADRI CDAACK-CDA,A
SCDA: EQU $
LRM B,X
WORD CDAACK
WORD 1
RCDA
CPZ CDAACK
JNE SCDA < LE BLOC PHYSIQUE COURANT DE LA CDA
< N'A PAS ENCORE ETE ACQUITTE PAR LE
< GET, IL FAUT ATTENDRE...
ADRI CDABLK-CDAACK,A
LRM B,X < OK, ENVOI DU BLOC DE DONNEES...
WORD CDABLK
WORD LBLOC
WCDA
LBI SIGNAL
STB CDAACK
STB CDAVAL
ADRI CDAACK-CDABLK,A
LRM B,X < POUR LE FUTUR ACQUITTEMENT...
WORD CDAACK
WORD 1
WCDA
ADRI CDAVAL-CDAACK,A
LRM B,X < SIGNALISATION DE DONNEES VALIDES...
WORD CDAVAL
WORD 1
WCDA
LA ACDA
LBI CDA1
CPI CDA2
JE DIAPO4
LBI CDA2
DIAPO4: EQU $
STB ACDA < BASCULE DE CDA1 ET CDA2...
<
< PASSAGE AU POINT SUIVANT :
<
DIAPO5: EQU $
PLR X,Y
ADRI 1,Y
LR Y,A
CP MIHDNL
JL DIAP52 < ON RESTE DANS LA MEME COLONNE...
ADRI 1,X
LR X,A
CP MIHDNP
JL DIAP51 < CHANGEMENT DE COLONNE...
<
< FIN DU PROCESSUS :
<
CPZ INDK < A-T'ON GENERE UNE IMAGE HAUTE-
< DEFINITION SUR DKU ???
JE DIAP30 < NON...
LAD WDKUI
SVC 0 < OUI, ON ECRIT LA DERNIERE PAGE...
DIAP30: EQU $
LAI AMCDAP-ZERO
BSR ACCI < RETOUR A CDAP/CDAI...
BR ALOOP < ET VERS LA BOUCLE D'INTERROGATION...
DIAP51: EQU $
BR ADIAP1
DIAP52: EQU $
BR ADIAP2
<
< ACCES A UNE IMAGE HAUTE-DEFINITION, VIA DKU :
<
DIAP2: EQU $
JG DIAP4 < CAS HD --> HD...
LA CDAX
SLRS IHD2=0
JC DIAPO5 < DANS LE CAS HD --> BD, ON IGNORE
< LES X IMPAIRS,
STA XS < XS=X/2...
LA CDAY
SLRS IHD2=0
JC DIAPO5 < AINSI QUE LES Y IMPAIRS...
STA YS < YS=Y/2...
DIAP4: EQU $
LR X,A
ANDI LKBUF*LK/LPOINT/IHDNL-1
< EST-CE UNE NOUVELLE PAGE ???
JANE DIAP3 < NON...
CPZR Y < EST-CE UNE NOUVELLE COLONNE ???
JNE DIAP3 < NON...
<
< CHARGEMENT D'UNE NOUVELLE PAGE :
<
PSR A,X
LR X,A
SLRS LKBUF*LK/LPOINT/IHDNL=0
SLLS NSBUF=0
STA RDKUI+3
LAD RDKUI
SVC 0 < CHARGEMENT DE LA NOUVELLE PAGE.
PLR A,X
<
< TRAITEMENT DU POINT (X,Y) :
<
DIAP3: EQU $
MP MIHDNL
ADR Y,B
XWOR%1: VAL LPOINT=0
XWOR%2: VAL NOCMO=0
SLLD XWOR%1+XWOR%2
LR B,X < X=INDEX OCTET D'ACCES A LA PAGE...
LBY &ABUFI < NIVEAU DE ROUGE BITS 1-8.
PSR A
ADRI 1,X
LBY &ABUFI < NIVEAU DE VERT BITS 1-8.
PSR A
ADRI 1,X
LBY &ABUFI < NIVEAU DE BLEU BITS 1-8.
PSR A
ADRI 1,X
LBY &ABUFI
SLRD NBITMO+NBITOC-NCOOL < B=BITS 0 DES 3 NIVEAUX.
PLR A
SLLS NBITOC
SCRD BIT
SLRS NBITOC-BIT
STA CDANB < NIVEAU DE BLEU.
PLR A
SLLS NBITOC
SCRD BIT
SLRS NBITOC-BIT
STA CDANV < NIVEAU DE VERT.
PLR A
SLLS NBITOC
SCRD BIT
SLRS NBITOC-BIT
STA CDANR < NIVEAU DE ROUGE.
CPZ VMODE < MODE ???
JG SCDA1 < HD --> HD : VERS L'ENVOI AU PROCESSEUR
< SPECIALISE HAUTE-DEFINITION...
<
< MODE HD --> BD :
<
BSR ASP2 < VERS L'APPAUVRISSEMENT ET L'ENVOI
JMP DIAPO5 < VERS LE POINT SUIVANT...
PAGE
<
<
< C U M U L D E S N I V E A U X :
<
<
< ARGUMENT :
< A=NIVEAU D'UN POINT SUR 3 BITS.
<
<
SP1: EQU $
PSR A,B,X
LR A,X < X=NIVEAU DE GRIS DU POINT,
LB &AMC < B=NIVEAUX DU REGISTRE (X).
LAI 0
XWOR%1: VAL NNIV=0
SLLD XWOR%1+XWOR%1
ADRI -NNIV+1,A
NGR A,A
AD CDANB
STA CDANB < NIVEAU DE BLEU...
LAI 0
SLLD XWOR%1
ADRI -NNIV+1,A
NGR A,A
AD CDANV
STA CDANV < NIVEAU DE VERT...
LAI 0
SLLD XWOR%1
ADRI -NNIV+1,A
NGR A,A
AD CDANR
STA CDANR < NIVEAU DE ROUGE...
PLR A,B,X
RSR
PAGE
<
<
< C O M M A N D E I N V E R S E D E ' V ' :
<
<
RECUP: EQU $
LAD RELMEM
SVC 0 < RETOUR TEMPORAIRE A 4K...
<
< INITIALISATION DU PROCESSUS :
<
LAI CDA1
STA ACDA < ON COMMENCE SUR LE PREMIER BLOC.
BSR AGCOUL < RECUPERATION DE LA MEMOIRE DE COULEURS.
<
< RECUPERATION DU BLOC COURANT :
<
RECUP1: EQU $
LAI AMCDA-ZERO
BSR ACCI < PASSAGE A LA CDA COMMUNE...
RECUP7: EQU $
LA ACDA
ADRI CDAVAL-CDA,A
GCDA: EQU $
LRM B,X
WORD CDAVAL
WORD 1
RCDA
CPZ CDAVAL
JE GCDA < L'INFORMATION QUI SUIT N'EST
< PAS ENCORE BONNE, ON ATTEND...
STZ CDAVAL
LXI 1 < OK, INDIQUONS QU'ON EST EN TRAIN
< DE PRENDRE EN COMPTE LE BLOC...
WCDA
ADRI CDABLK-CDAVAL,A
LRM B,X < ACCES AU BLOC DE DONNEES...
WORD CDABLK
WORD LBLOC
RCDA
ADRI CDAACK-CDABLK,A
STZ CDAACK
LRM B,X < SIGNAL D'ACQUITTEMENT DU BLOC...
WORD CDAACK
WORD 1
WCDA
LA ACDA
LBI CDA1
CPI CDA2
JE RECUP3
LBI CDA2
RECUP3: EQU $
STB ACDA < BASCULEMENT CDA1/CDA2.
<
< TRAITEMENT DU BLOC COURANT :
<
LA CDAX
SLRS IHD2=0
JC RECUP7 < ON IGNORE LES X IMPAIRS...
STA XS < OK, XS=X/2.
LA CDAY
CP MIHDNL < EST-CE LA DERNIERE LIGNE ???
JE RECUP4 < OUI, ON L'IGNORE (IMPAIRE...)...
SLRS IHD2=0
JC RECUP7 < ON IGNORE LES Y IMPAIRS...
STA YS < OK, YR=Y/2.
<
< TRAITEMENT DU POINT COURANT (XS,YS) :
<
LAI AMCDAP-ZERO
BSR ACCI < RETOUR A CDAI/CDAP.
BSR ASP2 < DETERMINATION DU NIVEAU DU POINT,
< ET SON ENVOI EN SCRATCH...
JMP RECUP1 < AU BLOC SUIVANT...
<
< FIN DU PROCESSUS :
<
RECUP4: EQU $
LAI AMCDAP-ZERO
BSR ACCI < RETOUR A CDAI/CDAP.
LAD DEMMEM
SVC 0 < ON PASSE A 16K...
BR ALOOP < VERS LA BOUCLE D'INTERROGATION...
PAGE
<
<
< A P P A U V R I S S E M E N T D E S N I V E A U X D E
< G R I S E T T R A C E D U P O I N T ( X S , Y S ) :
<
<
SP2: EQU $
XWOR%1: VAL NNIV=0
XWOR%2: VAL IHDNIV/NNIV=0
LA CDANR
SLRS XWOR%2
ADRI -NNIV+1,A
NGR A,A
SLRD XWOR%1
LA CDANV
SLRS XWOR%2
ADRI -NNIV+1,A
NGR A,A
SLRD XWOR%1
LA CDANB
SLRS XWOR%2
ADRI -NNIV+1,A
NGR A,A
SLLD XWOR%1+XWOR%1 < A=3 NIVEAUX ASSOCIES A (XS,YS) EN
< FORMAT MEMOIRE DE COULEURS...
LXI 0
RECUP5: EQU $
CP &AMC < (A) EST-ELLE DANS LA MEMOIRE DES
< COULEURS ???
JE RECUP6 < OUI...
ADRI 1,X
XR A,X
CPI NIVMAX < NON, ENTREE SUIVANTE...
XR A,X
JLE RECUP5 < OK, ELLE EXISTE...
LXI NIVMAX < ELLE N'EXISTE PAS, CELA SIGNIFIE
< QUE LA MEMOIRE DE COULEURS A CHANGE
< ENTRE TEMPS...
RECUP6: EQU $
LR X,A < A=NIVEAU SUR 3 BITS DE (XS,YS),
BSR ASPRPS < QUE L'ON TRACE EN SCRATCH...
RSR
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
<
<
< 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.