anago script file reference - program mode

スクリプトファイル

program mode では programcore.nut と指定されたスクリプトファイル(.af or .ag)を2つ読み込みます。programcore.nut の内容は変更しないでください。

スクリプトファイルでは board, program_initialize(), cpu_transfer(), ppu_transfer() の4つの定義が必要です。簡潔な記述のために関数を追加することも可能です。

program mode の流れ

flash memory にはデータ書き込み時に待ち時間が発生します。この待ち時間の間にもう1つのデバイスを書き込みます。このために下記の順に定義された処理が実行されます。

  • program_initialize()
  • erase 実行, 完了待ち
  • cpu_transfer() と ppu_transfer() を並行動作

最も重要な関数が program_initialize() です。program_initialize() の直後に erase が行える状態にしてください。

  • CPU, PPU 領域のコマンドアドレスの定義/ cpu_command(), ppu_command()
  • CPU, PPU 領域のコマンドアドレスの確保/ cpu_write()

xxx_transfer() 内でもコマンドアドレスが変更できますが、それを利用するのは特殊な条件なので、それ以外は program_initialize() で完結するはずです。

xxx_transfer() では順番に ROM image を転送できるように記載します。並行処理の切り替えは自動で行います。

.af ファイルに必要な変数と関数

board

  • mappernum: 使用する nes ファイルの iNES headernumber の記載
  • cpu, ppu:
    • banksize: xxx_program() に使用する可変領域のサイズ。0 は不可。
    • maxsize: 対象ハードが扱える最大容量

banksize と maxsize の単位は byte です。

program_initialize()

function program_initialize(d, cpu_banksize, ppu_banksize)

引数

  • d: userpointer
  • cpu_banksize: board.cpu_rom.banksize と同じ
  • ppu_banksize: board.ppu_rom.banksize と同じ

戻り値

なし

説明

CPU, PPU 領域のコマンドアドレスの定義と確保を行います。program_initialize() のあとに erase が行えるようにしてください。

cpu_transfer()

function cpu_transfer(d, start, end, banksize)

引数

  • d: userpointer
  • start: 転送開始ページ番号。for ループの初期入力に使用。
  • end: 転送終了ページ番号。for ループの終了条件に使用。
  • banksize: cpu_program() の引数に使用。

戻り値

なし

説明

CPU 領域の ROM image を転送する処理です。for ループで可変領域データを転送し、最後に固定領域のデータを転送してください。

ppu_transfer()

function ppu_transfer(d, start, end, banksize)

引数

  • d: userpointer
  • start: 転送開始ページ番号。for ループの初期入力に使用。
  • end: 転送終了ページ番号。for ループの終了条件に使用。
  • banksize: ppu_program() の引数に使用。

戻り値

なし

説明

PPU 領域の ROM image を転送する処理です。for ループで可変領域データを転送してください。

PPU 領域の ROM image が存在しないハードの場合は ppu_transfer() 定義だけして内容なしにしてください。

.af or .ag ファイルから利用できる関数

cpu_write()

script_common_ja を参照。

cpu_command()

function cpu_command(d, romoffset, memorymapoffset, banksize)

引数

  • d: userpointer
  • romoffset: flash memory command address. Acceptable addresses are 0, 0x02aa, 0x0555, 0x2aaa or 0x5555.
  • memorymapoffset: flash memory command address for CPU region. Acceptable range is 0x8000 to 0xffff.
  • banksize: target cpu memory address banksize. Acceptable values are 0x2000, 0x4000 or 0x8000.

戻り値

なし

説明

cpu 領域に接続された flash memory のメモリマップ上のコマンドアドレスを定義します。program_initialize() で定義し、 xxx_transfer() 内部で再定義ができます。

ppu_command()

function ppu_command(d, romoffset, memorymapoffset, banksize)

引数

  • d: userpointer
  • romoffset: flash memory command address. Acceptable addresses are 0, 0x02aa, 0x0555, 0x2aaa or 0x5555.
  • memorymapoffset: flash memory command address for PPU region. Acceptable range is 0x0000 to 0x1fff.
  • banksize: target ppu memory address banksize. Acceptable values are 0x0400, 0x0800, 0x1000 or 0x2000.

戻り値

なし

説明

対象が ppu 領域になる。詳細は cpu_command の説明を参照。

cpu_program()

function cpu_program(d, address, length)

引数

  • d: userpointer
  • address: 対象アドレス。利用可能範囲は 0x8000-0xffff。
  • length: 書き込む長さ。利用可能範囲は 0x0100-0x3fff。

戻り値

なし

説明

指定領域を書き込みます。処理の切り替えは内部で自動に行います。

ppu_program()

function ppu_program(d, address, length)

引数

  • d: userpointer
  • address: 対象アドレス。利用可能範囲は 0x0000-0x1fff。
  • length: 書き込む長さ。利用可能範囲は 0x0100-0x1fff。

戻り値

なし

説明

指定領域を書き込みます。処理の切り替えは内部で自動に行います。

cpu_erase(), ppu_erase()

function cpu_erase(d)
function ppu_erase(d)

引数

  • d: userpointer

戻り値

なし

説明

対象領域の flash memory を erase します。この関数は .af or .ag ファイルで使用しないでください。