3

cc65 プログラムに .sid ファイル (C64 チップチューン用の音楽) を含めて再生したいと考えています。通常、sid ファイルには $1000 から始まる再生ルーチンが含まれていますが、これを自分の cc65 プログラムにリンクするにはどうすればよいですか? 現時点では、次のコマンドを使用して cc65 でコードをコンパイルします。

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

1 に答える 1

6

私は解決策を見つけました:

  1. 次のコードを生成する .asm ファイルを作成します。

    .export _setupAndStartPlayer
    
    sid_init = $2000
    sid_play = $2003
    siddata = $2000
    
    .segment "CODE"
    
    .proc _setupAndStartPlayer: near
            lda #$00     ; select first tune
            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 are live
            jmp $EA31 ; do the normal interrupt service routine
    .endproc
    
  2. C から asm 関数を呼び出します。

    #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. 標準を使用して両方のファイルをコンパイルしますcc65 Makefile。これにより.c64、コードを含むファイルが得られますが、SID データは含まれません。

  4. を使用してSIDファイルを再配置しますsidreloc(オプション-pは新しい開始ページを定義します。この場合、20$ 2000を意味します)

    ./sidreloc -r 10-1f -p 20 sidfile.sid sidfile2000.sid
    
  5. .prg以下を使用して、SID ファイルを C64 に変換しますpsid64

    psid –n sidfile2000.sid
    
  6. sidfile2000.prg以下を使用して、ファイルをコンパイル済みの C プログラムと一緒にリンクしますexomizer(数字2061はプログラムの開始アドレス、2061 は のデフォルトですcc65):

    exomizer sfx 2061 music.c64 sidfile2000.prg -o final.prg
    
于 2016-12-11T00:12:56.547 に答える