; =====================================================================
; Annotations ajoutees par Claude - passe 4
; Nouvelle source: OrganeExploitation.txt (fourni par l'utilisateur) -
; tables de codes UART CONFIRMEES pour les organes d'exploitation SC20
; et MINI10, et confirmation du mecanisme de detection du type d'organe
; via l'octet de personnalisation EPROM MN4 a l'adresse 0x0464.
;
; DECOUVERTE MAJEURE DE CETTE PASSE: le sous-programme L568F (dispatcher
; de decodage des touches) est maintenant totalement elucide et confirme
; le mecanisme suivant, qui resout un point precedemment signale comme
; non confirme:
;   - Au boot (L0026 puis re-test vers L00A1), le nibble haut de l'octet
;     @0x0464 est teste (JB ACC.4) : bit4=1 -> organe = MINI10 (flag
;     interne 05AH mis a 1) ; bit4=0 -> organe = SC20/autre (05AH=0).
;   - Le decodeur de touches (L568F et suite) relit ce flag 05AH pour
;     savoir QUELLE table de codes appliquer, et teste bien des codes
;     DIFFERENTS pour les memes touches logiques selon le type d'organe
;     (ex: touche '-' = 0x07 en SC20 mais 0x27 en MINI10 ; '+' = 0x0B en
;     SC20 mais 0x26 en MINI10) - exactement comme documente dans
;     OrganeExploitation.txt.
;
; Tables completes reprises en commentaire pres du vecteur serie (L59B8)
; et a chaque point de comparaison identifie dans L568F.
;
; MISE A JOUR (OrganeExploitation.txt corrige par l'utilisateur): la touche '5'
; du SC20 utilise en realite le code UART 0x11 (et non 0x06 comme dans une
; version precedente du releve, qui entrait alors en collision avec '1'). Ce
; point, precedemment signale comme suspect, est donc resolu - aucune
; incoherence reelle dans le code ni dans la doc a jour.
;
; NOUVELLE CONFIRMATION DE CETTE PASSE: la reponse "commande inconnue" (L5735)
; est bien choisie selon le type d'organe: R1=0x41 par defaut (SC20), remplace
; par 0x15 si 05AH est actif (MINI10) - exactement les deux valeurs fournies
; par OrganeExploitation.txt. Egalement integree: la table complete des LEDs
; MINI10 (A/T/R/O, allumee/eteinte).
;
; PASSE 5 - EpromPersonnalisation.txt (fourni par l'utilisateur): structure
; complete de l'EPROM MN4 integree (plan de frequences, tables de talons,
; options de personnalisation a 0x0464/0x0465/0x0468/0x0478/0x0479/0x047B/
; 0x047C, table des talons 0x04A0-0x04AF). Chaque bit documente est decode
; automatiquement des qu'un test JB/JNB/ANL suit une lecture tracee de ces
; octets. Trois routines cles confirmees a 100% avec la doc fournie:
;   - L501D: calcul du pointeur dans la table des talons via SWAP+ANL+RL sur
;     l'octet 0x0465, reproduit exactement la formule documentee.
;   - L4618: gestion de l'ecoute reseau commutable (bits d1-d0 de 0x0465).
;   - L1C38: gestion de la tonalite de presence (bits d3-d2 de 0x0465).
;
; DEUX POINTS SIGNALES A L'UTILISATEUR (per sa demande de reperer les
; incoherences):
;   1) [RESOLU - voir PASSE 6 ci-dessous] Le bit d0 de l'octet 0x0464 a ete
;      clarifie par l'utilisateur.
;   2) Le bit d0 de l'octet 0x0468 est documente comme "toujours a 0?" (avec
;      un point d'interrogation, donc deja marque comme incertain par
;      l'auteur) - or ce bit est bel et bien LU ET TESTE de facon significative
;      dans le code (cf. L37C9: "JB ACC.0,L37E1"), ce qui resout ce doute:
;      ce n'est PAS un bit reserve/toujours nul, il pilote une fonction reelle
;      (fonction precise non identifiee avec certitude a ce stade).
;
; PASSE 6 - Confirmations de l'utilisateur:
;   1) 0x0464 d0: CORRIGE - ce bit DESACTIVE l'appel selectif s'il vaut 1 (donc
;      actif si 0). L'ancienne mise en garde sur une coquille dans la doc est
;      donc levee.
;   2) MECANISME DE CHECKSUM DE L'EPROM DE PERSONNALISATION (CONFIRME PAR
;      L'UTILISATEUR): la boucle L0081 (deja identifiee comme parcourant les
;      4096 premiers octets de l'EPROM MN4) calcule un checksum additif 16
;      bits (R7:R6) qui est ensuite COMPARE (L00D1) a une copie du checksum de
;      la PRECEDENTE initialisation, conservee en RAM MN5 a l'adresse
;      0x2242/0x2243. Si identique, le retraitement complet de l'EPROM de
;      personnalisation (mise a jour de la RAM) est saute (L0108 direct) ; sinon
;      il est effectue (L00EB) et le nouveau checksum est sauvegarde pour la
;      prochaine comparaison. Point technique note au passage : le code y
;      compare des ADRESSES DIRECTES (R6/R7, registres 006H/007H) et non des
;      valeurs immediates - une lecture attentive de la notation DIS8051
;      (absence du prefixe '#') etait necessaire pour l'etablir avec certitude.
;      Egalement decouvert a cette occasion : la RAM MN5 (HM-6514) etant native
;      4 bits, chaque octet logique y est stocke sur DEUX cellules RAM
;      consecutives (nibble bas seulement) via les helpers L05F6 (lecture) et
;      L0603 (ecriture).
; =====================================================================

;===============================================================;
; Disassembled Using DIS8051   -  (C)1989 Data Sync Engineering ;
;===============================================================;
;
;
;

; =====================================================================
; NOTE DE LECTURE - SEMANTIQUE DE CJNE DANS LES COMMENTAIRES CI-DESSOUS
; L'instruction CJNE dest,#imm,LABEL saute vers LABEL si dest != imm, et
; NE SAUTE PAS (continue en sequence) si dest == imm. Dans les longues
; chaines de comparaison de type 'switch' (courantes dans ce firmware
; pour decoder les codes touche UART), le label cible de chaque CJNE est
; donc le TEST SUIVANT de la chaine (atteint quand la valeur ne matche
; PAS), tandis que le traitement reel de la valeur testee se trouve dans
; les instructions qui suivent IMMEDIATEMENT le CJNE en sequence (executees
; seulement en cas d'egalite). Toutes les annotations '-> code UART Y'
; ajoutees dans ce fichier suivent cette convention: elles decrivent ce
; qui se passe quand l'EGALITE est verifiee (pas de saut), pas la
; destination du saut elle-meme.
; =====================================================================

;
; =====================================================================
; RECAPITULATIF DES ZONES MEMOIRE RAM INTERNE DU 8031 UTILISEES
; (demande explicite de l'utilisateur, tout niveau de confirmation)
; =====================================================================
;
; STRUCTURE GENERALE DE LA RAM INTERNE (128 octets, 0x00-0x7F):
;   0x00-0x07: banque de registres 0 (R0-R7) - utilisation standard 8051
;   0x08-0x1F: banques de registres 1-3 - non utilisees comme telles ici
;             (PSW.RS1/RS0 restent a 0 dans tout le programme observe),
;             ces adresses servent donc de RAM generale/bit-adressable
;   0x20-0x2F: ZONE BIT-ADRESSABLE (bits 000H-07FH) - 116 des 128 bits
;             possibles sont utilises (voir table complete ci-dessous)
;   0x30-0x7F: RAM generale adressable par octet (voir table ci-dessous)
;
; ---------------------------------------------------------------------
; TABLE DES BITS (0x20-0x2F, notation 'bit XXXH' utilisee dans ce fichier)
; ---------------------------------------------------------------------
; bit 000H (octet 0x20.0): Interrupteur MAITRE du generateur de tonalite ALSIG (CONFIRME):
;     0=silence, 1=ALSIG actif (cf. L5A02/L59EF).
; bit 001H (octet 0x20.1): Lie au polling de ACKE/MN7 dans l'ISR Timer0 (PARTIEL, cf.
;     L59EF/L59FA) - fonction precise non confirmee.
; bit 002H (octet 0x20.2): Lie au polling de ACKE/MN7 (PARTIEL, teste en tete de L59EF ;
;     efface en debut de reset MN7 L597C).
; bit 003H (octet 0x20.3): Lie au polling de ACKE/MN7 (PARTIEL, positionne en L59EF si
;     ACKE=1 et 002H=0).
; bit 004H (octet 0x20.4): Non identifie avec certitude - usage ponctuel.
; bit 005H (octet 0x20.5): Lie a la transition ALT_T (PARTIEL, SETB en L53A4).
; bit 006H (octet 0x20.6): NOTIFICATION 'l'etat de la porteuse (DP) a change' (CONFIRME):
;     consomme par une trentaine d'ecrans differents pour rafraichir leur affichage (cf.
;     L534F/L5365).
; bit 007H (octet 0x20.7): NOTIFICATION 'l'etat EM (emission) a change' (CONFIRME, cf.
;     L536E/L54AA/L5977).
; bit 008H (octet 0x21.0): Non identifie avec certitude - usage ponctuel (ecran/menu).
; bit 009H (octet 0x21.1): Non identifie avec certitude - notification generique d'ecran
;     (motif similaire a 023H).
; bit 00AH (octet 0x21.2): Non identifie avec certitude - notification generique d'ecran.
; bit 00BH (octet 0x21.3): Non identifie avec certitude - notification generique d'ecran.
; bit 00CH (octet 0x21.4): Non identifie avec certitude - notification generique d'ecran
;     (souvent efface avec 031H).
; bit 00DH (octet 0x21.5): Non identifie avec certitude - notification generique d'ecran.
; bit 00EH (octet 0x21.6): Non identifie avec certitude - notification generique d'ecran.
; bit 00FH (octet 0x21.7): Non identifie avec certitude - usage ponctuel.
; bit 010H (octet 0x22.0): Non identifie avec certitude - usage ponctuel.
; bit 011H (octet 0x22.1): Non identifie avec certitude - usage ponctuel.
; bit 012H (octet 0x22.2): Non identifie avec certitude - usage ponctuel.
; bit 013H (octet 0x22.3): Non identifie avec certitude - usage ponctuel.
; bit 014H (octet 0x22.4): Non identifie avec certitude - usage ponctuel.
; bit 015H (octet 0x22.5): Non identifie avec certitude - usage ponctuel.
; bit 016H (octet 0x22.6): Non identifie avec certitude - usage ponctuel.
; bit 018H (octet 0x23.0): Non identifie avec certitude - usage ponctuel (ecran).
; bit 019H (octet 0x23.1): Non identifie avec certitude - usage ponctuel.
; bit 01AH (octet 0x23.2): Non identifie avec certitude - usage ponctuel.
; bit 01BH (octet 0x23.3): Non identifie avec certitude - usage ponctuel.
; bit 01CH (octet 0x23.4): Non identifie avec certitude - usage ponctuel.
; bit 01DH (octet 0x23.5): Non identifie avec certitude - usage ponctuel.
; bit 01EH (octet 0x23.6): EVENEMENT 'affichage/LED SC20 en attente' (CONFIRME): pose par
;     L0357/L0355 des qu'un element est enfile dans la file 0x2F, teste par la boucle
;     principale (JBC 01EH en L585F/L58B2) pour appeler L4A16/L51AB.
; bit 01FH (octet 0x23.7): Non identifie avec certitude - vu dans plusieurs contextes
;     d'ecran/PLL (L453A).
; bit 020H (octet 0x24.0): Non identifie avec certitude - usage ponctuel.
; bit 021H (octet 0x24.1): Non identifie avec certitude - usage ponctuel.
; bit 022H (octet 0x24.2): Non identifie avec certitude - usage ponctuel.
; bit 023H (octet 0x24.3): FLAG GENERIQUE 'RAFRAICHIR L'AFFICHAGE' (CONFIRME): l'un des
;     flags les plus largement utilises du programme, positionne par de tres nombreuses
;     routines des qu'une donnee affichee doit etre mise a jour.
; bit 024H (octet 0x24.4): Non identifie avec certitude - usage ponctuel.
; bit 025H (octet 0x24.5): Non identifie avec certitude - usage ponctuel.
; bit 026H (octet 0x24.6): Non identifie avec certitude - usage ponctuel.
; bit 027H (octet 0x24.7): Non identifie avec certitude - usage ponctuel.
; bit 028H (octet 0x25.0): Non identifie avec certitude - usage ponctuel.
; bit 029H (octet 0x25.1): Non identifie avec certitude - usage ponctuel (a ne pas
;     confondre avec le code touche UART 0x29 de l'organe STANDARD, sans rapport).
; bit 02AH (octet 0x25.2): Non identifie avec certitude - usage ponctuel (vu dans le
;     contexte MN13 Port6 L4700, sans rapport avec le code touche UART 0x2A).
; bit 02BH (octet 0x25.3): Non identifie avec certitude - usage ponctuel.
; bit 02CH (octet 0x25.4): Non identifie avec certitude - usage ponctuel (efface souvent
;     avec 065H/031H en debut d'ecran).
; bit 02DH (octet 0x25.5): Non identifie avec certitude - usage ponctuel.
; bit 02EH (octet 0x25.6): Lie a l'activation de l'aiguillage audio (PARTIEL): positionne
;     par plusieurs des 6 routines de tonalite ALSIG (L4541/L4564/L4587/L459D/L45B3/L54AA)
;     avant l'appel a L5964/L5964 - role precis (semble distinct de 000H) non confirme.
; bit 02FH (octet 0x25.7): Non identifie avec certitude - usage ponctuel.
; bit 030H (octet 0x26.0): Non identifie avec certitude - usage ponctuel.
; bit 031H (octet 0x26.1): Non identifie avec certitude - flag d'ecran generique
;     (efface/pose frequemment autour des transitions d'ecran).
; bit 032H (octet 0x26.2): Non identifie avec certitude - usage ponctuel.
; bit 033H (octet 0x26.3): Non identifie avec certitude - flag d'ecran generique.
; bit 034H (octet 0x26.4): Non identifie avec certitude - usage ponctuel.
; bit 035H (octet 0x26.5): Dans le contexte CLE/MICA (L13BF): 'seuil de maintien de 2
;     secondes atteint' (CONFIRME dans ce contexte precis - flag bas generique,
;     possiblement reutilise avec un sens different sur d'autres ecrans).
; bit 036H (octet 0x26.6): Non identifie avec certitude - usage ponctuel.
; bit 037H (octet 0x26.7): Non identifie avec certitude - usage ponctuel.
; bit 038H (octet 0x27.0): Non identifie avec certitude - flag d'ecran generique (efface
;     souvent avec 04BH).
; bit 039H (octet 0x27.1): Non identifie avec certitude - usage ponctuel.
; bit 03AH (octet 0x27.2): Dans le contexte CLE/MICA (L13BF): 'en attente du delai de 6
;     secondes apres un relachement intermediaire' (CONFIRME dans ce contexte precis).
; bit 03BH (octet 0x27.3): FLAG GENERIQUE 'TOUCHE MAINTENUE / MINUTERIE DE MAINTIEN
;     ACTIVE' (CONFIRME): reutilise pour la touche APPEL (affichage version logicielle,
;     cf. L109A/L108A) ET pour la touche CLE (bascule clair/chiffre MICA, cf. L0A32/L13BF)
;     - flag generique de detection d'appui long, pas specifique a une touche.
; bit 03CH (octet 0x27.4): Non identifie avec certitude - usage ponctuel.
; bit 03DH (octet 0x27.5): Non identifie avec certitude - usage ponctuel (ne pas confondre
;     avec le marqueur interne 0x3D utilise dans le flux touche de L13BF, qui est une
;     VALEUR transportee dans A/R3, pas ce bit-ci).
; bit 03EH (octet 0x27.6): Dans le contexte CLE/MICA (L061E/L065D): positionne par les
;     deux routines de pilotage MN14 (selection de cle et effacement) - role precis
;     incertain, possiblement 'une action MN14 vient d'etre executee' (PARTIEL).
; bit 03FH (octet 0x27.7): Dans le contexte CLE/MICA (L13BF/L141F): garde 'action deja
;     executee pour ce passage d'ecran, ne pas repeter' (CONFIRME dans ce contexte).
; bit 040H (octet 0x28.0): Non identifie avec certitude - usage ponctuel.
; bit 041H (octet 0x28.1): Non identifie avec certitude - usage ponctuel.
; bit 042H (octet 0x28.2): PLL: 'ECHEC DE VERROUILLAGE apres 8 tentatives' (CONFIRME, cf.
;     L5492/L5496).
; bit 043H (octet 0x28.3): PLL: 'echec de verrouillage confirme sur 2 verifications
;     consecutives' (CONFIRME, cf. L541E/L542D - evite les fausses alertes ponctuelles).
; bit 044H (octet 0x28.4): Non identifie avec certitude - usage ponctuel.
; bit 045H (octet 0x28.5): Etat du signal ALT_T (PARTIEL, bascule en L53A1/L53A4).
; bit 046H (octet 0x28.6): ETAT PERSISTANT PORTEUSE/SQUELCH (DP) (CONFIRME): bascule (CPL)
;     uniquement sur changement reel d'etat de DP (Port7 bit3 MN13), pilote directement
;     L5931 (ouverture squelch + volume si actif, cf. note complete L5931/L5948).
; bit 047H (octet 0x28.7): ETAT EM (emission en cours) (CONFIRME): utilise par L536E pour
;     declencher la coupure/restauration de l'audio recepteur pendant l'emission
;     (L54AA/L5977).
; bit 048H (octet 0x29.0): PLL: 'alerte de verrouillage deja signalee' (PARTIEL, cf. L542D
;     - evite de re-signaler en boucle).
; bit 049H (octet 0x29.1): Non identifie avec certitude - usage ponctuel.
; bit 04AH (octet 0x29.2): Non identifie avec certitude - usage ponctuel.
; bit 04BH (octet 0x29.3): Non identifie avec certitude - flag d'ecran generique.
; bit 04CH (octet 0x29.4): Non identifie avec certitude - usage ponctuel.
; bit 04DH (octet 0x29.5): Non identifie avec certitude - flag de garde generique (teste
;     avant plusieurs LJMP L4Bxx/actions audio).
; bit 04EH (octet 0x29.6): Non identifie avec certitude - usage ponctuel (a ne pas
;     confondre avec l'OCTET 04EH, cf. section octets ci-dessous).
; bit 04FH (octet 0x29.7): Non identifie avec certitude - usage ponctuel.
; bit 050H (octet 0x2A.0): Flag de garde commun aux 6 routines de tonalite ALSIG
;     (L4541/L4564/L4587/L459D/L45B3): 'JB 050H,...' semble empecher le declenchement si
;     deja actif/en cours (PARTIEL, coherent avec un mecanisme anti-repetition).
; bit 051H (octet 0x2A.1): Non identifie avec certitude - usage ponctuel.
; bit 052H (octet 0x2A.2): Non identifie avec certitude - usage ponctuel (vu associe a des
;     compteurs de duree).
; bit 053H (octet 0x2A.3): Lie a la limitation de duree de communication (PARTIEL): charge
;     depuis l'EPROM 0x0478 (duree de communication) dans certains contextes (cf. L4667).
; bit 054H (octet 0x2A.4): Non identifie avec certitude - usage ponctuel (compteur/duree).
; bit 055H (octet 0x2A.5): Reutilise a plusieurs endroits (PARTIEL): (1) etat des touches
;     STANDARD 0x29/0x2A (L37C9/L37F3, oppose a 058H) ; (2) gate l'application du volume
;     dans L5948 (squelch+volume). Possible que ce soit le MEME flag partage entre ces
;     deux fonctions ou une coincidence de reutilisation - NON TRANCHE.
; bit 056H (octet 0x2A.6): Non identifie avec certitude - usage ponctuel (vu associe a des
;     constantes de temporisation 0xC8).
; bit 057H (octet 0x2A.7): ETAT 'audio recepteur coupe pour emission' (CONFIRME, cf.
;     L536E/L54AA/L5977 - pose quand la coupure est active, efface a la restauration).
; bit 058H (octet 0x2B.0): Etat des touches STANDARD 0x29/0x2A (CONFIRME dans ce contexte,
;     cf. L37E2) - oppose a 055H.
; bit 059H (octet 0x2B.1): Non identifie avec certitude - usage ponctuel.
; bit 05AH (octet 0x2B.2): FLAG TYPE D'ORGANE 'MINI10' (CONFIRME - L'UN DES FLAGS LES PLUS
;     IMPORTANTS DU PROGRAMME): 1=organe MINI10 connecte, 0=SC20/STANDARD/autre.
;     Positionne une seule fois au boot (cf. L0026/L00D1) a partir du nibble haut de
;     l'octet EPROM 0x0464, puis consulte dans une tres grande partie du programme
;     (affichage, dispatch touches, etc.).
; bit 05BH (octet 0x2B.3): Non identifie avec certitude - usage ponctuel (vu associe a des
;     constantes de temporisation 0xDC).
; bit 05CH (octet 0x2B.4): COMPTEUR DE DUREE D'AFFICHAGE/MAINTIEN DE TOUCHE (CONFIRME):
;     reutilise pour la touche APPEL (affichage version) et la touche CLE (MICA) -
;     decompte la duree d'affichage temporaire d'un ecran special.
; bit 05DH (octet 0x2B.5): Non identifie avec certitude - usage ponctuel.
; bit 05EH (octet 0x2B.6): Non identifie avec certitude - usage ponctuel.
; bit 060H (octet 0x2C.0): CONFIRME - drapeau 'afficher le caractere (1) / afficher
;     un espace (0)' utilise par les routines d'affichage MINI10 (L5213/L5339) - PARTIE
;     du mecanisme de clignotement partiel du VFD (cf. note complete a L4EB9 pour
;     l'oscillateur SC20 equivalent). A distinguer de l'OCTET 060H (constante de
;     duree ALSIG, section octets) - meme piege bit/octet que 01FH/04EH/057H.
; bit 061H (octet 0x2C.1): Non identifie avec certitude en tant que BIT (a distinguer de
;     l'OCTET 061H, constante de duree ALSIG).
; bit 062H (octet 0x2C.2): Non identifie avec certitude - usage ponctuel.
; bit 063H (octet 0x2C.3): Non identifie avec certitude - usage ponctuel.
; bit 064H (octet 0x2C.4): Non identifie avec certitude en tant que BIT (a distinguer de
;     l'OCTET 064H, sous-etat d'ecran, cf. section octets).
; bit 065H (octet 0x2C.5): Non identifie avec certitude en tant que BIT (a distinguer de
;     l'OCTET 065H, numero d'ecran principal).
; bit 066H (octet 0x2C.6): Non identifie avec certitude - usage ponctuel.
; bit 067H (octet 0x2C.7): FLAG D'INHIBITION GENERIQUE (PARTIEL): semble bloquer certaines
;     notifications/actions dans plusieurs contextes (DP, cascade touches 064H) - fonction
;     exacte non confirmee.
; bit 068H (octet 0x2D.0): Non identifie avec certitude - usage ponctuel.
; bit 069H (octet 0x2D.1): Lie a la validation de parite UART (PARTIEL, JBC 069H en
;     L4CFD).
; bit 06AH (octet 0x2D.2): Non identifie avec certitude - usage ponctuel.
; bit 06BH (octet 0x2D.3): Non identifie avec certitude - usage ponctuel.
; bit 06CH (octet 0x2D.4): Non identifie avec certitude - usage ponctuel.
; bit 06DH (octet 0x2D.5): Lie au signal ALT_T (PARTIEL, teste conjointement a DP/EM dans
;     plusieurs ecrans).
; bit 06EH (octet 0x2D.6): Non identifie avec certitude - usage ponctuel.
; bit 06FH (octet 0x2D.7): Non identifie avec certitude - usage ponctuel.
; bit 070H (octet 0x2E.0): Non identifie avec certitude - usage ponctuel.
; bit 071H (octet 0x2E.1): Non identifie avec certitude - usage ponctuel.
; bit 072H (octet 0x2E.2): Non identifie avec certitude - usage ponctuel.
; bit 073H (octet 0x2E.3): Non identifie avec certitude - usage ponctuel.
; bit 074H (octet 0x2E.4): Non identifie avec certitude - usage ponctuel.
; bit 075H (octet 0x2E.5): Non identifie avec certitude - usage ponctuel.
;
; ---------------------------------------------------------------------
; TABLE DES OCTETS (RAM generale 0x30H-0x7DH utilisee, notation 'XXXH')
; ---------------------------------------------------------------------
; octet 042H: Non identifie avec certitude - usage ponctuel (compteur de retentatives PLL,
;     R2 local plutot que cet octet - a verifier).
; octet 043H: Non identifie avec certitude - usage ponctuel.
; octet 04AH: 'NUMERO DE MODE' pour l'affichage/tonalite (PARTIEL, CONFIRME
;     PARTIELLEMENT): utilise comme selecteur dans plusieurs dispatchs d'ecran/tonalite
;     (valeurs observees: 0x00,0x04,0x06,0x0A,0x0C,0x0D,0x11 etc.) - table de
;     correspondance complete non etablie.
; octet 04BH: Non identifie avec certitude - usage ponctuel (compteur/flag associe a
;     038H).
; octet 04CH: DRAPEAU D'ALTERNANCE DE L'OSCILLATEUR DE CLIGNOTEMENT (CONFIRME,
;     cf. L4EB9): bascule entre les 2 phases du clignotement (efface/reaffiche) a
;     chaque declenchement du temporisateur associe (octet 057H).
; octet 04DH: Non identifie avec certitude - usage ponctuel.
; octet 04EH: PARAMETRE DE DUREE POUR LA TONALITE ALSIG (CONFIRME): copie de l'octet 060H,
;     transmis a L5964 pour piloter la duree du signal sonore (cf. note complete L5964 et
;     les 6 routines de tonalite).
; octet 04FH: Non identifie avec certitude - usage ponctuel (compteur, ex: MOV 04FH,#00AH
;     au boot).
; octet 050H: Non identifie avec certitude en tant qu'octet (voir aussi le BIT 050H, flag
;     de garde tonalite, section bits).
; octet 051H: Non identifie avec certitude - usage ponctuel.
; octet 052H: Non identifie avec certitude - usage ponctuel (vu associe a des durees,
;     valeur 0x14 frequente).
; octet 053H: Compteur/duree lie a la limitation de communication (PARTIEL, charge depuis
;     EPROM 0x0478 dans certains contextes).
; octet 054H: Non identifie avec certitude - usage ponctuel.
; octet 055H: Non identifie avec certitude en tant qu'octet (voir BIT 055H, section bits -
;     reutilisation possible).
; octet 056H: CONSTANTE DE TEMPORISATION (PARTIEL): valeur 0xC8 (200) frequemment utilisee
;     en tandem avec 05BH - role precis (delai en dixiemes/centiemes de seconde ?) non
;     confirme.
; octet 057H: COMPTEUR DE L'OSCILLATEUR DE CLIGNOTEMENT PARTIEL DU VFD (CONFIRME,
;     cf. note complete a L4EB9 - repond a une demande explicite de l'utilisateur:
;     'le clignotement partiel du VFD n'est pas gere nativement par l'organe'). Se
;     REARME LUI-MEME a chaque declenchement (contrairement aux autres compteurs
;     de ce type, a usage unique) - ATTENTION, DIFFERENT DU BIT 057H (section bits,
;     etat de coupure audio pendant l'emission) - meme piege bit/octet que 01FH/04EH.
; octet 058H: Non identifie avec certitude en tant qu'octet (voir BIT 058H, section bits).
; octet 059H: Non identifie avec certitude - usage ponctuel.
; octet 05AH: Non identifie avec certitude en tant qu'octet (voir BIT 05AH = flag MINI10,
;     section bits - ceci est l'acces PAR OCTET a la meme adresse RAM, rarement utilise
;     ainsi).
; octet 05BH: CONSTANTE DE TEMPORISATION (PARTIEL): valeur 0xDC (220) frequemment utilisee
;     en tandem avec 056H.
; octet 05CH: Voir BIT 05CH, section bits (compteur de duree d'affichage/maintien) - acces
;     par octet.
; octet 05DH: Non identifie avec certitude - usage ponctuel.
; octet 05EH: Non identifie avec certitude - usage ponctuel.
; octet 05FH: Non identifie avec certitude - usage ponctuel (valeur 0x004 vue a proximite
;     de la verification PLL L541E).
; octet 060H: CONSTANTE DE DUREE (SIGNAL SONORE) POUR LA TONALITE ALSIG (CONFIRME): 1ere
;     des 2 constantes de temporisation des 6 routines de tonalite
;     (L4541=0x32,L4564=0x14,L4587=0x0F,L459D=0x05,L45B3=0x05,L54AA=0x28) - copiee dans
;     04EH puis transmise a L5964.
; octet 061H: CONSTANTE DE DUREE (TEMPS DE PAUSE) POUR LA TONALITE ALSIG (CONFIRME): 2eme
;     des 2 constantes (L4541=0x33,L4564=0x14,L4587=0x0F,L459D=0x05,L45B3=0x05,L54AA=0x14)
;     - role exact (pause) deduit des durees fournies par l'utilisateur, jamais copiee
;     directement dans 04EH (son usage precis dans le cycle ON/OFF reste a confirmer
;     completement).
; octet 062H: Non identifie avec certitude - usage ponctuel.
; octet 063H: Non identifie avec certitude - usage ponctuel.
; octet 064H: SOUS-ETAT/CONTEXTE DE L'ECRAN DE VEILLE (PARTIEL-CONFIRME): variable testee
;     par le dispatcher L0737 (jamais superieure a 0x25 dans tout le programme, verifie
;     exhaustivement) - semble representer un sous-mode ou le dernier evenement traite au
;     sein de l'ecran principal, sans etre le code touche brut.
; octet 065H: NUMERO D'ECRAN PRINCIPAL / ETAT DE LA MACHINE A ETATS (CONFIRME - L'OCTET LE
;     PLUS IMPORTANT DU PROGRAMME): indexe DEUX tables de saut independantes (L06CB et
;     L3C5E) qui pilotent respectivement l'affichage et le traitement des touches pour
;     l'ecran courant. Valeurs identifiees: 0=ecran principal, 0x1B=maintien touche CLE,
;     0x1C=post-effacement MICA, et bien d'autres non cataloguees ici.
; octet 066H: Non identifie avec certitude - usage ponctuel.
; octet 067H: Voir BIT 067H, section bits (flag d'inhibition) - acces par octet egalement
;     observe.
; octet 068H: Non identifie avec certitude - usage ponctuel.
; octet 069H: Non identifie avec certitude - usage ponctuel.
; octet 06AH: Non identifie avec certitude - usage ponctuel.
; octet 06BH: Non identifie avec certitude - usage ponctuel.
; octet 06CH: Non identifie avec certitude - usage ponctuel.
; octet 06EH: Non identifie avec certitude - usage ponctuel (lu depuis 07AH pour
;     comparaison dans le mecanisme d'identification d'organe, cf. L56B3 - valeur 0x6E
;     utilisee comme octet de synchronisation attendu).
; octet 070H: Non identifie avec certitude en tant qu'octet 8031 - CORRESPOND AUSSI a une
;     ADRESSE VFD cote SC20 (position d'affichage, cf. tables de conversion RAM<->position
;     deja identifiees) - ne pas confondre les deux espaces.
; octet 071H: Idem 070H: existe a la fois comme adresse RAM 8031 potentielle et comme code
;     de position VFD SC20 (cf. tables RAM<->position deja identifiees).
; octet 072H: TAMPON D'AFFICHAGE VFD - POSITION 1 (GAUCHE) (CONFIRME): fait partie du
;     tampon 072H-079H (8 caracteres), rempli en ordre naturel gauche-a-droite avant
;     transmission a l'organe d'exploitation (cf. L3991, L4B07, etc. - mecanisme
;     totalement documente).
; octet 073H: TAMPON D'AFFICHAGE VFD - POSITION 2 (CONFIRME, cf. 072H).
; octet 074H: TAMPON D'AFFICHAGE VFD - POSITION 3 (CONFIRME, cf. 072H).
; octet 075H: TAMPON D'AFFICHAGE VFD - POSITION 4 (CONFIRME, cf. 072H).
; octet 076H: TAMPON D'AFFICHAGE VFD - POSITION 5 (CONFIRME, cf. 072H).
; octet 077H: TAMPON D'AFFICHAGE VFD - POSITION 6 (CONFIRME, cf. 072H).
; octet 078H: TAMPON D'AFFICHAGE VFD - POSITION 7 (CONFIRME, cf. 072H).
; octet 079H: TAMPON D'AFFICHAGE VFD - POSITION 8 (DROITE) (CONFIRME, cf. 072H).
; octet 07AH: DERNIER OCTET UART VALIDE RECU ET ECHO (CONFIRME): mis a jour par L4CFD
;     (validation de parite), consulte notamment par le mecanisme d'identification
;     d'organe en L56B3.
; octet 07BH: DERNIER CODE TOUCHE TRAITE (PERSISTANT) (CONFIRME): stocke par le decodeur
;     clavier generique (L5724: MOV 07BH,R3), relu par de nombreux dispatchers d'ecran
;     (L3C85 et suite) pour identifier la touche en cours de traitement.
; octet 07CH: Non identifie avec certitude - usage ponctuel (vu associe au calcul de
;     tonalite 5-tons de groupe, EPROM 0x0474).
; octet 07DH: Non identifie avec certitude - usage ponctuel.
;
; NB: cette table sera completee au fil des prochaines analyses. Les
; entrees 'non identifie avec certitude' sont volontairement laissees
; ouvertes plutot que de presenter une interpretation non verifiee.
; =====================================================================
;
	ORG	00000H
;
;
;
; >>> VECTEUR RESET (0x0000). Saute directement vers L0026 (init boot),
;     au-dela de la zone des vecteurs d'interruption (voir la carte complete
;     des vecteurs ci-dessous: seuls TIMER0, TIMER1(baud rate silencieux) et
;     le PORT SERIE sont utilises dans ce firmware - /INT0 et /INT1 ne le
;     sont jamais, cf. IE=#092H en L026F).
;
L0000:	LJMP	L0026
;
;
; >>> VECTEUR INTERRUPTION EXTERNE 0 /INT0 (0x0003) - INUTILISEE (jamais
;     activee: IE.EX0=0, cf. config boot en L026F, IE=#092H). 3 NOP puis le
;     reste de ce slot de 8 octets (0x0006-0x000A) est reutilise pour loger
;     la constante "DGC36" (cf. note a L0006 juste en dessous).
;
	NOP	
	NOP	
	NOP	
;
L0006:	DB	00DH,00CH,010H,003H,006H
;  ^^^ CORRIGE PAR CLAUDE: 5 octets (0x0006-0x000A), loges dans le trou
;  inutilise du vecteur INT0 (jamais active dans ce firmware), mal
;  decodes en instructions fictives (INC R5/INC R4/JBC) par DIS8051.
;  Confirme par l'utilisateur et par L3991 (MOV DPTR,#L0006 puis 5x
;  MOVC A,@A+DPTR) : ce sont les caracteres VFD D,G,C,3,6 (table de
;  caracteres SC20, doc reference) formant "DGC36", affiche au demarrage
;  sur l'organe SC20 (saute si MINI10, cf. JB 05AH en L3991).
;
; >>> VECTEUR TIMER 0 (0x000B) - UTILISE (IE.ET0=1). Sert de tick periodique
;     (~200us, TH0=TL0=9CH mode 2 auto-reload, cf. note complete a L026F)
;     pilotant notamment le buzzer/ALSIG (P3.2) - cf. note complete a L59EF.
;
	LJMP	L59EF
;
	NOP	
	NOP	
	NOP	
;
L0011:	NOP	
	NOP	
;
; >>> VECTEUR INTERRUPTION EXTERNE 1 /INT1 (0x0013) - INUTILISEE (IE.EX1=0,
;     cf. note complete a L026F). 8 NOP, aucun code.
;
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
;
; >>> VECTEUR TIMER 1 (0x001B) - INUTILISE EN INTERRUPTION (IE.ET1=0) mais le
;     timer TOURNE (TCON.TR1=1): utilise en silence comme GENERATEUR DE BAUD
;     RATE pour l'UART (mode 2 auto-reload, TH1=TL1=0E7H, SMOD=1 via
;     PCON=#080H) - cf. note complete a L026F. 8 NOP, aucun code d'interruption.
;
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
;
; >>> VECTEUR PORT SERIE / UART (0x0023) - UTILISE (IE.ES=1, priorite haute
;     IP.PS=1, cf. note complete a L026F). Gere la reception/emission UART vers
;     l'organe d'exploitation SC20/MINI10 - cf. note complete a L59B8.
;
	LJMP	L59B8
;
;
;
; >>> DEBUT DU BOOT: lit le type d'organe (0x0464), initialise les extenseurs
;     MN13 (Port4/5/6) puis MN14 (Port4/6/7 si L160A renvoie non-nul), enchaine
;     vers L006C.
;
;
; >>> CONFIRMATION (recherche STN_V/emission): ce tout premier test au boot
;     ('MOV P1,#02EH;LCALL L03BF;JB ACC.0,...') lit en fait le PORT6 de MN13 et
;     teste son bit0 = TEST[?] (ATR.txt: 'positionne le logiciel en mode test si
;     signal au niveau bas'). CONFIRME: ce bit EST bien lu/teste dans le code
;     (repond a une interrogation restee ouverte lors d'une analyse precedente) -
;     voir aussi L19BF pour un autre site de lecture de ce meme Port6.
;
L0026:	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	MOV	B,A
	MOV	P1,#02EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#2EH -> bits actifs(1): RSTM2,ACKM,DATA,P15 | [si reellement pulsee -> commande extenseur 0x2E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LCALL	L03BF		; Appel avec P1 deja charge -> commande extenseur 0x2E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]
	JB	ACC.0,L0037
	SETB	0D1H
;
L0037:	MOV	P1,#04EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#4EH -> bits actifs(1): RSTM2,ACKM,DATA,P16 | [si reellement pulsee -> commande extenseur 0x4E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	MOV	A,#01EH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x1E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port5 [BF1[S](volume bit2),BF2[S](volume bit1),BF3[S](volume bit0)]
	MOV	A,#04EH
	MOV	P1,#06EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#6EH -> bits actifs(1): RSTM2,ACKM,DATA,P15,P16 | [si reellement pulsee -> commande extenseur 0x6E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x4E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]
	MOV	A,#00EH
	MOV	P1,#05EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#5EH -> bits actifs(1): RSTM2,ACKM,DATA,P14,P16 | [si reellement pulsee -> commande extenseur 0x5E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port5 [BF1[S](volume bit2),BF2[S](volume bit1),BF3[S](volume bit0)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x0E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]
	MOV	A,#0DFH
	MOV	P1,#04FH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#4FH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P16 | [si reellement pulsee -> commande extenseur 0x4F -> puce=MN14 (CS=1) | instruction=ECRITURE | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xDF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port5 [TCS_DEC,XEAS,XURG,ACQ(ETDP-ACQ)]
	LCALL	L160A
	JZ	L006C
	MOV	P1,#06FH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#6FH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P16 | [si reellement pulsee -> commande extenseur 0x6F -> puce=MN14 (CS=1) | instruction=ECRITURE | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	MOV	A,#0AFH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xAF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]
	MOV	P1,#07FH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#7FH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14,P15,P16 | [si reellement pulsee -> commande extenseur 0x7F -> puce=MN14 (CS=1) | instruction=ECRITURE | port=Port7 [FX1,FX2,FX3,FX4]]
	MOV	A,#00FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x0F -> puce=MN14 (CS=1) | instruction=LECTURE | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]
;
;
; >>> Reset MN7 (pulse RSTM2/P1.1), efface la RAM interne 0x00-0x7E (bank de
;     registres + zone de travail), amorce le compteur de rafraichissement
;     buzzer (018H=1), puis enchaine sur la BOUCLE DE CHECKSUM de l'EPROM de
;     personnalisation MN4 (L0081).
;
L006C:	CLR	P1.1		; P1.1 = RSTM2
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	SETB	P1.1		; P1.1 = RSTM2
	MOV	R0,#07FH
;
L0077:	MOV	@R0,#000H
	DJNZ	R0,L0077
	MOV	018H,#001H
	MOV	DPTR,#L0000
;
;
; >>> CONFIRME PAR L'UTILISATEUR: boucle de CALCUL DE CHECKSUM des 4096 premiers
;     octets de l'EPROM de personnalisation MN4 (27C32 complet, DPTR=0x0000 a
;     0x0FFF). Pour chaque octet: XOR avec l'adresse basse (DPL) puis ADD/ADDC
;     dans R6(poids faible)/R7(poids fort) - un checksum additif 16 bits
;     dependant a la fois du contenu ET de la position (detecte les permutations
;     d'octets, pas seulement les valeurs). Objectif (confirme par l'utilisateur):
;     comparer ce checksum a une copie conservee en RAM (MN5) lors de
;     l'initialisation precedente, pour savoir si l'EPROM de personnalisation doit
;     etre retraitee en integralite (mise a jour de la RAM) ou non - voir suite a
;     L00D1/L00EB.
;
L0081:	MOVX	A,@DPTR		; DPTR=0x0000, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	XRL	A,DPL
	ADD	A,R6
	MOV	R6,A
	INC	DPTR
	MOVX	A,@DPTR		; DPTR=0x0001, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	XRL	A,DPL
	ADDC	A,R7
	MOV	R7,A
	INC	DPTR
	MOV	A,DPH
	CJNE	A,#010H,L0081
	MOV	R1,#000H
;
L0094:	DJNZ	R2,L0094
	DJNZ	R1,L0094
	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.4,L00A1		; EPROM perso 0x0469 -> d4: extinction automatique apres 8h d'utilisation
	SETB	03CH
;
L00A1:	LCALL	L046E
	MOV	019H,#005H
	MOV	DPTR,#L223B
	MOV	A,#00AH
	MOVX	A,@DPTR		; DPTR=0x223B, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23B
	MOV	DPTR,#L223C
	MOV	A,#00AH
	MOVX	A,@DPTR		; DPTR=0x223C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23C
	MOV	DPTR,#L223D
	MOV	A,#00AH
	MOVX	A,@DPTR		; DPTR=0x223D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23D
	MOV	DPTR,#L223E
	MOV	A,#01EH
	SWAP	A
	MOVX	A,@DPTR		; DPTR=0x223E, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23E
	INC	DPTR
	SWAP	A
	MOVX	@DPTR,A		; DPTR=0x223F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23F
	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	MOV	R3,A
	SETB	05AH
	JB	ACC.4,L00D1
	CLR	05AH
	SETB	05BH
;
;
; >>> CONFIRME: DECISION DE RETRAITEMENT DE L'EPROM DE PERSONNALISATION.
;     Le bit d6 de l'octet 0x046A permet de FORCER le retraitement complet (si
;     actif, saute directement a L0108 sans comparer les checksums). Sinon: lit
;     les 2 octets du checksum PRECEDENT stockes en RAM a 0x2242/0x2243 (via
;     L05F6, cf. note dediee) et les compare au checksum FRAICHEMENT CALCULE.
;     ATTENTION LECTURE: 'CJNE A,007H' et 'CJNE A,006H' comparent ici a des
;     ADRESSES DIRECTES (007H=R7, 006H=R6 de la banque de registres 0), PAS a des
;     valeurs immediates 7/6 (qui auraient necessite la notation #007H/#006H) -
;     il s'agit donc bien d'une comparaison octet-a-octet entre le checksum
;     sauvegarde (lu depuis la RAM) et R7:R6 (checksum tout juste recalcule).
;     Si les deux octets correspondent -> LJMP L0108 (RAM deja a jour, retraitement
;     complet inutile). Sinon -> L00EB (EPROM modifiee ou 1ere initialisation).
;
L00D1:	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.6,L0108		; EPROM perso 0x046A -> d6: initialisation de la RAM par checksum de l'EPROM perso (32k) - cf. L0081/L00D1/L00EB
	MOV	DPTR,#L2242
	LCALL	L05F6
	CJNE	A,007H,L00EB
	INC	DPTR
	LCALL	L05F6
	CJNE	A,006H,L00EB
	LJMP	L0108
;
;
;
; >>> CONFIRME: RETRAITEMENT COMPLET DE L'EPROM DE PERSONNALISATION (le checksum a
;     change depuis le dernier boot, ou 1ere mise sous tension). Remplit la zone
;     RAM 0x2000-0x2023 (36 nibbles utiles, R/P=1 = MN5) avec le marqueur 0x0B
;     (invalidation/reset des donnees derivees en cache), PUIS enregistre le
;     NOUVEAU checksum (R7:R6) dans la RAM a 0x2242/0x2243 (via L0603, cf. note
;     dediee) pour que la comparaison du PROCHAIN boot s'appuie sur cette valeur,
;     et efface un compteur/flag a 0x2258.
;
L00EB:	MOV	DPTR,#L2000
	MOV	A,#00BH
;
L00F0:	MOVX	@DPTR,A		; DPTR=0x2000, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=0) = 0x000
	INC	DPTR
	MOV	R0,DPH
	CJNE	R0,#024H,L00F0
	MOV	DPTR,#L2242
	MOV	A,R7
	LCALL	L0603
	INC	DPTR
	MOV	A,R6
	LCALL	L0603
	MOV	DPTR,#L2258
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
;
;
; >>> MISE A JOUR (EpromPersonnalisation.txt + analyse de code): teste le bit d6 de l'octet
;     NON DOCUMENTE 0x047E. Si actif -> L0112 (boucle complete de traitement des 10 lignes
;     telephoniques + lignes preprogrammees). Si inactif -> L010F/L0179 (chemin simplifie,
;     une seule ligne lue directement depuis 0475). Cf. note complete a L0112.
;
L0108:	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.6,L0112		; EPROM perso 0x047E -> d6 (INFERE du code, non documente): active la boucle de boot L0112 qui traite les 10 lignes telephoniques (0475-0477) et les 'lignes preprogrammees' (0550+) - si d6=0, chemin simplifie L010F/L0179 (une seule ligne lue, 0475 seul).
;
L010F:	LJMP	L0179
;
;
;
; >>> BOUCLE DE BOOT: traite les 10 'lignes' (numeros 0 a 9) definies par les octets 0475
;     (lignes 0-3), 0476 (lignes 4-7) et 0477 (lignes 8-9) - EpromPersonnalisation.txt.
;     Pour chaque ligne: extrait son code 2 bits (00=interdite,01=radio,10=tel.sans
;     prefixe,11=tel.avec prefixe), le copie dans une table RAM (base ~0x2000), puis
;     traite les 'lignes preprogrammees' associees (0550-068F, cf. octet 046C bit4 qui
;     selectionne entre 2 tailles de bloc: 0x1C ou 0x14+0x05 octets) via L04C4. Seulement
;     execute si le bit 047E.6 est actif (cf. note a L0108) - sinon variante simplifiee
;     en L0179 qui ne traite que la ligne encodee dans l'octet 0475 seul.
;
;
; >>> BOUCLE DE COPIE DE LA TABLE 'LIGNES PROGRAMMEES' AU BOOT (10 lignes de 32
;     octets, EPROM 0x0550-0x074F, CONFIRME PAR L'UTILISATEUR - documentation
;     officielle 'Lignes Programmees'). Traite CHAQUE ligne (R3=10 iterations)
;     et copie son contenu vers la RAM externe (cf. note complete a L0150 pour
;     la difference de traitement CRITIQUE selon l'option EPROM 046C bit d4
;     '100000 N3').
;
L0112:	MOV	R3,#00AH
	MOV	R4,#000H
;
L0116:	MOV	DPTR,#L0475
	CJNE	R3,#007H,L011C		; CORRECTIF: R3 est ici le compteur de boucle du chargement des lignes telephoniques (EpromPersonnalisation.txt 0475-0477, cf. note complete a L0112) - PAS un code touche UART, malgre la coincidence numerique avec la touche SC20 '-'.
;
L011C:	JNC	L0123
	INC	DPTR
	CJNE	R3,#003H,L0122		; CORRECTIF: meme compteur de boucle qu'en L011C ci-dessus - PAS un code touche UART, malgre la coincidence numerique avec la touche SC20 '3'.
;
L0122:	INC	DPTR
;
L0123:	MOVX	A,@DPTR		; DPTR=0x0477, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, LECTURE SEULE). lignes telephoniques 8-9 (EpromPersonnalisation.txt) (adresse EXACTE recuperee suite a la correction du suivi DPTR)
	ANL	A,#003H
	PUSH	ACC
	MOV	DPTR,#L2000
	MOV	A,R4
	LCALL	L03D3
	POP	ACC
	MOVX	@DPTR,A		; DPTR=0x2000 (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	INC	DPTR
	MOV	R1,DPH
	MOV	R0,DPL
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.4,L0150		; EPROM perso 0x046C -> d4=0(actif si 0): programmation '100000'N3 (lien 046F)
	MOV	R2,#01CH
	MOV	DPTR,#L0550
	MOV	A,R4
	LCALL	L03D3
	LCALL	L04C4
	INC	R4
	DJNZ	R3,L0116
	LJMP	L01B3
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR (bug identifie avec precision par comparaison
;     de 2 dumps EPROM) - COPIE DE LA LIGNE QUAND L'OPTION '100000 N3' EST
;     ACTIVE (EPROM 046C bit d4=0): contrairement au cas inactif (copie en 1
;     bloc de 28 octets depuis 0x0550, incluant le champ Canal), ICI LA COPIE
;     EST SCINDEE EN DEUX: 20 octets (Prefixe+Telephone+AppelSelectif, 0x0550-
;     0x0563) PUIS SEULEMENT 5 OCTETS DEPUIS 0x0564 (le champ RELAIS ETENDU A 5
;     OCTETS en mode 100000N3, au lieu de 2 en mode normal - conforme a la
;     documentation officielle). CETTE SECONDE COPIE (5 octets a partir de RAM
;     0x2018) ECRIT SA DERNIERE VALEUR EXACTEMENT EN RAM 0x2018+4=0x201C - QUI
;     EST L'ADRESSE LUE PAR L4C31 POUR AFFICHER LE PREMIER CARACTERE DU CANAL
;     (cf. note complete a L4C31)! LE CHAMP CANAL N'EST DONC JAMAIS COPIE DANS
;     CE MODE - le premier caractere affiche est en realite le DERNIER OCTET DU
;     CHAMP RELAIS ETENDU, qui peut legitimement valoir 0xFF si l'utilisateur
;     ne l'a pas renseigne (autorise par la documentation) - ce qui, une fois
;     masque a 4 bits (ANL #0FH dans L4C31), donne EXACTEMENT 0x0F : LA VALEUR
;     OBSERVEE PAR L'UTILISATEUR SUR L'EQUIPEMENT REEL. Bug de recouvrement
;     memoire RAM confirme entre le champ Relais etendu et l'affichage du canal.
;
L0150:	MOV	DPTR,#L0550
	MOV	A,R4
	LCALL	L03D3
	MOV	R2,#014H
	LCALL	L04C4
	MOV	DPTR,#L2018
	MOV	A,R4
	LCALL	L03D3
	MOV	R2,#005H
	MOV	R1,DPH
	MOV	R0,DPL
	MOV	DPTR,#L0564
	MOV	A,R4
	LCALL	L03D3
	LCALL	L04C4
	INC	R4
	DJNZ	R3,L0116
	LJMP	L01B3
;
;
;
; >>> VARIANTE DE L0108/L0112 (meme mecanisme de copie de ligne, cf. note
;     complete a L0150 pour le bug 100000N3/Canal - le meme JB ACC.4,L019C
;     reproduit la meme dichotomie de copie 2 blocs vs 1 bloc).
;
L0179:	LCALL	L15F7
	JNZ	L01B3
	MOV	DPTR,#L0475
	MOVX	A,@DPTR		; DEFINITION DES LIGNES TELEPHONIQUES 0-3 (EpromPersonnalisation.txt, 2 bits/ligne: 00=interdite,01=radio,10=tel.sans prefixe,11=tel.avec prefixe). Absent/non pertinent si organe=MINI10. Cf. boucle de traitement au boot en L0112 (10 lignes, gatee par 047E.6). | DPTR=0x0475, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#003H
	MOV	DPTR,#L2000
	MOVX	@DPTR,A		; DPTR=0x2000, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=0) = 0x000
	INC	DPTR
	MOV	R1,DPH
	MOV	R0,DPL
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.4,L019C		; EPROM perso 0x046C -> d4=0(actif si 0): programmation '100000'N3 (lien 046F)
	MOV	R2,#01CH
	MOV	DPTR,#L0550
	LJMP	L01B0
;
;
L019C:	MOV	DPTR,#L0550
	MOV	R2,#014H
	LCALL	L04C4
	MOV	DPTR,#L2018
	MOV	R2,#005H
	MOV	R1,DPH
	MOV	R0,DPL
	MOV	DPTR,#L0564
;
L01B0:	LCALL	L04C4
;
L01B3:	MOV	DPTR,#L2161
	MOV	R1,DPH
	MOV	R0,DPL
	MOV	DPTR,#L047E
	MOV	R2,#005H
	LCALL	L04C4
	MOV	DPTR,#L2100
	MOVX	A,@DPTR		; DPTR=0x2100, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x100
	ANL	A,#00FH
	CJNE	A,#00BH,L01E3
	CLR	A
	MOV	DPTR,#L21B9
	MOVX	@DPTR,A		; DPTR=0x21B9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B9
	MOV	DPTR,#L2020
	MOV	R2,#009H
;
L01D5:	CLR	A
	MOVX	@DPTR,A		; DPTR=0x2020, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=0) = 0x020
	MOV	A,#020H
	ADD	A,DPL
	MOV	DPL,A
	JNC	L01E1
	INC	DPH
;
L01E1:	DJNZ	R2,L01D5
;
L01E3:	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	CJNE	A,#006H,L01EC
;
L01EC:	JC	L01F0
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
;
L01F0:	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L0202		; EPROM perso 0x0469 -> d7: autorise la programmation du code N1 (code stocke a 0489)
	MOV	DPTR,#L21F3
	MOVX	A,@DPTR		; DPTR=0x21F3, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F3
	ANL	A,#00FH
	CJNE	A,#00AH,L0200
;
L0200:	JC	L0205
;
L0202:	LCALL	L0478
;
L0205:	MOV	DPTR,#L218C
	MOVX	A,@DPTR		; DPTR=0x218C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18C
	ANL	A,#00FH
	CJNE	A,#007H,L020E
;
L020E:	JC	L0213
	MOV	A,#004H
	MOVX	@DPTR,A		; DPTR=0x218C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18C. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
;
L0213:	JB	05AH,L0221
	MOV	DPTR,#L218D
	MOVX	A,@DPTR		; DPTR=0x218D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18D
	ANL	A,#00FH
	CJNE	A,#00AH,L021F
;
L021F:	JC	L0222
;
L0221:	CLR	A
;
L0222:	MOV	072H,A
	JB	05AH,L0236
	MOV	DPTR,#L2000
	LCALL	L03D3
	MOVX	A,@DPTR		; DPTR=0x2000 (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	ANL	A,#00FH
	XRL	A,#001H
	JZ	L0236
	SETB	05CH
;
L0236:	MOV	A,072H
	MOV	07CH,A
	LCALL	L0410
	LCALL	L045A
	SETB	02AH
	MOV	07BH,#07FH
	SETB	024H
	MOV	A,R3
	JB	ACC.0,L025A
	MOV	04AH,#00FH
	SETB	01FH
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.6,L025A		; EPROM perso 0x046C -> d6=0(actif si 0): fonction DTMF active, sinon code 5-tons 'GX' remplace le DTMF
	LCALL	L5600
;
L025A:	CLR	A
	MOV	DPTR,#L21E1
	MOVX	@DPTR,A		; DPTR=0x21E1, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1E1
	MOV	DPTR,#L21CA
	MOVX	@DPTR,A		; DPTR=0x21CA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1CA
	MOV	068H,#0FFH
	MOV	DPTR,#L0466
	MOVX	A,@DPTR		; DPTR=0x0466, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.5,L026F
	SETB	054H
;
;
; >>> CONFIGURATION COMPLETE DES TIMERS ET INTERRUPTIONS (execution unique au
;     boot). Decodage exact de chaque registre:
;     TMOD=#022H: Timer1=mode2 (8 bits auto-reload), Timer0=mode2 (8 bits
;       auto-reload). Aucun timer en mode compteur externe (C/T=0 pour les 2).
;     TCON=#050H: TR1=1 (Timer1 DEMARRE), TR0=1 (Timer0 DEMARRE), IE1/IT1/
;       IE0/IT0=0 (sans effet, /INT0 et /INT1 non utilises).
;     SCON=#070H: SM0=0,SM1=1 -> UART MODE 1 (8 bits, baud rate variable via
;       Timer1) ; SM2=1 (verification trame, cf. mecanisme de parite/validite
;       deja identifie dans le decodeur UART) ; REN=1 (reception autorisee).
;     TH1=TL1=#0E7H: valeur de rechargement Timer1 (mode2), utilise comme
;       GENERATEUR DE BAUD RATE UART (cf. note au vecteur TIMER1, 0x001B) -
;       avec PCON.SMOD=1 (voir plus bas) et le quartz 6.0035MHz de MN1
;       (ATR.txt), donne un debit calcule d'env. 1250 bauds (formule standard
;       8051: bauds=(2^SMOD/32)*Fosc/(12*(256-TH1)) - valeur non standard,
;       coherente avec un protocole proprietaire SC20/MINI10 plutot qu'un
;       debit RS232 usuel).
;     TH0=TL0=#09CH: valeur de rechargement Timer0 (mode2), donne un tick
;       periodique de Fosc/(12*(256-156)) = env. 5003 Hz soit ~200us entre
;       deux interruptions Timer0 - cf. vecteur TIMER0 (0x000B) et L59EF
;       (division logicielle de ce tick pour generer ALSIG/buzzer).
;     IE=#092H: EA=1 (interruptions globales activees), ES=1 (SERIE activee),
;       ET0=1 (TIMER0 activee), EX0=EX1=ET1=0 (INT0/INT1/TIMER1 JAMAIS
;       actives en interruption) - confirme exactement la carte des vecteurs
;       deja annotee plus haut dans ce fichier.
;     IP=#010H: PS=1 (le port SERIE recoit la PRIORITE HAUTE sur Timer0) -
;       coherent avec la necessite de ne pas perdre d'octets UART pendant le
;       traitement du tick Timer0.
;     PCON=#080H: SMOD=1 (double debit UART, utilise dans le calcul du baud
;       rate ci-dessus), pas de mode veille/arret (IDL=PD=0).
;
L026F:	MOV	TMOD,#022H
	MOV	TCON,#050H
	MOV	SCON,#070H
	MOV	TH1,#0E7H
	MOV	TL1,#0E7H
	MOV	TH0,#09CH
	MOV	TL0,#09CH
	MOV	IE,#092H
	MOV	IP,#010H
	MOV	PCON,#080H
	MOV	04FH,#00AH
	MOV	DPTR,#L2197
	MOV	A,#000H
	MOVX	@DPTR,A		; DPTR=0x2197, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x197
	SETB	052H
	SETB	055H
	SETB	06DH
	MOV	DPTR,#L0483
	MOVX	A,@DPTR		; DPTR=0x0483, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	DPTR,#L2191
	MOVX	@DPTR,A		; DPTR=0x2191, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x191
	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JNB	ACC.0,L02AE
	LCALL	L4618
;
L02AE:	JNB	0D1H,L02B4
	LCALL	L5948
;
L02B4:	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.0,L02BE		; EPROM perso 0x046A -> d0: 0=pas d'option DIVA (d3-d1 doivent aussi etre a 0 dans ce cas)
	LJMP	L0318
;
;
L02BE:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.3,L0306		; EPROM perso 0x046C -> d3=0(actif si 0): DIVA multi-cellules, scrutation par groupes de lignes (lien table 0800)
	MOV	DPTR,#L0485
	MOVX	A,@DPTR		; DPTR=0x0485, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	INC	A
	MOV	R0,A
	MOV	DPTR,#L21FB
	MOVX	A,@DPTR		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB
	ANL	A,#00FH
	CJNE	A,000H,L02D4
;
L02D4:	JC	L02EB
	MOV	DPTR,#L21FA
	MOVX	A,@DPTR		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
	ANL	A,#00FH
	CJNE	A,000H,L02DF
;
L02DF:	JC	L02E7
	MOV	DPTR,#L21FA
	MOV	A,#001H
	MOVX	@DPTR,A		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
;
L02E7:	MOV	DPTR,#L21FB
	MOVX	@DPTR,A		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB
;
L02EB:	MOV	R4,#001H
	MOV	R3,#010H
	LCALL	L0532
	MOV	R4,#002H
	MOV	R3,#020H
	LCALL	L0532
	MOV	R4,#003H
	MOV	R3,#030H
	LCALL	L0532
	LCALL	L0577
	LJMP	L0318
;
;
L0306:	MOV	DPTR,#L21FA
	MOVX	A,@DPTR		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
	ANL	A,#00FH
	CJNE	A,#00AH,L030F
;
L030F:	JC	L0318
	MOV	A,#000H
	MOVX	@DPTR,A		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x21FC, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FC. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
;
L0318:	MOV	DPTR,#L2248
	MOV	A,#00BH
	MOVX	@DPTR,A		; DPTR=0x2248, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x248
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x2249, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x249
	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L0332
	MOV	DPTR,#L224A
	MOV	A,#000H
	MOVX	@DPTR,A		; DPTR=0x224A, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24A
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x224B, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24B
	LJMP	L033C
;
;
L0332:	MOV	DPTR,#L224A
	MOV	A,#001H
	MOVX	@DPTR,A		; DPTR=0x224A, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24A
	MOV	A,#005H
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x224B, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24B
;
L033C:	MOV	DPTR,#L224C
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x224C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24C
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x224D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24D
	MOV	DPTR,#L224F
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x224F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24F
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x2250, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x250
	LJMP	L585F
;
;
L034F:	MOV	R0,#02FH
	CJNE	@R0,#003H,L0357
	RET	
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR ET RECOUPE PAR L'ANALYSE: point d'entree ENQUEUE
;     d'un EVENEMENT vers la file circulaire de 3 emplacements basee en RAM interne
;     a 0x2F (0x2F=compteur, 0x30-0x32=emplacements). Fixe R0=0x2F puis tombe dans
;     L0357. Le contenu enfile n'est PAS un octet UART brut mais un CODE
;     D'EVENEMENT/ETAT (0-7...) consomme par le distributeur L4A16 (voir plus bas)
;     qui aiguille vers l'un des sous-programmes d'affichage/LED SC20 (L4A95,
;     L4B07, L4B39... - table de saut en L4A2A). SETB 01EH (L0357) positionne le
;     drapeau que la boucle principale teste (JBC 01EH,L58B2 en L585F) pour savoir
;     qu'un evenement d'affichage est en attente.
;
L0355:	MOV	R0,#02FH
;
;
; >>> Suite de L0355 (voir note complete): verifie si la file (3 emplacements a
;     0x2F) est deja pleine (compteur=3) et la reinitialise le cas echeant (perte
;     des plus anciens evenements non traites au profit du plus recent), puis
;     rejoint L036E pour l'ecriture effective.
;
L0357:	SETB	01EH
	PUSH	000H
	PUSH	ACC
	CJNE	@R0,#003H,L036E
	MOV	@R0,#000H
	LJMP	L036E
;
;
;
; >>> AUTRE POINT D'ENTREE DE LA MEME FONCTION D'ENFILAGE (voir L0355/L036E), mais
;     SANS fixer R0 : le registre R0 doit deja pointer sur la base de la file
;     cible au moment de l'appel (convention appelant/appele). Cette entree est
;     utilisee ~70 fois dans tout le fichier, quasi exclusivement pour ENFILER LES
;     OCTETS BRUTS destines a l'organe d'exploitation SC20 (codes LED, codes de
;     position VFD, caracteres a afficher, cf. R1 charge juste avant chaque appel).
;     Verifie ici si la file (limite=9 emplacements) est pleine et la reinitialise
;     le cas echeant, comme L0357 le fait pour la file a 3 emplacements.
;
L0365:	PUSH	000H
	PUSH	ACC
	CJNE	@R0,#009H,L036E
	MOV	@R0,#000H
;
;
; >>> Corps commun d'enfilage (L0355 et L0365): incremente le compteur en tete de
;     file (@R0), calcule l'adresse du nouvel emplacement (base+compteur), y
;     ecrit la valeur R1 (l'octet/evenement a enfiler). Cf. L0379 pour le
;     defilement (lecture+decalage) cote consommateur.
;
L036E:	INC	@R0
	MOV	A,@R0
	ADD	A,R0
	MOV	R0,A
	MOV	A,R1
	MOV	@R0,A
	POP	ACC
	POP	000H
	RET	
;
;
;
; >>> DEFILE (pop) le plus ancien element d'une file generique (base pointee par
;     R0, format 'compteur puis elements' identique a L036E): renvoie 0xFF si
;     vide, sinon decale tous les elements restants d'un cran (L0385) et renvoie
;     l'element defile dans A. Utilise pour la file de reception SC20 (base
;     0x33, cf. L568F le decodeur de touches), la file de validation de parite
;     (base 0x36, cf. L4CFD), la file d'evenements d'affichage (base 0x2F, cf.
;     L4A16/L51AB) et la file de configuration MN7 (base 0x40, cf. L597C).
;
L0379:	MOV	A,@R0
	JNZ	L037F
	MOV	A,#0FFH
	RET	
;
;
L037F:	DEC	@R0
	MOV	R2,A
	INC	R0
	MOV	A,@R0
	PUSH	ACC
;
L0385:	MOV	A,R0
	MOV	R1,A
	INC	R0
	MOV	A,@R0
	MOV	@R1,A
	DJNZ	R2,L0385
	POP	ACC
	RET	
;
;
L038F:	PUSH	ACC
	PUSH	DPL
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	INC	A
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	ADD	A,DPL
	MOV	DPL,A
	MOV	A,R1
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	POP	DPL
	POP	ACC
	RET	
;
;
L03A3:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	JNZ	L03AB
	MOV	A,#0FFH
	RET	
;
;
L03AB:	MOV	R2,A
	DEC	A
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	INC	DPTR
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	PUSH	ACC
;
L03B2:	INC	DPTR
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	DEC	DPL
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	INC	DPTR
	DJNZ	R2,L03B2
	POP	ACC
	ANL	A,#00FH
	RET	
;
;
;
; >>> FONCTION IDENTIFIEE: L03BF = pulse de lecture vers l'extenseur MN13/MN14 (8243).
;     Flotte P1(4-7)=P20-23, pulse /PROG (P3.5), relit P1, renvoie le quartet lu
;     (SWAP+ANL 0Fh) dans les 4 bits BAS de A.
;
L03BF:	CLR	P3.5		; P3.5 = PROG(T1,vers MN13/MN14)
	ORL	P1,#0F0H		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#F0H -> bits actifs(1): P14,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xF0 -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port7 [STN_V[E](=SYV,PLL lock),ALT_T[E](=ALTT,PTT/alternat),INFO_EM[E](=EM,emission en cours),DP[E](detection porteuse)]]
	MOV	A,P1		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17)
	SWAP	A
	ANL	A,#00FH
	SETB	P3.5		; P3.5 = PROG(T1,vers MN13/MN14)
	RET	
;
;
;
; >>> FONCTION IDENTIFIEE: L03CC = pulse d'ecriture vers l'extenseur MN13/MN14 (8243).
;     Le pulse transmet la valeur de A (MOV P1,A), pas celle d'un eventuel MOV P1,#imm
;     plus ancien (ecrase avant tout pulse). Voir note 'INCOHERENCE POTENTIELLE' a L4700.
;
L03CC:	CLR	P3.5		; P3.5 = PROG(T1,vers MN13/MN14)
	MOV	P1,A		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17)
	SETB	P3.5		; P3.5 = PROG(T1,vers MN13/MN14)
	RET	
;
;
L03D3:	MOV	B,#020H
;
L03D6:	MUL	AB
	ADD	A,DPL
	MOV	DPL,A
	MOV	A,B
	ADDC	A,DPH
	MOV	DPH,A
	RET	
;
	LCALL	L387A
	MOV	R0,#076H
	MOV	A,@R0
	CJNE	R3,#001H,L03EC		; CORRECTIF: R3 n'est pas rechargee depuis un code UART dans ce contexte (juste avant: lecture de la RAM interne @R0=076H, sans rapport) - fonction exacte de ce test non identifiee, PAS un code touche UART malgre la coincidence numerique avec la touche SC20 '*'.
	RET	
;
;
L03EC:	MOV	B,A
	DEC	R0
	MOV	A,@R0
	ADD	A,B
	RET	
;
;
L03F3:	MOV	DPTR,#L2248
	MOVX	A,@DPTR		; DPTR=0x2248, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x248
	ANL	A,#00FH
	MOV	B,#00AH
	MUL	AB
	MOV	B,A
	INC	DPTR
;
L0400:	MOVX	A,@DPTR		; DPTR=0x2249, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x249
	ANL	A,#00FH
	ADD	A,B
	RET	
;
;
L0406:	ACALL	L03F3
	MOV	B,#005H
	MOV	DPTR,#L085E
	SJMP	L03D6
;
L0410:	JB	05AH,L044E
	MOV	R1,A
	MOV	DPTR,#L0473
	MOVX	A,@DPTR		; DPTR=0x0473, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#003H
	MOV	DPTR,#L201C
	JNZ	L0426
	MOV	A,#003H
	MOV	DPTR,#L0568
	MOV	R1,#000H
;
L0426:	MOV	R2,A
	MOV	A,R1
	ACALL	L03D3
;
L042A:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	R1,A
	DEC	DPL
	DJNZ	R2,L0435
	LJMP	L044D
;
;
L0435:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	B,#00AH
	MUL	AB
	ADD	A,R1
	MOV	R1,A
	DEC	DPL
	DJNZ	R2,L0445
	LJMP	L044D
;
;
L0445:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	B,#064H
	MUL	AB
	ADD	A,R1
;
L044D:	RET	
;
;
L044E:	MOV	R2,#003H
	MOV	DPTR,#L055C
	MOV	B,#00DH
	ACALL	L03D6
	SJMP	L042A
;
L045A:	MOV	B,#004H
	MUL	AB
	MOV	DPH,B
	MOV	DPL,A
	MOV	R2,#004H
;
L0465:	MOV	R0,#01BH
;
L0467:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
;
L0468:	MOV	@R0,A
;
L0469:	INC	DPTR
;
L046A:	INC	R0
;
L046B:	DJNZ	R2,L0467
;
L046D:	RET	
;
;
L046E:	JNB	03CH,L0477
	MOV	05DH,#078H
;
L0474:	MOV	05EH,#008H
;
L0477:	RET	
;
;
;
; >>> CONFIRME - CHARGEMENT DU CODE N1 DEPUIS L'EPROM (adresses 0470-0472) VERS
;     LA RAM INTERNE 0x6B-0x6F (tampon lu par L3216 pour la conversion en
;     tonalites 5-tons). Decompresse 2 chiffres BCD par octet (0470,0471) via
;     L0490, puis lit UNIQUEMENT le nibble bas de 0472 pour le 5eme chiffre (le
;     nibble haut de 0472 sert a un autre parametre, sans rapport avec le code N1).
;     VERIFIE avec l'exemple utilisateur: 0470=21h,0471=43h,0472=A5h -> chiffres
;     1,2,3,4,5 (correspondance exacte). Sauvegarde ensuite le resultat dans un
;     cache RAM (0x21F3, cf. L04B9) pour eviter de redecompresser l'EPROM a
;     chaque emission.
;
L0478:	MOV	DPTR,#L0470
;
L047B:	MOV	R0,#06BH
;
L047D:	LCALL	L0490
	INC	DPTR
	LCALL	L0490
;
L0484:	INC	DPTR
;
L0485:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
;
L0486:	ANL	A,#00FH
;
L0488:	MOV	@R0,A
;
L0489:	MOV	DPTR,#L21F3
	LCALL	L04B9
	RET	
;
;
L0490:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	@R0,A
	INC	R0
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	SWAP	A
	ANL	A,#00FH
	MOV	@R0,A
	INC	R0
	RET	
;
;
L049C:	MOV	DPTR,#L21F3
	LJMP	L04AC
;
;
L04A2:	MOV	DPTR,#L21F5
	MOV	R2,#003H
	MOV	R0,#06BH
	LJMP	L04B0
;
;
L04AC:	MOV	R2,#005H
	MOV	R0,#06BH
;
L04B0:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	@R0,A
	INC	R0
	INC	DPTR
	DJNZ	R2,L04B0
	RET	
;
;
L04B9:	MOV	R2,#005H
	MOV	R0,#06BH
;
L04BD:	MOV	A,@R0
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	INC	R0
	INC	DPTR
	DJNZ	R2,L04BD
	RET	
;
;
L04C4:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	INC	DPTR
	PUSH	DPL
	PUSH	DPH
	MOV	DPH,R1
	MOV	DPL,R0
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	INC	DPTR
	MOV	R1,DPH
	MOV	R0,DPL
	POP	DPH
	POP	DPL
	DJNZ	R2,L04C4
	RET	
;
;
L04DB:	MOV	R0,#06FH
	JNB	B.3,L04E3
	LCALL	L0500
;
L04E3:	DEC	R0
	JNB	B.4,L04EA
	LCALL	L0500
;
L04EA:	DEC	R0
	JNB	B.5,L04F1
	LCALL	L0500
;
L04F1:	DEC	R0
	JNB	B.6,L04F8
	LCALL	L0500
;
L04F8:	DEC	R0
	JNB	B.7,L04FF
	LCALL	L0500
;
L04FF:	RET	
;
;
L0500:	MOV	A,@R0
;
L0501:	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	DEC	DPL
	RET	
;
;
L0505:	JNB	B.3,L050B
	LCALL	L052C
;
L050B:	DEC	DPL
	JNB	B.4,L0513
	LCALL	L052C
;
L0513:	DEC	DPL
	JNB	B.5,L051B
	LCALL	L052C
;
L051B:	DEC	DPL
	JNB	B.6,L0523
	LCALL	L052C
;
L0523:	DEC	DPL
	JNB	B.7,L052B
	LCALL	L052C
;
L052B:	RET	
;
;
L052C:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	@R0,A
	DEC	R0
	RET	
;
;
L0532:	MOV	R1,#000H
	MOV	R2,#000H
;
L0536:	MOV	DPH,#008H
	MOV	DPL,R1
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	CJNE	A,004H,L0557
	MOV	DPH,#022H
	MOV	A,R3
	ADD	A,R2
	MOV	DPL,A
	MOV	A,R1
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	INC	R2
	MOV	DPTR,#L21FA
	MOVX	A,@DPTR		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
	ANL	A,#00FH
	CJNE	A,001H,L0557
	MOV	DPTR,#L21FD
	MOV	A,R4
	MOVX	@DPTR,A		; DPTR=0x21FD, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FD
;
L0557:	INC	R1
;
L0558:	CJNE	A,#0FFH,L055E
	LJMP	L0566
;
;
L055E:	MOV	DPTR,#L0485
	MOVX	A,@DPTR		; DPTR=0x0485, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	INC	A
	CJNE	A,001H,L0536
;
L0566:	MOV	DPH,#022H
	MOV	A,R3
	ADD	A,R2
	MOV	DPL,A
	MOV	A,#0FFH
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	INC	R2
	CJNE	R2,#00BH,L0574
;
L0574:	JC	L0566
	RET	
;
;
L0577:	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.0,L0581		; EPROM perso 0x046A -> d0: 0=pas d'option DIVA (d3-d1 doivent aussi etre a 0 dans ce cas)
	LJMP	L05F5
;
;
L0581:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.3,L058B		; EPROM perso 0x046C -> d3=0(actif si 0): DIVA multi-cellules, scrutation par groupes de lignes (lien table 0800)
	LJMP	L05EF
;
;
L058B:	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.1,L059A		; EPROM perso 0x046A -> d1: scan des canaux DIVA - 1=scan en etoile (0,1,0,2,0,3...), 0=scan circulaire (0,1,2,3...)
	MOV	A,07CH
	CJNE	A,#000H,L059A
	LJMP	L05EF
;
;
L059A:	MOV	DPTR,#L0485
	MOVX	A,@DPTR		; DPTR=0x0485, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,07CH,L05A1
;
L05A1:	JNC	L05A6
	LJMP	L05EF
;
;
L05A6:	MOV	DPH,#008H
	MOV	DPL,07CH
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	MOV	DPTR,#L21FD
	MOVX	@DPTR,A		; DPTR=0x21FD, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FD
	SWAP	A
	MOV	DPL,A
	MOV	DPH,#022H
;
L05B7:	MOVX	A,@DPTR		; DPTR=0x21FD, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FD
	ANL	A,#00FH
	INC	DPL
	CJNE	A,#00FH,L05C2
	LJMP	L05F5
;
;
L05C2:	CJNE	A,07CH,L05B7
	DEC	DPL
	MOV	A,DPL
	ANL	A,#00FH
	CJNE	A,#000H,L05D1
	LJMP	L05E2
;
;
L05D1:	DEC	DPL
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	INC	DPL
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	DEC	DPL
	MOV	A,DPL
	ANL	A,#00FH
	CJNE	A,#000H,L05D1
;
L05E2:	MOV	A,07CH
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	MOV	DPTR,#L21FB
	MOVX	@DPTR,A		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB
	MOV	DPTR,#L21FE
	MOV	A,#000H
	MOVX	@DPTR,A		; DPTR=0x21FE, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FE
;
L05EF:	MOV	A,07CH
	MOV	DPTR,#L21FA
	MOVX	@DPTR,A		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
;
L05F5:	RET	
;
;
;
; >>> HELPER RAM 4-BIT: lit un octet logique en le reconstituant a partir de DEUX
;     nibbles STOCKES SUR DEUX ADRESSES RAM CONSECUTIVES (@DPTR et @DPTR+1),
;     chacune ne portant que 4 bits utiles. Confirme que la RAM MN5 (HM-6514) est
;     bien un composant 4 BITS DE LARGE (1024x4, cf. datasheet Intersil deja
;     confirmee): toute donnee 8 bits stockee en RAM y occupe donc DEUX cellules
;     physiques, pas une seule - a garder en tete pour interpreter les adresses
;     RAM (fenetre R/P=1) mentionnees ailleurs dans ce fichier.
;
L05F6:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	SWAP	A
	MOV	B,A
	INC	DPTR
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	ADD	A,B
	RET	
;
;
;
; >>> HELPER RAM 4-BIT (symetrique de L05F6): eclate un octet logique en deux
;     nibbles et les ecrit sur deux adresses RAM consecutives (@DPTR et @DPTR+1),
;     conformement a la largeur native 4 bits de la RAM MN5 (HM-6514).
;
L0603:	MOV	B,A
	SWAP	A
	ANL	A,#00FH
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	INC	DPTR
	MOV	A,B
	ANL	A,#00FH
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	RET	
;
;
L0610:	MOV	A,#04FH
	MOV	P1,#0AFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#AFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P17 | [si reellement pulsee -> commande extenseur 0xAF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	AJMP	L03CC
;
;
L0617:	MOV	A,#0BFH
	MOV	P1,#0EFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#EFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xEF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	AJMP	L03CC
;
;
;
; >>> POINT OUVERT (demande explicite de l'utilisateur): la MEMORISATION
; PERSISTANTE du mode clair/chiffre actif n'a PAS ete localisee avec
; certitude. Les drapeaux observes ici (03EH mis a 1 par L061E ET L065D
; indifferemment, 03FH utilise comme garde 'action deja faite pour ce
; passage menu') semblent tous etre des flags TRANSITOIRES lies a
; l'interaction en cours, pas un etat permanent du mode radio. Le mode
; reellement actif est peut-etre simplement memorise implicitement par
; l'ETAT LOGIQUE DES 2 SORTIES MN14 elles-memes (relues au besoin via
; L03BF plutot que via un octet RAM dedie), ou stocke a une adresse RAM
; non encore identifiee. A confirmer/localiser par l'utilisateur si possible.
;
; >>> CONFIRME PAR L'UTILISATEUR - PILOTAGE DES 2 SORTIES MN14 DE SELECTION DE
;     CLE MICA: lit le numero de cle stocke en RAM 0x2253 (0-3, defini en
;     L0A32/L1441) et en extrait les 2 bits un par un (RRC A x2), pulsant a
;     chaque fois soit L067D-style (P1=0xBFH: MN14, OU-Port7=FX1-4, bit a 1)
;     soit L0685-style (P1=0xFFH: MN14, ET-Port7=FX1-4, bit a 0) selon l'etat
;     du bit. HYPOTHESE FORTE (a confirmer par l'utilisateur): les broches FX1-4
;     de MN14 (documentees ATR.txt comme 'pilotage d'un modem FXCML externe,
;     fonction inconnue') seraient en realite REUTILISEES ICI comme les 2
;     entrees de selection de cle du MICA quand cette option est presente a la
;     place d'un modem FXCML - ce qui expliquerait pourquoi leur fonction
;     etait restee non documentee dans ATR.txt.
;
L061E:	SETB	03EH
	MOV	DPTR,#L2254
	MOV	A,#019H
	MOVX	@DPTR,A		; DPTR=0x2254, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x254
	MOV	DPTR,#L2253
	MOVX	A,@DPTR		; DPTR=0x2253, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x253
	RRC	A
	PUSH	ACC
	MOV	A,#08FH
	MOV	P1,#0BFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#BFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14,P15,P17 | [si reellement pulsee -> commande extenseur 0xBF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port7 [FX1,FX2,FX3,FX4]]
	JC	L0639
	MOV	A,#07FH
	MOV	P1,#0FFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#FFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xFF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port7 [FX1,FX2,FX3,FX4]]
;
L0639:	ACALL	L03CC
	POP	ACC
	RRC	A
	MOV	A,#04FH
	MOV	P1,#0BFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#BFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14,P15,P17 | [si reellement pulsee -> commande extenseur 0xBF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port7 [FX1,FX2,FX3,FX4]]
	JC	L064A
	MOV	A,#0BFH
	MOV	P1,#0FFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#FFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xFF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port7 [FX1,FX2,FX3,FX4]]
;
L064A:	ACALL	L03CC
	MOV	R1,#01AH
	JB	03FH,L0653
	MOV	R1,#01BH
;
L0653:	ACALL	L0355
	MOV	P1,#0EFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#EFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xEF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	MOV	A,#07FH
	ACALL	L03CC
	RET	
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR - IMPULSION D'EFFACEMENT DES CLES MICA: pulse
;     une commande distincte sur MN14 (P1=0xBFH, A=02FH - meme famille Port7/
;     FX1-4 que L061E/L067D/L0685, cf. hypothese complete a L061E) puis met a
;     jour un statut en RAM (0x2254=0x19). Appelee depuis L1494 (ecran 065H=
;     0x1C, suite du maintien 6s, cf. note complete a L13BF) - CORRESPOND
;     EXACTEMENT a l'impulsion d'effacement des cles MICA decrite par
;     l'utilisateur.
;
L065D:	MOV	P1,#0BFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#BFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14,P15,P17 | [si reellement pulsee -> commande extenseur 0xBF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port7 [FX1,FX2,FX3,FX4]]
	MOV	A,#02FH
	ACALL	L03CC
	SETB	03EH
	MOV	DPTR,#L2254
	MOV	A,#019H
	MOVX	@DPTR,A		; DPTR=0x2254, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x254
	RET	
;
;
L066D:	MOV	P1,#0FFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#FFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xFF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port7 [FX1,FX2,FX3,FX4]]
	MOV	A,#0DFH
	ACALL	L03CC
	RET	
;
;
L0675:	MOV	P1,#0AFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#AFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P17 | [si reellement pulsee -> commande extenseur 0xAF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	MOV	A,#08FH
	ACALL	L03CC
	RET	
;
;
L067D:	MOV	P1,#0BFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#BFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14,P15,P17 | [si reellement pulsee -> commande extenseur 0xBF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port7 [FX1,FX2,FX3,FX4]]
	MOV	A,#01FH
	ACALL	L03CC
	RET	
;
;
L0685:	MOV	P1,#0FFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#FFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xFF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port7 [FX1,FX2,FX3,FX4]]
	MOV	A,#0EFH
	ACALL	L03CC
	RET	
;
;
L068D:	NOP	
	INC	R7
	INC	R7
;
L0690:	RR	A
	INC	R7
	LJMP	L010F
;
	INC	R7
	INC	R7
	INC	R7
	INC	R7
	INC	R7
	INC	R7
	INC	R7
	INC	A
	INC	R7
	INC	006H
	INC	R7
	INC	@R1
	INC	R7
	INC	R1
	INC	R7
	INC	R0
;
L06A6:	MOV	A,07BH
	CJNE	A,#032H,L06B8		; CJNE: si EGAL a 0x32 (A) -> PAS de saut, traitement de: IDENTIFICATION organe = STANDARD (cf. L56B3) ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	R1,#000H
	LCALL	L0355
	MOV	R1,#01CH
	LCALL	L0355
	LJMP	L0A7B
;
;
L06B8:	CJNE	A,#019H,L06BB
;
L06BB:	JNC	L06CB
	MOV	DPTR,#L068D
	MOVC	A,@A+DPTR
	CJNE	A,#00FH,L06C7
	LJMP	L06CB
;
;
L06C7:	MOV	R5,A
	MOV	07BH,#020H
;
;
; >>> DISPATCHER PRINCIPAL DE L'ETAT/ECRAN COURANT (variable RAM 065H, table de
;     saut a 3 octets/entree en L06D4): 065H=0 correspond tres probablement a
;     L'ECRAN DE VEILLE (repos) du poste, d'apres le nombre d'endroits qui le
;     remettent a 0 en sortie de menu/action. Une SECONDE table de saut,
;     independante, existe egalement indexee par la MEME variable 065H (cf.
;     note complete a L3C5E) - les deux sont actives simultanement pour l'etat
;     065H=0 mais servent des fonctions differentes (voir note a L0737 et L3C85).
;
;     RECAPITULATIF DES ECRANS 065H IDENTIFIES AVEC CERTITUDE A CE JOUR (a
;     completer au fil des prochaines analyses) :
;       065H=0x00 : ecran de veille (repos)
;       065H=0x06 (-> L0C7F) : COMPOSITION DU NUMERO D'APPEL SELECTIF - atteint
;                    depuis la touche APPEL (MINI10, cf. note complete a
;                    L3EB0) ET depuis l'ecran d'edition du code N2 (cf. note
;                    complete a L0D48) - gere la saisie des chiffres et la
;                    touche '#' de validation.
;       065H=0x1B (-> L13BF) : maintien de la touche CLE (bascule clair/
;                    chiffre MICA, cf. note complete)
;       065H=0x1C (-> L147A) : suite du traitement apres effacement des cles
;                    MICA (maintien 6s de CLE, cf. note complete a L13BF)
;
L06CB:	MOV	A,065H
	MOV	DPTR,#L06D4
	MOV	R2,A
	ADD	A,R2
	ADD	A,R2
	JMP	@A+DPTR
;
;
L06D4:	LJMP	L0737
;
	LJMP	L0A7E
;
	LJMP	L0AD1
;
	LJMP	L0A7B
;
;
L06E0:	LJMP	L0B31
;
	LJMP	L0BD1
;
	LJMP	L0C7F
;
	LJMP	L0CEF
;
	LJMP	L0D48
;
	LJMP	L0DCF
;
	LJMP	L0E40
;
	LJMP	L0A7B
;
	LJMP	L0EB8
;
	LJMP	L0F2F
;
	LJMP	L0F4F
;
	LJMP	L0F67
;
	LJMP	L0FB0
;
	LJMP	L101F
;
	LJMP	L10A8
;
	LJMP	L1111
;
	LJMP	L1173
;
	LJMP	L1187
;
	LJMP	L11A2
;
	LJMP	L126A
;
	LJMP	L12A4
;
	LJMP	L1352
;
	LJMP	L138F
;
	LJMP	L13BF
;
	LJMP	L147A
;
	LJMP	L0A7B
;
	LJMP	L0A7B
;
	LJMP	L149F
;
	LJMP	L14C2
;
;
;
; >>> CORRECTIF (analyse precedente erronee): ce dispatcher (etat 065H=0,
;     ECRAN DE VEILLE) teste une longue cascade de valeurs sur 064H (variable
;     de sous-contexte). J'avais initialement cru que cette cascade menait aux
;     tests 0x29/0x2A/0x2B (organe STANDARD, cf. L37C9). CE N'EST PAS LE CAS:
;     064H n'est JAMAIS affecte a une valeur superieure a 0x25 dans tout le
;     programme (verifie exhaustivement) - les branches testant 0x29H/0x2BH/
;     0x2AH/0x3DH/0x41H plus loin dans cette meme cascade (~L09B2 et suivants)
;     sont donc INATTEIGNABLES via ce chemin precis. Le veritable chemin qui
;     mene a L37C9 est un AUTRE dispatcher, egalement actif en 065H=0, qui
;     recharge la valeur testee depuis la RAM 07BH (le vrai code touche recu) -
;     cf. note complete a L3C5E/L3C85.
;
L0737:	MOV	A,064H
	CJNE	A,#00DH,L073F
	LJMP	L585F
;
;
L073F:	CJNE	A,#010H,L0745
	LJMP	L0748
;
;
L0745:	CJNE	A,#00EH,L0751
;
L0748:	JB	031H,L0751
	JB	067H,L0751
	LJMP	L585F
;
;
L0751:	MOV	A,07BH
	CJNE	A,#010H,L075C
	MOV	065H,#00DH
	LJMP	L585F
;
;
L075C:	CJNE	A,#017H,L076A
	SETB	035H
	MOV	056H,#00AH
	MOV	065H,#00EH
	LJMP	L585F
;
;
L076A:	CJNE	A,#01DH,L0773
	MOV	065H,#014H
	LJMP	L585F
;
;
L0773:	CJNE	A,#013H,L077E
	SETB	053H
	LCALL	L5931
	LJMP	L585F
;
;
L077E:	CJNE	A,#00AH,L07AC
	LCALL	L38C1
	JZ	L07A9
	CJNE	A,#001H,L079B
	MOV	A,R2
	MOV	DPTR,#L21DA
	MOVX	@DPTR,A		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	MOV	072H,A
	MOV	A,#003H
	LCALL	L3B91
	MOV	065H,#001H
	LJMP	L585F
;
;
L079B:	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.4,L07A5		; EPROM perso 0x046A -> d4: deverrouillage DIVA sous cle uniquement (0 si DIVA inactif/pas de N1/organe MINI10-SC2)
	JB	04DH,L07A9
;
L07A5:	SETB	00DH
	SETB	023H
;
L07A9:	LJMP	L585F
;
;
L07AC:	CJNE	A,#020H,L080F
	MOV	A,064H
	CJNE	A,#003H,L07DD
	LCALL	L1596
	JZ	L080C
	MOV	R1,#079H
	MOV	R0,#007H
	LCALL	L3AB0
	MOV	072H,R5
	SETB	060H
	MOV	DPTR,#L21E1
	MOV	R1,005H
	LCALL	L038F
	DEC	07DH
	MOV	01FH,#007H
	SETB	06EH
	SETB	023H
	SETB	008H
	MOV	065H,#00CH
	LJMP	L585F
;
;
L07DD:	JNZ	L080C
	MOV	A,R5
	LCALL	L393A
	JZ	L080C
	MOV	A,R5
	MOV	072H,A
	LCALL	L394B
	JNZ	L07FD
	MOV	R1,#019H
	LCALL	L0355
	MOV	065H,#001H
	MOV	A,#003H
	LCALL	L3B91
	LJMP	L585F
;
;
L07FD:	SETB	05CH
	CJNE	A,#001H,L0804
	CLR	05CH
;
L0804:	MOV	R1,#00DH
	LCALL	L0355
	LCALL	L3C0F
;
L080C:	LJMP	L585F
;
;
L080F:	CJNE	A,#002H,L081E
	SETB	023H
	SETB	00CH
;
L0816:	MOV	R1,#001H
	LCALL	L0355
	LJMP	L585F
;
;
L081E:	CJNE	A,#008H,L0865
;
L0821:	LCALL	L38EC
	JZ	L083C
	JB	ACC.1,L083F
	JB	ACC.2,L085F
	CPL	056H
	MOV	DPTR,#L2258
	MOVX	A,@DPTR		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
	MOV	C,056H
	MOV	ACC.1,C
	MOVX	@DPTR,A		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
	MOV	R1,#018H
	LCALL	L0355
;
L083C:	LJMP	L585F
;
;
L083F:	LCALL	L3B7C
	LCALL	L384B
	MOV	DPTR,#L0483
	MOVX	A,@DPTR		; DPTR=0x0483, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	DPTR,#L2014
	LCALL	L03D3
	LCALL	L3A6B
	MOV	R1,#000H
	LCALL	L0355
	SETB	060H
	MOV	065H,#00FH
	LJMP	L585F
;
;
L085F:	LCALL	L3BA2
	LJMP	L585F
;
;
L0865:	CJNE	A,#001H,L08D0
	JB	04DH,L08A2
	MOV	A,064H
	JNZ	L089F
	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.0,L087F		; EPROM perso 0x046D -> d0=0(actif si 0): programmation des lignes sous cle d'acces (meme cle que le code N1 a 0489)
	MOV	DPTR,#L21F8
	MOVX	A,@DPTR		; DPTR=0x21F8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F8
	ANL	A,#00FH
	CJNE	A,#00FH,L08A2
;
L087F:	SETB	060H
	MOV	DPTR,#L21DA
	MOV	A,07CH
	MOVX	@DPTR,A		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	LCALL	L15A4
;
L088A:	LCALL	L386F
	CJNE	R0,#000H,L0893
	LJMP	L0E9F
;
;
L0893:	LCALL	L3B31
	MOV	DPTR,#L215B
	LCALL	L3A6B
	MOV	065H,#00AH
;
L089F:	LJMP	L585F
;
;
L08A2:	LCALL	L387A
	JZ	L08B3
	LCALL	L03F3
;
L08AA:	LCALL	L39D3
	MOV	065H,#016H
	LJMP	L585F
;
;
L08B3:	MOV	DPTR,#L046B
	MOVX	A,@DPTR		; OPTIONS MISE SOUS TENSION/MICA/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. Code de deverrouillage 6 chiffres stocke a 06E1-06E6 si d6=1. | DPTR=0x046B, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.2,L08CD		; EPROM perso 0x046B -> d2: non documente, indique fixe a 0
	LCALL	L384B
	JZ	L08CD
	SETB	060H
	LCALL	L3B46
	MOV	065H,#020H
	MOV	DPTR,#L216A
	LCALL	L3A6B
;
L08CD:	LJMP	L585F
;
;
L08D0:	CJNE	A,#00EH,L08E3
	LCALL	L3955
	JZ	L08E0
	SETB	060H
	LCALL	L3A42
	MOV	065H,#002H
;
L08E0:	LJMP	L585F
;
;
L08E3:	CJNE	A,#004H,L090D
	MOV	A,064H
	CJNE	A,#009H,L08EE
	LJMP	L090A
;
;
L08EE:	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JB	ACC.0,L090A
	MOV	01FH,#000H
;
L08F8:	CLR	060H
	MOV	R1,#001H
	LCALL	L0355
	CLR	03BH
	CLR	036H
	SETB	008H
	SETB	023H
	MOV	065H,#010H
;
L090A:	LJMP	L585F
;
;
L090D:	CJNE	A,#009H,L095F
	JB	05CH,L093B
	LCALL	L384B
	JZ	L0932
	SETB	060H
	LCALL	L3B46
	MOV	065H,#004H
	JB	04DH,L092C
	MOV	DPTR,#L218E
	MOVX	A,@DPTR		; DPTR=0x218E, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18E
	ANL	A,#00FH
	CJNE	A,07CH,L0935
;
L092C:	MOV	DPTR,#L216A
	LCALL	L3A6B
;
L0932:	LJMP	L585F
;
;
L0935:	LCALL	L3AAE
	LJMP	L585F
;
;
L093B:	LCALL	L155F
	JZ	L095C
	SETB	060H
	MOV	065H,#004H
	MOV	R1,#079H
	MOV	DPTR,#L218F
	MOVX	A,@DPTR		; DPTR=0x218F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18F
	ANL	A,#00FH
	CJNE	A,07CH,L0959
	MOV	DPTR,#L2172
	LCALL	L3A6D
	LJMP	L585F
;
;
L0959:	LCALL	L3AB0
;
L095C:	LJMP	L585F
;
;
L095F:	CJNE	A,#07FH,L09B2
	MOV	DPTR,#L2257
	MOVX	A,@DPTR		; DPTR=0x2257, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x257
	ANL	A,#00FH
	CJNE	A,#00BH,L096E
	LJMP	L098C
;
;
L096E:	MOV	DPTR,#L2258
	MOVX	A,@DPTR		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
	JNB	ACC.0,L0978
	LCALL	L4618
;
L0978:	MOV	DPTR,#L2258
	MOVX	A,@DPTR		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
	JNB	ACC.1,L0986
	SETB	056H
	MOV	R1,#018H
	LCALL	L0355
;
L0986:	LCALL	L380A
	LJMP	L585F
;
;
L098C:	MOV	DPTR,#L21F8
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21F8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F8
	MOV	DPTR,#L2257
	MOVX	@DPTR,A		; DPTR=0x2257, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x257
	MOV	DPTR,#L2258
	MOVX	@DPTR,A		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
	LCALL	L3892		; L3892 va tester le bit de parametrage defini dans l'EPROM de personnalisation, et L3890 se chargera d'effacer l'accumulateur si l'option 'code de deverrouillage' est active...
	JZ	L09A7			; ...saute l'execution de la routine L09A7 si le contenu de l'accumulateur est nul...
	LCALL	L3B5E		; ...et execute les routines de gestion de saisie du code de deverrouillage
	MOV	065H,#01AH
	LJMP	L585F
;
;
L09A7:	SETB	035H
	MOV	056H,#014H
	MOV	065H,#011H
	LJMP	L585F
;
;
L09B2:	CJNE	A,#03DH,L09B8
	LJMP	L0816
;
;
L09B8:	CJNE	A,#007H,L09C1		; CJNE: si 064H EGAL a cette valeur -> PAS de saut, traitement de: SC20 touche '-' (064H est un etat interne, PAS un code UART direct - coincidence numerique avec ce code) ; si DIFFERENT -> saut au test suivant
	LCALL	L37A8
	LJMP	L585F
;
;
L09C1:	CJNE	A,#00BH,L09CA		; CJNE: si 064H EGAL a cette valeur -> PAS de saut, traitement de: SC20 touche '+' (064H est un etat interne, PAS un code UART direct - coincidence numerique avec ce code) ; si DIFFERENT -> saut au test suivant
	LCALL	L3787
	LJMP	L585F
;
;
L09CA:	CJNE	A,#029H,L09D3		; CJNE: teste si 064H==0x29 - JAMAIS VRAI (064H ne depasse jamais 0x25 dans tout le programme) -> le saut 'si different' est donc TOUJOURS pris ici, cette branche de traitement est inatteignable, cf. correctif a L0737
	LCALL	L37C9
	LJMP	L585F
;
;
L09D3:	CJNE	A,#02BH,L09DC		; CJNE: teste si 064H==0x2B - JAMAIS VRAI (064H ne depasse jamais 0x25 dans tout le programme) -> le saut 'si different' est donc TOUJOURS pris ici, cette branche de traitement est inatteignable, cf. correctif a L0737
	LCALL	L37E2
	LJMP	L585F
;
;
L09DC:	CJNE	A,#02AH,L09E2		; CJNE: teste si 064H==0x2A - JAMAIS VRAI (064H ne depasse jamais 0x25 dans tout le programme) -> le saut 'si different' est donc TOUJOURS pris ici, cette branche de traitement est inatteignable, cf. correctif a L0737
	LCALL	L37F3
;
L09E2:	CJNE	A,#041H,L0A32
;
L09E5:	CLR	035H
	CLR	03BH
	CLR	036H
	CLR	04CH
	CLR	060H
	JB	05AH,L09FA
	MOV	A,065H
	CJNE	A,#005H,L09FA
	LJMP	L0A1B
;
;
L09FA:	MOV	A,064H
	CJNE	A,#020H,L0A18
	LCALL	L39FC
	JZ	L0A06
	JNC	L0A0D
;
L0A06:	SETB	00CH
	SETB	023H
	LJMP	L585F
;
;
L0A0D:	SETB	060H
	MOV	065H,#019H
	LCALL	L45B3
	LJMP	L585F
;
;
L0A18:	MOV	065H,#000H
;
L0A1B:	LCALL	L391D
	JZ	L0A7B
	MOV	DPTR,#L21E0
	LCALL	L3A6B
	MOV	077H,#024H
	MOV	078H,#024H
	MOV	079H,#024H
	LJMP	L585F
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR - DETECTION DE LA TOUCHE CLE (code UART 0x0D,
;     SC20): verifie d'abord la disponibilite de l'option MICA via L160A (lit
;     0x046B bit d5 'option MICA presente', EpromPersonnalisation.txt) - si
;     absente (JZ), ignore l'appui. Si presente: demarre le decompte de
;     maintien (05CH=0x14=20, flag 03BH='touche maintenue'), sauvegarde l'ecran
;     courant (065H) en RAM 0x2256 pour y revenir plus tard, puis bascule vers
;     l'ecran dedie 065H=0x1B (cf. note complete a L13BF) qui gere la totalite
;     de la logique de maintien 2s/6s.
;
L0A32:	CJNE	A,#00DH,L0A7B
	LCALL	L160A
	JZ	L0A4B
	MOV	05CH,#014H
	SETB	03BH
	MOV	A,065H
	MOV	DPTR,#L2256
	MOVX	@DPTR,A		; DPTR=0x2256, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x256
	MOV	065H,#01BH
	LJMP	L585F
;
;
L0A4B:	JB	ACC.7,L0A58
	MOV	DPTR,#L0467
	MOVX	A,@DPTR		; DPTR=0x0467, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.7,L0A58
	LJMP	L585F
;
;
L0A58:	LCALL	L3AFE
	LCALL	L384B
	MOV	DPTR,#L2160
	LCALL	L3A6B
	SETB	060H
	MOV	065H,#005H
	LCALL	L384B
	LCALL	L3BAD
	JZ	L0A7B
	CJNE	R4,#001H,L0A7B
	MOV	A,#002H
	LCALL	L3B91
	CLR	03BH
;
L0A7B:	LJMP	L585F
;
;
L0A7E:	MOV	A,07BH
	CJNE	A,#020H,L0A8F		; CJNE: si EGAL a 0x20 (A) -> PAS de saut, traitement de: MINI10 touche ANNUAIRE ; si DIFFERENT -> saut au test suivant de la chaine
	CLR	036H
	CLR	03BH
	MOV	065H,#000H
	SETB	024H
	LJMP	L585F
;
;
L0A8F:	CJNE	A,#001H,L0ABB		; CJNE: si EGAL a 0x01 (A) -> PAS de saut, traitement de: SC20 touche '*' ; si DIFFERENT -> saut au test suivant de la chaine
	CLR	036H
	CLR	03BH
	MOV	065H,#000H
	MOV	A,064H
	JNZ	L0ACB
	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.0,L0AAD		; EPROM perso 0x046D -> d0=0(actif si 0): programmation des lignes sous cle d'acces (meme cle que le code N1 a 0489)
	MOV	DPTR,#L21F8
	MOVX	A,@DPTR		; DPTR=0x21F8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F8
	ANL	A,#00FH
	CJNE	A,#00FH,L0ACB
;
L0AAD:	SETB	060H
	MOV	DPTR,#L21DA
	MOV	A,072H
	MOVX	@DPTR,A		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	LCALL	L15A4
	LJMP	L088A
;
;
L0ABB:	CJNE	A,#03DH,L0ACE
	CLR	036H
	MOV	072H,07CH
	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
;
L0ACB:	LJMP	L585F
;
;
L0ACE:	LJMP	L09E2
;
;
L0AD1:	MOV	A,07BH
	CJNE	A,#02FH,L0ADE		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#028H
	SETB	03BH
	LJMP	L585F
;
;
L0ADE:	CJNE	A,#00EH,L0AEA		; CJNE: si EGAL a 0x0E (A) -> PAS de saut, traitement de: SC20 touche MEM ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L397C
	LCALL	L3A42
	LJMP	L585F
;
;
L0AEA:	CJNE	A,#03DH,L0AFA
;
L0AED:	CLR	060H
	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
	LJMP	L585F
;
;
L0AFA:	CJNE	A,#004H,L0B06
	MOV	065H,#000H
	MOV	01FH,#003H
	LJMP	L08F8
;
;
L0B06:	CJNE	A,#002H,L0B2E
	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	JZ	L0B2A
	MOV	DPTR,#L2198
	MOV	A,#002H
	MOVX	@DPTR,A		; DPTR=0x2198, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x198
	MOV	DPTR,#L2197
	MOV	A,#001H
	MOVX	@DPTR,A		; DPTR=0x2197, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x197
	SETB	025H
	MOV	05CH,#001H
	SETB	03BH
	MOV	065H,#015H
	LJMP	L585F
;
;
L0B2A:	CLR	03BH
	SJMP	L0AED
;
L0B2E:	LJMP	L09B8
;
;
L0B31:	MOV	A,07BH
	CJNE	A,#02FH,L0B3E		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
L0B3E:	CJNE	A,#03DH,L0B44
	LJMP	L0BEC
;
;
L0B44:	CJNE	A,#020H,L0B66		; CJNE: si EGAL a 0x20 (A) -> PAS de saut, traitement de: MINI10 touche ANNUAIRE ; si DIFFERENT -> saut au test suivant de la chaine
	JNB	05CH,L0B58
	MOV	A,07DH
	JZ	L0B63
	MOV	R3,#005H
	MOV	A,#07AH
	LCALL	L15D5
	LJMP	L585F
;
;
L0B58:	MOV	A,07DH
	JZ	L0B63
	MOV	R3,#008H
	MOV	A,#077H
	LCALL	L15D5
;
L0B63:	LJMP	L585F
;
;
L0B66:	CJNE	A,#009H,L0B79
	JB	05CH,L0B63
	MOV	A,07DH
	JZ	L0BBD
	LCALL	L156D
	JZ	L0BBD
	MOV	R5,#00CH
	SJMP	L0B58
;
L0B79:	CJNE	A,#004H,L0BAB
	JB	05CH,L0B97
	LCALL	L384B
	LCALL	L3BAD
	CJNE	R4,#000H,L0BBD
	MOV	DPTR,#L216A
	LCALL	L3C05
	MOV	065H,#000H
	MOV	01FH,#001H
	LJMP	L08F8
;
;
L0B97:	LCALL	L155F
	MOV	DPTR,#L2172
	MOV	R1,#079H
	LCALL	L3C07
	MOV	065H,#000H
	MOV	01FH,#001H
	LJMP	L08F8
;
;
L0BAB:	CJNE	A,#002H,L0BCE
	JB	061H,L0BEC
	JB	05CH,L0BC0
	LCALL	L384B
	MOV	DPTR,#L216A
	LCALL	L3AAE
;
L0BBD:	LJMP	L585F
;
;
L0BC0:	LCALL	L155F
	MOV	R1,#079H
	MOV	DPTR,#L2172
	LCALL	L3AB0
	LJMP	L585F
;
;
L0BCE:	LJMP	L09B8
;
;
L0BD1:	MOV	A,07BH
	CJNE	A,#002H,L0BE9		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L3AFE
	LCALL	L384B
	LCALL	L3AAE
	MOV	A,#002H
	LCALL	L3B91
	CLR	03BH
	LJMP	L585F
;
;
L0BE9:	CJNE	A,#00DH,L0C01
;
L0BEC:	MOV	A,07CH
	MOV	DPTR,#L21DA
	MOVX	@DPTR,A		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	CLR	036H
	CLR	060H
	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
	LJMP	L585F
;
;
L0C01:	CJNE	A,#020H,L0C14
	MOV	A,07DH
	JZ	L0C11
;
L0C08:	MOV	R3,#008H
	MOV	A,#077H
	LCALL	L15D5
	SETB	036H
;
L0C11:	LJMP	L585F
;
;
L0C14:	CJNE	A,#001H,L0C69
	LCALL	L384B
	LCALL	L3BAD
	JZ	L0C2A
	CJNE	R4,#001H,L0C2A
	MOV	A,#002H
	LCALL	L3B91
	LJMP	L585F
;
;
L0C2A:	MOV	DPTR,#L2160
	LCALL	L3C05
	CLR	036H
	LCALL	L3AFE
	MOV	R1,#00EH
	LCALL	L034F
	SETB	060H
	LJMP	L585F
;
;
L0C3F:	LCALL	L15BA
	LCALL	L3C0F
	LCALL	L155F
	MOV	DPTR,#L2000
	MOV	A,07CH
	LCALL	L03D3
	MOV	A,R2
	MOVX	@DPTR,A		; DPTR=0x2000 (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	CJNE	A,#001H,L0C5A
	CLR	05CH
	LJMP	L0C5C
;
;
L0C5A:	SETB	05CH
;
L0C5C:	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
	CLR	060H
	LJMP	L585F
;
;
L0C69:	CJNE	A,#009H,L0C7C
	MOV	A,07DH
	JZ	L0C79
	LCALL	L156D
	JZ	L0C79
	MOV	R5,#00CH
	SJMP	L0C08
;
L0C79:	LJMP	L585F
;
;
L0C7C:	LJMP	L09B8
;
;
L0C7F:	MOV	A,07BH
	CJNE	A,#02FH,L0C8C		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
L0C8C:	CJNE	A,#002H,L0CA3		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	JB	061H,L0CA6
	LCALL	L1551
	MOV	R1,#078H
	MOV	DPTR,#L2146
	LCALL	L3B08
	LCALL	L3AB0
	LJMP	L585F
;
;
L0CA3:	CJNE	A,#03DH,L0CA9
;
L0CA6:	LJMP	L0BEC
;
;
L0CA9:	CJNE	A,#020H,L0CBA
;
L0CAC:	MOV	A,07DH
	JZ	L0CB7
	MOV	R3,#006H
	MOV	A,#079H
	LCALL	L15D5
;
L0CB7:	LJMP	L585F
;
;
L0CBA:	CJNE	A,#008H,L0CC1
	MOV	R5,#00FH
	SJMP	L0CAC
;
L0CC1:	CJNE	A,#001H,L0CE9
	LCALL	L1551
	MOV	DPTR,#L2146
	MOV	R1,#078H
	LCALL	L3C07
;
L0CCF:	LCALL	L155F
	CJNE	R2,#002H,L0CD8
	LJMP	L0CDB
;
;
L0CD8:	CJNE	R2,#003H,L0CEC
;
L0CDB:	MOV	R1,#079H
	MOV	DPTR,#L214E
	LCALL	L3A6D
	MOV	065H,#007H
	LJMP	L585F
;
;
L0CE9:	LJMP	L09E2
;
;
L0CEC:	LJMP	L0C3F
;
;
L0CEF:	MOV	A,07BH
	CJNE	A,#02FH,L0CFC		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
L0CFC:	CJNE	A,#002H,L0D10		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	JB	061H,L0D13
	LCALL	L155F
	MOV	R1,#079H
	MOV	DPTR,#L214E
	LCALL	L3AB0
	LJMP	L585F
;
;
L0D10:	CJNE	A,#03DH,L0D16
;
L0D13:	LJMP	L0BEC
;
;
L0D16:	CJNE	A,#020H,L0D27
	MOV	A,07DH
	JZ	L0D24
	MOV	R3,#005H
	MOV	A,#07AH
	LCALL	L15D5
;
L0D24:	LJMP	L585F
;
;
L0D27:	CJNE	A,#001H,L0D45
	MOV	A,072H
	CJNE	A,#00BH,L0D37
	MOV	A,#001H
	LCALL	L3B91
	LJMP	L585F
;
;
L0D37:	LCALL	L155F
	MOV	DPTR,#L214E
	MOV	R1,#079H
	LCALL	L3C07
	LJMP	L0C3F
;
;
L0D45:	LJMP	L09E2
;
;
;
; >>> ECRAN D'EDITION DU CODE N2 (appel selectif defini par l'utilisateur,
;     affiche le suffixe "AS" via L3B10, CONFIRME PAR L'UTILISATEUR). Les
;     droits de modification de chaque chiffre sont lus depuis l'EPROM 0x0474
;     (cf. definition complete dans EpromPersonnalisation.txt: bits d7-d3 =
;     quel chiffre est modifiable, bits d2-d0 = nombre de numeros modifiables) -
;     la valeur (masquee aux 3 bits de poids faible) est mise en cache dans la
;     RAM 07DH, testee a plusieurs endroits de cet ecran pour activer/desactiver
;     la saisie.
;
L0D48:	MOV	A,07BH
	CJNE	A,#02FH,L0D55		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
L0D55:	CJNE	A,#002H,L0D6A		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	JB	061H,L0D81
	LCALL	L3B10
	LCALL	L384B
	MOV	DPTR,#L2153
	LCALL	L3AAE
	LJMP	L585F
;
;
L0D6A:	CJNE	A,#009H,L0D7E
	MOV	A,07DH
	JZ	L0D7B
	LCALL	L156D
	JZ	L0D7B
	MOV	R5,#00CH
	LJMP	L0D8B
;
;
L0D7B:	LJMP	L585F
;
;
L0D7E:	CJNE	A,#03DH,L0D84
;
L0D81:	LJMP	L0BEC
;
;
L0D84:	CJNE	A,#020H,L0D98
	MOV	A,07DH
	JZ	L0D95
;
L0D8B:	LCALL	L3B10
	MOV	R3,#008H
	MOV	A,#077H
	LCALL	L15D5
;
L0D95:	LJMP	L585F
;
;
L0D98:	CJNE	A,#001H,L0DCC
	LCALL	L384B
	LCALL	L3BAD
	CJNE	R4,#001H,L0DAC
	MOV	A,#002H
	LCALL	L3B91
	LJMP	L585F
;
;
L0DAC:	MOV	DPTR,#L2153
	LCALL	L3C05
;
L0DB2:	LCALL	L3B08
	LCALL	L1551
	CJNE	R2,#003H,L0DC9
	MOV	R1,#078H
	MOV	DPTR,#L2146
	LCALL	L3A6D
	MOV	065H,#006H
	LJMP	L585F
;
;
L0DC9:	LJMP	L0CCF
;
;
L0DCC:	LJMP	L09E2
;
;
L0DCF:	MOV	A,07BH
	CJNE	A,#02FH,L0DDC		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
L0DDC:	CJNE	A,#002H,L0DF1		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	JB	061H,L0DF4
	LCALL	L3B18
	LCALL	L3854
	MOV	DPTR,#L2158
	LCALL	L3AAE
	LJMP	L585F
;
;
L0DF1:	CJNE	A,#03DH,L0DF7
;
L0DF4:	LJMP	L0BEC
;
;
L0DF7:	CJNE	A,#020H,L0E0B
	MOV	A,07DH
	JZ	L0E08
	LCALL	L3B18
	MOV	R3,#008H
	MOV	A,#077H
	LCALL	L15D5
;
L0E08:	LJMP	L585F
;
;
;
; >>> TOUCHE '*' = VALIDATION DE LA SAISIE RELAIS 'RE' (CONFIRME PARTAGE):
;     appelle L3BAD (verification de completude, comme pour N2 - PAS une
;     verification de plage comme pour le canal). Si incomplet: statut
;     0x21DB=2 via L3B91 -> declenche LE MEME oscillateur de clignotement que
;     l'ecran CANAL (cf. note complete a L4EB9). Si complet: L0EA6 bascule vers
;     l'ecran N2/AS (065H=8).
;
L0E0B:	CJNE	A,#001H,L0E3D
	LCALL	L3854
	LCALL	L3BAD
	JZ	L0E21
	CJNE	R4,#001H,L0E21
	MOV	A,#002H
	LCALL	L3B91
	LJMP	L585F
;
;
L0E21:	MOV	DPTR,#L2158
	LCALL	L3C05
;
L0E27:	LCALL	L384B
	JNZ	L0E2E
	SJMP	L0DB2
;
L0E2E:	LCALL	L3B10
	MOV	DPTR,#L2153
	LCALL	L3A6B
	MOV	065H,#008H
	LJMP	L585F
;
;
L0E3D:	LJMP	L09E2
;
;
;
; >>> ECRAN DE SAISIE DU NUMERO DE CANAL 'CA' (CONFIRME PAR L'UTILISATEUR, trace
;     complete demandee). Atteint via la touche '*' depuis l'ecran principal
;     (cf. L0865/L0893). Gere: relachement touche (0x2F), '#'=effacement vers
;     des tirets (L0E4D, cf. note complete), evenement interne 0x20=saisie d'un
;     chiffre (L0E68, cf. note complete), '*'=validation (L0E89, cf. note
;     complete a L3BC3 pour la validation elle-meme).
;
L0E40:	MOV	A,07BH
	CJNE	A,#02FH,L0E4D		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
;
; >>> TOUCHE '#' = EFFACEMENT DE LA SAISIE EN COURS (CONFIRME PAR
;     L'UTILISATEUR): reaffiche le suffixe 'CA' (L3B31), recupere le nombre de
;     caracteres du canal (L386F), puis appelle L3AAE (cf. note complete) qui
;     REMPLACE CHAQUE CHIFFRE PAR LE CARACTERE '-' (code VFD 0x0B) - exactement
;     le comportement decrit par l'utilisateur.
;
L0E4D:	CJNE	A,#002H,L0E62		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	JB	061H,L0E65
	LCALL	L3B31
	LCALL	L386F
	MOV	DPTR,#L215B
	LCALL	L3AAE
	LJMP	L585F
;
;
L0E62:	CJNE	A,#03DH,L0E68
;
L0E65:	LJMP	L0BEC
;
;
;
; >>> EVENEMENT INTERNE 0x20 = UN CHIFFRE NUMERIQUE A ETE SAISI (meme
;     convention que l'ecran MICA/CLE deja documentee): si des chiffres restent
;     a saisir (07DH != 0), reaffiche 'CA' et appelle L15D5 (cf. note complete)
;     qui stocke le chiffre dans le tampon d'affichage et fait avancer la
;     position de saisie.
;
L0E68:	CJNE	A,#020H,L0E89
	MOV	A,07DH
	JZ	L0E7C
	LCALL	L3B31
	MOV	R3,#008H
	MOV	A,#077H
	LCALL	L15D5
	LJMP	L585F
;
;
;
; >>> Cas ou tous les chiffres ont ete saisis (07DH atteint 0): reaffiche 'CA'
;     et nettoie les drapeaux de saisie (036H/04CH).
;
L0E7C:	JB	04CH,L0E86
	LCALL	L3B31
	CLR	036H
	CLR	04CH
;
L0E86:	LJMP	L585F
;
;
;
; >>> TOUCHE '*' = VALIDATION DE LA SAISIE (CONFIRME PAR L'UTILISATEUR) - APPEL
;     A LA VERIFICATION REELLE: LCALL L3BC3 (cf. note complete - LA VERITABLE
;     VALIDATION du numero de canal: verifie que chaque chiffre est bien un
;     digit 0-9 ET que le canal correspondant existe dans la table de
;     frequences). Retour ZERO (invalide, cf. L3BC3): reste sur cet ecran, la
;     suite en L0E99 gere le CLIGNOTEMENT DE 'CA' (statut 0x21DB=2 via L3B91,
;     consomme par le mecanisme periodique de L4E76/L4E83 deja documente pour
;     les compteurs de temporisation generiques). Retour NON-ZERO (valide):
;     statut 0x21DB=2 egalement positionne ICI mais volontairement ignore -
;     voir suite en L0E99/L0E9F qui bascule vers l'ecran de saisie N2 (065H=9,
;     cf. L0EA6) quand la validation reussit.
;
L0E89:	CJNE	A,#001H,L0EB5
	LCALL	L3BC3
	JNZ	L0E99
	MOV	A,#002H
	LCALL	L3B91
	LJMP	L585F
;
;
L0E99:	MOV	DPTR,#L215B
	LCALL	L3C05
;
L0E9F:	LCALL	L3854
	JNZ	L0EA6
	SJMP	L0E27
;
L0EA6:	LCALL	L3B18
	MOV	DPTR,#L2158
	LCALL	L3A6B
	MOV	065H,#009H
	LJMP	L0A7B
;
;
L0EB5:	LJMP	L09E2
;
;
L0EB8:	MOV	A,07BH
	CJNE	A,#02FH,L0EC5		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L0A7B
;
;
L0EC5:	CJNE	A,#020H,L0EFF		; CJNE: si EGAL a 0x20 (A) -> PAS de saut, traitement de: MINI10 touche ANNUAIRE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	A,07DH
	JZ	L0EEF
	MOV	R3,#005H
	MOV	A,#07AH
	LCALL	L15D5
;
L0ED3:	MOV	056H,#0C8H
	SETB	035H
	MOV	DPTR,#L21E1
	MOV	R1,005H
	LCALL	L038F
	JB	06EH,L0EEC
	SETB	023H
	SETB	008H
	MOV	01FH,#007H
	SETB	06EH
;
L0EEC:	LJMP	L585F
;
;
L0EEF:	LCALL	L1596
	MOV	R1,#079H
	MOV	R0,#007H
	LCALL	L3AB0
	MOV	072H,R5
	DEC	07DH
	SJMP	L0ED3
;
L0EFF:	CJNE	A,#002H,L0F1E
	SETB	00CH
	SETB	023H
	MOV	DPTR,#L21E1
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21E1, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1E1
	CLR	06EH
	CLR	035H
	CLR	03BH
;
L0F11:	CLR	060H
	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
	LJMP	L585F
;
;
L0F1E:	CJNE	A,#03DH,L0F23
	SJMP	L0F11
;
L0F23:	CJNE	A,#03EH,L0F2C
	MOV	07DH,#000H
	LJMP	L585F
;
;
L0F2C:	LJMP	L09B8
;
;
L0F2F:	MOV	A,07BH
	LCALL	L3BEC
	JNZ	L0F3B
	MOV	R1,#014H
	LJMP	L0F46
;
;
L0F3B:	MOV	A,07BH
	LCALL	L045A
	CLR	067H
	SETB	02AH
	MOV	R1,#013H
;
L0F46:	LCALL	L0355
	MOV	065H,#000H
	LJMP	L585F
;
;
L0F4F:	MOV	A,07BH
	CJNE	A,#03EH,L0F64
	MOV	A,07CH
	LCALL	L0410
	LCALL	L045A
	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
;
L0F64:	LJMP	L585F
;
;
L0F67:	MOV	A,07BH
	CJNE	A,#02FH,L0F74		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#032H
	SETB	03BH
	LJMP	L585F
;
;
L0F74:	CJNE	A,#002H,L0F7C		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	CLR	03BH
	LJMP	L0F8E
;
;
L0F7C:	CJNE	A,#03DH,L0F9B
	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	ANL	A,#006H		; EPROM perso 0x0468, masque 0x6 -> d1: signalisation exterieure klaxon - appel de groupe ; d2: signalisation exterieure klaxon - appel individuel
	JZ	L0F8E
	CPL	056H
	MOV	R1,#018H
	LCALL	L0355
;
L0F8E:	CLR	060H
	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
	LJMP	L585F
;
;
L0F9B:	CJNE	A,#004H,L0FAD
	LCALL	L384B
	LCALL	L3BAD
	CJNE	R4,#000H,L0FAD
	MOV	01FH,#008H
	LJMP	L08F8
;
;
L0FAD:	LJMP	L09B8
;
;
L0FB0:	MOV	A,07BH
	CJNE	A,#040H,L0FBB
	MOV	065H,#000H
	LJMP	L585F
;
;
L0FBB:	CJNE	A,#001H,L0FCF		; CJNE: si EGAL a 0x01 (A) -> PAS de saut, traitement de: SC20 touche '*' ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	A,064H
	SUBB	A,#005H
	JZ	L0FC8
	SUBB	A,#013H
	JNZ	L0FCC
;
L0FC8:	SETB	008H
	SETB	023H
;
L0FCC:	LJMP	L585F
;
;
L0FCF:	CJNE	A,#03FH,L0FEF
	MOV	077H,#024H
	MOV	078H,#024H
	MOV	079H,#024H
	LCALL	L384B
	MOV	DPTR,#L216A
	LCALL	L3A6B
	SETB	03BH
	MOV	05CH,#014H
	MOV	065H,#000H
	LJMP	L585F
;
;
L0FEF:	CJNE	A,#03DH,L0FF4
	SJMP	L0F8E
;
L0FF4:	CJNE	A,#002H,L1001
	SETB	023H
	SETB	00CH
	MOV	065H,#000H
	LJMP	L585F
;
;
L1001:	CJNE	A,#029H,L100D
	LCALL	L37C9
	MOV	065H,#000H
	LJMP	L585F
;
;
L100D:	CJNE	A,#004H,L101C
	MOV	A,064H
	CJNE	A,#00FH,L101C
	SETB	008H
	SETB	023H
	LJMP	L585F
;
;
L101C:	LJMP	L09B8
;
;
L101F:	MOV	A,07BH
	CJNE	A,#03EH,L1031
	MOV	R1,#010H
	LCALL	L0355
	MOV	05BH,#032H
	SETB	03AH
	LJMP	L585F
;
;
L1031:	CJNE	A,#03CH,L1039
	CLR	03AH
	LJMP	L103C
;
;
L1039:	CJNE	A,#07FH,L1051
;
L103C:	CLR	03AH
	LCALL	L384B
	JZ	L1049
	LCALL	L3ADC
	LJMP	L585F
;
;
L1049:	MOV	05CH,#014H
	SETB	03BH
	LJMP	L585F
;
;
L1051:	CJNE	A,#002H,L1059
	CLR	03BH
	LJMP	L105C
;
;
L1059:	CJNE	A,#03DH,L1071
;
L105C:	CLR	060H
	LCALL	L380A
	MOV	065H,#000H
	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.0,L106E		; EPROM perso 0x047E -> d0 (INFERE): gate simple observe en L0821 (si 1, saute vers un traitement etendu)
	LJMP	L0821
;
;
L106E:	LJMP	L585F
;
;
L1071:	CJNE	A,#001H,L108A
	LCALL	L3885
	JZ	L10A5
	CLR	03BH
	LCALL	L3B56
	MOV	072H,#024H
	LCALL	L3AAE
	MOV	065H,#012H
	LJMP	L585F
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR (CORRECTION DE TERMINOLOGIE): mecanisme complet
;     d'affichage version logiciel sur pression d'APPEL - PAS depuis l'ecran de
;     veille, mais uniquement durant l'ECRAN DE DEMARRAGE (phase d'affichage de
;     l'identifiant d'appel 5-tons du poste, quelques secondes seulement a la
;     mise sous tension, SC20). Teste d'abord 0x2F
;     (touche relachee): si le flag 03BH (APPEL actuellement maintenu) est actif,
;     relance un compteur d'affichage (05CH=0x14) et reste sur l'ecran courant -
;     sinon retour normal. cf. L109A juste en dessous pour la detection d'APPEL
;     elle-meme (declenche L3991, cf. note complete).
;
L108A:	CJNE	A,#02FH,L109A
	JB	03BH,L1092
	SJMP	L103C
;
L1092:	MOV	05CH,#014H
	SETB	03BH
	LJMP	L0A7B
;
;
;
; >>> DETECTION DE LA TOUCHE APPEL (code UART 0x04, SC20) - CONFIRME PAR
;     L'UTILISATEUR: declenche l'affichage du numero de version logiciel (L3991)
;     a la place de l'identifiant d'appel selectif normalement affiche durant
;     L'ECRAN DE DEMARRAGE (PAS l'ecran de veille - correction utilisateur).
;     Positionne 03BH (flag 'APPEL maintenu') et reinitialise le compteur
;     d'affichage 05CH.
;
L109A:	CJNE	A,#004H,L10A5
	MOV	05CH,#000H
	CLR	03BH
	LCALL	L3991
;
L10A5:	LJMP	L0A7B
;
;
L10A8:	MOV	A,07BH
	CJNE	A,#002H,L10BF		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	CLR	03BH
	JNB	061H,L10C2
	CLR	036H
	MOV	065H,#011H
	SETB	024H
	MOV	07BH,#07FH
	LJMP	L110E
;
;
L10BF:	CJNE	A,#03DH,L10CE
;
L10C2:	LCALL	L3885
	LCALL	L3B56
	LCALL	L3AAE
	LJMP	L110E
;
;
L10CE:	CJNE	A,#001H,L10FB
	LCALL	L38A7
	JZ	L10F3
	MOV	DPTR,#L21F8
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x21F8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F8
	LCALL	L384B
	JNZ	L10E4
	LJMP	L105C
;
;
L10E4:	LCALL	L3B4E
	LCALL	L384B
	LCALL	L3AAE
	MOV	065H,#013H
	LJMP	L110E
;
;
;
; >>> STATUT 0x21DB=2 (CONFIRME PARTAGE): meme mecanisme de clignotement que
;     les ecrans CANAL et RELAIS (cf. note complete a L4EB9), ici pour l'ecran
;     de code d'acces N1 ('CO'), declenche par L38A7 (sa propre validation) en
;     L10CE.
;
L10F3:	MOV	A,#002H
	LCALL	L3B91
	LJMP	L110E
;
;
L10FB:	CJNE	A,#020H,L110E
	CLR	03BH
	MOV	A,07DH
	JZ	L110E
	LCALL	L3B56
	MOV	A,#077H
	MOV	R3,#008H
	LCALL	L15D5
;
L110E:	LJMP	L585F
;
;
L1111:	MOV	A,07BH
	CJNE	A,#02FH,L111E		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L1170
;
;
L111E:	CJNE	A,#002H,L1133		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	JB	061H,L1138
	LCALL	L3B4E
	LCALL	L384B
	MOV	DPTR,#L2153
	LCALL	L3AAE
	LJMP	L1170
;
;
L1133:	CJNE	A,#03DH,L1143
	CLR	036H
;
L1138:	MOV	065H,#011H
	SETB	024H
	MOV	07BH,#07FH
	LJMP	L1170
;
;
L1143:	CJNE	A,#020H,L1157
	MOV	A,07DH
	JZ	L1170
	LCALL	L3B4E
	MOV	R3,#008H
	MOV	A,#077H
	LCALL	L15D5
	LJMP	L1170
;
;
L1157:	CJNE	A,#001H,L1170
	LCALL	L384B
	LCALL	L3BAD
	CJNE	R4,#001H,L116B
	MOV	A,#002H
	LCALL	L3B91
	LJMP	L1170
;
;
L116B:	LCALL	L3C28
	SJMP	L1138
;
L1170:	LJMP	L585F
;
;
L1173:	MOV	A,07BH
	LCALL	L3BEC
	MOV	R1,#013H
	JNZ	L117E
	MOV	R1,#014H
;
L117E:	LCALL	L0355
	MOV	065H,#000H
	LJMP	L585F
;
;
L1187:	MOV	A,07BH
	CJNE	A,#03DH,L118F
	JB	025H,L119C
;
L118F:	CLR	060H
	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
	LJMP	L585F
;
;
L119C:	MOV	05CH,#001H
	LJMP	L585F
;
;
L11A2:	MOV	A,07BH
	CJNE	A,#02FH,L11AF		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
L11AF:	CJNE	A,#002H,L11CA		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	JB	061H,L11CD
;
L11B5:	LCALL	L3B20
	LCALL	L387A
	LCALL	L3AAE
	LCALL	L387A
	MOV	DPTR,#L2249
	LCALL	L3C05
	LJMP	L585F
;
;
L11CA:	CJNE	A,#03DH,L11D0
;
L11CD:	LJMP	L0BEC
;
;
L11D0:	CJNE	A,#001H,L1219
	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L11F7
	MOV	DPTR,#L2248
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x2248, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x248
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x2249, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x249
	LCALL	L03F3
	CJNE	A,#079H,L11EE
	CLR	A
	MOV	DPTR,#L2248
	MOVX	@DPTR,A		; DPTR=0x2248, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x248
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x2249, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x249
;
L11EE:	LCALL	L39E0
	MOV	065H,#018H
	LJMP	L585F
;
;
L11F7:	LCALL	L387A
	MOV	R2,003H
	MOV	DPTR,#L2248
	MOV	R0,DPL
	MOV	R1,DPH
	MOV	DPTR,#L224A
	LCALL	L04C4
	LCALL	L03F3
	CJNE	A,#079H,L1216
	CLR	A
	MOV	DPTR,#L2248
	MOVX	@DPTR,A		; DPTR=0x2248, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x248
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x2249, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x249
;
L1216:	LJMP	L130F
;
;
L1219:	CJNE	A,#020H,L1267
	MOV	A,07DH
	JZ	L1267
	MOV	R3,#008H
	MOV	A,#077H
	LCALL	L15D5
	MOV	A,07DH
	JNZ	L1267
	LCALL	L387A
	LCALL	L3BAD
	CJNE	R4,#000H,L1267
	MOV	A,07DH
	CJNE	A,#002H,L1245
	MOV	DPTR,#L2249
	LCALL	L3C05
	LCALL	L03F3
	LJMP	L1259
;
;
L1245:	MOV	DPTR,#L2249
	LCALL	L3C05
	MOV	DPTR,#L2248
	MOV	A,#000H
	MOVX	@DPTR,A		; DPTR=0x2248, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x248
	INC	DPTR
	MOVX	A,@DPTR		; DPTR=0x2249, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x249
	CJNE	A,#00AH,L125C
	LJMP	L125C
;
;
L1259:	CJNE	A,#010H,L125C
;
L125C:	JC	L1261
	LJMP	L11B5
;
;
L1261:	MOV	065H,#018H
	LCALL	L39E0
;
L1267:	LJMP	L585F
;
;
L126A:	MOV	A,07BH
	CJNE	A,#03FH,L128B
	CLR	060H
	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
	LCALL	L45DF
	LCALL	L387A
	MOV	DPTR,#L2248
	MOV	A,#00BH
;
L1284:	MOVX	@DPTR,A		; DPTR=0x2248, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x248
	INC	DPTR
	DJNZ	R3,L1284
;
L1288:	LJMP	L585F
;
;
L128B:	CJNE	A,#040H,L1297
	LCALL	L1653
	MOV	065H,#01FH
	LJMP	L585F
;
;
L1297:	CJNE	A,#002H,L1288
	SETB	023H
	SETB	00CH
	LCALL	L45DF
	LJMP	L12B4
;
;
L12A4:	MOV	A,07BH
	CJNE	A,#02FH,L12B1		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
L12B1:	CJNE	A,#002H,L12CF		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
;
L12B4:	LCALL	L3B20
	LCALL	L387A
	MOV	DPTR,#L2249
	LCALL	L3AAE
	LCALL	L387A
	MOV	DPTR,#L2249
	LCALL	L3C05
	MOV	065H,#016H
	LJMP	L585F
;
;
L12CF:	CJNE	A,#03DH,L12E7
	LCALL	L387A
	MOV	DPTR,#L2249
	LCALL	L3AAE
	LCALL	L387A
	MOV	DPTR,#L2249
	LCALL	L3C05
	LJMP	L0BEC
;
;
L12E7:	CJNE	A,#004H,L130C
	MOV	065H,#017H
	SETB	023H
	SETB	019H
	LCALL	L45B3
	MOV	01FH,#009H
	LCALL	L387A
	MOV	R2,003H
	MOV	DPTR,#L224A
	MOV	R0,DPL
	MOV	R1,DPH
	MOV	DPTR,#L2248
	LCALL	L04C4
	LJMP	L585F
;
;
L130C:	CJNE	A,#001H,L134F
;
L130F:	LCALL	L387A
	MOV	B,#00AH
	CJNE	R3,#002H,L131B		; CORRECTIF: R3 suit un appel a L387A (probable valeur de retour de cette routine, utilisee ici comme parametre de table) - PAS un test de code touche UART.		; Code touche possible (R3) 0x02 -> SC20:'#'
	MOV	B,#010H
;
L131B:	PUSH	B
	LCALL	L03F3
	INC	A
	POP	B
	CJNE	A,B,L1327
	CLR	A
;
L1327:	CJNE	A,#00AH,L132A
;
L132A:	JC	L133C
	MOV	DPTR,#L2249
	CLR	C
	SUBB	A,#00AH
	MOVX	@DPTR,A		; DPTR=0x2249, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x249
	MOV	DPTR,#L2248
	MOV	A,#001H
	MOVX	@DPTR,A		; DPTR=0x2248, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x248
	LJMP	L1346
;
;
L133C:	MOV	DPTR,#L2249
	MOVX	@DPTR,A		; DPTR=0x2249, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x249
	MOV	DPTR,#L2248
	MOV	A,#000H
	MOVX	@DPTR,A		; DPTR=0x2248, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x248
;
L1346:	LCALL	L03F3
	LCALL	L39E0
	MOV	065H,#018H
;
L134F:	LJMP	L585F
;
;
L1352:	MOV	A,07BH
	CJNE	A,#002H,L1382		; CJNE: si EGAL a 0x02 (A) -> PAS de saut, traitement de: SC20 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
;
L1357:	LCALL	L03F3
	CJNE	A,#079H,L1374
	JB	04DH,L1364
	SETB	00CH
	SETB	023H
;
L1364:	CLR	060H
	MOV	R1,#001H
	LCALL	L0355
	MOV	065H,#000H
	LCALL	L45DF
;
L1371:	LJMP	L585F
;
;
L1374:	LCALL	L1653
	LCALL	L4541
	CLR	031H
	MOV	065H,#01FH
	LJMP	L585F
;
;
L1382:	CJNE	A,#041H,L1371
	CLR	03BH
	LCALL	L39FC
	JZ	L1357
	LJMP	L585F
;
;
L138F:	MOV	A,07BH
	CJNE	A,#001H,L13AC		; CJNE: si EGAL a 0x01 (A) -> PAS de saut, traitement de: SC20 touche '*' ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L389D
	JZ	L13A6
	CLR	03BH
	SETB	035H
	MOV	056H,#014H
	MOV	065H,#011H
	LJMP	L585F
;
;
L13A6:	MOV	065H,#003H
	LJMP	L585F
;
;
L13AC:	CJNE	A,#020H,L13BC
	CLR	03BH
	MOV	A,07DH
	JZ	L13BC
	MOV	A,#078H
	MOV	R3,#007H
	LCALL	L15EF
;
L13BC:	LJMP	L585F
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR - MACHINE A ETATS COMPLETE DU MAINTIEN DE LA
;     TOUCHE CLE (2s = bascule clair/chiffre, 6s = effacement des cles MICA).
;     Cette routine (ecran 065H=0x1B) recoit soit le code touche relachee
;     (0x2F), soit des EVENEMENTS INTERNES DE MINUTERIE injectes dans le meme
;     flux que les codes touche (0x3D = expiration du delai de 2s, 0x3E =
;     expiration du delai de 6s, 0x20 = selection d'un chiffre de cle 1-4 -
;     CES 3 VALEURS NE SONT PAS DES CODES UART REELS, ce sont des marqueurs
;     internes reutilisant le meme circuit de traitement - a confirmer avec
;     certitude par l'utilisateur si possible, mais fortement suggere par le
;     contexte). Repartition:
;       - 0x2F (relachement): si le seuil de 2s n'a pas ete atteint (035H=0),
;         annule simplement (L13C7: restaure l'ecran precedent). Si atteint
;         (035H=1) sans etre alle jusqu'a 6s, arme un nouveau delai (L13DC,
;         056H/05BH=0xC8/0xDC) pour laisser une derniere chance au 6s.
;       - 0x3D (2s ecoules, touche encore maintenue): premiere fois (03FH=0) ->
;         AFFICHE "CLE" (LCALL L1611, cf. note complete) ; sinon (deja affiche)
;         -> L13FB, appelle L061E (cf. note complete: pulse les 2 sorties MN14
;         de selection de cle selon le chiffre stocke) et L0685.
;       - 0x3E (6s ecoules): si on etait dans le cas 'relache puis re-arme'
;         (03AH=1) -> bascule definitivement vers le mode chiffre/clair (L141F,
;         appelle L067D ou L0685 + L061E) ; SINON (maintien continu depuis le
;         debut, sans relachement) -> DECLENCHE L'EFFACEMENT DES CLES: CLR 03FH,
;         tonalite (LCALL L4587, cf. note complete), affichage "EFFACE" (LCALL
;         L1635, cf. note complete), bascule vers l'ecran 065H=0x1C (cf. L147A).
;       - 0x20 (chiffre 1-4 selectionne pendant l'affichage de "CLE"): valide
;         (035H et 03AH actifs = on est bien dans la fenetre de saisie), lit le
;         chiffre dans R5, le borne a 1-4 (L1441: rejette si >=5 ou ==0), le
;         convertit en 0-3 (DEC A) et le STOCKE EN RAM 0x2253 - CONFIRME: c'est
;         exactement l'adresse RAM que L1611 relit pour afficher le chiffre de
;         cle apres "CLE" (bits0-1 de 0x2253, +1). Pulse ensuite les sorties
;         MN14 (L067D+L061E) et revient a l'ecran precedent.
;
L13BF:	MOV	A,07BH
	CJNE	A,#02FH,L13EA		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	JB	035H,L13DC
;
L13C7:	MOV	DPTR,#L2256
	MOVX	A,@DPTR		; DPTR=0x2256, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x256
	MOV	065H,A
	CLR	03AH
	CLR	035H
	LCALL	L5977
	SETB	03BH
	MOV	05CH,#001H
	LJMP	L585F
;
;
L13DC:	JBC	03FH,L13C7
	MOV	056H,#0C8H
	MOV	05BH,#0DCH
	SETB	03AH
	LJMP	L585F
;
;
L13EA:	CJNE	A,#03DH,L1406
	SETB	035H
	MOV	056H,#0C8H
	JBC	03FH,L13FB
	LCALL	L1611
	LJMP	L585F
;
;
L13FB:	LCALL	L061E
	SETB	03FH
	LCALL	L0685
	LJMP	L585F
;
;
L1406:	CJNE	A,#03EH,L1434
	JBC	03AH,L141F
	CLR	03FH
	LCALL	L4587
	LCALL	L1635
	MOV	065H,#01CH
	MOV	05CH,#032H
	SETB	03BH
	LJMP	L585F
;
;
L141F:	JBC	03FH,L142C
	LCALL	L067D
	SETB	03FH
	LCALL	L061E
	SJMP	L13C7
;
L142C:	LCALL	L0685
	LCALL	L061E
	SJMP	L13C7
;
L1434:	CJNE	A,#020H,L146C
	JNB	035H,L146C
	JNB	03AH,L146C
	MOV	A,R5
	CJNE	A,#005H,L1441
;
L1441:	JNC	L146F
	JZ	L146F
	DEC	A
	MOV	DPTR,#L2253
	MOVX	@DPTR,A		; DPTR=0x2253, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x253
	LCALL	L067D
	SETB	03FH
	LCALL	L061E
	CLR	03AH
	MOV	DPTR,#L2256
	MOVX	A,@DPTR		; DPTR=0x2256, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x256
	MOV	065H,A
	CLR	03AH
	CLR	035H
	LCALL	L5977
	LCALL	L1611
	SETB	03BH
	MOV	05CH,#014H
	LJMP	L585F
;
;
L146C:	LJMP	L585F
;
;
L146F:	MOV	056H,#0C8H
	MOV	05BH,#0DCH
	SETB	03AH
	LJMP	L585F
;
;
L147A:	MOV	A,07BH
	CJNE	A,#02FH,L1494		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
;
L147F:	MOV	DPTR,#L2256
	MOVX	A,@DPTR		; DPTR=0x2256, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x256
	MOV	065H,A
	CLR	03AH
	CLR	035H
	LCALL	L5977
	SETB	03BH
	MOV	05CH,#001H
;
L1491:	LJMP	L585F
;
;
L1494:	CJNE	A,#03DH,L1491
	LCALL	L065D
	LCALL	L5977
	SJMP	L147F
;
L149F:	MOV	A,07BH
	CJNE	A,#001H,L14B9		; CJNE: si EGAL a 0x01 (A) -> PAS de saut, traitement de: SC20 touche '*' ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L5977
	LCALL	L03F3
	LCALL	L39E0
	MOV	065H,#018H
	JB	04DH,L14B6
	MOV	064H,#000H
;
L14B6:	LJMP	L585F
;
;
L14B9:	CJNE	A,#041H,L14BF
	LJMP	L09E5
;
;
L14BF:	LJMP	L585F
;
;
L14C2:	MOV	A,07BH
	CJNE	A,#02FH,L14CF		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
L14CF:	CJNE	A,#03DH,L14D5
	LJMP	L0BEC
;
;
L14D5:	CJNE	A,#020H,L14E6		; CJNE: si EGAL a 0x20 (A) -> PAS de saut, traitement de: MINI10 touche ANNUAIRE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	A,07DH
	JZ	L14E3
	MOV	R3,#008H
	MOV	A,#077H
	LCALL	L15D5
;
L14E3:	LJMP	L585F
;
;
L14E6:	CJNE	A,#009H,L14F7
	MOV	A,07DH
	JZ	L1524
	LCALL	L156D
	JZ	L1524
	MOV	R5,#00CH
	LJMP	L0B58
;
;
L14F7:	CJNE	A,#004H,L1512
	LCALL	L384B
	LCALL	L3BAD
	CJNE	R4,#000H,L1524
	MOV	DPTR,#L216A
	LCALL	L3C05
	MOV	065H,#000H
	MOV	01FH,#00AH
	LJMP	L08F8
;
;
L1512:	CJNE	A,#002H,L1527
	JNB	061H,L151B
	LJMP	L0BEC
;
;
L151B:	LCALL	L384B
	MOV	DPTR,#L216A
	LCALL	L3AAE
;
L1524:	LJMP	L585F
;
;
L1527:	LJMP	L09B8
;
;
L152A:	MOV	DPTR,#L21DA
	MOVX	A,@DPTR		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	ANL	A,#00FH
	MOV	R1,A
	MOV	DPTR,#L0475
	MOVX	A,@DPTR		; DEFINITION DES LIGNES TELEPHONIQUES 0-3 (EpromPersonnalisation.txt, 2 bits/ligne: 00=interdite,01=radio,10=tel.sans prefixe,11=tel.avec prefixe). Absent/non pertinent si organe=MINI10. Cf. boucle de traitement au boot en L0112 (10 lignes, gatee par 047E.6). | DPTR=0x0475, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	R1,#000H,L153B
	LJMP	L1550
;
;
L153B:	MOV	R2,#001H
;
L153D:	CJNE	R2,#004H,L1543
	LJMP	L1546
;
;
L1543:	CJNE	R2,#008H,L154B
;
L1546:	INC	DPTR
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	LJMP	L154D
;
;
L154B:	RR	A
	RR	A
;
L154D:	INC	R2
	DJNZ	R1,L153D
;
L1550:	RET	
;
;
L1551:	LCALL	L152A
	ANL	A,#003H
	MOV	R2,A
	MOV	R0,#007H
	MOV	R3,#007H
	MOV	07DH,#007H
	RET	
;
;
L155F:	LCALL	L152A
	ANL	A,#003H
	MOV	R2,A
	MOV	R0,#008H
	MOV	R3,#008H
	MOV	07DH,#008H
	RET	
;
;
L156D:	MOV	R4,07DH
	CJNE	R4,#005H,L1574
;
L1572:	CLR	A
	RET	
;
;
L1574:	MOV	DPTR,#L047D
	MOVX	A,@DPTR		; FREQUENCE 5-TONS DU CARACTERE DE GROUPE 'G' (EpromPersonnalisation.txt) - 'G' = code UART 0Ch affiche sur le VFD SC20 lors de la saisie clavier (cf. table VFD deja confirmee). d3-d0 = valeur decimale 0-9 (ZVEI) ou 0-9/0Ah (CCIR, 'G'). | DPTR=0x047D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#00FH
	CJNE	A,#00AH,L1572
	MOV	DPTR,#L0466
	MOVX	A,@DPTR		; DPTR=0x0466, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	R4,#004H,L1586
	ANL	A,#008H
;
L1586:	CJNE	R4,#003H,L158B
	ANL	A,#004H
;
L158B:	CJNE	R4,#002H,L1590
	ANL	A,#002H
;
L1590:	CJNE	R4,#001H,L1595
	ANL	A,#001H
;
L1595:	RET	
;
;
L1596:	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	ANL	A,#008H		; EPROM perso 0x0468, masque 0x8 -> d3: activation/desactivation numerotation telephonique via le clavier
	JZ	L15A3
	MOV	A,#008H
	MOV	07DH,A
	MOV	R0,A
;
L15A3:	RET	
;
;
L15A4:	MOV	R0,#040H
	MOV	R1,#021H
	MOV	DPTR,#L21DA
	MOVX	A,@DPTR		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	ANL	A,#00FH
	MOV	DPTR,#L2001
	LCALL	L03D3
	MOV	R2,#01CH
	LCALL	L04C4
	RET	
;
;
L15BA:	MOV	DPTR,#L21DA
	MOVX	A,@DPTR		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	ANL	A,#00FH
	MOV	072H,A
	MOV	DPTR,#L2001
	LCALL	L03D3
	MOV	R0,DPL
	MOV	R1,DPH
	MOV	DPTR,#L2140
	MOV	R2,#01CH
	LCALL	L04C4
	RET	
;
;
;
; >>> STOCKAGE D'UN CHIFFRE SAISI DANS LE TAMPON D'AFFICHAGE (utilise par les
;     ecrans CANAL et APPEL SELECTIF N2): calcule la position d'ecriture a
;     partir du nombre de chiffres restants (07DH), stocke le chiffre (RAM
;     005H, deja charge par l'appelant), fait avancer le curseur de saisie via
;     L0355 (enfile un evenement de rafraichissement d'affichage), decremente
;     07DH.
;
L15D5:	SUBB	A,07DH
	MOV	R0,A
	MOV	@R0,005H
	MOV	A,R3
	ADD	A,07DH
	MOV	R1,A
	JBC	04CH,L15EB
;
L15E1:	LCALL	L0355
	DEC	07DH
	CLR	061H
	CLR	036H
	RET	
;
;
L15EB:	MOV	R1,#000H
	SJMP	L15E1
;
L15EF:	SUBB	A,07DH
	MOV	R0,A
	MOV	@R0,005H
	DEC	07DH
	RET	
;
;
L15F7:	MOV	DPTR,#L046B
	MOVX	A,@DPTR		; OPTIONS MISE SOUS TENSION/MICA/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. Code de deverrouillage 6 chiffres stocke a 06E1-06E6 si d6=1. | DPTR=0x046B, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L1605		; EPROM perso 0x046B -> d7: 1=ligne 0 non rechargee a la mise sous tension
	MOV	DPTR,#L201C
	MOVX	A,@DPTR		; DPTR=0x201C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=0) = 0x01C
	CJNE	A,#00BH,L1607
;
L1605:	CLR	A
	RET	
;
;
L1607:	MOV	A,#0FFH
	RET	
;
;
L160A:	MOV	DPTR,#L046B
	MOVX	A,@DPTR		; OPTIONS MISE SOUS TENSION/MICA/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. Code de deverrouillage 6 chiffres stocke a 06E1-06E6 si d6=1. | DPTR=0x046B, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#020H		; EPROM perso 0x046B, masque 0x20 -> d5: 1=option MICA presente (cryptophonie), sinon absente
	RET	
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR: MESSAGE VFD SC20 "CLE" lie A LA FONCTION DE
;     CRYPTOPHONIE (option MICA), active si le bit d5 de l'octet EPROM 0x046B
;     est actif (EpromPersonnalisation.txt: "option MICA presente"). Positions
;     6-8 ('C','L','E' - RAM 077H,078H,079H) forment "CLE". Position 4 (RAM
;     075H) est un CHIFFRE DYNAMIQUE (1-4) lu depuis l'EPROM/RAM de
;     personnalisation (bits0-1 de 0x2253, +1) - fonction precise du chiffre
;     encore non confirmee (peut-etre un numero de cle/canal crypto).
;
;
; >>> CONFIRME PAR L'UTILISATEUR: affichage "CLE"+chiffre lie a l'option MICA
;     (0x046B bit d5). Declenche par L13BF/L13EA (2 secondes de maintien de la
;     touche CLE, 0x0D SC20) - cf. note complete a L13BF pour tout le
;     mecanisme. Chiffre dynamique = numero de cle MICA (1-4), lu/stocke en
;     RAM 0x2253 (cf. L1434/L1441 pour la saisie du chiffre par l'utilisateur).
;
L1611:	MOV	079H,#00EH
	MOV	078H,#015H
	MOV	077H,#010H
	MOV	DPTR,#L2253
	MOVX	A,@DPTR		; DPTR=0x2253, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x253
	ANL	A,#003H
	INC	A
	MOV	075H,A
	MOV	076H,#024H
	MOV	074H,#024H
	MOV	073H,#024H
	MOV	072H,#024H
	MOV	R1,#000H
	LCALL	L0355
	RET	
;
;
;
; >>> CONFIRME - MESSAGE VFD SC20 FIXE: RAM 072H-077H = 'E','F','F','A','C','E' =
;     "EFFACE" (positions 7-8 = espaces) - message affiche lors d'une action
;     d'effacement (touche ou fonction memoire probable, a confirmer par le
;     contexte d'appel).
;
;
; >>> CONFIRME PAR L'UTILISATEUR: message "EFFACE" affiche lors de
;     l'effacement des cles de chiffrement MICA, declenche par un maintien de
;     6 secondes (continu, sans relachement intermediaire) de la touche CLE
;     (0x0D SC20) - cf. note complete a L13BF/L1406. Accompagne d'une tonalite
;     (L4587) et de l'impulsion d'effacement effective sur MN14 (L065D, via
;     l'ecran suivant 065H=0x1C, cf. L1494).
;
L1635:	MOV	072H,#00EH
	MOV	073H,#027H
	MOV	074H,#027H
	MOV	075H,#00AH
	MOV	076H,#010H
	MOV	077H,#00EH
	MOV	078H,#024H
	MOV	079H,#024H
	MOV	R1,#000H
	LCALL	L0355
	RET	
;
;
;
; >>> CONFIRME - MESSAGE VFD SC20 FIXE: RAM 072H-079H = 'E','C','H','E','C',
;     espace,'S','T' = "ECHEC ST" (positionne le flag 060H). Message d'echec
;     (français 'echec'=failure), probablement tronque a 8 caracteres d'un mot
;     plus long tel que 'ECHEC STOCKAGE' ou 'ECHEC ST[...]' - sens exact du
;     suffixe 'ST' a confirmer par le contexte d'appel.
;
L1653:	SETB	060H
	MOV	072H,#00EH
	MOV	073H,#010H
	MOV	074H,#011H
	MOV	075H,#00EH
	MOV	076H,#010H
	MOV	077H,#024H
	MOV	078H,#01CH
	MOV	079H,#01DH
	MOV	R1,#000H
	LCALL	L0355
	RET	
;
;
L1673:	JNB	044H,L1684
	LCALL	L5937
	MOV	P1,#0CFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#CFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P16,P17 | [si reellement pulsee -> commande extenseur 0xCF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	MOV	A,#07FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x7F -> puce=MN14 (CS=1) | instruction=ECRITURE | port=Port7 [FX1,FX2,FX3,FX4]
	MOV	064H,#01BH
;
L1684:	LJMP	L21C9
;
;
L1687:	LCALL	L4831
	SETB	04DH
	CLR	05CH
	MOV	A,#0FFH
	MOV	DPTR,#L21FC
	MOVX	@DPTR,A		; DPTR=0x21FC, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FC
	SETB	04FH
	MOV	R1,#001H
	LCALL	L034F
	JB	05AH,L16A3
	MOV	R1,#016H
	LCALL	L034F
;
L16A3:	MOV	064H,#011H
	LJMP	L21C9
;
;
L16A9:	JBC	005H,L16D8
	JBC	00DH,L1687
	JBC	010H,L16DE
	JBC	004H,L1673
	JBC	00FH,L16DB
	JBC	00EH,L16F9
	JBC	006H,L1702
	JBC	00CH,L16E1
	JBC	016H,L16F3
	JBC	015H,L16E4
	JBC	008H,L16E7
	JBC	019H,L16EA
	JBC	01AH,L16ED
	JBC	01BH,L16F0
	CLR	011H
	LJMP	L585F
;
;
L16D8:	LJMP	L1747
;
;
L16DB:	LJMP	L1806
;
;
L16DE:	LJMP	L1826
;
;
L16E1:	LJMP	L17ED
;
;
L16E4:	LJMP	L17A3
;
;
L16E7:	LJMP	L17A6
;
;
L16EA:	LJMP	L185C
;
;
L16ED:	LJMP	L187F
;
;
L16F0:	LJMP	L18A9
;
;
L16F3:	LCALL	L46A0
	LJMP	L21C9
;
;
L16F9:	LCALL	L467E
	JB	046H,L1702
	LJMP	L21C9
;
;
L1702:	LCALL	L4600
	JNB	053H,L170B
	LCALL	L5931
;
L170B:	LJMP	L21C9
;
;
L170E:	JNB	045H,L1736
	MOV	064H,#003H
	LCALL	L5937
	LCALL	L4709
	MOV	P1,#02EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#2EH -> bits actifs(1): RSTM2,ACKM,DATA,P15 | [si reellement pulsee -> commande extenseur 0x2E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LCALL	L03BF		; Appel avec P1 deja charge -> commande extenseur 0x2E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]
	JB	ACC.0,L172C
	MOV	04AH,#00EH
	LCALL	L453A
	LJMP	L21C9
;
;
L172C:	SETB	067H
	SETB	02AH
	LCALL	L566C
	LJMP	L21C9
;
;
L1736:	LCALL	L4648
	MOV	04AH,#000H
	SETB	01FH
	LCALL	L5600
	MOV	064H,#000H
	LJMP	L21C9
;
;
L1747:	JB	0D1H,L170E
	JNB	045H,L17A0
	JB	052H,L1755
	SETB	005H
	LJMP	L17A0
;
;
L1755:	JNB	053H,L1762
	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	JNB	ACC.1,L17A0		; EPROM perso 0x0465 -> d1: ecoute reseau commutable - passage ALT=0 >500ms valide ecoute+communication (avec d0)
	LJMP	L176B
;
;
L1762:	LCALL	L4618
	JB	ACC.0,L1770
	JNB	ACC.1,L17A0
;
L176B:	SETB	00BH
	LJMP	L179D
;
;
L1770:	MOV	R3,A
	JB	058H,L1776
	SETB	055H
;
L1776:	LCALL	L5931
	MOV	A,R3
	JNB	ACC.1,L17A0
	CLR	031H
	SETB	038H
	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JB	ACC.0,L178E
	MOV	059H,#032H
	LJMP	L179D
;
;
L178E:	MOV	059H,#001H
	MOV	A,065H
	CJNE	A,#002H,L179D
	CLR	035H
	SETB	024H
	MOV	07BH,#03EH
;
L179D:	MOV	064H,#004H
;
L17A0:	LJMP	L21C9
;
;
L17A3:	JNB	049H,L17EA
;
L17A6:	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.0,L17BD		; EPROM perso 0x0469 -> d0: appel d'alarme (temporisation stockee a 0484)
	MOV	DPTR,#L0483
	MOVX	A,@DPTR		; DPTR=0x0483, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,07CH,L17BD
	LCALL	L4798
	MOV	064H,#00FH
	LJMP	L21C9
;
;
L17BD:	CLR	06DH
	JB	046H,L17E4
	LCALL	L452E
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L17D8		; EPROM perso 0x046A -> d7: non documente, indique fixe a 0
	MOV	04AH,#00CH
	LCALL	L453A
	MOV	064H,#01DH
	LJMP	L21C9
;
;
L17D8:	MOV	04AH,#008H
	LCALL	L453A
	MOV	064H,#001H
	LJMP	L21C9
;
;
L17E4:	LCALL	L4541
	MOV	064H,#005H
;
L17EA:	LJMP	L21C9
;
;
L17ED:	JNB	000H,L17F6
	JNB	04BH,L1800
	JB	033H,L1800
;
L17F6:	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JB	ACC.0,L1800
	LCALL	L5937
;
L1800:	LCALL	L4632
	LJMP	L21C9
;
;
L1806:	MOV	064H,#007H
	CLR	06DH
	LCALL	L5937
	LCALL	L460F
	MOV	DPTR,#L0466
	MOVX	A,@DPTR		; DPTR=0x0466, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.7,L181D
	SETB	009H
	LJMP	L21C9
;
;
L181D:	MOV	04AH,#001H
	LCALL	L453A
	LJMP	L21C9
;
;
L1826:	MOV	A,065H
	CJNE	A,#005H,L182E
	LJMP	L21C9
;
;
L182E:	CJNE	A,#019H,L183D
	LCALL	L45DF
	LCALL	L5931
	MOV	064H,#024H
	LJMP	L21C9
;
;
L183D:	LCALL	L5931
	CLR	054H
	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JNB	ACC.1,L184C		; EPROM perso 0x0468 -> d1: signalisation exterieure klaxon - appel de groupe
	LCALL	L4712
;
L184C:	LCALL	L475D
	SETB	063H
	CLR	06DH
	LCALL	L474A
	MOV	064H,#003H
	LJMP	L21C9
;
;
L185C:	MOV	DPTR,#L08AA
	MOVX	A,@DPTR		; DPTR=0x08AA, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	DPTR,#L2251
	MOVX	@DPTR,A		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	JB	046H,L1876
	LCALL	L452E
	MOV	04AH,#006H
	LCALL	L453A
	MOV	064H,#01EH
	LJMP	L21C9
;
;
L1876:	LCALL	L45EB
	MOV	064H,#01FH
	LJMP	L21C9
;
;
L187F:	MOV	A,065H
	CJNE	A,#005H,L188F
	JNB	04DH,L188C
	SETB	00BH
	MOV	064H,#013H
;
L188C:	LJMP	L21C9
;
;
L188F:	MOV	064H,#020H
	LCALL	L4770
	LCALL	L4712
	CLR	06DH
	LCALL	L5937
	LCALL	L460F
	MOV	04AH,#001H
	LCALL	L453A
	LJMP	L21C9
;
;
L18A9:	MOV	A,065H
	CJNE	A,#005H,L18B9
	JNB	04DH,L18B6
	SETB	00BH
	MOV	064H,#013H
;
L18B6:	LJMP	L21C9
;
;
L18B9:	CLR	054H
	SETB	063H
	CLR	06DH
	LCALL	L475D
	LCALL	L4712
	MOV	064H,#020H
	JNB	04DH,L18B6
	SETB	023H
	SETB	00CH
	LJMP	L21C9
;
;
L18D2:	JBC	007H,L18EE
	JBC	00CH,L18F7
	JBC	009H,L18FF
	JBC	016H,L18EB
	CLR	008H
	CLR	00EH
	CLR	00DH
	CLR	01AH
	CLR	01BH
	LJMP	L585F
;
;
L18EB:	LJMP	L16F3
;
;
L18EE:	LCALL	L468A
	LCALL	L459D
	LJMP	L21C9
;
;
L18F7:	LCALL	L47C3
	CLR	054H
	LJMP	L1A7E
;
;
L18FF:	LCALL	L4648
	MOV	064H,#002H
	LJMP	L21C9
;
;
L1908:	JBC	00EH,L192A
	JBC	006H,L1948
	JBC	00AH,L194E
	JBC	013H,L1956
	JBC	016H,L1987
	CLR	00CH
	CLR	011H
	CLR	012H
	CLR	00DH
	CLR	010H
	CLR	008H
	CLR	01AH
	CLR	01BH
	LJMP	L585F
;
;
L192A:	LCALL	L467E
	JNB	048H,L193D
	SETB	01FH
	JNB	059H,L1940
	JB	062H,L1940
	MOV	052H,#014H
	SETB	031H
;
L193D:	LJMP	L21C9
;
;
L1940:	MOV	07BH,#040H
	SETB	024H
	LJMP	L1963
;
;
L1948:	LCALL	L4600
	LJMP	L21C9
;
;
L194E:	LCALL	L47C3
	CLR	054H
	LJMP	L1A7E
;
;
L1956:	MOV	A,07CH
	MOV	DPTR,#L2190
	MOVX	@DPTR,A		; DPTR=0x2190, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x190
	SETB	024H
	MOV	07BH,#03FH
	CLR	031H
;
L1963:	CLR	059H
	MOV	A,#002H
	LCALL	L47B0
	JB	05CH,L197C
	LCALL	L5931
	LCALL	L477E
	LCALL	L474A
	MOV	064H,#003H
	LJMP	L21C9
;
;
L197C:	MOV	059H,#0CDH
	SETB	038H
	MOV	064H,#00BH
	LJMP	L21C9
;
;
L1987:	LJMP	L16F3
;
;
L198A:	LJMP	L1AFA
;
;
L198D:	LJMP	L1B00
;
;
L1990:	LJMP	L1AC8
;
;
L1993:	LJMP	L16F3
;
;
L1996:	LCALL	L4700
	LJMP	L21C9
;
;
L199C:	JNB	047H,L19B1
	JB	0D1H,L19BF
	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	JB	ACC.7,L19B4		; EPROM perso 0x0465 -> d7: emission tonalite CCIR 'P' sur front descendant ALT / 'PQ' sur front montant
	LCALL	L4700
	MOV	R1,#00FH
	LCALL	L034F
;
L19B1:	LJMP	L21C9
;
;
L19B4:	SETB	038H
	MOV	059H,#00FH
	LCALL	L5964
	LJMP	L19C8
;
;
L19BF:	MOV	P1,#02EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#2EH -> bits actifs(1): RSTM2,ACKM,DATA,P15 | [si reellement pulsee -> commande extenseur 0x2E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LCALL	L03BF		; Appel avec P1 deja charge -> commande extenseur 0x2E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]
	JB	ACC.0,L19CB
;
L19C8:	LCALL	L468D
;
L19CB:	LJMP	L21C9
;
;
L19CE:	JBC	00BH,L1A31
	JBC	009H,L1996
	JBC	00EH,L1A20
	JBC	006H,L1A37
	JBC	007H,L199C
	JBC	00CH,L1A12
	JBC	011H,L1A15
	JBC	008H,L1990
	JBC	00AH,L1A12
	JBC	012H,L1A26
	JBC	016H,L1993
	JBC	015H,L1A09
	JBC	00FH,L1A18
	JBC	010H,L1A18
	JBC	005H,L198D
	JBC	040H,L198A
	JBC	01AH,L1A0C
	JBC	01BH,L1A0F
	CLR	00DH
	LJMP	L585F
;
;
L1A09:	LJMP	L1AF4
;
;
L1A0C:	LJMP	L187F
;
;
L1A0F:	LJMP	L18A9
;
;
L1A12:	LJMP	L1A7E
;
;
L1A15:	LJMP	L1A7C
;
;
L1A18:	MOV	A,#000H
	LCALL	L47B0
	LJMP	L21C9
;
;
L1A20:	LCALL	L467E
	LJMP	L1A40
;
;
L1A26:	SETB	031H
	MOV	052H,#00AH
	MOV	064H,#00AH
	LJMP	L21C9
;
;
L1A31:	LCALL	L5977
	LJMP	L21C9
;
;
L1A37:	LCALL	L4600
	LCALL	L5931
	JB	046H,L1A77
;
L1A40:	JNB	04DH,L1A5B
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.3,L1A5B		; EPROM perso 0x046A -> d3: suivi de communication (increment de canal si porteuse perdue jusqu'a la retrouver)
	MOV	A,07CH
	MOV	DPTR,#L21F9
	MOVX	@DPTR,A		; DPTR=0x21F9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F9
	SETB	038H
	MOV	059H,#014H
	MOV	064H,#019H
	LJMP	L21C9
;
;
L1A5B:	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JB	ACC.6,L1A65		; EPROM perso 0x0468 -> d6: retour en veille automatique apres disparition porteuse >6s
	LJMP	L21C9
;
;
L1A65:	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	MOV	052H,#002H
	JB	ACC.0,L1A72
	MOV	052H,#03CH
;
L1A72:	SETB	031H
	LJMP	L21C9
;
;
L1A77:	CLR	031H
	LJMP	L21C9
;
;
L1A7C:	CLR	054H
;
L1A7E:	CLR	063H
	CLR	032H
	CLR	038H
	CLR	031H
	LCALL	L4709
	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JB	ACC.0,L1AA7
	MOV	A,065H
	CJNE	A,#01CH,L1A98
	LJMP	L1AA7
;
;
L1A98:	CJNE	A,#019H,L1AA4
	MOV	064H,#007H
	LCALL	L45B3
	LJMP	L1F80
;
;
L1AA4:	LCALL	L4541
;
L1AA7:	MOV	064H,#009H
	JNB	054H,L1AB8
	MOV	04AH,#004H
	LCALL	L453A
	SETB	06FH
	LJMP	L21C9
;
;
L1AB8:	MOV	A,07CH
	LCALL	L0410
	LCALL	L045A
	LCALL	L4648
	SETB	052H
	LJMP	L21C9
;
;
L1AC8:	LCALL	L5937
	MOV	A,01FH
	CJNE	A,#007H,L1AEF
	CLR	031H
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.6,L1AE3		; EPROM perso 0x046C -> d6=0(actif si 0): fonction DTMF active, sinon code 5-tons 'GX' remplace le DTMF
	SETB	067H
	SETB	02AH
	MOV	064H,#01AH
	LJMP	L21C9
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR (option EPROM 046C bit d6) - GENERATION DU
;     CODE 5-TONS 'GX' EN SUBSTITUT DU DTMF: quand d6=0 (DTMF INACTIF, cf.
;     EpromPersonnalisation.txt: 'sinon c'est le code 5-tons GX qui remplace le
;     DTMF'), declenche le MODE 0x0B (L2FA9, cf. note complete a mettre a jour -
;     envoie une tonalite courte reutilisant le chiffre compose par
;     l'utilisateur). Si d6=1 (DTMF actif), le DTMF est gere autrement, sans
;     passer par ce mode.
;
L1AE3:	MOV	04AH,#00BH
	LCALL	L453A
	MOV	064H,#01AH
	LJMP	L21C9
;
;
L1AEF:	CLR	059H
	LJMP	L1CD2
;
;
L1AF4:	JB	049H,L1B46
	LJMP	L1B11
;
;
L1AFA:	JB	041H,L1B4F
	LJMP	L1B1A
;
;
L1B00:	JNB	0D1H,L1B06
	LJMP	L1747
;
;
L1B06:	JB	052H,L1B0E
	SETB	005H
	LJMP	L1B5F
;
;
;
; >>> AIGUILLAGE SELON L'ETAT PERSISTANT D'ALTT (flag 045H): la branche prise
;     ICI (045H clair, cf. L1B23 juste en dessous) correspond au RELACHEMENT
;     d'ALTT, symetrique de la branche opposee qui traite l'appui (menant au
;     mode 0x02 'P', cf. note complete a L2E61) - CONFIRME LE MECANISME
;     COMPLET P/PQ (cf. note complete a L1B35).
;
L1B0E:	JB	045H,L1B46
;
L1B11:	JNB	03FH,L1B1A
	LCALL	L0617
	LJMP	L21C9
;
;
L1B1A:	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.2,L1B23		; EPROM perso 0x047E -> d2 (INFERE): observe a 3 endroits distincts (~L4667,~L4F9E,~L4FC0) systematiquement lie a la notion de DUREE DE COMMUNICATION - a l'un des sites, si d2=1, charge explicitement l'octet 0478 (duree de communication documentee) dans une variable RAM (053H) -> HYPOTHESE: 047E.2 pourrait etre un second interrupteur (specifique?) de la fonction 'limitation de duree', a rapprocher de 0469.5 documente pour la meme fonction (redondance ou contexte differents, ex. ligne tel. vs canal radio - non tranche).
	CLR	032H
;
;
; >>> TEST DE L'OPTION CCIR 'P'/'PQ' (EPROM 0465 bit d7) COTE RELACHEMENT
;     D'ALTT (cf. note complete a L1B0E) - miroir du test cote appui (L4667).
;
L1B23:	LCALL	L4709
	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	JB	ACC.7,L1B35		; EPROM perso 0x0465 -> d7: emission tonalite CCIR 'P' sur front descendant ALT / 'PQ' sur front montant
	LCALL	L4648
	SETB	052H
	LJMP	L21C9
;
;
;
; >>> CONFIRME - MODE 0x03 = TONALITE CCIR 'PQ' (emise au relachement d'ALTT,
;     cf. note complete a L1B0E). Envoie les octets 0x00,0x02,0x0B,0x0C -
;     EXACTEMENT les 3 memes octets que le mode 0x02/'P' (0x00,0x02,0x0B) PLUS
;     UN OCTET SUPPLEMENTAIRE (0x0C) - correspond parfaitement a 'PQ' = tonalite
;     'P' suivie d'une seconde tonalite, cf. note complete au mode 0x02 (L2E61)
;     et au mode 0x03 (L2E72).
;
L1B35:	JNB	038H,L1B3A
	SETB	005H
;
L1B3A:	MOV	04AH,#003H
	LCALL	L453A
	MOV	064H,#00AH
	LJMP	L21C9
;
;
L1B46:	JNB	03FH,L1B4F
	LCALL	L0610
	LJMP	L21C9
;
;
L1B4F:	LCALL	L5937
	LCALL	L4652
	JNB	063H,L1B5F
	CLR	063H
	MOV	R1,#001H
	LCALL	L034F
;
L1B5F:	LJMP	L21C9
;
;
L1B62:	JBC	005H,L1BAC
	JBC	040H,L1BBF
	JBC	006H,L1B9D
	JBC	00BH,L1BC5
	JBC	00EH,L1BA6
	JBC	00FH,L1B93
	JBC	010H,L1B98
	JBC	016H,L1BE4
	JBC	01AH,L1B8D
	JBC	01BH,L1B90
	CLR	00DH
	CLR	008H
	CLR	00CH
	CLR	011H
	CLR	012H
	LJMP	L585F
;
;
L1B8D:	LJMP	L187F
;
;
L1B90:	LJMP	L18A9
;
;
L1B93:	CLR	038H
	LJMP	L1806
;
;
L1B98:	CLR	038H
	LJMP	L1826
;
;
L1B9D:	LCALL	L4600
	LCALL	L5931
	LJMP	L21C9
;
;
L1BA6:	LCALL	L467E
	LJMP	L21C9
;
;
L1BAC:	CLR	038H
	SETB	06DH
	JNB	04DH,L1BB9
	MOV	064H,#013H
	LJMP	L21C9
;
;
L1BB9:	MOV	064H,#000H
	LJMP	L21C9
;
;
L1BBF:	JNB	041H,L1BB9
	LJMP	L1BCE
;
;
L1BC5:	JNB	03FH,L1BCE
	LCALL	L0610
	LJMP	L21C9
;
;
L1BCE:	LCALL	L5937
	CLR	06DH
	CLR	00EH
	LCALL	L474A
	LCALL	L4652
	LCALL	L477E
	MOV	064H,#003H
	LJMP	L21C9
;
;
L1BE4:	LJMP	L16F3
;
;
L1BE7:	JBC	005H,L1C1E
	JBC	006H,L1C2F
	JBC	008H,L1C38
	JBC	00AH,L1C53
	JBC	00FH,L1C16
	JBC	010H,L1C16
	JBC	016H,L1C69
	JBC	015H,L1C35
	JBC	01AH,L1C10
	JBC	01BH,L1C13
	CLR	012H
	CLR	011H
	CLR	00DH
	CLR	00CH
	LJMP	L585F
;
;
L1C10:	LJMP	L187F
;
;
L1C13:	LJMP	L18A9
;
;
L1C16:	CLR	031H
	LCALL	L5977
	LJMP	L1806
;
;
L1C1E:	LCALL	L4618
	JNB	053H,L1C2C
	LCALL	L5977
	CLR	031H
	MOV	064H,#000H
;
L1C2C:	LJMP	L21C9
;
;
L1C2F:	LCALL	L4600
	LJMP	L21C9
;
;
L1C35:	JNB	049H,L1C50
;
;
; >>> CONFIRME: gestion de la TONALITE DE PRESENCE (bits d3-d2 de l'octet 0x0465).
;     Positionne un mode (variable interne 04AH = 4 ou 7) selon d3/d2, consomme plus
;     loin par le sous-systeme d'appel selectif/tonalites.
;
;
; >>> CONFIRME - DECODAGE DE LA 'TONALITE DE PRESENCE' (EPROM 0465 bits d3-d2):
;     d3=1 -> MODE 0x04 (envoi d'appel selectif par APPEL puis * , cf. note
;     complete a L2E88) ; d3=0 et d2=1 -> MODE 0x07 (simple ton de presence, cf.
;     note complete a L2EA7) ; d3=0 et d2=0 -> aucune tonalite (option
;     desactivee, cf. EpromPersonnalisation.txt).
;
L1C38:	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	MOV	04AH,#004H
	JB	ACC.3,L1C48		; EPROM perso 0x0465 -> d3: tonalite de presence - appel selectif par APPEL puis '*' (si combine a d2, voir doc)
	JNB	ACC.2,L1C50		; EPROM perso 0x0465 -> d2: tonalite de presence - envoi d'un ton de presence
	MOV	04AH,#007H
;
L1C48:	LCALL	L453A
	CLR	031H
	MOV	064H,#006H
;
L1C50:	LJMP	L21C9
;
;
L1C53:	LCALL	L5977
	JNB	053H,L1C5C
	LCALL	L5931
;
L1C5C:	SETB	06DH
	MOV	07BH,#040H
	SETB	024H
	MOV	064H,#000H
	LJMP	L21C9
;
;
L1C69:	LJMP	L16F3
;
;
L1C6C:	JBC	007H,L1C8A
	JBC	00EH,L1CAD
	JBC	009H,L1C93
	JBC	00BH,L1CB8
	JBC	016H,L1CDE
	CLR	01AH
	CLR	01BH
	CLR	00DH
	CLR	008H
	CLR	00CH
	CLR	015H
	LJMP	L585F
;
;
L1C8A:	LCALL	L468A
	LCALL	L459D
	LJMP	L21C9
;
;
L1C93:	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	LCALL	L4648
	JB	ACC.3,L1CAA
	LCALL	L5977
	SETB	024H
	MOV	07BH,#040H
	MOV	064H,#000H
	SETB	06DH
;
L1CAA:	LJMP	L21C9
;
;
L1CAD:	LCALL	L467E
	SETB	038H
	MOV	059H,#046H
	LJMP	L21C9
;
;
L1CB8:	LCALL	L452E
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L1CD2		; EPROM perso 0x046A -> d7: non documente, indique fixe a 0
	MOV	A,07CH
	JNZ	L1CD2
	MOV	04AH,#00CH
	LCALL	L453A
	MOV	064H,#01DH
	LJMP	L21C9
;
;
L1CD2:	MOV	04AH,#008H
	LCALL	L453A
	MOV	064H,#001H
	LJMP	L21C9
;
;
L1CDE:	LJMP	L16F3
;
;
L1CE1:	CLR	031H
	CLR	038H
	SETB	009H
	CLR	054H
	MOV	064H,#009H
	LJMP	L21C9
;
;
L1CEF:	LJMP	L16F3
;
;
L1CF2:	JBC	00EH,L1D19
	JBC	007H,L1D1F
	JBC	009H,L1D2C
	JBC	00BH,L1D7C
	JBC	011H,L1CE1
	JBC	016H,L1CEF
	CLR	01AH
	CLR	01BH
	CLR	006H
	CLR	00CH
	CLR	008H
	CLR	00FH
	CLR	010H
	CLR	012H
	CLR	00DH
	LJMP	L585F
;
;
L1D19:	LCALL	L467E
	LJMP	L21C9
;
;
L1D1F:	SETB	01FH
	MOV	R1,#00FH
	LCALL	L034F
	MOV	04AH,#010H
	LJMP	L21C9
;
;
L1D2C:	MOV	R1,#016H
	LCALL	L034F
	CLR	067H
	SETB	02AH
	JB	051H,L1D6F
	SETB	038H
	MOV	059H,#092H
	SETB	031H
	MOV	052H,#07EH
	JB	05AH,L1D5A
	MOV	DPTR,#L0467
	MOVX	A,@DPTR		; DPTR=0x0467, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L1D5A
	MOV	A,065H
	CJNE	A,#005H,L1D5A
	MOV	DPTR,#L2160
	MOVX	A,@DPTR		; DPTR=0x2160, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x160
	ANL	A,#00FH
	CJNE	A,#00BH,L1D5D
;
L1D5A:	LJMP	L21C9
;
;
L1D5D:	MOV	052H,#023H
	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.1,L1D6C		; EPROM perso 0x047E -> d1 (INFERE): observe a plusieurs endroits (L1D6C, L2CA6...), gate un traitement conditionnel (ex: appel a L47B0 avec A=0 dans un cas)
	MOV	A,#000H
	LCALL	L47B0
;
L1D6C:	LJMP	L21C9
;
;
L1D6F:	MOV	071H,#00BH
	SETB	01DH
	SETB	06DH
	MOV	064H,#000H
	LJMP	L21C9
;
;
L1D7C:	MOV	DPTR,#L0467
	MOVX	A,@DPTR		; DPTR=0x0467, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L1D94
	JB	05AH,L1D94
	MOV	A,065H
	CJNE	A,#005H,L1D94
	MOV	DPTR,#L2160
	MOVX	A,@DPTR		; DPTR=0x2160, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x160
	ANL	A,#00FH
	CJNE	A,#00BH,L1D9E
;
L1D94:	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JNB	ACC.2,L1D9E		; EPROM perso 0x0468 -> d2: signalisation exterieure klaxon - appel individuel
	LCALL	L4712
;
L1D9E:	LCALL	L475D
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.0,L1DAA		; EPROM perso 0x046C -> d0=0(actif si 0): inhibe l'emission de la sonnerie locale sur le canal courant
	SETB	02AH
;
L1DAA:	SETB	067H
	SETB	01FH
	MOV	04AH,#005H
	MOV	059H,#06AH
	SETB	038H
	LCALL	L5964
	MOV	064H,#008H
	LJMP	L21C9
;
;
L1DBF:	CLR	038H
	LCALL	L5977
	JB	05AH,L1DDC
	MOV	DPTR,#L0467
	MOVX	A,@DPTR		; DPTR=0x0467, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L1DDC
	MOV	A,065H
	CJNE	A,#005H,L1DDC
	MOV	DPTR,#L2160
	MOVX	A,@DPTR		; DPTR=0x2160, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x160
	ANL	A,#00FH
	CJNE	A,#00BH,L1DFE
;
L1DDC:	MOV	A,#000H
	LCALL	L47B0
	MOV	064H,#009H
	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.4,L1DEE		; EPROM perso 0x047E -> d4 (INFERE): si actif (ou flag RAM 054H actif), positionne le flag interne 009H.
	JB	054H,L1DF3
;
L1DEE:	SETB	009H
	LJMP	L21C9
;
;
L1DF3:	MOV	04AH,#004H
	LCALL	L453A
	SETB	06FH
	LJMP	L21C9
;
;
L1DFE:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.7,L1E0C		; EPROM perso 0x046C -> d7=0(actif si 0): renvoi sur canal dedie si bit a 1 -> renvoi sur canal courant (lien 06E0)
	MOV	DPTR,#L06E0
	MOVX	A,@DPTR		; DPTR=0x06E0, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	LCALL	L045A
;
L1E0C:	MOV	01FH,#004H
	MOV	04AH,#009H
	LCALL	L453A
	MOV	064H,#00CH
	LJMP	L21C9
;
;
L1E1B:	JBC	005H,L1E62
	JBC	040H,L1E81
	JBC	015H,L1E5C
	JBC	00EH,L1E53
	JBC	007H,L1EA0
	JBC	011H,L1EA6
	JBC	00AH,L1DBF
	JBC	00BH,L1EB2
	JBC	016H,L1E59
	JBC	01AH,L1E4D
	JBC	01BH,L1E50
	CLR	00CH
	CLR	006H
	CLR	008H
	CLR	00FH
	CLR	010H
	CLR	012H
	CLR	00DH
	LJMP	L585F
;
;
L1E4D:	LJMP	L187F
;
;
L1E50:	LJMP	L18A9
;
;
L1E53:	LCALL	L467E
	LJMP	L21C9
;
;
L1E59:	LJMP	L16F3
;
;
L1E5C:	JNB	049H,L1E9D
	LJMP	L1E81
;
;
L1E62:	JNB	045H,L1E9D
	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.3,L1E78		; EPROM perso 0x047E -> d3 (INFERE): si actif, positionne un mode d'affichage (04AH=011H) et appelle L453A avec 064H=025H.
	MOV	04AH,#011H
	LCALL	L453A
	MOV	064H,#025H
	LJMP	L21C9
;
;
L1E78:	JNB	03FH,L1E81
	LCALL	L0610
	LJMP	L21C9
;
;
L1E81:	LCALL	L5937
	LCALL	L474A
	SETB	01FH
	MOV	04AH,#000H
	LCALL	L4652
	LCALL	L477E
	MOV	065H,#000H
	MOV	R1,#001H
	LCALL	L034F
	MOV	064H,#003H
;
L1E9D:	LJMP	L21C9
;
;
L1EA0:	LCALL	L468A
	LJMP	L21C9
;
;
L1EA6:	LCALL	L5977
	CLR	031H
	CLR	054H
	CLR	038H
	LJMP	L1DDC
;
;
L1EB2:	SETB	038H
	JB	067H,L1ED0
	MOV	059H,#06AH
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.0,L1EC3		; EPROM perso 0x046C -> d0=0(actif si 0): inhibe l'emission de la sonnerie locale sur le canal courant
	SETB	02AH
;
L1EC3:	SETB	067H
	SETB	01FH
	MOV	04AH,#005H
	LCALL	L5964
	LJMP	L21C9
;
;
L1ED0:	MOV	059H,#092H
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.0,L1EDD		; EPROM perso 0x046C -> d0=0(actif si 0): inhibe l'emission de la sonnerie locale sur le canal courant
	LCALL	L4648
;
L1EDD:	CLR	067H
	LCALL	L5977
	LJMP	L21C9
;
;
L1EE5:	LJMP	L1F80
;
;
L1EE8:	LJMP	L187F
;
;
L1EEB:	LJMP	L18A9
;
;
L1EEE:	JBC	00EH,L1F2A
	JBC	006H,L1F51
	JBC	007H,L1F6B
	JBC	009H,L1F71
	JBC	00AH,L1EE5
	JBC	00BH,L1F77
	JBC	00FH,L1F57
	JBC	010H,L1F5C
	JBC	016H,L1F27
	JBC	008H,L1F1F
	JBC	01AH,L1EE8
	JBC	01BH,L1EEB
	CLR	015H
	CLR	00CH
	CLR	011H
	CLR	012H
	CLR	00DH
	LJMP	L585F
;
;
L1F1F:	MOV	07BH,#03DH
	SETB	024H
	LJMP	L585F
;
;
L1F27:	LJMP	L16F3
;
;
L1F2A:	LCALL	L467E
	JNB	048H,L1F3B
	JB	06FH,L1F3E
	JB	031H,L1F3B
	SETB	031H
	MOV	052H,#002H
;
L1F3B:	LJMP	L21C9
;
;
L1F3E:	CLR	06FH
	SETB	038H
	MOV	DPTR,#L047B
	MOVX	A,@DPTR		; DUREE DE PORTEUSE avant 1ere sequence d'appel selectif (EpromPersonnalisation.txt): valeur * 10ms. | DPTR=0x047B, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). DUREE DE PORTEUSE avant 1ere sequence d'appel selectif (EpromPersonnalisation.txt): valeur * 10ms.
	MOV	B,A
	MOV	A,#06EH
	SUBB	A,B
	MOV	059H,A
	LJMP	L21C9
;
;
L1F51:	LCALL	L4600
	LJMP	L21C9
;
;
L1F57:	SETB	00FH
	LJMP	L1F5E
;
;
L1F5C:	SETB	010H
;
L1F5E:	MOV	064H,#000H
	CLR	031H
	CLR	038H
	LCALL	L5977
	LJMP	L21C9
;
;
L1F6B:	LCALL	L468A
	LJMP	L21C9
;
;
L1F71:	LCALL	L4648
	LJMP	L21C9
;
;
L1F77:	MOV	04AH,#004H
	LCALL	L453A
	LJMP	L21C9
;
;
L1F80:	SETB	06DH
	CLR	062H
	MOV	DPTR,#L21FA
	MOV	A,07CH
	MOVX	@DPTR,A		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
	JB	05AH,L1FA0
	MOV	A,065H
	CJNE	A,#005H,L1FA0
	MOV	065H,#000H
	SETB	024H
	MOV	07BH,#00DH
	LCALL	L5977
	LJMP	L1FB0
;
;
L1FA0:	MOV	A,065H
	CJNE	A,#01CH,L1FA8
	LJMP	L1FB0
;
;
L1FA8:	LCALL	L5977
	MOV	R1,#001H
	LCALL	L034F
;
L1FB0:	MOV	DPTR,#L0466
	MOVX	A,@DPTR		; DPTR=0x0466, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.5,L1FB9
	SETB	054H
;
L1FB9:	LCALL	L0577
	JB	04DH,L1FC5
	MOV	064H,#000H
	LJMP	L1AB8
;
;
L1FC5:	SETB	04FH
	JB	05AH,L1FCF
	MOV	R1,#016H
	LCALL	L034F
;
L1FCF:	LCALL	L4831
	MOV	064H,#011H
	LJMP	L21C9
;
;
L1FD8:	JBC	005H,L2012
	JBC	015H,L201B
	JBC	00EH,L200C
	JBC	007H,L2024
	JBC	006H,L2035
	JBC	00FH,L203E
	JBC	010H,L203E
	JBC	00CH,L2009
	JBC	00BH,L2046
	JBC	00AH,L204F
	JBC	009H,L206D
	JBC	016H,L207B
	CLR	01AH
	CLR	01BH
;
L2000:	CLR	012H
	CLR	008H
	CLR	00DH
	LJMP	L585F
;
;
L2009:	LJMP	L1A7E
;
;
L200C:	LCALL	L467E
	LJMP	L21C9
;
;
L2012:	JNB	045H,L2046
	LCALL	L4587
;
L2018:	LJMP	L21C9
;
;
L201B:	JNB	049H,L2046
	LCALL	L4587
	LJMP	L21C9
;
;
L2024:	JNB	047H,L2032
	SETB	038H
	MOV	059H,#00AH
	LCALL	L5964
	LCALL	L468D
;
L2032:	LJMP	L21C9
;
;
L2035:	LCALL	L4600
	LCALL	L5931
	LJMP	L21C9
;
;
L203E:	MOV	A,#000H
	LCALL	L47B0
	LJMP	L21C9
;
;
L2046:	LCALL	L5977
	LCALL	L5931
	LJMP	L21C9
;
;
L204F:	MOV	064H,#003H
	JB	046H,L2061
	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JNB	ACC.6,L2061		; EPROM perso 0x0468 -> d6: retour en veille automatique apres disparition porteuse >6s
	MOV	052H,#03CH
	SETB	031H
;
L2061:	JNB	045H,L206A
	LCALL	L5977
	LCALL	L4652
;
L206A:	LJMP	L21C9
;
;
L206D:	LCALL	L4648
	LCALL	L5977
	SETB	031H
	MOV	052H,#00FH
	LJMP	L21C9
;
;
L207B:	LJMP	L16F3
;
;
L207E:	JBC	00EH,L20AF
	JBC	007H,L20DD
	JBC	00CH,L20AC
	JBC	00BH,L20A6
	JBC	009H,L20CE
	JBC	074H,L20A9
	JBC	016H,L20DA
	JBC	011H,L20C9
	JBC	006H,L20C3
	CLR	01AH
	CLR	01BH
	CLR	012H
	CLR	008H
	CLR	00DH
	LJMP	L585F
;
;
L20A6:	LJMP	L2130
;
;
L20A9:	LJMP	L215E
;
;
L20AC:	LJMP	L1A7E
;
;
L20AF:	LCALL	L467E
	JNB	048H,L20C0
	SETB	052H
	LCALL	L477E
	LCALL	L474A
	MOV	064H,#003H
;
L20C0:	LJMP	L21C9
;
;
L20C3:	LCALL	L4600
	LJMP	L21C9
;
;
L20C9:	CLR	054H
	LJMP	L21C9
;
;
L20CE:	JB	06EH,L20D7
	LCALL	L4648
	LJMP	L21C9
;
;
L20D7:	LJMP	L2153
;
;
L20DA:	LCALL	L46A0
;
L20DD:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.6,L212A		; EPROM perso 0x046C -> d6=0(actif si 0): fonction DTMF active, sinon code 5-tons 'GX' remplace le DTMF
	JNB	06AH,L20F7
	MOV	A,07CH
	MOV	DPTR,#L2001
	LCALL	L03D3
	MOVX	A,@DPTR		; DPTR=0x2001 (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	ANL	A,#00FH
	CJNE	A,#00BH,L210F
	CLR	06AH
;
L20F7:	MOV	DPTR,#L2008
	MOV	A,01FH
	JZ	L2101
	MOV	DPTR,#L216B
;
L2101:	MOV	A,07CH
	LCALL	L03D3
	MOVX	A,@DPTR		; DPTR=0x216B (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	ANL	A,#00FH
	CJNE	A,#00BH,L210F
	LJMP	L21AA
;
;
L210F:	MOV	R1,01FH
	CJNE	R1,#000H,L2122
	MOV	DPTR,#L216B
	MOVX	@DPTR,A		; DPTR=0x216B, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x16B
	MOV	R1,A
	MOV	A,#00BH
	MOV	R2,#007H
;
L211D:	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x216C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x16C
	DJNZ	R2,L211D
	MOV	A,R1
;
L2122:	SETB	070H
	SETB	072H
	MOV	R1,A
	LJMP	L21C9
;
;
L212A:	LCALL	L468D
	LJMP	L21C9
;
;
L2130:	MOV	01AH,#000H
	MOV	A,07CH
	MOV	DPTR,#L2000
	LCALL	L03D3
	MOVX	A,@DPTR		; DPTR=0x2000 (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	ANL	A,#00FH
	CLR	06AH
;
L2140:	CJNE	A,#003H,L2145
	SETB	06AH
;
L2145:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.6,L2153		; EPROM perso 0x046C -> d6=0(actif si 0): fonction DTMF active, sinon code 5-tons 'GX' remplace le DTMF
	SETB	067H
;
L214E:	SETB	02AH
	LJMP	L21C9
;
;
;
; >>> Meme test EPROM 046C bit d6 (cf. note complete a L1AE3) dans un AUTRE
;     contexte de touche: ici c'est quand d6=1 (DTMF ACTIF) que le MODE 0x0A
;     (L2F25) est declenche - fonction precise de ce mode toujours a confirmer,
;     mais le lien avec l'option GX/DTMF est maintenant etabli.
;
L2153:	MOV	04AH,#00AH
	LCALL	L453A
	SETB	06EH
;
L215B:	LJMP	L21C9
;
;
L215E:	INC	01AH
;
L2160:	MOV	A,01AH
	JNB	06AH,L2186
	CJNE	A,#007H,L2170
;
L2168:	CLR	06AH
;
L216A:	MOV	01AH,#000H
	LJMP	L218C
;
;
L2170:	MOV	A,07CH
;
L2172:	MOV	DPTR,#L2001
	LCALL	L03D3
	MOV	A,01AH
	ADD	A,DPL
	MOV	DPL,A
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	CJNE	A,#00BH,L21B0
	SJMP	L2168
;
L2186:	CJNE	A,#008H,L218C
	LJMP	L21AA
;
;
L218C:	MOV	A,01FH
;
L218E:	JZ	L2196
;
L2190:	MOV	DPTR,#L216B
	LJMP	L2199
;
;
L2196:	MOV	DPTR,#L2008
;
L2199:	MOV	A,07CH
	LCALL	L03D3
;
L219E:	MOV	A,01AH
;
L21A0:	ADD	A,DPL
	MOV	DPL,A
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	CJNE	A,#00BH,L21B0
;
L21AA:	LCALL	L4648
	LJMP	L21C9
;
;
L21B0:	MOV	R1,01FH
	CJNE	R1,#000H,L21C1
	MOV	DPTR,#L216B
;
L21B8:	MOV	R1,A
;
L21B9:	MOV	A,01AH
	ADD	A,DPL
	MOV	DPL,A
;
L21BF:	MOV	A,R1
	MOVX	@DPTR,A		; DPTR=0x216B, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x16B
;
L21C1:	SETB	070H
	SETB	072H
;
L21C5:	MOV	R1,A
;
L21C6:	LJMP	L21C9
;
;
L21C9:	SETB	023H
	LJMP	L585F
;
;
L21CE:	JBC	007H,L21E6
	JBC	009H,L21EB
	JBC	016H,L21FB
	CLR	01AH
	CLR	01BH
;
L21DB:	CLR	008H
	CLR	015H
	CLR	00CH
;
L21E1:	CLR	00DH
	LJMP	L585F
;
;
L21E6:	LCALL	L468A
	SJMP	L21C9
;
L21EB:	MOV	A,07CH
	LCALL	L0410
	LCALL	L045A
;
L21F3:	LCALL	L4648
	MOV	064H,#009H
;
L21F9:	SJMP	L21C9
;
L21FB:	LCALL	L46A0
;
L21FE:	SJMP	L21C9
;
L2200:	JBC	00EH,L222F
	JBC	00FH,L2235
	JBC	010H,L223E
	JBC	007H,L2248
	JBC	009H,L2250
	JBC	00AH,L225D
	JBC	005H,L2274
	JBC	040H,L2280
	CLR	01AH
	CLR	01BH
	CLR	006H
	CLR	008H
	CLR	015H
	CLR	00CH
	CLR	011H
	CLR	012H
	CLR	016H
	CLR	00DH
	LJMP	L585F
;
;
L222F:	LCALL	L467E
	LJMP	L2294
;
;
L2235:	MOV	04AH,#001H
	LCALL	L453A
;
L223B:	LJMP	L2294
;
;
L223E:	CLR	050H
;
L2240:	SETB	010H
;
L2242:	MOV	064H,#000H
	LJMP	L2294
;
;
L2248:	SETB	01FH
;
L224A:	MOV	04AH,#010H
	LJMP	L2294
;
;
L2250:	SETB	031H
;
L2252:	MOV	052H,#096H
	SETB	06EH
;
L2257:	LCALL	L4700
	LJMP	L2294
;
;
L225D:	JBC	06EH,L226C
	CLR	067H
	SETB	02AH
	SETB	052H
	LCALL	L4709
	LJMP	L2294
;
;
L226C:	MOV	052H,#096H
	SETB	031H
	LJMP	L2294
;
;
L2274:	JNB	045H,L2294
	JNB	03FH,L2280
	LCALL	L0610
	LJMP	L21C9
;
;
L2280:	CLR	06EH
	CLR	050H
	MOV	R1,#001H
	LCALL	L034F
	LCALL	L474A
	CLR	06DH
	MOV	064H,#003H
	LCALL	L4652
;
L2294:	LJMP	L21C9
;
;
L2297:	JBC	007H,L22A3
	JBC	009H,L22A9
	JBC	00EH,L22AF
	LJMP	L21C9
;
;
L22A3:	LCALL	L468A
	LJMP	L21C9
;
;
L22A9:	LCALL	L4648
	LJMP	L21C9
;
;
L22AF:	LCALL	L467E
	MOV	064H,#008H
	LJMP	L1E78
;
;
L22B8:	LJMP	L222F
;
;
L22BB:	LJMP	L2248
;
;
L22BE:	JBC	00EH,L22B8
	JBC	00AH,L22ED
	JBC	007H,L22BB
	JBC	009H,L22FC
	JBC	013H,L2308
	JBC	012H,L22EB
	JBC	00FH,L2310
	JBC	00CH,L2320
	CLR	01AH
	CLR	01BH
	CLR	006H
	CLR	008H
	CLR	015H
	CLR	011H
	CLR	010H
	CLR	016H
	CLR	00DH
	LJMP	L585F
;
;
L22EB:	CLR	031H
;
L22ED:	MOV	04AH,#008H
	JNB	046H,L22F6
	MOV	04AH,#009H
;
L22F6:	LCALL	L453A
	LJMP	L2347
;
;
L22FC:	CLR	067H
	SETB	02AH
	SETB	031H
	MOV	052H,#03CH
	LJMP	L2347
;
;
L2308:	CLR	031H
	LCALL	L4720
	LJMP	L2347
;
;
L2310:	MOV	04AH,#001H
	LCALL	L453A
	CLR	031H
	CLR	032H
	MOV	064H,#00DH
	LJMP	L2347
;
;
L2320:	CLR	031H
	CLR	032H
	CLR	050H
	JB	04DH,L233A
	CLR	067H
	SETB	02AH
	SETB	052H
	MOV	R1,#001H
	LCALL	L034F
	MOV	064H,#000H
	LJMP	L2347
;
;
L233A:	LCALL	L4831
	SETB	04FH
	MOV	R1,#015H
	LCALL	L034F
	MOV	064H,#011H
;
L2347:	LJMP	L21C9
;
;
L234A:	JNB	046H,L237B
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.3,L2363		; EPROM perso 0x046C -> d3=0(actif si 0): DIVA multi-cellules, scrutation par groupes de lignes (lien table 0800)
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.1,L2363		; EPROM perso 0x046A -> d1: scan des canaux DIVA - 1=scan en etoile (0,1,0,2,0,3...), 0=scan circulaire (0,1,2,3...)
	MOV	A,07CH
	CJNE	A,#000H,L2363
	LJMP	L2369
;
;
L2363:	MOV	A,07CH
	MOV	DPTR,#L21FA
	MOVX	@DPTR,A		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
;
L2369:	JB	053H,L237E
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.2,L2387		; EPROM perso 0x046A -> d2: 1=ralliement d'appel via DIVA (CTCSS predefini), 0=synchronisation par porteuse simple
	SETB	038H
	MOV	059H,#00AH
	MOV	064H,#012H
;
L237B:	LJMP	L21C9
;
;
L237E:	LCALL	L5931
	MOV	052H,#01EH
	LJMP	L238D
;
;
L2387:	MOV	DPTR,#L0486
	MOVX	A,@DPTR		; DPTR=0x0486, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	052H,A
;
L238D:	CLR	038H
	SETB	031H
	CLR	04FH
	MOV	R1,#015H
	LCALL	L034F
	MOV	064H,#013H
	LJMP	L21C9
;
;
L239E:	LCALL	L46A0
	LJMP	L21C9
;
;
L23A4:	JBC	00EH,L23F4
	JBC	00BH,L23CD
	JBC	005H,L23FC
	JBC	00CH,L2405
	JBC	015H,L240B
	JBC	016H,L239E
	JBC	00DH,L242B
	JBC	008H,L240B
	JBC	019H,L23D9
	JBC	006H,L234A
	CLR	00FH
	CLR	010H
	CLR	01AH
	CLR	01BH
	LJMP	L585F
;
;
L23CD:	JNB	046H,L23D3
	LJMP	L234A
;
;
L23D3:	LCALL	L48AB
	LJMP	L21C9
;
;
L23D9:	MOV	DPTR,#L08AA
	MOVX	A,@DPTR		; DPTR=0x08AA, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	DPTR,#L2251
	MOVX	@DPTR,A		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	LCALL	L4831
	MOV	A,07CH
	MOV	DPTR,#L21F9
	MOVX	@DPTR,A		; DPTR=0x21F9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F9
	CLR	06BH
	MOV	064H,#022H
	SETB	059H
	LJMP	L21C9
;
;
L23F4:	LCALL	L467E
	CLR	014H
	LJMP	L21C9
;
;
L23FC:	JNB	045H,L2402
	LCALL	L4618
;
L2402:	LJMP	L21C9
;
;
L2405:	LCALL	L4632
	LJMP	L21C9
;
;
L240B:	MOV	A,01FH
	XRL	A,#008H
	JZ	L2422
	CLR	06DH
	LCALL	L4831
	LCALL	L452E
	LCALL	L47B7
	MOV	064H,#014H
	LJMP	L21C9
;
;
L2422:	LCALL	L4798
	MOV	064H,#00FH
	LJMP	L21C9
;
;
L242B:	LCALL	L4831
	MOV	A,07CH
	MOV	DPTR,#L218D
	MOVX	@DPTR,A		; DPTR=0x218D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18D
	MOV	DPTR,#L21DA
	MOVX	@DPTR,A		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	JNB	05BH,L2448
	MOV	DPTR,#L2000
	LCALL	L03D3
	MOVX	A,@DPTR		; DPTR=0x2000 (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	ANL	A,#002H
	JZ	L2448
	SETB	05CH
;
L2448:	CLR	04DH
	CLR	A
	MOV	DPTR,#L21FC
	MOVX	@DPTR,A		; DPTR=0x21FC, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FC
	CLR	04FH
	CLR	038H
	MOV	R1,#001H
	LCALL	L034F
	MOV	064H,#000H
	LJMP	L21C9
;
;
L245E:	JBC	014H,L2469
	JBC	00BH,L247D
	CLR	006H
	LJMP	L585F
;
;
L2469:	MOV	052H,#028H
	SETB	031H
	CLR	04FH
	CLR	038H
	MOV	R1,#015H
	LCALL	L034F
	MOV	064H,#01CH
	LJMP	L21C9
;
;
L247D:	LCALL	L48AB
	MOV	064H,#011H
	LJMP	L21C9
;
;
L2486:	CLR	031H
	SJMP	L242B
;
L248A:	JNB	053H,L24A5
	LCALL	L5937
	JNB	031H,L2496
	LCALL	L4632
;
L2496:	CLR	031H
	SETB	04FH
	MOV	R1,#015H
	LCALL	L034F
	LCALL	L48AB
	MOV	064H,#011H
;
L24A5:	LJMP	L21C9
;
;
L24A8:	LCALL	L46A0
	LJMP	L21C9
;
;
L24AE:	LJMP	L25B6
;
;
L24B1:	LJMP	L254C
;
;
L24B4:	LJMP	L255B
;
;
L24B7:	JBC	00EH,L24F1
	JBC	006H,L24F7
	JBC	014H,L2518
	JBC	00BH,L24EE
	JB	00FH,L2524
	JB	010H,L2524
	JB	01AH,L24B1
	JB	01BH,L24B1
	JBC	00AH,L24B4
	JBC	00CH,L248A
	JBC	00DH,L2486
	JBC	008H,L24AE
	JBC	015H,L24AE
	JBC	016H,L24A8
	JBC	005H,L24EB
	CLR	011H
	CLR	012H
	LJMP	L585F
;
;
L24EB:	LJMP	L2581
;
;
L24EE:	LJMP	L2559
;
;
L24F1:	LCALL	L467E
	LJMP	L21C9
;
;
L24F7:	JB	046H,L250D
	SETB	038H
	MOV	059H,#014H
	MOV	A,065H
	CJNE	A,#01FH,L2507
	LJMP	L21C9
;
;
L2507:	LCALL	L5937
	LJMP	L21C9
;
;
L250D:	JNB	053H,L2513
	LCALL	L5931
;
L2513:	CLR	038H
	LJMP	L21C9
;
;
L2518:	JNB	031H,L2521
	MOV	DPTR,#L0486
	MOVX	A,@DPTR		; DPTR=0x0486, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	052H,A
;
L2521:	LJMP	L21C9
;
;
L2524:	MOV	A,065H
	CJNE	A,#019H,L253C
;
L2529:	JB	010H,L2539
	JNB	00FH,L2521
	CLR	00FH
	MOV	A,#000H
	LCALL	L47B0
	LJMP	L21C9
;
;
L2539:	LCALL	L45DF
;
L253C:	CJNE	A,#01FH,L2541
	SJMP	L2529
;
L2541:	CJNE	A,#005H,L254C
	JNB	010H,L254C
	CLR	010H
	LJMP	L2559
;
;
L254C:	LCALL	L5977
	CLR	031H
	CLR	038H
	MOV	064H,#000H
	LJMP	L21C9
;
;
L2559:	CLR	031H
;
L255B:	SETB	04FH
	MOV	R1,#015H
	LCALL	L034F
	MOV	A,065H
	CJNE	A,#019H,L257C
	LJMP	L256D
;
;
L256A:	JB	02EH,L2579
;
L256D:	LCALL	L5937
;
L2570:	LCALL	L48AB
	MOV	064H,#011H
	LJMP	L21C9
;
;
L2579:	LJMP	L25D7
;
;
L257C:	CJNE	A,#01FH,L256A
	SJMP	L2570
;
L2581:	JNB	045H,L25B3
	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	JNB	ACC.0,L25B3		; EPROM perso 0x0465 -> d0: ecoute reseau commutable - bref passage ALT=0 valide l'ecoute reseau
	JB	053H,L259C
	LCALL	L4618
	LCALL	L5931
	MOV	052H,#01EH
	SETB	031H
	LJMP	L21C9
;
;
L259C:	CLR	031H
	SETB	038H
	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JB	ACC.0,L25AD
	MOV	059H,#032H
	LJMP	L25B0
;
;
L25AD:	MOV	059H,#001H
;
L25B0:	MOV	064H,#004H
;
L25B3:	LJMP	L21C9
;
;
L25B6:	MOV	A,01FH
	XRL	A,#008H
	JZ	L25D7
	JNB	031H,L25D7
	MOV	DPTR,#L0486
	MOVX	A,@DPTR		; DPTR=0x0486, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	R0,A
	MOV	A,052H
	CJNE	A,000H,L25CC
	LJMP	L25D7
;
;
L25CC:	JNC	L25D7
	LCALL	L5937
	LCALL	L459D
	LJMP	L21C9
;
;
L25D7:	CLR	031H
	SETB	008H
	SETB	04FH
	MOV	R1,#015H
	LCALL	L034F
	MOV	064H,#011H
	LJMP	L21C9
;
;
L25E8:	JBC	00EH,L2609
	JBC	006H,L2606
	JBC	00BH,L260F
	JBC	007H,L2636
	JBC	009H,L263C
	JBC	00CH,L265A
	JBC	016H,L2676
	CLR	008H
	CLR	015H
	CLR	00DH
	LJMP	L585F
;
;
L2606:	LJMP	L267C
;
;
L2609:	LCALL	L467E
	LJMP	L21C9
;
;
L260F:	JB	046H,L267C
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.5,L2626		; EPROM perso 0x046A -> d5: non documente, indique fixe a 0
	MOV	DPTR,#L2252
	MOVX	A,@DPTR		; DPTR=0x2252, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x252
	ANL	A,#00FH
	DEC	A
	MOVX	@DPTR,A		; DPTR=0x2252, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x252
	JNZ	L2626
	LJMP	L284C
;
;
;
; >>> VERIFICATION 'RELAIS CONFIGURE' (EPROM 0469 bit d3, CONFIRME PAR
;     L'UTILISATEUR: d3=0 -> au moins un relais parametre, d3=1 -> aucun relais).
;     Si aucun relais (d3=1): mode 04AH=9, tonalite de confirmation (L453A),
;     retour menu - PAS de sequence N3. Si relais configure (d3=0): mode
;     04AH=0x0C puis L453A - cf. note complete au mode 0x0C dans la table de
;     L2BE3 (L2FC1) pour la suite du traitement N3.
;
L2626:	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.3,L264E		; EPROM perso 0x0469 -> d3: 0=au moins un relais parametre, 1=aucun relais (CORRIGE: polarite inversee par rapport a une version anterieure de la doc utilisateur)
	MOV	04AH,#00CH
	LCALL	L453A
	LJMP	L21C9
;
;
L2636:	LCALL	L468A
	LJMP	L21C9
;
;
L263C:	JBC	06FH,L264E
	SETB	02AH
	CLR	067H
	MOV	059H,#01EH
	SETB	038H
	MOV	064H,#015H
	LJMP	L21C9
;
;
L264E:	MOV	04AH,#009H
	LCALL	L453A
	MOV	064H,#015H
	LJMP	L21C9
;
;
L265A:	CLR	050H
	MOV	01FH,#000H
	CLR	06BH
	CLR	031H
	CLR	032H
	SETB	02AH
	CLR	067H
	SETB	052H
	MOV	064H,#017H
	SETB	038H
	MOV	059H,#00AH
	LJMP	L21C9
;
;
L2676:	LCALL	L46A0
	LJMP	L21C9
;
;
L267C:	JNB	046H,L26B9
	CLR	038H
	SETB	06BH
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.3,L2699		; EPROM perso 0x046C -> d3=0(actif si 0): DIVA multi-cellules, scrutation par groupes de lignes (lien table 0800)
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.1,L2699		; EPROM perso 0x046A -> d1: scan des canaux DIVA - 1=scan en etoile (0,1,0,2,0,3...), 0=scan circulaire (0,1,2,3...)
	MOV	A,07CH
	CJNE	A,#000H,L2699
	LJMP	L269F
;
;
L2699:	MOV	A,07CH
	MOV	DPTR,#L21FA
	MOVX	@DPTR,A		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
;
L269F:	MOV	A,01FH
	CJNE	A,#005H,L26B0
	MOV	04AH,#009H
	LCALL	L453A
	MOV	064H,#015H
	LJMP	L21C9
;
;
L26B0:	LCALL	L4921
	CJNE	R4,#0FFH,L26B9
	MOV	064H,#017H
;
L26B9:	LJMP	L21C9
;
;
L26BC:	JBC	00EH,L26D7
	JBC	006H,L26DD
	JBC	00BH,L26EB
	JBC	00CH,L265A
	JBC	007H,L26FD
	JBC	016H,L2676
	CLR	008H
	CLR	015H
	CLR	00DH
	LJMP	L585F
;
;
L26D7:	LCALL	L467E
	LJMP	L21C9
;
;
L26DD:	JNB	046H,L26E8
	CLR	038H
	MOV	04AH,#009H
	LCALL	L453A
;
L26E8:	LJMP	L21C9
;
;
L26EB:	LCALL	L4921
	CJNE	R4,#000H,L26F7
	MOV	064H,#014H
	LJMP	L21C9
;
;
L26F7:	MOV	064H,#017H
	LJMP	L21C9
;
;
L26FD:	JNB	047H,L2717
	MOV	064H,#016H
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.2,L2715		; EPROM perso 0x046A -> d2: 1=ralliement d'appel via DIVA (CTCSS predefini), 0=synchronisation par porteuse simple
	SETB	038H
	MOV	DPTR,#L0487
	MOVX	A,@DPTR		; DPTR=0x0487, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	059H,A
	LJMP	L21C9
;
;
L2715:	SETB	00BH
;
L2717:	LJMP	L21C9
;
;
L271A:	CLR	031H
	CLR	032H
	JNB	050H,L2724
	LJMP	L27DF
;
;
L2724:	MOV	07BH,#03FH
;
L2727:	SETB	024H
	CLR	059H
	CLR	04FH
	MOV	A,#002H
	LCALL	L47B0
	MOV	A,01FH
	CJNE	A,#008H,L273F
	MOV	064H,#010H
	SETB	013H
	LJMP	L21C9
;
;
L273F:	CJNE	A,#005H,L274A
	MOV	064H,#00EH
	SETB	013H
	LJMP	L21C9
;
;
L274A:	MOV	R1,#015H
	LCALL	L034F
	LCALL	L477E
	LCALL	L474A
	LCALL	L5931
	SETB	052H
	MOV	064H,#003H
	LJMP	L21C9
;
;
L2760:	JBC	00EH,L27B2
	JBC	00BH,L278B
	JBC	00CH,L27A4
	JBC	007H,L2791
	JBC	009H,L2797
	JBC	013H,L271A
	JBC	00AH,L27E5
	JBC	016H,L279E
	CLR	006H
	CLR	011H
	CLR	008H
	CLR	015H
	CLR	00FH
	CLR	010H
	CLR	012H
	CLR	00DH
	LJMP	L585F
;
;
L278B:	LCALL	L468A
	LJMP	L21C9
;
;
L2791:	LCALL	L468A
	LJMP	L21C9
;
;
L2797:	SETB	02AH
	CLR	067H
	LJMP	L21C9
;
;
L279E:	LCALL	L46A0
	LJMP	L21C9
;
;
L27A4:	JNB	031H,L27AC
	MOV	A,01FH
	CJNE	A,#005H,L27AF
;
L27AC:	LJMP	L265A
;
;
L27AF:	LJMP	L21C9
;
;
L27B2:	MOV	04AH,#000H
	SETB	01FH
	JBC	06FH,L27F1
	MOV	A,01FH
	CJNE	A,#005H,L27CC
	SETB	031H
	MOV	052H,#03CH
	JNB	054H,L27DC
	SETB	06FH
	LJMP	L21C9
;
;
L27CC:	JB	062H,L27DF
	JNB	059H,L27DF
	SETB	031H
	MOV	052H,#014H
	JNB	054H,L27DC
	SETB	06FH
;
L27DC:	LJMP	L21C9
;
;
L27DF:	MOV	07BH,#040H
	LJMP	L2727
;
;
L27E5:	JNB	06FH,L27F1
	MOV	04AH,#004H
	LCALL	L453A
	LJMP	L21C9
;
;
L27F1:	LCALL	L4921
	CJNE	R4,#000H,L27FD
	MOV	064H,#014H
	LJMP	L21C9
;
;
L27FD:	MOV	064H,#017H
	LJMP	L21C9
;
;
L2803:	JBC	00EH,L281D
	JBC	00BH,L2828
	JBC	016H,L281B
	CLR	006H
	CLR	011H
	CLR	008H
	CLR	015H
	CLR	012H
	CLR	00DH
	LJMP	L585F
;
;
L281B:	SJMP	L279E
;
L281D:	LCALL	L467E
	MOV	R1,#016H
	LCALL	L034F
	LJMP	L21C9
;
;
L2828:	MOV	A,01FH
	CJNE	A,#005H,L2830
	LJMP	L2833
;
;
L2830:	CJNE	A,#008H,L284C
;
L2833:	MOV	A,07CH
	MOV	DPTR,#L21F9
	MOVX	@DPTR,A		; DPTR=0x21F9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F9
	JB	046H,L2844
	SETB	00BH
	MOV	064H,#014H
	LJMP	L21C9
;
;
L2844:	SETB	006H
	MOV	064H,#015H
	LJMP	L21C9
;
;
L284C:	LCALL	L4541
	CLR	04FH
	MOV	R1,#015H
	LCALL	L034F
	MOV	064H,#018H
	LJMP	L21C9
;
;
L285C:	JBC	00EH,L288D
	JBC	015H,L2890
	JBC	008H,L2893
	JBC	007H,L28C8
	JBC	009H,L28CE
	JBC	00BH,L28E3
	JBC	00AH,L288D
	JB	00FH,L28F2
	JB	010H,L28F2
	JB	01AH,L28F2
	JB	01BH,L28F2
	JBC	016H,L281B
	CLR	012H
	CLR	011H
	CLR	006H
	CLR	00CH
	CLR	00DH
	LJMP	L585F
;
;
L288D:	LJMP	L28F5
;
;
L2890:	JNB	015H,L28B8
;
L2893:	JNB	06BH,L28B8
	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	MOV	04AH,#007H
	JB	ACC.2,L28B0		; EPROM perso 0x0465 -> d2: tonalite de presence - envoi d'un ton de presence
	JNB	ACC.3,L28B8		; EPROM perso 0x0465 -> d3: tonalite de presence - appel selectif par APPEL puis '*' (si combine a d2, voir doc)
	SETB	04FH
	MOV	R1,#015H
	LCALL	L034F
	JNB	046H,L28BB
	MOV	04AH,#004H
;
L28B0:	LCALL	L453A
	CLR	031H
	LCALL	L459D
;
L28B8:	LJMP	L21C9
;
;
L28BB:	CLR	031H
	LCALL	L47B7
	SETB	00BH
	MOV	064H,#014H
	LJMP	L21C9
;
;
L28C8:	LCALL	L468A
	LJMP	L21C9
;
;
L28CE:	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	JB	ACC.2,L28DD		; EPROM perso 0x0465 -> d2: tonalite de presence - envoi d'un ton de presence
	SETB	038H
	MOV	059H,#046H
	LJMP	L21C9
;
;
L28DD:	LCALL	L4648
	LJMP	L21C9
;
;
L28E3:	LCALL	L47B7
	MOV	04AH,#00CH
	LCALL	L453A
	MOV	064H,#014H
	LJMP	L21C9
;
;
L28F2:	LJMP	L2524
;
;
L28F5:	LCALL	L47C3
	CLR	06BH
	SETB	02AH
	CLR	067H
	SETB	052H
	SETB	038H
	MOV	059H,00AH
	LCALL	L5977
	SETB	04FH
	SETB	06DH
	MOV	R1,#001H
	LCALL	L034F
	MOV	R1,#015H
	LCALL	L034F
	MOV	064H,#011H
	LJMP	L21C9
;
;
L291C:	JBC	00EH,L294A
	JBC	006H,L2950
	JBC	00BH,L2937
	JBC	015H,L2978
	JBC	005H,L296D
	JBC	00CH,L2965
	JBC	00AH,L2965
	JBC	016H,L2983
	LJMP	L585F
;
;
L2937:	LCALL	L4921
	CJNE	R4,#0FFH,L2947
	CLR	038H
	LCALL	L460F
	MOV	052H,#03CH
	SETB	031H
;
L2947:	LJMP	L21C9
;
;
L294A:	LCALL	L467E
	LJMP	L21C9
;
;
L2950:	JNB	046H,L2962		; si porteuse (DP) absente -> saute (pas d'ouverture squelch ici, cf. note complete a L5931)
	CLR	031H		; efface un flag d'ecran (fonction precise non tracee ici)
	CLR	038H		; efface un second flag d'ecran (fonction precise non tracee ici)
	LCALL	L5931		; porteuse presente (046H=1): ouvre le squelch et applique le volume memorise sur MA05/Port5 (cf. note complete a L5931/L5948)
	MOV	R1,#015H		; charge la valeur/l'evenement 0x15 a enfiler (pas necessairement un octet UART direct - fonction precise de cette valeur non tracee ici)
	LCALL	L034F		; enfile R1 dans LA MEME file d'evenements d'affichage/LED que L0355 (base RAM 0x2F, cf. note complete a L0355) - variante qui abandonne silencieusement la valeur si la file est deja pleine, au lieu de la reinitialiser
	MOV	064H,#003H		; positionne le sous-etat d'ecran 064H a 3 (fonction precise de cet ecran non tracee ici)
;
L2962:	LJMP	L21C9
;
;
L2965:	SETB	00CH
	MOV	064H,#003H
	LJMP	L21C9
;
;
L296D:	JNB	045H,L2980
	SETB	005H
	MOV	064H,#003H
	LJMP	L21C9
;
;
L2978:	JNB	049H,L2980
	SETB	015H
	MOV	064H,#003H
;
L2980:	LJMP	L21C9
;
;
L2983:	LCALL	L46A0
	LJMP	L21C9
;
;
L2989:	JBC	00EH,L29E4
	JBC	007H,L299C
	JBC	009H,L29CE
	JBC	074H,L29C1
	CLR	01AH
	CLR	01BH
	LJMP	L585F
;
;
L299C:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.6,L29AB		; EPROM perso 0x046C -> d6=0(actif si 0): fonction DTMF active, sinon code 5-tons 'GX' remplace le DTMF
	MOV	04AH,#010H
	SETB	01FH
	LJMP	L21C9
;
;
L29AB:	MOV	DPTR,#L21E1
	LCALL	L03A3
	CJNE	A,#0FFH,L29B9
	CLR	06EH
	LJMP	L29C1
;
;
L29B9:	SETB	070H
	SETB	072H
	MOV	R1,A
	LJMP	L21C9
;
;
L29C1:	JB	06EH,L29AB
	CLR	067H
	SETB	02AH
	MOV	064H,#003H
	LJMP	L21C9
;
;
L29CE:	JB	06EH,L29DB
	CLR	067H
	SETB	02AH
	MOV	064H,#003H
	LJMP	L21C9
;
;
L29DB:	MOV	04AH,#00BH
	LCALL	L453A
	LJMP	L21C9
;
;
L29E4:	LCALL	L467E
	LJMP	L21C9
;
;
L29EA:	JBC	014H,L2A0E
	JBC	00AH,L2A16
	JBC	00BH,L29FE
	JBC	016H,L29FB
	CLR	006H
	LJMP	L585F
;
;
L29FB:	LJMP	L24A8
;
;
L29FE:	MOV	DPTR,#L0486
	MOVX	A,@DPTR		; DPTR=0x0486, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	052H,A
	CLR	038H
	SETB	031H
	MOV	064H,#013H
	LJMP	L21C9
;
;
L2A0E:	MOV	059H,#00AH
	SETB	038H
	LJMP	L21C9
;
;
L2A16:	SETB	04FH
	MOV	R1,#015H
	LCALL	L034F
	LCALL	L48AB
	MOV	064H,#011H
	LJMP	L21C9
;
;
L2A26:	JBC	00AH,L2A50
	JBC	00BH,L2A60
	JBC	008H,L2A83
	JBC	015H,L2A83
	JBC	00CH,L2A66
	JBC	00FH,L2A7B
	JBC	016H,L2AB8
	CLR	01AH
	CLR	01BH
	CLR	006H
	CLR	005H
	CLR	040H
	CLR	010H
	CLR	012H
	CLR	011H
	CLR	00DH
	LJMP	L585F
;
;
L2A50:	LCALL	L5964
	SETB	038H
	MOV	059H,#00AH
	SETB	031H
	MOV	052H,#064H
	LJMP	L2ABB
;
;
L2A60:	LCALL	L5977
	LJMP	L2ABB
;
;
L2A66:	CLR	050H
	CLR	031H
	CLR	032H
	CLR	038H
	CLR	06CH
	MOV	064H,#009H
	LCALL	L4648
	SETB	052H
	LJMP	L2ABB
;
;
L2A7B:	MOV	A,#000H
	LCALL	L47B0
	LJMP	L2ABB
;
;
L2A83:	MOV	07BH,#040H
	SETB	024H
	MOV	053H,#006H
	SETB	032H
	CLR	038H
	CLR	031H
	CLR	06CH
	SETB	059H
	JB	04DH,L2AA4
	MOV	04AH,#008H
	LCALL	L453A
	MOV	064H,#010H
	LJMP	L2ABB
;
;
L2AA4:	MOV	01FH,#008H
	LCALL	L4831
	MOV	A,07CH
	MOV	DPTR,#L21F9
	MOVX	@DPTR,A		; DPTR=0x21F9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F9
	SETB	04FH
	MOV	064H,#014H
	LJMP	L2ABB
;
;
L2AB8:	LCALL	L46A0
;
L2ABB:	LJMP	L21C9
;
;
L2ABE:	JBC	00EH,L2AEB
	JBC	007H,L2AF3
	JBC	009H,L2AFB
	JBC	013H,L2B15
	JBC	00AH,L2B07
	JBC	00FH,L2B10
	JBC	016H,L2B2D
	JBC	00CH,L2A66
	CLR	01AH
	CLR	01BH
	CLR	006H
	CLR	008H
	CLR	015H
	CLR	011H
	CLR	012H
	CLR	010H
	CLR	00DH
	LJMP	L585F
;
;
L2AEB:	SETB	01FH
	MOV	04AH,#000H
	LJMP	L2B30
;
;
L2AF3:	SETB	01FH
	MOV	04AH,#010H
	LJMP	L2B30
;
;
L2AFB:	CLR	067H
	SETB	02AH
	SETB	031H
	MOV	052H,#014H
	LJMP	L2B30
;
;
L2B07:	MOV	04AH,#008H
	LCALL	L453A
	LJMP	L2B30
;
;
L2B10:	CLR	031H
	LJMP	L2310
;
;
L2B15:	CLR	031H
	JNB	05AH,L2B22
	MOV	R1,#018H
	LCALL	L034F
	LJMP	L2B30
;
;
L2B22:	MOV	077H,#00FH
	MOV	R1,#008H
	LCALL	L034F
	LJMP	L2B30
;
;
L2B2D:	LCALL	L46A0
;
L2B30:	LJMP	L21C9
;
;
L2B33:	JBC	015H,L2B49
	JBC	007H,L2B61
	JBC	00EH,L2B6A
	JBC	004H,L2B70
	JBC	016H,L2B92
	CLR	01AH
	CLR	01BH
	LJMP	L585F
;
;
L2B49:	JNB	049H,L2B58
	SETB	052H
	SETB	067H
	SETB	02AH
	LCALL	L472B
	LJMP	L2B95
;
;
L2B58:	LCALL	L4732
	LCALL	L4648
	LJMP	L2B95
;
;
L2B61:	JNB	047H,L2B67
	LCALL	L473A
;
L2B67:	LJMP	L2B95
;
;
L2B6A:	LCALL	L4742
	LJMP	L2B95
;
;
L2B70:	JB	044H,L2B8F
	MOV	P1,#08FH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8FH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8F -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	MOV	A,#08FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x8F -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]
	LCALL	L473A
	MOV	A,07CH
	LCALL	L0410
	LCALL	L045A
	SETB	02AH
	CLR	067H
	SETB	06DH
	MOV	064H,#000H
;
L2B8F:	LJMP	L2B95
;
;
L2B92:	LCALL	L46A0
;
L2B95:	LJMP	L21C9
;
;
L2B98:	JBC	00EH,L2BB3
	JBC	00BH,L2BB9
	JBC	007H,L2BCE
	JBC	009H,L2BD7
	CLR	01AH
	CLR	01BH
	CLR	006H
	CLR	008H
	CLR	015H
	CLR	00DH
	LJMP	L585F
;
;
L2BB3:	LCALL	L467E
	LJMP	L21C9
;
;
L2BB9:	JB	06FH,L2BBF
	JNB	046H,L2BCB
;
L2BBF:	MOV	04AH,#009H
	LCALL	L453A
	MOV	064H,#001H
	LJMP	L21C9
;
;
L2BCB:	LJMP	L18F7
;
;
L2BCE:	LCALL	L468A
	LCALL	L459D
	LJMP	L21C9
;
;
L2BD7:	SETB	02AH
	CLR	067H
	MOV	059H,#014H
	SETB	038H
	LJMP	L21C9
;
;
;
; >>> CONFIRME - VERITABLE ORCHESTRATEUR DE L'EMISSION D'APPEL SELECTIF 5-TONS
;     (N1/N2/N3). Cette routine est une TACHE PERMANENTE DU SCHEDULER PRINCIPAL
;     (cf. L585F: JBC 01FH,L58BB -> LJMP L2BE3), rappelee a chaque passage de
;     boucle - CE N'EST PAS L'APPUI SUR APPEL QUI EMET DIRECTEMENT: APPEL
;     initialise l'etat (mode 04AH, ecran 065H=6, cf. note complete) puis CETTE
;     tache fait progresser la sequence pas a pas via l'etat 063H (0,1,2,3...).
;     ATTENTION - PIEGE DE NOTATION: le drapeau '01FH' qui declenche cette tache
;     (bit, JBC en L585F) et 'L'OCTET 01FH' teste plus loin dans cette routine
;     (MOV A,01FH, adresse RAM DIRECTE 0x1F dans la zone des banques de
;     registres) SONT DEUX EMPLACEMENTS MEMOIRE COMPLETEMENT DIFFERENTS malgre
;     la meme notation hexadecimale - le premier est un bit de la zone
;     bit-adressable (octet 0x23 bit7), le second est un octet ordinaire
;     (adresse 0x1F). Ne pas confondre lors de futures modifications.
;     Teste d'abord 0464 bit0 (appel selectif active/desactive, deja confirme)
;     avant de proceder.
;
L2BE3:	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JNB	ACC.0,L2BED
	LJMP	L2CCB
;
;
;
; >>> Si 063H=0 (premiere passe): aiguille vers l'UNE DES 18 ROUTINES DE MODE
;     (table L2BFD) selon la valeur de l'OCTET 04AH ("numero de mode" deja
;     repere dans plusieurs contextes anterieurs - tonalites, affichage...).
;     Modes confirmes: 0x00=L2E19(init), 0x01=L2E1E(N1/ecoute retour d'appel),
;     0x09 et 0x0D=L2EE7(pas de relais -> decide N1 ou N2 selon l'ordre 046C.d5),
;     0x0C=L2FC1(emission N3 relais, cf. note complete) - les autres entrees de
;     la table restent a documenter precisement.
;
L2BED:	MOV	R0,#040H
	MOV	A,063H
	CJNE	A,#000H,L2C36
	MOV	A,04AH
	MOV	R3,A
	ADD	A,R3
	ADD	A,R3
	MOV	DPTR,#L2BFD
	JMP	@A+DPTR
;
;
;
; >>> TABLE DES 18 MODES DE L'ORCHESTRATEUR 5-TONS (indexee par l'octet 04AH,
;     cf. note complete a L2BE3/L2BED). Recapitulatif (a completer/corriger
;     au fil des prochaines analyses) :
;       0x00 L2E19 : initialisation de sequence
;       0x01 L2E1E : emission N1 (5 ou 6 tons selon 0468.d5) - CONFIRME
;       0x02 L2E61 : tonalite CCIR 'P' (ALTT->0, EPROM 0465.d7) - CONFIRME
;                 octets envoyes a MN7: 00,02,0B
;       0x03 L2E72 : tonalite CCIR 'PQ' (ALTT->1, EPROM 0465.d7) - CONFIRME
;                 octets envoyes a MN7: 00,02,0B,0C
;       0x04 L2E88 : tonalite de presence via APPEL+* (EPROM 0465.d3) - CONFIRME
;                 octets envoyes a MN7: 00,02,0D,0E
;       0x05 L2E9E : octets envoyes a MN7: 00,03 - declencheur non confirme
;       0x06,0x08 L2EB0 : variante 'avec verification relais' de 0x0D - non confirme
;       0x07 L2EA7 : simple ton de presence (EPROM 0465.d2, d3=0) - CONFIRME
;                 octets envoyes a MN7: 00,05
;       0x09,0x0D L2EE7 : pas de relais -> decide ordre N1/N2 (046C.d5) - CONFIRME
;       0x0A L2F25 : code GX/DTMF actif (EPROM 046C.d6=1) - declencheur CONFIRME,
;                 fonction precise a affiner
;       0x0B L2FA9 : code 5-tons GX en substitut du DTMF (EPROM 046C.d6=0) - CONFIRME
;       0x0E L2FE7 : octets envoyes a MN7: 00,08 - declencheur non confirme
;                 (lie au meme point de test que le mode 0x02, cf. L4667)
;       0x0C L2FC1 : emission N3 (code relais) - CONFIRME
;       0x0E L2FE7 : commande courte fixe - non confirme
;       0x0F L2FF1 : option '100000 N3' (046C.d4/046F) - existence confirmee,
;                 activation logicielle non entierement comprise
;       0x10 L2E14 : commande courte fixe - non confirme
;       0x11 L2E4B : emission N1 (variante fixe 5 tons) - non confirme
;
L2BFD:	LJMP	L2E19
;
	LJMP	L2E1E
;
	LJMP	L2E61
;
	LJMP	L2E72
;
	LJMP	L2E88
;
	LJMP	L2E9E
;
	LJMP	L2EB0
;
	LJMP	L2EA7
;
	LJMP	L2EB0
;
	LJMP	L2EE7
;
	LJMP	L2F25
;
	LJMP	L2FA9
;
	LJMP	L2FC1
;
	LJMP	L2EE7
;
	LJMP	L2FE7
;
	LJMP	L2FF1
;
	LJMP	L2E14
;
	LJMP	L2E4B
;
;
L2C33:	LJMP	L2CD8
;
;
L2C36:	CJNE	A,#001H,L2C33
	MOV	063H,#002H
	MOV	A,01FH
	CJNE	A,#002H,L2C44
	LJMP	L2CCE
;
;
L2C44:	CJNE	A,#005H,L2C4A
	LJMP	L2CCE
;
;
L2C4A:	CJNE	A,#004H,L2CA9
	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.1,L2CA6		; EPROM perso 0x047E -> d1 (INFERE): observe a plusieurs endroits (L1D6C, L2CA6...), gate un traitement conditionnel (ex: appel a L47B0 avec A=0 dans un cas)
	MOV	A,07CH
	JNB	04DH,L2C5A
	CLR	A
;
L2C5A:	LCALL	L3121
	LCALL	L313B
	PUSH	B
	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	JZ	L2CA6
	DEC	A
	MOV	B,#006H
	MUL	AB
	MOV	DPTR,#L219E
	ADD	A,DPL
	MOV	DPL,A
	POP	B
	MOV	R0,#06FH
	JNB	B.3,L2C80
	LCALL	L320F
;
L2C80:	DEC	R0
	JNB	B.4,L2C87
	LCALL	L320F
;
L2C87:	DEC	R0
	JNB	B.5,L2C8E
	LCALL	L320F
;
L2C8E:	DEC	R0
	JNB	B.6,L2C95
	LCALL	L320F
;
L2C95:	DEC	R0
	JNB	B.7,L2C9C
	LCALL	L320F
;
L2C9C:	MOV	R2,#005H
	LCALL	L3216
	CLR	052H
	LJMP	L2CC9
;
;
L2CA6:	LJMP	L2CCE
;
;
L2CA9:	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JNB	ACC.7,L2CDB		; EPROM perso 0x0468 -> d7: activation/desactivation transmission identification N1
	LCALL	L049C
	MOV	R2,#005H
	LCALL	L3216
	CLR	052H
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L2CC9		; EPROM perso 0x046C -> d5=0(actif si 0): ordre sequences 5-tons N3,N2,N1 (si 1: N3,N1,N2)
	MOV	063H,#003H
	MOV	R1,#02FH
	LCALL	L0365
;
L2CC9:	SETB	002H
;
L2CCB:	LJMP	L585F
;
;
L2CCE:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L2CDB		; EPROM perso 0x046C -> d5=0(actif si 0): ordre sequences 5-tons N3,N2,N1 (si 1: N3,N1,N2)
	LJMP	L2E3E
;
;
L2CD8:	CJNE	A,#002H,L2D05
;
L2CDB:	MOV	A,01FH
	MOV	R5,A
	ADD	A,R5
	ADD	A,R5
	MOV	DPTR,#L2CE4
	JMP	@A+DPTR
;
;
L2CE4:	LJMP	L2D0D
;
	LJMP	L2D41
;
	LJMP	L2D6E
;
	LJMP	L2D6E
;
	LJMP	L2DA5
;
	LJMP	L2DBC
;
	LJMP	L585F
;
	LJMP	L585F
;
	LJMP	L2DD2
;
	LJMP	L2E03
;
	LJMP	L2D5B
;
;
L2D05:	CJNE	A,#003H,L2CCB
	MOV	063H,#000H
	SJMP	L2CCB
;
L2D0D:	MOV	A,07CH
	JNB	04DH,L2D13
	CLR	A
;
L2D13:	MOV	R5,A
	LCALL	L3121
	LCALL	L313B
	JB	05AH,L2D2F
	PUSH	B
	MOV	A,R5
	MOV	DPTR,#L2014
	LCALL	L03D3
	POP	B
	LCALL	L315E
	CLR	052H
	SJMP	L2CC9
;
L2D2F:	MOV	A,R5
	MOV	DPTR,#L218E
	MOVX	@DPTR,A		; DPTR=0x218E, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18E
	MOV	DPTR,#L216A
	LCALL	L04DB
	LCALL	L31BD
	CLR	052H
	SJMP	L2CC9
;
L2D41:	JB	05CH,L2D0D
	MOV	A,07CH
	JNB	04DH,L2D4A
	CLR	A
;
L2D4A:	LCALL	L3121
	LCALL	L313B
	MOV	DPTR,#L216A
	LCALL	L315E
	CLR	052H
	LJMP	L2CC9
;
;
L2D5B:	MOV	A,#001H
	LCALL	L3121
	LCALL	L313B
	MOV	DPTR,#L216A
	LCALL	L315E
	CLR	052H
	LJMP	L2CC9
;
;
L2D6E:	MOV	A,07CH
	JNB	04DH,L2D74
	CLR	A
;
L2D74:	LCALL	L3121
	LCALL	L313B
	PUSH	B
	MOV	DPTR,#L21B8
	MOVX	A,@DPTR		; DPTR=0x21B8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B8
	ANL	A,#00FH
	JZ	L2DA2
	DEC	A
	MOV	B,#006H
	MUL	AB
	MOV	DPTR,#L219E
	ADD	A,DPL
	MOV	DPL,A
	POP	B
	LCALL	L315E
	MOV	A,#001H
	MOV	DPTR,#L2198
	MOVX	@DPTR,A		; DPTR=0x2198, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x198
	SETB	025H
	CLR	052H
	LJMP	L2CC9
;
;
L2DA2:	LJMP	L2D0D
;
;
L2DA5:	MOV	A,07CH
	JNB	04DH,L2DAB
	CLR	A
;
L2DAB:	LCALL	L3121
	LCALL	L313B
	MOV	DPTR,#L2160
	LCALL	L315E
	CLR	052H
	LJMP	L2CC9
;
;
L2DBC:	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	MOV	R1,#00FH
	LCALL	L0365
	LCALL	L04A2
	MOV	R2,#003H
	LCALL	L3216
	CLR	052H
	LJMP	L2E3E
;
;
L2DD2:	MOV	DPTR,#L0483
	MOVX	A,@DPTR		; DPTR=0x0483, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	LCALL	L3121
	LCALL	L313B
	JB	05AH,L2DF5
	PUSH	B
	MOV	DPTR,#L0483
	MOVX	A,@DPTR		; DPTR=0x0483, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	DPTR,#L2014
	LCALL	L03D3
	POP	B
	LCALL	L315E
	CLR	052H
	LJMP	L2CC9
;
;
L2DF5:	MOV	DPTR,#L216A
	LCALL	L04DB
	LCALL	L31BD
	CLR	052H
	LJMP	L2CC9
;
;
L2E03:	LCALL	L313B
	LCALL	L0406
	MOV	B,#0FDH
	LCALL	L314F
	CLR	052H
	LJMP	L2CC9
;
;
;
; >>> MODE 0x10: enfile un seul octet de configuration (0x01) vers MN7 sans
;     construire de sequence de tonalites - FONCTION PRECISE NON CONFIRMEE,
;     probablement une commande de controle courte (annulation/sous-mode).
;
L2E14:	MOV	R1,#001H
	LJMP	L2E42
;
;
;
; >>> MODE 0x00 (etat initial de la sequence d'appel selectif): enfile un octet
;     de configuration (0x02) puis avance l'etat 063H a 3 - etape de demarrage,
;     avant que le mode reel (N1/N2/N3 selon l'ordre 046C.d5) ne soit determine.
;
L2E19:	MOV	R1,#002H
	LJMP	L2E42
;
;
;
; >>> MODE 0x01: recharge le code N1 depuis le cache RAM (L049C/0x21F3, cf. note
;     complete a L0478), construit la sequence de 5 OU 6 tonalites (selon EPROM
;     0468 bit d5 - meme bit documente pour 'retour d'appel 6-tons/5-tons':
;     possible que cette routine configure a la fois l'emission N1 ET l'ecoute
;     de la confirmation de retour d'appel, d'ou le partage de ce parametre de
;     longueur - A CONFIRMER) via L3216 (cf. note complete), puis avance l'etat.
;
L2E1E:	LCALL	L049C
	MOV	070H,06EH
	MOV	R0,#040H
	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#001H
	LCALL	L0365
	MOV	R2,#006H
	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JB	ACC.5,L2E3B		; EPROM perso 0x0468 -> d5: retour d'appel 6-tons(1) ou 5-tons(0)
	MOV	R2,#005H
;
L2E3B:	LCALL	L3216
;
L2E3E:	MOV	R1,#02FH
	CLR	052H
;
L2E42:	LCALL	L0365
	MOV	063H,#003H
	LJMP	L2CC9
;
;
;
; >>> MODE 0x11: recharge le code N1 depuis le cache (L049C, cf. note complete
;     a L0478) et l'emet via L3216 avec TOUJOURS 5 tonalites (contrairement au
;     mode 0x01/L2E1E qui choisit 5 ou 6 selon 0468.d5) - FONCTION PRECISE NON
;     CONFIRMEE, possiblement une variante de renvoi de N1 sans verification du
;     retour d'appel.
;
L2E4B:	LCALL	L049C
	MOV	R0,#040H
	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#001H
	LCALL	L0365
	MOV	R2,#005H
	LCALL	L3216
	SJMP	L2E3E
;
;
; >>> MODE 0x02: CONFIRME - TONALITE CCIR 'P', emise a la transition du
;     signal ALTT vers 0 (appui PTT), si EPROM 0465 bit d7 est actif (cf.
;     note complete a L4652/L4667). Enfile 3 octets de commande fixes
;     (0x00,0x02,0x0B) SANS construire de sequence de tonalites a 5 chiffres
;     (pas d'appel a L3216). Le mode 0x03 (cf. note complete) est la
;     tonalite 'PQ' symetrique, emise au relachement d'ALTT.
;
L2E61:	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#002H
	LCALL	L0365
	MOV	R1,#00BH
	LCALL	L0365
	SJMP	L2E3E
;
;
; >>> MODE 0x03: 4 octets de commande fixes (0x00,0x02,0x0B,0x0C), meme famille
;     que le mode 0x02 (cf. note complete a L2E61) - FONCTION PRECISE NON
;     CONFIRMEE.
;
;
; >>> CONFIRME - MODE 0x03 = TONALITE CCIR 'PQ', emise au relachement d'ALTT
;     quand EPROM 0465 bit d7 est actif (cf. note complete a L1B0E/L1B35).
;     Envoie 0x00,0x02,0x0B,0x0C (identique au mode 0x02/'P' + 1 octet).
;
L2E72:	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#002H
	LCALL	L0365
	MOV	R1,#00BH
	LCALL	L0365
	MOV	R1,#00CH
	LCALL	L0365
	SJMP	L2E3E
;
;
; >>> MODE 0x04: 4 octets de commande fixes (0x00,0x02,0x0D,0x0E), meme famille
;     que le mode 0x02 (cf. note complete a L2E61) - FONCTION PRECISE NON
;     CONFIRMEE.
;
;
; >>> CONFIRME - MODE 0x04 = TONALITE DE PRESENCE VIA APPEL PUIS * (EPROM 0465
;     bit d3=1, cf. note complete a L1C38). Envoie 0x00,0x02,0x0D,0x0E (0x0E =
;     caractere de repetition CCIR, deja identifie en L3216).
;
L2E88:	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#002H
	LCALL	L0365
	MOV	R1,#00DH
	LCALL	L0365
	MOV	R1,#00EH
	LCALL	L0365
	SJMP	L2E3E
;
;
; >>> MODE 0x05: 2 octets de commande fixes (0x00,0x03) - meme famille que le
;     mode 0x02 (cf. note complete a L2E61) - FONCTION PRECISE NON CONFIRMEE.
;
L2E9E:	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#003H
	SJMP	L2E42
;
;
; >>> MODE 0x07: 2 octets de commande fixes (0x00,0x05) - meme famille que le
;     mode 0x02 (cf. note complete a L2E61) - FONCTION PRECISE NON CONFIRMEE.
;
;
; >>> CONFIRME - MODE 0x07 = SIMPLE TON DE PRESENCE (EPROM 0465 bit d2=1, d3=0,
;     cf. note complete a L1C38). Envoie seulement 0x00,0x05 - la plus courte
;     des tonalites 'hors sequence 5-tons'.
;
L2EA7:	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#005H
	SJMP	L2E42
;
;
; >>> MODES 0x06/0x08 (partages): re-verifie le relais (EPROM 0469 d3 + L308A,
;     meme logique qu'en L2FC1/mode 0x0C) et si valide, decide egalement l'ordre
;     N1/N2 (046C.d5 + 0468.d7) AVANT de converger vers le MEME code que le
;     mode 0x0D/0x09 (L2ED3, partage avec L2EE7) - construit et envoie une
;     sequence de 5 tonalites. Si le relais n'est pas configure/valide, tombe
;     directement dans L2EE7. FONCTION PRECISE NON CONFIRMEE, possiblement une
;     variante 'avec verification relais' des appels d'alarme/detresse.
;
L2EB0:	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.3,L2EE7		; EPROM perso 0x0469 -> d3: 0=au moins un relais parametre, 1=aucun relais (CORRIGE: polarite inversee par rapport a une version anterieure de la doc utilisateur)
	LCALL	L308A
	MOV	R0,#040H
	CJNE	R3,#001H,L2EE7		; CORRECTIF: R3 n'est pas rechargee depuis un code UART dans ce contexte (appel a L308A juste avant, R3 probablement heritee de son resultat ou d'un contexte anterieur non lie au clavier) - PAS un code touche UART malgre la coincidence numerique avec la touche SC20 '*'.
	MOV	063H,#001H
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L2ED3		; EPROM perso 0x046C -> d5=0(actif si 0): ordre sequences 5-tons N3,N2,N1 (si 1: N3,N1,N2)
	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JNB	ACC.7,L2ED3		; EPROM perso 0x0468 -> d7: activation/desactivation transmission identification N1
	MOV	063H,#002H
;
L2ED3:	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#006H
	LCALL	L0365
	MOV	R2,#005H
	LCALL	L3216
	CLR	052H
	LJMP	L2CC9
;
;
;
; >>> MODE 0x09/0x0D (partage): utilise quand AUCUN relais n'est configure (cf.
;     note complete a L2626) ou dans un autre contexte. Enfile des octets de
;     configuration, verifie l'EPROM 0x046A bits d2/d7 (options DIVA), puis
;     TESTE L'ORDRE DES SEQUENCES (046C.d5, CONFIRME) ET L'ACTIVATION DE N1
;     (0468.d7, CONFIRME) POUR DECIDER SI L'ETAT SUIVANT (063H) DOIT ETRE 1
;     (N1) OU 2 (N2/directement la suite) - c'est ICI que se prend la decision
;     d'ordre d'emission decrite par l'utilisateur.
;
L2EE7:	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#006H
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.2,L2F09		; EPROM perso 0x046A -> d2: 1=ralliement d'appel via DIVA (CTCSS predefini), 0=synchronisation par porteuse simple
	JB	04DH,L2EFF
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L2F09		; EPROM perso 0x046A -> d7: non documente, indique fixe a 0
;
L2EFF:	MOV	R1,#007H
	LCALL	L0365
	MOV	DPTR,#L0488
	MOVX	A,@DPTR		; DPTR=0x0488, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	R1,A
;
L2F09:	LCALL	L0365
	MOV	063H,#001H
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L2F20		; EPROM perso 0x046C -> d5=0(actif si 0): ordre sequences 5-tons N3,N2,N1 (si 1: N3,N1,N2)
	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JNB	ACC.7,L2F20		; EPROM perso 0x0468 -> d7: activation/desactivation transmission identification N1
	MOV	063H,#002H
;
L2F20:	CLR	052H
	LJMP	L2CC9
;
;
;
; >>> MODE 0x0A: DECLENCHE QUAND L'EPROM 046C BIT D6 EST ACTIF (DTMF ACTIF,
;     cf. note complete a L2153/L1AE3 - CONFIRME PAR L'UTILISATEUR, lien avec
;     l'option GX/DTMF). Logique complexe utilisant L323A (comparaison de
;     sequences) et un compteur octet 01AH - fonction precise encore a
;     affiner, mais le declencheur est maintenant identifie.
;
L2F25:	JB	06AH,L2F7A
	MOV	A,01AH
	XRL	A,#008H
	SETB	052H
	JZ	L2F68
	CLR	052H
	MOV	A,01FH
	JZ	L2F48
	CJNE	A,#001H,L2F68
	MOV	DPTR,#L216B
	MOV	R3,#000H
	LCALL	L323A
	JNC	L2F68
	INC	01AH
	LJMP	L2F62
;
;
L2F48:	MOV	R3,07CH
	MOV	DPTR,#L2008
	LCALL	L323A
	JNC	L2F68
	MOV	R0,A
	MOV	DPTR,#L216B
	MOV	A,01AH
	JZ	L2F97
	INC	01AH
	ADD	A,DPL
	MOV	DPL,A
	MOV	A,R0
	MOVX	@DPTR,A		; DPTR=0x216B, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x16B
;
L2F62:	MOV	063H,#003H
	LJMP	L2CC9
;
;
L2F68:	MOV	A,07CH
	MOV	DPTR,#L218F
	MOVX	@DPTR,A		; DPTR=0x218F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18F
	CLR	06EH
;
L2F70:	MOV	063H,#000H
	SETB	023H
	SETB	009H
	LJMP	L2CCB
;
;
L2F7A:	MOV	A,01AH
	XRL	A,#007H
	SETB	052H
	JZ	L2F90
	CLR	052H
	MOV	R3,07CH
	MOV	DPTR,#L2001
	LCALL	L323A
	INC	01AH
	JC	L2F62
;
L2F90:	MOV	01AH,#000H
	CLR	06AH
	SJMP	L2F25
;
L2F97:	INC	01AH
	MOV	A,R0
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	MOV	R2,#007H
	MOV	A,#0FBH
;
L2F9F:	INC	DPTR
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	DJNZ	R2,L2F9F
	MOV	063H,#003H
	LJMP	L2CC9
;
;
;
; >>> MODE 0x0B: CONFIRME PAR L'UTILISATEUR - GENERATION DU CODE 5-TONS 'GX'
;     EN SUBSTITUT DU DTMF (EPROM 046C bit d6=0, cf. note complete a L1AE3).
;     Lit le chiffre compose par l'utilisateur depuis un tampon (RAM 0x21E1
;     via L03A3); si different de 0xFF, appelle L3255 qui envoie une
;     sequence COURTE reutilisant ce chiffre comme tonalite (cf. note
;     complete a L3255) - le prefixe 'G' etant fourni separement (EPROM 047D,
;     deja documente: frequence du caractere de groupe G).
;
L2FA9:	MOV	DPTR,#L21E1
	LCALL	L03A3
	CJNE	A,#0FFH,L2FB6
	CLR	06EH
	SJMP	L2F70
;
L2FB6:	MOV	R0,#040H
	LCALL	L3255
	MOV	063H,#003H
	LJMP	L2CC9
;
;
;
; >>> MODE 0x0C: EMISSION DE LA SEQUENCE N3 (CODE RELAIS) - CONFIRME. Appelle
;     L308A (verification de validite du relais, cf. note complete a L30DB/
;     L30F9 pour le chargement du code N3 depuis la 2eme table de relais
;     EPROM 0x04B0-04FF), et si valide (R3=1), enfile les octets de
;     configuration puis construit et envoie la sequence de 5 tonalites via
;     L3216 (cf. note complete). Marque un statut (RAM 0x2250=4) avant de
;     continuer vers l'etat suivant.
;
L2FC1:	LCALL	L308A
	CJNE	R3,#001H,L2FE3		; CORRECTIF: R3 suit immediatement un appel a L308A (probable valeur de retour de cette routine) - PAS un code touche UART malgre la coincidence numerique avec la touche SC20 '*'.
	CLR	06FH
	MOV	R0,#040H
	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#001H
	LCALL	L0365
	MOV	R2,#005H
	LCALL	L3216
	MOV	DPTR,#L2250
	MOV	A,#004H
	MOVX	@DPTR,A		; DPTR=0x2250, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x250
	LJMP	L2E3E
;
;
L2FE3:	SETB	06FH
	SJMP	L2F70
;
;
; >>> MODE 0x0E: enfile 2 octets de commande fixes (0x00,0x08) sans sequence de
;     tonalites - FONCTION PRECISE NON CONFIRMEE.
;
L2FE7:	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#008H
	LJMP	L2E42
;
;
;
; >>> MODE 0x0F: routine la plus complexe de la table. Verifie le type d'organe
;     (05AH), manipule plusieurs caches RAM (0x2010,0x2014,0x2019 via L04AC/
;     L04DB, meme mecanisme de cache que N1/L0478), et surtout TESTE L'EPROM
;     046C BIT D4 ('programmation 100000 N3', mentionne par l'utilisateur,
;     en lien avec l'adresse 046F) - CONFIRME L'EXISTENCE DE CETTE FONCTION
;     DANS LE CODE, avec acces a une table additionnelle en 0x0564 (zone
;     'Lignes preprogrammees' de l'EPROM) quand ce bit est actif. FONCTION
;     PRECISE NON ENTIEREMENT CONFIRMEE - le mecanisme d'activation logicielle
;     de cette option restant flou d'apres l'utilisateur lui-meme.
;
L2FF1:	JB	05AH,L301B
	MOV	DPTR,#L2010
	LCALL	L04AC
	LCALL	L313B
	MOV	DPTR,#L2014
	LCALL	L04DB
	MOV	DPTR,#L046C
	JNB	ACC.4,L301B		; EPROM perso 0x046C -> d4=0(actif si 0): programmation '100000'N3 (lien 046F)
	MOV	DPTR,#L0564
	LCALL	L04AC
	MOV	DPTR,#L046F
	MOVX	A,@DPTR		; DPTR=0x046F, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	B,A
	MOV	DPTR,#L2019
	LCALL	L04DB
;
L301B:	MOV	R0,#040H
	MOV	R1,#01FH
	LCALL	L0365
	MOV	DPTR,#L047C
	MOV	R2,#004H
;
L3027:	MOVX	A,@DPTR		; DUREE DE PORTEUSE entre deux sequences d'appel selectif (EpromPersonnalisation.txt): valeur * 10ms. | DPTR=0x047C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). DUREE DE PORTEUSE entre deux sequences d'appel selectif (EpromPersonnalisation.txt): valeur * 10ms.
	MOV	R1,A
	LCALL	L0365
	DEC	DPL
	DJNZ	R2,L3027
	MOV	R1,#000H
	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JNB	ACC.1,L303A
	INC	R1
;
L303A:	LJMP	L2E42
;
;
L303D:	MOV	A,07CH
	MOV	R5,A
	MOV	DPTR,#L0564
	LCALL	L03D3
	LCALL	L04AC
	MOV	DPTR,#L046F
	MOVX	A,@DPTR		; DPTR=0x046F, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	B,A
	PUSH	B
	MOV	A,R5
	MOV	DPTR,#L2019
	LCALL	L03D3
	POP	B
	MOV	R0,#06FH
	MOVX	A,@DPTR		; DPTR=0x2019 (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	ANL	A,#00FH
	CJNE	A,#00BH,L3065
	MOV	R3,#000H
	RET	
;
;
L3065:	JNB	B.3,L306B
	LCALL	L320F
;
L306B:	DEC	R0
	JNB	B.4,L3072
	LCALL	L320F
;
L3072:	DEC	R0
	JNB	B.5,L3079
	LCALL	L320F
;
L3079:	DEC	R0
	JNB	B.6,L3080
	LCALL	L320F
;
L3080:	DEC	R0
	JNB	B.7,L3087
	LCALL	L320F
;
L3087:	MOV	R3,#001H
	RET	
;
;
L308A:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.4,L303D		; EPROM perso 0x046C -> d4=0(actif si 0): programmation '100000'N3 (lien 046F)
	LCALL	L3112
	JNB	05AH,L30B3
	MOV	R5,01FH
	CJNE	R5,#006H,L30A5
	MOV	DPTR,#L2169
	MOV	01FH,#001H
	LJMP	L30C5
;
;
L30A5:	MOV	DPTR,#L0558
	MOV	B,#00DH
	MOV	A,07CH
	LCALL	L03D6
	LJMP	L30C5
;
;
L30B3:	JNZ	L30BA
	MOV	R2,#002H
	LJMP	L30BC
;
;
L30BA:	MOV	A,07CH
;
L30BC:	MOV	DPTR,#L2018
	MOV	B,#020H
	LCALL	L03D3
;
L30C5:	MOV	R0,#06BH
	CJNE	R2,#001H,L30CF
	INC	R2
	CLR	A
	LJMP	L30D2
;
;
L30CF:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
;
L30D2:	MOV	@R0,A
	INC	DPTR
	INC	R0
	DJNZ	R2,L30CF
	LCALL	L30DB
	RET	
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR - CALCUL DE L'INDEX RELAIS (0-99) A PARTIR DES
;     2 CHIFFRES SAISIS (RAM 0x6B=dizaine, 0x6C=unite): index = dizaine*10 +
;     unite. Lit ensuite la PREMIERE TABLE DE RELAIS (EPROM 0x0400+index): la
;     valeur lue est un INDEX (0-15) vers le CODE N3 PARTAGE dans la DEUXIEME
;     TABLE DE RELAIS (cf. note complete a L30F9) - 0xFF signifie relais non
;     configure.
;
L30DB:	MOV	A,06BH
	CJNE	A,#024H,L30E1
	CLR	A
;
L30E1:	MOV	B,#00AH
	MUL	AB
	ADD	A,06CH
	MOV	R3,#000H
	JZ	L3111
	MOV	DPTR,#L0400
	MOV	DPL,A
	MOVX	A,@DPTR		; DPTR=0x0400, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,#0FFH,L30F9
	MOV	R3,#000H
	LJMP	L3111
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR - LECTURE DU CODE N3 DANS LA DEUXIEME TABLE DE
;     RELAIS (EPROM 0x04B0-0x04FF): DPTR = 0x04B0 + index (0-15, lu dans la
;     premiere table, cf. note complete a L30DB). Lit 5 OCTETS avec un PAS DE
;     16 (chaque tonalite du code N3 est stockee 16 octets plus loin que la
;     precedente) - structure en matrice de 5 lignes (tonalites) x 16 colonnes
;     (index de code N3 partage entre plusieurs relais), occupant exactement
;     les 80 octets disponibles (0x04B0-0x04FF). Stocke le resultat dans le
;     MEME tampon RAM 0x6B que celui lu par L3216.
;
L30F9:	MOV	R3,#001H
	MOV	DPTR,#L04B0
	ADD	A,DPL
	MOV	DPL,A
	MOV	R2,#005H
	MOV	R0,#06BH
;
L3106:	MOVX	A,@DPTR		; DPTR=0x04B0, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	@R0,A
	MOV	A,#010H
	ADD	A,DPL
	MOV	DPL,A
	INC	R0
	DJNZ	R2,L3106
;
L3111:	RET	
;
;
L3112:	MOV	DPTR,#L0473
	MOVX	A,@DPTR		; DPTR=0x0473, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#00CH
	RR	A
	RR	A
	JNB	05AH,L311F
	MOV	A,#002H
;
L311F:	MOV	R2,A
	RET	
;
;
L3121:	JB	05AH,L312E
	MOV	DPTR,#L055F
	LCALL	L03D3
	LCALL	L04AC
	RET	
;
;
L312E:	MOV	DPTR,#L0550
	MOV	B,#00DH
	LCALL	L03D6
	LCALL	L04AC
	RET	
;
;
L313B:	MOV	DPTR,#L0474
	MOVX	A,@DPTR		; DPTR=0x0474, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	B,A
	MOV	DPTR,#L047D
	MOVX	A,@DPTR		; FREQUENCE 5-TONS DU CARACTERE DE GROUPE 'G' (EpromPersonnalisation.txt) - 'G' = code UART 0Ch affiche sur le VFD SC20 lors de la saisie clavier (cf. table VFD deja confirmee). d3-d0 = valeur decimale 0-9 (ZVEI) ou 0-9/0Ah (CCIR, 'G'). | DPTR=0x047D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#00FH
	MOV	R1,A
	CJNE	A,#00AH,L314D
	MOV	A,#00CH
;
L314D:	MOV	R4,A
	RET	
;
;
L314F:	MOV	R0,DPH
	MOV	R2,DPL
	MOV	R3,DPL
	MOV	A,07CH
	MOV	DPTR,#L218E
	MOVX	@DPTR,A		; DPTR=0x218E, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18E
	LJMP	L3195
;
;
L315E:	MOV	R0,DPH
	MOV	R2,DPL
	MOV	R3,DPL
	JNB	05AH,L3172
	MOV	DPTR,#L0467
	MOVX	A,@DPTR		; DPTR=0x0467, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.0,L3195
	MOV	DPH,R0
	MOV	DPL,R3
;
L3172:	MOVX	A,@DPTR		; DPTR=0x0467, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	DPTR,#L216A
	LCALL	L3207
	MOV	DPTR,#L2169
	LCALL	L3207
	MOV	DPTR,#L2168
	LCALL	L3207
	MOV	DPTR,#L2167
	LCALL	L3207
	MOV	DPTR,#L2166
	MOVX	@DPTR,A		; DPTR=0x2166, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x166
	MOV	A,07CH
	MOV	DPTR,#L218E
	MOVX	@DPTR,A		; DPTR=0x218E, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18E
;
L3195:	MOV	DPH,R0
	MOV	DPL,R2
	MOV	R0,#06FH
	JNB	B.3,L31A1
	LCALL	L320F
;
L31A1:	DEC	R0
	JNB	B.4,L31A8
	LCALL	L320F
;
L31A8:	DEC	R0
	JNB	B.5,L31AF
	LCALL	L320F
;
L31AF:	DEC	R0
	JNB	B.6,L31B6
	LCALL	L320F
;
L31B6:	DEC	R0
	JNB	B.7,L31BD
	LCALL	L320F
;
L31BD:	MOV	DPTR,#L2187
	MOV	A,06BH
	MOVX	@DPTR,A		; DPTR=0x2187, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x187
	INC	DPL
	MOV	A,06CH
	CJNE	A,004H,L31D2
	MOV	A,R1
	CJNE	A,#00AH,L31D2
	MOV	06CH,A
	SETB	062H
;
L31D2:	MOVX	@DPTR,A		; DPTR=0x2187, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x187. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
	INC	DPL
	MOV	R2,#003H
	MOV	R0,#06DH
;
L31D9:	MOV	A,@R0
	CJNE	A,004H,L31E1
	SETB	062H
	MOV	A,R1
	MOV	@R0,A
;
L31E1:	MOVX	@DPTR,A		; DPTR=0x2187, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x187. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
	INC	R0
	INC	DPL
	DJNZ	R2,L31D9
	MOV	R2,#005H
	LCALL	L3216
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L31FE		; EPROM perso 0x046C -> d5=0(actif si 0): ordre sequences 5-tons N3,N2,N1 (si 1: N3,N1,N2)
	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JNB	ACC.7,L31FE		; EPROM perso 0x0468 -> d7: activation/desactivation transmission identification N1
	MOV	063H,#001H
	RET	
;
;
L31FE:	MOV	R1,#02FH
	LCALL	L0365
	MOV	063H,#003H
	RET	
;
;
L3207:	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	DEC	R3
	MOV	DPH,R0
	MOV	DPL,R3
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	RET	
;
;
L320F:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	@R0,A
	DEC	DPL
	RET	
;
;
L3216:	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	MOV	B,#00AH
	JNB	ACC.1,L3223
	MOV	B,#00EH
;
L3223:	MOV	R0,#040H
	MOV	R1,#06BH
	MOV	R3,#0FFH
;
L3229:	MOV	A,@R1
	CJNE	A,003H,L322F
	MOV	A,B
;
L322F:	MOV	R3,A
	MOV	@R1,A
	XCH	A,R1
	INC	A
	LCALL	L0365
	XCH	A,R1
	DJNZ	R2,L3229
	RET	
;
;
L323A:	MOV	R0,#040H
	MOV	A,01AH
	ADD	A,DPL
	MOV	DPL,A
	MOV	A,R3
	JZ	L3248
	LCALL	L03D3
;
L3248:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	CJNE	A,#00BH,L3250
	CLR	C
	RET	
;
;
L3250:	CJNE	A,#0FFH,L3255
	MOV	A,#00DH
;
;
; >>> ENVOI D'UNE SEQUENCE COURTE REUTILISANT LA VALEUR COURANTE DE A (cf. mode
;     0x0B/L2FA9 qui l'appelle): enfile 0x00,0x01,0x0C puis le nibble bas de A,
;     puis 0x2F (fin) - structure differente des 5 tonalites habituelles,
;     HYPOTHESE: renvoi/echo d'une sequence recue (cf. note complete a L2FA9).
;
L3255:	MOV	R1,#000H
	LCALL	L0365
	MOV	R1,#001H
	LCALL	L0365
	MOV	R1,#00CH
	LCALL	L0365
	ANL	A,#00FH
	MOV	R1,A
	LCALL	L0365
	MOV	R1,#02FH
	LCALL	L0365
	SETB	C
	RET	
;
;
L3271:	JNB	047H,L3277
	ORL	068H,#00FH
;
L3277:	MOV	A,068H
	ANL	A,#00FH
	CJNE	A,#00FH,L3283
	MOV	R0,#000H
	LJMP	L328D
;
;
L3283:	MOV	R0,#002H
	MOV	A,068H
	SWAP	A
	CJNE	A,068H,L328D
	MOV	R0,#001H
;
L328D:	MOV	A,066H
	ANL	A,#00FH
	MOV	R3,A
	ADD	A,R3
	ADD	A,R3
	MOV	DPTR,#L3298
	JMP	@A+DPTR
;
;
L3298:	LJMP	L32A7
;
	LJMP	L3329
;
	LJMP	L3369
;
	LJMP	L33A6
;
	LJMP	L33D0
;
;
L32A7:	MOV	A,R0
	CJNE	A,#000H,L32B1
	ORL	068H,#0F0H
	LJMP	L3326
;
;
L32B1:	CJNE	A,#001H,L32FA
	DJNZ	006H,L32DF
	MOV	DPTR,#L21CA
	MOV	R1,068H
	ANL	001H,#00FH
	LCALL	L038F
	MOV	DPTR,#L21CA
	MOVX	A,@DPTR		; DPTR=0x21CA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1CA
	ANL	A,#00FH
	CJNE	A,069H,L32F1
	MOV	DPL,06AH
	MOV	DPH,#005H
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	CJNE	A,#008H,L32E2
	MOV	067H,A
	LCALL	L3445
	SETB	027H
;
L32DC:	LCALL	L3438
;
L32DF:	LJMP	L3326
;
;
L32E2:	ANL	066H,#0F0H
	ORL	066H,#004H
	MOV	006H,#010H
	ORL	068H,#00FH
	LJMP	L3326
;
;
L32F1:	ANL	066H,#0F0H
	ORL	066H,#001H
	LJMP	L3326
;
;
L32FA:	MOV	A,068H
	ANL	A,#0F0H
	CJNE	A,#0F0H,L32DC
	LCALL	L3403
	JZ	L330C
	LCALL	L3438
	LJMP	L3326
;
;
L330C:	ANL	068H,#00FH
	MOV	A,068H
	SWAP	A
	ORL	068H,A
	MOV	006H,#001H
	INC	DPTR
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	MOV	007H,A
	INC	06AH
	INC	06AH
	DEC	DPL
	DEC	DPL
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	MOV	069H,A
;
L3326:	LJMP	L585F
;
;
L3329:	MOV	A,R0
	CJNE	A,#000H,L3341
	DJNZ	007H,L3326
	MOV	DPL,06AH
	MOV	DPH,#005H
	LCALL	L3424
	ANL	066H,#0F0H
	ORL	066H,#002H
	SJMP	L3326
;
L3341:	CJNE	A,#001H,L334C
	DJNZ	007H,L3326
	LCALL	L3438
	SJMP	L3326
;
L334C:	MOV	DPL,06AH
	MOV	DPH,#005H
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	MOV	R1,068H
	ANL	001H,#00FH
	CJNE	A,001H,L335E
	LJMP	L3361
;
;
L335E:	CJNE	A,#00FH,L33A1
;
L3361:	LCALL	L3424
	ANL	066H,#0F0H
	SJMP	L3326
;
L3369:	MOV	A,R0
	CJNE	A,#000H,L337B
	DJNZ	007H,L3379
	ORL	068H,#0F0H
	ANL	066H,#0F0H
	LCALL	L33FD
;
L3379:	SJMP	L3326
;
L337B:	CJNE	A,#001H,L3385
;
L337E:	SETB	026H
	ANL	066H,#0F0H
	SJMP	L3326
;
L3385:	MOV	A,068H
	ANL	A,#0F0H
	CJNE	A,#0F0H,L33A1
	MOV	DPL,06AH
	DEC	DPL
	DEC	DPL
	MOV	DPH,#005H
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	MOV	R1,068H
	ANL	001H,#00FH
	CJNE	A,001H,L33A1
	SJMP	L337E
;
L33A1:	LCALL	L3438
	SJMP	L3326
;
L33A6:	MOV	A,R0
	CJNE	A,#000H,L33C7
	DJNZ	006H,L33C4
	MOV	DPTR,#L21CA
	MOVX	A,@DPTR		; DPTR=0x21CA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1CA
	ANL	A,#00FH
	MOV	R2,A
	JZ	L33BE
	MOV	067H,#010H
	LCALL	L3449
;
L33BC:	SETB	027H
;
L33BE:	LCALL	L33FD
	ANL	066H,#0F0H
;
L33C4:	LJMP	L3326
;
;
L33C7:	MOV	006H,#010H
	ORL	068H,#00FH
	LJMP	L3326
;
;
L33D0:	MOV	A,R0
	CJNE	A,#000H,L33E5
	DJNZ	006H,L33F1
	MOV	DPL,06AH
	MOV	DPH,#005H
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	MOV	067H,A
	LCALL	L3445
	SJMP	L33BC
;
L33E5:	CJNE	A,#001H,L33F4
	DJNZ	007H,L33F1
	ORL	068H,#00FH
	LCALL	L343B
;
L33F1:	LJMP	L3326
;
;
L33F4:	ORL	068H,#00FH
	LCALL	L343B
	LJMP	L3326
;
;
L33FD:	MOV	DPTR,#L21CA
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21CA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1CA
	RET	
;
;
L3403:	MOV	R2,#004H
	MOV	DPTR,#L0501
	MOV	06AH,DPL
;
L340B:	MOVX	A,@DPTR		; DPTR=0x0501, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	XRL	A,068H
	ANL	A,#00FH
	JZ	L3423
	MOVX	A,@DPTR		; DPTR=0x0501, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	XRL	A,#00FH
	JZ	L3423
	MOV	A,#010H
	ADD	A,06AH
	MOV	06AH,A
	MOV	DPL,A
	DJNZ	R2,L340B
	MOV	A,#0FFH
;
L3423:	RET	
;
;
L3424:	ANL	068H,#00FH
	MOV	A,068H
	SWAP	A
	ORL	068H,A
	INC	DPTR
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	INC	DPTR
	MOV	06AH,DPL
	MOV	007H,A
	MOV	006H,#001H
	RET	
;
;
L3438:	ORL	068H,#0F0H
;
L343B:	ANL	066H,#0F0H
	ORL	066H,#003H
	MOV	006H,#010H
	RET	
;
;
L3445:	MOV	R2,069H
	MOV	A,#005H
;
L3449:	MOV	DPTR,#L21C4
	MOVX	@DPTR,A		; DPTR=0x21C4, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1C4
	INC	DPTR
	MOV	R0,DPL
	MOV	DPTR,#L21CA
	MOV	R1,DPL
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21CA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1CA
	INC	R1
	MOV	R3,#00EH
;
L345A:	MOV	DPL,R1
	MOVX	A,@DPTR		; DPTR=0x21CA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1CA
	ANL	A,#00FH
	CJNE	A,#00EH,L3463
	MOV	A,R3
;
L3463:	MOV	DPL,R0
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	MOV	R3,A
	INC	R0
	INC	R1
	DJNZ	R2,L345A
	RET	
;
;
L346C:	MOV	A,067H
	JB	ACC.0,L3480
	JB	ACC.1,L3491
	JB	ACC.2,L34A2
	JB	ACC.3,L34D0
	JB	ACC.4,L34AB
	LJMP	L3578
;
;
L3480:	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	JNB	ACC.7,L348E		; EPROM perso 0x0465 -> d7: emission tonalite CCIR 'P' sur front descendant ALT / 'PQ' sur front montant
	SETB	012H
	SETB	023H
	ANL	066H,#00FH
;
L348E:	LJMP	L3578
;
;
L3491:	MOV	DPTR,#L0466
	MOVX	A,@DPTR		; DPTR=0x0466, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.4,L349F
	SETB	011H
	SETB	023H
	ANL	066H,#00FH
;
L349F:	LJMP	L3578
;
;
L34A2:	MOV	DPTR,#L21C6
	LCALL	L04AC
	LJMP	L34BA
;
;
L34AB:	MOV	DPTR,#L21C4
	MOVX	A,@DPTR		; DPTR=0x21C4, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1C4
	ANL	A,#00FH
	CJNE	A,#003H,L34CD
	MOV	DPTR,#L21C5
	LCALL	L04AC
;
L34BA:	JNB	059H,L34CD
	LCALL	L36FC
	MOV	A,R1
	JNB	ACC.0,L34CD
	SETB	013H
	SETB	023H
	CLR	059H
	ANL	066H,#00FH
;
L34CD:	LJMP	L3578
;
;
L34D0:	MOV	DPTR,#L21C5
	LCALL	L04AC
	JB	059H,L34FC
	LCALL	L36D4
	MOV	R5,001H
	MOV	A,066H
	SWAP	A
	ANL	A,#00FH
	MOV	R3,A
	ADD	A,R3
	ADD	A,R3
	MOV	DPTR,#L34EA
	JMP	@A+DPTR
;
;
L34EA:	LJMP	L350F
;
	LJMP	L357B
;
	LJMP	L35A8
;
	LJMP	L35CA
;
	LJMP	L3649
;
	LJMP	L3674
;
;
L34FC:	LCALL	L36C9
	MOV	A,R1
	JNB	ACC.0,L350C
	CLR	059H
	SETB	013H
	SETB	023H
	ANL	066H,#00FH
;
L350C:	LJMP	L3578
;
;
L350F:	MOV	A,R5
	JB	ACC.1,L3525
	JB	ACC.0,L3549
	JB	ACC.2,L356D
	LCALL	L3707
	ANL	066H,#00FH
	ORL	066H,#030H
	LJMP	L3578
;
;
L3525:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L353C		; EPROM perso 0x046C -> d5=0(actif si 0): ordre sequences 5-tons N3,N2,N1 (si 1: N3,N1,N2)
	MOV	055H,#05FH
	SETB	034H
	SETB	018H
	ANL	066H,#00FH
	ORL	066H,#040H
	LJMP	L3578
;
;
L353C:	LCALL	L3713
	SETB	010H
	SETB	023H
	ANL	066H,#00FH
	LJMP	L3578
;
;
L3549:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L3560		; EPROM perso 0x046C -> d5=0(actif si 0): ordre sequences 5-tons N3,N2,N1 (si 1: N3,N1,N2)
	MOV	055H,#05FH
	SETB	034H
	SETB	018H
	ANL	066H,#00FH
	ORL	066H,#050H
	LJMP	L3578
;
;
L3560:	LCALL	L3713
	SETB	00FH
	SETB	023H
	ANL	066H,#00FH
	LJMP	L3578
;
;
L356D:	LCALL	L372D
	SETB	01DH
	ANL	066H,#00FH
	ORL	066H,#010H
;
L3578:	LJMP	L585F
;
;
L357B:	MOV	A,R5
	JB	ACC.1,L3590
	JB	ACC.0,L359C
	JB	ACC.2,L356D
	LCALL	L3707
	ANL	066H,#00FH
	ORL	066H,#020H
	SJMP	L3578
;
L3590:	LCALL	L3713
	SETB	010H
	SETB	023H
	ANL	066H,#00FH
	SJMP	L3578
;
L359C:	LCALL	L3713
	SETB	00FH
	SETB	023H
	ANL	066H,#00FH
	SJMP	L3578
;
L35A8:	MOV	A,R5
	JB	ACC.1,L360F
	JB	ACC.0,L35D6
	JB	ACC.2,L35BD
	LCALL	L3707
	ANL	066H,#00FH
	ORL	066H,#030H
	SJMP	L3578
;
L35BD:	LCALL	L372D
	SETB	01DH
	ANL	066H,#00FH
	ORL	066H,#010H
	SJMP	L3578
;
L35CA:	MOV	A,R5
	JB	ACC.1,L360F
	JB	ACC.0,L35D6
	LCALL	L3707
	SJMP	L3578
;
L35D6:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L35EC		; EPROM perso 0x046C -> d5=0(actif si 0): ordre sequences 5-tons N3,N2,N1 (si 1: N3,N1,N2)
	MOV	055H,#05FH
	SETB	034H
	CLR	018H
	ANL	066H,#00FH
	ORL	066H,#050H
	SJMP	L3578
;
L35EC:	LCALL	L371A
	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.4,L3605
	LCALL	L369F
	MOV	A,R1
	CJNE	A,#0FFH,L3600
	LJMP	L3605
;
;
L3600:	SETB	01AH
	LJMP	L3607
;
;
L3605:	SETB	00FH
;
L3607:	SETB	023H
	ANL	066H,#00FH
	LJMP	L3578
;
;
L360F:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L3626		; EPROM perso 0x046C -> d5=0(actif si 0): ordre sequences 5-tons N3,N2,N1 (si 1: N3,N1,N2)
	MOV	055H,#05FH
	SETB	034H
	CLR	018H
	ANL	066H,#00FH
	ORL	066H,#040H
	LJMP	L3578
;
;
L3626:	LCALL	L371A
	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.4,L363F
	LCALL	L369F
	MOV	A,R1
	CJNE	A,#0FFH,L363A
	LJMP	L363F
;
;
L363A:	SETB	01BH
	LJMP	L3641
;
;
L363F:	SETB	010H
;
L3641:	SETB	023H
	ANL	066H,#00FH
	LJMP	L3578
;
;
L3649:	MOV	A,R5
	JB	ACC.1,L3665
	JB	ACC.0,L3653
	JB	ACC.2,L3665
;
L3653:	LCALL	L3707
	LCALL	L371A
	CLR	034H
	SETB	010H
	SETB	023H
	ANL	066H,#00FH
	LJMP	L3578
;
;
L3665:	LCALL	L3713
	CLR	034H
	SETB	010H
	SETB	023H
	ANL	066H,#00FH
	LJMP	L3578
;
;
L3674:	MOV	A,R5
	JB	ACC.1,L3690
	JB	ACC.0,L367E
	JB	ACC.2,L3690
;
L367E:	LCALL	L3707
	LCALL	L371A
	CLR	034H
	SETB	00FH
	SETB	023H
	ANL	066H,#00FH
	LJMP	L3578
;
;
L3690:	LCALL	L3713
	CLR	034H
	SETB	00FH
	SETB	023H
	ANL	066H,#00FH
	LJMP	L3578
;
;
L369F:	MOV	DPTR,#L080A
	MOV	R1,#000H
;
L36A4:	MOV	R0,#06BH
	MOV	R2,#005H
;
L36A8:	MOVX	A,@DPTR		; DPTR=0x080A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,#0FFH,L36AF
	LJMP	L36C6
;
;
L36AF:	MOV	B,A
	MOV	A,@R0
	CJNE	A,B,L36BF
	INC	R0
	INC	DPTR
	DJNZ	R2,L36A8
	MOV	DPTR,#L2246
	MOV	A,R1
	MOVX	@DPTR,A		; DPTR=0x2246, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x246
	RET	
;
;
L36BF:	INC	DPTR
	DJNZ	R2,L36BF
	INC	R1
	CJNE	R1,#010H,L36A4
;
L36C6:	MOV	R1,#0FFH
	RET	
;
;
L36C9:	MOV	R3,#0FFH
	MOV	DPTR,#L2187
	MOV	R2,#003H
	LCALL	L3745
	RET	
;
;
L36D4:	MOV	R3,#0FFH
	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.6,L36E4		; EPROM perso 0x0469 -> d6: decodage d'appel de groupe
	MOV	DPTR,#L047D
	MOVX	A,@DPTR		; FREQUENCE 5-TONS DU CARACTERE DE GROUPE 'G' (EpromPersonnalisation.txt) - 'G' = code UART 0Ch affiche sur le VFD SC20 lors de la saisie clavier (cf. table VFD deja confirmee). d3-d0 = valeur decimale 0-9 (ZVEI) ou 0-9/0Ah (CCIR, 'G'). | DPTR=0x047D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#00FH
	MOV	R3,A
;
L36E4:	MOV	DPTR,#L21F3
	MOV	R2,#003H
	LCALL	L3745
	MOV	A,06BH
	CJNE	A,#00EH,L36FB
	MOV	DPTR,#L0467
	MOVX	A,@DPTR		; DPTR=0x0467, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.6,L36FB
	ORL	001H,#004H
;
L36FB:	RET	
;
;
L36FC:	MOV	R3,#0FFH
	MOV	DPTR,#L21F5
	MOV	R2,#001H
	LCALL	L3745
	RET	
;
;
L3707:	MOV	DPTR,#L21BF
	LCALL	L04B9
	MOV	055H,#06EH
	SETB	034H
	RET	
;
;
L3713:	MOV	A,#0FFH
	MOV	DPTR,#L21E0
	MOVX	@DPTR,A		; DPTR=0x21E0, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1E0
	RET	
;
;
L371A:	MOV	DPTR,#L21BF
	LCALL	L04AC
	MOV	DPTR,#L0474
	MOVX	A,@DPTR		; DPTR=0x0474, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	B,A
	MOV	DPTR,#L21E0
	LCALL	L04DB
	RET	
;
;
L372D:	MOV	DPTR,#L21BA
	LCALL	L04B9
	MOV	A,06CH
	ANL	A,#000H
	MOV	B,#00AH
	MUL	AB
	ADD	A,06DH
	MOV	071H,A
	MOV	055H,#06EH
	SETB	034H
	RET	
;
;
L3745:	MOV	R1,#000H
	MOV	R0,#06BH
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	B,A
	MOV	A,@R0
	CJNE	A,B,L3783
	INC	R0
	INC	DPTR
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	B,A
	MOV	A,@R0
	CJNE	A,B,L3760
	LJMP	L3769
;
;
L3760:	CJNE	A,#00AH,L3783
	CJNE	R3,#00AH,L3783		; CORRECTIF: ce test fait suite a une comparaison de valeurs issues d'une table/EPROM (boucle juste au-dessus comparant RAM interne et donnees EPROM) - PAS un code touche UART malgre la coincidence numerique avec la touche SC20 FONCTION.
	ORL	001H,#002H
;
L3769:	INC	R0
	INC	DPTR
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	B,A
	MOV	A,@R0
	CJNE	A,B,L3777
	LJMP	L377D
;
;
L3777:	CJNE	A,003H,L3783
	ORL	001H,#002H
;
L377D:	DJNZ	R2,L3769
	ORL	001H,#001H
	RET	
;
;
L3783:	ANL	001H,#0FCH
	RET	
;
;
;
; >>> FAMILLE DE ROUTINES 'TOUCHES +/- ET VOISINES' (analyse complete, deux points
;     d'entree identiques trouves ~L0993 et ~L3D5D): un groupe de 5 codes touche
;     consecutifs est traite en cascade: 0x26/0x0B('+' MINI10/SC20)->ici->L3796,
;     0x27/0x07('-' MINI10/SC20)->L37A8, 0x29(STANDARD, confirme par deduction)->L37C9,
;     0x2B(M/A MINI10, documente)->L37E2, 0x2A(STANDARD, confirme par deduction)->L37F3.
;     L3787 est le point d'entree '+' : si le flag 0D1H est actif, saute directement
;     dans L3796 (augmentation du volume).
;
L3787:	JB	0D1H,L3796
	JB	000H,L37A7
	JB	02EH,L37A7
	JNB	06DH,L3796
	JNB	053H,L37A7
;
;
; >>> AUGMENTE LE NIVEAU DE VOLUME (RAM 0x218C, 0-6 - meme convention que la table
;     MA05 deja confirmee): incremente tant que <6, puis LCALL L5931 (pulse
;     l'aiguillage audio MA04/MA05 via l'extenseur MN13, deja identifie).
;
L3796:	MOV	DPTR,#L218C
	MOVX	A,@DPTR		; DPTR=0x218C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18C
	ANL	A,#00FH
	CJNE	A,#006H,L37A2
	LJMP	L37A7
;
;
L37A2:	INC	A
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	LCALL	L5931
;
L37A7:	RET	
;
;
;
; >>> DIMINUE LE NIVEAU DE VOLUME (RAM 0x218C): decremente tant que !=1 (le niveau
;     0 - muet - n'est semble-t-il pas atteignable par cette touche), puis
;     LCALL L5931 (meme pulse d'aiguillage audio que L3796).
;
L37A8:	JB	0D1H,L37B7
	JB	000H,L37C8
	JB	02EH,L37C8
	JNB	06DH,L37B7
	JNB	053H,L37C8
;
L37B7:	MOV	DPTR,#L218C
	MOVX	A,@DPTR		; DPTR=0x218C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18C
	ANL	A,#00FH
	CJNE	A,#001H,L37C3
	LJMP	L37C8
;
;
L37C3:	DEC	A
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	LCALL	L5931
;
L37C8:	RET	
;
;
;
; >>> CONFIRME PAR DEDUCTION LOGIQUE (l'utilisateur atteste que les listes de
;     codes touches SC20 et MINI10 fournies dans OrganeExploitation.txt sont
;     EXHAUSTIVES): les codes UART 0x29 et 0x2A n'appartenant ni au SC20 ni au
;     MINI10, ils appartiennent NECESSAIREMENT a l'organe d'exploitation
;     STANDARD (3eme type gere par ce firmware, cf. 0x0464 d6-d4=010b, et son
;     mecanisme d'identification confirme en L56B3 avec le code UART 0x32).
;     L'organe STANDARD est documente par l'utilisateur (plan/schema materiel)
;     comme possedant un afficheur VFD 8 caracteres (comme le SC20, cf. note a
;     L56B3 - gestion d'affichage commune) et 14 touches physiques (peut-etre
;     13 emettant un code UART, le retro-eclairage etant possiblement gere en
;     local comme sur le MINI10). Il est notable que ces deux codes n'aient pas
;     ete releves dans une table de touches STANDARD officielle - aucune table
;     de ce type n'a ete fournie/retrouvee a ce jour.
;     Le bit d0 de l'octet 0468 (NON DOCUMENTE pour cette version du firmware selon
;     l'utilisateur) GATE ENTIEREMENT cette routine: si d0=1, RET immediat (fonction
;     desactivee) ; si d0=0, bascule 2 drapeaux internes (055H=1,058H=0 - meme
;     polarite que L37F3, opposee a L37E2) puis appelle L5931 - LA MEME ROUTINE DE
;     PULSE AUDIO (MA04/MA05) QUE LE VOLUME (L3796/L37A8), mais via un ETAT
;     DIFFERENT (055H/058H, distinct du niveau 0-6 stocke en 0x218C).
;     HYPOTHESE DE TRAVAIL REVISEE (non confirmee): 0468.d0 activerait/desactiverait
;     une FONCTION PROPRE A CES 2 TOUCHES STANDARD (0x29/0x2A) - possiblement
;     un reglage independant du volume principal (ex: squelch, ou une seconde
;     paire +/- specifique a ce clavier 14 touches), desactivable selon le
;     modele/variante de poste equipe d'un organe STANDARD.
;     RESTE A CONFIRMER (fonction exacte uniquement, l'organe d'origine ne fait
;     plus de doute): la touche physique du clavier STANDARD correspondant a
;     chacun des codes 0x29/0x2A, et l'effet observe sur l'equipement reel,
;     avec 0468.d0 dans ses deux etats si possible.
;     CHEMIN D'ACCES CONFIRME (cf. note complete a L3C5E): cette routine n'est
;     atteignable QUE depuis l'ECRAN DE VEILLE (065H=0) du poste, via le
;     second dispatcher L3C5E/L3C85 qui recharge le vrai code touche depuis la
;     RAM 07BH - AUCUNE navigation dans un sous-menu n'est necessaire pour le
;     test. (Correctif: la cascade via 064H evoquee dans une note precedente
;     ne menait PAS reellement ici - 064H ne peut jamais valoir 0x29/0x2A.)
;
L37C9:	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JB	ACC.0,L37E1		; EPROM perso 0x0468 -> d0: doc dit 'toujours a 0?' mais CE BIT EST REELLEMENT TESTE ET SIGNIFICATIF ici (cf. L37C9)
	CLR	058H
	SETB	055H
	JNB	053H,L37DA
	LCALL	L5931
;
L37DA:	JB	06DH,L37E1
	SETB	00CH
	SETB	023H
;
L37E1:	RET	
;
;
;
; >>> Meme famille que L37C9 (cf. note complete): declenchee par la touche M/A
;     (0x2B, documentee MINI10) DANS CE CONTEXTE PARTICULIER (pas la mise sous
;     tension normale - ce dispatcher est atteint depuis un menu/etat specifique
;     du programme). Bascule les drapeaux en POLARITE OPPOSEE a L37C9/L37F3
;     (055H=0,058H=1), puis appelle L593F (variante ET, cf. MA04/MA05) sous
;     conditions. NE TESTE PAS 0468.d0 (contrairement a L37C9) - fonctionne donc
;     toujours, meme si d0=1 desactive L37C9/L37F3.
;
L37E2:	CLR	055H
	SETB	058H
	JB	02EH,L37F2
	JB	000H,L37F2
	JB	06CH,L37F2
	LCALL	L593F
;
L37F2:	RET	
;
;
;
; >>> Meme famille que L37C9 (cf. note complete): declenchee par la touche 0x2A
;     de l'organe STANDARD (confirme par deduction - cf. note complete a L37C9).
;     Meme polarite de drapeaux que L37C9 (055H=1,058H=0). NE TESTE PAS 0468.d0
;     directement ici (contrairement a L37C9) mais fait partie du meme groupe
;     fonctionnel.
;
L37F3:	SETB	055H
	CLR	058H
	JB	02EH,L3809
	JB	000H,L3809
	JB	06CH,L3809
	JNB	06DH,L3806
	JNB	053H,L3809
;
L3806:	LCALL	L5931
;
L3809:	RET	
;
;
L380A:	MOV	051H,#00AH
	SETB	030H
	LCALL	L38C1
	CJNE	A,#0FFH,L383B
	JB	05AH,L3833
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.4,L382A		; EPROM perso 0x046A -> d4: deverrouillage DIVA sous cle uniquement (0 si DIVA inactif/pas de N1/organe MINI10-SC2)
	MOV	DPTR,#L21F8
	MOVX	A,@DPTR		; DPTR=0x21F8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F8
	ANL	A,#00FH
	JZ	L3833
	LJMP	L383B
;
;
L382A:	MOV	DPTR,#L21FC
	MOVX	A,@DPTR		; DPTR=0x21FC, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FC
	ANL	A,#00FH
	CJNE	A,#00FH,L383B
;
L3833:	LCALL	L3B84
	SETB	023H
	SETB	00DH
	RET	
;
;
L383B:	MOV	R1,#001H
	LCALL	L0355
	RET	
;
	MOV	DPTR,#L0473
	MOVX	A,@DPTR		; DPTR=0x0473, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	SWAP	A
	ANL	A,#007H
	LJMP	L3875
;
;
L384B:	MOV	DPTR,#L0474
	MOVX	A,@DPTR		; DPTR=0x0474, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#007H
	LJMP	L3875
;
;
L3854:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.4,L3864		; EPROM perso 0x046C -> d4=0(actif si 0): programmation '100000'N3 (lien 046F)
	MOV	DPTR,#L046F
	MOVX	A,@DPTR		; DPTR=0x046F, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#007H
	LJMP	L3875
;
;
L3864:	MOV	DPTR,#L0473
	MOVX	A,@DPTR		; DPTR=0x0473, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	RR	A
	RR	A
	ANL	A,#003H
	LJMP	L3875
;
;
L386F:	MOV	DPTR,#L0473
	MOVX	A,@DPTR		; DPTR=0x0473, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#003H
;
L3875:	MOV	R0,A
	MOV	R3,A
	MOV	07DH,A
	RET	
;
;
L387A:	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CPL	A
	RR	A
	RR	A
	ANL	A,#003H		; EPROM perso 0x046D, masque 0x3 -> d0=0(actif si 0): programmation des lignes sous cle d'acces (meme cle que le code N1 a 0489) ; d1=0(actif si 0): lignes alphanumeriques - si 1: lignes par numeros (tables depuis 0690)
	SJMP	L3875
;
L3885:	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.7,L3890		; EPROM perso 0x0469 -> d7: autorise la programmation du code N1 (code stocke a 0489)
	MOV	A,#003H
	SJMP	L3875
;
L3890:	CLR	A
	RET	
;
;
L3892:	MOV	DPTR,#L046B
	MOVX	A,@DPTR		; OPTIONS MISE SOUS TENSION/MICA/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. Code de deverrouillage 6 chiffres stocke a 06E1-06E6 si d6=1. | DPTR=0x046B, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.6,L3890		; EPROM perso 0x046B -> d6: 1=code de deverrouillage 6 chiffres necessaire a la mise sous tension (stocke 06E1-06E6)
	MOV	A,#006H
	SJMP	L3875
;
L389D:	MOV	R2,#006H
	MOV	DPTR,#L06E1
	MOV	R0,#072H
	LJMP	L38AE
;
;
L38A7:	MOV	R2,#003H
	MOV	DPTR,#L0489
	MOV	R0,#074H
;
L38AE:	MOVX	A,@DPTR		; DPTR=0x0489, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	XRL	A,@R0
	INC	DPTR
	INC	R0
	JNZ	L38BC
	DJNZ	R2,L38AE
	LCALL	L384B
	JZ	L38BE
	RET	
;
;
L38BC:	CLR	A
	RET	
;
;
L38BE:	MOV	A,#001H
	RET	
;
;
L38C1:	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#001H		; EPROM perso 0x046A, masque 0x1 -> d0: 0=pas d'option DIVA (d3-d1 doivent aussi etre a 0 dans ce cas)
	JZ	L38EB
	JB	04DH,L38E4
	JB	05AH,L38E4
	MOV	DPTR,#L0485
	MOVX	A,@DPTR		; DPTR=0x0485, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	R2,A
;
L38D4:	MOV	A,R2
	MOV	DPTR,#L2000
	LCALL	L03D3
	MOVX	A,@DPTR		; DPTR=0x2000 (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	ANL	A,#00FH
	XRL	A,#000H
	JZ	L38E9
	DJNZ	R2,L38D4
;
L38E4:	MOV	A,#0FFH
	LJMP	L38EB
;
;
L38E9:	MOV	A,#001H
;
L38EB:	RET	
;
;
L38EC:	JNB	068H,L38FC
	MOV	DPTR,#L046B
	MOVX	A,@DPTR		; OPTIONS MISE SOUS TENSION/MICA/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. Code de deverrouillage 6 chiffres stocke a 06E1-06E6 si d6=1. | DPTR=0x046B, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#003H		; EPROM perso 0x046B, masque 0x3 -> d0: 1=transfert automatique de la detresse (d1 doit alors etre a 0) - si d0/d1=1, decodage du statut defini a 0467 ; d1: 1=transfert manuel de la detresse (d0 doit alors etre a 0)
	JZ	L38FC
	MOV	A,#004H
	LJMP	L3915
;
;
L38FC:	JNB	04DH,L390B
	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.0,L390B		; EPROM perso 0x0469 -> d0: appel d'alarme (temporisation stockee a 0484)
	MOV	A,#002H
	LJMP	L3915
;
;
L390B:	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	ANL	A,#006H		; EPROM perso 0x0468, masque 0x6 -> d1: signalisation exterieure klaxon - appel de groupe ; d2: signalisation exterieure klaxon - appel individuel
	JZ	L3915
	MOV	A,#001H
;
L3915:	RET	
;
;
L3916:	MOV	DPTR,#L0474
	MOVX	A,@DPTR		; DPTR=0x0474, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	B,A
	RET	
;
;
L391D:	MOV	DPTR,#L046E
	MOVX	A,@DPTR		; DPTR=0x046E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#040H
	JZ	L3939
	MOV	DPTR,#L21E0
	MOVX	A,@DPTR		; DPTR=0x21E0, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1E0
	ANL	A,#00FH
	XRL	A,#00FH
	JZ	L3939
	MOV	DPTR,#L0474
	MOVX	A,@DPTR		; DPTR=0x0474, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#007H
	MOV	R3,A
	MOV	07DH,A
	MOV	R0,A
;
L3939:	RET	
;
;
L393A:	MOV	B,A
	MOV	DPTR,#L0472
	MOVX	A,@DPTR		; DPTR=0x0472, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	SWAP	A
	ANL	A,#00FH
	DEC	A
	CJNE	A,B,L3947
;
L3947:	JNC	L394A
	CLR	A
;
L394A:	RET	
;
;
L394B:	MOV	DPTR,#L2000
	LCALL	L03D3
	MOVX	A,@DPTR		; DPTR=0x2000 (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	ANL	A,#00FH
	RET	
;
;
L3955:	MOV	R0,#000H
	MOV	DPTR,#L046E
	MOVX	A,@DPTR		; DPTR=0x046E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#020H
	JZ	L397A
	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	MOV	DPTR,#L21B8
	MOVX	@DPTR,A		; DPTR=0x21B8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B8
	MOV	R0,A
	MOV	DPTR,#L21B9
	MOVX	A,@DPTR		; DPTR=0x21B9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B9
	ANL	A,#00FH
	JZ	L397A
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21B9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B9
	MOV	DPTR,#L21B8
	MOVX	@DPTR,A		; DPTR=0x21B8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B8
	MOV	R0,#080H
;
L397A:	MOV	A,R0
	RET	
;
;
L397C:	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	MOV	R2,A
	MOV	DPTR,#L21B8
	MOVX	A,@DPTR		; DPTR=0x21B8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B8
	ANL	A,#00FH
	JZ	L398E
	DEC	A
	JNZ	L398F
;
L398E:	MOV	A,R2
;
L398F:	MOVX	@DPTR,A		; DPTR=0x21B8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B8
	RET	
;
;
;
;
; >>> CORRECTION IMPORTANTE DE L'UTILISATEUR: ce message "DGC36"/"DGC 3P6"
;     N'EST PAS affiche automatiquement au demarrage. Le comportement reel
;     (confirme par l'utilisateur): a la mise sous tension, le VFD affiche
;     l'IDENTIFIANT D'APPEL SELECTIF du poste (lu en RAM) pendant quelques
;     secondes. Si l'utilisateur appuie sur la touche APPEL PENDANT cette
;     fenetre, l'affichage bascule sur le numero de version logiciel (CETTE
;     routine, L3991) tant que la touche reste enfoncee - relachee (code
;     UART 0x2F), l'identifiant d'appel reprend l'affichage. Cf. les points
;     d'appel confirmes en L109A (SC20, touche APPEL=0x04) et L3FE0 (MINI10,
;     touche APPEL=0x23), et le mecanisme de relachement en L108A/L3FC9-L3FD0.
;     Si APPEL n'est pas presse dans le delai imparti (ou est relache depuis
;     un moment), le logiciel efface l'identifiant d'appel et bascule sur
;     l'ecran de veille normal (mecanisme non trace precisement ici). CE
;     MECANISME COMPLET (identifiant d'appel + bascule version) N'EXISTE QUE
;     DURANT L'ECRAN DE DEMARRAGE (quelques secondes a la mise sous tension),
;     PAS pendant l'ecran de veille permanent qui suit (correction utilisateur).
;     Lit 5 caracteres via MOVC A,@A+DPTR depuis la constante logee en L0006
;     (0x0006-0x000A, trou inutilise du vecteur INT0), les place dans le
;     buffer d'affichage RAM interne (0x72,0x73,0x74,...), complete avec des
;     espaces (024H). "DGC36"/"DGC 3P6" correspond au nom du projet/de la
;     version de ce firmware (cf. nom du fichier .bin d'origine).
;
;
; >>> CORRECTION UTILISATEUR: PAS un message d'accueil automatique (cf. bloc
;     complet juste au-dessus) - affiche seulement sur pression d'APPEL durant
;     L'ECRAN DE DEMARRAGE (phase d'affichage de l'identifiant d'appel 5-tons,
;     quelques secondes a la mise sous tension), PAS depuis l'ecran de veille
;     permanent. Saute entierement vers l'affichage MINI10 si organe
;     MINI10 (JB 05AH,L39BE -> affichage reduit different, voir note a L39BE).
;     Lit 5 caracteres depuis
;     la constante en L0006 (0x0006-0x000A = D,G,C,3,6 table VFD) et les place
;     dans le tampon d'affichage RAM 0x72-0x79 dans l'ORDRE NATUREL gauche-a-droite
;     (pas de melange ici - le tampon RAM 0x72..0x79 EST deja range en ordre visuel
;     naturel position1..position8), avec 2 espaces (024H) fixes en 0x75/0x76 et
;     surtout: MOV 078H,#019H insere la lettre 'P' (19h table VFD) en position 7 -
;     CONFIRME l'analyse de l'utilisateur. Texte final affiche (positions 72..79):
;     'D','G','C',' ',' ','3','P','6' soit "DGC  3P6" - correspond exactement au
;     nom du firmware (DGC_3P6). Termine par MOV R1,#000H;LCALL L0355 (enfile
;     l'evenement 0 = 'afficher le tampon 0x72-0x79 en texte complet').
;
L3991:	JB	05AH,L39BE
	MOV	DPTR,#L0006
	CLR	A
	MOVC	A,@A+DPTR
	MOV	072H,A
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	073H,A
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	074H,A
	MOV	075H,#024H
	MOV	076H,#024H
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	077H,A
	MOV	078H,#019H
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	079H,A
	MOV	R1,#000H
	LCALL	L0355
	RET	
;
;
;
;
; >>> VARIANTE MINI10 du message d'accueil (cf. L3991 pour le SC20): reutilise
;     les 2 DERNIERS octets de la MEME constante en L0006/L0009 (adresses
;     0x0009='3',0x000A='6' - valeurs logiques 03H et 06H, PAS encore codees au
;     format MINI10 a ce stade), place '3'(03H) en RAM 0x72 (digit GAUCHE),
;     CORRECTION (l'utilisateur avait releve 'A' par erreur dans une note
;     precedente): la valeur fixe 00AH en RAM 0x75 (digit CENTRE) correspond au
;     caractere 'P' dans la table de codage MINI10 (0xA='P'), PAS 'A'. Et
;     '6'(06H) en RAM 0x76 (digit DROITE). Une fois converti par L52F2/L531E
;     (cf. notes completes) et transmis via L51AB (evenement 0, dispatch
;     MINI10): digit gauche='3', digit centre='P', digit droit='6' -> le MINI10
;     affiche "3 P 6" soit une version abregee du nom du firmware (DGC_3P6),
;     coherente avec un afficheur 3 digits bien plus limite que le VFD 8
;     caracteres du SC20 (qui affiche lui "DGC  3P6" en entier, cf. L3991).
;
L39BE:	MOV	DPTR,#L0009
	CLR	A
	MOVC	A,@A+DPTR
	MOV	072H,A
	MOV	075H,#00AH
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	076H,A
	MOV	R1,#000H
	LCALL	L0355
	RET	
;
;
L39D3:	JB	05AH,L39DF
	LCALL	L3B20
	MOV	DPTR,#L2249
	LCALL	L3A6B
;
L39DF:	RET	
;
;
L39E0:	LCALL	L03F3
	MOV	DPTR,#L0980
	MOV	B,#008H
	MUL	AB
	ADD	A,DPL
	MOV	DPL,A
	CLR	A
	ADDC	A,DPH
	MOV	DPH,A
	LCALL	L49E6
	MOV	R1,#000H
	LCALL	L0355
	RET	
;
;
L39FC:	MOV	DPTR,#L2246
	MOVX	A,@DPTR		; DPTR=0x2246, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x246
	ANL	A,#00FH
	JNZ	L3A12
	MOV	R2,A
	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.6,L3A10
	MOV	A,R2
	LJMP	L3A12
;
;
L3A10:	CLR	A
	RET	
;
;
L3A12:	MOV	DPTR,#L0900
	MOV	B,#008H
	MUL	AB
	ADD	A,DPL
	MOV	DPL,A
	CLR	A
	ADDC	A,DPH
	MOV	DPH,A
	PUSH	DPH
	PUSH	DPL
	MOV	R2,#008H
;
L3A28:	MOVX	A,@DPTR		; DPTR=0x0900, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,#020H,L3A2F
	INC	DPTR
	DJNZ	R2,L3A28
;
L3A2F:	POP	DPL
	POP	DPH
	CJNE	R2,#000H,L3A38
	SETB	C
	RET	
;
;
L3A38:	LCALL	L49E6
	MOV	R1,#000H
	LCALL	L0355
	CLR	C
	RET	
;
;
L3A42:	JB	05AH,L3A48
	LCALL	L3B39
;
L3A48:	LCALL	L384B
	MOV	R0,#005H
	MOV	DPTR,#L21B8
	MOVX	A,@DPTR		; DPTR=0x21B8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B8
	ANL	A,#00FH
	JZ	L3A67
	DEC	A
	MOV	B,#006H
	MUL	AB
	ADD	A,R0
	MOV	DPTR,#L2199
	ADD	A,DPL
	MOV	DPL,A
	MOV	R0,07DH
	LJMP	L3A6B
;
;
L3A67:	MOV	R0,A
	LJMP	L3A6B
;
;
L3A6B:	MOV	R1,#076H
;
L3A6D:	MOV	A,R0
	JZ	L3A7E
;
L3A70:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	CJNE	A,#00AH,L3A78
	MOV	A,#00CH
;
L3A78:	MOV	@R1,A
	DEC	DPL
	DEC	R1
	DJNZ	R0,L3A70
;
L3A7E:	MOV	A,#024H
	CJNE	R1,#071H,L3A86
	LJMP	L3AA6
;
;
L3A86:	CJNE	R1,#072H,L3A8D
	MOV	@R1,A
	LJMP	L3AA6
;
;
L3A8D:	MOV	@R1,A
	DEC	R1
	CJNE	R1,#072H,L3A8D
	JNB	05BH,L3AA6
	MOV	DPTR,#L21DA
	MOVX	A,@DPTR		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	ANL	A,#00FH
	JNB	04DH,L3AA5
	MOV	A,07CH
	JNB	04FH,L3AA5
	MOV	A,#00DH
;
L3AA5:	MOV	@R1,A
;
L3AA6:	MOV	R1,#000H
	LCALL	L0355
	CLR	061H
	RET	
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR - EFFACEMENT DE LA SAISIE EN COURS: remplace
;     R0 caracteres consecutifs du tampon d'affichage (a partir de la position
;     076H, vers la gauche) par le CODE VFD 0x0BH ('-', tiret) - exactement le
;     comportement decrit pour la touche '#' sur les ecrans CANAL et N2.
;
L3AAE:	MOV	R1,#076H
;
L3AB0:	MOV	A,#00BH
;
L3AB2:	MOV	@R1,A
	DEC	R1
	DJNZ	R0,L3AB2
	MOV	A,#024H
	CJNE	R1,#071H,L3ABE
	LJMP	L3AD0
;
;
L3ABE:	CJNE	R1,#072H,L3AC5
	MOV	@R1,A
	LJMP	L3AD0
;
;
L3AC5:	MOV	@R1,A
	DEC	R1
	CJNE	R1,#072H,L3AC5
	JB	04DH,L3AD0
	MOV	A,07CH
	MOV	@R1,A
;
L3AD0:	MOV	R1,#000H
	LCALL	L0355
	SETB	061H
	CLR	036H
	CLR	04CH
	RET	
;
;
L3ADC:	MOV	A,#024H
	MOV	R2,#008H
	MOV	R0,#079H
;
L3AE2:	MOV	@R0,A
	DEC	R0
	DJNZ	R2,L3AE2
	LCALL	L3916
	MOV	DPTR,#L21F7
	MOV	R0,#076H
	LCALL	L0505
	MOV	R1,#000H
	LCALL	L0355
	SETB	060H
	MOV	05CH,#014H
	SETB	03BH
	RET	
;
;
;
; >>> DEBUT D'UNE SERIE DE ROUTINES 'SUFFIXE' (positions 7-8 du VFD SC20,
;     RAM 078H/079H): chacune fixe un couple de caracteres distinct puis rejoint
;     la queue commune L3B04 (qui efface position 6 = 077H). Appelees
;     individuellement (pas de table de saut commune trouvee) depuis ~30
;     endroits differents du programme, tres probablement une bibliotheque
;     d'abreviations/unites reutilisee par un systeme de menus/ecrans de
;     configuration. Cette entree: RAM 078H='R',079H='N' -> suffixe "RN".
;
L3AFE:	MOV	079H,#017H
	MOV	078H,#01BH
;
L3B04:	MOV	077H,#024H
	RET	
;
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE): position8(079H)='P' seul.
;
L3B08:	MOV	079H,#019H
	RET	
;
	MOV	079H,#01DH
	RET	
;
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE): 078H='A',079H='S' -> "AS".
;
L3B10:	MOV	079H,#01CH
	MOV	078H,#00AH
	SJMP	L3B04
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE): 078H='R',079H='E' -> "RE".
;
L3B18:	MOV	079H,#00EH
	MOV	078H,#01BH
	SJMP	L3B04
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE): 078H='S',079H='T' -> "ST",
;     avec en plus une logique conditionnelle sur position1 (072H, valeur lue en
;     RAM 07CH ou 'D' fixe selon le flag 04DH).
;
L3B20:	MOV	079H,#01DH
	MOV	078H,#01CH
	MOV	A,07CH
	JNB	04DH,L3B2D
	MOV	A,#00DH
;
L3B2D:	MOV	072H,A
	SJMP	L3B04
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE): 078H='C',079H='P' -> "CP".
;
L3B31:	MOV	079H,#00AH
	MOV	078H,#010H
	SJMP	L3B04
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE), variante DYNAMIQUE: 078H='M'
;     fixe, 079H=CHIFFRE lu en RAM (0x21B8, 4 bits bas) -> suffixe "M#" - tres
;     probablement un NUMERO DE MEMOIRE (touche MEM du SC20/MINI10, cf.
;     OrganeExploitation.txt), affichant par exemple "M1","M2"...
;
L3B39:	MOV	078H,#016H
	MOV	DPTR,#L21B8
	MOVX	A,@DPTR		; DPTR=0x21B8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B8
	ANL	A,#00FH
	MOV	079H,A
	SJMP	L3B04
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE): 078H='D',079H='E' -> "DE".
;
L3B46:	MOV	079H,#00EH
	MOV	078H,#00DH
	SJMP	L3B04
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE): 078H='I',079H='D' -> "ID".
;
L3B4E:	MOV	079H,#00DH
	MOV	078H,#012H
	SJMP	L3B04
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE): 078H='C',079H='O' -> "CO".
;
L3B56:	MOV	079H,#018H
	MOV	078H,#010H
	SJMP	L3B04
;
;
; >>> CONFIRME PAR L'UTILISATEUR: cette routine est appelee au demarrage du
; poste LORSQU'UN CODE DE DEVERROUILLAGE EST NECESSAIRE A LA MISE SOUS
; TENSION (octet EPROM 0x046B bit d6 actif, code a 6 chiffres stocke de
; 0x06E1 a 0x06E6, EpromPersonnalisation.txt). Le 'C' isole affiche ici
; (position 8 seule, reste du buffer efface) est vraisemblablement le
; debut de l'invite de saisie du code (ex: debut d'un message style
; 'entrer CODE').
; >>> CAS PARTICULIER de la serie 'suffixe' (cf. note complete a L3AFE): EFFACE
;     la totalite du tampon (072H a 078H = espace) et place SEULEMENT 'C' en
;     derniere position (079H), puis declenche IMMEDIATEMENT l'affichage
;     (MOV R1,#000H;LCALL L0355) au lieu de rejoindre la queue commune L3B04 -
;     message final: "       C" (7 espaces puis 'C'). Signification exacte du
;     'C' isole incertaine (a confirmer par le contexte d'appel, ligne ~7997).
;
L3B5E:	MOV	079H,#010H
	MOV	078H,#024H
	MOV	077H,#024H
	MOV	076H,#024H
	MOV	075H,#024H
	MOV	074H,#024H
	MOV	073H,#024H
	MOV	072H,#024H
	MOV	R1,#000H
	LCALL	L0355
	RET	
;
;
;
; >>> Routine 'suffixe' (cf. note complete a L3AFE): 078H='P',079H='L' -> "PL".
;
L3B7C:	MOV	079H,#015H
	MOV	078H,#00AH
	SJMP	L3B04
;
;
; >>> Efface seulement les positions centrales (073H-076H) sans declencher
;     l'affichage (pas d'appel a L0355 ici) - utilisee comme etape intermediaire
;     avant qu'un appelant ne fixe lui-meme les positions 072H et 077H-079H.
;
L3B84:	MOV	076H,#024H
	MOV	075H,#024H
	MOV	074H,#024H
	MOV	073H,#024H
	RET	
;
;
L3B91:	MOV	DPTR,#L21DB
	MOVX	@DPTR,A		; DPTR=0x21DB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DB
	SETB	03BH
	MOV	05CH,#01EH
	SETB	036H
	MOV	057H,#028H
	CLR	061H
	RET	
;
;
L3BA2:	CLR	068H
	MOV	P1,#0CFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#CFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P16,P17 | [si reellement pulsee -> commande extenseur 0xCF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	MOV	A,#0DFH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xDF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port5 [TCS_DEC,XEAS,XURG,ACQ(ETDP-ACQ)]
	RET	
;
;
;
; >>> CONFIRME - VERIFICATION DE COMPLETUDE DE LA SAISIE N2 (PAS une
;     verification de VALEUR comme pour le canal, cf. L3BC3): parcourt les 3
;     derniers caracteres du tampon et positionne R4=1 SI AU MOINS UN CARACTERE
;     EST ENCORE '-' (0x0BH, code VFD tiret - saisie incomplete). R4=1 ->
;     considere comme 'a completer' (cf. L0D98) ; R4=0 -> saisie complete,
;     TOUJOURS ACCEPTEE SANS AUTRE VERIFICATION - coherent avec la description
;     de l'utilisateur ('appel selectif N2 peut avoir n'importe quelle valeur
;     entre 00000 et 99999', donc pas de controle de plage necessaire, juste la
;     completude).
;
L3BAD:	MOV	R1,#076H
	PUSH	002H
	MOV	R4,#000H
	MOV	R2,003H
;
L3BB5:	MOV	A,@R1
	CJNE	A,#00BH,L3BBC
	MOV	R4,#001H
	DEC	R2
;
L3BBC:	DEC	R1
	DJNZ	R3,L3BB5
	MOV	A,R2
	POP	002H
	RET	
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR (recherche demandee explicitement) - VRAIE
;     VALIDATION DU NUMERO DE CANAL, EN DEUX ETAPES:
;       1) VERIFICATION DE PLAGE: chaque chiffre saisi (positions 074H-076H) est
;          compare a 0x0A (10) - SI UN CHIFFRE EST >= 10 (donc pas un digit 0-9
;          valide), RETOUR IMMEDIAT INVALIDE (A=0, cf. L3BFE). C'EST
;          EXACTEMENT CE QUI SE PRODUIT AVEC LE BUG '100000 N3' DEJA DOCUMENTE
;          (cf. note complete a L4C31/L0150): la valeur corrompue 0x0F (15) est
;          immediatement rejetee ici, ce qui declenche le clignotement de 'CA'
;          (cf. L0E89) - CONFIRME LE LIEN ENTRE LE BUG DE RECOUVREMENT RAM ET
;          LE COMPORTEMENT OBSERVE SUR L'ECRAN DE SAISIE (mais PAS encore le
;          lien avec l'alerte ALSIG elle-meme, recherche mise de cote).
;       2) VERIFICATION D'EXISTENCE: convertit les chiffres valides en une
;          valeur numerique (jusqu'a 3 chiffres, avec detection de
;          debordement), multiplie par 4 pour indexer une table de 4 octets
;          par canal, et verifie qu'AU MOINS UN DES 4 OCTETS N'EST PAS 0xFF
;          (0xFF = canal non configure/inexistant) - sinon egalement invalide.
;     Retour: A=0xFF si valide, A=0 si invalide (teste par le JNZ/JZ appelant).
;
L3BC3:	LCALL	L386F
	MOV	A,076H
	CJNE	A,#00AH,L3BCB
;
L3BCB:	JNC	L3BFE
	DJNZ	R0,L3BD2
	LJMP	L3BEC
;
;
L3BD2:	MOV	A,075H
	MOV	B,#00AH
	MUL	AB
	ADD	A,076H
	MOV	R1,A
	DJNZ	R0,L3BE0
	LJMP	L3BEC
;
;
L3BE0:	MOV	A,074H
	MOV	B,#064H
	MUL	AB
	JB	OV,L3BFE
	ADD	A,R1
	JC	L3BFE
;
L3BEC:	MOV	B,#004H
	MUL	AB
	MOV	R0,#004H
	MOV	DPL,A
	MOV	DPH,B
;
L3BF7:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	CJNE	A,#0FFH,L3C00
	INC	DPTR
	DJNZ	R0,L3BF7
;
L3BFE:	CLR	A
	RET	
;
;
L3C00:	MOV	A,#0FFH
	MOV	R0,07DH
	RET	
;
;
L3C05:	MOV	R1,#076H
;
L3C07:	MOV	A,@R1
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	DEC	DPL
	DEC	R1
	DJNZ	R0,L3C07
	RET	
;
;
L3C0F:	MOV	A,072H
	ANL	A,#00FH
	MOV	07CH,A
	MOV	DPTR,#L218D
	MOVX	@DPTR,A		; DPTR=0x218D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18D
	MOV	DPTR,#L21DA
	MOVX	@DPTR,A		; DPTR=0x21DA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DA
	LCALL	L0410
	LCALL	L045A
	SETB	02AH
	CLR	067H
	RET	
;
;
L3C28:	LCALL	L0478
	LCALL	L3916
	MOV	R0,#076H
	MOV	DPTR,#L21F7
	JNB	B.3,L3C39
	LCALL	L3C5A
;
L3C39:	DEC	DPL
	JNB	B.4,L3C41
	LCALL	L3C5A
;
L3C41:	DEC	DPL
	JNB	B.5,L3C49
	LCALL	L3C5A
;
L3C49:	DEC	DPL
	JNB	B.6,L3C51
	LCALL	L3C5A
;
L3C51:	DEC	DPL
	JNB	B.7,L3C59
	LCALL	L3C5A
;
L3C59:	RET	
;
;
L3C5A:	MOV	A,@R0
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	DEC	R0
	RET	
;
;
;
; >>> CONFIRME - VERITABLE CHEMIN VERS L37C9/L37E2/L37F3 (organe STANDARD):
;     SECOND dispatcher, independant de celui en L06CB, mais indexe par la
;     MEME variable d'etat 065H (table de saut propre en L3C67). Pour
;     065H=0 (ECRAN DE VEILLE, meme etat que L0737 - les deux dispatchers
;     sont donc actifs simultanement pour cet etat), saute vers L3C85.
;     L3C85 teste d'abord 064H (quelques cas particuliers), puis RECHARGE A
;     depuis la RAM 07BH (MOV A,07BH, cf. L3C9F) - CETTE VALEUR EST LE VRAI
;     CODE TOUCHE RECU (stocke par le decodeur clavier generique, L5724:
;     MOV 07BH,R3), et non plus une variable a plage limitee comme 064H.
;     C'est cette cascade (testant successivement 0x20,0x22,0x21,0x23,0x24,
;     0x25,0x28... tous des codes touche MINI10 reels) qui, en tombant en
;     cascade jusqu'a 0x29/0x2B/0x2A (cf. L3D5D et suivants), atteint
;     effectivement L37C9/L37E2/L37F3.
;     CONCLUSION PRATIQUE: puisque 065H=0 correspond a l'ECRAN DE VEILLE,
;     les deux touches STANDARD 0x29/0x2A devraient etre actives directement
;     depuis l'ecran de veille du poste, SANS navigation dans un sous-menu.
;
L3C5E:	MOV	A,065H
	MOV	DPTR,#L3C67
	MOV	R3,A
	ADD	A,R3
	ADD	A,R3
	JMP	@A+DPTR
;
;
L3C67:	LJMP	L3C85
;
	LJMP	L3DBB
;
	LJMP	L3DE5
;
	LJMP	L3E4B
;
	LJMP	L3EA8
;
	LJMP	L3F15
;
	LJMP	L3F44
;
	LJMP	L3F89
;
	LJMP	L3FF1
;
	LJMP	L4004
;
;
L3C85:	MOV	A,064H
	CJNE	A,#00DH,L3C8D
	LJMP	L585F
;
;
L3C8D:	CJNE	A,#010H,L3C93
	LJMP	L3C96
;
;
L3C93:	CJNE	A,#00EH,L3C9F
;
L3C96:	JB	031H,L3C9F
	JB	067H,L3C9F
	LJMP	L585F
;
;
L3C9F:	MOV	A,07BH
	CJNE	A,#020H,L3CB8		; CJNE: si EGAL a 0x20 (A) -> PAS de saut, traitement de: MINI10 touche ANNUAIRE ; si DIFFERENT -> saut au test suivant de la chaine| CJNE: si EGAL a 0x20 (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche ANNUAIRE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	A,064H
	JNZ	L3CB5
	CLR	052H
	LCALL	L4060
	SETB	035H
	MOV	056H,#032H
	MOV	065H,#001H
;
L3CB5:	LJMP	L585F
;
;
L3CB8:	CJNE	A,#022H,L3CBE		; CJNE: si EGAL a 0x22 (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche '1' ; si DIFFERENT -> saut au test suivant de la chaine
	LJMP	L3CC1
;
;
L3CBE:	CJNE	A,#021H,L3CD4		; CJNE: si EGAL a 0x21 (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche '10' ; si DIFFERENT -> saut au test suivant de la chaine
;
L3CC1:	LCALL	L409B
	JZ	L3CD1
	MOV	DPTR,#L216A
	LCALL	L3A6B
	MOV	065H,#008H
	SETB	060H
;
L3CD1:	LJMP	L585F
;
;
L3CD4:	CJNE	A,#023H,L3CF8		; CJNE: si EGAL a 0x23 (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche APPEL ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	A,064H
	CJNE	A,#009H,L3CDF
	LJMP	L585F
;
;
L3CDF:	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JB	ACC.0,L3CEC
	MOV	01FH,#000H
	LJMP	L3EB0
;
;
L3CEC:	LCALL	L38C1
	JZ	L3CD1
	SETB	023H
	SETB	00DH
	LJMP	L585F
;
;
L3CF8:	CJNE	A,#024H,L3D02		; CJNE: si EGAL a 0x24 (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche '#' ; si DIFFERENT -> saut au test suivant de la chaine
	SETB	023H
	SETB	00CH
	LJMP	L3EE5
;
;
L3D02:	CJNE	A,#025H,L3D1D		; CJNE: si EGAL a 0x25 (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche MEM ; si DIFFERENT -> saut au test suivant de la chaine
;
L3D05:	LCALL	L3955
	JZ	L3D1A
	CJNE	A,#080H,L3D12
	MOV	A,#004H
	LCALL	L3B91
;
L3D12:	LCALL	L3A42
	MOV	065H,#004H
	SETB	060H
;
L3D1A:	LJMP	L585F
;
;
L3D1D:	CJNE	A,#028H,L3D5D		; CJNE: si EGAL a 0x28 (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche ALARME ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L38EC
	JZ	L3D54
	JB	ACC.1,L3D31
	JB	ACC.2,L3D57
	LCALL	L40BC
	LJMP	L585F
;
;
L3D31:	MOV	DPTR,#L0474
	MOVX	A,@DPTR		; DPTR=0x0474, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	R4,A
	MOV	DPTR,#L0483
	MOVX	A,@DPTR		; DPTR=0x0483, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	DPTR,#L0554
	MOV	B,#00DH
	LCALL	L03D6
	MOV	B,R4
	MOV	R0,#076H
	LCALL	L0505
	MOV	R1,#000H
	LCALL	L0355
	SETB	060H
	MOV	065H,#005H
;
L3D54:	LJMP	L585F
;
;
L3D57:	LCALL	L3BA2
	LJMP	L585F
;
;
L3D5D:	CJNE	A,#07FH,L3D6B		; CJNE: si EGAL a 0x7F (RAM 07BH, via A) -> PAS de saut, traitement ci-apres ; si DIFFERENT -> saut au test suivant de la chaine. FAIT VERIFIE (pas une interpretation): cette valeur 0x7F n'est JAMAIS recue via l'UART - elle est ECRITE PAR UNE INSTRUCTION IMMEDIATE (MOV R3,#07FH) en L56B3, uniquement quand l'identification d'organe reussit (CJNE A,B ne saute pas), puis injectee dans le meme circuit de traitement (L5724/RAM 07BH) que les vrais codes touche. INTERPRETATION (la mienne, pas documentee): j'appelle cette valeur fabriquee une 'sentinelle' par analogie avec cette technique de programmation courante - aucune source ne nomme ce mecanisme ainsi.
	MOV	056H,#014H
	SETB	035H
	MOV	065H,#007H
	LJMP	L585F
;
;
L3D6B:	CJNE	A,#03DH,L3D71		; CJNE: si EGAL a 0x3D (RAM 07BH, via A) -> PAS de saut, traitement de: plage identification organe (cf. L56B3) ; si DIFFERENT -> saut au test suivant de la chaine
	LJMP	L3EE5
;
;
L3D71:	CJNE	A,#026H,L3D7A		; CJNE: si EGAL a 0x26 (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche '+' ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L3787
	LJMP	L585F
;
;
L3D7A:	CJNE	A,#027H,L3D83		; CJNE: si EGAL a 0x27 (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche '-' ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L37A8
	LJMP	L585F
;
;
L3D83:	CJNE	A,#029H,L3D8C		; CJNE: si EGAL a 0x29 (RAM 07BH, via A) -> PAS de saut, traitement de: STANDARD touche (cf. L37C9) ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L37C9
	LJMP	L585F
;
;
L3D8C:	CJNE	A,#02BH,L3D95		; CJNE: si EGAL a 0x2B (RAM 07BH, via A) -> PAS de saut, traitement de: MINI10 touche M/A ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L37E2
	LJMP	L585F
;
;
L3D95:	CJNE	A,#02AH,L3D9B		; CJNE: si EGAL a 0x2A (RAM 07BH, via A) -> PAS de saut, traitement de: STANDARD touche (cf. L37F3) ; si DIFFERENT -> saut au test suivant de la chaine
	LCALL	L37F3
;
L3D9B:	CJNE	A,#041H,L3DB8		; CJNE: si EGAL a 0x41 (RAM 07BH, via A) -> PAS de saut, traitement de: SC20 (reponse organe) COMMANDE INCONNUE ; si DIFFERENT -> saut au test suivant de la chaine
	CLR	035H
	CLR	03BH
	CLR	036H
	CLR	05DH
	CLR	05EH
	CLR	060H
	MOV	065H,#000H
	LCALL	L391D
	JZ	L3DB8
	MOV	DPTR,#L21E0
	LCALL	L3A6B
;
L3DB8:	LJMP	L585F
;
;
L3DBB:	MOV	A,07BH
	CJNE	A,#03CH,L3DC6
	LCALL	L4060
	LJMP	L585F
;
;
L3DC6:	CJNE	A,#03EH,L3DD4
	SETB	03AH
	MOV	05BH,#032H
	LCALL	L4060
	LJMP	L585F
;
;
L3DD4:	CJNE	A,#02FH,L3DE3
	SETB	052H
	CLR	03AH
	SETB	035H
	MOV	056H,#032H
	MOV	065H,#002H
;
L3DE3:	SJMP	L3D9B
;
L3DE5:	MOV	A,07BH
	CJNE	A,#020H,L3DFC		; CJNE: si EGAL a 0x20 (A) -> PAS de saut, traitement de: MINI10 touche ANNUAIRE ; si DIFFERENT -> saut au test suivant de la chaine
	CLR	035H
	CLR	052H
	LCALL	L4060
	SETB	03AH
	MOV	05BH,#032H
	MOV	065H,#001H
	LJMP	L585F
;
;
L3DFC:	CJNE	A,#022H,L3E07
	SETB	05DH
	LCALL	L3C0F
	LJMP	L3CC1
;
;
L3E07:	CJNE	A,#021H,L3E12
	SETB	05EH
	LCALL	L3C0F
	LJMP	L3CC1
;
;
L3E12:	CJNE	A,#023H,L3E1D
	CLR	035H
	LCALL	L3C0F
	LJMP	L3CDF
;
;
L3E1D:	CJNE	A,#024H,L3E31
	CLR	035H
	MOV	A,07CH
	MOV	072H,A
	MOV	R1,#005H
	LCALL	L0355
	MOV	065H,#000H
	LJMP	L585F
;
;
L3E31:	CJNE	A,#025H,L3E3C
	CLR	035H
	LCALL	L3C0F
	LJMP	L3D05
;
;
L3E3C:	CJNE	A,#03EH,L3E48
	LCALL	L3C0F
	MOV	065H,#000H
	LJMP	L585F
;
;
L3E48:	LJMP	L3D71
;
;
L3E4B:	MOV	A,07BH
	CJNE	A,#03CH,L3E56
	LCALL	L4015
	LJMP	L585F
;
;
L3E56:	CJNE	A,#03EH,L3E64
	SETB	03AH
	MOV	05BH,#032H
	LCALL	L4015
	LJMP	L585F
;
;
L3E64:	CJNE	A,#02FH,L3E77
	CLR	05DH
	CLR	05EH
	CLR	035H
	CLR	03AH
	SETB	03BH
	MOV	05CH,#078H
	LJMP	L585F
;
;
L3E77:	CJNE	A,#022H,L3E89
	SETB	05DH
;
L3E7C:	CLR	03BH
	LCALL	L4015
	SETB	035H
	MOV	056H,#032H
	LJMP	L585F
;
;
L3E89:	CJNE	A,#021H,L3E90
	SETB	05EH
	SJMP	L3E7C
;
L3E90:	CJNE	A,#024H,L3E96
	LJMP	L3EE5
;
;
L3E96:	CJNE	A,#023H,L3E9F
	LCALL	L408C
	LJMP	L3EB0
;
;
L3E9F:	CJNE	A,#03DH,L3EA5
	LJMP	L3EE5
;
;
L3EA5:	LJMP	L3D71
;
;
L3EA8:	MOV	A,07BH
	CJNE	A,#023H,L3EC3		; CJNE: si EGAL a 0x23 (A) -> PAS de saut, traitement de: MINI10 touche APPEL ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	01FH,#003H
;
L3EB0:	CLR	03BH
	MOV	R1,#001H
	LCALL	L0355
	CLR	060H
	MOV	065H,#006H
	SETB	023H
	SETB	008H
	LJMP	L585F
;
;
L3EC3:	CJNE	A,#024H,L3EF6
	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	JZ	L3EE5
	MOV	DPTR,#L2198
	MOV	A,#002H
	MOVX	@DPTR,A		; DPTR=0x2198, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x198
	MOV	DPTR,#L2197
	MOV	A,#001H
	MOVX	@DPTR,A		; DPTR=0x2197, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x197
	SETB	025H
	MOV	05CH,#001H
	MOV	065H,#009H
	LJMP	L585F
;
;
L3EE5:	CLR	036H
	CLR	03BH
	MOV	R1,#001H
	LCALL	L0355
	CLR	060H
	MOV	065H,#000H
	LJMP	L585F
;
;
L3EF6:	CJNE	A,#025H,L3F02
	LCALL	L397C
	LCALL	L3A42
	LJMP	L585F
;
;
L3F02:	CJNE	A,#03DH,L3F07
	SJMP	L3EE5
;
L3F07:	CJNE	A,#02FH,L3F12
	SETB	03BH
	MOV	05CH,#028H
	LJMP	L585F
;
;
L3F12:	LJMP	L3D71
;
;
L3F15:	MOV	A,07BH
	CJNE	A,#02FH,L3F22		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	05CH,#032H
	SETB	03BH
	LJMP	L3DB8
;
;
L3F22:	CJNE	A,#03DH,L3F2A
	LCALL	L40BC
	SJMP	L3EE5
;
L3F2A:	CJNE	A,#024H,L3F31
	CLR	03BH
	SJMP	L3EE5
;
L3F31:	CJNE	A,#023H,L3F41
	MOV	01FH,#008H
	SETB	023H
	SETB	008H
	MOV	065H,#006H
	LJMP	L585F
;
;
L3F41:	LJMP	L3D71
;
;
L3F44:	MOV	A,07BH
	CJNE	A,#040H,L3F4B
	SJMP	L3EE5
;
L3F4B:	CJNE	A,#03FH,L3F5E
	MOV	R0,07DH
	MOV	DPTR,#L216A
	LCALL	L3A6B
	SETB	03BH
	MOV	05CH,#014H
	LJMP	L585F
;
;
L3F5E:	CJNE	A,#03DH,L3F63
	SJMP	L3EE5
;
L3F63:	CJNE	A,#023H,L3F6D
	SETB	023H
	SETB	008H
	LJMP	L585F
;
;
L3F6D:	CJNE	A,#024H,L3F7A
	SETB	023H
	SETB	00CH
	MOV	065H,#000H
	LJMP	L3DB8
;
;
L3F7A:	CJNE	A,#029H,L3F86
	LCALL	L37C9
	MOV	065H,#000H
	LJMP	L585F
;
;
L3F86:	LJMP	L3D71
;
;
L3F89:	MOV	A,07BH
	CJNE	A,#03EH,L3F9B
	MOV	R1,#010H
	LCALL	L0355
	MOV	05BH,#032H
	SETB	03AH
	LJMP	L585F
;
;
L3F9B:	CJNE	A,#03CH,L3FA1
	LJMP	L3FA4
;
;
L3FA1:	CJNE	A,#07FH,L3FBB
;
L3FA4:	CLR	03AH
	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JB	ACC.0,L3FB3
	LCALL	L3ADC
	LJMP	L585F
;
;
L3FB3:	MOV	05CH,#014H
	SETB	03BH
	LJMP	L585F
;
;
L3FBB:	CJNE	A,#03DH,L3FC9
;
L3FBE:	LCALL	L380A
	CLR	060H
	MOV	065H,#000H
	LJMP	L585F
;
;
;
; >>> Equivalent MINI10 de L108A (cf. note complete): gestion du relachement/
;     maintien de la touche APPEL pour l'affichage de la version logicielle.
;
L3FC9:	CJNE	A,#024H,L3FD0
	CLR	03BH
	SJMP	L3FBE
;
L3FD0:	CJNE	A,#02FH,L3FE0
	JB	03BH,L3FD8
	SJMP	L3FA4
;
L3FD8:	MOV	05CH,#014H
	SETB	03BH
	LJMP	L585F
;
;
;
; >>> DETECTION DE LA TOUCHE APPEL (code UART 0x23, MINI10) - CONFIRME PAR
;     L'UTILISATEUR: equivalent de L109A pour le MINI10, declenche L3991
;     (affichage version logicielle, variante MINI10 en L39BE).
;
L3FE0:	CJNE	A,#023H,L3FEE
	MOV	05CH,#000H
	CLR	03BH
	LCALL	L3991
	LJMP	L585F
;
;
L3FEE:	LJMP	L3D71
;
;
L3FF1:	MOV	A,07BH
	CJNE	A,#02FH,L4001		; CJNE: si EGAL a 0x2F (A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	065H,#003H
	MOV	05CH,#078H
	SETB	03BH
	LJMP	L585F
;
;
L4001:	LJMP	L3D71
;
;
L4004:	MOV	A,07BH
	CJNE	A,#03DH,L4012
	JB	025H,L400F
	LJMP	L3EE5
;
;
L400F:	MOV	05CH,#001H
;
L4012:	LJMP	L585F
;
;
L4015:	MOV	R0,#000H
	MOV	DPTR,#L0467
	MOVX	A,@DPTR		; DPTR=0x0467, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.0,L4029
	MOV	DPTR,#L047D
	MOVX	A,@DPTR		; FREQUENCE 5-TONS DU CARACTERE DE GROUPE 'G' (EpromPersonnalisation.txt) - 'G' = code UART 0Ch affiche sur le VFD SC20 lors de la saisie clavier (cf. table VFD deja confirmee). d3-d0 = valeur decimale 0-9 (ZVEI) ou 0-9/0Ah (CCIR, 'G'). | DPTR=0x047D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#00FH
	CJNE	A,#00AH,L4029
	MOV	R0,#00CH
;
L4029:	MOV	DPTR,#L0466
	MOV	A,07DH
	CLR	C
	JB	05DH,L4040
	SUBB	A,#002H
	JC	L404F
	MOVX	A,@DPTR		; DPTR=0x0466, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	RR	A
	MOV	R1,#075H
	LCALL	L4050
	LJMP	L404A
;
;
L4040:	SUBB	A,#001H
	JC	L404F
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	MOV	R1,#076H
	LCALL	L4050
;
L404A:	MOV	R1,#000H
	LCALL	L0355
;
L404F:	RET	
;
;
L4050:	CJNE	@R1,#00CH,L4056
;
L4053:	MOV	@R1,#000H
	RET	
;
;
L4056:	INC	@R1
	CJNE	@R1,#00AH,L405F
	JNB	ACC.0,L4053
	MOV	A,R0
	MOV	@R1,A
;
L405F:	RET	
;
;
L4060:	MOV	A,072H
	ANL	A,#00FH
	MOV	R2,A
;
L4065:	INC	R2
	CJNE	R2,#00AH,L406C
	LJMP	L406F
;
;
L406C:	CJNE	R2,#00BH,L4074
;
L406F:	MOV	R2,#000H
	LJMP	L4084
;
;
L4074:	MOV	A,R2
	MOV	DPTR,#L055A
	MOV	B,#00DH
	LCALL	L03D6
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	CJNE	A,#0FFH,L4084
	SJMP	L4065
;
L4084:	MOV	072H,R2
	MOV	R1,#005H
	LCALL	L0355
	RET	
;
;
L408C:	MOV	05CH,#078H
	MOV	R0,07DH
	MOV	DPTR,#L216A
	LCALL	L3C05
	MOV	01FH,#001H
	RET	
;
;
L409B:	MOV	DPTR,#L0467
	MOVX	A,@DPTR		; DPTR=0x0467, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#00FH
	JB	ACC.0,L40AE
	JB	ACC.1,L40B5
	JB	ACC.2,L40B5
	JB	ACC.3,L40B5
	RET	
;
;
L40AE:	MOV	DPTR,#L0474
	MOVX	A,@DPTR		; DPTR=0x0474, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	LJMP	L40B6
;
;
L40B5:	CLR	A
;
L40B6:	ANL	A,#003H
	MOV	R0,A
	MOV	07DH,A
	RET	
;
;
L40BC:	CPL	056H
	MOV	078H,#061H
	JNB	056H,L40C7
	MOV	078H,#060H
;
L40C7:	MOV	R1,#007H
	LCALL	L0355
	RET	
;
;
L40CD:	LCALL	L4600
	LJMP	L21C9
;
;
L40D3:	JBC	007H,L4102
	JBC	00CH,L4157
	JBC	006H,L40CD
	JBC	009H,L4108
	JBC	00AH,L4113
	JBC	013H,L412E
	CLR	01AH
	CLR	01BH
	CLR	00EH
	CLR	00DH
	CLR	040H
	CLR	005H
	CLR	010H
	CLR	004H
	CLR	00FH
	CLR	016H
	CLR	015H
	CLR	008H
	CLR	011H
	LJMP	L585F
;
;
L4102:	LCALL	L468A
	LJMP	L21C9
;
;
L4108:	LCALL	L4648
	MOV	052H,#014H
	SETB	031H
	LJMP	L21C9
;
;
L4113:	CLR	059H
	MOV	DPTR,#L2251
	MOVX	A,@DPTR		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	ANL	A,#00FH
	DEC	A
	MOVX	@DPTR,A		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	JZ	L4128
	LCALL	L45EB
	MOV	064H,#01FH
	LJMP	L21C9
;
;
L4128:	MOV	064H,#01FH
	LJMP	L41B8
;
;
L412E:	CLR	031H
	CLR	059H
	MOV	DPTR,#L224F
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x224F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24F
	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.5,L414E
	MOV	04AH,#00CH
	LCALL	L453A
	MOV	064H,#021H
	LCALL	L4564
	LJMP	L21C9
;
;
L414E:	LCALL	L4564
	MOV	064H,#01FH
	LJMP	L21C9
;
;
L4157:	MOV	064H,#01FH
	LJMP	L41EB
;
;
L415D:	JBC	01CH,L4193
	JBC	00CH,L4187
	JBC	00AH,L418A
	JBC	00BH,L4193
	JBC	006H,L418D
	CLR	01AH
	CLR	01BH
	CLR	005H
	CLR	040H
	CLR	00DH
	CLR	010H
	CLR	004H
	CLR	00FH
	CLR	016H
	CLR	015H
	CLR	008H
	CLR	011H
	LJMP	L585F
;
;
L4187:	LJMP	L41EB
;
;
L418A:	LJMP	L4200
;
;
L418D:	LCALL	L4600
	LJMP	L21C9
;
;
L4193:	JB	046H,L41A5
	LCALL	L452E
	MOV	04AH,#006H
	LCALL	L453A
	MOV	064H,#01EH
	LJMP	L21C9
;
;
L41A5:	MOV	DPTR,#L2251
	MOVX	A,@DPTR		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	ANL	A,#00FH
	DEC	A
	MOVX	@DPTR,A		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	JZ	L41B8
	LCALL	L45EB
	MOV	064H,#01FH
	LJMP	L21C9
;
;
L41B8:	MOV	DPTR,#L224F
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x224F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24F
	JNB	04DH,L41CF
	MOV	DPTR,#L08AA
	MOVX	A,@DPTR		; DPTR=0x08AA, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	DPTR,#L2251
	MOVX	@DPTR,A		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	LCALL	L4921
	CJNE	R4,#0FFH,L41FD
;
L41CF:	CLR	038H
	LCALL	L4541
	CLR	031H
	CLR	059H
	MOV	07BH,#040H
	SETB	024H
	MOV	064H,#020H
	JNB	04DH,L41FD
	MOV	064H,#011H
	SETB	00BH
	LJMP	L21C9
;
;
L41EB:	CLR	067H
	SETB	02AH
	MOV	R1,#016H
	LCALL	L034F
	MOV	DPTR,#L224F
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x224F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24F
	LCALL	L4541
;
L41FD:	LJMP	L21C9
;
;
L4200:	LCALL	L5977
	CLR	059H
	MOV	07BH,#03FH
	SETB	024H
	MOV	064H,#000H
	JNB	04DH,L4215
	MOV	064H,#011H
	SETB	00BH
;
L4215:	LJMP	L21C9
;
;
L4218:	MOV	A,#000H
	LCALL	L47B0
	LJMP	L21C9
;
;
L4220:	LCALL	L45DF
	LCALL	L5931
	MOV	064H,#024H
	LJMP	L21C9
;
;
L422C:	LCALL	L4600
	LJMP	L21C9
;
;
L4232:	JBC	00EH,L425A
	JBC	007H,L4263
	JBC	009H,L4279
	JBC	00CH,L4270
	JBC	01AH,L429F
	JBC	01BH,L42B6
	JBC	006H,L422C
	JBC	00FH,L4218
	JBC	010H,L4220
	CLR	011H
	CLR	00BH
	CLR	008H
	CLR	012H
	CLR	00DH
	LJMP	L585F
;
;
L425A:	LCALL	L467E
	JB	04DH,L428A
	LJMP	L21C9
;
;
L4263:	SETB	01FH
	MOV	R1,#00FH
	LCALL	L034F
	MOV	04AH,#010H
	LJMP	L21C9
;
;
L4270:	JB	04DH,L428A
	MOV	064H,#000H
	LJMP	L21C9
;
;
L4279:	MOV	R1,#016H
	LCALL	L034F
	CLR	067H
	SETB	02AH
	MOV	07BH,#041H
	SETB	024H
	LJMP	L21C9
;
;
L428A:	SETB	04FH
	MOV	R1,#015H
	LCALL	L034F
	LCALL	L48AB
	MOV	064H,#011H
	MOV	R1,#016H
	LCALL	L034F
	LJMP	L21C9
;
;
L429F:	LCALL	L4770
	LCALL	L4712
	CLR	06DH
	LCALL	L5937
	LCALL	L460F
	MOV	04AH,#001H
	LCALL	L453A
	LJMP	L21C9
;
;
L42B6:	LCALL	L475D
	LCALL	L4712
	CLR	054H
	SETB	063H
	CLR	06DH
	LJMP	L21C9
;
;
L42C5:	JBC	007H,L42F3
	JBC	00EH,L4302
	JBC	006H,L4308
	JBC	009H,L42FC
	JBC	00AH,L430E
	CLR	013H
	CLR	00CH
	CLR	01AH
	CLR	01BH
	CLR	00DH
	CLR	005H
	CLR	040H
	CLR	010H
	CLR	004H
	CLR	00FH
	CLR	016H
	CLR	015H
	CLR	008H
	CLR	011H
	LJMP	L585F
;
;
L42F3:	JNB	047H,L42F9
	LCALL	L468A
;
L42F9:	LJMP	L21C9
;
;
L42FC:	LCALL	L4648
	LJMP	L21C9
;
;
L4302:	LCALL	L467E
	LJMP	L21C9
;
;
L4308:	LCALL	L4600
	LJMP	L21C9
;
;
L430E:	LCALL	L5977
	CLR	059H
	MOV	07BH,#03FH
	SETB	024H
	MOV	064H,#000H
	JNB	04DH,L432D
	MOV	064H,#011H
	SETB	00BH
	MOV	R1,#001H
	LCALL	L034F
	MOV	R1,#016H
	LCALL	L034F
;
L432D:	LJMP	L21C9
;
;
L4330:	LCALL	L5977
	CLR	059H
	MOV	064H,#011H
	SETB	00BH
	LJMP	L21C9
;
;
L433D:	LCALL	L467E
	LJMP	L21C9
;
;
L4343:	JBC	00BH,L43AF
	JBC	01CH,L43AF
	JBC	007H,L4377
	JBC	009H,L4394
	JBC	00AH,L4330
	JBC	00CH,L4380
	JBC	00EH,L433D
	CLR	006H
	CLR	013H
	CLR	01AH
	CLR	01BH
	CLR	00DH
	CLR	005H
	CLR	040H
	CLR	010H
	CLR	004H
	CLR	00FH
	CLR	016H
	CLR	015H
	CLR	008H
	CLR	011H
	LJMP	L585F
;
;
L4377:	JNB	047H,L437D
	LCALL	L468A
;
L437D:	LJMP	L21C9
;
;
L4380:	CLR	038H
	LCALL	L4541
	MOV	R1,#016H
	LCALL	L034F
	JNB	067H,L4391
	CLR	067H
	SETB	02AH
;
L4391:	LJMP	L21C9
;
;
L4394:	MOV	064H,#023H
	JBC	06FH,L43A6
	CLR	067H
	SETB	02AH
	MOV	059H,#01EH
	SETB	038H
	LJMP	L21C9
;
;
L43A6:	MOV	04AH,#00DH
	LCALL	L453A
	LJMP	L21C9
;
;
L43AF:	JB	046H,L43BB
	MOV	04AH,#00CH
	LCALL	L453A
	LJMP	L21C9
;
;
L43BB:	MOV	DPTR,#L2251
	MOVX	A,@DPTR		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	ANL	A,#00FH
	DEC	A
	MOVX	@DPTR,A		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	JZ	L43CB
	LCALL	L45EB
	LJMP	L21C9
;
;
L43CB:	MOV	DPTR,#L224F
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x224F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24F
	MOV	DPTR,#L08AA
	MOVX	A,@DPTR		; DPTR=0x08AA, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	DPTR,#L2251
	MOVX	@DPTR,A		; DPTR=0x2251, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x251
	LCALL	L4921
	CJNE	R4,#0FFH,L43F7
	CLR	038H
	LCALL	L4541
	CLR	031H
	MOV	R1,#016H
	LCALL	L034F
	CLR	059H
	MOV	07BH,#040H
	SETB	024H
	MOV	064H,#011H
	SETB	00BH
;
L43F7:	LJMP	L21C9
;
;
L43FA:	JBC	00BH,L446C
	JBC	00AH,L443A
	JBC	007H,L444E
	JBC	009H,L4457
	JBC	013H,L442C
	JBC	00EH,L4466
	JBC	00CH,L4434
	CLR	006H
	CLR	01AH
	CLR	01BH
	CLR	00DH
	CLR	005H
	CLR	040H
	CLR	010H
	CLR	004H
	CLR	00FH
	CLR	016H
	CLR	015H
	CLR	008H
	CLR	011H
	LJMP	L585F
;
;
L442C:	MOV	R1,#016H
	LCALL	L034F
	LJMP	L412E
;
;
L4434:	MOV	064H,#022H
	LJMP	L4380
;
;
L443A:	JNB	054H,L4448
	SETB	06FH
	MOV	04AH,#004H
	LCALL	L453A
	LJMP	L21C9
;
;
L4448:	MOV	064H,#022H
	LJMP	L43BB
;
;
L444E:	JNB	047H,L4454
	LCALL	L468A
;
L4454:	LJMP	L21C9
;
;
L4457:	CLR	067H
	SETB	02AH
	JBC	06FH,L4448
	MOV	052H,#014H
	SETB	031H
	LJMP	L21C9
;
;
L4466:	LCALL	L467E
	LJMP	L21C9
;
;
L446C:	JB	046H,L4475
	MOV	064H,#022H
	LJMP	L43CB
;
;
L4475:	MOV	04AH,#00DH
	LCALL	L453A
	LJMP	L21C9
;
;
L447E:	LCALL	L467E
	LJMP	L21C9
;
;
L4484:	MOV	A,#000H
	LCALL	L47B0
	LJMP	L21C9
;
;
L448C:	LCALL	L475D
	LCALL	L4712
	LCALL	L5931
	LJMP	L21C9
;
;
L4498:	LCALL	L5937
	LCALL	L45B3
	MOV	064H,#020H
	JNB	04DH,L44A7
	LJMP	L428A
;
;
L44A7:	LJMP	L21C9
;
;
L44AA:	LCALL	L4600
	LCALL	L5931
	LJMP	L21C9
;
;
L44B3:	JBC	00CH,L44DE
	JBC	01AH,L44EA
	JBC	01BH,L4501
	JBC	006H,L44AA
	JBC	00FH,L4484
	JBC	010H,L448C
	JBC	011H,L4498
	JBC	007H,L4510
	JBC	009H,L451D
	JBC	00EH,L447E
	CLR	00EH
	CLR	00BH
	CLR	008H
	CLR	012H
	CLR	00DH
	LJMP	L585F
;
;
L44DE:	MOV	064H,#003H
	JB	046H,L44E7
	MOV	064H,#000H
;
L44E7:	LJMP	L21C9
;
;
L44EA:	LCALL	L4770
	LCALL	L4712
	CLR	06DH
	LCALL	L5937
	LCALL	L460F
	MOV	04AH,#001H
	LCALL	L453A
	LJMP	L21C9
;
;
L4501:	LCALL	L475D
	LCALL	L4712
	CLR	054H
	SETB	063H
	CLR	06DH
	LJMP	L21C9
;
;
L4510:	SETB	01FH
	MOV	R1,#00FH
	LCALL	L034F
	MOV	04AH,#010H
	LJMP	L21C9
;
;
L451D:	MOV	R1,#016H
	LCALL	L034F
	CLR	067H
	SETB	02AH
	MOV	07BH,#041H
	SETB	024H
	LJMP	L21C9
;
;
L452E:	MOV	DPTR,#L0466
	MOVX	A,@DPTR		; DPTR=0x0466, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CLR	059H
	JNB	ACC.6,L4539
	SETB	059H
;
L4539:	RET	
;
;
L453A:	SETB	02AH
	SETB	067H
	SETB	01FH
	RET	
;
;
;
; >>> TONALITE ALSIG #1 (duree=032H, pause=033H - soit environ 500ms/510ms a
;     raison de ~10ms/unite). CONFIRME PAR MESURE REELLE DE L'UTILISATEUR:
;     ceci est la TONALITE DE FIN DE COMMUNICATION (mesuree a 500ms de bip /
;     500ms de pause - correspond exactement, le 1 unite d'ecart entre
;     033H/032H etant negligeable/du a l'implementation). CORRECTION: ce
;     n'est PAS la tonalite de retour d'appel comme suppose precedemment.
;     TONALITE DE RETOUR D'APPEL - RECHERCHE APPROFONDIE, TOUJOURS NON
;     LOCALISEE: l'utilisateur la decrit avec une duree ET une pause d'AU
;     MOINS 1 SECONDE CHACUNE (soit environ 100 unites ou plus, a raison de
;     ~10ms/unite). Recherche exhaustive de TOUTES les assignations de 060H/
;     061H dans le programme (8 sites au total, 6 routines dediees deja
;     cataloguees + 2 sites supplementaires trouves en L4DA7 et L4FA1, ce
;     dernier lie au bit non documente 047E.d2) : AUCUNE des 8 paires ne
;     depasse 096H(=150,soit 1500ms, un seul cote asymetrique en L4FA1) et
;     AUCUNE n'a les DEUX valeurs >=100. La tonalite de retour d'appel n'utilise
;     donc probablement PAS le mecanisme 060H/061H/04EH/L5964 identifie ici -
;     elle doit utiliser un mecanisme totalement distinct (non localise) pour
;     generer un signal de si longue duree. POINT RESTE OUVERT.
;     Efface un statut en RAM (0x224C/0x224D <- 0xFFH,0xFFH) avant de
;     declencher la tonalite (via L5964). 8 sites d'appel (lignes ~2851,
;     3478,3853,5751,9474,9493,9694,9744).
;
L4541:	JB	050H,L4563
	CLR	033H
	CLR	04BH
	MOV	DPTR,#L224C
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x224C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24C
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x224D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24D
	SETB	02EH
	MOV	060H,#032H
	MOV	061H,#033H
	MOV	04EH,060H
	LCALL	L5964
	SETB	031H
	MOV	052H,#014H
;
L4563:	RET	
;
;
;
; >>> TONALITE ALSIG #2 (duree=pause=014H, ~200ms/200ms). CORRECTION: n'est
;     PAS la tonalite de fin de communication (celle-ci est identifiee avec
;     certitude comme L4541, mesure reelle utilisateur - cf. note complete).
;     Fonction precise de cette variante NON CONFIRMEE - seulement 2 sites
;     d'appel (lignes ~9400,9404, contexte: option 'lignes alphanumeriques'
;     046D bit5), possiblement une simple tonalite de confirmation de menu
;     sans lien avec le 5-tons ou le MICA.
;
L4564:	JB	050H,L4586
	CLR	033H
	CLR	04BH
	MOV	DPTR,#L224C
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x224C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24C
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x224D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24D
	SETB	02EH
	MOV	060H,#014H
	MOV	061H,#014H
	MOV	04EH,060H
	LCALL	L5964
	SETB	031H
	MOV	052H,#014H
;
L4586:	RET	
;
;
;
; >>> TONALITE ALSIG #3 (duree=pause=00FH, ~150ms/150ms). CONFIRME (analyse
;     MICA/CLE, cf. note complete a L1635): tonalite jouee lors de
;     l'EFFACEMENT DES CLES MICA (maintien 6s de la touche CLE). CORRECTION:
;     n'est PAS la tonalite de fin de communication (celle-ci est
;     desormais identifiee avec certitude comme L4541, cf. note complete -
;     mesure reelle utilisateur). Pas d'ecriture 0x224C/0x224D ici (structure
;     plus simple que L4541/L4564). 3 sites d'appel (lignes ~2929,4583,4589).
;
;
; >>> PRECISION: cette tonalite est CONFIRMEE comme etant jouee lors de
;     l'effacement des cles MICA (6 secondes de maintien de CLE, cf. note
;     complete a L13BF/L1406) - ceci remplace/precise l'hypothese anterieure
;     'candidat fin de communication' (cf. note deja presente ci-dessous):
;     cette duree pourrait donc etre partagee entre plusieurs fonctions
;     distinctes (effacement MICA et eventuellement fin de communication),
;     A CONFIRMER PAR L'UTILISATEUR si les deux se ressemblent a l'oreille.
;
L4587:	JB	050H,L459C
	CLR	033H
	CLR	04BH
	SETB	02EH
	MOV	060H,#00FH
	MOV	061H,#00FH
	MOV	04EH,060H
	LCALL	L5964
;
L459C:	RET	
;
;
;
; >>> TONALITE ALSIG #4 (duree=pause=005H, soit ~50ms/50ms a raison de
;     ~10ms/unite). CONFIRME PAR MESURE REELLE DE L'UTILISATEUR: ceci est
;     la TONALITE D'ACHEMINEMENT (mesuree a 50ms de bip / 50ms de pause -
;     correspondance EXACTE). 6 sites d'appel (lignes ~3614,4116,5411,5798,
;     6223,10314) - la plus largement utilisee des 6, coherent avec une
;     tonalite frequente pendant le deroulement d'un appel selectif.
;
L459D:	JB	050H,L45B2
	CLR	033H
	CLR	04BH
	SETB	02EH
	MOV	060H,#005H
	MOV	061H,#005H
	MOV	04EH,060H
	LCALL	L5964
;
L45B2:	RET	
;
;
;
; >>> TONALITE ALSIG #5 (duree=pause=005H, identique a L459D) mais avec une
;     action supplementaire: ecrit 0x01 dans RAM 0x224C et teste l'ecran courant
;     (065H). CONFIRME COMME L459D (mesure utilisateur, cf. note complete a
;     L459D): TONALITE D'ACHEMINEMENT (50ms/50ms) - possiblement un cas
;     particulier du meme signal dans un contexte d'ecran specifique.
;     4 sites d'appel (lignes ~1584,2780,3849,9844).
;
L45B3:	JB	050H,L45B2
	CLR	033H
	CLR	04BH
	SETB	02EH
	MOV	060H,#005H
	MOV	061H,#005H
	MOV	04EH,060H
	LCALL	L5964
	MOV	DPTR,#L224C
	MOV	A,#001H
	MOVX	@DPTR,A		; DPTR=0x224C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24C
	MOV	A,065H
	CJNE	A,#019H,L45D6
	MOV	A,#00BH
	MOVX	@DPTR,A		; DPTR=0x224C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24C. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
;
L45D6:	INC	DPTR
	MOV	A,#001H
	MOVX	@DPTR,A		; DPTR=0x224D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24D. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
	INC	DPTR
	MOV	A,#001H
	MOVX	@DPTR,A		; DPTR=0x224E, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24E. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
	RET	
;
;
L45DF:	LCALL	L5977
	MOV	DPTR,#L224C
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x224C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24C
	INC	DPTR
	MOVX	@DPTR,A		; DPTR=0x224D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24D
	RET	
;
;
L45EB:	MOV	A,TL0
	ANL	A,#00FH
	CJNE	A,#00FH,L45F4
	MOV	A,#00EH
;
L45F4:	CJNE	A,#002H,L45F7
;
L45F7:	JNC	L45FB
	MOV	A,#002H
;
L45FB:	MOV	DPTR,#L224F
	MOVX	@DPTR,A		; DPTR=0x224F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24F
	RET	
;
;
L4600:	JNB	046H,L460F
	LCALL	L0577
	JB	050H,L4617
	MOV	R1,#011H
	LCALL	L034F
	RET	
;
;
L460F:	JB	050H,L4617
	MOV	R1,#012H
	LCALL	L034F
;
L4617:	RET	
;
;
;
; >>> CONFIRME: gestion de l'ECOUTE RESEAU COMMUTABLE (bits d1-d0 de l'octet 0x0465).
;     JNB ACC.0 -> si d0=0, aucune fonction active ; sinon SETB 053H (flag ecoute
;     reseau active) puis lecture d'un compteur en RAM (0x2258) pour la temporisation
;     de validation (>500ms si d1 egalement actif, selon la doc).
;
L4618:	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	JNB	ACC.0,L4631		; EPROM perso 0x0465 -> d0: ecoute reseau commutable - bref passage ALT=0 valide l'ecoute reseau
	SETB	053H
	PUSH	ACC
	MOV	DPTR,#L2258
	MOVX	A,@DPTR		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
	SETB	ACC.0
	MOVX	@DPTR,A		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
	POP	ACC
	MOV	R1,#017H
	LCALL	L034F
;
L4631:	RET	
;
;
L4632:	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	JB	ACC.0,L4647
	CLR	053H
	MOV	DPTR,#L2258
	MOVX	A,@DPTR		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
	CLR	ACC.0
	MOVX	@DPTR,A		; DPTR=0x2258, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x258
	MOV	R1,#017H
	LCALL	L034F
;
L4647:	RET	
;
;
L4648:	CLR	067H
	SETB	02AH
	MOV	R1,#016H
	LCALL	L034F
	RET	
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR - GESTIONNAIRE LIE A UNE TRANSITION DU SIGNAL
;     ALTT (PTT microphone): met en place la temporisation de duree de
;     communication (EPROM 0478 -> RAM 053H) puis teste l'EPROM 0465 bit d7
;     (cf. note complete a L4667) pour determiner si la TONALITE CCIR 'P' doit
;     etre emise (mode 0x02) - EXACTEMENT le mecanisme decrit par l'utilisateur:
;     'P' emise a la transition d'ALTT vers 0 (appui PTT).
;
L4652:	SETB	067H
	SETB	02AH
	CLR	031H
	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.2,L4667		; EPROM perso 0x047E -> d2 (INFERE): observe a 3 endroits distincts (~L4667,~L4F9E,~L4FC0) systematiquement lie a la notion de DUREE DE COMMUNICATION - a l'un des sites, si d2=1, charge explicitement l'octet 0478 (duree de communication documentee) dans une variable RAM (053H) -> HYPOTHESE: 047E.2 pourrait etre un second interrupteur (specifique?) de la fonction 'limitation de duree', a rapprocher de 0469.5 documente pour la meme fonction (redondance ou contexte differents, ex. ligne tel. vs canal radio - non tranche).
	SETB	032H
	MOV	DPTR,#L0478
	MOVX	A,@DPTR		; DUREE DE COMMUNICATION (EpromPersonnalisation.txt): duree = valeur * 30 secondes. | DPTR=0x0478, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). DUREE DE COMMUNICATION (EpromPersonnalisation.txt): duree = valeur * 30 secondes.
	MOV	053H,A
;
;
; >>> CONFIRME PAR L'UTILISATEUR - TEST DE L'OPTION CCIR 'P'/'PQ' (EPROM 0465
;     bit d7): si actif (=1), declenche le MODE 0x02 (L2E61, cf. note complete -
;     envoie la tonalite CCIR 'P'). Si inactif (=0) ET le flag 0D1H est actif,
;     declenche plutot le MODE 0x0E (L2FE7) - fonction de ce second cas non
;     confirmee, possiblement une fonctionnalite distincte reutilisant ce meme
;     point de test.
;
L4667:	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	JB	ACC.7,L4678		; EPROM perso 0x0465 -> d7: emission tonalite CCIR 'P' sur front descendant ALT / 'PQ' sur front montant
	JB	0D1H,L4672
	RET	
;
;
L4672:	SETB	01FH
	MOV	04AH,#00EH
	RET	
;
;
L4678:	SETB	01FH
	MOV	04AH,#002H
	RET	
;
;
L467E:	JNB	048H,L4687
	MOV	04AH,#000H
	SETB	01FH
	RET	
;
;
L4687:	SETB	02AH
	RET	
;
;
L468A:	JNB	047H,L469B
;
L468D:	MOV	04AH,#010H
	SETB	01FH
	JB	050H,L469A
	MOV	R1,#00FH
	LCALL	L034F
;
L469A:	RET	
;
;
L469B:	SETB	02AH
	SETB	067H
	RET	
;
;
L46A0:	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.1,L46FF		; EPROM perso 0x0469 -> d1: appel de detresse (destinataire stocke a 0483)
	LCALL	L5977
	LCALL	L5937
	CLR	031H
	CLR	038H
	SETB	032H
	MOV	053H,#006H
	SETB	059H
	SETB	050H
	MOV	DPTR,#L21E0
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x21E0, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1E0
	SETB	024H
	MOV	07BH,#041H
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.0,L46E5		; EPROM perso 0x046A -> d0: 0=pas d'option DIVA (d3-d1 doivent aussi etre a 0 dans ce cas)
	SETB	04DH
	MOV	A,#0FFH
	MOV	DPTR,#L21FC
	MOVX	@DPTR,A		; DPTR=0x21FC, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FC
	LCALL	L4831
	MOV	DPTR,#L21F9
	MOV	A,07CH
	MOVX	@DPTR,A		; DPTR=0x21F9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F9
	SETB	04FH
	CLR	06BH
	MOV	064H,#014H
	RET	
;
;
L46E5:	MOV	DPTR,#L2191
	MOVX	A,@DPTR		; DPTR=0x2191, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x191
	ANL	A,#00FH
	MOV	07CH,A
	LCALL	L0410
	LCALL	L045A
	CLR	067H
	SETB	02AH
	SETB	031H
	MOV	052H,#002H
	MOV	064H,#00EH
;
L46FF:	RET	
;
;
;
; >>> INCOHERENCE POTENTIELLE (deja signalee): sequence structurellement de type
;     'activation ENR' (doc 4.7: OU-Port4 puis ET-Port4), mais le decodage strict de
;     la valeur REELLEMENT pulsee par L03CC (celle de A: 0x4E puis 0xBE) donne
;     ECRITURE-Port4 puis OU-Port7. Non tranche sans analyseur logique reel.
;
L4700:	MOV	P1,#08EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8EH -> bits actifs(1): RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8E -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	MOV	A,#04EH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x4E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]
	RET	
;
;
L4709:	MOV	P1,#0CEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#CEH -> bits actifs(1): RSTM2,ACKM,DATA,P16,P17 | [si reellement pulsee -> commande extenseur 0xCE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	MOV	A,#0BEH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xBE -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port7 [STN_V[E](=SYV,PLL lock),ALT_T[E](=ALTT,PTT/alternat),INFO_EM[E](=EM,emission en cours),DP[E](detection porteuse)]
	RET	
;
;
;
; >>> Pulse probable du relais KLAXON (KLX, Port4 bit1 de MN14, doc reference 4.6)
;     en reponse aux bits d2/d1 de l'octet 0x0468 (signalisation exterieure klaxon,
;     appel individuel/groupe). Meme reserve que la note 'INCOHERENCE POTENTIELLE'
;     sur L4700: le decodage strict de la valeur reellement pulsee (A=0x2F ici) ne
;     correspond pas exactement a une ECRITURE-Port4 attendue pour KLX (donne
;     LECTURE-Port6 de MN14) - meme ambiguite non resolue qu'a L4700/L03CC.
;
L4712:	JNB	056H,L471F
	MOV	P1,#08FH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8FH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8F -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	MOV	A,#02FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x2F -> puce=MN14 (CS=1) | instruction=LECTURE | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]
	SETB	068H
;
L471F:	RET	
;
;
L4720:	MOV	P1,#0CFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#CFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P16,P17 | [si reellement pulsee -> commande extenseur 0xCF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	MOV	A,#0DFH
	CLR	068H
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xDF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port5 [TCS_DEC,XEAS,XURG,ACQ(ETDP-ACQ)]
	RET	
;
;
L472B:	MOV	A,#0BEH
	MOV	R1,#0EEH
	LJMP	L03CC
;
;
L4732:	MOV	A,#0DEH
	MOV	P1,#0EEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#EEH -> bits actifs(1): RSTM2,ACKM,DATA,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xEE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LJMP	L03CC
;
;
L473A:	MOV	A,#02EH
	MOV	P1,#0AEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#AEH -> bits actifs(1): RSTM2,ACKM,DATA,P15,P17 | [si reellement pulsee -> commande extenseur 0xAE -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LJMP	L03CC
;
;
L4742:	MOV	A,#04EH
	MOV	P1,#0AEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#AEH -> bits actifs(1): RSTM2,ACKM,DATA,P15,P17 | [si reellement pulsee -> commande extenseur 0xAE -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LJMP	L03CC
;
;
L474A:	JB	032H,L475C
	MOV	DPTR,#L0469
	MOVX	A,@DPTR		; OPTIONS N1/RELAIS/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous (actif=1 sauf mention contraire). Adresses liees: N1 code=0489, duree comm.=0478, destinataire detresse=0483, temporisation alarme=0484. | DPTR=0x0469, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.5,L475C		; EPROM perso 0x0469 -> d5: limitation de duree de communication (duree stockee a 0478)
	SETB	032H
	MOV	DPTR,#L0478
	MOVX	A,@DPTR		; DUREE DE COMMUNICATION (EpromPersonnalisation.txt): duree = valeur * 30 secondes. | DPTR=0x0478, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). DUREE DE COMMUNICATION (EpromPersonnalisation.txt): duree = valeur * 30 secondes.
	MOV	053H,A
;
L475C:	RET	
;
;
L475D:	MOV	P1,#08FH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8FH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8F -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	MOV	A,#04FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x4F -> puce=MN14 (CS=1) | instruction=ECRITURE | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]
	SETB	039H
	MOV	05AH,#01EH
	MOV	07BH,#041H
	SETB	024H
	RET	
;
;
L4770:	MOV	P1,#08FH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8FH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8F -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	MOV	A,#04FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x4F -> puce=MN14 (CS=1) | instruction=ECRITURE | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]
	SETB	039H
	MOV	05AH,#01EH
	RET	
;
;
L477E:	LCALL	L5977
	CLR	038H
	CLR	031H
	JB	067H,L4797
	JB	046H,L4797
	MOV	DPTR,#L0468
	MOVX	A,@DPTR		; DPTR=0x0468, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION FONCTIONS (EpromPersonnalisation.txt): d7=ID N1 ; d6=veille auto>6s ; d5=retour appel 6-tons/5-tons ; d4=toujours a 1(?) ; d3=numerotation tel. clavier ; d2=klaxon appel individuel ; d1=klaxon appel groupe ; d0=doc:'toujours a 0(?)' mais ce bit est REELLEMENT TESTE ET SIGNIFICATIF dans le code (cf. L37C9) - la doc semble incomplete sur ce point precis, a confirmer.
	JNB	ACC.6,L4797		; EPROM perso 0x0468 -> d6: retour en veille automatique apres disparition porteuse >6s
	SETB	031H
	MOV	052H,#03CH
;
L4797:	RET	
;
;
L4798:	SETB	031H
	MOV	052H,#001H
	SETB	050H
	SETB	032H
	MOV	DPTR,#L0484
	MOVX	A,@DPTR		; DPTR=0x0484, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	MOV	053H,A
	JNZ	L47AD
	CLR	031H
	SETB	008H
;
L47AD:	SETB	06CH
	RET	
;
;
L47B0:	MOV	DPTR,#L2198
	MOVX	@DPTR,A		; DPTR=0x2198, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x198
	SETB	025H
	RET	
;
;
L47B7:	MOV	A,07CH
	MOV	DPTR,#L21F9
	MOVX	@DPTR,A		; DPTR=0x21F9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F9
	CLR	06BH
	LCALL	L459D
	RET	
;
;
L47C3:	CLR	059H
	MOV	A,#003H
	MOV	DPTR,#L2198
	MOVX	@DPTR,A		; DPTR=0x2198, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x198
	SETB	025H
	MOV	07BH,#040H
	SETB	024H
	RET	
;
;
L47D3:	MOV	DPTR,#L21FE
	MOVX	A,@DPTR		; DPTR=0x21FE, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FE
	ANL	A,#00FH
	INC	A
	MOV	R4,A
	MOV	DPTR,#L21FD
	MOVX	A,@DPTR		; DPTR=0x21FD, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FD
	ANL	A,#00FH
	SWAP	A
	MOV	R5,A
	ADD	A,R4
	MOV	DPL,A
	MOV	DPH,#022H
	MOVX	A,@DPTR		; DPTR=0x21FD, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FD
	ANL	A,#00FH
	CJNE	A,#00FH,L481C
;
L47EF:	MOV	DPTR,#L21FA
	MOVX	A,@DPTR		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
	ANL	A,#00FH
	MOV	07CH,A
	LCALL	L0577
	CJNE	R5,#030H,L47FF
	MOV	R5,#000H
;
L47FF:	MOV	A,#010H
	ADD	A,R5
;
L4802:	MOV	R5,A
	MOV	DPTR,#L21FE
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21FE, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FE
	MOV	DPTR,#L21FD
	MOV	A,R5
	SWAP	A
	MOVX	@DPTR,A		; DPTR=0x21FD, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FD
	SWAP	A
	MOV	DPL,A
	MOV	DPH,#022H
	MOVX	A,@DPTR		; DPTR=0x21FD, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FD
	ANL	A,#00FH
	CJNE	A,#00FH,L482F
	SJMP	L47EF
;
L481C:	CJNE	R4,#00AH,L4821
	SJMP	L47EF
;
L4821:	MOV	DPTR,#L21FE
	MOV	A,R4
	MOVX	@DPTR,A		; DPTR=0x21FE, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FE
	ADD	A,R5
	MOV	DPL,A
	MOV	DPH,#022H
	MOVX	A,@DPTR		; DPTR=0x21FE, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FE
	ANL	A,#00FH
;
L482F:	MOV	R0,A
	RET	
;
;
L4831:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.3,L483B		; EPROM perso 0x046C -> d3=0(actif si 0): DIVA multi-cellules, scrutation par groupes de lignes (lien table 0800)
	LJMP	L4871
;
;
L483B:	MOV	DPTR,#L21FF
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21FF, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FF
	MOV	DPTR,#L21FB
	MOVX	A,@DPTR		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB
	ANL	A,#00FH
	MOV	DPL,A
	MOV	DPH,#008H
	MOVX	A,@DPTR		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB
	MOV	DPTR,#L21FD
	MOVX	@DPTR,A		; DPTR=0x21FD, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FD
	SWAP	A
	MOV	DPL,A
	MOV	DPH,#022H
	MOVX	A,@DPTR		; DPTR=0x21FD, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FD
	ANL	A,#00FH
	MOV	R0,A
	MOV	DPTR,#L21FE
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21FE, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FE
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.1,L486E		; EPROM perso 0x046A -> d1: scan des canaux DIVA - 1=scan en etoile (0,1,0,2,0,3...), 0=scan circulaire (0,1,2,3...)
	MOV	R0,#000H
	MOV	DPTR,#L21FF
	MOV	A,#005H
	MOVX	@DPTR,A		; DPTR=0x21FF, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FF
;
L486E:	LJMP	L4979
;
;
L4871:	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.1,L48A6		; EPROM perso 0x046A -> d1: scan des canaux DIVA - 1=scan en etoile (0,1,0,2,0,3...), 0=scan circulaire (0,1,2,3...)
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.5,L4888		; EPROM perso 0x046A -> d5: non documente, indique fixe a 0
	MOV	DPTR,#L08AB
	MOVX	A,@DPTR		; DPTR=0x08AB, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	INC	A
	MOV	DPTR,#L2252
	MOVX	@DPTR,A		; DPTR=0x2252, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x252
;
L4888:	MOV	DPTR,#L21FA
	MOVX	A,@DPTR		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
	ANL	A,#00FH
	MOV	R0,A
	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.5,L4897		; EPROM perso 0x047E -> d5 (INFERE): gate simple observe en L4897 (increment de R0 si actif).
	INC	R0
;
L4897:	MOV	DPTR,#L0485
	MOVX	A,@DPTR		; DPTR=0x0485, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,000H,L48A1
	LJMP	L4979
;
;
L48A1:	JC	L48A6
	LJMP	L4979
;
;
L48A6:	MOV	R0,#000H
	LJMP	L4979
;
;
L48AB:	SETB	04FH
	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.3,L48B7		; EPROM perso 0x046C -> d3=0(actif si 0): DIVA multi-cellules, scrutation par groupes de lignes (lien table 0800)
	LJMP	L48E3
;
;
L48B7:	MOV	R0,07CH
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.1,L48DD		; EPROM perso 0x046A -> d1: scan des canaux DIVA - 1=scan en etoile (0,1,0,2,0,3...), 0=scan circulaire (0,1,2,3...)
	CJNE	R0,#000H,L48D8
	MOV	DPTR,#L21FF
	MOVX	A,@DPTR		; DPTR=0x21FF, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FF
	ANL	A,#00FH
	CJNE	A,#005H,L48DD
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21FF, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FF. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
	MOV	DPTR,#L21FB
	MOVX	A,@DPTR		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB
	ANL	A,#00FH
	MOV	R0,A
	LJMP	L4979
;
;
L48D8:	MOV	R0,#000H
	LJMP	L4979
;
;
L48DD:	LCALL	L47D3
	LJMP	L4979
;
;
L48E3:	MOV	R0,07CH
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.1,L4900		; EPROM perso 0x046A -> d1: scan des canaux DIVA - 1=scan en etoile (0,1,0,2,0,3...), 0=scan circulaire (0,1,2,3...)
	MOV	DPTR,#L0485
	MOVX	A,@DPTR		; DPTR=0x0485, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,000H,L48F8
	MOV	R0,#000H
	LJMP	L4979
;
;
L48F8:	INC	R0
	JNC	L48FD
	MOV	R0,#000H
;
L48FD:	LJMP	L4979
;
;
L4900:	CJNE	R0,#000H,L4917
	MOV	DPTR,#L21FB
	MOVX	A,@DPTR		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB
	ANL	A,#00FH
	MOV	R0,A
	MOV	DPTR,#L0485
	MOVX	A,@DPTR		; DPTR=0x0485, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,000H,L4913
	MOV	R0,#000H
;
L4913:	INC	R0
	LJMP	L4979
;
;
L4917:	MOV	A,R0
	MOV	DPTR,#L21FB
	MOVX	@DPTR,A		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB
	MOV	R0,#000H
	LJMP	L4979
;
;
L4921:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.3,L492B		; EPROM perso 0x046C -> d3=0(actif si 0): DIVA multi-cellules, scrutation par groupes de lignes (lien table 0800)
	LJMP	L4959
;
;
L492B:	MOV	DPTR,#L21FF
	MOVX	A,@DPTR		; DPTR=0x21FF, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FF
	ANL	A,#00FH
	CJNE	A,#005H,L4946
	CLR	A
	MOVX	@DPTR,A		; DPTR=0x21FF, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FF. (adresse EXACTE recuperee suite a la correction du suivi DPTR)
	MOV	R4,#000H
	MOV	DPTR,#L21FB
	MOVX	A,@DPTR		; DPTR=0x21FB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FB
	ANL	A,#00FH
	MOV	R0,A
	MOV	DPTR,#L21F9
	MOVX	@DPTR,A		; DPTR=0x21F9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F9
	LJMP	L4979
;
;
L4946:	LCALL	L47D3
	MOV	R4,#000H
	MOV	DPTR,#L21F9
	MOVX	A,@DPTR		; DPTR=0x21F9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F9
	ANL	A,#00FH
	CJNE	A,000H,L4979
	MOV	R4,#0FFH
	LJMP	L4979
;
;
L4959:	MOV	R0,07CH
	MOV	DPTR,#L0485
	MOVX	A,@DPTR		; DPTR=0x0485, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,000H,L4964
	MOV	R0,#0FFH
;
L4964:	INC	R0
	MOV	R4,#000H
	MOV	DPTR,#L21F9
	MOVX	A,@DPTR		; DPTR=0x21F9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1F9
	ANL	A,#00FH
	CJNE	A,000H,L4979
	MOV	R4,#0FFH
	MOV	DPTR,#L21FA
	MOVX	A,@DPTR		; DPTR=0x21FA, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1FA
	ANL	A,#00FH
	MOV	R0,A
;
L4979:	MOV	A,R0
	MOV	07CH,A
	LCALL	L0410
	LCALL	L045A
	SETB	02AH
	CLR	067H
	MOV	059H,#00AH
	SETB	038H
	RET	
;
;
L498C:	DB	020H,041H,042H,043H,044H,045H,046H,047H,048H,049H,04AH,04BH,04CH,04DH,04EH
	DB	04FH,050H,051H,052H,053H,054H,055H,056H,057H,058H,059H,05AH,030H,031H,032H
	DB	033H,034H,035H,036H,037H,038H,039H,072H,02AH,03DH,03CH,03EH,02FH,02BH,02DH
	DB	024H,00AH,025H,010H,00DH,00EH,027H,00CH,011H,012H,013H,014H,015H,016H,017H
	DB	018H,019H,01AH,01BH,01CH,01DH,01EH,01FH,020H,021H,022H,023H,000H,001H,002H
	DB	003H,004H,005H,006H,007H,008H,009H,00FH,028H,029H,02AH,02BH,02CH,02DH,00BH
;  ^^^ CORRIGE PAR CLAUDE: bloc de 90 octets (0x498C-0x49E5) reidentifie comme
;  DONNEES (table de conversion ASCII -> code affichage VFD, 2 sous-tables de
;  45 octets chacune) et non comme code. Le desassemblage original (DIS8051)
;  avait mal decode cette zone en instructions fictives, ce qui produisait 3
;  references "address out of range" (labels fantomes L49D1, L4812, L49F5)
;  a l'assemblage avec ASEM-51. Confirme par le code reel en L49E6 qui charge
;  explicitement DPTR=#L498C et boucle R3=02DH(45) fois avec MOVC A,@A+DPTR.
L49E6:	MOV	R2,#008H
	MOV	R1,#072H
;
L49EA:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	MOV	B,A
	PUSH	DPH
;
L49EF:	PUSH	DPL
	MOV	DPTR,#L498C
	MOV	R3,#02DH
;
L49F6:	CLR	A
	MOVC	A,@A+DPTR
	XRL	A,B
	JZ	L49FF
	INC	DPTR
	DJNZ	R3,L49F6
;
L49FF:	MOV	A,#02DH
	ADD	A,DPL
	MOV	DPL,A
	CLR	A
	ADDC	A,DPH
	MOV	DPH,A
	CLR	A
	MOVC	A,@A+DPTR
	MOV	@R1,A
	POP	DPL
	POP	DPH
	INC	DPTR
	INC	R1
	DJNZ	R2,L49EA
	RET	
;
;
;
; >>> DEFILE (L0379, base 0x2F) et EXECUTE le prochain EVENEMENT D'AFFICHAGE/LED
;     en attente pour le SC20 (enfile par L0355, signale par le drapeau 01EH que
;     la boucle principale teste - cf. L585F/L58B2). Si la file est vide, ne fait
;     rien (retour direct L4B36). Sinon, l'evenement (0-7...) sert d'index dans
;     une table de saut (L4A2A) vers les sous-programmes specifiques (L4B07
;     'ecrire tout le tampon 72-79 en une fois', L4A95, L4B39, etc.).
;
L4A16:	MOV	R0,#02FH
	LCALL	L0379
	CJNE	A,#0FFH,L4A21
	LJMP	L4B36
;
;
L4A21:	MOV	R0,A
	ADD	A,R0
	ADD	A,R0
	MOV	R0,#036H
	MOV	DPTR,#L4A2A
	JMP	@A+DPTR
;
;
L4A2A:	LJMP	L4B07
;
	LJMP	L4A95
;
	LJMP	L4B4B
;
	LJMP	L4B39
;
	LJMP	L4B43
;
	LJMP	L4B3E
;
	LJMP	L4B56
;
	LJMP	L4B5B
;
	LJMP	L4B60
;
	LJMP	L4B65
;
	LJMP	L4B71
;
	LJMP	L4B7D
;
	LJMP	L4B89
;
	LJMP	L4B95
;
	LJMP	L4BBE
;
	LJMP	L4BA4
;
	LJMP	L4BE1
;
	LJMP	L4BC7
;
	LJMP	L4BD4
;
	LJMP	L4BEE
;
	LJMP	L4BE6
;
	LJMP	L4BF2
;
	LJMP	L4BAB
;
	LJMP	L4CD3
;
	LJMP	L4CE0
;
	LJMP	L4A81
;
	LJMP	L4CED
;
	LJMP	L4CF5
;
	LJMP	L4CB2
;
;
L4A81:	MOV	A,#024H
	MOV	073H,A
	MOV	074H,A
	MOV	075H,A
	MOV	076H,A
	MOV	077H,A
	MOV	078H,A
	LCALL	L4C9A
	LJMP	L4B07
;
;
L4A95:	JNB	060H,L4A9D
	SETB	01EH
	LJMP	L4B36
;
;
L4A9D:	JB	04DH,L4AED
	MOV	DPTR,#L046D
	MOVX	A,@DPTR		; OPTIONS LIGNES ALPHANUMERIQUES/PROG SOUS CLE, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): d7-d2 non documentes (fixes a 1), voir d1/d0 ci-dessous. | DPTR=0x046D, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.1,L4AED		; EPROM perso 0x046D -> d1=0(actif si 0): lignes alphanumeriques - si 1: lignes par numeros (tables depuis 0690)
	MOV	DPTR,#L0690
	MOV	A,07CH
	MOV	B,#008H
	MUL	AB
	ADD	A,DPL
	MOV	DPL,A
	CLR	A
	ADDC	A,DPH
	MOV	DPH,A
	PUSH	DPH
	PUSH	DPL
	MOV	R2,#008H
;
L4ABF:	MOVX	A,@DPTR		; DPTR=0x0690, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,#020H,L4AC6
	INC	DPTR
	DJNZ	R2,L4ABF
;
L4AC6:	POP	DPL
	POP	DPH
	CJNE	R2,#000H,L4AD0
	LJMP	L4AED
;
;
L4AD0:	LCALL	L49E6
	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	JNZ	L4AE4
	MOV	DPTR,#L21B9
	MOVX	A,@DPTR		; DPTR=0x21B9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B9
	ANL	A,#00FH
	CJNE	A,#00FH,L4AEA
;
L4AE4:	MOV	079H,#016H
	MOV	078H,#024H
;
L4AEA:	LJMP	L4B07
;
;
L4AED:	LCALL	L4C26
	MOV	A,#024H
	MOV	073H,A
	MOV	074H,A
	MOV	075H,A
	MOV	076H,A
	MOV	077H,A
	MOV	078H,A
	JB	04DH,L4B04
	LCALL	L4C31
;
L4B04:	LCALL	L4C9A
;
;
; >>> Ecriture du VFD SC20 EN UNE FOIS (commande directe 078H = 'ligne entiere',
;     cf. ATR/doc reference et OrganeExploitation.txt), suivie de 8 octets lus
;     dans le tampon RAM 0x72-0x79 mais DANS UN ORDRE PARTICULIER (0x79,0x75,
;     0x78,0x74,0x77,0x73,0x76,0x72) qui NE CORRESPOND PAS a l'ordre naturel
;     d'ecriture (72..79) ni exactement a l'ordre de brouillage des positions
;     individuelles (77,75,73,71,76,74,72,70, cf. note complete a L4B65/L4C55) -
;     POINT NON ENTIEREMENT RESOLU: la raison precise de cet ordre specifique
;     pour le mode 'ligne entiere' reste incertaine (possible correspondance avec
;     l'ordre interne du registre a decalage du SC20 en mode ecriture groupee,
;     different du mode adressage individuel) - signale pour verification
;     eventuelle aupres de l'utilisateur.
;
L4B07:	MOV	R1,#078H
	LCALL	L0365
	MOV	R1,079H
	LCALL	L0365
	MOV	R1,075H
	LCALL	L0365
	MOV	R1,078H
	LCALL	L0365
	MOV	R1,074H
	LCALL	L0365
	MOV	R1,077H
	LCALL	L0365
	MOV	R1,073H
	LCALL	L0365
	MOV	R1,076H
	LCALL	L0365
	MOV	R1,072H
	LCALL	L0365
;
L4B34:	SETB	020H
;
L4B36:	LJMP	L585F
;
;
L4B39:	LCALL	L4C55
	SJMP	L4B34
;
L4B3E:	LCALL	L4C67
	SJMP	L4B34
;
;
; >>> CONFIRME - EVENEMENT D'AFFICHAGE 0x04: efface les 2 positions du
;     suffixe d'ecran (ex: 'CA', 'AS' - positions VFD 072H/078H et 079H selon
;     le contexte) en y ecrivant un ESPACE (code VFD 0x24) via L4C55+L4C60 -
;     PHASE 'ETEINTE' DU CLIGNOTEMENT (cf. note complete a L4EB9).
;
L4B43:	LCALL	L4C55
	LCALL	L4C60
	SJMP	L4B34
;
L4B4B:	MOV	R2,#005H
;
L4B4D:	MOV	R1,#06AH
	LCALL	L0365
	DJNZ	R2,L4B4D
	SJMP	L4B34
;
L4B56:	LCALL	L4C6E
	SJMP	L4B34
;
L4B5B:	LCALL	L4C79
	SJMP	L4B34
;
L4B60:	LCALL	L4C84
	SJMP	L4B34
;
;
; >>> CONFIRME - MECANISME DE CONVERSION RAM<->POSITION VFD (reponse a la
;     question de l'utilisateur): chaque paire de type 'L4Bxx' ci-dessous
;     implemente EN DUR une correspondance (code de position VFD cote SC20) <->
;     (adresse RAM 8031 source du caractere), au lieu d'une table de conversion
;     generique. Envoie d'abord le CODE DE POSITION (immediat) puis le CONTENU de
;     l'adresse RAM correspondante. Table complete reconstituee ici (gauche vers
;     droite tel que documente par l'utilisateur: positions VFD 77,75,73,71,76,
;     74,72,70 <-> RAM 72,73,74,75,76,77,78,79 respectivement - relation lineaire
;     simple: RAM = 0x72 + rang_dans_la_sequence_brouillee). Cette routine-ci:
;     position 76H <-> RAM 076H (rang 4).
;
L4B65:	MOV	R1,#076H
	LCALL	L0365
	MOV	R1,076H
	LCALL	L0365
	SJMP	L4B34
;
;
; >>> Paire position<->RAM (cf. note complete a L4B65): position 71H <-> RAM 075H (rang 3).
;
L4B71:	MOV	R1,#071H
	LCALL	L0365
	MOV	R1,075H
	LCALL	L0365
	SJMP	L4B34
;
;
; >>> Paire position<->RAM (cf. note complete a L4B65): position 73H <-> RAM 074H (rang 2).
;
L4B7D:	MOV	R1,#073H
	LCALL	L0365
	MOV	R1,074H
	LCALL	L0365
	SJMP	L4B34
;
;
; >>> Paire position<->RAM (cf. note complete a L4B65): position 75H <-> RAM 073H (rang 1).
;
L4B89:	MOV	R1,#075H
	LCALL	L0365
	MOV	R1,073H
	LCALL	L0365
	SJMP	L4B34
;
L4B95:	JB	05AH,L4B9F
	MOV	A,065H
	JNZ	L4B9F
	LJMP	L4A95
;
;
L4B9F:	LCALL	L4C8F
	SJMP	L4B34
;
L4BA4:	MOV	R1,#068H
	LCALL	L0365
	SJMP	L4B34
;
L4BAB:	MOV	R1,#060H
	LCALL	L0365
	JNB	046H,L4BBB
	JB	04FH,L4BBB
	MOV	R1,#069H
	LCALL	L0365
;
L4BBB:	LJMP	L4B34
;
;
;
; >>> CONFIRME - EVENEMENT D'AFFICHAGE 0x0E: reaffiche les VRAIS CARACTERES du
;     suffixe d'ecran depuis le tampon RAM (078H/079H) via L4C79+L4C6E - PHASE
;     'ALLUMEE' DU CLIGNOTEMENT (cf. note complete a L4EB9), en alternance avec
;     l'evenement 0x04 qui efface ces memes positions.
;
L4BBE:	LCALL	L4C79
	LCALL	L4C6E
	LJMP	L4B34
;
;
L4BC7:	MOV	R1,#06CH
	LCALL	L0365
	MOV	R1,#069H
	LCALL	L0365
	LJMP	L4B34
;
;
L4BD4:	MOV	R1,#06DH
	LCALL	L0365
	MOV	R1,#060H
	LCALL	L0365
	LJMP	L4B34
;
;
L4BE1:	MOV	R1,#06EH
	LJMP	L4BE8
;
;
L4BE6:	MOV	R1,#029H
;
L4BE8:	LCALL	L0365
	LJMP	L4B34
;
;
L4BEE:	MOV	R1,#028H
	SJMP	L4BE8
;
L4BF2:	MOV	R1,#06DH
	JB	04FH,L4BFC
	JNB	046H,L4BFC
	MOV	R1,#06CH
;
L4BFC:	LCALL	L0365
	JNB	060H,L4C07
	MOV	A,073H
	CJNE	A,#024H,L4C13
;
L4C07:	LCALL	L4C26
	LCALL	L4C8F
	LCALL	L4C9A
	LCALL	L4C6E
;
L4C13:	MOV	R1,#060H
	LCALL	L0365
	JNB	046H,L4C23
	JB	04FH,L4C23
	MOV	R1,#069H
	LCALL	L0365
;
L4C23:	LJMP	L4B34
;
;
L4C26:	JB	04FH,L4C2D
	MOV	072H,07CH
	RET	
;
;
L4C2D:	MOV	072H,#00DH
	RET	
;
;
;
; >>> AFFICHAGE DU CANAL SUR LE VFD (positions RAM 072H a droite) - gate par
;     EPROM 046C bit d1 (affichage permanent du canal en veille). Lit R3
;     caracteres (nombre defini par EPROM 0473 bits d1-d0) depuis la RAM
;     EXTERNE 0x201C + (numero de memoire)*32 (cf. L03D3). BUG CONFIRME PAR
;     L'UTILISATEUR (comparaison de 2 dumps EPROM): quand l'option '100000 N3'
;     est active (EPROM 046C bit d4=0), cette adresse RAM 0x201C N'EST JAMAIS
;     REELLEMENT REMPLIE AVEC LES DONNEES DU CANAL - elle est a la place
;     ECRASEE PAR LE DERNIER OCTET DU CHAMP RELAIS ETENDU (5 octets au lieu de
;     2, cf. note complete a L0150), qui peut valoir 0xFF (non renseigne) et
;     s'affiche alors comme '0x0F' apres masquage - EXACTEMENT le symptome
;     observe par l'utilisateur sur l'equipement reel.
;
L4C31:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.1,L4C54		; EPROM perso 0x046C -> d1=0(actif si 0): affichage du canal permanent en mode veille (hors DIVA)
	MOV	DPTR,#L0473
	MOVX	A,@DPTR		; DPTR=0x0473, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#003H
	MOV	R3,A
	JZ	L4C54
	MOV	DPTR,#L201C
	MOV	A,072H
	LCALL	L03D3
	MOV	R1,#076H
;
L4C4B:	MOVX	A,@DPTR		; DPTR=0x201C (base), R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE). (BASE connue avant un ajout d'offset calcule via L03D3 - adresse finale approximative mais fenetre memoire certaine)
	ANL	A,#00FH
	MOV	@R1,A
	DEC	DPL
	DEC	R1
	DJNZ	R3,L4C4B
;
L4C54:	RET	
;
;
;
; >>> Paire position<->RAM, variante avec caractere fixe ESPACE (024H) plutot que
;     lu en RAM (cf. note complete a L4B65): position 70H (rang 7) -> envoie un espace.
;
L4C55:	MOV	R1,#070H
	LCALL	L0365
;
L4C5A:	MOV	R1,#024H
	LCALL	L0365
	RET	
;
;
;
; >>> Paire position<->RAM, variante espace fixe (cf. L4B65): position 72H (rang 6) -> espace.
;
L4C60:	MOV	R1,#072H
	LCALL	L0365
	SJMP	L4C5A
;
;
; >>> Paire position<->RAM, variante espace fixe (cf. L4B65): position 77H (rang 0) -> espace.
;
L4C67:	MOV	R1,#077H
	LCALL	L0365
	SJMP	L4C5A
;
;
; >>> Paire position<->RAM (cf. note complete a L4B65): position 70H <-> RAM 079H (rang 7).
;
L4C6E:	MOV	R1,#070H
	LCALL	L0365
	MOV	R1,079H
	LCALL	L0365
	RET	
;
;
;
; >>> Paire position<->RAM (cf. note complete a L4B65): position 72H <-> RAM 078H (rang 6).
;
L4C79:	MOV	R1,#072H
	LCALL	L0365
	MOV	R1,078H
	LCALL	L0365
	RET	
;
;
;
; >>> Paire position<->RAM (cf. note complete a L4B65): position 74H <-> RAM 077H (rang 5).
;
L4C84:	MOV	R1,#074H
	LCALL	L0365
	MOV	R1,077H
	LCALL	L0365
	RET	
;
;
;
; >>> Paire position<->RAM (cf. note complete a L4B65): position 77H <-> RAM 072H (rang 0).
;
L4C8F:	MOV	R1,#077H
	LCALL	L0365
	MOV	R1,072H
	LCALL	L0365
	RET	
;
;
;
; >>> Prepare la derniere position du tampon (RAM 079H) avant affichage: espace
;     (024H) par defaut, remplace par 016H ('M' table VFD) si des conditions RAM
;     (0x2199/0x21B9, nature non totalement elucidee - probablement lien avec une
;     fonction memoire/mode) sont reunies.
;
L4C9A:	MOV	079H,#024H
	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	JNZ	L4CAE
	MOV	DPTR,#L21B9
	MOVX	A,@DPTR		; DPTR=0x21B9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B9
	ANL	A,#00FH
	CJNE	A,#00FH,L4CB1
;
L4CAE:	MOV	079H,#016H
;
L4CB1:	RET	
;
;
L4CB2:	JNB	053H,L4CBC
	MOV	R1,#063H
	LCALL	L0365
	SETB	020H
;
L4CBC:	JNB	056H,L4CC6
	MOV	R1,#067H
	LCALL	L0365
	SETB	020H
;
L4CC6:	JNB	03FH,L4CD0
	MOV	R1,#065H
	LCALL	L0365
	SETB	020H
;
L4CD0:	LJMP	L585F
;
;
L4CD3:	MOV	R1,#062H
	JNB	053H,L4CDA
	MOV	R1,#063H
;
L4CDA:	LCALL	L0365
	LJMP	L4B34
;
;
L4CE0:	MOV	R1,#066H
	JNB	056H,L4CE7
	MOV	R1,#067H
;
L4CE7:	LCALL	L0365
	LJMP	L4B34
;
;
L4CED:	MOV	R1,#065H
	LCALL	L0365
	LJMP	L4B34
;
;
L4CF5:	MOV	R1,#064H
	LCALL	L0365
	LJMP	L4B34
;
;
;
; >>> Zone UART SC20/MINI10: verifie la parite (MOV C,P) d'un octet recu ; si invalide,
;     renvoie 0x41 ('commande inconnue', SC20 doc), sinon reconstruit la parite et echo.
;
;
; >>> Cf. note complete deja existante (validation parite + echo). A NOTER EN PLUS:
;     le dernier octet valide reçu et echo est conserve en RAM 0x7A - ce registre
;     sert de 'memoire du dernier octet' consulte plus loin par le mecanisme
;     d'IDENTIFICATION DE L'ORGANE D'EXPLOITATION (cf. note complete a L56B3).
;
L4CFD:	JBC	069H,L4D0D
	MOV	R0,#036H
	LCALL	L0379
	CJNE	A,#0FFH,L4D13
	SETB	01EH
	LJMP	L4D24
;
;
L4D0D:	MOV	SBUF,#041H		; Emission code LED/etat (0x41) -> SC20:(reponse organe) COMMANDE INCONNUE
	LJMP	L4D1D
;
;
L4D13:	ANL	A,#07FH
	MOV	C,P
	MOV	ACC.7,C
	MOV	SBUF,A
	MOV	07AH,A
;
L4D1D:	SETB	066H
	MOV	04BH,#01CH
	SETB	02BH
;
L4D24:	LJMP	L585F
;
;
L4D27:	LJMP	L4FD6
;
;
L4D2A:	JNB	03DH,L4D34
	DJNZ	05FH,L4D34
	SETB	022H
	CLR	03DH
;
L4D34:	JNB	030H,L4D41
	DJNZ	051H,L4D41
	MOV	051H,#00AH
	SETB	026H
	SETB	029H
;
L4D41:	JNB	02BH,L4D49
	DJNZ	04BH,L4D49
	CLR	02BH
;
L4D49:	MOV	DPTR,#L223B
	MOVX	A,@DPTR		; DPTR=0x223B, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23B
	ANL	A,#00FH
	DEC	A
	JNZ	L4D54
	MOV	A,#00AH
;
L4D54:	MOVX	@DPTR,A		; DPTR=0x223B, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23B
	CJNE	A,#00AH,L4D27
	CPL	P1.0		; P1.0 = CS
	SETB	P3.0		; P3.0 = DR(RxD/SC20)
	SETB	REN
	CPL	P1.0		; P1.0 = CS
	JNB	02DH,L4D6A
	DJNZ	04DH,L4D6A
	SETB	021H
	CLR	02DH
;
L4D6A:	JNB	075H,L4D7D
	MOV	DPTR,#L2240
	MOVX	A,@DPTR		; DPTR=0x2240, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x240
	ANL	A,#00FH
	DEC	A
	MOVX	@DPTR,A		; DPTR=0x2240, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x240
	JNZ	L4D41
	SETB	070H
	SETB	073H
	CLR	075H
;
L4D7D:	MOV	DPTR,#L224C
	MOVX	A,@DPTR		; DPTR=0x224C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24C
	ANL	A,#00FH
	MOV	B,A
	INC	DPTR
	MOVX	A,@DPTR		; DPTR=0x224D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24D
	ANL	A,#00FH
	SWAP	A
	ADD	A,B
	CJNE	A,#0FFH,L4D92
	LJMP	L4DC8
;
;
L4D92:	DEC	A
	JNZ	L4DC1
	INC	DPTR
	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	CJNE	A,#001H,L4DA7
	LCALL	L5977
	MOV	A,#002H
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	MOV	A,#0C8H
	LJMP	L4DC1
;
;
;
; >>> 7EME SITE DE CONFIGURATION DE TONALITE ALSIG (060H=061H=005H, ~50ms/50ms -
;     MEME PROFIL QUE L459D/L45B3 = TONALITE D'ACHEMINEMENT, cf. note complete).
;     Utilisation directe/inline plutot que via appel a L459D/L45B3, dans un
;     contexte de gestion de statut d'appel (RAM 0x224C).
;
L4DA7:	MOV	A,#001H
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	SETB	02EH
	MOV	060H,#005H
	MOV	061H,#005H
	MOV	04EH,060H
	LCALL	L5964
	MOV	A,#010H
	MOV	R2,065H
	CJNE	R2,#019H,L4DC1
	MOV	A,#01BH
;
L4DC1:	MOV	DPTR,#L224C
	MOVX	@DPTR,A		; DPTR=0x224C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24C
	INC	DPTR
	SWAP	A
	MOVX	@DPTR,A		; DPTR=0x224D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24D
;
L4DC8:	JNB	02CH,L4DD2
	DJNZ	04CH,L4DD2
	CLR	065H
	CLR	02CH
;
L4DD2:	JNB	03EH,L4DE5
	MOV	DPTR,#L2254
	MOVX	A,@DPTR		; DPTR=0x2254, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x254
	DEC	A
	MOVX	@DPTR,A		; DPTR=0x2254, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x254
	JNZ	L4DE5
	LCALL	L066D
	LCALL	L0675
	CLR	03EH
;
L4DE5:	JNB	02EH,L4E11
	DJNZ	04EH,L4E11
	JB	000H,L4E01
	MOV	04EH,060H
	SETB	000H
	JNB	057H,L4E11
	MOV	P1,#08EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8EH -> bits actifs(1): RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8E -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	MOV	A,#01EH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x1E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port5 [BF1[S](volume bit2),BF2[S](volume bit1),BF3[S](volume bit0)]
	LJMP	L4E11
;
;
L4E01:	MOV	04EH,061H
	CLR	000H
	JNB	057H,L4E11
	MOV	P1,#0CEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#CEH -> bits actifs(1): RSTM2,ACKM,DATA,P16,P17 | [si reellement pulsee -> commande extenseur 0xCE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	MOV	A,#0EEH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xEE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]
;
L4E11:	JNB	02FH,L4E24
	DJNZ	050H,L4E24
	ORL	068H,#00FH
	CLR	02FH
	JB	067H,L4E24
	MOV	04AH,#000H
	SETB	01FH
;
L4E24:	JNB	038H,L4E30
	DJNZ	059H,L4E30
	SETB	023H
	SETB	00BH
	CLR	038H
;
L4E30:	JNB	03AH,L4E3E
	DJNZ	05BH,L4E3E
	SETB	024H
	MOV	07BH,#03CH
	MOV	05BH,#032H
;
L4E3E:	JNB	034H,L4E76
	DJNZ	055H,L4E76
	MOV	A,066H
	ANL	A,#0F0H
	CJNE	A,#040H,L4E5E
	JB	018H,L4E54
	LCALL	L371A
	LJMP	L4E57
;
;
L4E54:	LCALL	L3713
;
L4E57:	SETB	010H
	SETB	023H
	LJMP	L4E71
;
;
L4E5E:	CJNE	A,#050H,L4E71
	JB	018H,L4E6A
	LCALL	L371A
	LJMP	L4E6D
;
;
L4E6A:	LCALL	L3713
;
L4E6D:	SETB	00FH
	SETB	023H
;
L4E71:	ANL	066H,#00FH
	CLR	034H
;
L4E76:	JNB	035H,L4E83
	DJNZ	056H,L4E83
	SETB	024H
	MOV	07BH,#03EH
	CLR	035H
;
;
; >>> CONFIRME PAR L'UTILISATEUR (recherche explicite du mecanisme de
;     clignotement partiel du VFD, non gere nativement par l'organe): ce test
;     de temporisation (036H/057H) est LA BASE DE L'OSCILLATEUR DE
;     CLIGNOTEMENT - il aiguille selon le statut generique (RAM 0x21DB, deja
;     documente) vers L4EB9 avec des paires R2/R3 specifiques (ex: statut=2
;     'canal invalide' -> R2=0x0E,R3=0x04). Cf. note complete a L4EB9 pour le
;     mecanisme d'alternance et de reamorcage periodique.
;
L4E83:	JNB	036H,L4EC6
	DJNZ	057H,L4EC6
	MOV	DPTR,#L21DB
	MOVX	A,@DPTR		; DPTR=0x21DB, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1DB
	ANL	A,#00FH
	CJNE	A,#004H,L4E99
	MOV	R2,#00DH
	MOV	R3,#00EH
	LJMP	L4EB9
;
;
L4E99:	CJNE	A,#001H,L4EA3
	MOV	R2,#006H
	MOV	R3,#003H
	LJMP	L4EB9
;
;
L4EA3:	CJNE	A,#002H,L4EB5
	MOV	R2,#00EH
	MOV	R3,#004H
	LJMP	L4EB9
;
;
L4EAD:	MOV	R1,002H
	LJMP	L4EC0
;
;
L4EB2:	LJMP	L4FD6
;
;
L4EB5:	MOV	R2,#00DH
	MOV	R3,#005H
;
;
; >>> CONFIRME - VERITABLE OSCILLATEUR DE CLIGNOTEMENT (repond a la demande
;     explicite de l'utilisateur). Alterne a CHAQUE declenchement entre deux
;     evenements d'affichage (R2 et R3, prealablement charges par l'appelant -
;     ex. 0x0E et 0x04 pour le clignotement de 'CA' en cas de canal invalide,
;     cf. note complete a L4E83) via le drapeau 04CH qui bascule a chaque
;     passage. APRES CHAQUE DECLENCHEMENT, REARME LE COMPTEUR (MOV 057H,#019H,
;     soit 25 unites) CREANT LE VERITABLE CYCLE REPETITIF DE CLIGNOTEMENT -
;     CONTRAIREMENT AUX AUTRES TEMPORISATEURS DE CE TYPE (033H/054H etc, deja
;     documentes) QUI SONT A USAGE UNIQUE, CELUI-CI SE REDECLENCHE LUI-MEME
;     INDEFINIMENT tant que le statut correspondant (036H) reste actif.
;     Exemple concret (canal invalide, statut 0x21DB=2): alterne entre
;     L'EVENEMENT 0x04 (L4B43, cf. note complete: EFFACE les 2 positions du
;     suffixe 'CA'/'AS' avec un ESPACE, code VFD 0x24) et L'EVENEMENT 0x0E
;     (L4BBE, cf. note complete: REAFFICHE les vrais caracteres du suffixe
;     depuis le tampon RAM) - EXACTEMENT le mecanisme decrit par l'utilisateur:
;     affichage temporaire, effacement par un espace, reaffichage, en boucle.
;     CONFIRME PARTAGE ENTRE PLUSIEURS ECRANS DE SAISIE (demande explicite de
;     l'utilisateur): CANAL ('CA', cf. L0E89/L3BC3), RELAIS ('RE', cf. L0E0B/
;     L3BAD) et CODE D'ACCES N1 ('CO', cf. L10CE/L38A7) declenchent tous ce
;     MEME mecanisme via L3B91 (statut 0x21DB=2), chacun avec sa propre routine
;     de validation (stricte pour le canal, simple completude pour RE/N2, autre
;     pour CO) mais un OSCILLATEUR DE CLIGNOTEMENT UNIQUE ET GENERIQUE partage.
;
L4EB9:	JBC	04CH,L4EAD
	SETB	04CH
	MOV	R1,003H
;
L4EC0:	LCALL	L034F
	MOV	057H,#019H
;
L4EC6:	MOV	DPTR,#L223C
	MOVX	A,@DPTR		; DPTR=0x223C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23C
	ANL	A,#00FH
	DEC	A
	JNZ	L4ED1
	MOV	A,#00AH
;
L4ED1:	MOVX	@DPTR,A		; DPTR=0x223C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23C
	CJNE	A,#00AH,L4EB2
	JNB	031H,L4EE1
	DJNZ	052H,L4EE1
	SETB	023H
	SETB	00AH
	CLR	031H
;
L4EE1:	JNB	033H,L4F00
	DJNZ	054H,L4F00
	JB	04BH,L4EEC
	CLR	02EH
;
L4EEC:	CLR	04BH
	CLR	000H
	CLR	033H
	MOV	A,064H
	CJNE	A,#003H,L4EFA
	LJMP	L4EFD
;
;
L4EFA:	JNB	053H,L4F00
;
L4EFD:	LCALL	L5931
;
L4F00:	JNB	039H,L4F12
	DJNZ	05AH,L4F12
	MOV	P1,#0CFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#CFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P16,P17 | [si reellement pulsee -> commande extenseur 0xCF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	MOV	A,#09FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x9F -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port5 [TCS_DEC,XEAS,XURG,ACQ(ETDP-ACQ)]
	CLR	039H
	CLR	068H
;
L4F12:	JNB	03BH,L4F1F
	DJNZ	05CH,L4F1F
	MOV	07BH,#03DH
	SETB	024H
	CLR	03BH
;
L4F1F:	JNB	037H,L4F2C
	DJNZ	058H,L4F2C
	SETB	01DH
	MOV	071H,#00AH
	CLR	037H
;
L4F2C:	MOV	DPTR,#L223D
	MOVX	A,@DPTR		; DPTR=0x223D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23D
	ANL	A,#00FH
	DEC	A
	JNZ	L4F3E
	SETB	P3.0		; P3.0 = DR(RxD/SC20)
	JB	066H,L4F3C
	SETB	P3.1		; P3.1 = DE(TxD/SC20)
;
L4F3C:	MOV	A,#00AH
;
L4F3E:	MOVX	@DPTR,A		; DPTR=0x223D, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23D
	CJNE	A,#00AH,L4F45
	LJMP	L4F48
;
;
L4F45:	LJMP	L4FD6
;
;
L4F48:	MOV	DPTR,#L224F
	MOVX	A,@DPTR		; DPTR=0x224F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x24F
	ANL	A,#00FH
	CJNE	A,#00FH,L4F54
	LJMP	L4F5E
;
;
L4F54:	DEC	A
	JNZ	L4F5D
	MOV	A,#0FFH
	SETB	01CH
	SETB	023H
;
L4F5D:	MOVX	@DPTR,A		; MOVX: cible externe non tracee
;
L4F5E:	MOV	DPTR,#L223E
	MOVX	A,@DPTR		; DPTR=0x223E, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23E
	ANL	A,#00FH
	SWAP	A
	MOV	B,A
	INC	DPTR
	MOVX	A,@DPTR		; DPTR=0x223F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23F
	ANL	A,#00FH
	ADD	A,B
	DEC	A
	JNZ	L4F72
	MOV	A,#01EH
;
L4F72:	MOV	DPTR,#L223E
	SWAP	A
	MOVX	@DPTR,A		; DPTR=0x223E, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23E
	INC	DPTR
	SWAP	A
	MOVX	@DPTR,A		; DPTR=0x223F, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x23F
	CJNE	A,#01EH,L4FD6
	JNB	032H,L4FC0
	DJNZ	053H,L4FA1
	SETB	023H
	CLR	032H
	SETB	008H
	JBC	06CH,L4FC0
	CLR	008H
	SETB	00CH
	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.2,L4F9E		; EPROM perso 0x047E -> d2 (INFERE): observe a 3 endroits distincts (~L4667,~L4F9E,~L4FC0) systematiquement lie a la notion de DUREE DE COMMUNICATION - a l'un des sites, si d2=1, charge explicitement l'octet 0478 (duree de communication documentee) dans une variable RAM (053H) -> HYPOTHESE: 047E.2 pourrait etre un second interrupteur (specifique?) de la fonction 'limitation de duree', a rapprocher de 0469.5 documente pour la meme fonction (redondance ou contexte differents, ex. ligne tel. vs canal radio - non tranche).
	CLR	00CH
	CLR	023H
	LCALL	L4648
;
L4F9E:	LJMP	L4FC0
;
;
;
; >>> 8EME SITE DE CONFIGURATION DE TONALITE ALSIG (060H=00FH,061H=096H -
;     ASYMETRIQUE: ~150ms de bip / ~1500ms de pause). Gate par le bit NON
;     DOCUMENTE 047E.d2 (cf. note deja existante sur cet octet) et par le flag
;     053H (lie a la limitation de duree de communication, EPROM 0x0478).
;     FONCTION PRECISE NON IDENTIFIEE - ne correspond a aucune des 5 tonalites
;     nommees par l'utilisateur (duree trop courte pour 'retour d'appel', pause
;     trop longue et asymetrique pour les autres).
;
L4FA1:	MOV	DPTR,#L047E
	MOVX	A,@DPTR		; NON DOCUMENTE OFFICIELLEMENT (EpromPersonnalisation.txt: version logicielle anterieure sans documentation disponible pour cette adresse). ANALYSE PAR LE CODE (INFERENCE, pas de confirmation externe) - voir le decodage bit par bit ci-dessous et la note complete a L0108/L0112 pour le bit d6. | DPTR=0x047E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.2,L4FC0		; EPROM perso 0x047E -> d2 (INFERE): observe a 3 endroits distincts (~L4667,~L4F9E,~L4FC0) systematiquement lie a la notion de DUREE DE COMMUNICATION - a l'un des sites, si d2=1, charge explicitement l'octet 0478 (duree de communication documentee) dans une variable RAM (053H) -> HYPOTHESE: 047E.2 pourrait etre un second interrupteur (specifique?) de la fonction 'limitation de duree', a rapprocher de 0469.5 documente pour la meme fonction (redondance ou contexte differents, ex. ligne tel. vs canal radio - non tranche).
	MOV	A,#001H
	CJNE	A,053H,L4FC0
	MOV	061H,#096H
	MOV	060H,#00FH
	MOV	04EH,060H
	SETB	02EH
	LCALL	L5964
	SETB	033H
	MOV	054H,#024H
;
L4FC0:	JNB	03CH,L4FD6
	DJNZ	05DH,L4FD6
	MOV	05DH,#078H
	DJNZ	05EH,L4FD6
	MOV	R1,#002H
	LCALL	L034F
	MOV	R1,#002H
	LCALL	L034F
;
L4FD6:	LJMP	L585F
;
;
L4FD9:	CLR	03DH
	MOV	A,#07EH
	MOV	P1,#0CEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#CEH -> bits actifs(1): RSTM2,ACKM,DATA,P16,P17 | [si reellement pulsee -> commande extenseur 0xCE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x7E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port7 [STN_V[E](=SYV,PLL lock),ALT_T[E](=ALTT,PTT/alternat),INFO_EM[E](=EM,emission en cours),DP[E](detection porteuse)]
	SETB	065H
	SETB	02CH
	MOV	04CH,#00AH
	SETB	02DH
	MOV	04DH,#004H
	MOV	P1,#08EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8EH -> bits actifs(1): RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8E -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	MOV	A,#01EH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x1E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port5 [BF1[S](volume bit2),BF2[S](volume bit1),BF3[S](volume bit0)]
	CLR	04EH
	CLR	047H
	CLR	048H
	JNB	067H,L5005
	MOV	R0,#01BH
	LJMP	L5007
;
;
L5005:	MOV	R0,#01DH
;
L5007:	MOV	A,@R0
	LCALL	L5198
	MOV	B,#064H
	MUL	AB
	MOV	R4,B
	MOV	R3,A
	INC	R0
	MOV	A,@R0
	LCALL	L5198
	CLR	C
	ADD	A,R3
	MOV	R3,A
	JNC	L501D
	INC	R4
;
;
; >>> CONFIRME A 100%: selection de la frequence talon (EpromPersonnalisation.txt).
;     SWAP A ; ANL A,#007H extrait exactement les bits d6-d4 de l'octet 0x0465 dans
;     les 3 bits bas ; RL A multiplie par 2 (chaque talon = 2 octets: poids fort +
;     poids faible) ; ADD A,DPL avec DPTR=#L04A0 calcule le pointeur dans la table
;     des talons (0x04A0-0x04AF). Reproduit EXACTEMENT la formule documentee par
;     l'utilisateur, aux details d'implementation pres.
;
L501D:	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	SWAP	A
	ANL	A,#007H		; EPROM perso 0x0465, masque 0x7 -> d0: ecoute reseau commutable - bref passage ALT=0 valide l'ecoute reseau ; d1: ecoute reseau commutable - passage ALT=0 >500ms valide ecoute+communication (avec d0) ; d2: tonalite de presence - envoi d'un ton de presence
	RL	A
	MOV	DPTR,#L04A0
	ADD	A,DPL
	MOV	DPL,A
		MOVX	A,@DPTR		; TABLE DES TALONS DE FREQUENCE (EpromPersonnalisation.txt): paire poids fort/poids faible parmi UHF haute/basse (step 12.5/20kHz, prescaler /64), VHF haute (step 12.5/20/6.25/5kHz, prescaler /20 ou /40), VHF basse (step 6.25/5kHz, prescaler /40) - selectionnee via les bits d6-d4 de l'octet 0465, cf. L501D. | DPTR=0x04A0, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). TABLE DES TALONS DE FREQUENCE (EpromPersonnalisation.txt): paire poids fort/poids faible parmi UHF haute/basse (step 12.5/20kHz, prescaler /64), VHF haute (step 12.5/20/6.25/5kHz, prescaler /20 ou /40), VHF basse (step 6.25/5kHz, prescaler /40) - selectionnee via les bits d6-d4 de l'octet 0465, cf. L501D.
	ADD	A,R4
	MOV	R4,A
	INC	DPTR
	MOVX	A,@DPTR		; TABLE DES TALONS DE FREQUENCE (EpromPersonnalisation.txt): paire poids fort/poids faible parmi UHF haute/basse (step 12.5/20kHz, prescaler /64), VHF haute (step 12.5/20/6.25/5kHz, prescaler /20 ou /40), VHF basse (step 6.25/5kHz, prescaler /40) - selectionnee via les bits d6-d4 de l'octet 0465, cf. L501D. | DPTR=0x04A1, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). TABLE DES TALONS DE FREQUENCE (EpromPersonnalisation.txt): paire poids fort/poids faible parmi UHF haute/basse (step 12.5/20kHz, prescaler /64), VHF haute (step 12.5/20/6.25/5kHz, prescaler /20 ou /40), VHF basse (step 6.25/5kHz, prescaler /40) - selectionnee via les bits d6-d4 de l'octet 0465, cf. L501D.
	ADD	A,R3
	MOV	R3,A
	JNC	L5036
	INC	R4
;
L5036:	MOV	DPTR,#L0465
	MOVX	A,@DPTR		; DPTR=0x0465, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE CONFIGURATION RADIO (EpromPersonnalisation.txt): d7=tonalite CCIR P/PQ sur front ALT ; d6-d4=selection frequence talon (voir table 04A0-04AF, cf. L501D) ; d3-d2=tonalite de presence ; d1-d0=ecoute reseau commutable. Decode bit-a-bit ci-dessous quand un test JB/JNB/ANL suit immediatement la lecture.
	JB	ACC.6,L5056
	JB	ACC.5,L5059
	MOV	A,R4
	MOV	B,#040H
	DIV	AB
	MOV	R4,A
	MOV	A,#004H
	MUL	AB
	MOV	R2,A
	MOV	A,R3
	MOV	B,#040H
	DIV	AB
	ADD	A,R2
	MOV	R3,A
	MOV	R2,B
	LJMP	L50B3
;
;
L5056:	LJMP	L505C
;
;
L5059:	LJMP	L5089
;
;
L505C:	MOV	A,R4
	MOV	B,#028H
	DIV	AB
	MOV	R4,A
	MOV	A,#006H
	MUL	AB
	MOV	R2,A
	MOV	B,#00FH
	DIV	AB
	ADD	A,R2
	MOV	R2,A
	MOV	A,#008H
	MUL	AB
	MOV	B,#003H
	DIV	AB
	MOV	R5,A
	MOV	A,R3
	MOV	B,#028H
	DIV	AB
	ADD	A,R2
	MOV	R3,A
	MOV	A,R5
	ADD	A,B
	MOV	B,#028H
	DIV	AB
	ADD	A,R3
	MOV	R3,A
	MOV	R2,B
	LJMP	L50B3
;
;
;
; >>> Bloc de CALCUL DES DIVISEURS PLL (N/R) a partir d'un numero de canal (chaine de
;     DIV AB / MUL AB), alimente L50B3 juste en dessous.
;
L5089:	MOV	A,R4
	MOV	B,#014H
	DIV	AB
	MOV	R4,A
	MOV	A,#00CH
	MUL	AB
	MOV	R2,A
	MOV	B,#00FH
	DIV	AB
	ADD	A,R2
	MOV	R2,A
	MOV	A,#004H
	MUL	AB
	MOV	B,#003H
	DIV	AB
	MOV	R5,A
	MOV	A,R3
	MOV	B,#014H
	DIV	AB
	ADD	A,R2
	MOV	R3,A
	MOV	A,R5
	ADD	A,B
	MOV	B,#014H
	DIV	AB
	ADD	A,R3
	MOV	R3,A
	MOV	R2,B
;
;
; >>> FONCTION IDENTIFIEE: programmation serie du PLL MC145156 (MN01), doc reference 4.7.
;     Decale 19 bits sur P3.3 (DS=PLL_Data), cadence par MOVX @R0,A sur /WR(=PLL_CLK).
;     Atteinte par fall-through depuis le calcul de diviseurs N/R (bloc L5089 juste
;     au-dessus).
;
L50B3:	MOV	P2,#000H		; PORT P2 de MN1 (broches 21-27: A8-A14 vers MN3/MN4, bit5=R/P) | MOV/ORL/ANL/XRL P2,#0H -> bits actifs(1): (aucun)
	JB	067H,L50C0
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	MOVX	@R0,A		; MOVX: cible externe non tracee
	MOVX	@R0,A		; MOVX: cible externe non tracee
	LJMP	L50C6
;
;
L50C0:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	MOVX	@R0,A		; MOVX: cible externe non tracee
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	MOVX	@R0,A		; MOVX: cible externe non tracee
;
L50C6:	MOV	A,R4
	RR	A
	JB	ACC.0,L50CF
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L50D1
;
L50CF:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L50D1:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L50DA
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L50DC
;
L50DA:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L50DC:	MOVX	@R0,A		; MOVX: cible externe non tracee
	MOV	A,R3
	RL	A
	JB	ACC.0,L50E6
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L50E8
;
L50E6:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L50E8:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L50F1
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L50F3
;
L50F1:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L50F3:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L50FC
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L50FE
;
L50FC:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L50FE:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L5107
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L5109
;
L5107:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L5109:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L5112
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L5114
;
L5112:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L5114:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L511D
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L511F
;
L511D:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L511F:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L5128
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L512A
;
L5128:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L512A:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L5133
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L5135
;
L5133:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L5135:	MOVX	@R0,A		; MOVX: cible externe non tracee
	MOV	A,R2
	RL	A
	RL	A
	JB	ACC.0,L5140
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L5142
;
L5140:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L5142:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L514B
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L514D
;
L514B:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L514D:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L5156
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L5158
;
L5156:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L5158:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L5161
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L5163
;
L5161:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L5163:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L516C
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L516E
;
L516C:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L516E:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L5177
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L5179
;
L5177:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L5179:	MOVX	@R0,A		; MOVX: cible externe non tracee
	RL	A
	JB	ACC.0,L5182
	CLR	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
	SJMP	L5184
;
L5182:	SETB	P3.3		; P3.3 = DS(vers MN01 PLL,=PLL_Data)
;
L5184:	MOVX	@R0,A		; MOVX: cible externe non tracee
	MOV	A,#08EH
	MOV	P1,#08EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8EH -> bits actifs(1): RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8E -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x8E -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]
	MOV	A,#07EH
	MOV	P1,#0CEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#CEH -> bits actifs(1): RSTM2,ACKM,DATA,P16,P17 | [si reellement pulsee -> commande extenseur 0xCE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x7E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port7 [STN_V[E](=SYV,PLL lock),ALT_T[E](=ALTT,PTT/alternat),INFO_EM[E](=EM,emission en cours),DP[E](detection porteuse)]
	LJMP	L585F
;
;
L5198:	MOV	B,A
	ANL	B,#00FH
	PUSH	B
	ANL	A,#0F0H
	SWAP	A
	MOV	B,#00AH
	MUL	AB
	POP	B
	ADD	A,B
	RET	
;
;
;
; >>> CONFIRME: EQUIVALENT MINI10 DE L4A16 - defile (L0379, base 0x2F) le meme
;     codage d'evenement d'affichage/LED que pour le SC20, mais aiguille (table
;     L51BF) vers des sous-programmes DEDIES AU MINI10 (L520A, L5213, L5249,
;     L522D, L525D...). Atteint depuis L58B2 uniquement SI 05AH=1 (MINI10) -
;     symetrique exact du couple L4A16(SC20)/L51AB(MINI10) sur la MEME file
;     d'evenements 0x2F : le meme 'evenement 0' (afficher le tampon 072H-079H)
;     est ainsi traite differemment selon l'organe connecte.
;
L51AB:	MOV	R0,#02FH
	LCALL	L0379
	CJNE	A,#0FFH,L51B6
	LJMP	L5289
;
;
L51B6:	MOV	R0,A
	ADD	A,R0
	ADD	A,R0
	MOV	R0,#036H
	MOV	DPTR,#L51BF
	JMP	@A+DPTR
;
;
L51BF:	LJMP	L520A
;
	LJMP	L5213
;
	LJMP	L5249
;
	LJMP	L522D
;
	LJMP	L525D
;
	LJMP	L523D
;
	LJMP	L5243
;
	LJMP	L5235
;
	LJMP	L5289
;
	LJMP	L5289
;
	LJMP	L5289
;
	LJMP	L5289
;
	LJMP	L5289
;
	LJMP	L528C
;
	LJMP	L5293
;
	LJMP	L5255
;
	LJMP	L5265
;
	LJMP	L526D
;
	LJMP	L527A
;
	LJMP	L5289
;
	LJMP	L5289
;
	LJMP	L52A2
;
	LJMP	L529A
;
	LJMP	L52AA
;
	LJMP	L52AF
;
;
L520A:	LCALL	L52F2
	LCALL	L531E
	LJMP	L5287
;
;
L5213:	JB	060H,L5221
	MOV	075H,#024H
	MOV	R1,#04FH
	LCALL	L534C
	LCALL	L5339
;
L5221:	LCALL	L5300
	LCALL	L52B6
	LCALL	L52E2
	LJMP	L5287
;
;
L522D:	MOV	R1,#06FH
	LCALL	L534C
	LJMP	L5287
;
;
L5235:	MOV	R1,078H
	LCALL	L534C
	LJMP	L5287
;
;
L523D:	LCALL	L52F2
	LJMP	L5287
;
;
L5243:	LCALL	L531E
	LJMP	L5287
;
;
L5249:	MOV	R2,#005H
;
L524B:	MOV	R1,#06AH
	LCALL	L534C
	DJNZ	R2,L524B
	LJMP	L5287
;
;
L5255:	MOV	R1,#062H
	LCALL	L534C
	LJMP	L527A
;
;
L525D:	MOV	R1,#063H
	LCALL	L534C
	LJMP	L5287
;
;
L5265:	MOV	R1,#06EH
	LCALL	L534C
	LJMP	L5287
;
;
L526D:	MOV	R1,#066H
	LCALL	L534C
	MOV	R1,#06CH
	LCALL	L534C
	LJMP	L5287
;
;
L527A:	MOV	R1,#067H
	LCALL	L534C
	MOV	R1,#06DH
	LCALL	L534C
	LJMP	L5287
;
;
L5287:	SETB	020H
;
L5289:	LJMP	L585F
;
;
L528C:	MOV	R1,#064H
	LCALL	L534C
	SJMP	L5287
;
L5293:	MOV	R1,#065H
	LCALL	L534C
	SJMP	L5287
;
L529A:	LCALL	L52B6
	LCALL	L5300
	SJMP	L5287
;
L52A2:	LCALL	L52E2
	LCALL	L5300
	SJMP	L525D
;
L52AA:	LCALL	L5339
	SJMP	L5287
;
L52AF:	MOV	R1,#05EH
	LCALL	L0365
	SJMP	L5287
;
L52B6:	MOV	079H,#064H
	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	CJNE	A,#000H,L52CE
	MOV	DPTR,#L21B9
	MOVX	A,@DPTR		; DPTR=0x21B9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B9
	ANL	A,#00FH
	CJNE	A,#000H,L52CE
	MOV	079H,#065H
;
L52CE:	MOV	078H,#061H
	JNB	056H,L52D7
	MOV	078H,#060H
;
L52D7:	MOV	R1,078H
	LCALL	L534C
	MOV	R1,079H
	LCALL	L534C
	RET	
;
;
L52E2:	MOV	A,#00DH
	JB	04FH,L52E9
	MOV	A,07CH
;
L52E9:	MOV	072H,A
	ORL	A,#030H
	MOV	R1,A
	LCALL	L534C
	RET	
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR - MECANISME DE CONVERSION POUR LE MINI10 (pas de
;     table, un simple calcul arithmetique, contrairement au SC20): lit le
;     'caractere logique' en RAM 072H (meme convention de caracteres que le SC20:
;     024H=espace) ; le remplace par 00FH ('Eteint') si c'est un espace (le
;     MINI10 n'a pas de notion d'espace, seulement 'digit' ou 'eteint') ; ajoute
;     030H (prefixe du 7-segments GAUCHE) ; envoie via L534C (=L0365). Table de
;     codage MINI10 confirmee: 0xN0-0xN9=chiffres,0xNA='P',0xNB='_',0xNC='=='
;     (3 barres),0xND='d',0xNE='r',0xNF=eteint, ou N=3(gauche)/4(centre)/5(droite).
;
L52F2:	MOV	A,072H
	CJNE	A,#024H,L52F9
	MOV	A,#00FH
;
L52F9:	ADD	A,#030H
	MOV	R1,A
	LCALL	L534C
	RET	
;
;
L5300:	MOV	073H,#067H
	MOV	R1,#06DH
	JB	04FH,L5310
	JNB	046H,L5310
	MOV	073H,#066H
	MOV	R1,#06CH
;
L5310:	LCALL	L534C
	MOV	R1,073H
	LCALL	L534C
	MOV	R1,#063H
	LCALL	L534C
	RET	
;
;
;
; >>> Meme mecanisme que L52F2 (cf. note complete) pour les 7-segments CENTRE
;     (RAM 075H, prefixe 040H) et DROITE (RAM 076H, prefixe 050H), envoyes
;     successivement. Espace (024H) converti en 00FH (eteint) pour chaque digit.
;
L531E:	MOV	A,075H
	CJNE	A,#024H,L5325
	MOV	A,#00FH
;
L5325:	ORL	A,#040H
	MOV	R1,A
	LCALL	L534C
	MOV	A,076H
	CJNE	A,#024H,L5332
	MOV	A,#00FH
;
L5332:	ORL	A,#050H
	MOV	R1,A
	LCALL	L534C
	RET	
;
;
L5339:	JB	060H,L534B
	MOV	A,#00FH
	JNB	053H,L5343
	MOV	A,#00EH
;
L5343:	MOV	076H,A
	ORL	A,#050H
	MOV	R1,A
	LCALL	L534C
;
L534B:	RET	
;
;
;
; >>> Simple aiguillage: LJMP L0365 (meme file d'enfilage generique que le SC20 -
;     la conversion de codage a deja ete faite par l'appelant, L0365 ne fait
;     qu'enfiler l'octet final tel quel).
;
L534C:	LJMP	L0365
;
;
;
;
; >>> TRACE COMPLETE DP -> MA5 (demande utilisateur, REVISEE apres clarification:
;     EM est une ENTREE de MN13 fournie par la carte ampli RF, signalant une
;     emission en cours - mutuellement exclusif avec DP en fonctionnement demi-duplex).
;     Tache de la boucle principale (appelee via L58A9): lit le Port7 de MN13
;     (LECTURE, CS=0) qui porte STN_V/ALT_T/EM/DP. Nibble conserve dans R3
;     (bit0=STN_V,bit1=ALT_T,bit2=EM,bit3=DP).
;     CE QUE FAIT CETTE ROUTINE PRECISEMENT (bit3=DP, teste ci-dessous): bascule
;     uniquement le flag d'etat persistant 046H sur un changement reel, avec
;     notification generique (006H/023H) consommee par affichage sur une trentaine
;     d'ecrans - PAS D'ACTION AUDIO ICI.
;     LA VRAIE BASCULE AUDIO PILOTEE PAR DP (reponse a la question initiale de
;     l'utilisateur) SE TROUVE AILLEURS: c'est L5931, gatee DIRECTEMENT par le
;     MEME flag 046H (pas via cette routine-ci), qui ouvre (avec relecture du
;     volume, cf. L5948) ou ferme le trajet audio recepteur - cf. note complete a
;     L5931. Exemple d'appel: L2950 (JNB 046H,...; LCALL L5931).
;     Plus loin dans CETTE routine (L536E), le bit2=EM est teste separement et
;     declenche un AUTRE mecanisme (L54AA/L5977/L5964) - CORRECTION: ce n'est PAS
;     le squelch DP mais tres probablement une COUPURE/RESTAURATION DE L'AUDIO
;     RECEPTEUR PENDANT L'EMISSION (EM=1), sans rapport direct avec le squelch -
;     cf. note complete a L536E.
;
L534F:	MOV	P1,#03EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#3EH -> bits actifs(1): RSTM2,ACKM,DATA,P14,P15 | [si reellement pulsee -> commande extenseur 0x3E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port7 [STN_V[E](=SYV,PLL lock),ALT_T[E](=ALTT,PTT/alternat),INFO_EM[E](=EM,emission en cours),DP[E](detection porteuse)]]
	LCALL	L03BF		; Appel avec P1 deja charge -> commande extenseur 0x3E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port7 [STN_V[E](=SYV,PLL lock),ALT_T[E](=ALTT,PTT/alternat),INFO_EM[E](=EM,emission en cours),DP[E](detection porteuse)]
	MOV	R3,A
	JNB	ACC.3,L5362
	JB	046H,L536E
	JNB	048H,L536E
	LJMP	L5365
;
;
;
L5362:	JNB	046H,L536E
;
;
L5365:	CPL	046H
	JB	067H,L536E
	SETB	006H
	SETB	023H
;
;
;
; >>> Teste bit2=EM (emission RF en cours, entree depuis la carte ampli) et
;     bit1=ALT_T sur le nibble Port7 (R3). CORRECTION suite a la clarification de
;     l'utilisateur (EM=entree, mutuellement exclusif avec DP en demi-duplex):
;     ce bloc gere le COUPURE/RESTAURATION DE L'AUDIO RECEPTEUR PENDANT
;     L'EMISSION, PAS le squelch (qui est gere separement par L5931/L046H, cf.
;     note complete a L534F). Structure en machine a etats via 047H/057H:
;       - EM=0 (pas d'emission) ET 047H==0 (1ere detection) -> SETB 047H, puis SI
;         057H est actif (on avait coupe l'audio pour une emission precedente),
;         appelle L5977 (restauration) et efface 057H.
;       - EM=1 (emission en cours) ET 047H==1 (on etait en etat 'audio actif') ->
;         CLR 047H, appelle L54AA (coupure), qui positionne 057H.
;     Coherent avec la remarque de l'utilisateur: EM et DP ne peuvent pas etre
;     actifs simultanement (demi-duplex), donc cette logique EM ne se declenche
;     jamais en meme temps que le mecanisme squelch/DP de L5931.
;
L536E:	MOV	A,R3
	JNB	04EH,L5397
	JNB	ACC.2,L5386
	JNB	047H,L5397
	CLR	047H
	SETB	007H
	SETB	023H
	LCALL	L54AA
	SETB	057H
	LJMP	L5397
;
;
L5386:	JB	047H,L5397
	SETB	047H
	SETB	007H
	SETB	023H
	JNB	057H,L5397
	LCALL	L5977
	CLR	057H
;
L5397:	MOV	A,R3
	JNB	ACC.1,L53A1
	JNB	045H,L53AD
	LJMP	L53A4
;
;
L53A1:	JB	045H,L53AD
;
L53A4:	CPL	045H
	SETB	005H
	SETB	023H
	LCALL	L046E
;
L53AD:	MOV	P1,#01FH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#1FH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P14 | [si reellement pulsee -> commande extenseur 0x1F -> puce=MN14 (CS=1) | instruction=LECTURE | port=Port5 [TCS_DEC,XEAS,XURG,ACQ(ETDP-ACQ)]]
	LCALL	L03BF		; Appel avec P1 deja charge -> commande extenseur 0x1F -> puce=MN14 (CS=1) | instruction=LECTURE | port=Port5 [TCS_DEC,XEAS,XURG,ACQ(ETDP-ACQ)]
	MOV	R3,A
	JB	ACC.2,L53D8
	JB	04AH,L53F3
	SETB	04AH
	MOV	DPTR,#L046B
	MOVX	A,@DPTR		; OPTIONS MISE SOUS TENSION/MICA/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. Code de deverrouillage 6 chiffres stocke a 06E1-06E6 si d6=1. | DPTR=0x046B, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#003H		; EPROM perso 0x046B, masque 0x3 -> d0: 1=transfert automatique de la detresse (d1 doit alors etre a 0) - si d0/d1=1, decodage du statut defini a 0467 ; d1: 1=transfert manuel de la detresse (d0 doit alors etre a 0)
	JZ	L53CE
	MOV	DPTR,#L2190
	MOVX	A,@DPTR		; DPTR=0x2190, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x190
	ANL	A,#00FH
	MOV	DPTR,#L2191
	MOVX	@DPTR,A		; DPTR=0x2191, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x191
;
L53CE:	MOV	01FH,#005H
	SETB	023H
	SETB	016H
	LJMP	L53DD
;
;
L53D8:	JNB	04AH,L53DD
	CLR	04AH
;
L53DD:	MOV	A,R3
	JNB	03FH,L53F3
	JNB	ACC.0,L53EA
	JB	041H,L53F3
	LJMP	L53ED
;
;
L53EA:	JNB	041H,L53F3
;
L53ED:	CPL	041H
	SETB	023H
	SETB	040H
;
L53F3:	MOV	A,R3
	JNB	ACC.1,L53FD
	JNB	049H,L5409
	LJMP	L5403
;
;
L53FD:	JB	049H,L5409
	MOV	01FH,#000H
;
L5403:	CPL	049H
	SETB	023H
	SETB	015H
;
L5409:	JNB	ACC.3,L5412
	JNB	044H,L541B
	LJMP	L5415
;
;
L5412:	JB	044H,L541B
;
L5415:	CPL	044H
	SETB	023H
	SETB	004H
;
L541B:	LJMP	L585F
;
;
;
; >>> TACHE DE VERIFICATION PLL (probablement appelee depuis la boucle
;     principale, a confirmer): appelle L5492, copie 042H vers 043H (detection
;     de defaillance SUR DEUX VERIFICATIONS CONSECUTIVES, evite les fausses
;     alertes ponctuelles).
;
L541E:	LCALL	L5492
	MOV	C,042H
	MOV	043H,C
	SETB	03DH
	MOV	05FH,#004H
	LJMP	L585F
;
;
;
; >>> AUTRE TACHE DE VERIFICATION PLL: appelle L5492 ; si 042H ET 043H indiquent
;     tous deux une defaillance (verrouillage perdu de facon persistante),
;     declenche la sequence d'alerte (cf. L5453) ; sinon (cf. L5461) verifie si
;     le verrouillage vient d'etre RETROUVE et declenche L54AA (cf. note
;     complete) dans ce cas (L5470).
;
L542D:	LCALL	L5492
	JNB	042H,L5461
	JNB	043H,L5461
	JB	048H,L548A
	CLR	065H
	CLR	02CH
	SETB	048H
	JB	067H,L5449
	SETB	023H
	SETB	00EH
	LJMP	L5453
;
;
L5449:	MOV	P1,#0CEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#CEH -> bits actifs(1): RSTM2,ACKM,DATA,P16,P17 | [si reellement pulsee -> commande extenseur 0xCE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	MOV	A,#0EEH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xEE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]
	SETB	04EH
;
;
; >>> SEQUENCE D'ECHEC PERSISTANT DU VERROUILLAGE PLL: si pas deja signale
;     (064H), appelle L5937 (fermeture du trajet audio squelch, cf. note
;     complete a L5931/L5937 deja identifiee) puis L5977. NE SEMBLE PAS ACTIVER
;     LE DRAPEAU 000H (donc pas de tonalite ALSIG via ce chemin precis, sauf si
;     L5937/L5977 le font indirectement ailleurs - A VERIFIER).
;
L5453:	JNB	064H,L548A
	CLR	064H
	LCALL	L5937
	LCALL	L5977
	LJMP	L548A
;
;
;
; >>> Distingue defaillance PERSISTANTE (deja signalee, 065H actif -> re-signale
;     sans repeter l'action) de RETOUR A LA NORMALE (cf. L5470).
;
L5461:	JNB	065H,L5470
	MOV	C,042H
	MOV	043H,C
	SETB	03DH
	MOV	05FH,#004H
	LJMP	L548F
;
;
;
; >>> RETOUR A LA NORMALE APRES PERTE DE VERROUILLAGE PLL: si pas deja traite
;     (064H), appelle L54AA (TONALITE ALSIG #6, cf. note complete) - CONFIRME
;     que cette tonalite se declenche a la RESTAURATION du verrouillage, PAS a
;     la perte initiale.
;
L5470:	JB	064H,L548A
	SETB	064H
	LCALL	L54AA
	MOV	P1,#08EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8EH -> bits actifs(1): RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8E -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port4 [OPE[S](ampli TX),BLM[S](deblocage micro->VCO),ENR[S](valid. donnees PLL)]]
	MOV	A,#01EH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x1E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port5 [BF1[S](volume bit2),BF2[S](volume bit1),BF3[S](volume bit0)]
	CLR	047H
	CLR	048H
	SETB	023H
	SETB	00EH
	SETB	052H
;
L548A:	SETB	02DH
	MOV	04DH,#064H
;
L548F:	LJMP	L585F
;
;
;
; >>> VERIFICATION DU VERROUILLAGE PLL (STN_V/SYV) - boucle d'appel de L5496
;     (R2=8 tentatives). Positionne le drapeau 042H='PLL NON VERROUILLEE apres
;     8 tentatives'.
;
L5492:	CLR	042H
	MOV	R2,#008H
;
;
; >>> LECTURE INLINE DU PORT7 DE MN13 (equivalent L03BF mais sans SWAP+ANL - lit
;     directement le nibble BRUT dans le bit4 du registre P1, correspondant a
;     STN_V=bit0 de Port7 via P14/P20): si STN_V=1 (verrouille), sort
;     immediatement (RET). Sinon, reessaie jusqu'a 8 fois (DJNZ R2) avant de
;     positionner 042H (echec de verrouillage).
;
L5496:	MOV	P1,#03EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#3EH -> bits actifs(1): RSTM2,ACKM,DATA,P14,P15 | [si reellement pulsee -> commande extenseur 0x3E -> puce=MN13 (CS=0) | instruction=LECTURE | port=Port7 [STN_V[E](=SYV,PLL lock),ALT_T[E](=ALTT,PTT/alternat),INFO_EM[E](=EM,emission en cours),DP[E](detection porteuse)]]
	CLR	P3.5		; P3.5 = PROG(T1,vers MN13/MN14)
	ORL	P1,#0F0H		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#F0H -> bits actifs(1): P14,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xF0 -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port7 [STN_V[E](=SYV,PLL lock),ALT_T[E](=ALTT,PTT/alternat),INFO_EM[E](=EM,emission en cours),DP[E](detection porteuse)]]
	MOV	A,P1		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17)
	SETB	P3.5		; P3.5 = PROG(T1,vers MN13/MN14)
	JNB	ACC.4,L54A9
	DJNZ	R2,L5496
	SETB	042H
;
L54A9:	RET	
;
;
;
;
; >>> COUPURE DE L'AUDIO RECEPTEUR PENDANT L'EMISSION (declenchee par EM=1, cf.
;     note complete a L536E - PAS liee au squelch/DP). Programme des constantes
;     de temporisation en RAM (060H=40,061H=20 - fonction precise non confirmee),
;     copie 060H dans le flag 04EH, positionne 02EH, puis appelle L5964 qui pulse
;     l'extenseur MN13 (vraisemblablement pour couper/rediriger l'audio recepteur
;     le temps de l'emission, evitant un retour audio indesirable).
;
;
; >>> TONALITE ALSIG #6 (duree=028H ON, pause=014H OFF - LA SEULE VARIANTE
;     ASYMETRIQUE des 6, duree>pause). CONFIRME PAR L'UTILISATEUR (test reel
;     sur l'equipement): l'absence de verrouillage PLL N'EST PAS signalee par
;     une tonalite ALSIG sur cette version du logiciel - recherche de cette
;     alerte terminee, cf. note complete a L5470 (cette tonalite se declenche
;     uniquement au retour du verrouillage, sans lien avec une alerte).
;
L54AA:	MOV	060H,#028H
	MOV	061H,#014H
	MOV	04EH,060H
	SETB	02EH
	LCALL	L5964
	RET	
;
;
L54B9:	MOV	DPTR,#L046E
	MOVX	A,@DPTR		; DPTR=0x046E, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.5,L5521
	MOV	DPTR,#L2198
	MOVX	A,@DPTR		; DPTR=0x2198, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x198
	ANL	A,#00FH
	MOV	R0,A
	MOV	DPTR,#L2197
	MOVX	A,@DPTR		; DPTR=0x2197, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x197
	ANL	A,#00FH
	CJNE	A,#000H,L5539
;
L54D0:	MOV	A,R0
	CJNE	A,#000H,L552D
	MOV	DPTR,#L0474
	MOVX	A,@DPTR		; DPTR=0x0474, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#007H
	JZ	L5521
	MOV	R5,A
	MOV	DPTR,#L21E0
	MOVX	A,@DPTR		; DPTR=0x21E0, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1E0
	ANL	A,#00FH
	XRL	A,#00FH
	JZ	L5524
	MOV	DPTR,#L21DC
	LCALL	L04AC
	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	MOV	R4,A
	JZ	L5510
	LCALL	L5563
	JNZ	L5509
	MOV	A,R1
	CJNE	A,004H,L5502
	LJMP	L5521
;
;
L5502:	DEC	R1
	MOV	R3,001H
	LCALL	L55B1
	DEC	R4
;
L5509:	MOV	A,R4
	CJNE	A,#005H,L5510
	LCALL	L5586
;
L5510:	INC	A
	MOV	DPTR,#L2199
	MOVX	@DPTR,A		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	LCALL	L55A8
	DEC	DPL
	MOV	R0,#06FH
	MOV	R2,005H
	LCALL	L55A0
;
L5521:	LJMP	L585F
;
;
L5524:	MOV	A,#0FFH
	MOV	DPTR,#L21B9
	MOVX	@DPTR,A		; DPTR=0x21B9, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B9
	LJMP	L585F
;
;
L552D:	CJNE	A,#001H,L5521
	MOV	A,#001H
	MOV	DPTR,#L2197
	MOVX	@DPTR,A		; DPTR=0x2197, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x197
	LJMP	L585F
;
;
L5539:	MOV	A,R0
	CJNE	A,#002H,L554B
	MOV	DPTR,#L21B8
	MOVX	A,@DPTR		; DPTR=0x21B8, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1B8
	ANL	A,#00FH
	DEC	A
	MOV	R3,A
	LCALL	L55B1
	LJMP	L554E
;
;
L554B:	CJNE	A,#003H,L5557
;
L554E:	MOV	A,#000H
	MOV	DPTR,#L2197
	MOVX	@DPTR,A		; DPTR=0x2197, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x197
;
L5554:	LJMP	L585F
;
;
L5557:	CJNE	A,#000H,L5554
	MOV	A,#000H
	MOV	DPTR,#L2197
	MOVX	@DPTR,A		; DPTR=0x2197, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x197
	LJMP	L54D0
;
;
L5563:	MOV	R1,A
;
L5564:	MOV	A,R1
	MOV	DPTR,#L2199
	LCALL	L55A8
	DEC	DPL
	MOV	R0,#06FH
	MOV	R2,005H
;
L5571:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	MOV	B,A
	MOV	A,@R0
	CJNE	A,B,L5581
	DEC	R0
	DEC	DPL
	DJNZ	R2,L5571
	CLR	A
	RET	
;
;
L5581:	DJNZ	R1,L5564
	MOV	A,#0FFH
	RET	
;
;
L5586:	MOV	DPTR,#L219A
	MOV	R1,DPL
	MOV	DPTR,#L21A0
	MOV	R0,DPL
;
L5590:	MOV	DPL,R0
	MOVX	A,@DPTR		; DPTR=0x21A0, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1A0
	ANL	A,#00FH
	MOV	DPL,R1
	MOVX	@DPTR,A		; DPTR=0x21A0, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x1A0
	INC	R0
	INC	R1
	CJNE	R1,#0B7H,L5590
	MOV	A,#004H
	RET	
;
;
L55A0:	MOV	A,@R0
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	DEC	R0
	DEC	DPL
	DJNZ	R2,L55A0
	RET	
;
;
L55A8:	MOV	B,#006H
	MUL	AB
	ADD	A,DPL
	MOV	DPL,A
	RET	
;
;
L55B1:	MOV	DPTR,#L2199
	MOVX	A,@DPTR		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	ANL	A,#00FH
	DEC	A
	MOVX	@DPTR,A		; DPTR=0x2199, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x199
	XRL	A,R3
	JZ	L55CA
	MOV	DPTR,#L219A
	MOV	A,R3
	LCALL	L55A8
	MOV	R1,A
	ADD	A,#006H
	MOV	R0,A
	LCALL	L5590
;
L55CA:	RET	
;
;
L55CB:	MOV	P1,#0EFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#EFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xEF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	MOV	A,#07FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x7F -> puce=MN14 (CS=1) | instruction=ECRITURE | port=Port7 [FX1,FX2,FX3,FX4]
	RET	
;
;
L55D4:	JNC	L55DF
	MOV	P1,#0AFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#AFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P17 | [si reellement pulsee -> commande extenseur 0xAF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	MOV	A,#04FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x4F -> puce=MN14 (CS=1) | instruction=ECRITURE | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]
	RET	
;
;
L55DF:	MOV	P1,#0EFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#EFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xEF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	MOV	A,#0BFH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xBF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port7 [FX1,FX2,FX3,FX4]
	RET	
;
;
L55E8:	MOV	P1,#0AFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#AFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P17 | [si reellement pulsee -> commande extenseur 0xAF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	MOV	A,#08FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x8F -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]
	RET	
;
;
L55F1:	MOVX	A,@DPTR		; MOVX: cible externe non tracee
	ANL	A,#00FH
	DEC	A
	MOVX	@DPTR,A		; MOVX: cible externe non tracee
	RET	
;
;
L55F7:	MOV	P1,#0EFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#EFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xEF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	MOV	A,#0DFH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xDF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port5 [TCS_DEC,XEAS,XURG,ACQ(ETDP-ACQ)]
	RET	
;
;
L5600:	MOV	P1,#0AFH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#AFH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P15,P17 | [si reellement pulsee -> commande extenseur 0xAF -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]]
	MOV	A,#02FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x2F -> puce=MN14 (CS=1) | instruction=LECTURE | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]
	RET	
;
;
L5609:	JNB	071H,L560F
	LJMP	L565A
;
;
L560F:	JBC	072H,L5618
	JBC	073H,L564A
	LJMP	L585F
;
;
L5618:	CJNE	R1,#000H,L561D
	MOV	R1,#00AH
;
L561D:	MOV	DPTR,#L2241
	MOV	A,#004H
	MOVX	@DPTR,A		; DPTR=0x2241, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x241
;
L5623:	LCALL	L55CB
	MOV	A,R1
	RRC	A
	MOV	R1,A
	LCALL	L55D4
	LCALL	L55E8
	LCALL	L55F1
	JNZ	L5623
	LCALL	L55CB
	LCALL	L55F7
	LCALL	L55E8
	MOV	DPTR,#L2240
	MOV	A,#00AH
	MOVX	@DPTR,A		; DPTR=0x2240, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x240
	SETB	075H
	CLR	071H
	LJMP	L585F
;
;
L564A:	LCALL	L5600
	MOV	DPTR,#L2240
	MOV	A,#007H
	MOVX	@DPTR,A		; DPTR=0x2240, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x240
	SETB	075H
	SETB	071H
	LJMP	L585F
;
;
L565A:	JBC	073H,L5660
	LJMP	L585F
;
;
L5660:	SETB	074H
	SETB	023H
	CLR	071H
	LCALL	L5600
	LJMP	L585F
;
;
L566C:	MOV	R1,#005H
	MOV	DPTR,#L2241
	MOV	A,#004H
	MOVX	@DPTR,A		; DPTR=0x2241, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x241
;
L5674:	LCALL	L55CB
	MOV	A,R1
	RRC	A
	MOV	R1,A
	LCALL	L55D4
	LCALL	L55E8
	LCALL	L55F1
	JNZ	L5674
	LCALL	L55CB
	LCALL	L55F7
	LCALL	L55E8
	RET	
;
;
;
; >>> FONCTION IDENTIFIEE ET CONFIRMEE: DECODEUR DE TOUCHES SC20/MINI10 (dispatcher
;     principal des codes UART recus de l'organe d'exploitation).
;     Lit un octet du tampon de reception (R0=033H via L0379), teste sa parite, en
;     extrait le code touche brut dans R3, puis distingue le type d'organe via le
;     flag interne 05AH (positionne au boot d'apres le nibble haut de l'octet de
;     personnalisation EPROM MN4 @0x0464 : 05AH=1 -> MINI10, 05AH=0 -> SC20/autre,
;     cf. OrganeExploitation.txt fourni par l'utilisateur). Ceci CONFIRME et RESOUT
;     le point laisse ouvert precedemment : les touches '+' et '-' sont bien testees
;     avec des codes DIFFERENTS selon le type d'organe (SC20: '-'=0x07,'+'=0x0B ;
;     MINI10: '-'=0x27,'+'=0x26), exactement comme le montre le code plus bas.
;     0x2F ('touche relachee', code commun aux deux organes) est teste explicitement.
;     0x60 (M/A du SC20) declenche une sequence de mise sous tension (ecriture a
;     0x2257, 2x mise en file d'un parametre '2' via L034F).
;
L568F:	MOV	R0,#033H
	LCALL	L0379
	CJNE	A,#0FFH,L569A
	LJMP	L5745
;
;
L569A:	MOV	C,P
	JNC	L56A1
	LJMP	L572B
;
;
L56A1:	ANL	A,#07FH
	CJNE	A,#015H,L56AC		; CJNE: si EGAL a 0x15 (A) -> PAS de saut, traitement de: MINI10 (reponse organe) COMMANDE INCONNUE ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	SBUF,07AH
	LJMP	L573E
;
;
L56AC:	MOV	R3,A
	CJNE	A,#032H,L56B3		; CJNE: si EGAL a 0x32 (A) -> PAS de saut, traitement de: IDENTIFICATION organe = STANDARD (cf. L56B3) ; si DIFFERENT -> saut au test suivant de la chaine
	LJMP	L5724
;
;
;
; >>> MECANISME D'IDENTIFICATION DE L'ORGANE D'EXPLOITATION CONNECTE (reponse a la
;     question de l'utilisateur sur l'organe 'STANDARD'): lorsqu'un octet recu
;     (parite deja testee plus haut) a pour nibble haut 030H (plage 0x30-0x3F),
;     et que le DERNIER octet valide echo (RAM 07AH, cf. L4CFD) valait 06Eh
;     (sequence probable en 2 temps: un octet de synchronisation 0x6E puis un octet
;     d'annonce 0x3X), le nibble BAS de cet octet 0x3X est compare au CODE DE TYPE
;     D'ORGANE lu dans l'EPROM de personnalisation (0x0464, bits d6-d4, SWAP+ANL
;     007H): 1=MINI10, 2=STANDARD, 4=SC20/MINI20/CLAVIER (EpromPersonnalisation.txt).
;     CONFIRME: l'organe d'exploitation connecte s'identifie donc en envoyant
;     l'octet 031H (MINI10), 032H (STANDARD) ou 034H (SC20/MINI20/CLAVIER) - ceci
;     repond a la question de l'utilisateur: l'organe STANDARD existe bien dans ce
;     mecanisme et s'identifierait par le code UART 0x32. En cas de correspondance,
;     R3 est force a 07FH (sentinelle) avant traitement generique (L5724) -
;     vraisemblablement un accuse de bonne identification.
;     NB IMPORTANT: ceci est un octet d'IDENTIFICATION ponctuel, PAS une table de
;     caracteres/touches. Aucune table de conversion dediee au STANDARD n'a ete
;     trouvee par ailleurs: le flag 05AH (deja identifie) ne distingue QUE
;     MINI10(1) de tout le reste(0) - un organe STANDARD est donc traite EXACTEMENT
;     comme un SC20 par tout le code deja analyse (protocole VFD scramble, ecriture
;     groupee 078H, etc.), confirme par l'utilisateur (schema materiel: le
;     STANDARD possede bien un afficheur VFD 8 caracteres comme le SC20).
;     CONFIRME PAR DEDUCTION LOGIQUE (l'utilisateur atteste que les tables SC20 et
;     MINI10 fournies sont exhaustives): les codes touche 0x29/0x2A n'appartenant
;     a aucune des deux, ils appartiennent NECESSAIREMENT a l'organe STANDARD
;     (14 touches physiques d'apres son schema, dont possiblement 13 emettant un
;     code UART) - cf. note complete a L37C9 pour le detail fonctionnel de ces 2
;     touches.
;
L56B3:	MOV	B,A
	ANL	A,#0F0H
	CJNE	A,#030H,L56D8		; CORRECTIF: ceci teste le NIBBLE HAUT du code recu (masque par ANL juste avant) pour verifier qu'il est bien dans la plage 0x30-0x3F (identification d'organe, cf. note complete a L56D3) - CE N'EST PAS un test de la commande VFD 'clignotement OFF' malgre la coincidence numerique avec 0x30 (B, sauvegarde juste avant via MOV B,A, conserve la valeur ORIGINALE non masquee pour l'usage reel plus bas).
	MOV	A,07AH
	ANL	A,#07FH
	CJNE	A,#06EH,L572B
	ANL	B,#00FH
	MOV	DPTR,#L0464
	MOVX	A,@DPTR		; OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, MISE A JOUR): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0: DESORMAIS SANS AMBIGUITE (correction utilisateur): activation appel selectif si d0=0, DESACTIVATION si d0=1. | DPTR=0x0464, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE). OCTET DE TYPE D'ORGANE + SIGNALISATION (EpromPersonnalisation.txt, corrige par l'utilisateur): d7-d4=type d'organe (0001=MINI10,0100=MINI20/SC20/CLAVIER,0010=STANDARD - seuls MINI10/SC20 vus dans le code jusqu'ici) ; d3-d1=type signalisation 5-tons (001=CCIR,100=ZVEI2) ; d0=DESACTIVE l'appel selectif si d0=1 (donc active si d0=0). Usage direct de ce bit precis non localise avec certitude dans ce desassemblage.
	SWAP	A
	ANL	A,#007H
	CJNE	A,B,L56D3
	MOV	R3,#07FH
	LJMP	L5724
;
;
;
; >>> CHEMIN DE CODE REEL ET VERIFIE (verrou de securite sur incoherence
;     organe/EPROM): atteint quand le type d'organe RECU lors de la poignee de
;     main d'identification (cf. note complete a L56B3) NE CORRESPOND PAS au
;     type d'organe CONFIGURE DANS L'EPROM DE PERSONNALISATION (0x0464 bits
;     d6-d4). Declenche ALSIG via L5964 PUIS boucle indefiniment sur
;     elle-meme (cf. L56D6) - LE PROGRAMME NE REVIENT JAMAIS AU PLANIFICATEUR
;     PRINCIPAL.
;     RESERVE IMPORTANTE DE L'UTILISATEUR (a prendre en compte): ce chemin
;     precis n'explique PROBABLEMENT PAS l'alerte 400ms/200ms observee lors de
;     son test - il a constate un demarrage NORMAL (affichage du code N1,
;     touche APPEL et touche # fonctionnelles), ce qui est INCOMPATIBLE avec
;     un blocage total du planificateur principal comme celui-ci. La cause
;     reelle de l'alerte observee reste donc A RECHERCHER (l'hypothese de
;     l'option '100000 N3' sans table de relais configuree reste la piste
;     principale, verification en cours par l'utilisateur).
;
L56D3:	LCALL	L5964
;
;
; >>> BOUCLE INFINIE SUR ELLE-MEME (SJMP vers soi-meme): le firmware resterait
;     bloque ici indefiniment en cas d'incoherence organe/EPROM (cf. note
;     complete a L56D3, y compris la reserve importante de l'utilisateur sur
;     le lien avec l'alerte reellement observee). Seul le Timer0 continuerait
;     de s'executer en interruption - AUCUN AUTRE TRAITEMENT (clavier,
;     affichage, PLL, etc.) NE S'EXECUTERAIT PLUS.
;
L56D6:	SJMP	L56D6
;
L56D8:	MOV	A,R3
	CJNE	A,#060H,L56EF		; CJNE: si EGAL a 0x60 (R3, via A) -> PAS de saut, traitement de: SC20 touche M/A ; si DIFFERENT -> saut au test suivant de la chaine
	MOV	DPTR,#L2257
	MOV	A,#00BH
	MOVX	@DPTR,A		; DPTR=0x2257, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x257
	MOV	R1,#002H
	LCALL	L034F
	MOV	R1,#002H
	LCALL	L034F
	LJMP	L5745
;
;
L56EF:	CJNE	A,#02FH,L56F5		; CJNE: si EGAL a 0x2F (R3, via A) -> PAS de saut, traitement de: SC20/MINI10 TOUCHE RELACHEE (exemple donne par l'utilisateur) ; si DIFFERENT -> saut au test suivant de la chaine
	LJMP	L5724
;
;
L56F5:	MOV	DPTR,#L046C
	MOVX	A,@DPTR		; OPTIONS DIVERSES, ACTIVES A L'ETAT 0 (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous - attention polarite inversee par rapport aux autres octets (0=actif). | DPTR=0x046C, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.2,L5724		; EPROM perso 0x046C -> d2=0(actif si 0): emission d'un bip a chaque appui touche de l'organe d'exploitation
	JB	05AH,L570B
	CJNE	R3,#007H,L5705		; Code touche possible (R3) 0x07 -> SC20:'-'
	LJMP	L5724
;
;
L5705:	CJNE	R3,#00BH,L5717		; Code touche possible (R3) 0x0B -> SC20:'+'
	LJMP	L5724
;
;
L570B:	CJNE	R3,#027H,L5711		; Code touche possible (R3) 0x27 -> MINI10:'-'
	LJMP	L5724
;
;
L5711:	CJNE	R3,#026H,L5717		; Code touche possible (R3) 0x26 -> MINI10:'+'
	LJMP	L5724
;
;
;
; >>> CONFIRME PAR L'UTILISATEUR: point d'appel REEL du 'bip touches' (via
; L5964). Ce point n'est atteint QUE SI la touche pressee N'EST NI '-' NI
; '+' (SC20: 0x07/0x0B, MINI10: 0x27/0x26 - cf. les 4 CJNE juste au-dessus,
; L56F5-L5711, qui sautent explicitement vers L5724 - donc SANS bip - pour
; ces 4 codes touche precis). CONFIRME: LES TOUCHES DE REGLAGE DE VOLUME
; SONT EXPLICITEMENT EXEMPTEES DU BIP DE CONFIRMATION, exactement comme
; observe par l'utilisateur. A NOTER: cet appel a L5964 NE PROGRAMME PAS
; de nouvelle duree (pas de sequence 060H/061H/04EH ici, contrairement aux
; 6 routines de tonalite dediees) - le bip touches utilise donc la valeur
; de 04EH DEJA EN PLACE au moment de l'appui (heritee du dernier reglage
; de tonalite effectue), ce qui pourrait expliquer pourquoi aucune routine
; dediee au bip touches n'a ete trouvee parmi les 6 catalogues.
;
L5717:	JB	02EH,L5724
	MOV	054H,#002H
	SETB	033H
	LCALL	L5964
	SETB	04BH
;
L5724:	MOV	07BH,R3
	SETB	024H
	LJMP	L5745
;
;
L572B:	JNB	066H,L5735
	SETB	069H
	SETB	020H
	LJMP	L5745
;
;
;
; >>> CONFIRME: reponse '(commande inconnue)' choisie selon le type d'organe -
;     R1=0x41 par defaut (SC20), remplace par R1=0x15 si le flag 05AH est actif
;     (MINI10) - exactement les deux valeurs 'commande inconnue' de
;     OrganeExploitation.txt (SC20=0x41, MINI10=0x15). Emise ensuite via SBUF.
;
L5735:	MOV	R1,#041H
	JNB	05AH,L573C
	MOV	R1,#015H
;
L573C:	MOV	SBUF,R1
;
L573E:	SETB	066H
	SETB	02BH
	MOV	04BH,#01CH
;
L5745:	LJMP	L585F
;
;
L5748:	MOV	A,062H
	MOV	DPTR,#L5751
	MOV	R3,A
	ADD	A,R3
	ADD	A,R3
	JMP	@A+DPTR
;
;
L5751:	LJMP	L575A
;
	LJMP	L577C
;
	LJMP	L57B8
;
;
L575A:	MOV	A,071H
	CJNE	A,#000H,L5762
	LJMP	L585F
;
;
L5762:	CJNE	A,#001H,L5776
	MOV	DPTR,#L046B
	MOVX	A,@DPTR		; OPTIONS MISE SOUS TENSION/MICA/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. Code de deverrouillage 6 chiffres stocke a 06E1-06E6 si d6=1. | DPTR=0x046B, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	ANL	A,#003H		; EPROM perso 0x046B, masque 0x3 -> d0: 1=transfert automatique de la detresse (d1 doit alors etre a 0) - si d0/d1=1, decodage du statut defini a 0467 ; d1: 1=transfert manuel de la detresse (d0 doit alors etre a 0)
	JZ	L5773
	LCALL	L57BB
	MOV	062H,#001H
;
L5773:	LJMP	L585F
;
;
L5776:	CJNE	A,#002H,L5779
;
L5779:	LJMP	L585F
;
;
L577C:	MOV	A,071H
	CJNE	A,#00AH,L5789
	CLR	051H
	MOV	062H,#000H
	LJMP	L585F
;
;
L5789:	CJNE	A,#00BH,L57B5
	MOV	DPTR,#L046B
	MOVX	A,@DPTR		; OPTIONS MISE SOUS TENSION/MICA/DETRESSE (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. Code de deverrouillage 6 chiffres stocke a 06E1-06E6 si d6=1. | DPTR=0x046B, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JB	ACC.1,L57A6		; EPROM perso 0x046B -> d1: 1=transfert manuel de la detresse (d0 doit alors etre a 0)
	JNB	ACC.0,L57B5		; EPROM perso 0x046B -> d0: 1=transfert automatique de la detresse (d1 doit alors etre a 0) - si d0/d1=1, decodage du statut defini a 0467
	LCALL	L57D5
	LCALL	L57C3
	CLR	051H
	CLR	037H
	MOV	062H,#000H
	LJMP	L585F
;
;
L57A6:	LCALL	L57D5
	SETB	053H
	CLR	051H
	CLR	037H
	MOV	062H,#000H
	LJMP	L585F
;
;
L57B5:	LJMP	L585F
;
;
L57B8:	LJMP	L585F
;
;
L57BB:	MOV	058H,#028H
	SETB	037H
	SETB	051H
	RET	
;
;
L57C3:	MOV	DPTR,#L2190
	MOVX	A,@DPTR		; DPTR=0x2190, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x190
	ANL	A,#00FH
	MOV	DPTR,#L2191
	MOVX	@DPTR,A		; DPTR=0x2191, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x191
	MOV	01FH,#005H
	SETB	016H
	SETB	023H
	RET	
;
;
L57D5:	MOV	P1,#08FH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#8FH -> bits actifs(1): CS,RSTM2,ACKM,DATA,P17 | [si reellement pulsee -> commande extenseur 0x8F -> puce=MN14 (CS=1) | instruction=OU logique (OR) | port=Port4 [LBA,KLX(relais Klaxon),RAS-DSR,PAE]]
	MOV	A,#02FH
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0x2F -> puce=MN14 (CS=1) | instruction=LECTURE | port=Port6 [LBB,VTCS(YTCS?),XTCS,ERTCS]
	SETB	068H
	RET	
;
;
L57E0:	MOV	A,064H
	CLR	C
	MOV	R0,A
	RLC	A
	ADD	A,R0
	MOV	DPTR,#L57EA
	JMP	@A+DPTR
;
;
L57EA:	LJMP	L16A9
;
	LJMP	L18D2
;
	LJMP	L1908
;
	LJMP	L19CE
;
	LJMP	L1B62
;
	LJMP	L1BE7
;
	LJMP	L1C6C
;
	LJMP	L1CF2
;
	LJMP	L1E1B
;
	LJMP	L1EEE
;
	LJMP	L1FD8
;
	LJMP	L207E
;
	LJMP	L21CE
;
	LJMP	L2200
;
	LJMP	L22BE
;
	LJMP	L2A26
;
	LJMP	L2ABE
;
	LJMP	L23A4
;
	LJMP	L245E
;
	LJMP	L24B7
;
	LJMP	L25E8
;
	LJMP	L26BC
;
	LJMP	L2760
;
	LJMP	L2803
;
	LJMP	L285C
;
	LJMP	L291C
;
	LJMP	L2989
;
	LJMP	L2B33
;
	LJMP	L29EA
;
	LJMP	L2B98
;
	LJMP	L40D3
;
	LJMP	L415D
;
	LJMP	L4232
;
	LJMP	L42C5
;
	LJMP	L4343
;
	LJMP	L43FA
;
	LJMP	L44B3
;
	LJMP	L2297
;
	LJMP	L585F
;
;
;
; >>> BOUCLE PRINCIPALE DU PROGRAMME (scheduler cooperatif): teste sequentiellement
;     une longue serie de drapeaux internes (bits RAM 0x20-0x2F) et distribue vers
;     la tache correspondante des que l'un d'eux est actif. Chaque drapeau JBC est
;     efface automatiquement lors du test (execution unique par occurrence), sauf
;     002H/02BH testes en JB simple (l'etat reste jusqu'a ce que la tache elle-meme
;     l'efface - typiquement pour des taches longues comme le reset de MN7).
;     Taches identifiees dans cette boucle: L58DC (reception quartet MN7), L541E,
;     L542D, L4D2A, L597C (reset+config MN7 si 002H), L534F, L568F (decodeur
;     touches SC20/MINI10), L4CFD (validation parite/echo UART), L4A16 (evenements
;     affichage/LED SC20, SAUTE SI MINI10 - cf. L58B2), et une dizaine d'autres
;     (L58BB,L58D9,L58BE,L58C1,L58C4,L58CD,L58D0,L58D3,L58D6) non encore
;     detaillees individuellement.
;
L585F:	JB	003H,L589A
	JBC	021H,L589D
	JBC	022H,L58A0
	JBC	001H,L58A3
	JB	002H,L58A6
	JBC	029H,L58A9
	JBC	028H,L58AC
	JB	02BH,L587D
	JBC	020H,L58AF
	JBC	01EH,L58B2
;
L587D:	JBC	01FH,L58BB
	JBC	070H,L58D9
	JBC	026H,L58BE
	JBC	02AH,L58C1
	JBC	024H,L58C4
	JBC	027H,L58CD
	JBC	023H,L58D0
	JBC	01DH,L58D3
	JBC	025H,L58D6
	SJMP	L585F
;
L589A:	LJMP	L58DC
;
;
L589D:	LJMP	L541E
;
;
L58A0:	LJMP	L542D
;
;
L58A3:	LJMP	L4D2A
;
;
L58A6:	LJMP	L597C
;
;
L58A9:	LJMP	L534F
;
;
L58AC:	LJMP	L568F
;
;
L58AF:	LJMP	L4CFD
;
;
;
; >>> Repartiteur de la tache d'affichage/LED SC20: SAUTE ENTIEREMENT si MINI10
;     (JB 05AH,L58B8) - confirme que le mecanisme complet L0355/L4A16/L4Bxx/L4Cxx
;     de gestion du VFD 8 caracteres et des LED est SPECIFIQUE AU SC20, absent
;     pour le MINI10 (qui utilise son propre affichage reduit, cf. L39BE).
;
L58B2:	JB	05AH,L58B8
	LJMP	L4A16
;
;
L58B8:	LJMP	L51AB
;
;
L58BB:	LJMP	L2BE3
;
;
L58BE:	LJMP	L3271
;
;
L58C1:	LJMP	L4FD9
;
;
L58C4:	JB	05BH,L58CA
	LJMP	L3C5E
;
;
L58CA:	LJMP	L06A6
;
;
L58CD:	LJMP	L346C
;
;
L58D0:	LJMP	L57E0
;
;
L58D3:	LJMP	L5748
;
;
L58D6:	LJMP	L54B9
;
;
L58D9:	LJMP	L5609
;
;
;
; >>> FONCTION IDENTIFIEE: reception d'un quartet (4 bits) depuis MN7 (5-tons), doc 4.4.
;     Boucle sur P3.4(ACKE)=horloge, lit P1.3(DATA), decale dans A, acquitte via P1.2(ACKM).
;
L58DC:	MOV	R2,#004H
	MOV	R1,#005H
	CLR	A
;
L58E1:	JB	P3.4,L592C		; P3.4 = ACKE(T0,depuis MN7)
	MOV	C,P1.3		; P1.3 = DATA
	RRC	A
	CLR	P1.2		; P1.2 = ACKM
;
L58E9:	JNB	P3.4,L58E9		; P3.4 = ACKE(T0,depuis MN7)
	SETB	P1.2		; P1.2 = ACKM
	DJNZ	R2,L58E1
	CLR	003H
	SWAP	A
	MOV	R0,A
	XRL	A,#00FH
	JZ	L58FD
	SETB	02FH
	MOV	050H,#00AH
;
L58FD:	MOV	A,R0
	JNZ	L5911
	JNB	047H,L5911
	MOV	R0,#00FH
	SETB	023H
	SETB	009H
	SETB	052H
	MOV	DPTR,#L2250
	MOV	A,#0FFH
	MOVX	@DPTR,A		; DPTR=0x2250, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=0)/P2.1(A9=1) = 0x250
;
L5911:	MOV	DPTR,#L0488
	MOVX	A,@DPTR		; DPTR=0x0488, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	CJNE	A,000H,L5923
	MOV	DPTR,#L046A
	MOVX	A,@DPTR		; OPTIONS DIVA/CHECKSUM RAM (EpromPersonnalisation.txt): voir decodage bit par bit ci-dessous. d6 confirme le mecanisme de checksum RAM deja identifie (L0081/L00D1/L00EB). Fonction DIVA detaillee: https://blog.shibby.fr/.../Diva.pdf (OCR requis, non consulte ici). | DPTR=0x046A, R/P=0 -> fenetre EPROM personnalisation MN4 (27C32, 4Kio, LECTURE SEULE).
	JNB	ACC.2,L5923		; EPROM perso 0x046A -> d2: 1=ralliement d'appel via DIVA (CTCSS predefini), 0=synchronisation par porteuse simple
	SETB	014H
	SETB	023H
;
L5923:	MOV	A,R0
	ANL	068H,#0F0H
	ORL	068H,A
	LJMP	L585F
;
;
L592C:	DJNZ	R1,L58E1
	LJMP	L585F
;
;
;
; >>> CONFIRME - VERITABLE MECANISME SQUELCH DP -> MA5 (reponse complete a la
;     question initiale de l'utilisateur). Gatee par le flag 046H (etat de
;     porteuse/squelch, bascule par DP - cf. note complete a L534F), directement
;     (pas via le mecanisme EM de L536E/L54AA, qui est independant - cf. notes
;     correspondantes). Exemple d'appel reel: L2950 (JNB 046H,L2962; CLR 031H;
;     CLR 038H; LCALL L5931).
;       - Si 046H=0 (PAS de porteuse / squelch ferme) -> L5937/L593F: pulse
;         Port7 puis Port6 de MN13 SANS toucher au volume - fermeture/mise en
;         veille du trajet audio recepteur.
;       - Si 046H=1 (PORTEUSE DETECTEE / squelch ouvert) -> L5948 (cf. note
;         complete): pulse Port4 puis Port6, PUIS relit le niveau de volume
;         memorise (RAM 0x218C, 0-6, meme convention que la table MA05/CD4051
;         deja confirmee) et l'applique sur Port5 de MN13 (BF1-3) - EXACTEMENT
;         la fonction decrite par l'utilisateur: 'si DP actif, diffuser le signal
;         recu vers le haut-parleur selon le reglage de volume predefini'.
;     0D1H (teste en tete) est un flag de garde supplementaire (mode/contexte
;     actif) deja rencontre ailleurs dans le programme, fonction precise non
;     confirmee.
;
L5931:	JB	0D1H,L5948
	JB	046H,L5948
;
L5937:	MOV	A,#07EH
	MOV	P1,#0EEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#EEH -> bits actifs(1): RSTM2,ACKM,DATA,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xEE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xFF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port7 [FX1,FX2,FX3,FX4]
;
L593F:	MOV	A,#00EH
	MOV	P1,#05EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#5EH -> bits actifs(1): RSTM2,ACKM,DATA,P14,P16 | [si reellement pulsee -> commande extenseur 0x5E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port5 [BF1[S](volume bit2),BF2[S](volume bit1),BF3[S](volume bit0)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xFF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port7 [FX1,FX2,FX3,FX4]
	RET	
;
;
;
; >>> OUVERTURE DU SQUELCH AVEC APPLICATION DU VOLUME (branche 046H=1 de L5931,
;     cf. note complete): pulse Port4 (A=08EH) puis Port6 (P1=0AEH) de MN13.
;     SI le flag 055H est actif (a confirmer - possible lien avec le mecanisme
;     des touches STANDARD 0x29/0x2A qui manipulent le meme flag, cf. L37C9/
;     L37F3 - a eclaircir), lit le niveau de volume memorise (RAM 0x218C, 0-6),
;     le remet en forme (ANL/ORL/SWAP/RL - repositionnement des bits BF1-3 dans
;     le nibble attendu par le protocole 8243) et l'ecrit sur Port5 de MN13
;     (P1=05EH, decode: ECRITURE-Port5 = BF1/BF2/BF3 = MA05/CD4051, DEJA
;     CONFIRME) - c'est la ligne precise qui 'diffuse vers le haut-parleur selon
;     le reglage de volume predefini' demandee par l'utilisateur.
;
L5948:	MOV	A,#08EH
	MOV	P1,#0AEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#AEH -> bits actifs(1): RSTM2,ACKM,DATA,P15,P17 | [si reellement pulsee -> commande extenseur 0xAE -> puce=MN13 (CS=0) | instruction=OU logique (OR) | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xFF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port7 [FX1,FX2,FX3,FX4]
	JNB	055H,L5963
	MOV	DPTR,#L218C
	MOVX	A,@DPTR		; DPTR=0x218C, R/P=1 -> fenetre RAM MN5 (HM-6514 1024x4, LECTURE/ECRITURE); adresse RAM reelle = octet bas latche + P2.0(A8=1)/P2.1(A9=0) = 0x18C
	ANL	A,#077H
	ORL	A,#070H
	SWAP	A
	RL	A
	MOV	P1,#05EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#5EH -> bits actifs(1): RSTM2,ACKM,DATA,P14,P16 | [si reellement pulsee -> commande extenseur 0x5E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port5 [BF1[S](volume bit2),BF2[S](volume bit1),BF3[S](volume bit0)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xFF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port7 [FX1,FX2,FX3,FX4]
;
;
; >>> Point de sortie commun de L5948 (retour direct si 055H inactif, sans
;     toucher au volume).
;
L5963:	RET	
;
;
;
;
; >>> PULSE DE BAS NIVEAU utilise par L54AA (coupure audio pendant l'emission,
;     cf. note complete a L536E/L54AA - PAS le mecanisme squelch/DP, qui est
;     gere par L5931/L5948, structurellement similaire mais fonctionnellement
;     distinct). Pulse deux operations sur l'extenseur MN13 via L03CC (memes
;     valeurs de premiere impulsion que L5937, cf. note complete a L5931) puis
;     positionne le flag 000H.
;
L5964:	MOV	A,#07EH
	MOV	P1,#0EEH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#EEH -> bits actifs(1): RSTM2,ACKM,DATA,P15,P16,P17 | [si reellement pulsee -> commande extenseur 0xEE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port6 [TEST[?],BBF3[S](aiguillage BF emission LT),BBF2[S](aiguillage BF reception LT),BBF1[S](aiguillage BF reception HP)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xFF -> puce=MN14 (CS=1) | instruction=ET logique (AND) | port=Port7 [FX1,FX2,FX3,FX4]
	MOV	A,#0FEH
	MOV	P1,#05EH		; PORT P1 de MN1 (broches 1-8: CS,RSTM2,ACKM,DATA,P14,P15,P16,P17) | MOV P1,#5EH -> bits actifs(1): RSTM2,ACKM,DATA,P14,P16 | [si reellement pulsee -> commande extenseur 0x5E -> puce=MN13 (CS=0) | instruction=ECRITURE | port=Port5 [BF1[S](volume bit2),BF2[S](volume bit1),BF3[S](volume bit0)]]
	LCALL	L03CC		; Appel avec A deja charge (valeur REELLEMENT pulsee) -> commande extenseur 0xFE -> puce=MN13 (CS=0) | instruction=ET logique (AND) | port=Port7 [STN_V[E](=SYV,PLL lock),ALT_T[E](=ALTT,PTT/alternat),INFO_EM[E](=EM,emission en cours),DP[E](detection porteuse)]
	SETB	000H
	RET	
;
;
;
;
; >>> RESTAURATION DE L'AUDIO RECEPTEUR APRES L'EMISSION (cf. note complete a
;     L536E/L54AA): efface simplement 000H et 02EH sans repulser l'extenseur -
;     possible que la restauration effective passe par un appel a L5931 ailleurs
;     (le squelch/DP reprend alors normalement son propre etat via 046H).
;
L5977:	CLR	000H
	CLR	02EH
	RET	
;
;
;
; >>> FONCTION IDENTIFIEE: reset MN7 (pulse RSTM2=P1.1) puis emission d'un octet de
;     commande (8 bits) sur DATA, cadence par ACKE/ACKM (doc 4.4.1, ex: reparametrage a 20h).
;
L597C:	MOV	R0,#040H
	LCALL	L0379
	CJNE	A,#0FFH,L598E
	CLR	002H
	SETB	01FH
	MOV	04AH,#00DH
	LJMP	L59B5
;
;
L598E:	CLR	P1.1		; P1.1 = RSTM2
	NOP	
	NOP	
	NOP	
	NOP	
	SETB	P1.1		; P1.1 = RSTM2
	MOV	R2,#008H
;
L5998:	JB	ACC.0,L59A0
	CLR	P1.3		; P1.3 = DATA
	LJMP	L59A2
;
;
L59A0:	SETB	P1.3		; P1.3 = DATA
;
L59A2:	CLR	P1.2		; P1.2 = ACKM
	RR	A
;
L59A5:	JB	P3.4,L59A5		; P3.4 = ACKE(T0,depuis MN7)
	SETB	P1.2		; P1.2 = ACKM
;
L59AA:	JNB	P3.4,L59AA		; P3.4 = ACKE(T0,depuis MN7)
	DJNZ	R2,L5998
	SETB	P1.3		; P1.3 = DATA
	MOV	R2,#019H
;
L59B3:	DJNZ	R2,L59B3
;
L59B5:	LJMP	L585F
;
;
;
; >>> VECTEUR SERIE (UART) - reception d'un octet depuis/vers SC20 ou MINI10 sur DR/DE
;     (P3.0/P3.1). Voir tables completes ci-dessous (touches, LEDs) fournies par
;     l'utilisateur (OrganeExploitation.txt) et le document de reference (protocole,
;     temporisations, table de caracteres VFD specifique au SC20).
;   ================================================================
;   TABLES CONFIRMEES (source: OrganeExploitation.txt, fourni par
;   l'utilisateur - releve direct sur le materiel/la documentation
;   constructeur, remplace et complete les tables partielles/
;   incertaines des passes precedentes) :
;
;   Detection du type d'organe (octet de personnalisation MN4 @0x0464,
;   4 bits de POIDS FORT) :
;     0001b (nibble haut = 0x1_) -> MINI10   (flag interne 05AH = 1)
;     0100b (nibble haut = 0x4_) -> SC20     (flag interne 05AH = 0)
;
;   TOUCHES SC20 (reception UART par le 8031):
;     '1'=06h '2'=05h '3'=03h '*'=01h '-'=07h '+'=0Bh '4'=0Fh '5'=11h
;     '6'=12h '0'=00h FONCTION=0Ah '7'=14h '8'=18h '9'=16h '#'=02h
;     APPEL=04h BIS=09h MEM=0Eh ALARME=08h CLE=0Dh M/A=60h
;     TOUCHE RELACHEE (quelle que soit la touche) = 2Fh
;
;   TOUCHES MINI10 (reception UART par le 8031):
;     ANNUAIRE=20h '10'=21h '1'=22h ALARME=28h '+'=26h '#'=24h MEM=25h
;     '-'=27h APPEL=23h M/A=2Bh
;
;   LEDS MINI10 (emission UART par le 8031):
;     A: ON=60h OFF=61h / T: ON=62h OFF=63h / R: ON=64h OFF=65h / O: ON=66h OFF=67h
;     Reponse organe si commande inconnue recue: 15h
;
;   LEDS SC20 (emission UART par le 8031):
;     ANTENNE: ON(rouge)=61h ON(vert)=69h OFF=60h CLIGN(rouge+vert)=68h
;     HAUT-PARLEUR: ON=63h OFF=62h CLIGN=33h
;     CLE: ON=65h OFF=64h CLIGN=35h
;     ALARME: ON=67h OFF=66h CLIGN=37h
;     RETRO-ECLAIRAGE: autorise=6Bh inhibe=6Fh
;     Reponse organe si commande inconnue recue: 41h
;   ================================================================
;
L59B8:	JBC	RI,L59C4
	CLR	TI
	CLR	066H
	SETB	020H
	LJMP	L59EE
;
;
L59C4:	PUSH	001H
	PUSH	000H
	PUSH	PSW
	PUSH	ACC
	SETB	028H
	MOV	R1,SBUF
	MOV	R0,#033H
	CJNE	@R0,#002H,L59D7
	MOV	@R0,#000H
;
L59D7:	INC	@R0
	MOV	A,@R0
	ADD	A,R0
	MOV	R0,A
	MOV	A,R1
	MOV	@R0,A
	JNB	03CH,L59E6
	MOV	05DH,#078H
	MOV	05EH,#008H
;
L59E6:	POP	ACC
	POP	PSW
	POP	000H
	POP	001H
;
L59EE:	RETI	
;
;
;
; >>> VECTEUR TIMER0 - taches periodiques + genere ALSIG (P3.2, buzzer) par CPL P3.2.
;
;
; >>> GENERATEUR DE TONALITE ALSIG (P3.2) - ANALYSE DEMANDEE PAR L'UTILISATEUR
;     (bip touches, tonalites d'acheminement/fin de comm./retour d'appel 5-tons).
;     CONFIRME PAR L'UTILISATEUR (test reel): l'absence de verrouillage PLL
;     N'EST PAS signalee par une tonalite ALSIG sur cette version du logiciel -
;     recherche terminee de ce cote, cf. note complete a L5470/L54AA.
;     MECANISME CONFIRME: cette ISR Timer0 fait
;     clignoter P3.2 (cf. L5A02) au rythme du compteur 018H (rechargement=6),
;     MAIS SEULEMENT SI LE DRAPEAU 000H EST ACTIF (interrupteur maitre de la
;     tonalite - cf. note complete a L5A02). Teste aussi P3.4(ACKE)/003H/002H en
;     tete pour une detection complementaire lie a MN7 (non liee a ALSIG).
;
L59EF:	JB	003H,L59FA
	JB	P3.4,L59FA		; P3.4 = ACKE(T0,depuis MN7)
	JB	002H,L59FA
	SETB	003H
;
L59FA:	DJNZ	019H,L5A02
	SETB	001H
	MOV	019H,#005H
;
;
; >>> COEUR DU GENERATEUR ALSIG: si drapeau 000H=0, ne fait rien (RETI direct) -
;     000H EST DONC L'INTERRUPTEUR MAITRE DE TOUTE TONALITE ALSIG. Si 000H=1,
;     decremente 018H et bascule P3.2 (CPL) quand il atteint 0 (rechargement=6
;     -> frequence fixe). CONFIRME PAR L'UTILISATEUR: la frequence sonore est
;     TOUJOURS LA MEME quelle que soit la tonalite - seuls la DUREE du signal
;     et le TEMPS DE PAUSE entre deux signaux varient (via les constantes
;     060H/061H/04EH, cf. note complete a L5964 et aux 6 routines de tonalite
;     L4541/L4564/L4587/L459D/L45B3/L54AA), exactement comme identifie ici.
;
L5A02:	JNB	000H,L5A0D
	DJNZ	018H,L5A0D
	MOV	018H,#006H
	CPL	P3.2		; P3.2 = ALSIG(INT0/buzzer)
;
L5A0D:	RETI	
;
;
; >>> FIN DU CODE REEL DU PROGRAMME (dernier RETI, cf. L5A0D, fin de l'ISR
;     Timer0 en L59EF/L5A02). TOUT CE QUI SUIT (0x5A0E a 0x7FFF, fin de
;     l'EPROM 27C256 32Ko) est du REMPLISSAGE INUTILISE: verifie dans le
;     binaire d'origine, ce sont des octets 0x00 (qui se decodent comme
;     l'opcode NOP par coincidence de l'encodage 8051 - ce ne sont PAS des
;     instructions NOP volontaires). CONFIRME PAR ANALYSE EXHAUSTIVE: aucune
;     instruction du programme ne reference une adresse au-dela de 0x5A0D -
;     cette zone n'est ni executee ni destination d'aucun saut.
;     A CONSERVER TEL QUEL: necessaire a la fidelite binaire (le fichier
;     reassemble doit correspondre exactement a l'EPROM d'origine, deja
;     confirme par l'utilisateur), et vraisemblablement intentionnel de la
;     part du fabricant (remplir l'espace EPROM inutilise avec 0x00 plutot
;     que de le laisser efface/0xFF est une pratique de securite courante:
;     si l'execution derivait accidentellement ici, le CPU ne ferait rien de
;     dangereux au lieu d'executer des instructions imprevisibles).
;
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
	NOP	
;
;	Unresolved Address Reference list
;
;
L0009	EQU	00009H
L0464	EQU	00464H
L0466	EQU	00466H
L046C	EQU	0046CH
L046F	EQU	0046FH
L0470	EQU	00470H
L0472	EQU	00472H
L0473	EQU	00473H
L0475	EQU	00475H
L047C	EQU	0047CH
L047E	EQU	0047EH
L0483	EQU	00483H
L0487	EQU	00487H
L04A0	EQU	004A0H
L0550	EQU	00550H
L0554	EQU	00554H
L055A	EQU	0055AH
L055C	EQU	0055CH
L055F	EQU	0055FH
L0564	EQU	00564H
L0568	EQU	00568H
L06E1	EQU	006E1H
L080A	EQU	0080AH
L085E	EQU	0085EH
L08AB	EQU	008ABH
L0900	EQU	00900H
L0980	EQU	00980H
L2001	EQU	02001H
L2008	EQU	02008H
L2010	EQU	02010H
L2014	EQU	02014H
L2019	EQU	02019H
L201C	EQU	0201CH
L2020	EQU	02020H
L2100	EQU	02100H
L2146	EQU	02146H
L2158	EQU	02158H
L2161	EQU	02161H
L2166	EQU	02166H
L2167	EQU	02167H
L2169	EQU	02169H
L216B	EQU	0216BH
L2187	EQU	02187H
L218D	EQU	0218DH
L218F	EQU	0218FH
L2191	EQU	02191H
L2197	EQU	02197H
L2198	EQU	02198H
L219A	EQU	0219AH
L21BA	EQU	021BAH
L21C4	EQU	021C4H
L21CA	EQU	021CAH
L21DA	EQU	021DAH
L21DC	EQU	021DCH
L21E0	EQU	021E0H
L21F5	EQU	021F5H
L21F7	EQU	021F7H
L21F8	EQU	021F8H
L21FA	EQU	021FAH
L21FC	EQU	021FCH
L21FD	EQU	021FDH
L21FF	EQU	021FFH
L223C	EQU	0223CH
L223D	EQU	0223DH
L2241	EQU	02241H
L2246	EQU	02246H
L2249	EQU	02249H
L224C	EQU	0224CH
L224F	EQU	0224FH
L2251	EQU	02251H
L2253	EQU	02253H
L2254	EQU	02254H
L2256	EQU	02256H
L2258	EQU	02258H
;
;
	END
