2022年9月27日火曜日

FM-7用の32Pスロット拡張基板の製作(第5作)

 32Pスロット拡張基板の第5作目です(ついに最終版?)


2022年3月1日の「FM-7用の32Pスロット拡張基板の製作(第4作!)」で紹介した拡張基板ですが、これで終わりにしようと考えていました。

しかし、使用していると、本体の50P拡張コネクタからのケーブルをあまり長くできないので不便を感じることがありました。ということで、拡張ベース基板上にスペースが十分ありますので、データ線と制御線にバッファを追加することで50Pケーブルを長くしても動作するようにしたいと考えました。さらに、FM-7本体の32Pスロットには+12V,-12V電源も来ているので、私的には特に必要はなかったのですが、ついでに12V電源も追加して本体の32Pスロットとの完全互換を実現することにしました。

製作した基板を示します。


拡張コネクタベース基板



32Pコネクタ拡張基板


製作したベース基板の回路図です。

ExConnBase51


正負12V電源用のDC-DCコンバータとしてMAU109(秋月電子で購入)を使用することにしました。これについては、カベキンブログの「富士通 FM-7用32Pスロット拡張基板に±12Vの電源を追加」(2022年4月6日)を参考にさせていただきました。カベキンさまに感謝いたします。


相変わらずミスがあって、、、

実は製作したプリント基板にはミスがあり、なかなか動作しませんでした。上記の回路図はそのミスを修正したものです。
単純なミスのU2(74LS541)のEXTDETとIRQの入出力の向きが逆であることはすぐに分かったのですが、最後の一つはなかなか分かりませんでした。
FM-7に接続すると、殆どの場合起動しないのですが、ごくまれに正常に起動するのです。しかも、起動した場合でもU5(74LS245)だけが異常に熱くなるのです。
プリント基板上の配線を何度見直しても異常はありません、試作品という事でICソケットを使用していましたので、74LS245を交換してみましたが変わりません。ついには追加した12V電源の存在を疑って、MAU108を取り外したりしてみましたが変化はありません。

あれこれと2日間も悩んだ挙句ようやく原因に気づきました。
何と、U5(74LS245)のCE端子をGNDに落としていました。これによってU5が常にアクティブになっていて、FM-7本体のデータバスと衝突したために発熱していたという事なのでした。(相変わらずいつもどこかでドジをしています。。。)

修正してようやく動作した

U5のCE端子をIOS0に接続することによって、ようやく正常に動作するようになりました。期待した通り、50Pフラットケーブルを長くしても正常に動作しましたので、配置などの取り回しが楽になりました。

32Pコネクタ拡張基板の方は、コネクタの数を第4作の3個から4個に増やしてみました。これは、バッファを追加したことでドライブ能力が大きくなった(?)と期待してのことです。さらにコネクタを増設できるような端子が2箇所ありますが、これは富士通のFCNコネクタ(現在は入手が極めて困難です)を使用せずに、通常のコネクタとピンヘッダでも使用できるようにと考えてのことです。

最終と考えているこの基板ですが、最終基板に修正用のジャンパ線が走っているのは嬉しくないので、修正した回路でもう一度基板を発注しました。(今度こそ最終版にしたい...)

2022年9月26日月曜日

PC用の2DDドライブをFM-7等で使うためのアダプタの基板化

PC用の2DDドライブをFM-7等で使うためのアダプタを基板化してみました 

2019年10月26日の「FM-7でPC用のフロッピードライブを使う」で紹介しました、PC用の2DDドライブをFM-7等で使うための、FDDに直接装着するタイプのアダプタをプリント基板化しました。

簡単なものですのであえて基板化する必要もないのですが、他の基板を発注する際に、ついでにということで製作してみたものです。

製作したアダプタは下画像のようです。


アダプタのFDD側


アダプタのFDC側


回路は簡単すぎて、回路図を示すほどのものではありませんが、FDCからのドライブセレクト信号(0あるいは1)をピン12に入れる切り替えスイッチと、ダイオード1個によるReady信号生成回路からなっています。このダイオード1個によるReady信号生成回路は前回同様に、てきとーに。さんの「FM77AV20/40以降のFDD修理というか交換」中のダイオード1個による簡便な変換回路を使わせていただいています。感謝いたします。


FDD ADAPTER


FDDに直接装着して使用します。

FDDに装着した様子


そしてFDCからのケーブルと電源ケーブルを接続します。画像では、FM-7上の自作FDCカードと接続しています。この時、FDC右端のStep信号2倍化回路のスイッチをDouble側にセットしておきます。使用したFDDはTEACのFD-235HGです。
【注意】対応しているFDDには制限があります。構造上、34Pコネクタの上部に電源コネクタがあるMITSUMIのドライブにはそもそも装着できないので使用できません。これは、以前私がチェックした限りでは、このダイオード1個によるReady信号生成回路ではMITSUMIのD353やD359の中には動作しないものがあったために、対象外と考えたためです。確実に動作するのはTEACのFD-235HGやHFで、他にSONYのMPF920も動作確認をしています。これらについては、2019年12月31日の「FM-7でPC用のフロッピードライブを使う(その後の訂正・補足)」をご覧ください。

なお、FM-7ではStep信号2倍化回路が必要ですが、FM77AV20/40/40SX等のFDDが2DD仕様のものでは接続するだけでそのまま使用できます。私は手配線のものをFM77AV40SXで2019年以来使用していますが、特に不都合は生じていません。





ドライブ番号として0と1が選択できますので、2台までのFDDが制御できます。


FDDを2台制御できます

以上、手配線で使用していたものをプリント基板化してみたというだけの報告でした。

なお、画像のような基板が数多くできてしまいましたので、もしご希望の方がおられましたらお申し出くだされば、郵送料(84円)のみでお送りできます。


製作した基板

実際に製作するためには、34Pのピンヘッダ(オス)、34Pのピンソケット(メス)、通常の信号用ダイオード、3Pスライドスイッチが必要です。
また、本文中に書きましたように、対応していないドライブがあることをご承知おきください。


2DDドライブ用ステップ信号2倍化回路をFDD2台に対応させました

 2DDドライブ用ステップ信号2倍化回路を2台のFDDが接続できるように改良しました

2020年7月29日の「2DDドライブ用ステップ2倍化回路のその後」で紹介しましたステップ2倍化回路ですが、ドライブ毎にそれぞれ2倍化基板が必要となるのは煩雑なので、1枚の基板でドライブ2台を制御できるように改良しました。

最初は単純に2回路を1枚の基板に収めたものを製作して使用してみましたが、これは如何にも大きすぎて、扱いにくいものでした。


左:従来のもの 右:最初に製作した2回路版

そもそも、よく考えてみるとATtiny85が2個も必要なわけではありませんでした。ということで、回路を見直した結果、現在の基板と同じサイズに収めることができました。

その回路を示します。

FDD2台用回路


次に製作した2台用基板


右端の34PコネクタにFDCからのケーブルを、左端のコネクタとその隣の上向きのコネクタに2台のFDDへのケーブルを接続します。上下に出ている4PはFDD用の電源ケーブルです。
(FDD用のコネクタが左と上に向いているのは、当初、左向きのコネクタをメスにしてFDDに直接装着することでケーブルを省略できると考えていたからなのですが、それはそれで使いにくい面もあり、結局ケーブルで接続する形にしています。)

ドライブ番号は0~3から指定でき、それぞれStep信号2倍化回路を通すか通さないかを選択できますので、PC用の2DDのFDDのみでなくGOTEKや2Dのドライブも接続できます。
(GOTEKを使用する場合は、常に本体のドライブ番号はS0ではなくS1にセットしておきます。)

下画像はGOTEKをドライブ0に、PC用FDDをドライブ1に指定して、自作のFDCカードに接続した様子です。


使用中の様子

長いケーブルを使用したので、結構ゴチャゴチャに見えますね...

でも従来の基板と同じサイズのもので2台のFDDが制御できるようになったので、目的は達成できました。


2022年9月15日木曜日

自作クロスアセンブラの修正とASSIST09のFM-7への移植

 ASSIST09がアセンブルできるように自作クロスアセンブラを修正し、FM-7に移植してみました

【9月20日訂正】末尾に訂正が一個所あります。

発注しているプリント基板ができあがるまでハードいじりは措いておいて、いつかは直そうと思っていたソフトの修正に取り掛かりました。

まずは6809用のクロスアセンブラですが、以前、「必要に迫られて自作したアセンブラ等のツールソフトの紹介(2021年9月1日)」で紹介したもので、ASSIST09のソースをアセンブルする際にはそのままではアセンブルできず、ソースを修正する必要がありました。

例えばASSIST09のソースの1684行は

FCB 'H,$01,'H,$01,'H,$00,',,$00 --> $48,$01,$48,$01,$48,$00,$2C,$00 になって欲しい

となっていますが、この中の「',」が$2Cとならずに区切り記号と解釈されてしまうのです。ですので、アセンブルする際には「',」を$2Cと置き換えてアセンブルしていました。

ちなみに、使用者が多いと思われるアークピットさんのX6809でもこれは正常にアセンブルされません。アセンブル結果は次のようになります。

$48,$2C,$24,$30,$31,$2C,$00,$01,$48,$2C,$24,$30,$30,$2C,$00,$00

これは、X6809では1文字は「'」で囲んで「','」にしなければならないという仕様になっているからです。

私の自作アセンブラ(6809用、6800用)でも、最初はそのような仕様にしていたのですが、ASSIST09だけではなく他のソースでも後ろの「'」のない書き方が多いようなので、どちらの書き方にも対応するように変更した結果、「',,」が正常に変換されないというバグが発生していました。

もう一つの不具合も FCB疑似命令に関するもので、負数がちゃんと変換されないというもので、FCBのオペランド中での負数の処理にバグがありました。そのため、やはりアセンブル前にソースのFCBのオペランド中の-1を$FF,-2を$FEのように書き換えていました。

上記の2つの不具合はいずれもFCBのオペランド文字列の解釈に関するものでしたので、それを修正したVer1.92を作成しました。これによって「',」でも「','」のどちらでも正しく変換できるようになりました。


Ver1.92でのアセンブル結果


WARNINGが出ている


ASSIST09をアセンブルするために

以上で自作クロスアセンブラでASSIST09をアセンブルできるようになったのですが、実はソースそのものを何箇所か変更する必要があります。

私が以前から使用していたものは、書籍「MC6809-MC6809Eマイクロプロセッサ プログラミング マニュアル」中のソースではなくバイナリを手入力したもので、必要な個所を直接書き換えて使用していました。当時はアセンブラを所有していなかったので、ソースをアセンブルできなかったのです。

その後、ネットからソースを入手しましたが、そのソースが書籍のものと何箇所か異なっていることに気づいてはいましたが、ちゃんとソースを読んでいませんでした。

最近、ソースをアセンブルしてバイナリを得る必要があったので、書籍と見比べた結果、やはり書籍版を使用することにして、書籍版に合わせてネット版ソースを変更しました。

(私は今まで書籍版のバイナリを使い続けており、ネット版をそのままアセンブルしたものを使用したことがありませんので、動作にどんな違いがあるのかは分かりません。)

変更したのは下記の4箇所です。

1.825行からのCIDTAルーチン

2.870行からのCODTAOルーチン

3.1085行のCPX命令は6800の命令なのでCMPXに変更

4.1619行のCBKADDルーチンのDECBを変更

以上の変更を加えたソースを自作クロスアセンブラでアセンブルすると6つのWarningが出ますが、これはExtend命令と解釈したがDirect命令に変更できるよという警告ですので、該当の6箇所のオペランドの先頭にDirect命令を指示する「<」を付加します。改めてアセンブルするとWarningも出ずに、書籍と同じバイナリが生成されました。

以前は、Direct命令に変更できる場合は常に変更したコードを生成するようにしていたのですが、これではまずい場合がありましたので現在のような仕様にしているのですが、元のソースを書き換える必要があるのは嬉しくないので、変更するかしないかを選択できるようにしたVer1.93を作成しました。プログラムソースをかなり書き換えたので、正常に動作するかどうかをテスト中です。


FM-7へのASSIST09の移植

以前、ASSIST09に関するブログを書いた際には、もう既に移植済みのASSIST09にコマンドを追加したという内容でした。

「ASSIST09に追加したLoad, Saveコマンドを改良しました」(2018年6月27日)

「ASSIST09にLoad, Saveコマンドを追加」(2018年5月26日)

今さらとは思いますが、マイコンなどへの移植はネットでもいくつか見ますが(私も昔から自作マイコンで使用しています)、FM-7への移植はあまり見たことがないので、ここでFM-7へのASSIST09の移植の手順について書いてみたいと思います。

なお、以下の移植の手順についてはインターフェース誌1982年4月号の「ASSIST09の詳細とFM-8への移植(高橋豊)」をほとんどそのままFM-7に適用したものです。高橋豊さんに感謝いたします。

[1]最も簡単な移植(入出力にACIAを使用、領域圧縮なし、拡張ROMなし、アドレス$F800からに配置)

アセンブラが使用できればソースを変更してバイナリを生成できますので、ソースの24行、25行のACIAとPTMのアドレスを変更し、配置するアドレスを20行に書いてアセンブルするだけです。PTMが実装されていない場合はアドレスに$0000を書いておきます。

しかし、これでは2KBのASSIST09の他に6KBもの使われないエリアが生じて無駄が多くなりますし、そもそも、FM-7のようなパソコンの$F800からには移植できません...

[2]簡単な移植(入出力にACIAを使用、領域圧縮なし、拡張ROMなし、任意のアドレスに配置)

任意のアドレスに配置する場合には、20行目のROMBEG(スタートアドレス)を書き換えます。さらに[1]の設定に加えて、SWIやNMIのベクターアドレスをASSIST09用に再設定する必要があります。ベクターアドレスについては直接設定することになります。

[3]未使用領域を圧縮して移植(拡張ROMあり、他は[2]と同様)

拡張ROMを使用する場合は、それを用いて必要な再設定をすることができます。図のFM-7への配置例で示したものでは、$6800~$6FFFにASSIST09を配置し、その下に$100バイトの拡張ROMを置き、その下からがスタック/ワークエリアとしています。ソースの変更箇所はROMBEG(スタートアドレス)とRAMOFS(拡張ROMのオフセット)のみで、他は拡張ROM中で設定できます。


ASSIST09の配置例


ASSIST09は拡張を容易にするために、自身のアドレスから2KB下に$20,$FE(BRA *)があると、拡張ROMがあるとみなし、ASSIST09の起動前に$20,$FEの次のアドレスにサブルーチンジャンプすることで、ユーザの初期化プログラムなどを実行することができます。図では、2KB下ではなく$100バイト下に設定しています。

この初期化プログラム中で必要な処理を書くわけですが、最小限必要な処理は以下の2つです。

・1文字入力ルーチン、1文字出力ルーチンをFM-7のそれに置き換える。

・SWI、NMIルーチンをASSIST09用に置き換える。

SWIはASSIST09の内部でサブルーチンコールなどのために使用しています。NMIはBREAKキーでF-BASICに戻るために使います。

その他、コマンドの拡張もここで行うことができます。


拡張ROMの例を下に示します。まず最小限のものです。

  1. 0001 *
  2. 0002 * ExROM for FM-7 (最小版)
  3. 0003 *
  4. 0004 * ASSIST09の詳細とFM-8への移植
  5. 0005 * 高橋豊 インターフェース 19824月号 PP138-162
  6. 0006 *
  7. 0007 6800 ROMBEG EQU $6800
  8. 0008 0100 ROMSIZ EQU $100
  9. 0009 6700 ROM2OF EQU ROMBEG-ROMSIZ
  10. 0010 0020 LINSIZ EQU $20
  11. 0011 67E0 ROMLIN EQU ROMBEG-LINSIZ
  12. 0012
  13. 0013 0016 QCIDTA EQU 22
  14. 0014 001C QCODTA EQU 28
  15. 0015
  16. 0016 * ----- USER ROM ------
  17. 0017
  18. 0018 6700 ORG ROM2OF
  19. 0019
  20. 0020 6700 20 FE BRA * USER ROM MARK
  21. 0021
  22. 0022 6702 INIT EQU *
  23. 0023 * CIDTA==> GETKEY
  24. 0024 6702 31 8C 0C LEAY <GETKEY,PCR
  25. 0025 6705 10AF C8 16 STY QCIDTA,U
  26. 0026 * CODTA==> OUTCRT
  27. 0027 6709 31 8C 27 LEAY <OUTCRT,PCR
  28. 0028 670C 10AF C8 1C STY QCODTA,U
  29. 0029 6710 39 RTS
  30. 0030
  31. 0031 * FM-7 HANDLER
  32. 0032 DB6D GTKEYE EQU $DB6D INPUT 1 CHR
  33. 0033 D9D9 OTCRTE EQU $D9D9 OUTPUT 1 CHR
  34. 0034 FBF7 CSRONE EQU $FBF7 CURSOR ON
  35. 0035 FBEB CSROFE EQU $FBEB CURSOR OFF
  36. 0036 8684 BASICE EQU $8684 RETURN TO BASIC
  37. 0037 0313 STPFLG EQU $0313 BREAK FLAG
  38. 0038
  39. 0039 6711 GETKEY EQU *
  40. 0040 6711 34 7C PSHS B,DP,X,Y,U
  41. 0041 6713 4F CLRA
  42. 0042 6714 1F 8B TFR A,DP
  43. 0043 6716 B6 0313 LDA STPFLG
  44. 0044 6719 27 03 BEQ CONT
  45. 0045
  46. 0046 671B 7E 8684 JMP BASICE
  47. 0047
  48. 0048 671E BD FBF7 CONT JSR CSRONE
  49. 0049 6721 BD DB6D JSR GTKEYE
  50. 0050 6724 1C FE ANDCC #$FE
  51. 0051 6726 27 09 BEQ GTKYRT
  52. 0052 6728 34 02 PSHS A
  53. 0053 672A BD FBEB JSR CSROFE
  54. 0054 672D 35 02 PULS A
  55. 0055 672F 1A 01 ORCC #1
  56. 0056 6731 35 FC GTKYRT PULS B,DP,X,Y,U,PC
  57. 0057
  58. 0058 6733 OUTCRT EQU *
  59. 0059 6733 34 7E PSHS A,B,DP,X,Y,U
  60. 0060 6735 4F CLRA
  61. 0061 6736 1F 8B TFR A,DP
  62. 0062 6738 A6 E4 LDA ,S
  63. 0063 673A BD D9D9 JSR OTCRTE
  64. 0064 673D 35 FE PULS A,B,DP,X,Y,U,PC
  65. 0065
  66. 0066 67E0 ORG ROMLIN
  67. 0067
  68. 0068 *LINK TO FM-7
  69. 0069 0269 MONTRP EQU $0269 FM-7 MONITOR
  70. 0070 01D7 SWITRP EQU $01D7 FM-7 SWI
  71. 0071 01DA NMITRP EQU $01DA FM-7 NMI
  72. 0072
  73. 0073 67E0 LINKER EQU *
  74. 0074 67E0 30 8C 54 LEAX <RESET,PCR
  75. 0075 67E3 BF 026A STX MONTRP+1
  76. 0076 67E6 308D 07FE LEAX SWI,PCR
  77. 0077 67EA BF 01D8 STX SWITRP+1
  78. 0078 67ED 308D 07FB LEAX NMI,PCR
  79. 0079 67F1 BF 01DB STX NMITRP+1
  80. 0080 67F4 86 7E LDA #$7E JMP $****
  81. 0081 67F6 B7 0269 STA MONTRP
  82. 0082 67F9 B7 01D7 STA SWITRP
  83. 0083 67FC B7 01DA STA NMITRP
  84. 0084 67FF 39 RTS
  85. 0085
  86. 0086 6837 RESET EQU ROMBEG+$037 ASSIST09 START
  87. 0087 6FE8 SWI EQU ROMBEG+$7E8 ASSIST09 SWI
  88. 0088 6FEC NMI EQU ROMBEG+$7EC ASSIST09 NMI
  89. 0089
  90. 0090 END
  91.  
  92. 0 error(s), 0 warning(s) is detected.
  93.  
  94. Label address
  95. BASICE 8684 CONT 671E CSROFE FBEB CSRONE FBF7 GETKEY 6711
  96. GTKEYE DB6D GTKYRT 6731 INIT 6702 LINKER 67E0 LINSIZ 0020
  97. MONTRP 0269 NMI 6FEC NMITRP 01DA OTCRTE D9D9 OUTCRT 6733
  98. QCIDTA 0016 QCODTA 001C RESET 6837 ROM2OF 6700 ROMBEG 6800
  99. ROMLIN 67E0 ROMSIZ 0100 STPFLG 0313 SWI 6FE8 SWITRP 01D7
 

コマンドの拡張は非常に有用ですので、高橋豊さんの例をそのままお借りしてコマンド拡張方法の具体例を示します。

  1. 0001 *
  2. 0002 * ExROM for FM-7 (拡張コマンドあり、ACIA/PTM処理あり)
  3. 0003 *
  4. 0004 * ASSIST09の詳細とFM-8への移植
  5. 0005 * 高橋豊 インターフェース 19824月号 PP138-162
  6. 0006 *
  7. 0007 6800 ROMBEG EQU $6800
  8. 0008 0100 ROMSIZ EQU $100
  9. 0009 6700 ROM2OF EQU ROMBEG-ROMSIZ
  10. 0010 0020 LINSIZ EQU $20
  11. 0011 67E0 ROMLIN EQU ROMBEG-LINSIZ
  12. 0012 0000 PTM EQU $0000
  13. 0013 0000 ACIA EQU $0000
  14. 0014
  15. 0015 000A LF EQU $A
  16. 0016 000D CR EQU $D
  17. 0017 0020 SPACE EQU $20
  18. 0018
  19. 0019 0003 PDATA EQU 3
  20. 0020 0009 VCTRSW EQU 9
  21. 0021
  22. 0022 0016 QCIDTA EQU 22
  23. 0023 001C QCODTA EQU 28
  24. 0024 002A QEXPAN EQU 42
  25. 0025 002C QCMDL2 EQU 44
  26. 0026 002E QACIA EQU 46
  27. 0027 0034 QPTM EQU 52
  28. 0028
  29. 0029 009B NUMBER EQU $9B
  30. 0030
  31. 0031 * ----- USER ROM -----
  32. 0032
  33. 0033 6700 ORG ROM2OF
  34. 0034
  35. 0035 6700 20 FE BRA * USER ROM MARK
  36. 0036
  37. 0037 6702 INIT EQU *
  38. 0038 * CIDTA==> GETKEY
  39. 0039 6702 31 8C 23 LEAY <GETKEY,PCR
  40. 0040 6705 10AF C8 16 STY QCIDTA,U
  41. 0041 * CODTA==> OUTCRT
  42. 0042 6709 31 8C 3E LEAY <OUTCRT,PCR
  43. 0043 670C 10AF C8 1C STY QCODTA,U
  44. 0044 * PTM==> USER PTM
  45. 0045 6710 108E 0000 LDY #PTM
  46. 0046 6714 10AF C8 34 STY QPTM,U
  47. 0047 * ACIA==> USER ACIA
  48. 0048 6718 108E 0000 LDY #ACIA
  49. 0049 671C 10AF C8 2E STY QACIA,U
  50. 0050 *SET USER COMMAND TABLE
  51. 0051 6720 31 8C 33 LEAY <USRCMD,PCR
  52. 0052 6723 10AF C8 2C STY QCMDL2,U
  53. 0053 6727 39 RTS
  54. 0054
  55. 0055 * FM-7 HANDLER
  56. 0056 DB6D GTKEYE EQU $DB6D INPUT 1 CHR
  57. 0057 D9D9 OTCRTE EQU $D9D9 OUTPUT 1 CHR
  58. 0058 FBF7 CSRONE EQU $FBF7 CURSOR ON
  59. 0059 FBEB CSROFE EQU $FBEB CURSOR OFF
  60. 0060 8684 BASICE EQU $8684 RETURN TO BASIC
  61. 0061 0313 STPFLG EQU $0313 BREAK FLAG
  62. 0062
  63. 0063 6728 GETKEY EQU *
  64. 0064 6728 34 7C PSHS B,DP,X,Y,U
  65. 0065 672A 4F CLRA
  66. 0066 672B 1F 8B TFR A,DP
  67. 0067 672D B6 0313 LDA STPFLG
  68. 0068 6730 27 03 BEQ CONT
  69. 0069
  70. 0070 6732 7E 8684 JMP BASICE
  71. 0071
  72. 0072 6735 BD FBF7 CONT JSR CSRONE
  73. 0073 6738 BD DB6D JSR GTKEYE
  74. 0074 673B 1C FE ANDCC #$FE
  75. 0075 673D 27 09 BEQ GTKYRT
  76. 0076 673F 34 02 PSHS A
  77. 0077 6741 BD FBEB JSR CSROFE
  78. 0078 6744 35 02 PULS A
  79. 0079 6746 1A 01 ORCC #1
  80. 0080 6748 35 FC GTKYRT PULS B,DP,X,Y,U,PC
  81. 0081
  82. 0082 674A OUTCRT EQU *
  83. 0083 674A 34 7E PSHS A,B,DP,X,Y,U
  84. 0084 674C 4F CLRA
  85. 0085 674D 1F 8B TFR A,DP
  86. 0086 674F A6 E4 LDA ,S
  87. 0087 6751 BD D9D9 JSR OTCRTE
  88. 0088 6754 35 FE PULS A,B,DP,X,Y,U,PC
  89. 0089
  90. 0090 * USER COMMAND
  91. 0091 6756 USRCMD EQU *
  92. 0092 6756 04 FCB 4
  93. 0093 6757 46 FCC /F/
  94. 0094 6758 0007 FDB FILL-*
  95. 0095 675A 04 FCB 4
  96. 0096 675B 58 FCC /X/
  97. 0097 675C 0041 FDB XFER-*
  98. 0098 675E FE FCB -2
  99. 0099
  100. 0100 675F FILL EQU *
  101. 0101 675F 8D 19 BSR GETNUM
  102. 0102 6761 109E 9B LDY <NUMBER
  103. 0103 6764 8D 14 BSR GETNUM
  104. 0104 6766 DE 9B LDU <NUMBER
  105. 0105 6768 33 41 LEAU 1,U
  106. 0106 676A 8D 0E BSR GETNUM
  107. 0107 676C 96 9C LDA <NUMBER+1
  108. 0108 676E 34 40 PSHS U
  109. 0109 6770 1F 21 TFR Y,X
  110. 0110 6772 A7 80 FILNXT STA ,X+
  111. 0111 6774 AC E4 CMPX ,S
  112. 0112 6776 26 FA BNE FILNXT
  113. 0113 6778 35 C0 PULS U,PC
  114. 0114
  115. 0115 677A GETNUM EQU *
  116. 0116 677A 86 2A LDA #QEXPAN
  117. 0117 677C 8E 0000 LDX #0
  118. 0118 677F 3F SWI
  119. 0119 6780 09 FCB VCTRSW
  120. 0120 6781 AD 84 JSR ,X
  121. 0121 6783 26 09 BNE ERR
  122. 0122 6785 81 20 CMPA #SPACE
  123. 0123 6787 27 04 BEQ RTS
  124. 0124 6789 81 0D CMPA #CR
  125. 0125 678B 26 01 BNE ERR
  126. 0126 678D 39 RTS RTS
  127. 0127
  128. 0128 678E ERR EQU *
  129. 0129 678E 30 8C 04 LEAX <ERRMSG,PCR
  130. 0130 6791 3F SWI
  131. 0131 6792 03 FCB PDATA
  132. 0132 6793 35 90 PULS X,PC
  133. 0133 6795 45 ERRMSG FCC /ERROR/,CR,LF,4
  134. 0134
  135. 0135 679D XFER EQU *
  136. 0136 679D 8D DB BSR GETNUM
  137. 0137 679F 109E 9B LDY <NUMBER
  138. 0138 67A2 8D D6 BSR GETNUM
  139. 0139 67A4 DE 9B LDU <NUMBER
  140. 0140 67A6 33 41 LEAU 1,U
  141. 0141 67A8 8D D0 BSR GETNUM
  142. 0142 67AA DC 9B LDD <NUMBER
  143. 0143 67AC 34 66 PSHS D,Y,U
  144. 0144 67AE A3 62 SUBD 2,S
  145. 0145 67B0 22 0E BHI BACKWD
  146. 0146 67B2 35 10 PULS X
  147. 0147 67B4 1E 12 EXG X,Y
  148. 0148 67B6 A6 80 FORWD1 LDA ,X+
  149. 0149 67B8 A7 A0 STA ,Y+
  150. 0150 67BA AC 62 CMPX 2,S
  151. 0151 67BC 26 F8 BNE FORWD1
  152. 0152 67BE 35 B0 PULS X,Y,PC
  153. 0153 67C0 30 CB BACKWD LEAX D,U
  154. 0154 67C2 A6 C2 BAKWD1 LDA ,-U
  155. 0155 67C4 A7 82 STA ,-X
  156. 0156 67C6 AC E4 CMPX ,S
  157. 0157 67C8 26 F8 BNE BAKWD1
  158. 0158 67CA 35 F0 PULS X,Y,U,PC
  159. 0159
  160. 0160 67E0 ORG ROMLIN
  161. 0161 *LINK TO FM-7
  162. 0162 0269 MONTRP EQU $0269 FM-7 MONITOR
  163. 0163 01D7 SWITRP EQU $01D7 FM-7 SWI
  164. 0164 01DA NMITRP EQU $01DA FM-7 NMI
  165. 0165
  166. 0166 67E0 LINKER EQU *
  167. 0167 67E0 30 8C 54 LEAX <RESET,PCR
  168. 0168 67E3 BF 026A STX MONTRP+1
  169. 0169 67E6 308D 07FE LEAX SWI,PCR
  170. 0170 67EA BF 01D8 STX SWITRP+1
  171. 0171 67ED 308D 07FB LEAX NMI,PCR
  172. 0172 67F1 BF 01DB STX NMITRP+1
  173. 0173 67F4 86 7E LDA #$7E JMP $****
  174. 0174 67F6 B7 0269 STA MONTRP
  175. 0175 67F9 B7 01D7 STA SWITRP
  176. 0176 67FC B7 01DA STA NMITRP
  177. 0177 67FF 39 RTS
  178. 0178
  179. 0179 6837 RESET EQU ROMBEG+$037 ASSIST09 START
  180. 0180 6FE8 SWI EQU ROMBEG+$7E8 ASSIST09 SWI
  181. 0181 6FEC NMI EQU ROMBEG+$7EC ASSIST09 NMI
  182. 0182
  183. 0183 END
  184.  
  185. 0 error(s), 0 warning(s) is detected.
  186.  
  187. Label address
  188. ACIA 0000 BACKWD 67C0 BAKWD1 67C2 BASICE 8684 CONT 6735
  189. CR 000D CSROFE FBEB CSRONE FBF7 ERR 678E ERRMSG 6795
  190. FILL 675F FILNXT 6772 FORWD1 67B6 GETKEY 6728 GETNUM 677A
  191. GTKEYE DB6D GTKYRT 6748 INIT 6702 LF 000A LINKER 67E0
  192. LINSIZ 0020 MONTRP 0269 NMI 6FEC NMITRP 01DA NUMBER 009B
  193. OTCRTE D9D9 OUTCRT 674A PDATA 0003 PTM 0000 QACIA 002E
  194. QCIDTA 0016 QCMDL2 002C QCODTA 001C QEXPAN 002A QPTM 0034
  195. RESET 6837 ROM2OF 6700 ROMBEG 6800 ROMLIN 67E0 ROMSIZ 0100
  196. RTS 678D SPACE 0020 STPFLG 0313 SWI 6FE8 SWITRP 01D7
  197. USRCMD 6756 VCTRSW 0009 XFER 679D
 


配置例にあるように、拡張ROM($6700~$67FF)とASSIST09($6800~$6FFF)を一つにまとめておいて、
 CLEAR ,&H6000
 LOADM "ASSIST" <-- ASSIST09とExROMを合体したファイル
 EXEC &H67E0
その後
 MON でASSIST09が起動します。ASSIST09から抜ける場合はBREAKキーを押します。

FM-7への移植手順は以上ですが、改めてインターフェース誌で情報を公開して下さった高橋豊さんに感謝いたします。

修正した6809用クロスアセンブラについてはチェックが終わり次第公開します。
それにしても、6809の命令一覧表には載っていない命令(例えば、LEA命令のプログラムカウンタ相対のDirectモード命令)が存在したりして、情報不足のせいか今一つ理解できないことがいくつかあるのが悩ましいところです。
【9月20日訂正】私の勘違い(&知識不足)でした。Directモード命令ではなく、プログラムカウンタ相対の8ビットオフセットか16ビットオフセットかの違いでした。