cc65 プログラムに .sid ファイル (C64 チップチューン用の音楽) を含めて再生したいと考えています。通常、sid ファイルには $1000 から始まる再生ルーチンが含まれていますが、これを自分の cc65 プログラムにリンクするにはどうすればよいですか? 現時点では、次のコマンドを使用して cc65 でコードをコンパイルします。
cl65 -O -o C64test.prg -t c64 C64test.c
私は解決策を見つけました:
次のコードを生成する .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
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;
}
標準を使用して両方のファイルをコンパイルしますcc65
Makefile
。これにより.c64
、コードを含むファイルが得られますが、SID データは含まれません。
を使用してSIDファイルを再配置しますsidreloc
(オプション-p
は新しい開始ページを定義します。この場合、20
$ 2000を意味します)
./sidreloc -r 10-1f -p 20 sidfile.sid sidfile2000.sid
.prg
以下を使用して、SID ファイルを C64 に変換しますpsid64
。
psid –n sidfile2000.sid
sidfile2000.prg
以下を使用して、ファイルをコンパイル済みの C プログラムと一緒にリンクしますexomizer
(数字2061
はプログラムの開始アドレス、2061 は のデフォルトですcc65
):
exomizer sfx 2061 music.c64 sidfile2000.prg -o final.prg