FM-7の裏コマンド「YAMAUCHI」とは?使い方と技術的背景を解説

2026/1/29 RetroPC NEWS編集部

富士通 FM-7 とは

富士通のFM-7は、1980年代初頭にかけて登場した国産8ビットパソコンです。元となるFM-8は富士通初の本格的パーソナルコンピュータで、メインCPUとサブCPUによるデュアルCPU構成を採用し、グラフィック処理とユーザープログラムを分担する先進的な設計が特徴でした。後継のFM-7はこの構成を継承しつつ、ROM BASICの搭載や拡張性の向上により扱いやすさを強化。商業的に大ヒットとなり、教育・業務・ホビー分野まで幅広く活用され、日本のパソコン黎明期を支えました。本稿では「FM-7」と表記しますが、内容にはFM-8、FM-11、FM-NEW7、FM-77を含みます。

FM8-1 FM-7の裏コマンド「YAMAUCHI」とは?使い方と技術的背景を解説

富士通初のパーソナルコンピュータ FM-8

FM-7のアーキテクチャ:隔離されたVRAM

FM-7が当時の他社製PCと決定的に異なっていたのは、VRAMへのアクセス方法です。 NEC PC-8801が「バンク切り替え方式」、SHARP X1が「I/O空間配置」を採用し、メインCPUから直接VRAMを操作できたのに対し、FMシリーズではVRAMへのアクセス権を専用のサブCPUが独占していました。

FM7ARCH-1 FM-7の裏コマンド「YAMAUCHI」とは?使い方と技術的背景を解説

メインCPUにはVRAMに直接触れる手段が存在せず、描画を行うにはメイン・サブ間に用意されたわずか128バイト(メイン:$FC80〜$FCFF、サブ:$D380〜$D3FF)の「共有RAM」を介してサブCPUに指示を送るしかありませんでした。標準仕様では「線を引け」「円を描け」といったコマンドを介する必要があり、これがゲーム開発における高速描画の大きな障害となっていたのです。

救世主となった「TESTコマンド」

この制約を打ち破るために活用されたのが「TESTコマンド」と呼ばれる隠し命令です。これは本来、開発やメンテナンス用に用意された“裏側のインターフェース”でしたが、これを利用することでサブシステムのメモリ操作や内部ルーチンの呼び出しといった、非常に強力な制御が可能になります。

このコマンドを起動するためのキーワードが「YAMAUCHI」です。

  • 起動キーワード: FM-8ではメモリ上に「YAMAUCHI」という特定の文字列を書き込む必要がありました(FM-7では制約が緩和され、任意の8バイト文字列で起動可能)。
  • コマンドコード: サブシステム側で実行されるこのコマンドのコードは $3F(ASCIIの’?’)に割り振られています。
FM8_3 FM-7の裏コマンド「YAMAUCHI」とは?使い方と技術的背景を解説

YAMAUCHIコマンドが発見され雑誌に掲載された当時のもの (画像引用:工学社I/O 1982/5、編集部加工)

TESTコマンドによる4つの制御

1つのTESTコマンドの下には、以下の4種類のサブコマンドを自由に組み合わせて記述し、一括実行させることができます。

  1. MOVE(メモリブロック転送): 一般に「サブシステム転送」と呼ばれる処理の正体です。共有RAM上のユーザープログラムをサブシステムRAMへ送る、あるいはサブシステムの状態を共有RAMへ戻すために使用します。
  2. JSR (JMSR)(サブルーチンコール): サブシステム側のマシン語ルーチンを直接実行します。サブシステムROM内の既存ルーチンや、MOVEで送り込んだ独自の高速描画ルーチンを呼び出すことができます。
  3. JMP(ジャンプ): 指定したアドレスへ処理を移します。
  4. END(終了): TESTコマンドの実行を終了します。

サンプル・アセンブラコード (一部)

10660 4046 00   SMDATA FCB 0,0,$3F    * ← &3Fh でテストコマンド
10670 4049 59          FCC 'YAMAUCHI' * ← YAMAUCHIコマンド
10680 4051 91          FCB $91        * ← MOVEサブコマンド  
10690 4052 0002 SMSOUC RMB 2          * ← 転送元アドレス
10700 4054 D3C0        FDB $D3CO      * ← 転送先アドレス
10710 4056 0040        FDB 64         * ← 転送バイト数
10720 4058 90          FCB $90        * ← ENDサブコマンド 
10730      4059        .SMD EQU

画面の左半分を右半分にコピーするプログラム

YAMAUCHIコマンドを利用し、画面の左半分を右半分にコピーするプログラムを、Motorolaerさんに作っていただきました。

アセンブラ・ソースコード (クリックすると展開します)
1                       *
2                       * VRAM copy for FM-7
3                       *					2026/01/23
4                       *					Motorolaer
5    0000               
6    4000               		ORG	$4000
7    4000               
8    4000 30   8D 0005  		LEAX	RCB,PCR
9    4004 AD   9F FBFA  		JSR		[$FBFA]							; F-BIOS call
10   4008 39            		RTS
11   4009               
12   4009               RCB
13   4009 10            		FCB		$10								; SUBOUT
14   400A 00            		FCB		$00								; Error code
15   400B 400F          		FDB		SUB_CALL						; Top address of Sub program
16   400D 004E          		FDB		END_SUB-SUB_CALL				; Length
17   400F               
18   400F               SUB_CALL
19   400F 00            		FCB		$00								; NOP
20   4010 00            		FCB		$00								; NOP
21   4011 3F            		FCB		$3f								; Test command
22   4012 59 41 4D 41   		FCC		/YAMAUCHI/						; Keyword
     4016 55 43 48 49   
23   401A               
24   401A 93            		FCB		$93								; Sub_command JMSR
25   401B D38F          		FDB		SUB_PG-SUB_CALL+$D380
26   401D 90            		FCB		$90								; Sub_command END
27   401E               
28                      * VRAM copy routine runs on the sub system
29   401E               
30   401E 34   36       Sub_PG	PSHS	D,X,Y
31   4020 7D   D409     		TST		$D409							; Enable VRAM access flag
32   4023               
33   4023 C6   C8       		LDB		#200							; Copy Red VRAM, 200 lines
34   4025 8E   0000     		LDX		#$0000
35   4028 8D   26       CP_R	BSR		LRCP
36   402A 30   88 28    		LEAX	40,X
37   402D 5A            		DECB
38   402E 26   F8       		BNE		CP_R
39   4030               
40   4030 C6   C8       		LDB		#200							; Copy Green VRAM, 200 lines
41   4032 8E   4000     		LDX		#$4000
42   4035 8D   19       CP_G	BSR		LRCP
43   4037 30   88 28    		LEAX	40,X
44   403A 5A            		DECB
45   403B 26   F8       		BNE		CP_G
46   403D               
47   403D C6   C8       		LDB		#200							; Copy Blue VRAM, 200 lines
48   403F 8E   8000     		LDX		#$8000
49   4042 8D   0C       CP_B	BSR		LRCP
50   4044 30   88 28    		LEAX	40,X
51   4047 5A            		DECB
52   4048 26   F8       		BNE		CP_B
53   404A               
54   404A B7   D409     		STA		$D409							; Disable VRAM access flag
55   404D 35   36       		PULS	D,X,Y
56   404F 39            		RTS
57   4050               
58   4050               
59   4050 86   14       LRCP	LDA		#20								; copy 1 line
60   4052 10AE 81       CPLP	LDY		,X++
61   4055 10AF 88 26    		STY		38,X
62   4059 4A            		DECA
63   405A 26   F6       		BNE		CPLP
64   405C 39            		RTS
65   405D               
66   405D               
67   405D               END_SUB


           CPLP   60 4052            CP_B   49 4042            CP_G   42 4035
           CP_R   35 4028         END_SUB   67 405d            LRCP   59 4050
            RCB   12 4009        SUB_CALL   18 400f          SUB_PG   30 401e


    Total Errors 0

左画面:実行前 右画面:実行後

裏コマンドが切り拓いた高速描画

当時のプログラマーたちは、この「MOVE」と「JSR (JMSR)」を組み合わせることで、サブシステムを「ほぼ自由に使える実行環境」へと変貌させました。メインCPUから共有RAMへ独自の描画プログラムを送り込み、サブCPU側でそれを直接実行させる。この「YAMAUCHI」コマンドを経由したハックこそが、FM-7で高速なアクションゲームを実現するための必須テクニックとなったのです。

開発者の名前がサブシステムを呼び出す秘密のキーワードだったなんて、おおらかな時代だったのかもしれませんね!


YAMAUCHIさん

雑誌に掲載されたYAMAUCHIさんの写真

(画像出典: Oh!FM 1985/1号、ご協力: Motorolaerさん)