samedi 25 octobre 2014

CHIPcon partie 4, tvout

Dans cet article je décris le fonctionnement du module tvout du projet CHIPcon.

tvout

Le module tvout est constitué des fichiers tvout.h et tvout.c. Ce module est responsable de la génération du signal NTSC et comprends les fonctions d'interface suivantes:

  • void tvout_init()
    Initialisation du module.
  • void plot(int8_t x, int8_t y, optype op)
    Desssine un point à la position x,y. optype peut prendre une des valeurs suivantes: WHITE, BLACK, INVERT.
  • int8_t put_sprite(uint8_t x, uint8_t y, uint8_t n, const uint8_t *sprite, int8_t memory)
    Desssine un sprite. x,y sont les coordonnées du coin supérieur gauche. Le sprite a 8 pixels de large par n pixels en hauteur. memory indique si le sprite est en mémoire flash (FLASH_MEM) ou en RAM (RAM_MEM).
  • int8_t put_big_sprite(uint8_t x, uint8_t y,const uint8_t *sprite)
    Dessine un sprite de 16x16 pixels. Les coordonnées sont le coin supérieur gauche.
  • void cls()
    Efface l'écran.
  • void scroll_down(uint8_t lines)
    Défile l'écran vers le bas d'un nombre de lignes entre 0 et 31.
  • void scroll_up(uint8_t lines)
    Défine l'écran vers le bas d'un nombre de lignes entre 0 et 31.
  • void scroll_right(uint8_t pixels)
    Défile l'écran vers la droite d'un nombre de pixels entre 0 et 8.
  • void chip_scroll_right()
    Défile l'écran vers la droite de 4 pixels. Optimisé pour l'engin schip()
  • void scroll_left(uint8_t pixels)
    Défile l'écran vers la gauche d'un nombre de pixels entre 0 et 8.
  • void chip_scroll_left()
    Défile l'écran vers la gauche de 4 pixels. Optimisé pour l'engin shcip().
  • void screen_save()
    Sauvegarde l'écran dans la SRAM.
  • void screen_restore()
    Restaurate l'écran à partir de la SRAM.

Génération du signal NTSC

La façon la plus efface de générer un signal NTSC sur un MCU en utilisant le moins de cycles CPU possible est d'utiliser une minuterie avec un output compare en mode PWM pour le signal de synchroniation. Pour sérialiser les pixels contenu dans le video_buffer un périphérique SPI fait l'affaire. l'atMega328P permet de configuré le module USART en mode SPI c'est donc de cette façon que j'ai procédé car le module SPI lui-même est utiliser pour interfacer la carte SD et la SRAM.

Il n'y a qu'une seule interruption qui se produit lorsque le compteur du TIMER1 atteint la valeur du registre OCR1B. Ce qui se produit à la fin de l'impulsion de synchronisation. Il y a donc une interruption à chaque ligne horizontale soit à toute les 63,5µsec.

Cette interruption fait fonction de céduleur de tâche. La tâche à exécuter est déterminée par le numéro ligne.


liens

CHIPcon partie 1, présentation du projet.
chipcon partie 2, machine virtuelle
CHIPcon partie 3, module SRAM
dépot githup du projet. mise à jour le 2014-10-24, utilitaire chip-dasm (schip dé-assembleur).
page www.chip.com rassemblant beauceaup d'information sur CHIP-8/SCHIP/MegaCHIP
article de wikipedia sur CHIP-8

Aucun commentaire:

Enregistrer un commentaire