Descriptions des IO du VTECH Genius

You are here:   Home > Index > VTECH Genius PC > Descriptions des IO

Descriptions des IO

TODO!

 

Général

  • Gestion de l'alimentation du jouet. - port $600801 (BYTE)
    A l'allumage du jouet, sa valeur DOIT ETRE basculé à $1
    Pour éteindre électriquement le jouet, la valeur doit être basculé à $0
  • Status du port cartouche. - port $600803 (BYTE)
    (voir schéma électronique pour plus d'infos)
    Renvoie $3 si aucune cartouche est insérée.
    Renvoie $2 si la cartouche d'activité n°2 est insérée (strap uniquement)
    Renvoie $1 si la cartouche d'activité n°1 est insérée (strap uniquement)
    Renvoie $0 si une cartouche avec ROM/FLASH est insérée. (straps et ROM/FLASH)
  • UART - port TOUTPLEINS
    Permet de communiquer avec l'extérieur...ou un modem!
    Port $600007.b (lecture) - Donnés reçu de l'UART
    NOTE : Un drapeau est levé sur bit0 de $600001.b si une donnée valide à été reçu.
    Port $600101.b (écriture) - Donnés à envoyer sur l'UART et port parallèle.
    IMPORTANT : L'octet ne sera pas envoyé tant que $600007.b (écriture) n'a pas réinitialisé à $00!
    NOTE : Un drapeau est levé sur bit0 de $600101.b (lecture) quand la donnée à été bien envoyée.
      /!\ ATTENTION /!\  : La lecture des donnés est TOUJOURS faite à 9600 bauds !
    Tandis que l'écriture est faite à 1200 bauds.
    Pour passer l'UART en 9600 bauds entrée/sortie, il est nécessaire AVANT utilisation d'écrire la valeur
    $C1 au port $600003.b (+ ORI.b #$10, ($600103))

Audio

  • Buzzer interne (bipeur) - port $600401 (BYTE)
    Ce port commande l'état et la note du buzzer interne
    Description de l'octet : %11XX YY00
    XX = Hauteur de la note jouée (00,01,10,11)
    Y = On / Off (1/0)
  • Sythétiseur AUDIO - port TOUTPLEINS!
    Le genius PC embarque avec lui 2 synthétiseur audio, afin de générer des effets audio. (principalement utilisés dans le compositeur musical)
    NOTE: Il n'y a pas de son stéréo sur le système, tout est mono. Les synthétiseurs peuvent être contrôlés indépendament.

    Synthétiseur n°1
    Port $600901.b - Forme d'onde du canal (%0000XYYY - X=Canal ON/OFF - Y=Onde audio (Trompette, voiture...)
    Port $600903.b - Note ($01 -> $FF)
    Port $600905.b - Changement de l'octave (MOD 4)
    Port $600907.b - Volume audio du canal ($00 => $0F)

    Synthétiseur n°2
    Port $600911.b - Forme d'onde du canal (%0000XYYY - X=Canal ON/OFF - Y=Onde audio (Trompette, voiture...)
    Port $600913.b - Note ($01 -> $FF)
    Port $600915.b - Changement de l'octave (MOD 4)
    Port $600917.b - Volume audio du canal ($00 => $0F)
  • Lecteur AUDIO  ?ADPCM? - port $600600 (+5) et $600919.b
    Permet de lire des fichiers audio digitalisés.
     
                ! IMPORTANT !  
    Le format des fichiers audio n'est pas encore connue. Les fichiers n'ont pas d'entête et il semble que ça soit de l'ADPCM.
    Il se pourrait bien que c'est le même ADPCM que dans les téléphones sans fil VTECH

    EDIT 19/08 : En fait, il se pourrait bien que finalement c'est de l'ADPCM. Une partie de l'algo ressemble à Yahama ADPCM (voir multiplications dans la table)
      Mais comme ça me fait chier, j'ai préféré déveloper une carte son externe pour la plateforme (ayant une vraie fonction PCM pour ce coup-ci!)

    EDIT 05/08 : Ce n'est pas de l'ADPCM! Ça y ressemble mais : NON. Cela ressemble de loin a du Dialogic ADPCM mais vu de près il en est rien!
    Les échantillons sont codés en 4 bits signés "complément à 2". Le sens de lecture (dans un octet) nibble haut, nibble bas. (8 4 2 1-8 4 2 1)
    Le principe est ... bizzare ; les samples audios sont codés avec une différence (=DPCM) mais avec un système adaptif (=> ADPCM)
    Cependant, la carte n'interprete pas les signaux comme de l'ADPCM (Que ce soit IMA, Dialogic, Creative, Yamaha, G726/22/21, loi Mu, loi A,...)
    Le son est codée comme un vecteur dans l'espace, qui peut être soit positif, soit négatif.
    Il est possible de changer 2 attributs à ce vecteur ; la direction et l'énergie.

    L'énergie : Permet de déplacer plus ou moins rapidement le vecteur dans le sens souhaitée. (fonction exponentielle)
    La direction  : Permet de changer le sens dans lequel le vecteur ira à N+1. A noter que l'energie décroit de manière non linéaire à chaque instruction "direction".

    Tableau des instructions :
    0111 - $7 +7 Energie "+4" (*4.4)
    0110 - $6 +6 Energie "+3" (*3.4)
    0101 - $5 +5 Energie "+2" (*2.4)
    0100 - $4 +4 Energie "+1" (*1.4)
    0011 - $3 +3 Direction positive +3 (*0.9)
    0010 - $2 +2 Direction positive +2 (*0.9)
    0001 - $1 +1 Direction positive +1 (*0.9)

    0000 - $0 0  Ne fait rien. (*0.9?)          

    1111 - $F -1 Direction négative -1 (*0.9)
    1110 - $E -2 Direction négative -2 (*0.9)
    1101 - $D -3 Direction négative -3 (*0.9)
    1100 - $C -4 Energie "-1" (*1.4)
    1011 - $B -5 Energie "-2" (*2.4)
    1010 - $A -6 Energie "-3" (*3.4)
    1001 - $9 -7 Energie "-4" (*4.4)

    L'opcode $8 (1000) n'est jamais utilisée dans les samples en temps normal ; il permet de bloquer le signal dans le temps sans avoir besoin d'utiliser direction/énergie. Il peut être utilisé pour générer un signal carré par exemple.

    L'opcode $0 "ne fait rien", sert uniquement à baisser l'énergie du signal sans lui infliger de direction. Cependant, le signal sera tout de même projeté à la sortie du DAC.

    { Les fichiers audio... }
    Port $600600.L - Pointeur vers le fichier audio
    Port $600604.w - Longueur du fichier audio selon la formule LONGUEUR={Taille binaire}/16
    Port $601919.b - Commande le lecteur audio ;
      %P000VVS0
      P = Play - 1 / Pause - 0
      VV = Volume ? (défaut 00)
      S = Vitesse de lecture (Défaut 8000Hz - 0 / Rapide 16000Hz - 1)
      En lecture, ce port renvoit 1 tant que la lecture est en cours. 0 quand la lecture est terminée.

    Format du fichier (préliminaire)

    Le fichier se présente par une suite de valeur codée en 4 bit signée. La valeur "8" ($?8 ou $8?) n'existe pas.
    Fichiers bruts (venant de la ROM) => [ ICI ]
    La lecture (sur la plateforme) doit se faire à partir d'une adresse mémoire paire. (sinon le son est de mauvaise qualité)

    Les fichiers sont dans le format natif du processeur (et du bus) :

    {n3 n2 n1 n0}  {n7 n6 n5 n4} {n.....}

    Les données sont archivés par mots (16 bits), eux mêmes découpés en nibbles.
    Un FIFO de 8 mots se trouve dans la puce Vtech pour la lecture des sons, ce qui explique la structure des fichiers.

 

Vidéo

  • Initialisation de l'affichage (écran RGB/Composite - port $601001 (BYTE)
    Initialise l'affichage vidéo du jouet.
    Valeur par défaut : $00 (Ecran vide - présence de synchro)
    Valeur durant le boot : $02
    Valeur finale permettant un affichage correct sur l'écran : $82
  • Calibration de l'image sur la télévision - port $601005 + $601007 (BYTE BOTH)
    Décalage de l'image sur la télévision pour un affichage correct. Agit principalement sur le retard par rapport à la syncho.
    Décalage horizontal (X) : $601005
    Décalage vertical (Y) : $601007
  • Affichage de texte/sprite - port TOUTPLEINS!
    Affiche du texte ou des sprites en 2 couleurs directement sur le framebuffer. Il copie le sprite en VRAM en le retouchant selon les besoins.
    Port $601018.w - Position X où le sprite va être dessiné.
    Port $60101A.w - Position Y où le sprite va être dessiné.
    Port $60101F.b - Couleur de la police/du sprite. (Foreground color)
    Port $60101D.b - Couleur d'arrière-plan de la police/du sprite (Background color)
    NOTE: La couleur $0 est considérée par l'ASIC comme "transparent". Cependant, affiché sur l'écran elle est bleue foncé/nuit.
    Port $60060B.b - Affiche le sprite de la valeur écrite à l'écran. (256 sprites max/banque)
    Port $600606.L - Pointeur vers la banque de sprites. Peut être localisée n'importe où dans le système.
    IMPORTANT : Un drapeau est levé quand l'opération est terminée. Bit1 ($2) du port $601011 est mis à 1 quand l'opération est terminée, Bit1 à 0 sinon.
  • Palette des couleurs - port $601020 à $60102F (BYTE)
    Le Genius PC peut afficher que 16 couleurs à l'écran en même temps. Cependant il est possible de modifier la palette des couleurs.
    Respectivement (selon la palette MAME) :

    $601020 {$0}

    (Couleur $0)

                             

                             

    $601024 {$11}

    (Couleur $4)

                             

                             

    $601028 {$1B}

    (Couleur $8)

                             

                             

    $60102C {$B1}

    (Couleur $C)

                             

                             

    $601021 {$1}

    (Couleur $1)

                             

                             

    $601025 {$42}

    (Couleur $5)

                             

                             

    $601029 {$1D}

    (Couleur $9)

                             

                             

    $60102D {$B2}

    (Couleur $D)

                             

                             

    $601022 {$5}

    (Couleur $2)

                             

                             

    $601026 {$22}

    (Couleur $6)

                             

                             

    $60102A {$31}

    (Couleur $A)

                             

                             

    $60102E {$AA}

    (Couleur $E)

                             

                             

    $601023 {$A}

    (Couleur $3)

                             

                             

    $601027 {$21}

    (Couleur $7)

                             

                             

    $60102B {$2D}

    (Couleur $B)

                             

                             

    $60102F {$74}

    (Couleur $F)

                             

                             

  •  Palette du curseur souris - port $601064 à $601067 (BYTE)
    Il est aussi possible de changer la palette du curseur de la souris (indépendament de la palette "système". Par contre, il n'y a que 4 attributs de couleurs possibles.
    Port $601064 - Couleur 0 (La couleur est considéré comme transparente si elle est égale à $00)
    Port $601065 - Couleur 1
    Port $601066 - Couleur 2
    Port $601067 - Couleur 3
  • Curseur de la souris - port $601100 à $6011FF (BYTE)
    Zone mémoire du sprite du curseur souris.
    24 pixels sur 16 pixels. 4 bits par pixel (longueur $C0)

 

Clavier / Souris

  •  TODO !
Powered by CMSimple| Template: ge-webdesign.de| Login