2016-12-03 1 views
2

Je souhaite inclure et lire des fichiers .sid (musique pour les chiptunes C64) dans un programme cc65. Habituellement, les fichiers sid contiennent une routine de lecture qui commence à 1000 $, comment puis-je lier cela à mon programme cc65? Au moment où je compile mon code avec CC65 en utilisant cette commande:Comment inclure un fichier SID dans un programme cc65 sur un C64?

cl65 -O -o C64test.prg -t c64 C64test.c 

Répondre

3

J'ai trouvé une solution:

  1. Créer un fichier .asm qui génère le code suivant:

    .export _setupAndStartPlayer 
    
    sid_init = $2000 
    sid_play = $2003 
    siddata = $2000 
    
    .segment "CODE" 
    
    .proc _setupAndStartPlayer: near 
         jsr sid_init; init music 
         ; now set the new interrupt pointer 
         sei 
         lda #<_interrupt ; point IRQ Vector to our custom irq routine 
         ldx #>_interrupt 
         sta $314 ; store in $314/$315 
         stx $315 
    
         cli ; clear interrupt disable flag 
         rts  
    .endproc   
    
    .proc _interrupt 
         jsr sid_play 
         dec 53280 ; flash border to see we live 
         jmp $EA31 ; do the normal interrupt service routine 
    .endproc 
    
  2. Appelez la fonction asm à partir de C:

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <conio.h> 
    #include <c64.h> 
    
    extern int setupAndStartPlayer(); 
    
    int main(void) { 
         printf("Setting up player\n"); 
         setupAndStartPlayer(); 
         return 0; 
    } 
    
  3. Compile les fichiers en utilisant la norme cc65Makefile, cela vous donne un fichier .c64 avec votre code, mais sans les données SID

  4. déplacer le fichier SID en utilisant sidreloc (l'option -p définit la nouvelle page de démarrage, en ce cas 20 signifie $ 2000)

    ./sidreloc -r 10-1f -p 20 sidfile.sid sidfile2000.sid 
    
  5. Convertir le fichier SID C64 .prg en utilisant psid64:

    psid –n sidfile2000.sid 
    
  6. Lien le fichier sidfile2000.prg ainsi que le programme C compilé à l'aide exomizer (le numéro 2061 est l'adresse de début du programme, 2061 est la valeur par défaut pour cc65):

    exomizer sfx 2061 music.c64 sidfile2000.prg -o final.prg