Nov17th

CC65(CA65) のバックアップ差分(No.2)

Top / CC65(CA65)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
*コントロール コマンド [#h98f4746]
*文法 [#jb601fa9]
-16進数値
$を付ける
例: $00、$81

*Control Command [#h2cb4431]
-即値
#を付ける
例: #$00、 #$29
~

*コントロールコマンド [#h2cb4431]
-.segment
セグメントを切り替える。
データやニーモニックを配置するには、.cfgファイルでセグメントにメモリ割り当てをしておく必要がある。
#highlight(cpp){{
.segment "HEADER"
    ...
    ...

.segment "INIT"
    ...
    ...
}}

-.byte
Define Byte Data
バイトサイズのデータ(8bit)を配置する。
.cfgファイルでセグメントにメモリを割り当てる必要がある。
#highlight(cpp){{
.segment "DATA"
    .byte    $06    ;0x06
    .byte    $4E, $45, $53, $1A    ;NES Header
}}

-.word
ワードサイズのデータ(16bit)を配置する。
#highlight(cpp){{
.segment "DATA"
    .word    $0000    ;0x0000
    .word    $3E64    ;0x3E64
}}

-.proc、.endproc
サブルーチンを定義する。
#highlight(cpp){{
.proc Reset
    ....
.endproc
}}

~

*メモ [#e73c7d8d]
-プログラムのエントリーポイントはリセット割り込みの指定先アドレスになる。

-$0000番地から4+12byte分の領域は、NES用ヘッダのデータが指定される。
先頭4byteには固有の値が、残りの12byteにはバンクの数やミラーリング方式が指定される。
#highlight(cpp){{
.segment "HEADER"    ;$0000に配置
    .byte    $4E, $45, $53, $1A    ;NES Header
    .byte    $02                            ;プログラムバンク数
    .byte    $01                            ;キャラクターバンク数
    .byte    $01                            ;ミラーリング方式(垂直ミラーリング)
    .byte    $00                            ;不明
    .byte    $00, $00, $00, $00    ;不明
    .byte    $00, $00, $00, $00    ;不明
}}

-$FFFA番地からword3つ分の領域は、各種割り込みの分岐先が指定される。
上から順に、VBlank割り込み、リセット割り込み、ハードウェア割り込み。
#highlight(cpp){{
.segment "STARTUP"
.proc Reset
.endproc

.segment "INTERRUPT"    ;$FFFAに配置
    .word    $0000    ;VBlank
    .word    Reset     ;リセット
    .word    $0000    ;ハードウェア
}}

-メモリサイズは8bit以上16bit以下なので、16bitの値で指定する。
レジスタにメモリアドレスを格納する場合2つ使用する必要がある。

-ROMとRAMの違いを押さえておく

~

*リンク [#xf983ebc]
-NES研究室
http://hp.vector.co.jp/authors/VA042397/nes/index.html
ニーモニックやアーキテクチャ、サンプルなどなど

-Control Commands
http://www.cc65.org/doc/ca65-11.html
.byte等のCC65用プリプロセスコマンド集。

#highlight(end)