
                      Ŀ
                       Emulateur CHIP8 Version 2.1.1 
                        par David WINTER (HPMANIAC)  
                      

        Table des matires :

            1 - Caractristiques de CHIP8

                1.1 - Histoire

                    1.1.1 - Origines
                    1.1.2 - Aujourd'hui
                    1.1.3 - Pourquoi un mulateur CHIP8 ?

                1.2 - Programmes et mmoire
                1.3 - Registres
                1.4 - Graphisme
                1.5 - Instructions
                1.6 - Clavier
                1.7 - Jeux et programmes CHIP8/SCHIP

            2 - L'mulateur CHIP8

                2.1 - Configuration
                2.2 - Utilisation
                2.3 - L'utilitaire FIX_CHIP
                2.4 - Le dsassembleur UNCHIP
                2.5 - Le dbogueur CHIP8 DEBUG
                2.6 - Les utilitaires BINHEX et HEXBIN
                2.7 - L'assembleur CHIPPER

            3 - Contacts

            4 - POSTWARE



    1 - Caractristiques de CHIP8

        1.1 - Histoire

            1.1.1 - Origines

        CHIP8 est un interprteur qui fut utilis  la fin des annes 70 sur
    le TELMAC 1800 et des ordinateurs " monter doit-mme" (ETI 660, 
    RCA COSMAC VIP, DREAM 6800...) afin de pouvoir programmer facilement des
    jeux video. Le TELMAC 1800 tait bas autour du processeur CDP-1802 de
    RCA, et fut vendu avec une cassette contenant plus de 12 jeux, date de
    1977. Cet interprteur possde moins de 40 instructions permettant de
    grer des oprations arithmtiques et logiques, du graphisme et du son.
    L'espace mmoire dont le TELMAC 1800 disposait  l'poque tait de 4Ko.
    L'interprteur devait donc occuper le moins de place possible: sa taille
    ne faisait que 512 octets.
    Cela permettait namoins de programmer des jeux du genre "Ping-pong",
    "Casse-briques", "Space-invaders", "Tank", qu'on rencontrait souvent 
    cette poque du dbut des jeux vido. De simples jeux pouvaient tre
    directement programms en hexadcimal en moins de 256 octets.



            1.1.2 - Aujourd'hui

    CHIP8 ne fut pas seulement utilis  la fin des annes 70. Il ft 
    nouveau utilis au dbut des annes 90 sur HP48, car il n'existait
    pratiquement aucun moyen de dlvelopper des jeux rapides dessus.
    La plupart des jeux originaux de CHIP8 fonctionnent sur la version HP48
    de CHIP8, et de nouveaux furent programms. Une liste est fournie dans
    la section 1.7.
    Puis, une variante de CHIP8 fut programme: SUPER-CHIP. Cet interprteur
    possde toutes les fonctionnalits de CHIP8, avec diverses amliorations,
    en particulier la rsolution de 128*64 pixels. Il existe sur HP48G une
    librairie de plus de 12 jeux CHIP8 et SCHIP programme par l'auteur de
    cet mulateur. C'est pourquoi un utilitaire (FIX_CHIP) est fourni afin
    de convertir au format PC vos programes CHIP8 imports d'une HP48.
    Sa description est donne dans la section 2.2.



            1.1.3 - Pourquoi un mulateur CHIP8 ?

        Beaucoup d'utilisateurs se tournent vers les mulateurs, qui leur 
    permettent de rejouer aux vieux jeux video d'enfance ou de jeunesse, et
    de faire remonter des vieux souvenirs. Le plus surprennant est que de
    nombreux jeux d'hier que l'on peut faire marcher avec des mulateurs ne
    sont pas reprogramms aujourd'hui.
    J'ai alors dcid de programmer un mulateur CHIP8. C'est d'ailleurs
    l'mulateur du plus vieil ordinateur domestique mul jusqu' ce jour.



        1.2 - Programmes et mmoire

        Tous les programmes CHIP8 du Telmac commencent  l'adresse 200h.
    En effet, l'interprteur une fois charg rsidait dans la zone 000h-1FFh.
    La mmoire est entirement accessible et adressable par octets. Comme
    toutes les instructions font 16-bits, leurs adresses sont paires.
    Les programmes SCHIP fonctionnent de la mme faon. Le seuls diffrence
    avec les programmes CHIP8 est un ajout de quelques instructions.



        1.3 - Registres

    - les registres de donnes: ils sont au nombre de 16, cods sur 8 bits,
      et appels V0...VF. VF est utilis comme retenue (carry) et dtecteur
      de collision lorsqu'un ou plusieurs pixels sont effacs lors de
      l'affichage de dessins (sprites).

    - le registre d'adresse: il n'y en a qu'un, appel I, cod sur 16 bits.
      Comme la mmoire disponible est de 4Ko, seuls ses 12 bits de poids
      faible sont utiliss.

    - les timers: il y en a deux. L'un est un compteur de dlai (delay-timer)
      et l'autre le compteur de son (sound-timer). Ils dcomptent environ 60
      fois par seconde s'ils sont non nuls.
      Le haut parleur mettra un beep tant que le compteur de son est non nul.
      Le compteur de dlai est surtout utilis pour des boucles de dlai.
      Il semblerait que ces deux compteurs dcrmentent toutes les 16ms.

    - la pile: elle comporte 16 niveaux, permettant d'imbriquer 16 appels 
      des sous-programmes.



        1.4 - graphisme

        La rsolution de l'cran CHIP8 tait de 64*32 pixels. Des machines
    pouvaient tre modifies afin d'utiliser une rsolution de 64*48, voire
    64*64. Comme aucun programme les utilisant n'a t rencontr, seule la
    rsolution d'origine de 64*32 sera utilise.

    Les graphismes sont affichs sous la forme de sprites de 8 pixels de
    large, et de 1  15 pixels de haut (vu qu'ils sont forms de segments de
    8 bits). L'origine de l'cran est le coin suprieur gauche, et toutes les
    coordonnes commencent  0. X varie de 00h  3Fh, et Y de 00h  1Fh.
    Lors de l'affichage de dessins, elles sont calcules modulo 64 pour X et
    32 pour Y.

    Tout l'affichage se fait en mode XOR. Lorsque un ou plusieurs pixels sont
    effacs lors de l'affichage d'un dessin, le registre VF est mis  01,
    sinon  00.

    CHIP8 possde une police 4*5 de caractres hexadcimaux pour afficher
    facilement des caractres. Ces caractres sont 0-9 et A-F.

    Le mode SCHIP peut offrir une rsolution de 128*64. Les coordonnes des
    pixels varient alors de 00h  7Fh pour X, de 00h  3Fh pour Y et sont
    calcules modulo 128 pour X, 64 pour Y.

    De plus, le mode SCHIP permet d'utiliser une seconde police de caractres
    hexadcimaux de taille 8*10 pixels, ainsi qu'un sprite de 16*16 pixels.
    Leur mode d'affichage reste identique  celui de CHIP8.



        1.5 - Instructions

    NNN reprsente un adresse mmoire,
     KK est une constante 8 bits
    X,Y sont deux constantes 4 bits

    0NNN    Appelle un code asm 1802  l'adresse NNN (non implment)
    00CN    Scroll vers le bas de N lignes (***)
    00FB    Scroll vers la droite de 4 pixels (***)
    00FC    Scroll vers la gauche de 4 pixels (***)
    00FD    Quitte l'mulateur (***)
    00FE    Passe en mode CHIP8 (***)
    00FF    Passe en mode SCHIP (***)
    00E0    Efface l'cran
    00EE    Retour d'un sous-programme CHIP8
    1NNN    Saut en NNN
    2NNN    Appel du sous-programme en NNN (16 appels successifs max)
    3XKK    Saute la prochaine instruction si VX = KK
    4XKK    Saute la prochaine instruction si VX != KK
    5XY0    Saute la prochaine instruction si VX = VY
    6XKK    VX = KK
    7XKK    VX = VX + KK
    8XY0    VX = VY
    8XY1    VX = VX OU VY
    8XY2    VX = VX ET VY
    8XY3    VX = VX XOR VY (*)
    8XY4    VX = VX + VY, VF = retenue
    8XY5    VX = VX - VY, VF = inverse de la retenue (**)
    8XY6    VX = VX SHR 1 (VX=VX/2), VF = retenue
    8XY7    VX = VY - VX, VF = inverse de la retenue (*) (**)
    8XYE    VX = VX SHL 1 (VX=VX*2), VF = retenue
    9XY0    Saute la prochaine instruction si VX != VY
    ANNN    I = NNN
    BNNN    Saut en NNN + V0
    CXKK    VX = Nombre alatoire ET KK
    DXYN    Affiche un sprite aux coordonnes (VX,VY). VF = collision.
            Si N=0, affiche un sprite 16*16, sinon un sprite de 8*N.
    EX9E    Saute la prochaine instruction si la touche VX est enfonce
    EXA1    Saute la prochaine instruction si la touche VX n'est pas enfonce
    FX07    VX = Compteur de dlai
    FX0A    Attend qu'une touche soit presse puis la stocke dans VX
    FX15    Compteur de dlai = VX
    FX18    Compteur de son = VX
    FX1E    I = I + VX
    FX29    I pointe sur la bitmap 4*5 du caractre hexa dans VX
    FX33    Stocke le codage BCD de VX dans M(I)...M(I+2)
    FX55    Sauvegarde V0...VX en mmoire  partir de M(I)
    FX65    Restaure V0...VX en mmoire  partir de M(I)
    FX75    Sauve les registres V0...VX (X<8) dans les flags HP48 (***)
    FX85    Restaure les registres V0...VX (X<8)  partir des flags HP48 (***)

    (*): Instruction non doccumente dans la doc de l'interprteur original,
         mais fonctionnelle.

   (**): Lorsqu'on calcule VX - VY, VF est mis  1 si VX est suprieur ou
         gal  VY, et  0 sinon.

  (***): Instruction propre  SCHIP.

   NOTES: Comme l'interprteur est mul, toutes les instructions 0NNN ne
          peuvent tre implmentes. Seules 00E0, 00EE ainsi que les
          instructions SCHIP le sont.



        1.6 - Clavier de CHIP8

    La plupart des programmes CHIP8 utilisaient un clavier 16 touches hexa.
    Il tait comme ceci:

                        Ŀ
                         1  2  3  C 
                        Ĵ
                         4  5  6  D 
                        Ĵ
                         7  8  9  E 
                        Ĵ
                         A  0  B  F 
                        

    Il est mul sur PC comme ceci:

                        Ŀ
                        Num C  D  E 
                        Ĵ
                         1  2  3    
                        Ĵ F 
                         4  5  6    
                        Ĵ
                         7  8  9    
                        Ĵ B 
                           A    0    
                        


    Pour passer du mode LCD au mode VIDEO ou inversement, presser V.
    Pour redmarrer un programme, presser BACKSPACE.
    Pour mettre le son ou l'enlever, presser S.
    Pour quitter l'mulateur, presser Esc.
    Pour faire un SNAPSHOT, presser Tab.
    Pour capturer un cran, presser C.



        1.7 - Jeux et programmes CHIP8/SCHIP

        BLINKY      Clone de PACMAN
        BLITZ       Jeu du style BOMBER
        BRIX        Casse-briques
        CONNECT4    Puissance-4
        KALEID      Kaledoscope
        MAZE        Trace des labyrinthes au hazard
        MERLIN      Jeu du SIMON
        MISSILE     Jeu de tir
        PONG        Le premier jeu video dat 1972: le ping-pong !!!
        PONG2       Idem, amlior par moi-mme
        PUZZLE      Puzzle 4*4 cases
        PUZZLE2     Idem, en mieux
        SYZYGY      Tron avec un serpent grandissant
        TANK        Jeu de tank
        TETRIS      A votre avis...
        TICTAC      Morpion
        UFO         Jeu de tir
        WIPEOFF     Casse-briques

    D'autres jeux ont surement t programms depuis 1977. Si vous voulez
    les ajouter  ceux de l'mulateur, envoyez-les-moi par E-Mail.
    Soyez gentils de respecter les droits d'auteur s'il y en a.



    2 - Le logiciel CHIP8

        2.1 - Configuration de l'mulateur

    Le programme SET_CHIP permet de configurer CHIP8.
    En effet, vous pouvez:
        - Choisir le mode d'affichage (TEXTE ou VGA),
        - Activer ou dsactiver le beeper par dfaut,
        - Activer ou dsactiver le son de chargement d'un programme,
        - Changer la couleur du bord de l'cran,
        - Changer la couleur des pixels allums et teinds.

    Pour choisir votre configuration, lancez SET_CHIP. Toutes les
    instructions ncessaires sont affiches  l'cran. Il ne vous
    reste plus qu' presser les touches correspondant  vos choix.
    SET_CHIP vous donne les touches que vous pouvez presser pour
    chaque choix possible.
    La configuration est enregistre dans le fichier CHIP8.INI.
    Notez que dans le cas d'un affichage en mode VGA, vous pouvez
    choisir le type d'cran que vous voulez. "LCD" affiche les
    pixels spars comme sur un cran LCD, alors que "VIDEO" les
    affichent non spars.


        2.2 - Utilisation de l'mulateur

    Si vous lancez CHIP8 sans argument, l'mulateur vous met en BOOT-128.
    BOOT-128 est un tout petit programme de 128 octets (99% en langage CHIP8)
    plac dans la zone 100-180 qui vous permet de tapper manuellement un
    programme CHIP8 sous forme de codes hexadcimaux. N'oubliez pas qu'il
    utilise le clavier original CHIP8, ce qui peut entrainer des confusions
    de touches sur le clavier du PC. BOOT-128 est accessible en faisant un
    saut en 100. Notez que ce n'est pas le programme de boot original qui
    lui est programm en langane machine 1802, et qu'il ne permet pas de
    corriger des erreurs de frappe. Aprs avoir tapp votre programme sous
    BOOT-128, faites un RESET de CHIP8 pour l'excuter.

    Pour lancer un programme CHIP8, tappez CHIP8 Nom_du_Programme. Il est
    possible de donner le nom du programme avec un chemin d'accs.
    L'mulateur charge le programme s'il le trouve (sinon un message d'erreur
    apparait). Vous tes alors en mode mulation.

    Vous pouvez  tout moment faire une capture texte de l'cran. Pour cela,
    pressez C. L'cran sera sauvegard sous le nom SCREEN. Ceci est valable
    uniquement en mode CHIP8.

    Concernant l'affichage en mode VGA, il est possible de passer  tout
    moment du mode VIDEO au mode LCD (et vice-versa) en pressant V.

    Vous pouvez aussi faire un SNAPSHOT de CHIP8, c'est  dire sauver son
    mulation, pour la reprendre plus tard. Pour cela, pressez Tab.
    L'image du snapshot sera enregistre sous le nom SNAPSHOT. Pour lancer
    CHIP8 avec le snapshot, tappez CHIP8 SNAP. Ceci est valable uniquement
    en mode CHIP8.

    

        2.3 - L'utilitaire FIX_CHIP

        Sur votre HP48, les programmes CHIP8 sont stocks sous forme de
    chanes de caractres, elles-mmes codes sous forme d'objets.
    Si vous transfrez un programme, l'mulateur ne pourra jamais le faire
    marcher directement. Il faut avant tout le convertir avec FIX_CHIP.
    Pour cela, tappez "FIX_CHIP Nom1 Nom2", o Nom1 est le nom du fichier 
    convertir, et nom2 celui du fichier obtenu.
    Beaucoup de jeux fournis sont issus de programmes HP48.
    A ma connaissance, le seul jeu CHIP8 original est UFO, dat de 1977...



        2.4 - Le dsassembleur UNCHIP

        UNCHIP est un petit dsasembleur CHIP8/SCHIP. Il ne sert qu' vous
    familiariser avec le langage CHIP8, et au besoin faire des changements
    dans des programmes (bugs, amliorations...). Pour l'utiliser, tappez
    UNCHIP Source Cible. Source est le nom de celui que vous voulez
    dsassembler, Cible est celui du source que vous obtiendrez. Si vous
    dsassemblez le fichier SNAPSHOT, UNCHIP vous donnera son contenu, au
    lieu de le considrer comme un programme CHIP8.

    UNCHIP peut aussi prendre deux options de dsassemblage:

    '-l' sert  garder toutes les adresses des instructions (sinon, seules
    sont gardes celles o CHIP8 fait des sauts, des appels  des sous-
    programmes, ou des rfrences au registre I).

    '-o' permet d'ajouter les codes hexadcimaux des instructions du
    programme  dsassembler.

    Ces deux options peuvent tre combines:

        UNCHIP PONG PONG.SRC -L -O
        UNCHIP TETRIS TETRIS.SRC -O
        UNCHIP UFO UFO.SRC -O -L
        ...



        2.5 - Le dbogueur CHIP8 DEBUG

        DEBUG est un petit dbogueur CHIP8. Il est en cours de programmation,
    donc la plupart des fonctions ne sont pas encore disponibles.
    Il vous montre les registres CHIP8, l'instruction courante avec les trois
    dernires et les quatre suivantes. Toutes sont commentes.

    Vous pouvez voir l'cran CHIP8 en deux modes:

        -Pause: l'cran CHIP8 est affich et DEBUG attend qu'une touche soit
                presse.

        -Temps rel: comme dans l'mulateur, mais beaucoup plus lent pour
                     vous aider dans le dbogage.


    Toute instruction illgale sera saute et mentione dans la zone de
    warning.


    Les touches sont:

    BACKSPACE : Reset CHIP8
          ESC : Quitte
          TAB : Pause sur cran CHIP8
           F1 : Passe l'affichage DEBUG<->ECRAN

    Le clavier CHIP8 reste valable.



       2.6 - Les utilitaires BINHEX et HEXBIN

        Ces deux utilitaires permettent de convertir des programmes du
    mode binaire en hexadcimal (BINHEX) et inversement (HEXBIN), afin de
    rendre la vie du programmeur CHIP8 plus simple. Ils prennent en
    arguments les noms des fichier source et destination.
    Par exemple, pour convertir PONG en hexadcimal sous le nom PONG.TXT,
    tappez BINHEX PONG PONG.TXT. Pour convertir PONG.TXT en binaire, tappez
    HEXBIN PONG.TXT PONG.

    Ces programmes sont trs utiles pour effectuer des corrections ou des
    modifications dans des programmes dja existants. Au lieu de faire un
    dsassemblage, la correction ou modification, puis l'assemblage, il
    suffit simplement de convertir le programme  modifier en hexadcimal,
    d'effectuer le changement, puis de le re-convertir en binaire. C'est de
    cette faon que le jeu PONG2 a pu tre amlior en moins de 3 minutes.

    Petite astuce: pour ajouter plusieurs instructions  un endroit SANS
    avoir  changer toutes les instructions de saut, il suffit de remplacer
    l'instruction figurant  l'endroit ou il faut en ajouter par un appel 
    un sous-programme  la fin du programme, et de placer au dbut du sous-
    programme l'instruction remplace par l'appel. Il faudra ensuite faire
    attention  sauvegarder les registres que le sous-programme ne doit pas
    modifier, puis les restaurer avant le retour du sous-programme.
    Le sous-programme peut alors faire ce que vous voulez.



        2.7 - L'assembleur CHIPPER

    CHIPPER est un programme dvelopp par Christian Egeberg qui permet
    de faire des programmes CHIP8/SCHIP. Il est trs facile d'emploi et une
    documentation complte (en anglais) est fournie avec.
    N'oubliez pas de mettre "OPTION BINARY" au dbut de vos sources, sinon
    vos programmes CHIP8 ne fonctionneront pas sur PC. Afin de gagner de la
    place, mettez aussi "ALIGN OFF", ce qui permet de placer dans le code
    des donnes 8 bits, et non 16 bits.



   3 -  Contacts

        Si vous dsirez me joindre, envoyez-moi un E-Mail  l'adresse
    suivante: winter@worldnet.net. Je rpondrai  vos questions dans la
    mesure du possible, et prendrai le temps d'apprcier vos suggestions.
    Pour le POSTWARE, vous pouvez galement m'crire  l'adresse suivante:

                             David WINTER
                             19 rue de Noailles
                             78100 St-Germain-en-Laye
                             FRANCE
    
    Je remercie vivement:

        Andreas Gustafsson, auteur CHIP8 sur HP48, pour ses documentations
        dtailles de CHIP8,

        Erik Bryntse pour ses documentations sur SCHIP,

        Carolyn alias "Steve" pour ses encouragements et sa patience,

        Massimiliano Zattera pour la routine clavier permettant une relle
        mulation du clavier Chip-8 original.



    4 - POSTWARE

    Ce logiciel est diffus en tant que POSTWARE. Un POSTWARE possde les
    mmes caractristiques qu'un FREEWARE, sauf que si vous l'utilisez, vous
    devez par principe poster (lettre, carte-postale, EMail) un message 
    son auteur. Vous devez y mettre au minimum vos nom et prnom. Le reste
    est gnralement vos apprciations et/ou suggestions.
    
    Les principes du FREEWARE IMPLIQUENT QUE:

        - Vous DEVEZ obtenir votre copie GRATUITEMENT.

        - Vous pouvez la donner, DANS SON INTEGRITE D'ORIGINE,  savoir que
          vous ne DEVEZ PAS AJOUTER, EFFACER, CHANGER un quelconque fichier
           l'ensemble de ceux du logiciel.

          Note: CHIP8 doit possder les fichiers suivants:

            * Rpertoire DOC.FR (documentations en franais):
                - CHIP8.TXT    : Documentation de CHIP8
                - EXPRESS.TXT  : Dernires informations  connatre
                - FAQ.TXT      : Questions frquemment poses
                - JEUX.TXT     : Informations sur les programmes/jeux CHIP8
                - VERSIONS.TXT : Informations sur les versions de CHIP8

            * Rpertoire DOC.ENG (documentations en anglais):
                - CHIP8.TXT    : Documentation de CHIP8
                - EXPRESS.TXT  : Dernires informations  connatre
                - FAQ.TXT      : Questions frquemment poses
                - GAMES.TXT    : Informations sur les programmes/jeux CHIP8
                - VERSIONS.TXT : Informations sur les versions de CHIP8

            * Rpertoire CHIP8:
                - FILE_ID.DIZ  : Brve description de l'mulateur
                - BINHEX.EXE   : Convertisseur de fichers binaire->ascii
                - HEXBIN.EXE   : Convertisseur de fichers ascii->binaire
                - CHIP8.EXE    : Emulateur CHIP8
                - CHIP8.INI    : Sauvegarde de la configuration de CHIP8
                - CHIP8.ROM    : ROM de CHIP8
                - DEBUG.EXE    : Dbogueur de CHIP8 [temporairement supprim]
                - SET_CHIP.EXE : Utilitaire pour configurer CHIP8
                - FIX_CHIP.EXE : Utilitaire FIX_CHIP
                - UNCHIP.EXE   : Dsassembleur UNCHIP
                - SVGA256.BGI  : Pilotes SVGA
                - BACKUP.DAT   : Sauvegarde pour le mode SCHIP

            * Rpertoire CHIPPER:
                - CHIPPER.DOC  : Documentation en alglais de CHIPPER
                - CHIPPER.EXE  : Le programme CHIPPER

            Les jeux ne sont qu'ajouts car ne sont pas du mme auteur.

        - Vous ne DEVEZ PAS le vendre

        - Vous ne DEVEZ PAS le distribuer  titre onreux excpt:
                - Les frais d'envoi par courrier,
                - Le prix du support (disquette, bande,...) de LA copie
                  que vous DONNEZ.

        - Si vous devez distribuer ce logiciel  tire non gratuit, vous DEVEZ
          obtenir ma permission crite.

        - Ce logiciel n'est diffusable sur disquette, bande ou serveur
          gratuit que s'il est en accord avec l'intgralit de la prsente
          rubrique.
