MML reference: Memory write

定義(Define)

        yaddress,data

引数(Inputs)

address

書き込むアドレスを指定します。
0〜65535(0xFFFF)の範囲で指定してください。

data

書き込むデータを指定します。
0〜255(0xFF)の範囲で指定してください。

内容(Contents)

指定したaddressのメモリに、dataを書き込みます。
本コマンドは、以下の使い方を想定しています。

注意(Notes)

address及びdataの値次第では、プログラムの動作に影響を与えます。
本コマンドは、ファミリーコンピューター(NES)及び、本ドライバーを組み込むアプリケーションのメモリ空間を把握した上で、ご使用ください。

本コマンドでは、メモリ空間に対してアドレスを番地(数値)で指定します。
従いまして、ユーザーがC言語等の高級言語にてアプリケーションを開発するに際して メモリ配置をコンパイラー及びリンカーに任せる場合は、 アプリケーションのリビルド時に変数ポインタが変わりえる事を留意して下さい。
この回避策として、例えばcc65を使ってアプリケーションを開発する場合は、 リンカー用のconfigファイルにて曲データが書き込むセグメント(RAM領域)を専用に確保し、 そのconfigファイルを用いてアプリケーションをビルドする事をお勧めします。
曲データからアプリケーションへ通知する際は、そのセグメント(RAM領域)を介して行います。
その際、C言語はそのセグメントをアクセスできないので、受け取り関数はアセンブリ言語で記述します。

■■■ to do ■■■
言葉だけでは解りにくいので、ちゃんとcc65のプロジェクトでサンプルを書く。
・C言語       … メインルーチン
・アセンブリ言語関数 … 通知の読み込み
・MML       … 通知するMML (←先ずは、MMLコンパイラを作らないと)
・コンフィグファイル … セグメント設定

例(Sample)

    y $0000,1    
;   lda    #1
;   sta    $0000