ca65 はコメント開始文字が ';' なので、シェルから直接実行可能なソースコードが書ける。

たとえば、以下のソースコードを foo.s として保存し、sh foo.s とすると直接 FCEUX 上で実行できる (事前に cc65, fceux パッケージをインストールしておく必要がある)。

_DUMMY=0; ca65 -o foo.o "$0" && ld65 --target nes -o foo.nes foo.o && fceux foo.nes; exit

; 矩形波を再生するだけ。

.segment "HEADER"

        .byte   "NES", $1A      ; iNES magic
        .byte   2               ; 16K PRG count
        .byte   1               ; 8K CHR Count
        .byte   0               ; Mapper 0, Horizontal mirroring

.segment "CODE"

Reset:
        lda     #$0F
        sta     $4015

        lda     #(1 << 5) | (1 << 4) | 15
        sta     $4000
        lda     #<253
        sta     $4002
        lda     #>253
        sta     $4003

@loop_forever:
        jmp     @loop_forever

Nmi:
Irq:
        rti

.segment "VECTORS"

        .addr   Nmi
        .addr   Reset
        .addr   Irq

サウンドのみを扱うコードを手軽にテストしたい場合に役立つかも。

なお、セグメントの割り当てについては cc65 の nes.cfg を参照。

この記事は ソースコード直接実行のテクニック - 何とは言わない天然水飲みたさ からヒントを得て作成した。