mardi 21 octobre 2014

CHIPcon partie 1, présentation

CHIPcon est une console de jeux peut coûteuse et facile à assembler soi-même, pour les jeux écris en super CHIP. Dans cette première partie je fais un rappel historique du langage CHIP pour ensuite présenter le schéma électronique de la console. Le circuit est basé sur un atMega328P-PU avec une sortie NTSC monochrome.

Présentation historique

  • En 1970 l'ingénieur Joseph Weisbecker (1932-1990) conçoit un processeur 8 bits à architecture Von Neumann RISC.
  • Au début de 1976 la compagnie RCA met sur le marché un microprocesseur nommé CDP-1802. Ce microprocesseur est en technologie CMOS. Son architecture est basé sur le processseur défini par Joseph Weisbecker. Il contient 16 registres de 16 bits d'usage général et 4 registres de 4 bits P,N,I,X. Et un registre de 8 bits T. Les registres de 16 bits peuvent-être divisés en 2 registres de 8 bits, on a donc 32 registres de 8 bits. Il n'y a pas de compteur ordinal dédié, n'importe quel des 16 registres de 16 bits peut-être sélectionné pour cette fonction. C'est la valeur de P qui détermine lequel est le compteur ordinal. Un appel de sous-routine se fait en initialisant un registre avec l'adresse de la sous-routine pour ensuite modifier le registre P pour définir ce registre comme compteur ordinal. Lorsque la sous-routine a terminée son travail elle réinitialise P avec la valeur originale pour revenir au programme appelant. Ce microprocesseur a été utilisé dans plusieurs sondes spatiales dont la sonde Galileo. Ce microprocesseur a un surnom COSMAC (Co mplementary S ymmetry M onolithic A rray C omputer)
  • Dans l'édition de août 1976 de Popular electronics, Joseph Weisbecker présente le COSMAC ELF. Petit ordinateur disponible en kit à faible coût. Ces kits étaient vendu par Netronics et Quest Electronics.
    • Processeur CDP-1802
    • RAM statique de 256 octets
    • 11 commutateurs à bascule et 1 à pression pour la saisie et l'exécution du code.
    • 1 affichage 7 segments à 2 digits
    • 1 LED contrôlé par la sortie Q.
    • fréquence maximale du cristal 3.2Mhz
  • Juillet 1977, Weisbecker ajoute un générateur graphique CDP-1861 au ELF. Ce dernier génère un signal monochrome de 64x128pixels.
  • En 1977 RCA entre sur le marché des micro-ordinateurs avec le COSMAC VIP (photo). Avec 2Ko de RAM en kit de base, celle-ci pouvait être augmenté à 4Ko sur la carte principale.
    • CDP-1861/CDP-1864 pour sortie NTSC monochrome.
    • 2Ko RAM en base, 4Ko possible sur carte mère.
    • Clavier hexadécimal
    • Ajout possible de 2 connecteurs pour cartes d'options.
    • Fréquence d'oscillateur 1,76Mhz.
  • Dans l'édition de décembre 1978 de BYTE, Joseph Weisbecker présente CHIP-8, un système pour simplifier la programmation de jeux sur le COSMAC VIP. Il s'agit d'un interpréteur qui exécute du bytecode. Les instructions sont encodées sur 16 bits. L'affichage est de 64x32 pixels.
  • 1990 Erik Bryntse cré un descendant de CHIP-8 baptisé SCHIP (Super CHIP). L'interpréteur est conçu pour fonctionner sur une calculatrice HP-48 et l'affichage est de 128x64 pixels. SCHIP reconnait les programmes CHIP-8 sauf pour l'instruction 0xxx qui est un appel de sous-routine en code machine, non pertinent sur la HP-48.
  • Plusieurs émulateurs CHIP-8/SCHIP/MégaCHIP ont été écris pour fonctionner sur PC. Il existe aussi un assembleur qui permet de programmer en mnémoniques plutôt qu'en code hexadécimal. Voir le site de David Winter chip.com

CHIPcon

CHIPcon est donc une console de jeux rétro qui implémente un interpréteur SCHIP sur un microcontrôleur atMega328P-PU. Cette console permet de charger et jouer tout fichier binaire en bytecode SCHIP. J'en ai trouvé plusieurs sur le site de David Winter, www.chip8.com

Caractéristique de la console

  • microcontrôleur atMega328P-PU format DIP-28.
  • expansion RAM SPI de 64Ko Microchhip 23LC512.
  • Support carte SD (pilotes écris par Roland Riegel).
  • Fréquence oscillateur 16Mhz.
  • graphiques 128x64pixels, sortie vidéo NTSC monochrome.
  • Sortie son monofréquence sur prise RCA PHONO, ou sur piezo speaker.
  • Quelques jeux en mémoire programme du MCU lorsqu'il qu'il n'y a pas de carte SD dans le support.
  • Interface Humain-machine par clavier hexadécimal comme le COSMAC VIP.
  • Potientiomètre pour contrôler la vitesse d'exécution de l'interpréteur SCHIP.

Le montage permanent n'étant pas complété voici une photo du montage sur carte sans soudure.

Schématique

Liste matériel

  • Z1    PIEZO speaker (option 2)
  • C1    electrolytic 100µF/16V
  • C2,C3    18pF ceramic NPO
  • C6,C7,C8,C9,C10    100nF ceramic (CMS)
  • C5,C10    1µF ceramic (CMS)
  • C11    10µF/16V electrolytic
  • CON1    2.1 mm BARREL_JACK
  • D1    diode 1N4148
  • D2    LED 5mm/20ma
  • J1,J2    RCA phono jack
  • k1    KEYPAD 16 touches, Grayhill 96BB2-056-R
  • P1    réceptacle SD card
  • P2    connecteur 2x3 100mil mâle
  • R1    4k7
  • R2    150R
  • R3    620R
  • R4    470R
  • R5,R6,R7,R8    10K
  • R9    10R
  • R10    100R
  • RV1    10K potentiomètre linéaire
  • SW1    bouton momentanné N.O.
  • SW2    commutateur alimentaion S.P.S.T
  • U1    MCU ATMEGA328P-PU
  • U2    SRAM 23LC512
  • U3    LDO LT1117-3,3
  • X1    cristal 16Mhz (TXC 9B-16.000MEEJ-B)
  • 8015-1 Circbord    carte à points Vector pour montage final. 10cm x 10cm

Le modèle mémoire des programmes CHIP-8/SCHIP est de 4Ko et les 512 premiers octets étaient réservés pour le système sur le COSMAC VIP. Donc le binaire du jeux est chargée en mémoire à l'adresse 512 (0x200) et a une taille maximale de 3584 octets. Le 328P-PU n'a que 2Ko de RAM dont 1Ko est occupé par la mémoire vidéo. Ce n'est donc pas suffisant pour SCHIP. Microchip vend des mémoire RAM statique à interface SPI. Le 23LC512 contient 64Ko de RAM. Les jeux sont chargée dans cette SRAM à l'adresse 0x200 et exécutés à partir de cette mémoire externe. Le vidéo NTSC est généré par 2 périphériques. La minuterie TMR1 de 16 bits génère le signal de synchronisation par PWM et le USART configuré en mode SPI est utilisé pour sérialiser les pixels vidéo à partir du video_buffer situé dans la RAM du atMega328P-PU. Le périphérique SPI principal est utilisé pour communiquer avec la SRAM externe et la carte SD.

Au départ je me demandais si l'utilisation de la SRAM externe comme mémoire d'exécution pour l'interpréteur SCHIP serait suffisamment rapide, la vitesse du clock SPI maximale étant de Fosc/2 soit 8Mhz. Il s'est avéré à l'usage qu'en fait pour certains jeux l'interpréteur était trop rapide. Il ne faut pas oublier que le COSMAC VIP original fonctionnait à 1,76Mhz et que le CPU CDP-1802 utilise 16 cycles d'oscillateur par instruction, donc un maximum de 110000 instructions par seconde sur le COSMAC VIP. Comme CHIP-8 est un interpréteur exécutant plusieurs instructions 1802 par bytecode les programmes CHIP-8 étaient encore plus lent que ça. L'atMega328P lui fonctionne à 16Mhz et la majorité des instructions s'exécute en 1 seul clock. Donc même si l'interpréteur nécessite le transfert de 5 octets sur l'interface SPI pour lire une seule instruction on est encore à 8Mhz/8/5=200000 instructions lues par seconde. Bien sur le nombre d'instructions par secondes est beaucoup plus bas que ça car une bonne partie du temps CPU est utilisé par le générateur vidéo. Quoi qu'il en soit j'ai du ajouter un potentiomètre au circuit dont la lecture est faite par le périphérique ADC 10 bits sur le canal 1 (broche 24). La valeur lue sur le potentiomètre détermine le nombre d'instructions que l'interpréteur exécute par intervalle vertical sync (16,7 msec).

Pour la sortie audio il y a 2 options. La première option consiste à sortir le signal sur un connecteur RCA phono et utiliser le téléviseur comme amplificateur audio. La deuxième option est d'utiliser simplement un petit haut-parleur piézo monté sur la carte du circuit.

Le support pour carte SD est optionnel si on ne l'utilise pas l'utilisation de la mémoire flash de l'atMega328P-PU tombe à 50% environ ce qui libère plus d'espace pour y mettre des jeux.

Avec cette option installée au démarrage le firmware vérifie la présence d'une carte SD dans le support. s'il y a une carte il lit le répertoire racine et affiche à l'écran la liste des fichiers jeux disponibles. l'utilisateur sélectionne le jeux désiré et celui-ci est alors transféré de la carte vers la SRAM et exécuté.

S'il n'y pas de carte dans le support le firmware affiche la liste des jeux enregistrés dans la flash du MCU. Le jeux sélectionné est transféré de la flash du MCU à la SRAM pour exécution.

Dans le prochain article je vais commencer la présentation du firmware en commençant par l'interpréteur super CHIP. D'ici là j'aurai sans doute le temps de compléter le montage sur la carte à points et peut-être filmer un vidéo de démonstration.


liens

  • Article CHIP-8 sur wikipedia anglais et français.
  • Page de David Winter beaucoup d'information disponible sur cette page et des jeux à télécharger.
  • Page consacré au COSMAC ELF, histoire, archives logicielles et photos.
  • Page consacré à CHIP-8 sur revival studio.
  • Vous pouvez télécharger à partir de cette page l'émulateur pour PC Fish'n chip. je l'ai testé et il est fonctionnel sur windows 7.

Aucun commentaire:

Publier un commentaire