如何将 SID 文件包含到 C64 上的 cc65 程序中?

Posted

技术标签:

【中文标题】如何将 SID 文件包含到 C64 上的 cc65 程序中?【英文标题】:How to include a SID-File into a cc65 program on a C64? 【发布时间】:2016-12-03 16:50:57 【问题描述】:

我想在 cc65 程序中包含和播放 .sid 文件(用于 C64 芯片调谐的音乐)。通常 sid 文件包含一个起价为 1000 美元的播放例程,我如何将其链接到我的 cc65 程序? 目前我使用这个命令用 cc65 编译我的代码:

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

【问题讨论】:

【参考方案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
    

    从 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;
    
    

    使用标准 cc65Makefile 编译这两个文件,这将为您提供一个带有您的代码但没有 SID 数据的 .c64 文件

    使用sidreloc 重新定位SID 文件(选项-p 定义新的起始页,在这种情况下20 表示$2000)

    ./sidreloc -r 10-1f -p 20 sidfile.sid sidfile2000.sid
    

    使用 psid64 将 SID 文件转换为 C64 .prg

    psid –n sidfile2000.sid
    

    使用exomizer将文件sidfile2000.prg与编译的C程序链接在一起(数字2061是程序的起始地址,2061是cc65的默认值):

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

【讨论】:

以上是关于如何将 SID 文件包含到 C64 上的 cc65 程序中?的主要内容,如果未能解决你的问题,请参考以下文章

Flash Pro CC HTML5 Canvas & CreateJS - 如何将 lib 文件更新到最新版本?

文件分发系统

将 SQL 数据库导出到 phpMyAdmin 5.1.65

如何将 adobe animate CC fla 导出到 illustrator CC

如何将文件写入当前目录而不是bazel-out

OS X Mavericks 10.9.2 (13C64) 懒人版安装镜像安装变色龙引导后的问题