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)
引数
戻り値
なし
説明
対象領域の flash memory を erase します。この関数は .af or .ag ファイルで使用しないでください。