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復活

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である。

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

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

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

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

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

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