TRN-8にAm9511を2018年12月11日 12:06

Am9511A-1DC

Am9511とは、AMD社が開発し販売していたFloating Point Processor(FPP)である。 これをeBayで手ごろな価格で入手できた。入手理由は、TRN-8に搭載するためである。 しかしながら、越えなければならない山がいくつもある。

  1. クロック周波数。TRN-8のクロックは6.122MHzで、入手できたのはAm9511A-1DCで 3MHz。単純にTRN-8のクロックを分周して作成すればよいのだろうか。
  2. I/Oアクセスタイミングの違い。当然Am9511のI/Oは遅い。 WAITを挿入してタイミングを調整する仕組みが必要である。
  3. 電源の問題。Am9511は12Vが必要である。これは昇圧型のDC-DCコンバーターで 生成することになる。秋月で販売しているICを中心に組み立てるか、 AmazonやAli Expressで販売されている出来合いの物を組み込むか。悩ましい。
  4. TRN-8の追加改造。クロックとWAITを引き出す必要がある。
  5. ソフトウェアの問題。固定小数点・浮動小数点を取り扱う準備をする必要がある。 これはAMDのマニュアルを参照して作成するが、結構な量のコードを書くことになる。
  6. ライブラリー。Turbo Pascalなどからリンクするためのライブラリーが必要になる。

結構やることがある。ソフトウェアに関してはやり直しが簡単にできるが、 ハードウエアは簡単にできないから十分な検討が必要である。

当分楽しめそうだ。

QP/M -- タイムスタンプの実現2018年11月08日 06:55

CP/M互換のDOSは、何種類か存在する。QP/Mは、 QP/Mは、MICROCode Consulltingが、"it's FREE for non-commercial use"という条件付きで 無償で配布している物である。 Legacy Z-80のページから入手 できる。

QP/Mの特長は、

  • タイムスタンプ
  • CP/M 2.2完全互換
  • Z-80用に最適化
であろうか。

TRN-8に導入する手順は、以下の通りであった。

  1. リアルタイムクロックを用意する。これは前回で完了している。
  2. CP/Mをディスケットからブートするようにシステムディスクを準備し、 ジャンパーをセットする。これも完了している。
  3. リアルタイムクロックに時刻をセットするツールを用意する。前回作成した物では不十分であったので、 修正した。修正版は、 RTC.ZIPである。
  4. QP/Mインストレーションガイドに沿って、 リアルタイムクロックから日付/時刻を読みとる機能をCBIOS/ROMBIOSに追加する。
  5. QP/Mを導入する。
  6. 実際に使用するディスケットごとにタイムスタンプのための初期化を行う。

CBIOS/ROMBIOSの改造ができれば作業はほぼ完了したようなものであるが、QP/Mの 導入で、つまずいた。

導入の手順の中でSYSGENを使用しシステムトラックを書き込むところがあるが、 ここではCP/Mのシステムディスクからシステムを読み込むようにする必要がある。 QP/MのインストーラはCP/Mの情報を使って自分自身をカスタマイズする様である。この点に注意しさえすれば、幾つかの質問に答えていくだけでインストール作業は完了する。 QP/Mインストレーションガイドに丁寧な解説が有るので、殆ど迷うことはない。

めでたくQP/Mのシステムディスクが出来上がれば、システムを再起動し、 QP/MのTIMEコマンドで、現在時刻が表示させ、動作の確認とする。

ディスケットの初期化は、QSTAMP/QSTAMPX/QSTAMPVの何れかのコマンドを 使用して初期化する。初期化するディスクには、ファイルが存在していてもかまわない。 それらのファイルのタイムスタンプは、作成日/最終更新日共に、00年00月00日 0時0分になる。 これらの日付の変更は、QSTATコマンドで行う事ができる。この後、作成したり更新したりすると、 タイムスタンプが更新されていく。タイムスタンプにはもう一つあって、QBACKUPコマンドで バックアップするとバックアップ日時を書き込み、バックアップ済みのフラグを立ててくれる。

CBIOS/ROMBIOSのデバッグに手間取ったが、冒頭のスクリーンショットのように導入する事ができた。

TRN-8にReal Time Clock(RTC)を2018年10月29日 09:53

右端がRTC-7301DG.(まだまだ空き地がある)

TRN-8は今日も快調に動いている。こうなると欲が出てくるものだ。

ソフトウェア入手は、インターネットから適当に入手できる。けれどハードウェアは、 そうはいかない。自分で工作しなければいけない。

以前からTRN-8に時計をつけたかった。 いわゆるReal Time Clock、RTCである。タイマー割り込みを使ってソフトウェア的に作ることもできるが、 RTCチップで実現した。チップはセイコーエプソンのRTC-7301 DGである。秋月電子で購入できる。 何の変哲も無い回路である。アドレスデコーダーはGALを使って楽をした。またLDCキャラクターディスプレー のインターフェイスも作り込んである。

ソフトウェアは、

を準備した。

今回の制作では、とんだ失敗をしてしまった。有休品再利用を考えRTC用のソケットに板バネのICソケットを 使用した。再利用品である。ここでしくじった。ソケットのコンタクトが変形していて正しく 接触していなかった。これがよく分からず。オシロスコープまで持ち出した。オシロスコープは強い味方であるが、今回は、 目の方が有効であった。丹念に目視すると、接触端子が変形しているのを確認できた。やられた。 丸ピンソケットと交換し、シグナルがICのピンまで来ていることをオシロスコープで確認できた。前述のプリグラムで、 動作を確認できた。

時計が付いたら是非やってみたいことがある。ファイルにタイムスタンプをつけたい。 タイムスタンプをサポートしているCP/M互換(上位コンパチ)DOSを動かしてみたい。実は、もう目星をつけている物がある。 これは、後日。

WordMaster 動かしてみた2018年10月20日 21:24

まずはじめに、皆様にごめんなさいを言わねばならない。それは、前に公開した STRLIB.RELのESCAPEモジュールにバグがありました。ごめんなさい。サンプルで作ったプログラムでは、 何事もないように動いてしまいうまい具合にできたと思っていました。 修正版と差し替えました。これです STRLIB.ZIP

さて、本題。TRN-8のプログラムはCP/M付属のEDで書いてきた。そんなに長いプログラムを書くことがなかったし、 必要最低限の機能が備わっているので特段の不自由を感じてはいなかったが、でも、やはり楽をしたい。

CP/Mには非常に多くのテキストエディターが存在するが、その中でもWordMasterが一番人気ではないだろうか。 現代はよくした物で過去の遺産を引き継いで保管してくださる方々が沢山いる。CP/M関連では The *HUMONGOUS* CP/M Software Archivesからたどると、歴史的遺産が手に入る。WordMasterは、 そこからThe Retrocomputing Archiveをたどって、 CP/M Text Editors and Word Processorsページで入手した。

入手したパッケージには、インストーラーとかコンフィグレーターが無く、その代わりアセンブラーで書かれた5本の サンプルコードが付属していた。これを手本に自分の環境"ANSIターミナル"に合わせてカスタマイズ(改造)し、パッチを当てれば、 WordMasterが動作するだろうと至極楽観的な考えで作業を始めた。 なお、入手したパッケージに含まれるファイルは以下の通り。

  • BEE.ASM -- BEEHIVE 150 (CROMEMCO 3100)用にカスタマイズされたファイル(これをカスタマイズした)
  • H89.ASM -- HEATH H89 または H19 TERMINAL用にカスタマイズされたファイル
  • HAZ.ASM -- HAZELTINE 1500用にカスタマイズされたファイル
  • LSI.ASM -- ADM3-A、SOROC-IQ/120 と IMSAI VIO用にカスタマイズされたファイル
  • SOL.ASM -- PTCO-SOL用にカスタマイズされたファイル
  • WM.COM --- WordMaster本体
  • WM.HLP --- ヘルプファイル
  • WMH89.COM -- たぶんH89.ASMでカスタマイズされたWordMaster
  • WM-SOROC9.COM -- たぶんSOL.ASMでカスタマイズされたWordMaster

パッチの当て方の予想は、

1:パッチ用のASMファイルを作りASMでアセンブルして、HEXファイルを作る。

2:DDTでWordMasterを読み込む。

3:アセンブル済みのパッチを上書きする。

4:メモリー上にできあがったWordMasterをSAVEでファイルに落とす。

と見当をつけた。

まずは、パッチファイルの確認。全てのパッチファイルには本体からコールされたり、変数領域として 参照されるところがある。これらのアドレスは固定である。パッチを作成する上で埋め込むことのできる コードの領域が制限される。ひとまず、全てのパッチファイルをアセンブルしてみた。 案の定、それらのアドレスが出てきた。

1:画面コントロール用ロジックが、2つ。これをカスタマイズする。

2:動作環境のパラメーターを入れておく変数領域。コメントをよく読んで、設定値を入れる。

画面コントロール用ロジックは、画面消去ロジックとカーソル位置コントロール ロジックである。適当に拡張用のメモリースペースがあり楽ちんと考えていたが、はまってしまった。

画面クリアロジックは、2Byte余り。とりあえずNOPでつぶす。

カーソル位置ロジックは一時変数領域も含めて48Byteオーバー。スペア用の領域を使い切っても、 33Byteオーバーしてしまう。

最初のパッチ:ANSI0000.ASM)

パッチ第二弾:ANSI0001.ASM)

どうした物かとソースファイルを眺めてたら、下記のようなコメントを発見。

          ; **** MODIFYABLE CONSTANTS *****

          ;PBEGMEM POINTS TO BEGINNING OF MEMORY TO USE
          ;FOR EDIT BUFFER AND SCRATCHPAD. IF SPACE IS NEEDED
          ;FOR PATCHES, PUT THEM WHERE THIS POINTS AND
          ;INCREASE THIS POINTER. REMEMBER TO USE A LARGE
          ;ENOUGH "SAVE" COMMAND!
編集用バッファ領域をちょこっともらって解決できそう。やってみる。テスト版パッチファイルは ANSI0002.ASM

作業手順は以下の通り。想定の範囲内であった。

          
          C>A:DDT
          DDT VERS 2.2
          -IWM.COM
          -R
          NEXT  PC
          2700 0100
          -IANSI0002.HEX
          -R
          NEXT  PC
          29EE 0000
          -G0
          63K CP/M VER 2.2   (BIOS VER 3.1)
                                (C) 1988.12.1.  K.YOSHIDA
          C>SAVE 41 WMANSI.COM
          C>DIR WMANSI.COM
          C: WMANSI   COM
          C>

動作確認。先頭の写真の通りWordMasterが動いた。実はまだ動作がおかしい。最下段の行の表示が、 うまくスクロールしてくれない。これはパッチファイル中、画面行数の設定値を調整し解決した。

パッチファイルの最終版は ANSI.ASM。 ご興味がありましたらご参照ください。

これで、CP/Mの開発環境が10年ぐらい進歩したと思う。

The CCP Auto-Load Feature2018年10月04日 15:40

TRN-8は、ROM上にCCP/BDOS、CBIOS、ROMBIOSを持っているので、 ディスケット上にシステムを書き込んでいなくとも、リブートできる。(ドライブAに、 フォーマット済みのディスケットを入れておかねばならないが)

だが、ディスクからシステムを読み込む方が、融通が聞くことがある。

さて、Digital Research Source Code にCP/Mのパッチを集めたパッケージ"PATCHES"がある。 これをダウンロードして眺めていると、"The CCP Auto-Load Feature(CPM22APN.01)"というのがあった。 内容は、CCPがロードされるごとに特定のプログラムを動かすという物だ。これはCCPの一部にパッチをあてることで実現している。

これを実現するのは、現状のTRN-8ではROMを書き換えが必要である。が、TRN-8は、ジャンパーを1本飛ばすことで、CCP/BDOSをシステムディスクから読み込むようにできる。今回の実験には、この方が都合がよい。

ところが、システムディスクはどうやって作るかは、TRN-8の製作記事中では言及されていない。 手元にある村瀬康治氏の「実習CP/M」を参照し、システムディスクを作成した。

手順としては

1. MOVCPMで、63K CP/Mのイメージを作成する。

2. DDTで、CP/MのイメージとCBIOSを結合する。

3. 次いで、パッチをあてる。

4. SYSGENで、システムイメージをシステムディスクに書き込む。

となる。ワークディスクを用意して早速やってみる。

          a>dir

          A: MOVCPM   COM : DDT      COM : CBIOS    HEX : SYSGEN   COM
          A: STAT     COM
          a>movcpm 63 *


          CONSTRUCTING 63k CP/M vers 2.2
          READY FOR "SYSGEN" OR
          "SAVE 34 CPM63.COM"  <==== メモリー上にシステムが展開された。

          63K CP/M VER 2.2   (BIOS VER 3.1)

                                (C) 1988.12.1.  K.YOSHIDA
          a>save 34 cpm63.com  <==== 展開されたシステムをファイルに落とす。
          a>dir
          A: MOVCPM   COM : DDT      COM : CBIOS    HEX : SYSGEN   COM
          A: CPM63    COM : STAT     COM
          a>ddt cpm63.com   <==== システムイメージをロードする。
          DDT VERS 2.2            このうち必要なの0980Hから1F80Hである。
          NEXT  PC
          2300 0100
          -icbios.hex
          -r2980       <==== CBIOS.HEXをオフセット2980Hをつけて読み込む。
          NEXT  PC           実際には、1F80Hから配置される。
          2300 F600

          63K CP/M VER 2.2   (BIOS VER 3.1)
                                (C) 1988.12.1.  K.YOSHIDA
          a>sysgen     <==== メモリー上のシステムイメージをディスクに書き込む。           

          SYSGEN VER 2.0 FOR TRN-8   (C) 1988.12.1. K.YOSHIDA

          SOURCE DRIVE NAME (OR RETURN TO SKIP)
          DESTINATION DRIVE NAME (OR RETURN TO REBOOT)a <== ドライブAのディスクに書き込む。
          DESTINATION ON A, THEN TYPE RETURN
          FUNCTION COMPLETE
          DESTINATION DRIVE NAME (OR RETURN TO REBOOT)

          63K CP/M VER 2.2   (BIOS VER 3.1)
                      (C) 1988.12.1.  K.YOSHIDA
          a>

ここで、いったん電源を落としディスクからシステムを読み込むようにジャンパーを設定する。 再起動すると、

          63K CP/M VER 2.2   (BIOS VER 3.1)
                                (C) 1988.12.1.  K.YOSHIDA
          A>dir
          A: MOVCPM   COM : DDT      COM : CBIOS    HEX : SYSGEN   COM
          A: CPM63    COM : STAT     COM
          A>ddt cpm63.com
お気づきであろうか。コマンドプロンプトが、小文字から大文字に変わった。 システムディスクをAドライブにセットしておかないと、システムはハングアップする。 うまくいっているようだ。

さて、"CCP Auto-Load Feature"の実験である。この機能は、コマンドをCCPに引き渡すバッファーに あらかじめコマンドを書き込んでおくことで実現している。システムがロードされる都度、コマンドが 実行される。サンプルは"dir"コマンドを実行するという物。先に作成したシステムディスクを 使用して、設定をする。

          A>dir

          A: MOVCPM   COM : DDT      COM : CBIOS    HEX : SYSGEN   COM
          A: CPM63    COM : STAT     COM
          A>ddt cpm63.com

          DDT VERS 2.2
          NEXT  PC
          2300 0100
          -icbios.com     <==== おっと、間違えた。
          -icbios.hex     <==== 正しく入力し直し。
          -r2980
          NEXT  PC
          2300 F600

セットするのは、

0987Hにはコマンド文字の長さ

0988Hからはコマンド文字列を書き込み、最後に00Hを書き込む

である。

          -d980 9af
          0980 C3 5C E3 C3 58 E3 7F 00 20 20 20 20 20 20 20 20 .\..X...        
          0990 20 20 20 20 20 20 20 20 43 4F 50 59 52 49 47 48         COPYRIGH
          09A0 54 20 28 43 29 20 31 39 37 39 2C 20 44 49 47 49 T (C) 1979, DIGI
          -s987
          0987 00 3    <==== コマンド文字列の長さは、3バイト。
          0988 20 44   <==== "D"
          0989 20 49   <==== "I"
          098A 20 52   <==== "R"
          098B 20 0    <==== 00Hでターミネートする。
          098C 20 .
          -g0

          63K CP/M VER 2.2   (BIOS VER 3.1)
                                (C) 1988.12.1.  K.YOSHIDA
          A>sysgen
          
          SYSGEN VER 2.0 FOR TRN-8   (C) 1988.12.1. K.YOSHIDA
          
          SOURCE DRIVE NAME (OR RETURN TO SKIP)
          DESTINATION DRIVE NAME (OR RETURN TO REBOOT)a
          DESTINATION ON A, THEN TYPE RETURN
          FUNCTION COMPLETE
          DESTINATION DRIVE NAME (OR RETURN TO REBOOT)
          
          63K CP/M VER 2.2   (BIOS VER 3.1)
                                (C) 1988.12.1.  K.YOSHIDA
          A: MOVCPM   COM : DDT      COM : CBIOS    HEX : SYSGEN   COM  <==== DIRコマンドが
          A: CPM63    COM : STAT     COM                                      実行された。
          A>^C
          
          63K CP/M VER 2.2   (BIOS VER 3.1)
                                (C) 1988.12.1.  K.YOSHIDA
          A: MOVCPM   COM : DDT      COM : CBIOS    HEX : SYSGEN   COM
          A: CPM63    COM : STAT     COM
          A>b:   <==== ドライブを変えて
          B>^C   <==== リブートすると。
          
          63K CP/M VER 2.2   (BIOS VER 3.1)
                                (C) 1988.12.1.  K.YOSHIDA
          B: ARGLIST  COM : COMP     COM : FUTY     COM : XSUB     COM  <==== ドライブBの
          B: ASM      COM : DDT      COM : LOAD     COM : PIP      COM        ディレクトリーが
          B: XFORMAT  MAC : XMODEM   COM : PEP      COM : DELETE   COM        表示される。
          B: UNCR     COM : SUB2COM  COM : USQ      COM : DELBR    COM
          B: LHRD     COM : ARK      COM : LHVW     COM : UNZIP    COM
          B: CRUNCH20 COM : TYPELZ20 COM : UNCR20   COM : UNARC    COM
          B: UNARCA   COM : XFORMAT  COM : SUBMIT   COM : ED       COM
          B: M80      COM : L80      COM : MAKESYM  COM : 8080     MAC
          B: Z80ASM   DOC : FORMAT   COM : README   LNK : TRN-8    MAC
          B: ARKZS    COM : COMPARE  LIB : ZSIDP    COM : 64180    MAC
          B: FUTY     Z80 : SLR180   COM : 180FIG   COM : Z80ASM   COM
          B: SLRNK1   COM : SLRIB    COM : FUTY     REL : ZSID     COM
          B: FUTY     LST : CONFIG   COM : MDUMP    COM : FDUMP    COM
          B: TYPEX    COM : XDIR     COM : SID      COM : HIST     UTL
          B: TRACE    UTL : STAT     COM : TEST     COM : ECHO     COM
          B: LC       COM : AUTOEXEC SUB : AUTOEXEC BAK

リブートするごとに、"DIR"コマンドが実行される事が確認できた。

ライブラリー再掲2018年09月29日 20:52

先に公開したファイルを見ていて、中途半端な感じがしているので、 再構成して再公開する事にした。

ますは、 CPMLIB.ZIP(6,381Byte)。 これには、トランジスタ技術で紹介されたプログラム群を収めた。ソースコードは著作権のこともあるので、 収録を見送った。CPMLIB.RELはモジュールライブラリーである。これをリンクしてご利用下さい。 また、CPMLIB.INCにインターフェースを纏めておいたのでご参照下さい。

お次は自作ライブラリー集、STRLIB.ZIP(5,925Byte)(これは発展途上中)。インターフェースをソースコードに書き込んだので、ご参照下さい。

最後に、サンプルプログラム。 SAMPLE.ZIP(5,925Byte) CPMLIBやSTRLIBの使用例としてご参照下さい。

CP/Mプログラミング三昧2018年09月22日 09:20

自作CP/MマシンTRN-8が快調に動くようになり、この所TRN-8にどっぷりとはまっている。 過去に作成したファイルを収めたディスケットを調べてみると、保管状態が良くダメージを受けずに ファイルを取り出せた。その中にはトランジスタ技術 1984年8月から1985年7月に連載された 藤井敦氏の「CP/Mを使いこなすために 初心者のためのアセンブラ入門」に掲載されたプログラム集が あった。当時の記事の切り抜きも見つかった。

この連載では、

  • プログラムの開始、終了関連モジュール
  • コンソール入出力関連モジュール
  • 16ビット演算モジュール
  • ファイル入出力関連モジュール
  • 応用プログラム
などが紹介されている。

これらのモジュールを眺めてみると、結構よく使う機能を網羅しているが、 コマンドライン引数取得関連のモジュールがない。コマンドライン引数でオプションを プログラムに引き渡すことは日常上茶飯事に行うことなので、このモジュール"GETARG"を作成する事にした。

  • 引数は、ブランク、タブ、コンマで区切る。
  • ダブルクォート又はシングルクォートで始まる引数は、次に同一の文字が現れるまで一塊として取り扱う。
  • "\"に続く文字列はエスケーブシーケンスとして解釈する。現在のところ、\\(エスケーブ文字自身)、\t(タブ)、 \xHH(16進数)をサポートしている。
      例えば、echoコマンド。
                c>echo     one   "two  and three" and\tmore
      
      とすると
                ONE TWO  AND THREE AND  MORE
      
      と表示する。文字はCP/Mが大文字に変換してしまう。ターミナルプログラムがVT-100やANSIターミナルを サポートしていれば、画面のコントロールもできる。
                c>echo \x1b[2J
      
      とすれば、画面が消去される。また、
                c>echo \x1b[1;1H     (<===すみません。"H"が抜けていました。)
      
      とすれば、カーソルが1行目の1カラムに移動する。echoは、改行するため2行目にコマンドプロンプとが表示される。

      関連ファイルは、これです。ご興味のあるかたはご覧ください。

      getarg.zip (8,254Byte)
      
      使用したツールは、以下のとおり。
      • アセンブラ Z80ASM(SLR Systems)
      • ライブラリアン SLRIB(SLR Systems)
      • リンケージエディタ SLRNK(SLR Systems)
      それに、エディタはCP/M標準のEDである。

      プログラミングは面白い。

CP/Mマシン復活2018年09月06日 17:49

TRN-8

この4ヶ月間、改造と称して破壊してしまったCP/Mマシンの復活に注力してきた。 そしてパワーアップして復活した。

このCP/Mマシンは、吉田幸作氏がトランジスタ技術 1989年4月から1990年3月の期間 「作りながら学ぶマイコン設計講座」と題した連載記事で紹介された物。 CPUカードのみならず、ROMライター、PALライターを含む。 プリント基板やROM、CP/M等の配布サービスを利用して組み上げた。

主な構成は、

  • CPUは、日立のHD64180
  • システムROMが32KB、RAMが256KB
  • 3.5インチFDD2台と8インチFDD1台に192KBのRAM DISK
  • コンソールをつなぐRS-232-Cポート
  • OSはCP/M 2.2でTPAは63KB
  • ROMライター(これは完成していない。完成していれば、もう少し楽ができたはず)
  • PALライター(気合いを入れて制作。でも今や時代遅れ)
であった。CP/Mが動くので、JUGのS/W配布サービスでS/Wを入手して楽しんだ。

修繕する所は、

  • CPUカード上のパターンカットした部分を修復。
  • システムROMを新規作成。これにはBoot Loader/CBIOS/ROMBIOS,CP/MのCCP/BDOSが入っている。
  • 8インチFDDインターフェースカードを作り直し。修復では対応できないほど破壊していた。
である。

CPUカードの修復は、パターンカットをしたところと回路図を見比べながら修復。これはすぐに完了した。

システムROM中のBoot Loader/CBIOS/ROMBIOSは、記事中にリストが掲載されているので間違いなくキーインすれば、 できあがるはず。CCP/BDOSはCP/Mは、 The Unofficial CP/M Web Siteで、ソースを入手できた。 素材がそろったが、ROMの特定の位置にそれぞれを書き込む必要がある。そのためにROMイメージ作成ツールを作成した。 ここから、アセンブルしてはROMを焼いてテストの日々が始まった。いくら丁寧に確認しながらソースを入力し CP/Mのコマンドプロンプトが表示されない。アセンブルエラーがないにもかかわらずである。デバッグメッセージを 出力するようにすると、今度は相対アドレスジャンプができなくなる始末。苦肉の策として、プリンターポートにLEDを つなぎ、目印パターンを表示するようにしてバグをあぶり出した。原因はアセンブラーのバグ。 明らかに間違った記述なのにエラーを検出していなかった。そこを修正し、めでたくCP/Mのコマンドプロンプトが表示された。 コマンドプロンプト

8インチFDDインターフェースカードは、FDD2台をサポートできるようにTTLを追加した。これも配線図通り制作すれば、 動くはずだったが、掲載されている回路図に3カ所の間違いがあった。1カ所はすぐに気がついて修正した。しかし、もう2カ所はなかなか気がつかなかった。8インチFDDでメディアのフォーマットを試みると、動作が安定しない。途中でハングアップしてしまう。しかもこれがランダムに起きる。回路図とにらめっこしながら配線を追っかけたが、間違いが見当たらない。TTLが死んだのかと思い、ばらしてTTLを テストしたが正常品であった。何かが違っているのだが、分からない。まるで出口のない洞窟に入ったかのよう。 この様なときは、気分転換して、新鮮な気持ちで取り組み直すしかない。新品の部品を取りそろえて組み直すことにした。 部品が到着するまでの間、じっくり回路図を眺めることにした。なんか違和感を感じる。この抵抗はどうしてここに? 回路図の間違いを2カ所発見。修正した回路図を元にカードを製作し、テスト。安定してフォーマットができるようになった。 もちろん、8インチFDD2台ともキチンと動作する。 新8インチFDDインターフェースカード

これで、TRN-8が復活。しかもリッチに4ドライブ構成である。 TRN-8復活

Super AKI-80でCP/M(構想編)2018年05月12日 16:08

Super AKI-80でCP/Mマシンを構想(夢想?)して見ました。概略は、以下のようなりました。 追加のボード(ADD ON Board)上に、RAMを32KB、ROMとRAMのバンク切り替えスイッチ、 FDCなどを乗せて、FDDを2台までサポートします。 デバッグ用に7セグメントLEDを追加しました。

                      Super AKI-80       ADD ON Board
                     ---------------    ---------------------------------------
                     | TMP Z84C015 |    |                                     |
                     |  ---------  |    |                                     |
                     |  |Z80 CPU|  |    |                                     |
----------           |  |  CTC  |  |    |  ---------                          |
|Terminal| <==Async======> SIO  |  |    |  | 7SEG  |                          |
----------           |  |  PIO ==========> |  LED  |                          |
                     |  ---------  |    |  ---------                          |
                     |  ---------  |    |  ---------                          |
                     |  |82C256 |  |    |  | BANK  |                          |
                     |  |  PPI  |  |    |  |Switch |                          |
                     |  ---------  |    |  ---------                          |
                     |  ---------  |    |      |     ---------    ---------   |
                     |  |  ROM  |<-------------+---->|  ROM  |    |  FDC  |   |
                     |  |(0000  |  |<==Address Bus==>|(0000  |==> |uPD765 |   |
                     |  | -7FFF)|  |<====Data Bus===>| -7FFF)|==> |       |   |
                     |  ---------  |    |            ----------   ---------   |
                     |  |  RAM  |  |    |                             A       |
                     |  |(8000  |  |    ------------------------------|--------
                     |  | -FFFF)|  |                                  V
                     |  ---------  |                               -------
                     ---------------                               | FDD |--
                                                                   ------- |
                                                                      ------
ROM/RAMを切り替えるバンクスイッチは、電源が入った直後は、0x0000から0x7FFFをSuper AKI-80上のROMを 生かします。
                     Super AKI-80       ADD ON Board
                    ---------------    ---------------  
                    |  ---------  |    |  /////////  |  
                    |  |  ROM  |  |    |  /  RAM  /  |  
                    |  |(0000  |  |    |  /(0000  /  |  
                    |  | -7FFF)|  |    |  / -7FFF)/  |  
                    |  ---------  |    |  /////////  |  
                    |  |  RAM  |  |    ---------------
                    |  |(8000  |  |
                    |  | -FFFF)|  |
                    |  ---------  |
                    ---------------
次に、モニターをAKI-80上のRAM(0x8000から0xFFFF)に移します。そして、モニターにジャンプし、 ROMとADD ON Board上のRAMを切り替えます。
                     Super AKI-80       ADD ON Board
                    ---------------    ---------------  
                    |  /////////  |    |  ---------  |  
                    |  /  ROM  /  |    |  |  RAM  |  |  
                    |  /(0000  /  |    |  |(0000  |  |  
                    |  / -7FFF)/  |    |  | -7FFF)|  |  
                    |  /////////  |    |  ---------  |  
                    |  |  RAM  |  |    ---------------
                    |  |(8000  |  |
                    |  | -FFFF)|  |
                    |  ---------  |
                    ---------------
これで、64KBのメモリー空間をRAMでカバーできます。

問題は、Siper AKI-80の改造です。

アドレスバス(A8からA15)を引き出す必要がありいます。CPUの足下から引き出すのは、工作が困難を 極めそうです。ROMのソケットあたりで細工してできないかを検討中です。それでもA15はCPUから直接 引き出す必要がありそうです。引き出し先のコネクターは、82C265とコネクター間のパターンをカットして、 引き出し先を工面します。また、ROMの/CSには、A15が接続されていますがこれもカットします。 そして、バンクスイッチからのバンク切り替え信号を接続することとします。

IOアドレスのデコーダーの出力、/Y0(0x20)から/Y3(0xC0)を引き出します。これは、 バンクスイッチやFDCのアドレス選択に使います。

7セグメントのLEDは、PIOのBポートに接続します。

このほかには、FDD用のVFOやら、バンク切り替え各用のLEDなどを搭載します。

ADD ON Boardのサイズは、Super AKI-80、2枚分とします。

できれば、8インチFDDも接続したいのですが、基板のサイズから考えて、きつそうな感じがします。

ま、回路を確定し、パーツを入手し、レイアウトを決める所から作業開始です。

そうそう、モニターの改造も必要になりますね。

MACよ、君は正しかった。2018年04月19日 19:53

ROMライター Leaper-3

Super AKI-80に搭載したモニタ-ープログラムは、Digital ReserchのMACを使ってアセンブルしていました。 ROMにプログラムを焼く時は、秋月電子で購入した、Leaper-3(パラレルポートで使用するタイプ)を使っています。 MACでアセンブルしたままのHEXファイルだと、ライターにファイルを読み込む時に、いつもエラーになります。 ファイルを見てみると、最後のレコードに問題があるのがわかりました。最後のレコードがいつも、

          :0000000000
になってしまいます。正しくは、EOFを示す
          :00010000FF
になるはずなのですが。理由が分からないし、時間もなかったので、エデイターで、毎回、書き直していました。

今日、MACのマニュアル"CP/M MACRO ASSEMBLER LANGUAGE AND APPLICATIONS GUIDE (Revision of Novenver 1980)"に掲載されているサンプルプログラムを 眺めていて、何か違うなと。サンプルプログラムは、下記のようになっています。

                      org      100h        ;transient program area
          bdos        equ      0005h       ;bdos entry point 
          wchar       equ      2           ;write character function
          
          ;enter with ccp's return address in the stack
          ;write a single character(?) and return
                      mvi      C,wchar     ;write character function
                      mvi      e,'?'       ;character to write
                      call     bdos        ;rwrite character
                      ret                  ;return to the cpp
                      end      100h        ;start address is 100h
END文に開始アドレスが書いてあります。これをアセンブルして出来上がったHEXファイルは、
          :080100000E021E3FCD0500C9EF
          :00010000FF
と、正しくEOFレコードを書き出しています。

END文から開始アドレスを削除してアセンブルすると、

          :080100000E021E3FCD0500C9EF
          :0000000000
見事、これまでの状態が再現されました。ここでした。END文に開始アドレスを付けるのが正解でした。

「MACよ、君は間違っていなかった。 間違っていたのは、わたしの方だった。」とつぶやきながら、納得しました。

マニュアルを疎かにしてはいけないと、肝に銘じた一件でした。