Как включить SID-файл в программу cc65 на C64?

Я хочу включить и воспроизвести файлы.sid (музыку для микросхем C64) в программе cc65. Обычно sid-файлы содержат подпрограмму воспроизведения, которая начинается с 1000 долларов, как мне связать это с моей программой cc65? На данный момент я компилирую свой код с помощью cc65 с помощью этой команды:

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

1 ответ

Решение

Я нашел решение:

  1. Создайте файл.asm, который генерирует следующий код:

    .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. Вызовите функцию asm из 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. Скомпилируйте оба файла, используя стандартные cc65Makefileэто дает вам .c64 файл с вашим кодом, но без данных SID

  4. Переместите файл SID, используя sidreloc (опция -p определяет новую стартовую страницу, в этом случае 20 означает 2000 долларов США)

    ./sidreloc -r 10-1f -p 20 sidfile.sid sidfile2000.sid
    
  5. Конвертировать файл SID в C64 .prg с помощью psid64:

    psid –n sidfile2000.sid
    
  6. Ссылка на файл sidfile2000.prg вместе с скомпилированной программой на C exomizer (число 2061 это начальный адрес программы, по умолчанию 2061 cc65):

    exomizer sfx 2061 music.c64 sidfile2000.prg -o final.prg
    
Другие вопросы по тегам