[SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Gestion des affectations directes de constantes, par FiFo, sur 32 bits :tabat_asmpio

Directives Jump Label Instruct.ASM Commentaire RegX RegY ISR OSR FiFo
.prg syncs pull block 0 Dépile du FIFO la première constante dans OSR Cst1 <=Rx
mov isr,osr 1 Et copie dans le registre ISR Cst1 <=Cst1
pull block 2 Dépile du FIFO la dernière constante dans OSR
1110 0111 1110 0111 1110 0111 1110 0111
Cst1 Cst2 <=Rx
.wrap_target wait_vsync: wait 1 gpio 9 3 Détecte un front descendant sur /VSYNC
... xx Là, le code avec des boucles utilisant OSR ou ISR affecté à X ou Y...
.wrap

Si un (ou des) champ de bits est important, un format binaire peut expliciter ... :)

Front montant en ascii : _↑¯ ou juste
Front descendant en ascii : ¯↓_ ou juste
Front montant ou descendant en ascii :
Dernière modification par Bricox le 12 nov. 2024 20:13, modifié 15 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
hlide
Messages : 4101
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

Ces 4 registres font 32-bit. L'instruction SET ne permet que d'affecter des constantes de 0 à 31 à ces registres, mais avec un PULL BLOCK avec/sans MOV, on peut avoir des constantes de 32-bit.
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Merci Hlide, pour ce rectificatif
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

hlide a écrit : 11 nov. 2024 12:18
Bricox a écrit : 11 nov. 2024 09:51 0x0D, 0x0A, // fin de l’entête XML.
Non du tout, cette séquence est un saut de ligne à la DOS/Windows : [CR][LF], qui termine chaque ligne en XML donc à elle seule pas suffisante.

La fin de l'entête c'est "</settings>" suivi de 0x0D, 0x0A.
Cela veut dire le début de l'entête (de taille fixe : 54 octets) contient la fin de l’entête XML, sous forme d'octets non visibles.

Je vais essayer d'investiguer sur cette séquence de fermeture ... :)

Structure des Datas :

0x0D, 0x0A,0x6B, 0x76, 0x64, 0x61, 0x74, // fin de l’entête XML : [CR][LF]'k','v','d','a','t'.

// Début de l’entête de taille fixe : 49 octets
Code Hexa Commentaire
0x00,
0x00, 0x00,
0x80, 0xF0, 0xFA, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00,
0x65, 0xCD, 0x1D,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x23, 0x23, 0x44,
0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0xCE,
0x00, 0x00, 0x00, 0x00
[fin de chaine kvdat]?
fin réservation chaine ?
Nombre de lignes ?
5 zéros
?
12 zéros
[espace]
7 zéros
?
5 zéros
?
4 zéros
// Fin de l’entête de taille fixe
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
hlide
Messages : 4101
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

Ça veut surtout dire que ce fichier .kvdat est la concaténation d'un fichier texte contenant du XML dont les lignes sont séparées par un saut de ligne de type Windows <LF><CR> et d'un fichier binaire avec l'entête "kvdat". Après </settings> il y a un saut de ligne. Si tu veux découper le fichier en deux pour parser le XML d'un côté et le binaire de l'autre, tu peux le faire comme tu pensais le faire mais ce n'est pas la logique attendue.

Il y a le source du SDK pour faire des plugins d'analyseur, peut-être que l'entête contient des informations intéressantes mais je n'en ferais pas le pari.
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Merci de m'indiquer le lien du source SDK ...
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
hlide
Messages : 4101
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

Il est dans le lien où j'ai indiqué le téléchargement de KingVIS que j'ai déjà donné dans ce fil.

EDIT: ceci dit, de ce que j'en ai lu, ça ne donne absolument pas des informations internes...
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Effectivement, je n'ai rien vu des structures de leur version officielle.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Utilisation d'une IA pour optimiser le développement du code des SMs du RP2040, avec Perplexity

Question dans le mode "non-Pro", gratuite, illimitée (nous pouvons poser 3 questions "Pro", gratuites, par jour) :
Comment améliorer les performances des SMs du RP2040 ?

Sa réponse :

Pour améliorer les performances des State Machines (SM) du RP2040 du Raspberry Pi Pico, voici quelques astuces :

Optimisation du code PIO

Utilisez au maximum les 32 instructions disponibles par SM pour réduire les boucles et les sauts.
Tirez parti des instructions spécialisées comme autopull et autopush pour optimiser les transferts de données.
Utilisez les instructions conditionnelles pour réduire le nombre de sauts.

Configuration matérielle

Augmentez la fréquence d'horloge du PIO si possible, en veillant à ne pas dépasser les limites du système.
Utilisez le mode DMA pour les transferts de données volumineux entre le PIO et la mémoire principale.
Configurez les pins GPIO en mode "fast" pour réduire la latence.

Parallélisation

Répartissez le travail sur plusieurs SM en parallèle lorsque c'est possible.
Utilisez l'interleaving pour exécuter des instructions de différentes SM en alternance.

Optimisation logicielle

Minimisez les interruptions et les appels système pendant l'exécution des SM critiques.
Utilisez la mémoire scratch du PIO pour stocker les données temporaires fréquemment utilisées.
Optimisez l'alignement des données en mémoire pour améliorer les performances des transferts DMA.

Profilage et débogage

Utilisez les outils de profilage intégrés du SDK pour identifier les goulots d'étranglement.
Exploitez les fonctionnalités de débogage du PIO pour analyser le comportement des SM en temps réel.

En appliquant ces techniques, vous pouvez significativement améliorer les performances des State Machines du RP2040, permettant ainsi d'optimiser vos projets basés sur le Raspberry Pi Pico




How can I assign a 32bit value to a scratch register ? Mémoire scratch du PIO

Qu'en pense notre communauté ? :)

J'ai posé la même question à l'IA de Microsoft Copilot, je n'ai pratiquement rien appris ... :(

L'idée d'un fil de discussion d'IA, dédié à la gestion du code, commence à germer ...
(Notre sujet "Chat GPT ou l'arrivée annoncée de Skynet" est plus généraliste.)
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

J'ai trouvé un module de coloration syntaxique pour le PIO ASM du RP2040, sous VScode (FrameWork SDK) :
Page d'installation

colSyntPioAsmVScode.png
colSyntPioAsmVScode.png (163.98 Kio) Consulté 392 fois

Comme, ce projet utilise le FrameWork Arduino, je vais chercher l'équivalent pour l'IDE Arduino.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Légende pour la colorisation syntaxique du PIO ASM du RP2040, avec son code couleur :

colSyntPioAsmVScodeLeg.png
colSyntPioAsmVScodeLeg.png (19.54 Kio) Consulté 329 fois

Comme tous langages, il faudrait également trouver plusieurs autres outils d'aide au développement :
  1. L'auto-complétion de code, comme cet exemple : PSO ASM
  2. Un contrôleur statique de code (s'il n'est pas déjà intégré dans un IDE)
  3. Un émulateur sur PC, comme celui-ci : Emulateur-Debugueur et sa vidéo de présentation
Pour être indépendant du framework (Arduino, SDK), la colorisation et l'auto-complétion pourraient être implémentés dans Notepad++.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Pour être indépendant du framework (Arduino, SDK), la colorisation et l'auto-complétion pourraient être implémentés dans Notepad++.
J'ai réalisé le plus facile, la coloration syntaxique :

colSyntPioAsmNpp.png
colSyntPioAsmNpp.png (296.37 Kio) Consulté 304 fois

C'était une belle découverte, j'ai contourné une "impossibilité" publiée dans tous les forums, avec une astuce ... :)

Les étiquettes ne sont pas possibles dans un UDL (UserDefinedLanguage), car les suffixes ne sont pas gérés ( ' : ' , pour les étiquettes ).
J'ai donc imaginé un préfixe, tout simplement ... "l_" et le tour est joué ... :D
Dernière modification par Bricox le 20 nov. 2024 21:24, modifié 1 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Multi-programmes, avec tabulations :

colSyntPioAsmNpp2.png
colSyntPioAsmNpp2.png (432.01 Kio) Consulté 287 fois

Remarque : les durées [..] et les "side bits" sont commutatifs ... :o
Dernière modification par Bricox le 20 nov. 2024 21:46, modifié 1 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
Bricox
Messages : 1101
Inscription : 25 janv. 2024 10:28
Localisation : Grand-Est

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par Bricox »

Voici mon fichier UDL commenté et provisoire, c'est un fichier "PioAsm.userDefinedLanguage.xml"
à copier dans "C:\Users\votreNomUtilisateur\AppData\Roaming\Notepad++\userDefineLangs\

Code : Tout sélectionner

<NotepadPlus>
    <UserLang name="PioAsm Bricox" ext="pio PIO" udlVersion="2.1">
        <Settings>
            <Global caseIgnored="yes" allowFoldOfComments="no" foldCompact="no" forcePureLC="0" decimalSeparator="0" />
            <Prefix Keywords1="no" Keywords2="no" Keywords3="no" Keywords4="no" Keywords5="yes" Keywords6="no" Keywords7="no" Keywords8="no" />
   <! --<Suffix Keywords1="no" Keywords2="no" Keywords3="no" Keywords4="no" Keywords5="yes" Keywords6="no" Keywords7="no" Keywords8="no" /> => Pour Label, ça marche pas !!!! -->
        </Settings>
        <KeywordLists>
            <Keywords name="Comments">00; 01 02 03/* 04*/</Keywords>
            <Keywords name="Numbers, prefix1"></Keywords>
            <Keywords name="Numbers, prefix2"></Keywords>
            <Keywords name="Numbers, extras1"></Keywords>
            <Keywords name="Numbers, extras2"></Keywords>
            <Keywords name="Numbers, suffix1"></Keywords>   <! -- ':', pour Label => ça marche pas !!!! -->
            <Keywords name="Numbers, suffix2"></Keywords>
            <Keywords name="Numbers, range"></Keywords>
            <Keywords name="Operators1">+ - * ::</Keywords>
            <Keywords name="Operators2"></Keywords>
            <Keywords name="Folders in code1, open"></Keywords>
            <Keywords name="Folders in code1, middle"></Keywords>
            <Keywords name="Folders in code1, close"></Keywords>
            <Keywords name="Folders in code2, open"></Keywords>
            <Keywords name="Folders in code2, middle"></Keywords>
            <Keywords name="Folders in code2, close"></Keywords>
            <Keywords name="Folders in comment, open"></Keywords>
            <Keywords name="Folders in comment, middle"></Keywords>
            <Keywords name="Folders in comment, close"></Keywords>
            <Keywords name="Keywords1">.define .program .origine .side_set .wrap_target .wrap .lang_opt .word</Keywords>   <! -- Directive   -->
            <Keywords name="Keywords2">nop jmp wait in out push pull mov irq set</Keywords>                                <! -- Instruction -->
            <Keywords name="Keywords3">osr, isr status, null, pins, irq gpio pindirs, x y x, y, x-- y-- !x !y X!=Y !osre ifempty iffull block noblock pc exec</Keywords>   <! -- Argument    -->
            <Keywords name="Keywords4"></Keywords>                                                                         <! -- isr? GoTo, Reg -->
            <Keywords name="Keywords5">public l_</Keywords>                                                                <! -- Label       -->
            <Keywords name="Keywords6"></Keywords>
            <Keywords name="Keywords7">side 0x0 0x1 0x2 0x3</Keywords>                                                     <! -- Bit(s)&Delay-->
            <Keywords name="Keywords8"></Keywords>
            <Keywords name="Delimiters">00[ 01 02] 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23</Keywords>  <! -- Entity HTML table : http://www.madore.org/~david/computers/unicode/htmlent.html -->
        </KeywordLists>
        <Styles>
            <WordsStyle name="DEFAULT" fgColor="FFFFFF" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="COMMENTS" fgColor="7E666E" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="LINE COMMENTS" fgColor="7E666E" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="NUMBERS" fgColor="B4CFA7" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="KEYWORDS1" fgColor="65857D" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="KEYWORDS2" fgColor="A27C45" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="KEYWORDS3" fgColor="539BD8" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="KEYWORDS4" fgColor="9ADCFF" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="KEYWORDS5" fgColor="C684C1" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="KEYWORDS6" fgColor="0000FF" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="KEYWORDS7" fgColor="944342" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="KEYWORDS8" fgColor="000000" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="OPERATORS" fgColor="00FF00" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="FOLDER IN CODE1" fgColor="0080FF" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="FOLDER IN CODE2" fgColor="0080FF" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="FOLDER IN COMMENT" fgColor="000000" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="DELIMITERS1" fgColor="944342" bgColor="1E1E1E" fontStyle="1" nesting="0" />
            <WordsStyle name="DELIMITERS2" fgColor="FF0000" bgColor="1E1E1E" fontStyle="1" nesting="1" />
            <WordsStyle name="DELIMITERS3" fgColor="FF80FF" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="DELIMITERS4" fgColor="000000" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="DELIMITERS5" fgColor="000000" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="DELIMITERS6" fgColor="000000" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="DELIMITERS8" fgColor="000000" bgColor="1E1E1E" fontStyle="0" nesting="0" />
            <WordsStyle name="DELIMITERS7" fgColor="000000" bgColor="1E1E1E" fontStyle="0" nesting="0" />
        </Styles>
    </UserLang>
</NotepadPlus>

Dernière modification par Bricox le 23 nov. 2024 23:00, modifié 1 fois.
Le monde a plus besoin de créateurs, d'entrepreneurs, de préventeurs (Napo), de vulgarisateurs que de prédicateurs et de procureurs.
Avatar de l’utilisateur
hlide
Messages : 4101
Inscription : 29 nov. 2017 10:23
Localisation : Yvelines

Re: [SHARP MZ-700] Sortie DVI via le RP2040-PiZero

Message par hlide »

Voici un programme en Python (codé en quelques secondes par une IA sur mes instructions) pour calculer les timings vidéo de la version PAL du MZ-700 à partir des données dans le manuel de service :

Code : Tout sélectionner

def calculate_timings(
    fMAIN, fHcycle, tHDA, tHcycle, tHSYNC, tDelay_HDA_to_HSYNC, 
    tVcycle, tVDA, tVSYNC, tDelay_VDA_to_VSYNC
):
    # Calculs de base pour Pixel Clock
    fPCLK = fMAIN / 2  # Fréquence Pixel Clock
    tPCLK = 1 / fPCLK  # Période Pixel Clock

    # Calcul des éléments horizontaux en pixels
    HDA = round(tHDA / tPCLK)  # Horizontal Display Area en pixels
    Hcycle = round(tHcycle / tPCLK)  # Cycle horizontal total en pixels
    HSYNC = round(tHSYNC / tPCLK)  # Impulsion HSYNC en pixels
    Delay_HDA_to_HSYNC = round(tDelay_HDA_to_HSYNC / tPCLK)  # Délai en pixels

    # Calcul de HBP et HFP en pixels
    HFP = Delay_HDA_to_HSYNC  # Front Porch
    HBP = Hcycle - (HDA + HSYNC + HFP)  # Back Porch

    # Calcul des fréquences
    fH = fHcycle  # Fréquence horizontale donnée
    Vcycle = round(tVcycle * fH)  # Nombre total de lignes par trame
    VDA = round(tVDA * fH)  # Nombre de lignes visibles
    VSYNC = round(tVSYNC * fH)  # Impulsion VSYNC en lignes
    VFP = round(tDelay_VDA_to_VSYNC * fH)  # Front Porch vertical
    VBP = Vcycle - (VDA + VSYNC + VFP)  # Back Porch vertical

    # Fréquence verticale
    fV = fH / Vcycle

    # Résultats
    timings = {
        "Pixel Clock (fPCLK)": fPCLK,
        "Pixel Clock Period (tPCLK)": tPCLK,
        "Horizontal Frequency (fH)": fH,
        "Vertical Frequency (fV)": fV,
        "Horizontal Display Area (HDA)": HDA,
        "Horizontal Cycle (Hcycle)": Hcycle,
        "Horizontal Sync Pulse (HSYNC)": HSYNC,
        "Horizontal Back Porch (HBP)": HBP,
        "Horizontal Front Porch (HFP)": HFP,
        "Vertical Display Area (VDA)": VDA,
        "Vertical Cycle (Vcycle)": Vcycle,
        "Vertical Sync Pulse (VSYNC)": VSYNC,
        "Vertical Back Porch (VBP)": VBP,
        "Vertical Front Porch (VFP)": VFP,
    }

    return timings

if __name__ == "__main__":
    # Paramètres donnés
    fMAIN = 17.734475e6  # Fréquence principale en Hz
    fHcycle = 15.6113e3  # Fréquence horizontale en Hz
    tHDA = 36.0881e-6  # Horizontal Display Area (en secondes)
    tHcycle = 64.05603e-6  # Cycle horizontal (en secondes)
    tHSYNC = 4.567375e-6  # Durée de l'impulsion HSYNC (en secondes)
    tDelay_HDA_to_HSYNC = 9.02201e-6  # Délai entre HDA et HSYNC (en secondes)

    tVcycle = 19.985e-3  # Durée totale d'un cycle vertical (en secondes)
    tVDA = 12.8112e-3  # Durée de la zone visible verticale (en secondes)
    tVSYNC = 0.19216e-3  # Durée de l'impulsion VSYNC (en secondes)
    tDelay_VDA_to_VSYNC = 2.8825e-3  # Délai entre VDA et VSYNC (en secondes)

    timings = calculate_timings(
        fMAIN, fHcycle, tHDA, tHcycle, tHSYNC, tDelay_HDA_to_HSYNC,
        tVcycle, tVDA, tVSYNC, tDelay_VDA_to_VSYNC
    )

    for key, value in timings.items():
        print(f"{key}: {value}")

Et le résultat que j'espère juste :
Pixel ClockfPCLK8867237.5Hz
Pixel Clock PeriodtPCLK1.1277469448630422e-07s
Horizontal FrequencyfH15611.3Hz
Horizontal Display AreaHDA320pixels
Horizontal CycleHcycle568pixels
Horizontal Sync PulseHSYNC40pixels
Horizontal Back PorchHBP128pixels
Horizontal Front PorchHFP80pixels
Vertical FrequencyfV50.03621794871795Hz
Vertical Display AreaVDA200lines
Vertical CycleVcycle312lines
Vertical Sync PulseVSYNC3lines
Vertical Back PorchVBP64lines
Vertical Front PorchVFP45lines
Répondre