ここではFM-7エミュレータXM7の開発にあたり、独自に解析した日本語通信カードの隠しコマンドについて考察しています。
FM-7のディスプレイサブシステムにはTESTコマンド(通称「YAMAUCHIコマンド」)が存在しますが、それの日本語サブシステム版とも言えるのがこの「YAMAMOTOコマンド」です。
コマンド形式
コマンドコード($80)+キーワード("YAMAMOTO")+サブコマンド+サブコマンド+……(サブコマンドの任意個の並び)
FM-7以降のTESTコマンドと異なり、キーワードの照合を行っているため、キーワードは必ず"YAMAMOTO"でなければなりません。サブコマンド
サブコマンド名はここではディスプレイサブシステムのTESTコマンドに準拠したものとします。
- $00 : ENDサブコマンド
サブコマンドの終端を示すコマンドです。他のサブコマンドを使用する際にはこれ単体でダミー呼び出しを行わないと動作が保証されません(仕様です)。
コマンド形式:サブコマンドコード($00)- $01 : MOVEサブコマンド
日本語サブシステム内(メインCPUとのRCB通信領域を含む)のメモリ転送を行うコマンドです。これを先頭に持ってこないと正常動作しません(仕様です)。
コマンド形式:サブコマンドコード($01)+転送元アドレス(2バイト)+転送先アドレス(2バイト)+転送サイズ(2バイト)- $02 : JMPサブコマンド
サブコマンドを任意のアドレスから実行するためのコマンドです。はっきりいってあまり利用価値はありません。
コマンド形式:サブコマンドコード($02)+アドレス(2バイト)- $03 : JMSRサブコマンド
任意のアドレスから機械語コードを実行するためのコマンドです。これとMOVEサブコマンドの組み合わせであんなことも、こんなことも、(以下略
コマンド形式:サブコマンドコード($03)+呼び出しアドレス(2バイト)
RCB領域に書き込まれた機械語コードを実行するためのコマンドです。FM77AVシリーズのType-A/B/D/EサブモニタのCALL MACHINEコマンドに相当します。
F-BASIC V3.0J収録のJTESTツールの機械語部分(JTESTEB)では日本語サブシステム上で任意のプログラムを動かすためにこのコマンドが使用されています。コマンド形式
コマンドコード($81)+機械語コード(254バイトまで…たぶん)
機械語コードはリロケータブルか$9F01をコードの先頭とする絶対アドレス指定を前提としている必要があります。