FM-7/8シリーズ用プログラミング言語とその処理系


本ページでは、FM-7/8シリーズ用プログラミング言語とその処理系について紹介しています。 ただし、市販OS用のものは除きます。(各OSのページで紹介予定です。) すなわち、本ページで紹介しているソフトウェアはほどんどがF-BASICファイルシステムで動作するものです。
各画面キャプチャについては、XM7を使用させていただきました。 PI.さん、たけがみりうさん、いつも感謝しております。
また、本ページの各表の作成にはThinkさんのCSV→Table変換サイトのお世話になりました。 ありがとうございました。

お急ぎの方へ。
≪言語別コーナー≫
アセンブラ、逆アセンブラ、デバッガKコンパイラSYS-9コンパイラGAMEインタプリタ、コンパイラTL/1コンパイラ
COMSOLコンパイラPascalコンパイラCコンパイラ

8. FM-7/8シリーズ用プログラミング言語とその処理系

≪言語別コーナー≫

8.1 アセンブラ、逆アセンブラ、デバッガ

● F-BASICに次いで(?)良く使われたのが、このアセンブラ関係だと思います。
各社より多数発売、各誌・書で多数発表されていました。
はせりんの知る限りの情報を下記にまとめておきましたが、モレもあると思います。
ご存じの方はぜひお知らせください。
市販のもの(雑誌掲載のカセットサービス等除く)
提供元 発売年月 型格 品名 価格 機種 メディア エディタ アセンブラ 逆アセンブラ デバッガ 備考
富士通 1981年5月 SM07217-A011 アブソリュートアセンブラ 18,000 FM-8 5inch 2D ソースはF-BASICテキストのコメントで記述
1982年5月 SM07217-A012 アブソリュートアセンブラ 18,000 FM-8 8inch 2D ソースはF-BASICテキストのコメントで記述
1981年5月 SM07217-G001 デバッガ・逆アセンブラ 15,000 FM-8 5inch 2D
1982年5月 SM07217-G002 デバッガ・逆アセンブラ 15,000 FM-8 8inch 2D
1982年11月 SM07317-A111 アブソリュートアセンブラ 18,000 FM-7 5inch 2D ソースはF-BASICテキストのコメントで記述
1982年11月 SM07317-G101 デバッガ・逆アセンブラ 15,000 FM-7 5inch 2D
1984年5月 SM07317-L103 F-BASIC Tool Box V1.0 22,000 FM-77 3.5inch 2D アセンブラ、デバッガ・逆アセンブラ、倍精度関数ライブラリ
1984年5月 SM07317-L104 F-BASIC Tool Box V1.0 22,000 FM-7/ NEW7 5inch 2D アセンブラ、デバッガ・逆アセンブラ、倍精度関数ライブラリ
COMAS COMAS-FAC 8,000 FM-8 TAPE アセンブラ、エディタ
COMAS-FGC 4,000 FM-8 TAPE 逆アセンブラ
COMAS-FDC 8,000 FM-8 TAPE デバッガ
COMAS-FDT 48,000 FM-8 5inch 2D 独自ファイルシステム、F-BASICとファイル交換可。後に\28,000に値下げ。
1983年5月頃 COMAS-FDT2 33,000 FM-7,8 5inch 2D 上記にTRACE機能追加。
橋口技研 6809アセンブラ 8,000 FM-7/8 5inch 2D
6809逆アセンブラ 8,000 FM-7/8 5inch 2D
6809デバッガ 12,000 FM-7/8 5inch 2D
アートディンク/OA:サービス研究所 6809 ASSEMBLER-AD 7,900 FM-7/8 TAPE ソースはF-BASICテキストのコメントで記述
6809 ASSEMBLER-AD 9,800 FM-7/8 5inch 2D ソースはF-BASICテキストのコメントで記述
6809 ASSEMBLER-AD 9,800 FM-77 3.5inch 2D ソースはF-BASICテキストのコメントで記述
6809 DISASSEMBLER-AD 7,900 FM-7/8 TAPE
6809 DISASSEMBLER-AD 9,800 FM-7/8 5inch 2D
6809 DISASSEMBLER-AD 9,800 FM-77 3.5inch 2D
CORE-AD 6,900 FM-7/8 TAPE
CORE-AD 7,900 FM-7/8 5inch 2D
CORE-AD 7,900 FM-77 3.5inch 2D
キャリーラボ CS-61 BASE09 14,000 FM-7/8 TAPE (市販版、デバッガが添付されている)
Sofix Debug-Boy 6809 12,000 FM-7/ NEW7 5inch 2D
Debug-Boy 6809 12,000 FM-77 3.5inch 2D
ツクモ C-DOS7 Ver 2.0 9,800 FM-7/ NEW7 5inch 2D 拡張モニタ内にミニアセンブラ、逆アセンブラ、デバッガ内蔵
雑誌・書籍掲載のもの
出版元 発行年月 掲載誌・書 タイトル 掲載ページ 機種 作者・開発元 エディタ アセンブラ 逆アセンブラ デバッガ 備考
アスキー 1983年10月 アスキー MIGHTY-7 272 FM-7/8 c.mos(兵藤 嘉彦)氏
工学社 1982年3月 I/O エディタ・アセンブラ 257 FM-8 馬場 二郎氏 ファイル管理はF-BASIC等で行う
工学社 1983年5月 I/O エディタ・アセンブラ V2.0 260 FM-7/8 馬場 二郎氏 ファイル管理はF-BASIC等で行う
工学社 1984年12月 I/O エディタ・アセンブラ V3.1 241 FM-7/8 馬場 二郎氏 ファイル管理機能あり
工学社 1983年7月 I/O エディタ・アセンブラV2.0 を ALL RAM MODE で使う 304 FM-8 庄野 温夫氏
工学社 1984年6月 I/O エディタ・アセンブラ V2.0 のFM-11への移植 232 FM-11 猪股 宏文氏
工学社 1983年8月 I/O MTOOL09 314 FM-7/8 越野 洋介氏 アブソリュートアセンブラ用ソース
工学社 1983年10月 I/O MTOOL09の出力をエディタ・アセンブラV2.0に 314 FM-7/8 エンジンルームS.N. エディタ・アセンブラV2.0用ソース
工学社 1984年1月 I/O URA DOS添付のSUPER MONITOR 341 FM-7 DOSのTom氏
工学社 1984年4月,5月,6月,7月 I/O BASE09 273, 261, 337, 306 FM-7/8 キャリーラボ 独自BIOS、ファイル管理はテープのみ
工学社 1982年6月 I/O U-MONITOR 216 FM-8 上野 俊見氏
工学社 1982年9月 I/O F-BASIC EXPANDER内の拡張モニタ 345 FM-8 笠作 貴弥氏
工学社 1983年6月 I/O F-BASIC EXPANDER内の拡張モニタ 293 FM-7 笠作 貴弥氏
工学社 1985年6月 I/O F-ED エディタシステム 208 FM-7/N7/77 豊嶋 春暢氏
工学社 1985年11月 I/O スクリーンエディタ Ver 1.0 313 FM-7/N7/77 笠 晃一氏 F-BASICコメント文用(F-BASICアスキーファイルも可)
工学社 1986年10月 I/O FM-Cコンパイラ用 cc.m cc.a 209 FM-7/N7/77 広瀬 峰太郎氏 アセンブラはFM-C専用の特殊文法
工学社 1987年2月 I/O Draco-C用 asmb 185 FM-7/N7/77 笠 晃一氏 ソースはF-BASICテキストのコメント文
工学社 1987年3月 I/O FM-Pascal用 edit 183 FM-7/N7/77 黒姫氏
工学社 1982年7月20日 FM-8活用研究 6809デバッガ 44 FM-8 笠作 貴弥氏
6809 SUPER TRACER V2.9 48 FM-8 Mr. かれきさん氏
6809エディタ・アセンブラ 35 FM-8 馬場 二郎氏
2PASS DISASSEMBLER 39 FM-8 馬場 二郎氏 6809エディタ・アセンブラ用ソース
スクリーン・アセンブラ 26 FM-8 アニーバンネス氏
工学社 1983年7月25日 FM-7/8活用研究 SUPER MONITOR 16 FM-7/8 アニーバンネス氏
エディタ・アセンブラ V2.0 27 FM-7/8 馬場 二郎氏
F-BASIC EXPANDER内の拡張モニタ 57 FM-7/8 笠作 貴弥氏
工学社 1984年4月10日 FM-7/11活用研究 URA DOS添付のSUPER MONITOR 113 FM-7 DOSのTom氏
エディタ・アセンブラ⇔BASICコミュニケーションプログラム 121 FM-7 吉川 尚之氏 エディタ・アセンブラV2.0 をALL RAM MODEで使う。
micro-vi 129 FM-7 津田 伸彦氏 プレインテキストとF-BASICコメント文の両方対応
システム開発用簡単エディタ EDIT_S 160 FM-7/11 T.T.S.氏 ファイル管理はF-BASIC等で行う
工学社 1985年3月15日 FM-7/11活用研究[第2集] BASE09 17 FM-7/8 キャリーラボ
エディタ・アセンブラ V3.1 49 FM-7/8 馬場 二郎氏
MTOOL09 73 FM-7/8 越野 洋介氏 アブソリュートアセンブラ用ソース
Semi-Automatic Disassembler 189 FM-7/8 越野 洋介氏
エディタ・アセンブラ V2.0 のFM-11への移植 176 FM-11 猪股 宏文氏
ソフトバンク 1987年6月 Oh!FM スーパー簡易アセンブラ 122 FM-7
ソフトバンク 1987年9月 Oh!FM トレーサ&ディスアセンブラ 42 FM-7/8/ 11
ソフトバンク 1988年8月 Oh!FM 標準マクロアセンブラ D-ASM 18 FM-7/77 /AV 滝本 真澄氏 裏RAM上に常駐
エディタアセンブラ BASM 60 FM-7/8/ 11 加藤 宏光氏
スクリーンエディタ BAS-DUET 51 FM-7/77 /AV 三谷 直之氏
ASM-JOIN 58 FM-77 /AV 三谷 直之氏 D-ASMとBAS-DUETの切り替え
ソフトバンク 1989年6月 Oh!FM 6809用トレーサ Dr.コロンボ 72 FM-7/77 /AV 戸田 浩氏
ソフトバンク 1989年8月 Oh!FM 6809ソースジェネレータ Dr.ルパン 120 FM-7/77 /AV 戸田 浩氏 アブソリュートアセンブラ用ソース
ソフトバンク 1990年1月 Oh!FM ソースオプティマイザ ライト兄弟 108 FM-7/77 /AV 戸田 浩氏 アブソリュートアセンブラ用、Draco C用
徳間書店 1984年10月 テクノポリス テクポリ特製アセンブラ 121 FM-7 イイシャンテン氏 ソースはF-BASICテキストのコメントで記述
CQ出版 1982年8月 インターフェース ASSIST09のFM-8への移植 138 FM-8 高橋豊氏 オリジナルはMOTOROLA社
CQ出版 1984年11月 インターフェース別冊
6809ソフトウェア開発
アセンブラ/エディタ 58 FM-7/8 高橋豊氏 デバッガはASSIST09
ソフトバンク 1985年8月18日 FMマシン語活用レクチャー MY ASSEMBLER 215 FM-7/N7 /77/8 河合 宏之氏 ISBN4-930795-109-C0055 \2000E
ソフトバンク 1985年12月18日 Making of 6809 Assembler―作って学ぶエディタ・アセンブラ アセンブラ V1.0 97 FM-7/N7 /77 菅原 博英氏 ソースはF-BASICテキストのコメントで記述
エディタ・アセンブラ V2.0/2.1/2.5 189 FM-7/N7 /77 菅原 博英氏 ISBN4-930795-13-3-C0055 \2500E
秀和システム 1985年4月22日 FM-7シリーズ解析マニュアルエクストラ ASM9 205 FM-7/N7 /77 北島 秀樹氏 ソースはF-BASICテキストのコメントで記述
ISBN4-87966-044-2 C0000 \2500E
秀和システム 1984年6月24日 FM-7/N7/77ユーテリティプログラム応用実例集 拡張モニタ EXMON 11 FM-7/N7 /77 塩見 真一氏 ISBN4-87966-020-5 C0000 \2500E
フルスクリーンエディタ EDIT20 97 FM-7/N7 /77 箕原 辰夫氏
ミニアセンブラ MINIASM9 196 FM-7/N7 /77 小関 順氏
ディスアセンブラ DISASM 247 FM-7/N7 /77 中村 英都氏
シミュレーションデバッガ DEBUG 273 FM-7/N7 /77 印南 比呂志氏
ネットで公開のもの
Aufheben Software OS-0 OS-0付属のED FM-7/N7 /77 大山 礼仁氏 http://software.aufheben.info/ooholdpc/os0.html
OS-0付属のASM0 FM-7/N7 /77 大山 礼仁氏
OS-0付属のDISASM0 FM-7/N7 /77 大山 礼仁氏
アセンブラ:◎=マクロ機能あり、△=ラインアセンブラ
逆アセンブラ:○=ソースジェネレート、△=ライン逆アセンブラ
デバッガ:○=ブレークポイント、もしくはトレース機能

●富士通製アブソリュートアセンブラです。(各画像をクリックするとフルサイズの画像になります。)

ASM09_000
・まずは起動画面です。
・SOFT:FM-7 アブソリュートアセンブラ V1.1
・型格:SM07317-A111
・機種:FM-7シリーズ、FM-8 + F-BASIC V2.0
・起動:F-BASIC V3.0 L1.0 (830311版)
・動作条件:F-BASIC V2.0以上(FM-8可)
・オリジナルフロッピーは F-BASIC V3.0 L1.0 で起動します。
 ドライブ数、ファイル数はデフォルトの通り(=2 drive, 1 file)とします。
 (増やすとメモリ不足で動作しない可能性があります。)
 サンプルプログラム等も添付されず、あっさりとした内容です。

ASM09_001
・せっかくなのでサンプルプログラムを作成してみます。
・F-BASIC のコメント行で記載します。作成後に、忘れずに アスキーセーブ します。

ASM09_002
・上記をアセンブルしてみた結果です。
・SOFT:FM-7 アブソリュートアセンブラ V1.1
・PROGRAM:ASM09、ASM09EB
・ソースファイル指定は必須です。リスト出力とオブジェクト出力は省略可能です。
・LIST DEVICE は、"SCRN: もしくは "LPT0: を指定します。
・この例ではオンメモリにオブジェクトコードを生成しているので、即実行してみてます。


サポートされている入出力ファイル・デバイスは次の通りです。

ファイル入出力 直接出力
カセット ディスク バブル メモリ 画面 プリンタ
ソース
オブジェクト
リスト
ソースファイルは、F-BASIC のコメント文(')で記述し、かつアスキーSAVEされている必要が
あります。
どれだけ使っていた人がいたか微妙ですが、カセットベースでの運用も可能となっています。
この場合、オブジェクトはメモリに出力して、別途カセットにセーブする必要があります。
バブルメモリカセットは、FM-8 + F-BASIC V2.0 で利用する場合に使用可能です。
オブジェクトをメモリに出力する場合には、 $4000〜$6FFF の範囲にしないと、アセンブラ
やDISK BASICを破壊しますので要注意です。
オブジェクトをオンメモリに出力するか否かは、ASM09の操作では指定できず、ソースファイル
中の OPT疑似命令で指定します。(これはかなり不便な仕様と思います。)

OPT疑似命令(*はデフォルト設定値)
* OBJ  ファイルにオブジェクトコード生成する
 NOOBJ ファイルにオブジェクトコード生成しない
* MEM  オンメモリにオブジェクトコード生成する 
 NOMEM オンメモリにオブジェクトコード生成しない
* LIST  ソースおよびオブジェクトコードのリストを生成する
 NOLIST ソースおよびオブジェクトコードのリストを生成しない
* GEN  リスト生成時、FCC/FCB/FDB命令の展開系の全てを印刷する
 NOGEN リスト生成時、FCC/FCB/FDB命令の展開系の全てを印刷しない(先頭の1or2バイトのみ印刷)
* SYM  シンボルテーブルリストを生成する
 NOSYM シンボルテーブルリストを生成しない
* W   警告メッセージを印刷する
 NOW  警告メッセージを印刷する
 PAGE=nn プリンタ印刷時の1ページの行数。10≦nn≦255の範囲で。デフォルトは 58。
 LLEN=nn プリンタ印刷時の1行の桁数。  50≦nn≦130の範囲で。デフォルトは 79。

ASM09メモリマップ
     0 -+-------------------------------------+
        |          F-BASIC ワークエリア       |
   BF9 -+-------------------------------------+
        |              ASM09                  |
  140E -+-------------------------------------+
        |              変数領域               |
       -+-------------------------------------+
        |           文字領域、スタック        |
  1800 -+-------------------------------------+
        |                                     |
        |              ASM09EB                |
        |                                     |
  3D90 -+-------------------------------------+
        |                                     |
        |         シンボルテーブル領域        |
        |                /                   |
        |        オブジェクトコード領域       |
        |                                     |
  71D5 -+-------------------------------------+
        |             DISK BASIC              |
  8000 -+-------------------------------------+
        |                                     |
        |            F-BASIC ROM              |
        |                                     |
        |                                     |
  FC00 -+-------------------------------------+
        |          I/O、BOOT ROM他            |
  FFFF -+-------------------------------------+
ASM09_003
・カセットテープからソースを読み込んでアセンブルしてみた例です。
・SOFT:FM-7 アブソリュートアセンブラ V1.1
・PROGRAM:ASM09、ASM09EB
・PASS1 で、PLAY ボタンを押しなさい、
 PASS2 で、巻き戻しなさい、PLAY ボタンを押しなさい
 というステップが追加されます。(ASM09EB 内部が 2PASS であることがわかります。)
 それ以外は DISKから読み込む場合と違いはありません。
・オブジェクトコードはカセットテープには出力できませんので、オンメモリ出力にするか、ディスクに出力します。


参考文献
82SM-000050-1 参考文献:FM-7 アブソリュートアセンブラ解説書 1983年6月(富士通)


●馬場二郎さんによる、エディタ・アセンブラです。

FM-7/8シリーズの定番開発環境として一世を風靡した、エディタ・アセンブラです。
いくつかバージョンが発表されています。
(はせりんは現役時代には使ったことなかったのですが...)

EDASMV1_000
・オリジナル版の エディタ・アセンブラ V1.0 です。
・SOFT:エディタ・アセンブラ V1.0
・開発者:馬場 二郎さん
・機種:FM-8 (I/O誌には BM-L3への移植記事があります)
・掲載誌:I/O 1982年3月号、FM-8活用研究
・左の画面は、あらかじめ作成しておいたテキストファイルを読み込んだ後、エディタ・アセンブラを起動した様子です。
・ファイルの管理機能がないため、既存のテキストファイルはエディタアセンブラの起動前に読み込んでおきます。
 テキストとは言いながら、$1000〜 をバイナリで SAVE しておく必要があります。
 (SAVEM のアドレスは、R コマンドで事前に確認しておきます。)

EDASMV1_001
・さっそくアセンブルを実行してみます。
・SOFT:エディタ・アセンブラ V1.0
・機種:FM-8
・2PASS アセンブラですが、1、2 と手動で実行します。
 1 ラベル登録
 2 コード生成、リスト出力
・最後に B コマンドで F-BASIC のモニタ(MON) に戻っています。
 (直接 F-BASIC には戻れないようです。)

EDASMV1_002
・生成されたオブジェクトコードを実行してみます。
・SOFT:エディタ・アセンブラ V1.0
・機種:FM-8
・モニタから、G6000 で実行します。
 すると、Hello World. が正しく表示されるのですが、なぜかエディタ・アセンブラに戻ってしまいます。
・そこで再度 B コマンドでモニタに移動した後、CTRL-C で F-BASIC に戻ります。
 F-BASIC 上から EXEC &H6000 を実行すると、正しく Hello World. が表示された後、F-BASIC に戻ります。

コマンド
 1            アセンブラのPass 1(ラベル登録)を実行する
 2            アセンブラのPass 2(コード生成)を実行する
 B            BASIC (もしくはMON) に戻る
 Dxxxx[,yyyy] テキストの削除
 Ixxxx        テキストの入力(追加)、カラ行でコマンドに戻る
 L[xxxx]      テキスト表示
 Mxxxx        xxxx行を削除し、その場所に入力
 P            プリンタ ON/OFF 切り替え
 R            システム・リポート
 S            テキスト・クリア
 T            アセンブル時のリスト表示 ON/OFF 切り替え

制限事項:
 ANDCC は ANDC と記述。
 ,PCR は ,PC と記述。
 ラベル間の演算は足し算のみ。(-でも+演算される。)
 エディタが貧弱であり、1文字間違えても1行入力しなおしになる。
 FM-7ではうまくモニタ(MON)にもどらないため、FM-8(F-BASIC V1.0)専用と考えた方がよい?

エディタ・アセンブラ メモリマップ
     0 -+-------------------------------------+
        |          F-BASIC ワークエリア       |
   xxx -+-------------------------------------+
        |               空き                  |
  1000 -+-------------------------------------+
        |            テキストエリア           |  テキストファイルは、F-BASICに戻り 
        |             ↓      ↓              |  LOADM, SAVEM で管理する必要がある。
        |                                     |  (富士通版アセンブラとは非互換)
  4000 -+-------------------------------------+
        |                                     |
        |              EDASM本体              |
        |                                     |
  5500 -+-------------------------------------+
        |           ラベル・テーブル          |
        |             ↓      ↓              |
        |                                     |
        |             ↑      ↑              |
        |          システム・スタック         |
 (71D5)-+-------------------------------------+
        |           (DISK BASIC)            |
  8000 -+-------------------------------------+
        |                                     |  F-BASIC ROMは、BIOSのみ使用。
        |            F-BASIC ROM              |  (BIOS さえあれば裏RAM動作可)
        |                                     |
        |                                     |
  FC00 -+-------------------------------------+
        |          I/O、BOOT ROM他            |
  FFFF -+-------------------------------------+

エディタ・アセンブラV1.0発表から一年、かなり強化されたV2.0が発表されました。
強化点は次の通りで、特にエディタが改善されてます。
・ブロックコピー、移動機能
・サーチ機能
・ポインタ(行単位)の追加
・ヘルプ機能(コマンドリスト)
・スクリーンエディタ内蔵(Lコマンドの直後のみ)
・クロスリファレンス出力可能

EDASMV2_000
・エディタ・アセンブラ V2.0 です。
・SOFT:エディタ・アセンブラ V2.0
・開発者:馬場 二郎さん
・機種:FM-7/8
・掲載誌:I/O 1983年5月号、FM-7/8活用研究
 (FM-7/11活用研究にてBug Fix記事あり:$5B87=$4E)
・左の画面は、あらかじめ作成しておいたテキストファイルを読み込んだ後、エディタ・アセンブラを起動した様子です。
・ファイルの管理機能がないため、既存のテキストファイルはエディタアセンブラの起動前に読み込んでおきます。
 テキストとは言いながら、$1000〜 をバイナリで SAVE しておく必要があります。
 (SAVEM のアドレスは、R コマンドで事前に確認しておきます。)

EDASMV2_001
・アセンブル及び生成結果の実行例です。
・SOFT:エディタ・アセンブラ V2.0
・機種:FM-7/8
・2PASS アセンブラですが、1、2 と手動で実行します。
 1 ラベル登録
 2 コード生成、リスト出力
・最後に B コマンドで F-BASIC に戻り、生成されたオブジェクトコードを実行しています。


コマンド
 1               アセンブラのPass 1(ラベル登録)を実行する
 2               アセンブラのPass 2(コード生成)を実行する
 B               BASIC (もしくはMON) に戻る
 Cxxxx,yyyy,zzzz xxxx行からyyyy行までをzzzz行の後ろにコピー
 Dxxxx[,yyyy]    テキストの削除
 E               テキストの末尾からインサートモードへ
 Gxxxx,yyyy,zzzz xxxx行からyyyy行までをzzzz行の後ろに移動
 H               コマンドリストを表示
 Ixxxx           テキストの入力(追加)、カラ行でコマンドに戻る
 L[xxxx]         テキスト表示
 Mxxxx           xxxx行を削除し、その場所に入力
 P               プリンタ ON/OFF 切り替え
 Q"string"       ポインタ行より文字列をサーチし、見つかったらポインタをその行に移動
 R               システム・リポート
 S               テキスト・クリア
 T               アセンブル時のリスト表示 ON/OFF 切り替え
 U               ポインタを0(先頭)に
 Www,hh          画面サイズ指定。ww=80/40, hh=25/20
 X               クロスリファレンス出力

制限事項:
 Lコマンドでテキスト表示した後のみ、スクリーンエディット可能。
 ポインタが使えるコマンドは L, Q, U のみ。
 以下はV1.0と同じ制限:
  ANDCC は ANDC と記述。
  ,PCR は ,PC と記述。
  ラベル間の演算は足し算のみ。(-でも+演算される。)

エディタ・アセンブラ V2.0 メモリマップ
     0 -+-------------------------------------+
        |          F-BASIC ワークエリア       |
   xxx -+-------------------------------------+
        |               空き                  |
  1000 -+-------------------------------------+
        |            テキストエリア           |  テキストファイルは、F-BASICまたは 
        |             ↓      ↓              |  その他のモニタプログラムに戻り、
        |                                     |  LOADM, SAVEM等で管理する必要がある。
        |                                     |  (富士通版アセンブラとは非互換)
  4000 -+-------------------------------------+
        |                                     |
        |              EDASM本体              |
        |                                     |
  5C00 -+-------------------------------------+
        |           ラベル・テーブル          |
        |             ↓      ↓              |
        |                                     |
        |             ↑      ↑              |
        |          システム・スタック         |
 (71D5)-+-------------------------------------+
        |           (DISK BASIC)            |
  8000 -+-------------------------------------+
        |                                     |  F-BASIC ROMは、BIOSのみ使用。
        |            F-BASIC ROM              |  (BIOS さえあれば裏RAM動作可)
        |                                     |
        |                                     |
  FC00 -+-------------------------------------+
        |          I/O、BOOT ROM他            |
  FFFF -+-------------------------------------+

参考文献
I/O別冊 FM-8活用研究 1982年7月20日 (工学社)
I/O別冊 FM-7/8活用研究 1983年7月25日 (工学社)
I/O別冊 FM-7/11活用研究 1984年4月10日 (工学社)
I/O別冊 FM-7/11活用研究[第2集] 1985年3月15日 (工学社)


8.2 Kコンパイラ(拡張Kコンパイラ、K言語、IODOS9)

● アセンブラの次に登場するのは、津田伸秀さんによるこのK言語を置いて他に無いと言えましょう。
I/O誌では「拡張」Kコンパイラと敢えて呼んでましたが、一般には Kコンパイラ で通用しました。
(拡張でない Kコンパイラ はほとんど流通してないと思われます。)
I/O誌やPiO誌に数多くのソフトウェア、特にゲームが投稿され、一世を風靡してました。
また、FM-7/11活用研究に Kコンパイラ実行環境として IODOS9 が掲載されていました。
(詳細は コチラ を参照願います。)
K言語・コンパイラ関連についてはせりんの知る限りの情報を下記にまとめておきましたが、モレもあると思います。
ご存じの方はぜひお知らせください。

・概要
 IF-THEN-ELSE、REPEAT-UNTIL、WHILE-WEND といった構造化構文を持つ一方で、
 CODE文で機械語を直接埋め込むような小回りも効く、軽量なコンパイラ言語。
 当初は 6809マシン(FM-8/7、BM-L3、MB-S1)でのみ動作したが、その後 Z80マシン
 (PC-8801)や8086マシン(PC-9801、FM16β)にも移植されている。
・コンパイル処理:1 PASS
          オンメモリ ファイル
 ソース入力     ○     ○
 オブジェクト出力  ○     ×
 (6809版では)オブジェクトコードはリロケータブル。ただしランタイムの位置は
 コンパイル時に固定される。

・まずはおさらいです。
 石井 正秀氏による分類(出展:I/O 1988年2月号)がわかりやすいです。
オンメモリ版 ファイル版
略号 掲載誌 適用機種 略号 適用機種 略号 備考
Kコンパイラ - I/O 1982年3月号 FM-8 - - - オリジナル版(はせりん追記)
拡張Kコンパイラ K1 FM-8活用研究 (1982年7月) FM-8 M1 FM-8 F1 V1.3(RT=V1.3、KC=V1.2)
拡張Kコンパイラ K2 I/O 1983年3月号 FM-7/8 M2 - - K1に対するパッチ
拡張Kコンパイラ K3 FM-7/8活用研究 (1983年7月) FM-7/8 M3 FM-8 F3 V1.3改?
拡張Kコンパイラ K4 I/O 1983年11月号 - - FM-7 F4 K3に対するパッチ
拡張Kコンパイラ K5 FM-7/11活用研究 (1984年4月) FM-7/8 M5 FM-7/11 F5 V3.6(最終版)
上記は、雑誌・書籍に掲載された FM-7/8用Kコンパイラ本体 の一覧です。
市販版(カセットサービス、DISKサービス)は、上記の K1〜K5 以外のものも存在するようです。
存在が確認されているもの、存在すると思われるもの:
 V1.1 FM-8活用研究 にて、バグ修正情報掲載あり
 V1.2 FM-8活用研究 にて、V1.3 との違いは RT だけであると記載あり
 V2.0 maruan さんがお持ちの TAPE版のパッケージ付属のマニュアルに記載あり
 V3.3 maruan さんが実物をお持ち。FM-7/11活用研究 にて、コンパイル画面のハードコピー掲載あり
 (BM-L3用には V2.3 というのもあり、これは下記に出てきます。)

下記の表では掲載時の作者名をそのまま記載してますので、"COMPAC T"="COMPAC Td"="津田伸秀さん" です。

市販のもの
提供元 型格 発売年月 品名 価格 機種 メディア 備考
カセットサービス
コムパック 325 1982年4月頃 Kコンパイラ 5,000 BM-L3 TAPE 後に\4,500に値下げ
コムパック 397 1982年4月頃 Kコンパイラ 5,000 FM-8 TAPE 後に\4,500に値下げ
ブック型パッケージ(マニュアル付)
コムパック 813 1983年4月 拡張Kコンパイラ 4,500 FM-7/8 TAPE V2.0〜3.6(青箱)
コムパック CE-D006 1984年5月 拡張Kコンパイラ 5,800 FM-7/8/11 5inch 2D V3.6、1984年8月以降、\6,800
Wonder Soft FGD-01 1984年6月 IODOS9 9,800 FM-7 5inch 2D A5版ブックタイプ
エキスパートサービス (マニュアル無し)
コムパック WN-006T 1985年4月 K86コンパイラ 5,000 PC-9801/E/F 5inch 2D
コムパック WF-032T 1985年5月 K86コンパイラ 5,000 FM16β 5inch 2HD
コムパック WH-049T 1985年9月 拡張Kコンパイラ(要拡張RAM) 5,000 MB-S1 10/20 5inch 2D V3.6
コムパック WH-050T 1985年9月 拡張Kコンパイラ(要拡張RAM) 5,000 MB-S1 30/40 5inch 2HD V3.6
コムパック WN-064T 1986年11月 K80コンパイラ 5,000 CP/M-80 5inch 2D PC80/88シリーズ、X1シリーズ、FM-8/7シリーズ
EXシリーズ (ビニールケース、マニュアル付き)
Wonder Soft WN-006E 1985年8月 K86コンパイラ 9,800 PC-9801/E/F 5inch 2D
Wonder Soft WN-026E 1985年8月 K86コンパイラ 9,800 PC-9801M 5inch 2HD
雑誌・書籍掲載のもの (↓Kコンパイラ本体のソース/ダンプ/パッチ)
出版元 掲載誌・書 発行年月 タイトル 掲載ページ 機種 作者・開発元 ソース ダンプ パッチ 言語
仕様
備考
工学社 I/O 1982年3月 Kコンパイラ 225 FM-8/BM-L3 COMPAC T & S (オリジナル言語仕様)
I/O 1982年5月 拡張Kコンパイラ使用記 332 FM-8 COMPAC S リスト掲載なし
I/O 1982年6月 Kコンパイラ レポート 230 BM-L3 西川公子命氏 リスト掲載なし
I/O 1982年11月 独立モニタ(KコンパイラをオールRAMで使う) 314 FM-8 野尻 修氏
I/O 1983年3月 拡張Kコンパイラ 307 FM-7/8 COMPAC S
I/O 1983年4月 Kコンパイラグラフィックサブルーチン 174 FM-7/8 コンピ氏
I/O 1983年10月 Kコンパイラ三角関数サブルーチン 318 FM-7/8 渡辺 誠太郎氏
I/O 1983年11月 Kコンパイラファイル版 196 FM-7 COMPAC S
I/O 1984年12月 K86コンパイラ 337 PC-9801 吉田 美幸氏
I/O 1984年12月 拡張Kコンパイラ V2.3 全ソースリスト 350 BM-L3 春夏秋冬氏 言語仕様は差分のみ
I/O 1984年12月 Kコンパイラ用便利なエグゼキュータ 284 FM-7 桑畑 哲氏
I/O 1985年1月 Kコンパイラ Ver3.6 361 MB-S1/BM-L3 清水 宏一氏
I/O 1985年2月 IODOS9ユーティリティ 303 FM-7 Wonder Soft Sgn BATCH, DBASIC, FBASIC, FSEDIT, KEY
I/O 1985年3月 KコンパイラのDISK BASIC用への変更 231 FM-8 大村 浩氏 F-BASIC V2.0 対応
I/O 1985年3月 Kコンパイラ・ファイル版の改良 287 FM-7 高橋 良志氏 V3.6 の無駄スクロールを停止
I/O 1985年4月 FM Kコンパイラにスクロール命令を 323 FM-7/8 HYO氏
I/O 1985年5月 K86コンパイラon CP/M-86 196 FM16β エンジンルームA.M.氏
I/O 1985年6月 L3用KコンパイラV3.6の変更 286 BM-L3 MB-S1/40氏
I/O 1985年7月 IODOS9ユーティリティ 279 FM-7 TAKO氏
I/O 1985年7月 Kコンパイラで割り込みとファイル入出力を 265 FM-7/8 柏木 順二氏
I/O 1985年8月 IODOS9用LISTコマンド 292 FM-7 竹前 正弘氏
I/O 1985年9月 IODOS9ユーティリティ KF, MFILE 265 FM-7 エンジンルームO & Sgn
I/O 1985年10月 Kコンバータ 273 FM-7/8 宮崎 潔氏
I/O 1985年10月 K80コンパイラ 321 PC-8801 エンジンルームH.O.&K.Y.氏
I/O 1986年2月 IODOS9ユーティリティ F-BASICで読めるフォーマットを 270 FM-7 Hiroshi & Azuki氏
I/O 1986年2月 K86 SUBの高速化 317 PC-9801 旭井 洋一郎氏
I/O 1986年4月 IODOS9ダンプリスト打ち込みツール 194 FM-7 長谷 勇治氏
I/O 1986年7月 ロングソースKコンパイラ 234 FM-7 桑畑 哲氏
I/O 1986年7月 IODOS9 FSEDIT用ファイル版Kコンパイラ 278 FM-7 竹前 正弘氏
I/O 1986年8月 IODOS9 FILE日付を記録 223 FM-7 竹前 正弘氏
I/O 1986年10月 K80コンパイラ 222 CP/M-80 元議長氏
I/O 1988年2月 逆Kコンパイラ&リロケータ 155 FM-7 石井 正秀氏
I/O 1988年3月 Kコンパイラリロケートユーティリティ 石井 正秀氏
工学社 FM-8活用研究 1982年7月20日 拡張版Kコンパイラ(V1.3) 14 FM-8 COMPAC T & S
工学社 FM-7/8活用研究 1983年7月25日 拡張Kコンパイラ 126 FM-7/8 COMPAC T & S & N V1.x(?)
Kコンパイラ用グラフィック・サブルーチン 134 FM-7/8 コンピ氏
Kコンパイラ用グラフィック・サブルーチン 追加版 136 FM-7/8 茶谷 公之氏
工学社 FM-7/11活用研究 1984年4月10日 拡張Kコンパイラ V3.6 81 FM-7/11 COMPAC Td & St & Sgn
IODOS9 93 FM-7 Wonder Soft Sgn ハイメモリ版ランタイム、KDコンパイラ
Kコンパイラ有象無象 105 COMPAC S
Kコンパイラで文字変数を使う 108 石井 正秀氏
Kコンパイラ用三角関数サブルーチン 178 FM-7/11 渡辺 誠太郎氏
工学社 FM-7/11活用研究[第2集] 1985年3月15日 Kコンパイラ用便利なエグゼキュータ 184 FM-7 桑畑 哲氏
IODOS9を使い易く! 185 FM-7 竹前 正弘氏
工学社 S1活用研究 1985年10月25日 Kコンパイラ Ver3.6 274 MB-S1 清水 宏一氏 (BM-L3用パッチは掲載なし)
Kコンパイラの使い方 281 (編)

★最終版の、FM-7/11活用研究に掲載された V3.6 です。
K_000
・FM-7/11活用研究の記事中のファイル一覧です。
・記事中にファイル名指定のないものは、はせりんが勝手に命名しています。
・RT、K はオンメモリコンパイル用で、 FM-7シリーズ(F-BASIC V3.0)と FM-8 で共通に使えます。
・RTF、KF はファイル版コンパイル用で、 FM-7シリーズ(F-BASIC V3.0)用ですが、パッチを当てることで他の機種でも使えます。
・RELOC.K、EXEC.K はFM-7で裏RAMを使ったコンパイル時に使用します。
・MAIN は、ファイル版でコンパイルする時に使用します。
・MAIN2 は、上記にパッチをいくつか当てたものです。(詳細は後述)
・SAMPLE.K はサンプルプログラム、SAMPLE.B はそれを F-BASIC で書き直したものです。

K_010
・SAMPLE.K の中味です。
・この例はで予約語を小文字で書いてます。大文字小文字はどちらでも良いようです。

K_011
・SAMPLE.B です。
・上記 SAMPLE.K と同じ動きをします。

K_001
・まずはオンメモリ版でサンプルプログラムをコンパイルしてみます。
・機種:FM-8、FM-7/NEW7/77、FM77AVシリーズ
・対応F-BASIC:V1.0、V2.0、V3.0
・プログラム:RT、K
・オンメモリ版では、Kコンパイラ本体が $2000〜 に居座っているため、
 あまり大きなソースをコンパイルすることができません。

K_002
・実行してみます。あっという間に実行完了します。
・あまりに速いので 10回繰り返して実行したところ 5.4sec でした。
 対する SAMPLE.B の方は 2.8sec でしたので、Kコンパイラの方が 5.2倍高速、という結果でした。

Kコンパイラ オンメモリ版メモリマップ
     0 -+-------------------------------------+
        |          F-BASIC ワークエリア       |
   xxx -+-------------------------------------+
        |                                     |
        |          ソース・プログラム         |
        |                                     |
       -+-------------------------------------+
        |      変数領域、文字領域、スタック   |
  2000 -+-------------------------------------+
        |                                     |
        |           Kコンパイラ本体           |
        |           (リロケータブル)          |
        |                                     |
  41FF -+-------------------------------------+
        |                                     |
  4300 -+-------------------------------------+
        |    Kコンパイラ・シンボルテーブル    |
  4B00 -+-------------------------------------+
        |    Kコンパイラ・作業用エリア        |
  4C00 -+-------------------------------------+
        |         実行時ワークエリア          |
  4D00 -+-------------------------------------+
        |        ランタイム・ルーチン         |
  5000 -+-------------------------------------+
        |                                     |
        |        オブジェクト・コード         |
        |         (リロケータブル)            |
        |                                     |
  71D5 -+-------------------------------------+
        |             DISK BASIC              |
  8000 -+-------------------------------------+
        |                                     |
        |            F-BASIC ROM              |
        |                                     |
        |                                     |
  FC00 -+-------------------------------------+
        |          I/O、BOOT ROM他            |
  FFFF -+-------------------------------------+
K_006
・続いて、オンメモリ版の裏RAMコンパイルを試してしてみましょう。
・機種:FM-7/NEW7/77、FM77AVシリーズ
・対応F-BASIC:V3.0
・プログラム:RT、K、RELOC.K、EXEC.K
・事前準備として、Kコンパイラ本体を裏RAMへ転送します。$C000 は転送先の例です。

K_007
・次に、EXEC.K(裏RAMエグゼキュータ)をコンパイルだけしておきます。
・その後、CLEAR文 で使用メモリを拡大した後、ソースファイルを読み込ませます。
 単に裏RAMへ移すだけなので、コンパイラの使うワークエリアは元のアドレスに残ったままです。

K_008
・Kコンパイラの呼び出し方法が通常版とは異なり、先ほど事前にコンパイルしておいたエグゼキュータで呼び出します。
 アドレスを2回指定するので面倒ですね。
・無事コンパイルできました。

K_009
・オブジェクトコードは通常版と同じで $5000〜 に格納されます。
・問題なく実行できました。
・裏RAMコンパイルは、このように非常に手間のかかるものです。
 リロケータやエグゼキュータを事前にコンパイルしておいて、
 例えばオブジェクトコード領域の後ろの方に置いておけば多少は楽になりますが、
 カセットベースでは大変だったと思います。

Kコンパイラ オンメモリ版裏RAM使用時 メモリマップ
     0 -+-------------------------------------+
        |          F-BASIC ワークエリア       |
   xxx -+-------------------------------------+
        |                                     |
        |          ソース・プログラム         |
        |                                     |
       -+-------------------------------------+
        |      変数領域、文字領域、スタック   |
  41FF -+-------------------------------------+
        |                                     |
  4300 -+-------------------------------------+
        |    Kコンパイラ・シンボルテーブル    |
  4B00 -+-------------------------------------+
        |    Kコンパイラ・作業用エリア        |
  4C00 -+-------------------------------------+
        |         実行時ワークエリア          |
  4D00 -+-------------------------------------+
        |        ランタイム・ルーチン         |
  5000 -+-------------------------------------+
        |                                     |
        |        オブジェクト・コード         |
        |         (リロケータブル)            |
        |                                     |
  71D5 -+-------------------------------------+
        |             DISK BASIC              |
  8000 -+-------------------------------------+  8000 -+-------------------------------------+
        |                                     |        |                                     |
        |            F-BASIC ROM              |        |                                     |
        |                                     |  C000 -+-------------------------------------+
        |                                     |        |                                     |
        |                                     |        |           Kコンパイラ本体           |
        |                                     |        |           (リロケート後)            |
        |                                     |        |                                     |
        |                                     |  E1FF -+-------------------------------------+
        |                                     |        |                                     |
  FC00 -+-------------------------------------+  FC00 -+-------------------------------------+
        |          I/O、BOOT ROM他            |
  FFFF -+-------------------------------------+

K_005
・最後にファイル版でのコンパイル&実行です。
・その前に MAIN2 の追加部分を解説しておきます。55行と、140行以降を追加しています。(黄色着色部分)
・230行、240行は、I/O誌1988年2月号 P.155 掲載の石井正秀氏によるパッチ情報です。280行は、by はせりん です。
・V3.6のファイル版はコンパイル時に画面が無駄にスクロールアップするのですが、230行でそれを止めてます。
 これは恐らく市販版では修正されていると思われます。(リストの掲載漏れのようなので)
・240行、280行で、FM-8 の F-BASIC V1.0/V2.0 に対応しています。

K_003
・それでは、ファイル版でコンパイルしてみましょう。
・機種:FM-8、FM-7/NEW7/77、FM77AVシリーズ
・対応F-BASIC:V1.0、V2.0、V3.0
・プログラム:RTF、KF、MAIN2

K_004
・問題なく実行できました。
・メモリマップはオンメモリ版とほぼ同じですので省略します。


★maruanさん秘蔵の、パッケージ版Kコンパイラ(V3.3)です。
KC33_000
・まずは外観です。
・よく姪botちゃんが紹介してるやつです。

KC33_001
・maruanさんにTAPEの中味を表示してもらいました。
・何と、RT と K の2つしか入ってない!
・RTF、KF は自分でパッチあてろ、と付属マニュアルに書いてあるそうです...orz

KC33_002
・maruanさんにコンパイルを実行してもらいました。
・Version 3.3 という表示が出てます。
・付属マニュアルには、V2.0 に関する記載もあるそうです。


参考文献
I/O別冊 FM-8活用研究 1982年7月20日 (工学社)
I/O別冊 FM-7/8活用研究 1983年7月25日 (工学社)
I/O別冊 FM-7/11活用研究 1984年4月10日 (工学社)
I/O別冊 FM-7/11活用研究[第2集] 1985年3月15日 (工学社)


8.2.1 SYS-9コンパイラ

● SYS-9というのは、元々は津田伸秀さんによるApple II+6809(TOMATO-9等)のシステム向けの
統合開発環境だったそうですが、そのサブセット版がFM-8用として提供されていました。
(ディスクBASIC版と、FLEX版)

・概要
 Kコンパイラ作者の津田伸秀さん自身による、Kコンパイラの進化版。
 IF-THEN-ELSE、REPEAT-UNTIL、WHILE-WEND といった構造化構文を持つ一方で、
 CODE文で機械語を直接埋め込むような小回りも効く、軽量なコンパイラ言語。
 F-BASIC用ディスク版の他に、FLEX版も存在するとのこと。
 オンメモリコンパイルを意識したKコンパイラと比較し、メモリマップも改良されており、
 ランタイムとオブジェクトは連結した状態でリロケータブル。
・掲載誌はKコンパイラと異なり月刊マイコン誌、ソフトウェアの発売はアスターインターナショナル。
 Kコンパイラ(\4,500〜\6,800)と比較し \29,800 と若干高めの設定。
・武市好浩さん作のゲーム、LOLITA II 及び FINAL LOLITA が、SYS-9を用いて開発されたとされている。
・コンパイル処理:1 PASS
          F-BASICディスク版 FLEX版
 ソース入力    ファイル      ファイル
 オブジェクト出力 オンメモリ     ファイル

市販のもの
提供元 型格 発売年月 品名 価格 機種 メディア 備考
アスターインターナショナル 1983年2月頃 SYS-9コンパイラ 29,800 FM-8 5inch 2D (F-BASIC用ディスク版)
雑誌・書籍掲載のもの (↓SYS-9コンパイラ本体のソース/ダンプ/パッチ)
出版元 掲載誌・書 発行年月 タイトル 掲載ページ 機種 作者・開発元 ソース ダンプ パッチ 言語
仕様
備考
電波新聞社 マイコン 1982年12月 高速言語SYS-9 380 FM-8 津田伸秀氏
電波新聞社 マイコン 1983年1月 高速言語SYS-9 387 FM-8 津田伸秀氏
電波新聞社 マイコン 1983年2月 高速言語SYS-9 393 FM-8 津田伸秀氏
電波新聞社 マイコン 1983年3月 高速言語SYS-9 401 FM-8 津田伸秀氏


SYS9_000
・マイコン誌掲載版(version 3.0)を打ち込んでみました。
・SYS9 がコンパイラ本体です。
・com は F-BASIC で書かれたコンパイラドライバです。複数ファイルを連続してコンパイル可能です。
・hilbert は、ヒルベルト曲線を描画するデモプログラムです。グラフィックライブラリも含まれています。
 ソースコードは、ASCII形式で格納しておきます。

SYS9_001
・さっそくコンパイルしてみます。
・オブジェクトコードは、$1300 から格納されます。
 コンパイラドライバにより、PF5 に EXEC &H1300 が登録されるので、ボタン一発で実行します。
・画面に表示されるオブジェクトコードのサイズは、$300バイトのランタイムを含んでいます。
 したがって、オブジェクトを SAVE する際には、
  SAVEM"ファイル名",&H1000,&H1000+オブジェクトサイズ,&H1300
 とします。

SYS9_002
・実行結果です。

SYS9_003
・I/O別冊FM-8活用研究に掲載されていた、Shierpinski曲線のKコンパイラソースをコンパイルしてみました。
・Kコンパイラソースはそのまま喰えるようです。
・これはエラーを取り切った後の状態なのでノーエラーですが、INPUT文に違いがあるようでした。詳細調査中。

SYS9_004
・実行結果です。


  SYS-9コンパイラ メモリマップ
               コンパイル前      コンパイル後
      $0000-+--------------------+
            |ワーク              |
   TEXT TOP-+--------------------+
            |com                 |
            |(コンパイラドライバ)|
           -+--------------------+ 
            |スタックエリア      |
      $1000-+--------------------+ - +------------------+
            |SYS-9ランタイム     |   |SYS-9ランタイム   |
            |(リロケータブル)    |   |(リロケータブル)  |
      $1300-+--------------------+ - +------------------+
            |                    |   |                  |
            |SYS-9コンパイラ     |   |オブジェクトコード|
            |(リロケータブル)    |   |(リロケータブル)  |
      $3Cxx-+--------------------+   |                  |
            |                    |   |                  |
            |シンボルテーブル    | - +------------------+
            |オブジェクトコード  |
            |(テンポラリ)        |
            |                    |
      $6E00-+--------------------+
            |コンパイラ・ワーク  |
      $6F00-+--------------------+
            |空き                |
      $71D5-+--------------------+
            |(DISK-BASIC)        |
      $8000-+--------------------+
            |BASIC ROM           |
            |                    |
            |                    |
      $FC00-+--------------------+
            |I/Oなど             |
      $FFFF-+--------------------+
SYS9_005
・これまで紹介してきたSYS-9はFM-8(F-BASIC V1.0x)用ですが、簡単な変更でFM-7(F-BASIC V3.0x)で動かすことができました。 コンパイラドライバ com に対して3行追加して(黄色着色部分)、ランタイムにパッチを当てています。
アドレスFM-8FM-7備考
$100B$D336$D0721文字入力
$1026$D352$D08E1文字出力
$103C$DA50$D8071行入力
・この様子だと、同じマイクロソフトBASICを使っている BM-L3 や MB-S1 でも動かせそうです。
 (グラフィックライブラリは別途作成必要ですが...)

SYS9_006
・上記のパッチを当てた即席のFM-7用SYS-9コンパイラでコンパイルしてみた様子です。
スクリーンショットは省略しますが、オブジェクトも問題なく実行できています。
・あといじれそうなところは、コンパイラワークエリアの末尾番地(=空きエリア開始番地)です。($1303)
 $7000 に設定したところ、問題なくコンパイルできました。
 URA-DOS等で表RAMを限界まで使える場合は、$7F00 まで行けると思います。


参考文献
月刊マイコン 1982年12月号(電波新聞社)
月刊マイコン 1983年1月号(電波新聞社)
月刊マイコン 1983年2月号(電波新聞社)
月刊マイコン 1983年3月号(電波新聞社)


8.3 GAMEインタプリタ、コンパイラ

● 続いては、大西博さんが開発された GAME言語と、大西さん他多数の方が開発されたその処理系(インタプリタ、コンパイラ)です。
GAME とは General Algorithic Micro Expressions の略だそうで、Tyny-BASIC系の記号化言語です。
1980年±2年頃にパソコンいじった人は、いちどはお世話になってると思います。
オリジナルは大西さんによる6800(H68/TR)版のインタプリタですが、その後 8080版とそれ用のコンパイラが開発され、
その後続々と当時のメジャーなパソコンにはほとんど移植され、アスキー誌で一世を風靡してました。
ところが、FM-7/8シリーズ用は発表されたのが1984年と若干旬を過ぎた頃でした(TL/1 for FM-7/8が先に発表された)ので、
印象がちょっと薄いかもしれません。
GAME言語とその処理系については他の方が詳しく解説されているので、下記ははせりんの
興味のあるところに限定してまとめてあります。

・概要
 Tyny-BASIC系の記号化言語。データタイプは 8bit/16bit整数のみ。テキストエディタ内蔵。
 特長:省メモリ。
・GAME-FMコンパイル処理:2 PASS
          オンメモリ ファイル
 ソース入力     ○     ○
 オブジェクト出力  ○     ○

・GAMEは月刊アスキー誌やテープアスキー等で提供されていました。下記の表はその一部です。
TAPE-ASCII/月刊テープアスキー
提供元 型格 発売年月 品名 価格 機種 メディア 内容
アスキー - 1980年6月 TL/1 4,000 H68/TR TAPE TL/1-6800, GAME III
アスキー SP-0001 1980年10月 GAME-PC 4,000 PC-8001 TAPE GAME-PCインタプリタ、コンパイラ
アスキー - 1984年9月 月刊テープアスキー1984年9月号 3,000 FM-7/8/11 TAPE GAME-FMインタプリタ、コンパイラ V3.0
雑誌・書籍掲載記事(の一部)
出版元 掲載誌・書 発行年月 タイトル 掲載ページ 機種 作者・開発元 ソース ダンプ パッチ 備考
アスキー アスキー 1978年7月 GAME III 66 - 大西 博氏
アスキー 1978年8月 GAME III 42 6800 大西 博氏
アスキー 1978年9月 GAME III 68 6800 大西 博氏
アスキー 1978年10月 GAME III 66 6800 大西 博氏
アスキー 1978年11月 GAME68 H68/TR 池田 弘人氏
アスキー 1979年1月 GAME80インタプリタ 38 TK-80BS 高岡 洋一氏
アスキー 1979年4月 GAME-Z80 TRS-80 沢田 昌宏氏
アスキー 1979年7月 GAME80コンパイラ 26 TK-80BS 中島 聡氏
アスキー 1979年10月 GAME65 PET 鈴木 仁志氏
アスキー 1979年10月 GAME-MZインタプリタ、コンパイラ 30 MZ-80K/C 間宮 信義氏
アスキー 1980年2月 GAME-APPLE 68 APPLE ][ 鈴木 直哉氏
アスキー 1980年4月 GAME-APPLEコンパイラ 86 APPLE ][ 力武 健次氏
アスキー 1980年5月 GAME-APPLE DOSサポート 196 APPLE ][ 鈴木 直哉氏
アスキー 1980年6月 GAME-APPLE Plus対応 79 APPLE ][plus 榊 ひかる氏
アスキー 1980年9月 GAME-PCインタプリタ 75 PC-8001 高橋 敏昭氏
アスキー 1980年10月 GAME-PCコンパイラ 142 PC-8001 高橋 敏昭氏
アスキー 1981年5月 GAME68コンパイラ 149 H68/TR 高井 義明氏
アスキー 1981年6月 GAME09インタプリタ 6809(Generic) 藤原 誠氏
アスキー 1981年6月 GAME-L3インタプリタ 95 BM-L3 秋山 秀樹氏、大野 俊治氏
アスキー 1983年6月 GAME-SMC 95 SMC-70 鈴木 直哉氏
アスキー 1984年9月 GAME-FMインタプリタ、コンパイラ V3.0 205 FM-7/8/11 萩平 哲氏
NEW ON HILDA 1982年?月 GAME-L3インタプリタ V2.1 BM-L3 萩平 哲氏 TAPEのみ
HILDA 1982年?月 GAME-L3コンパイラ V2.4 BM-L3 萩平 哲氏

★アスキー誌1984年9月号の記事を元に、はせりんが構成した GAME-FM のセットです。
GAMEFM_18
・ファイル名については、記事の指定通りです。
・記事掲載のダンプリストは FM-7/77(F-BASIC V3.0)用ですが、FM-8(F-BASIC V1.0)やFM-11(F-BASIC V4.0)で使用可能となるパッチも掲載されています。
・FILES で表示されたサンプルプログラム(Sample1〜7)のファイルタイプが 4 であることに注目してください。
 GAME-FMインタプリタの \SV コマンドでセーブしたテキストは、このファイルタイプになります。
 F-BASIC上で間違ってロードしないための対策と思われます。

GAMEFM_19
・それでは、まず GAME-FMインタプリタ を起動してみましょう。
・事前に、CLEAR命令でメモリ領域を確保します。
 $1200 からテキストが入るのは、MZ-80K/C由来でしょうか?

GAMEFM_20
・無事起動できました。
・\FL コマンドで、ファイルリストを表示してみます。
 F-BASIC の FILES と全く同じ表示になります。

GAME-FMインタプリタ/コンパイラ V3.0 メモリマップ (FM-7/8の場合)

      $0000-+------------------+
            |ワーク            |
      $1200-+------------------+ - - - -
            |テキストエリア    | A A
            |      ↓          | | |
            |        ↑        | | |オブジェクトコード
            |ユーザー・スタック| | |エリア
      $2F00-+------------------+ | |(外部コンパイルの場合は
            |ワーク            | | |$6FFFまで可能)
      $3000-+------------------+ | |
            |ランタイムルーチン| | |
      $3624-+------------------+ | |
            |                  | | |
     ($4A00)| - - - - - - - - -| | |
            | ローダー         | | |
            |- - - - - - - - - | | |
            |                  | | V
      $4D00-+------------------+ |
            |コンパイラワーク  | |
      $5000-+------------------+ |ソースコードエリア
            |GAMEコンパイラ  | V
      $6000-+------------------+ - - - -
            |GAMEインタプリタ |
      $7000-+------------------+
            |インタプリタワーク|
      $7100-+------------------+
            |システム・スタック|
      $71D5-+------------------+
            |DISK-BASIC        |
      $8000-+------------------+
            |BASIC ROM         |
            |                  |
      $FC00-+------------------+
            |I/Oなど           |
      $FFFF-+------------------+
GAMEFM_05
・続いて、いくつかサンプルプログラムを動かしてみましょう。
・既に打ち込んである Sample3 を \LD コマンドで読み込みます。
 これは、GAME-FMインタプリタの内蔵エディタで打ち込んだものです。
・エディタは F-BASIC のそれと同じもので、複数行一括編集が可能です。違和感なく使えると思います。
・0 はリスト表示です。
・画面をキャプチャしてないですが、#=1 で実行します。(インタプリタの場合)

GAMEFM_06
・Sample3 実行結果です。
・プログラム名:Sample3
・タイトル:3-D Sample No.1 from IBM DEMO

GAMEFM_07
・同様に、Sample4 です。

GAMEFM_08
・Sample4 実行結果です。
・プログラム名:Sample4
・タイトル:3-D Sample No.2 from GAME-PC DEMO


GAMEFM_14
・それでは、GAME-FMコンパイラを試してみましょう。
・この例では、GAME-FMインタプリタ起動後に、GAME-FMコンパイラ関連ファイルを読み込んでいますが、F-BASIC上でロードしておいても同じでです。
・>=$5000 でコンパイラを起動します。
 (コンパイラ起動前に、対象プログラムを読み込んでおきます。)

GAMEFM_16
・コンパイラが起動した後、会話的に処理を進めていきます。
・Runtimeの位置、オブジェクトコードの格納位置、ソースコードの位置を指定します。(オンメモリコンパイルの場合)
・最後に、>=$3000 で Runtime+オブジェクトコード を起動します。

GAMEFM_17
・Sample5 をコンパイルして得られたオブジェクトの実行結果です。
・プログラム名:Sample5
・タイトル:CIRCLE DEMO


インタプリタとコンパイラで各プログラムの実行時間の比較をしてみました。
プログラムにより違いがありますが、コンパイラの方が6〜35倍も高速な結果となりました。
プログラム名 インタプリタ コンパイラ 速度比
Sample3 38 3 12.7
Sample4 1:33 8 11.6
Sample5 41 7 5.9
Sample6 11:31 20 34.6

参考文献
月刊アスキー 1984年9月号 (アスキー)

8.4 TL/1コンパイラ

● 続いて、大西博さんによるTL/1コンパイラです。
こちらもアスキー誌で一世を風靡してました。オリジナルは大西さんによる6800版ですが、
PC-8001、MZ-80、Apple II、CBM、TRS、Basic Master Level3、FM-7/8、MSX と数多くの機種に移植
されて活用されていました。
TL/1言語・コンパイラ関連については他の方が詳しく解説されているので、下記ははせりんの
興味のあるところに限定してまとめてあります。

・概要
 Algol-Pascal系構造化言語。データタイプは 8bit整数のみ。
 特長:1パスコンパイラのため、コンパイルは超高速。オブジェクトコードも高速。
・コンパイル処理:1 PASS
          オンメモリ ファイル
 ソース入力     ○     ×
 オブジェクト出力  ○     ×
 (6809版の)オブジェクトコードはリロケータブル。

・TL/1は数多くの機種に移植されてました。その一覧です。
掲載誌 作者・開発元 CPU 機種 エディタ IF THEN ELSE Graphic拡張 備考
TL/1 (Original) アスキー 大西 博氏 6800 H68/TR GAME × ×
TL/1-PC アスキー 鈴木 仁志氏 Z80 PC-8001 N-BASIC ○(160x100)
TL/1-APPLE アスキー 紀太 章氏 6502 APPLE II 簡易エディタ × ×
TL/1-MZ アスキー 鈴木 仁志氏 Z80 MZ-80 内蔵 ○(80x50)
TL/1-CBM アスキー 紀太 章氏 6502 CBM3032 内蔵 × ○(80x50)
TL/1-TRS アスキー 梶田 英治氏、難波 克弘氏 Z80 TRS-80 TRS-BASIC ○(128x48)
TL/1-L3 アスキー 服部 隆志氏 6809 BM-L3 L3-BASIC × ○(640x200)
TL/1-FM アスキー 秦 純一氏 6809 FM-7/8 F-BASIC ○(640x200) 分割コンパイル可
TL/1-MSX アスキー 柴田 文彦氏 Z80 MSX(TAPE) 内蔵 ○(256x192) ファイル入力コンパイル可
TL/1-MSXDOS アスキー 柴田 文彦氏 Z80 MSX+DISK 内蔵 ○(256x192) ファイル入力コンパイル可
TL/1-CP/M - ? Z80 (CP/M) ED, WM等 ファイル入力コンパイル
TL/1-88G - K.C.B. Tさん Z80 PC-8801 & PC-DOS ○(?) ファイル入力コンパイル

・TL/1は月刊アスキー誌やテープアスキー等で提供されていました。下記の表はその一部です。
TAPE-ASCII/月刊テープアスキー
提供元 型格 発売年月 品名 価格 機種 メディア 内容
アスキー - 1980年6月 TL/1 4,000 H68/TR TAPE TL/1-6800, GAME III
アスキー SP-0002 1981年1月 TL/1-PC 4,000 PC-8001 TAPE TL/1-PC (連珠同梱)
アスキー SP-0028 1982年10月 TL/1-L3 4,000 BM-L3 TAPE TL/1-L3
アスキー - 1984年4月 月刊テープアスキー1984年4月号 3,000 FM-7/8 TAPE TL/1-FM (北海道防衛作戦同梱)
アスキー - 1984年7月 月刊テープアスキー1984年7月号 3,000 MSX TAPE TL/1-MSX
雑誌・書籍掲載記事(の一部)
出版元 掲載誌・書 発行年月 タイトル 掲載ページ 機種 作者・開発元 ソース ダンプ パッチ 備考
アスキー アスキー 1980年2月 TL/1(言語紹介) 112 - 大西 博氏
アスキー 1980年6月 TL/1 言語の概要 82 H68/TR 大西 博氏
アスキー 1980年7月 TL/1 ライブラリの登録 144 H68/TR 大西 博氏
アスキー 1980年8月 TL/1 コンパイラの作り方 143 H68/TR 大西 博氏 不鮮明のため次号に再掲
アスキー 1980年9月 (TL/1 ソースリスト) 153 H68/TR 大西 博氏
アスキー 1980年10月 (TL/1 ソースリスト続き) 154 H68/TR 大西 博氏
アスキー 1980年11月 (TL/1 ソースリスト続き) 152 H68/TR 大西 博氏
アスキー 1981年1月 TL/1-PC 154 PC-8001 鈴木 仁志氏 純正のDISK BASICでは動作不可
アスキー 1981年1月 連珠 (TL/1-PC) 163 PC-8001 北裏 二郎氏
アスキー 1981年3月 Error Massage (1981年1月号 TL/1-PC) 47 PC-8001 -
アスキー 1982年10月 TL/1-L3 192 BM-L3 服部 隆志氏 DISK BASICで動作可
アスキー 1982年10月 TL/1 リファレンスマニュアル 195 - 前田 成人氏
アスキー 1982年12月 アフターケア (1982年10月号 TL/1-L3) 71 BM-L3 -
アスキー 1983年10月 北海道防衛作戦 (TL/1-L3) BM-L3
アスキー 1983年10月 北海道防衛作戦 PC-8001
アスキー 1984年4月 TL/1-FM 240 FM-7/8 秦 純一氏
アスキー 1984年4月 北海道防衛作戦 (TL/1-FM) 250 FM-7/8 L3版との差分のみ
アスキー 1984年5月 アフターケア (1984年4月号 TL/1-FM) 107 FM-7/8 - バグ修正1
アスキー 1984年6月 アフターケア (1984年4月号 TL/1-FM) 111 FM-7/8 - Disk版とカセット版でオブジェクトが非互換な点
アスキー 1984年7月 アフターケア (1984年4月号 TL/1-FM) 119 FM-7/8 - バグ修正2

★アスキー誌1984年4月号の記事を元に、はせりんが構成した TL/1-FM のセットです。
TL1FM_00
・ファイル名については、ほとんど、はせりんが勝手に命名しています。
・裏RAM使用の有無、機種別で4種類のバイナリ本体と、裏RAMからロードするローダー3種類です。
・TL1LDR は、はせりんが勝手に作ったローダーです。機種判別(実際にはBASIC版数判別)を行って必要なバイナリをロードします。
 TL/1-PC のローダーの仕様と合わせて、PF4 でコンパイル、PF5 で実行、としてみました。
・SAMPLE も勝手バージョンです。
・Kコンパイラでは大規模ソースファイル対応でファイル版がリリースされていましたが、 TL/1ではそういうのがありません。TL/1-FMは比較的ソースエリアが狭いのですが、唯一(?)、 「分割コンパイル」がサポートされており、裏RAM使用と合わせてメモリの狭さを凌いでいます。

TL1FM_01
・TL1LDR の中味です。
・200行、210行が何やら暗号めいてますが、これはファンクションキーの15文字制限に押し込める ための苦肉の策です。本来やりたかった事は次の通りです
  KEY 5,"EXEC &HFC30:EXEC &H3800"+CHR$(13)
  KEY 5,"EXEC &HFC00:EXEC &H3800"+CHR$(13)
・F-BASIC V3.0 L2.0(DISK版)では、$FC00〜$FC29辺りを使ってるので、ローダーのアドレスをずらしています。

TL/1-FMコンパイラ メモリマップ
      $0000-+------------------+
            |ワーク            |
   TEXT TOP-+------------------+
            |ソースエリア      |
      $4000-+------------------+
            |ユーザー・スタック|
            |コンパイラワーク  |
      $4300-+------------------+
            |TL/1コンパイラ    |
      $5390-+------------------+
            |変数名テーブル    |
            |システム・スタック|
      $5800-+------------------+
            |ランタイムルーチン|
      $5C1E-+------------------+
            |オブジェクトエリア|
    RAM END-+------------------+
            |(DISK-BASIC)      |   裏RAM使用コンパイル時
      $8000-+------------------+  +------------------+
            |BASIC ROM         |  |ランタイムルーチン|
      $841E-+                  +  +------------------+
            |                  |  |オブジェクトエリア|
      $FC00-+------------------+  +------------------+
            |裏RAM制御         |
      $FC80-+------------------+
            |I/Oなど           |
      $FFFF-+------------------+
TL1FM_02
・続いて、コンパイルしてみましょう。
・その前に、コンパイル対象の SAMPLE プログラムです。大した内容ではありません。

TL1FM_03
・まずは裏RAMを使用しないバージョンです。
・FM-7、FM-8で共通です。
・PF4 を押すと一瞬でコンパイルが完了します。
 オブジェクトは、ランタイムルーチンを含んだサイズで表示されます。
・PF5 を押して実行します。

TL1FM_04
・続いて、裏RAMを使うバージョンです。
・FM-7 と FM-8 で若干操作が異なります。(画面はほぼ共通...orz)
・FM-7 の場合は、裏RAM使用しないバージョンとの差異は次の通りです。
 ・Bellが1回鳴る。
 ・オブジェクトコードが裏RAMに格納されている。
 PF5 には裏RAMからのローダーも一緒に呼んでるので、裏RAMなし版と同じ使い勝手です。
・FM-8 の場合は、コンパイル開始すると Bell が鳴る(鳴り続ける)ので、後ろの DIP-SW で  DOSモードに切り替えた後、STOPキーを押します。するとコンパイルが再開します。
 コンパイルが終了すると再び Bell が鳴る(鳴り続ける)ので、後ろの DIP-SW で  BASICモードに切り替えた後、STOPキーを押します。
 同じ操作が、TF8 のローダーでも必要です。
 画面には一切指示が出ないので不親切と言えなくもないですが...

TL1FM_05
・次に、少し大きなプログラムをコンパイルしてみましょう。
・例として取り上げるのは、TL/1-PC と一緒に紹介されていた、RENJU(連珠)です。
・TL/1-PC で動作確認の取れたソースコードを ASCII形式で持ってきます。
 必要な修正は次の通りです。(コード部分としてはわずか1バイトの修正で済みました。)
    30 '%       for TL/1-PC        %
    510 '  AD0:=$B0 AD1:=AD0+1 AD2:=AD1+1 AD3:=AD2+1 AD4:=AD3+1
    ↓
    30 '%       for TL/1-FM        %
    510 '  AD0:=$38 AD1:=AD0+1 AD2:=AD1+1 AD3:=AD2+1 AD4:=AD3+1
    3170 '/
・裏RAMを使用しないモードで!コンパイルします。[重要]

TL1FM_06
・コンパイルが無事終了しました。
・RENJU(連珠)では、2次元配列を別途確保する必要があり、&h3800-42FF をそれに当ててます。
 従って、実行前にメモリをクリアしてあげます。(CLEAR ,&h37FF)
・そして PF5 で実行です。
 (裏RAMモードだとオブジェクトと配列がかぶってしまうので...)

TL1FM_07
・先手か後手か、聞かれます。
・先手の方が有利ですが、敢えて後手で。

TL1FM_08
・COMPUTER は中央に打ってきます。

TL1FM_09
・今回は、たまたま勝てました!
・けっこう強いです。一時期はまってました...

参考文献
月刊アスキー 1981年1月号 (アスキー)
月刊アスキー 1981年3月号 (アスキー)
月刊アスキー 1982年10月号 (アスキー)
月刊アスキー 1984年4月号 (アスキー)
月刊アスキー 1984年5月号 (アスキー)
月刊アスキー 1984年6月号 (アスキー)
月刊アスキー 1984年7月号 (アスキー)

8.5 COMSOLコンパイラ

● COMSOLコンパイラはアスキーから販売されていた、6809用のコンパイラです。
当初はベーシックマスターLEVEL3(BM-L3)用が販売されましたが、その後、FM-8用、FM-7用が
販売されました。ほとんど宣伝されてなかったようなのでご存じない方も多いと思います。
未確認情報ですが、Copycat FM というコピーツールが、COMSOL で開発されていたそうです。
文法は、上で紹介している TL/1と驚くほど似ています。兄弟関係にあるのかもしれませんが、
詳細は不明です。

・概要
 Pascal系構造化言語。データタイプは INTEGER(2バイト整数)のみ。2パスコンパイラ。
 ソースコードはBASICのエディタを使用して作成。オンメモリまたはアスキーセーブ。
 生成オブジェクトはポジションインデペンデント。一旦リロケータブルモジュールと
 して生成され、リンカでライブラリと結合してオブジェクトを生成。当然分割コンパイル可。
 グラフィクス操作の手続き/関数をライブラリとして用意。
 ディスク版はさらに追加ライブラリあり。
・コンパイル処理:2 PASS
          オンメモリ ファイル
 ソース入力     ○     ○
 オブジェクト出力  ×     ○
 オブジェクトコードは独自のリロケータブルフォーマットで出力される。
・ファイルシステム拡張:あり
 3 リロケータブル・ライブラリ
 誤ってロード&実行しないための対策と思われる。

・COMSOLコンパイラはアスキーコンシューマプロダクツ(ACP)から提供されていました。
提供元 型格 発売年月 品名 価格 機種 メディア 備考
ACP - 1981年7月 COMSOL-L3 19,800 BM-L3 TAPE
ACP - 1981年9月 COMSOL-L3 29,800 BM-L3 5" 1S 5" 2D版の発売時期不明
ACP - 1982年12月 COMSOL-FM8 19,800 FM-8 TAPE
ACP - 1982年12月 COMSOL-FM8 29,800 FM-8 5" 2D
ACP - 1983年3月? COMSOL-FM7 19,800 FM-7 TAPE GRLIBにSCREEN,PALET追加、PSGLIB追加
ACP - 1983年3月? COMSOL-FM7 29,800 FM-7 5" 2D GRLIBにSCREEN,PALET追加、PSGLIB追加

★COMSOL-FM7(DISK版) に含まれるファイルです。
COMSOL_00
・けっこうたくさんのファイルがありますね。
・read.me1 は、各ファイルの説明文です。ただし英語ですが。
・read.me2 では、コンパイル&リンクの手順が説明されています。これも英語です。
・この画面で注目していただきたいのは、xxxx.R (リロケータブルファイル) のファイル種類が
 '3' となっている点です。F-BASICのファイルシステムでは、0/1/2 の値しか使っていません。

# 尚、説明の都合で、横FILES表示可能に改造した F-BASIC V3.0 システムディスクで起動後に、
# COMSOL-FM7 のディスクに入れ替えて FILES を実行しています。
# COMSOL-FM7 のディスクには通常バージョンの F-BASIC V3.0 の DISK CODE が含まれています。
# (ただし "821001"版 です。)

COMSOL_RM10
・read.me1 の中味です。(その1)
・COMPILE.L、compile.l は、それぞれファイル版、オンメモリ版のコンパイラ本体です。
・LINKER.L はリンカー本体です。
 説明文にはないですが、必要最低限の IOライブラリも含んでいます。
・COMPILE、LINK は、それぞれ、ファイル版コンパイラ、リンカーを呼び出す簡単なローダーです。
・SIZE は、バイナリファイルのサイズ表示と、メモリ上の最上位に配置した場合の先頭アドレス
 を教えてくれます。(フリーエリアを最大限確保するため)
・IOLIB.S、IOLIB.R は、それぞれ基本IOライブラリのソースファイル、リロケータブルライブラリです。
 上記の必要最低限の IOライブラリで済む場合にはこのライブラリは LINK不要です。

COMSOL_RM11
・read.me1 の中味です。(その2)
・GRLIB.S、GRLIB.R は、それぞれグラフィックライブラリのソースファイル、リロケータブルライブラリです。
・PSGLIB.S、PSGLIB.R は、それぞれPSG駆動用のソースファイル、リロケータブルライブラリです。
 PSG駆動と言っても音楽演奏できるわけではなく、F-BASIC の SOUND命令相当のみです。
・MATH1.R、MATH2.R は、ディスク版のみに付属の、実数演算ライブラリです。
 ソースはありません。
・KLIB.R は漢字表示のためのライブラリです。ソースはありません。
 漢字は JISコードで指定するタイプです。
・DIOLIB.R は、ディスク版のみに付属の、ランダムアクセスデータ用ライブラリです。
 F-BASIC DISK版の PUT#、GET# 相当が実行できます。ソースはありません。
・xxxx.S は、各種デモのソースファイルです。

  COMSOL-FM8/FM7 メモリマップ

       コンパイル時     ←          リンク時
       オンメモリ版     ファイル版
      $0000-+--------------------------------------------------------------+
            |F-BASICワーク                                                 |
   TEXT TOP-+--------------------------------------------------------------+
            |ソースコード      |  |ローダー          |  |ローダー          |
            |                  |  |(COMPILE)         |  |(LINK)            |
   (*)$2000-+                  +  +                  + -+------------------+
            |                  |  |                  |  |オブジェクトコード|
            |スタック          |  |スタック          |  |                  |
   (*)$4000-+------------------+ -+------------------+  |                  |
            |COMSOL-FM7/FM8    |  |COMSOL-FM7/FM8    |  |                  |
            |コンパイラ        |  |コンパイラ        |  |                  |
            |(compil.l)        |  |(COMPIL.L)        |  |                  |
   (*)$6000-+                  +  +                  + -+------------------+
            |                  |  |                  |  |リンカーワーク    |
            |                  |  |                  |  |スタック          |
   (*)$6300-+                  +  +                  + -+------------------+
            |                  |  |                  |  |COMSOL-FM7/FM8    |
            |                  |  |                  |  |リンカー          |
            |                  |  |                  |  |(LINKER.L)        |
    RAM END-+--------------------------------------------------------------+
            |(DISK-BASIC)                                                  |
      $8000-+--------------------------------------------------------------+
            |                                                              |
            |BASIC ROM                                                     |
            |                                                              |
      $FC00-+--------------------------------------------------------------+
            |I/Oなど                                                       |
      $FFFF-+--------------------------------------------------------------+

  (*)ロードアドレスは一例。
それでは、GRDEMO.S をコンパイル&リンクして実行してみましょう。

COMSOL_12
・まずは GRDEMO.S の中味です。
・PROC/FUNC xxxx; EXTERNAL; となっているプロシジャ、ファンクションについては、 ライブラリのリンクが必要です。

COMSOL_13
・RUN"COMPILE でコンパイラを起動します。
・最初にソースファイルを指定します。

COMSOL_14
・1パス目のコンパイルがすぐに終了します。
・続いて、リロケータブルオブジェクトの出力ファイルを指定します。

COMSOL_16
・2パス目のコンパイルもすぐに終了します。
・続いて、RUN"LINK でリンカーを起動します。
・プリンタへ出力するか否か、メモリの上限、オブジェクトのロードアドレスを入力します。
・リンクするファイルを指定します。

COMSOL_17
・リンクしている様子です。
・外部参照が必要な PROC/FUNC が表示されるので、リンクライブラリを指定します。
・一度に1つのライブラリしかリンクできないので、繰り返します。

COMSOL_19
・リンクが無事完了しました。
・生成されたモジュール内のアドレスマップが表示されます。
・ご覧の通り、必要のないものまでリンクされてしまいます。
・最後に、生成されたモジュールを DISK に書き出します。

COMSOL_20
・生成されたモジュールを実行してみましょう。
・LOADM でロードする際、オフセットアドレスは必須です。
 さもないと 0番地にロードされてしまいます。
・ロード完了したら EXEC で実行します。
・実は、リンク直後にはメモリ内にオブジェクトがロードされたままなので、
 SAVE と LOADM を省略することができます。

COMSOL_21
・GRDEMO 起動直後です。
・楕円が6つ描かれます。

COMSOL_22
・しばらく経った後の状況です。
・これが意図したものなのかは不明です。
・放っておくと、延々と続くので、BREAKキーで止めます。
 すると F-BASIC に戻ります。


参考文献
月刊アスキー 1981年8月号 (アスキー) P.61 Pascal型の高速新言語、COMSOL
月刊アスキー 1981年10月号 (アスキー) P.64 COMSOLにディスク版登場
COMSOL-L3 チラシ 1981年9月1日(アスキーコンシューマプロダクツ)
COMSOL-FM8 User's Manual 初版 1981年12月1日(アスキーコンシューマプロダクツ)


8.6 Pascalコンパイラ

● FM-7シリーズ用にも富士通からUCSD-Pascalが提供されていましたが、価格も高く、あまり一般的ではありませんでした。
しかし、FM77AV20/40の時代に、本格的でかつリーズナブルな価格の実数型Pascalコンパイラが登場しました。
黒姫さんが開発された FM-Pascal がそれで、1987年にI/O誌で5ヶ月の連載で発表されました。
FM-7シリーズ向け言語処理系としては、最後発になると思います。(バージョンアップを除き)
エディタや、実行環境としての DOS(P-dos) を含む、コンパイラ・システムとして構成されており、
基本に忠実な実装で、6809のネイティブコードではなくPコードを生成し、Pコードインタプリタで実行します。
(UCSD-Pascalと同じ方式) そのため若干実行速度が落ちるのは否めません。
尚、作者の黒姫さんに関しては情報が少なく、何かご存じの方がおられましたら、ぜひ教えてください。

・概要
 言語処理系は、Pascal-P4コンパイラ・システムのソースコード付解説書である、
  "Pascal Implementation: The P4 Compiler"
  "Pascal Implementation: Compiler and Assembler/Interpreter"
   Steven Pemberton and Martin Daniels 共著、Ellis Horwood Limited, 1982
  同日本語版「Pascalの言語処理系: Pascal-P4、翻訳系・直訳系/通訳系(2冊セット)」
   武市 正人 木村友則 共訳、近代科学社、1984
 を元に開発されており、(当時の)標準Pascalと同等とのこと。(但し一部制限あり)
 黒姫氏オリジナルのグラフィクスライブラリをPコードインタプリタに内蔵し、call_mac で呼び出し可能。
 P-dosとエディタも黒姫氏オリジナルで、Pascal- の名を冠しているが特に Pascal専用の機能は無く、
 汎用の作り。もう少し早く発表されていれば広く使われた可能性があるだけに残念。
・コンパイル処理:
           入力       出力
 コンパイル     テキストファイル テキストファイル
 Pコードアセンブラ  テキストファイル オンメモリ
 Pコードインタプリタ オンメモリ    ―

 上記3ステップを一気に実行するバッチプログラム p も用意されています。

市販のもの
提供元 型格 発売年月 品名 価格 機種 メディア 備考
ディスケットサービス
コムパック 1987年2月頃 Pascalコンパイラ 3,000 FM-7シリーズ 5inch 2D Pascalコンパイラ本体、P-Codeインタプリタ、P-dos
コムパック 1987年2月頃 Pascalコンパイラ 3,200 FM-7シリーズ 3.5inch 2D Pascalコンパイラ本体、P-Codeインタプリタ、P-dos
コムパック 1987年3月頃 Pascalコンパイラ(アセンブラ、エディタ) 3,000 FM-7シリーズ 5inch 2D P-Codeアセンブラ、エディタ他
コムパック 1987年3月頃 Pascalコンパイラ(アセンブラ、エディタ) 3,200 FM-7シリーズ 3.5inch 2D P-Codeアセンブラ、エディタ他
コムパック 1987年5月頃 Pascalコンパイラ(ユーティリティ) 2,000 FM-7シリーズ 5inch 2D プリンタ印字ユーティリティ、画面のハードコピー他
コムパック 1987年5月頃 Pascalコンパイラ(ユーティリティ) 2,200 FM-7シリーズ 3.5inch 2D プリンタ印字ユーティリティ、画面のハードコピー他
EXシリーズ (ビニールケース、マニュアル付き)
Wonder Soft WF-083E 1987年6月 FM-Pascal 実数型Pascalコンパイラ・システム 9,800 FM-7シリーズ 5inch 2D
Wonder Soft WF-084E 1987年6月 FM-Pascal 実数型Pascalコンパイラ・システム 9,800 FM-7シリーズ 3.5inch 2D
雑誌・書籍掲載のもの
出版元 掲載誌・書 発行年月 タイトル 掲載ページ 機種 作者・開発元 ソース ダンプ パッチ 言語
仕様
備考
工学社 I/O 1987年2月 実数型Pascalコンパイラ・システム[1]
Pascalコンパイラ、バッチファイル、Pコード・インタプリタ
161 FM-7シリーズ 黒姫氏 p,pas,p4.ini,sysdsk,
pdos.sys,int
I/O 1987年3月 実数型Pascalコンパイラ・システム[2]
標準Pascalとの違い、アセンブラ、エディタ・プログラム
183 FM-7シリーズ 黒姫氏 asm,edit,chgstp
I/O 1987年4月 実数型Pascalコンパイラ・システム[3]
エディタ。Pコード
265 FM-7シリーズ 黒姫氏 グラフィックライブラリのソース
I/O 1987年5月 実数型Pascalコンパイラ・システム[4]
P-dosのワークエリア、ユーティリティ
265 FM-7シリーズ 黒姫氏 ユーティリティ
I/O 1987年6月 実数型Pascalコンパイラ・システム[最終回]
システムのバグと注意点
243 FM-7シリーズ 黒姫氏 コンパイラのパッチ、
ユーティリティのソース
I/O 1987年7月 [de BUG] FM-Pascal コンパイラ 283 FM-7シリーズ 編集部

★I/O誌1987年2〜6月号に掲載された記事を元に FM-Pascalを構成してみました。
FMPascal_014
・まずはおまじないです。
・FM-Pascal は P-dos上で動くのですが、P-dos起動時に同時オープンファイル数を聞かれます。
・ここでは、2を指定します。【重要】

FMPascal_020
・P-dos v2.6 が起動しました。詳細についてはこちらのページを参照願います。
・ビルトインコマンドの files で格納されているファイルの一覧を表示してみます。
・I/O誌に掲載されていたファイルはこれで全てですが、WonderSoft から発売されていたものが
 これと同じかどうかは不明です。
 ご存じの方がいらしたら情報お願いします。

FMPascal_021
・さっそくコンパイルしてみましょう。
・題材は、巨匠 Niklaus Wirthさんの名著 Algorithms + Data Structures = Programs (Prentice-Hall, 1976)
 に掲載されていた、8-Queen です。
・当時、ベンチマークプログラムとしてもよく利用されていたようです。

こちらに打ち込んだものを置いておきます。
 左は、これを 8queen.S というファイル名でセーブしたものです。

FMPascal_022
・pas でコンパイラを起動します。
・コマンドラインパラメタはありません。
・起動するとオプションを聞いてきますが、ここではそのままリターンします。

FMPascal_023
・続いて、ソースファイル名を指定します。
・デフォルト設定では、ソースリストを表示しながらコンパイルします。

FMPascal_025
・残念ながらエラーが出ました。
・12行目のエラーは、end { print } ; という構文がサポートされていないようです。
 これは、Pascal-P4コンパイラの仕様だそうです。
・14行目のエラーは無視します。

FMPascal_027
・最終的に、2か所エラーが検出されました。
・24行目は、12行目と同じエラーです。
・26行目のエラーは無視します。

FMPascal_028
・エディタで修正することにします。
・edit でエディタを起動します。
・Pascal editor と表示されますが、字下げやキーワード推定といった Pascal専用機能 は特に無く、
 普通のラインエディターです。
・本エディタの使い方についてはこちらのページを参照願います。
・Lコマンドで 8queen.S を読み込んで修正します。(途中省略)

FMPascal_029
・修正が完了したので、Sコマンドでセーブします。
・FMの流儀により、上書きする場合は確認を求められます。

FMPascal_031
・再度コンパイラを実行します。

FMPascal_033
・無事、エラーがなくなりました。

FMPascal_035
・実は、デフォルトのコンパイルオプションだと先へ進めないので、設定変更して再度コンパイルします。
・コンパイルオプションは、カーソルキーで移動して変更します。
 リストは不要なので l- に、アセンブル出力をするので c+ に変更します。

FMPascal_036
・ソースファイル名に加えて、出力ファイル名の入力が求められます。
・ここでは、8queen.P と入力してみました。

FMPascal_037
・コンパイルが無事完了し、アセンブルソースファイルも生成されています。

FMPascal_038
・続いて、Pコードアセンブルソースより、Pコード(バイナリ)を生成します。
・asm で Pコードアセンブラを起動します。特にオプションはありません。
・ソースファイル名を求められるので、8queen.P と入力してみます。
 リターンすると、ソースを表示しながらアセンブルします。

FMPascal_040
・アセンブルが完了しました。
・Pコードは常にオンメモリに生成され、格納されたアドレスが表示されます。
・Pコードソースファイルの表示は、正直、不要だと思います。(ここでエラー出ることはないので)

FMPascal_042
・最後に、PコードインタプリタでPコードを実行します。
・int で Pコードインタプリタを起動します。特にオプションはありません。
 オンメモリのPコードを解釈して実行するので、ファイル名の指定もありません。
・ロード完了後、そのまま実行を開始します。

FMPascal_043
・無事、実行完了しました。
・正味のPコードの実行時間は、35.8秒でした。
・お疲れ様でした。


★ワンポイントテクニック
FMPascal_048
・ワンポイントテクニックを紹介します。
・Pコードアセンブルの際のリスト表示を抑制するには、次のようにします。
 LOADM"asm
 POKE &H35,0
 EXEC
・Pコードインタプリタのロードと実行を分離するには、次のようにします。
 LOADM"int
 EXEC


★バッチ処理
FMPascal_045
・これまで、pas、asm、int の3ステップを個別に実行してきましたが、一気にやる方法も存在します。
・p というバッチ処理コマンドを使用します。
・p の後に、Pascalのソースファイル名を指定します。

FMPascal_046
・コンパイル、アセンブル、インタプリタが連続で実行されます。
・コンパイル時にPascalのソースは表示されますが、アセンブル時にはソース表示はありません。


★はせりんの見つけたバグとパッチ
FMPascal_051
・edit に Pascal専用機能は無い、と上で書きましたが、実は FM-Pascal専用機能として、エディタからコンパイル、アセンブル、インタプリタを呼び出す機能があります。
・ただし、この機能にはバグがあり、正しく動作しません。

FMPascal_052
・そこで、パッチを当てます。
 POKE &H0264,&H01
 POKE &H0265,&HE6

FMPascal_053
・Iコマンドで簡単なプログラムを入力してみます。

FMPascal_054
・R リターンとすると、コンパイル、アセンブル、インタプリタが連続で実行されます。
・RUN とすると、実行後にエディタに戻ります。(画面キャプチャは省略)
 TURBO PASCAL的な使い方ができる、という事ですね。

メモリマップ
                      アセンブラはオブジェクトをオンメモリに生成するので、
                      アセンブル完了後インタプリタをロードして実行する。
                      ↓
      コンパイル時          アセンブル時          インタプリタ実行時
     0 -+-----------------------+     0 -+-----------------------+     0 -+-----------------------+
        |                       |        |                       |        |                       |
        |   pas                 |        |   asm                 |        |   int                 |
        |  (Pascalコンパイラ)   |        |  (Pコードアセンブラ)  |        |  (Pコードインタプリタ)|
        |                       |        |                       |        |                       |
        |                       |   E00 -+-----------------------+        |                       |
        |                       |        |   シンボルテーブル    |        |                       |
        |                       |  2400 -+-----------------------+  2400 -+-----------------------+
        |                       |        |                       |        |                       |
        |                       |        |   Pコード格納領域     |        |   Pコード格納領域     |
        |                       |        |                       |        |                       |
  5B00 -+-----------------------+        |                       |        |                       |
        |                       |        |                       |        |                       |
        |   シンボルテーブル    |       -+-----------------------+       -+-----------------------+
        |                       |        |                       |        |                       |
  A000 -+-----------------------+        |                       |        |                       |
        |   p4.ini              |        |                       |        |                       |
        |  (コンパイラ初期化)   |        |                       |        |                       |
  A880 -+-----------------------+        |   ワークエリア        |        |   ワークエリア        |
        |                       |        |                       |        |                       |
        |   ワークエリア        |        |                       |        |                       |
        |                       |        |                       |        |                       |
  D654 -+-----------------------------------------------------------------------------------------+
  〜E417|                                    システムスタック                                     |
        |                                    各種バッファ領域                                     |少なくとも2つのファイルバッファが必要
        |                                    ワークエリア                                         |
  EC00 -+-----------------------------------------------------------------------------------------+
        |                                                                                         |
        |                                    P-dos本体                                            |
        |                                                                                         |
  FC00 -+-----------------------------------------------------------------------------------------+
        |                                    バッチ処理用                                         |
  FC80 -+-----------------------------------------------------------------------------------------+
        |                                    I/O、BOOT ROM他                                      |
  FFFF -+-----------------------------------------------------------------------------------------+

グラフィクスライブラリ呼び出し方法:

 type trcb=array [0..7] of integer;
 var  rcb: trcb;
 rcb [0] := リクエスト番号;
 rcb [1] := 必用に応じてパラメタを設定;
  〜
 rcb [7] :=      〃
 dummy   := call_mac(rcb);
rcb[0]機能名rcb[1]rcb[2]rcb[3]rcb[4]rcb[5]rcb[6]rcb[7]
0consolencnlslnsfdgr
2colorc
3locatexy
4linex1y1x2y2functioncolorboxflag
5psetxycolorfunction
6paintxycolor/border1border2/border3border4/border5border6/border7
7symbolxyvmaghmagcol/funcangle/termspointer
8testaddress8'm''a''c'0
14inkey

★システムジェネレーション
FMPascal_000
・I/O 1987年2-6月号掲載プログラムを打ち込んだ状態です。
・総計で54KBあります。がんばって打ち込んでください。

FMPascal_001
・まず、P-dosのシステムディスクを生成します。
・ドライブ1にフォーマット済のフロッピーディスクをセットし、pdos.sys を実行します。

FMPascal_014
・さきほどのフロッピーをドライブ0にセットし、P-dosを起動させます。
・P-dos起動時に同時オープンファイル数を聞かれます。
・ここでは、2を指定します。【重要】

FMPascal_017
・再度フロッピーを入れ替えて、sysdsk にでシステムジェネレーションを進めます。
・画面キャプチャしてませんが、次の前処理が必要です。【重要】
プログラム名掲載アドレス修正アドレス
p&H1000-&H108F&H0000-&H008F
pas&H1000-&H6AFF&H0000-&H5AFF
p4.ini&H1000-&H187F&HA000-&HA87F
int&H1000-&H33FF&H0000-&H23FF
 オフセットをかけて LOADM して、修正後のアドレスで SAVEM します。実行アドレスは 0 でOKです。
 この処理は P-dos じゃないとできません。
・sysdsk は、P-dos でないと動きません。【重要】
・いろいろと質問されますが、全てデフォルト(お勧め)設定で進めます。(途中省略)

FMPascal_016
・システムジェネレーションが完了しました。
・お疲れ様でした。



8.7 Cコンパイラ

● FM-7シリーズ用の、F-BASICから起動可能(=市販OSを使用しない)Cコンパイラは、
少なくとも3種類発表されていました。偶然かもしれませんが、3件とも1986年に発表されてます。(初出時)
どれも 64KBの狭いメモリと戦いながら、高速でかつ手軽なCコンパイラを追及されていて、 ご苦労が偲ばれます。
概要を表にまとめてみました。

FM-Cコンパイラ DOH-Cコンパイラ Draco Cコンパイラ
TAPE版 DISK版 V1.0 V2.0
発表年月 1986年10月 1986年3月 1986年12月 1987年10月
作者 広瀬 峰太郎氏 津田 伸秀氏 笠 晃一(ミスタードラコ)氏
掲載誌 I/O ×(市販版のみ) The BASIC I/O ×(市販版のみ)
Compile制御 Monitor(cc.m) cc/cc2 cc CC/LCC/MCC
Editor 内蔵(cc.m内) se
Assembler cc.a fa.o asmb
Source Code オンメモリ オンメモリ ファイル ファイル
Object Code オンメモリ オンメモリ オンメモリ ファイル
Object形式 特殊アセンブリ言語 6809バイナリ 6809アセンブリ
Cc Pass 3 1 1
Asm Pass N 2
ラージモデル × × ×
F-BASIC拡張 × × × ○(CRUNコマンド)
ファイルシステム拡張 × × × ○('9'=ラージモデル)
言語仕様
#include
#define △(引数不可) △(引数不可) △(引数不可)
#ifdef × ×
#line × × ×
#asm △(code文で埋め込み)
Data Type
 char ○(Unsigned) ○(Unsigned)
 unsigned char × ×
 short × × ○(8bit)
 int
 unsigned △(ポインタのみ)
 long × × △(16bit)
 float × ×
 double × × △(32bit)
その他
F-BASIC呼出し × ×


・FM-7シリーズ用Cコンパイラは月刊I/O誌や月刊The BASIC誌に掲載されたものと、市販版が存在しました。
市販のもの
提供元 型格 発売年月 品名 価格 機種 メディア 備考
COMPAC - 1986年12月 Draco C コンパイラ V1.0 3,000 FM-7/NEW7 5" 2D ディスケットサービス
- 1986年12月 Draco C コンパイラ V1.0 3,200 FM-77/AV 3.5" 2D ディスケットサービス
- 1987年2月 Draco C コンパイラ(アセンブラ) 3,000 FM-7/NEW7 5" 2D ディスケットサービス
- 1987年2月 Draco C コンパイラ(アセンブラ) 3,200 FM-77/AV 3.5" 2D ディスケットサービス
- 1987年3月 Draco C コンパイラ(駆動プログラム) 2,000 FM-7/NEW7 5" 2D ディスケットサービス
- 1987年3月 Draco C コンパイラ(駆動プログラム) 2,200 FM-77/AV 3.5" 2D ディスケットサービス
WonderSoft WF-111E 1987年10月 Draco Cコンパイラ V2.0 9,800 FM-77/AV 3.5" 2D ラージモデル対応 EXシリーズパッケージ
WF-112E 1987年10月 Draco Cコンパイラ V2.0 9,800 FM-7/NEW7 5" 2D ラージモデル対応 EXシリーズパッケージ
システムソフト - 1986年2月 DOH-Cコンパイラ Ver 1.1 19,800 FM-7/77/AV 5" 2D, 3.5" 2D ファイル版
- 1986年2月 DOH-Cコンパイラ Ver 1.1 9,800 FM-7/77/AV TAPE オンメモリ版
- 1987年3月 DOH-Cコンパイラ Ver 1.2 19,800 FM-7/77/AV 5" 2D, 3.5" 2D ファイル版
- 1987年3月 DOH-Cコンパイラ Ver 1.2 9,800 FM-7/77/AV TAPE オンメモリ版
雑誌・書籍掲載記事
出版元 掲載誌 発行年月 タイトル 掲載ページ 機種 作者・開発元 ソース ダンプ パッチ 備考
工学社 I/O 1986年10月 FM Cコンパイラ 209 FM-7シリーズ 広瀬 峰太郎氏
I/O 1986年11月 FM Cコンパイラ改良と補足 233 FM-7シリーズ 広瀬 峰太郎氏
I/O 1986年12月 Draco C 245 FM-7/N7/77/AV 笠 晃一氏 Draco-C Ver 1.0
I/O 1987年1月 Draco C [2] マニュアル 272 FM-7/N7/77/AV 笠 晃一氏
I/O 1987年2月 Draco C [3] アセンブラ 185 FM-7/N7/77/AV 笠 晃一氏
I/O 1987年3月 Draco C [終] 駆動用プログラム 244 FM-7/N7/77/AV 笠 晃一氏
I/O 1987年4月 debug 271 - (編集部) 3月号掲載リストの訂正
I/O 1987年5月 Draco C [補足] fsub, save 271 FM-7/N7/77/AV 笠 晃一氏
I/O 1987年7月 Draco C エラーコード表 266 FM-7/N7/77/AV ミスタードラコ氏 ミスタードラコ氏=笠 晃一氏
技術評論社 The BASIC 1986年2月 Pに学ぶ 手作りコンパイラ入門 57 - 津田 伸秀氏 Cコンパイラ開発中の旨コメントあり
The BASIC 1986年2月 敢えて強要しない連続的OS-9話F 86 - 畑山 広喜氏 DOH-C Ver 0.2 をフライングで紹介
The BASIC 1986年3月 DOH-Cコンパイラ Ver 1.0 33 FM-7/77/AV 津田 伸秀氏
The BASIC 1986年4月 DOH-Cコンパイラ Ver 1.0 [2] 73 FM-7/77/AV 津田 伸秀氏 言語仕様
The BASIC 1986年4月 バグ情報とお知らせ 144 FM-7/77/AV (編集部) 3月号掲載リストの訂正
The BASIC 1986年5月 DOH-Cコンパイラ Ver 1.0 [3] 85 FM-7/77/AV 津田 伸秀氏 組み込み関数
The BASIC 1986年6月 DOH-Cコンパイラ Ver 1.0 [4] 89 FM-7/77/AV 津田 伸秀氏 ライブラリ(I)
The BASIC 1986年7月 DOH-Cコンパイラ Ver 1.0 [5] 50 FM-7/77/AV 津田 伸秀氏 ライブラリ(II)
The BASIC 1986年8月 DOH-Cコンパイラ Ver 1.0 [6] 75 FM-7/77/AV 津田 伸秀氏 ライブラリ(II)
The BASIC 1986年10月 DOH-Cコンパイラ Ver 1.0 [7] 140 FM-7/77/AV 津田 伸秀氏 ライブラリ(IV)
The BASIC 1986年11月 DOH-Cコンパイラ Ver 1.0 [8] 140 FM-7/77/AV 津田 伸秀氏 code文の活用
The BASIC 1987年2月 DOH-Cコンパイラ Ver 1.0 [9] 110 FM-7/77/AV 津田 伸秀氏 直線と円
The BASIC 1987年4月 DOH-Cコンパイラ Ver 1.2 65 FM-7/77/AV 津田 伸秀氏 バージョンアップ
The BASIC 1987年5月 バグ情報 162 FM-7/77/AV (編集部) 4月号掲載リストの訂正
The BASIC 1987年6月 テキストエディタ"ed"の作成@ 117 FM-7/77/AV 津田 伸秀氏
The BASIC 1987年7月 テキストエディタ"ed"の作成A 139 FM-7/77/AV 津田 伸秀氏

★FM-Cコンパイラ
・広瀬 峰太郎氏による、FM-Cコンパイラです。
・整数のみのサポートのため、扱えるデータタイプは char(符号なし)と int(符号付)のみです。
・ソース、オブジェクトともオンメモリなのでコンパイルが高速なのが特長です。
 読み終わったテキスト領域に重ね合わせてオブジェクトコードを生成する等、
 少ないメモリで使用できるよう工夫されています。
・分割コンパイルはできません。
・ディスクサービスとか市販版はありませんので、入手方法としてはひたすら打ち込みしかないようです。
  FM-C メモリマップ

       コンパイル時      アセンブル時(テキストが大きい時のみ)
       アセンブル時

      $0000-+--------------------------------------------+
            |F-BASICワーク                               |
      $1000-+--------------------------------------------+
            |ワークエリア        |  |ワークエリア        |
            |  ↑     ↑    |  |  ↑   ↑      |
            |スタック            |  |スタック            |
      $2000-+--------------------+ -+--------------------+
            |"cc.c"              |  |                    |
            |FM-Cコンパイラ本体  |  |                    |
            |                    |  |                    |
      $4000-+                    + -+--------------------+
            |                    |  |"cc.a"              |
            |                    |  |アセンブラ          |
      $4E60-+                    + -+--------------------+
            |                    |  |                    |
      $5200-+--------------------+ -+--------------------+
            |"cc.m"              |  |"cc.m"              |
            |モニター、エディタ、|  |モニター、エディタ、|
            |ランライムライブラリ|  |ランライムライブラリ|
      $71D5-+--------------------+ -+--------------------+
            |(DISK-BASIC)        |  |(DISK-BASIC)        |
      $8000-+--------------------+ -+--------------------+ -+--------------------+
            |テキスト、          |  |テキスト、          |  |                    |
            |オブジェクト        |  |オブジェクト        |  |                    |
            |                    |  |                    |  |BASIC ROM           |
            |                    |  |                    |  |                    |
            |                    |  |                    |  |                    |
            |                    |  |                    |  |                    |
      $EE00-+--------------------+  |                    |  |                    |
            |"cc.a"              |  |                    |  |                    |
            |アセンブラ          |  |                    |  |                    |
      $FC00-+                    + -+                    + -+--------------------+
            |                    |  |                    |
      $FC80-+--------------------------------------------+
            |I/Oなど                                     |
      $FFFF-+--------------------------------------------+

★DOH-Cコンパイラ
・Kコンパイラで有名な津田 伸秀氏による、DOH-Cコンパイラです。
・当時流行っていた TURBO PASCAL を強く意識した名称です。
 実際、1パスコンパイルで 6809オブジェクトコードまで生成するため超高速です。
 作者の津田 伸秀氏によれば、オブジェクトコードも Kコンパイラより高速との事です。
・整数のみのサポートのため、扱えるデータタイプは char(符号なし)、int(符号付)と
 unsigned(符号なし)です。
・アセンブラを使用しないため、#asm(インラインアセンブラ)は使用できませんが、代わりに
 Kコンパイラ等でおなじみの code文による 6809コードの埋め込みが可能となっています。
・ここで紹介している中では、唯一カセットテープ版が存在します。(市販版のみ)
 DISK版との違いは、ソースコードがオンメモリとなる点で、コンパイルの手間が幾分省略
 できますが、コンパイルできるサイズには制限があるようです。
・また、DISK版、TAPE版とも分割コンパイルはできません。
・当初は The BASIC掲載版と市販版でバージョンが異なっていたのですが、1987年4月号
 掲載分の Ver 1.2で統一されています。
  DOH-C コンパイラ DISK版 メモリマップ

       コンパイル時     リンク時

      $0000-+------------------+
            |F-BASICワーク     |
   TEXT TOP-+------------------+
            |"cc/cc2":起動Prog |
   TEXT END-+------------------+
            |スタック?        |
      $1400-+------------------+  +------------------+
            |"fd00":コンパイラ |  |"runt":ランタイム |
            |       補助       |  |                  |
      $1500-+------------------+  |                  |
            |                  |  |                  |
      $1900-+------------------+  +------------------+
            |オブジェクト      |
            |                  |
            |                  |
      $71D5-+------------------+
            |(DISK-BASIC)      |
      $8000-+------------------+  +------------------+
            |"fd1" :DOH-C      |  |F-BASIC ROM       |
            |      :コンパイラ |  |                  |
            |      :本体       |  |                  |
      $B000-+------:           |  |                  |
            |"fd2" :           |  |                  |
            |      :           |  |                  |
      $D600-+------------------+  |                  |
            |                  |  |                  |
      $FC00-+------------------+  +------------------+
            |I/Oなど           |
      $FFFF-+------------------+

★Draco Cコンパイラ
・ALF77コンパイラで有名な笠 晃一氏による、Draco Cコンパイラです。
・実数をサポートした本格的コンパイラです。ただし、long が 16bit、double が 32bit と
 少々残念なスペックになっています。
・V1.0 が1986年12月にI/O誌に掲載された後、1987年10月にV2.0(市販版)が発売されています。
  ・V1.0:I/O誌掲載版、ディスクサービス版
  ・V2.0:市販版
・V2.0 では、V1.0 と比較し、
  ・F-BASIC に CRUNコマンドを拡張し、コンパイルの手間を軽減
  ・ラージモデルのサポート(そのためのファイルシステム拡張あり)
  ・DISK CODE を VRAM に退避してメモリを広く使えるモードあり。
  ・スクリーンエディタ(se)のCソースとバイナリの同梱
  ・逆アセンブラ、ディスクエディタのCソース同梱
 といったサービス満点の内容と思います。
 # se は、I/O誌1985年11月号に掲載された「スクリーンエディタ Ver 1.0」の
 # C言語版と思われます。(このエディタは ALF77専用ではなく汎用に作られてます。)

★Draco C コンパイラ V2.0 のシステムディスクを起動してみたところです。
DRACOC_00
・青地に水色文字が斬新です。
・画面には特に出ていませんが、CRUN コマンドが拡張されています。

# Draco C のディスクには通常バージョンの F-BASIC V3.0 の DISK CODE が含まれています。
# (ただし "821001"版 です。)


★Draco C コンパイラ V2.0 に含まれるファイルです。
DRACOC_01
・けっこうたくさんのファイルがありますね。
・この画面で注目していただきたいのは、cc (Draco Cコンパイラ本体) のファイル種類が
 '9' となっている点です。F-BASICのファイルシステムでは、0/1/2 の値しか使っていません。
 Draco C のシステムディスクではファイルシステムが拡張されており、'9'の場合はラージモデル
 (裏RAMにまたがるような巨大バイナリ)がサポートされています。自動的に裏RAMに切り替えて
 実行してくれます。

# 尚、説明の都合で、横FILES表示可能に改造した F-BASIC V3.0 システムディスクで起動後に、
# Draco C のディスクに入れ替えて FILES を実行しています。
# Draco C のディスクには通常バージョンの F-BASIC V3.0 の DISK CODE が含まれています。
# (ただし "821001"版 です。)

  Draco-C メモリマップ

       コンパイル時     実行時        ←
                  スモールモデル    ラージモデル(V1.0では非対応)
      $0000-+--------------------------------------------------------------+
            |F-BASICワーク                                                 |
   TEXT TOP-+--------------------------------------------------------------+
            |                  |  |  ↑   ↑    |  |                  |
            |                  |  |スタック          |  |                  |
      $1000-+------------------+ -+------------------+ -+------------------+
            |Draco C           |  |オブジェクトコード|  |オブジェクトコード|
            |コンパイラ本体    |  |                  |  |                  |
            |                  |  |                  |  |                  |
            |                  |  +------------------+  |                  |
            |                  |  +------------------+  |                  |
            |                  |  |ダイレクトページ  |  |                  |
            |                  |  +------------------+  |                  |
            |                  |  |作業領域          |  |                  |
            |                  |  |                  |  |                  |
            |                  |  |                  |  |                  |
      $71D5-+                  +  +------------------+  |                  |
            |                  |  |(DISK-BASIC)      |  |                  |
      $8000-+                  +  +------------------+  |                  |
            |                  |  |                  |  |                  |
            |                  |  |                  | -+------------------+
            |                  |  |BASIC ROM         | -+------------------+
            |                  |  |                  |  |ダイレクトページ  |
            |                  |  |                  | -+------------------+
            |                  |  |                  |  |作業領域          |
      $BD03-+------------------+  |                  |  |                  |
            |作業領域          |  |                  |  |                  |
            |                  |  |                  |  |                  |
            |                  |  |                  |  |                  |
            |  ↑   ↑    |  |                  |  |  ↑   ↑    |
            |スタック          |  |                  |  |スタック          |
      $EC00-+------------------+  +                  +  +------------------+
            |DISK CODE         |  |                  |  |DISK CODE         |(V2.0では DISK CODE を VRAM に置くモードあり)
      $FC00-+--------------------------------------------------------------+
            |I/Oなど                                                       |
      $FFFF-+--------------------------------------------------------------+

参考文献
月刊I/O アスキー 1986年10月号〜1987年7月号 (工学社)
月刊The BASIC 1986年2月号〜1987年7月号 (技術評論社)
Draco C コンパイラ取扱い説明書 1988年2月1日(ワンダーソフト/コムパック)


謝辞:福井利夫様、市販版BASE09、Sofix社Debug-Boyに関する情報ありがとうございました。
謝辞:maruan様、市販版Kコンパイラに関する情報ありがとうございました。

Under Consruction.
尚、本ページの各表の作成にはThinkさんのCSV→Table変換サイトのお世話になりました。
ありがとうございました。


F-BASIC起動画面集  F-BASIC詳細編  F-BASIC詳細編(その2:デモ画面集)
FM77AVシリーズ システムディスク編
FM77AVシリーズ デモ・入門ディスク編
CP/M-80
OS-9編
Flex編
F-BASIC ファイルシステム(およびその上位互換)上に構築されたOS、開発システム
FM-7/8シリーズ用プログラミング言語とその処理系
番外編(その2:勝手に誤記修正編)
番外編(その3:6809用MMU考察)
番外編(その5:FM-7,8シリーズのROM一覧)
番外編(その6:FM-77用拡張メモリ他について)
番外編(その7:FM-8/7/77/77AVシリーズの微妙な非互換性)
番外編(その8:FM-7/8シリーズ用アドオンCPUカード)
番外編(その11:FM-11,16シリーズのROM一覧)
緊急特集:MB22603の秘密
FM-8改造 備忘録
--------
レベル3BASICとF-BASIC を覗いてみる
テクノポリス誌ナウシカベンチマークとミンキーモモベンチマーク
ASCIIART(マンデルブロ集合)ベンチマーク
漢字ROM博物館(情報募集中)
--------
入り口ページに戻る

ご意見、ご要望はこちらまで(笑)
Copyright (C) 2019 by Haserin