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

この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ライター(気合いを入れて制作。でも今や時代遅れ)
修繕する所は、
- 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台ともキチンと動作する。
これで、TRN-8が復活。しかもリッチに4ドライブ構成である。
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)
プログラミングは面白い。
ライブラリー再掲 ― 2018年09月29日 20:52
先に公開したファイルを見ていて、中途半端な感じがしているので、 再構成して再公開する事にした。
ますは、 CPMLIB.ZIP(6,381Byte)。 これには、トランジスタ技術で紹介されたプログラム群を収めた。ソースコードは著作権のこともあるので、 収録を見送った。CPMLIB.RELはモジュールライブラリーである。これをリンクしてご利用下さい。 また、CPMLIB.INCにインターフェースを纏めておいたのでご参照下さい。
お次は自作ライブラリー集、STRLIB.ZIP(5,925Byte)(これは発展途上中)。インターフェースをソースコードに書き込んだので、ご参照下さい。
最後に、サンプルプログラム。 SAMPLE.ZIP(5,925Byte) CPMLIBやSTRLIBの使用例としてご参照下さい。
最近のコメント