ヴィルト先生2024年01月06日 13:10

チューリッヒ連邦工科大学のOberonチームから、悲しい知らせが届きました。Pascal, Modulaといった プログラミング言語を世に送り出し、更にOberonという言語で記述したテキスト指向のオペレーティングシステムの開発者でもある ニクラウス ヴィルト先生が、なくなりました。

私が、ヴィルト先生のことを知ったのは、学生時代に参加したPascalの勉強会ででした。使用したテキストが、 ヴィルト先生らが書いた「Pascal(原題 Pascal User Manual and Report)」でした。この勉強会を通じて、Fortranとは違う プログラミング・パラダイムを知り、構造化されたプログラミングスタイルを身につけることができました。 このことは、仕事についてから、Cでのプログラム開発に、大いに役立ちました。 また、その後の、仕事においても、趣味においてでも、Pascalは重要な位置を締めてきました。

ヴィルト先生の著作を もう2冊持っています。「アルゴリズム+データ構造=プログラム(原題 ALGORITHMS+DATA STRUCTURES=PROGRAM)」と「アルゴリズムとデータ構造(原題 ALGORITHMS & DATA STRUCTURES)」です。この2冊は 兄弟になる著作でしょう。前者は、Pascalで、後者はModula-2でアルゴリズムの選択やそれに適したデータ構造の構築について 議論がなされています。これら3冊は、私にとってバイブル的存在であり、すぐに手に取れるところにおいています。

私がプログラマーとして成長するのに、大きな影響を受けたヴィルト先生のご冥福をお祈りましす。

ASSIT09で、8-Queens2023年12月21日 17:18

8-Queensを解くプログラムです。これは、8x8のマスにお互いが鑑賞しないようにQueenのコマの配置を求めるプログラムです。オリジナルで作成しようと頑張ったのですが、行き詰まってしまいました。いつものように、先人の方々のお知恵を拝借しました。調べてみると、ヴィルトの「アルゴリズム+データ構造=プログラム」にPascalで書かれたスマートな解がありました。暑中参照している「マイクロコンピュータのプログラミング」にもMicroPlanでの解が掲載されています。このMicroPlanの解を参照して、プログラムを作成しました。

さて、下敷きにしたプログラムは、Queenの配置を求めるルーチンが再帰的に書かれています。これをMC6809のアセンブラで書き下すのがキーポイントでしょう。想像しているより簡単に実現できました。MC6809にはスタックが、システムスタック Sとユーザースタック Uの2つがあります。このユーザースタックに、再帰的関数内部のローカル変数を退避させることでうまく行きました。 プログラム、アセンブルリスト、実行結果などは、こちらです。 8Queen.zip

いつものように、Lコマンドでロード・モジュールをダウンロードし、Cコマンドで、C000から実行させます。

Queenの配置が、次々と出てきます。

         === 8 Queens ===
           0 4 7 5 2 6 1 3
           0 5 7 2 6 3 1 4
           0 6 3 5 7 1 4 2
           0 6 4 7 1 3 5 2
           1 3 5 7 2 0 6 4
           1 4 6 0 2 7 5 3
           1 4 6 3 0 7 5 2
                  :
                  :
                  :
例えば、"0 4 7 5 2 6 1 3"は、
          カラム 0のQueenは、ロウ 0に
          カラム 1のQueenは、ロウ 4に
          カラム 2のQueenは、ロウ 7に
          カラム 3のQueenは、ロウ 5に
          カラム 4のQueenは、ロウ 2に
          カラム 5のQueenは、ロウ 6に
          カラム 6のQueenは、ロウ 1に
          カラム 7のQueenは、ロウ 3に
にあることを示しています。こんな配置です。
            0 1 2 3 4 5 6 7
          0 Q . . . . . . .
          1 . . . . . . Q .
          2 . . . . Q . . .
          3 . . . . . . . Q
          4 . Q . . . . . .
          5 . . . Q . . . .
          6 . . . . . Q . .
          7 . . Q . . . . .

ASSIT09で、マイクロトレック2023年11月07日 20:48

Assist09で動くアプリケーションを考えていたところ、石田晴久編「マイクロコンピュータのプログラミング」に 掲載されている、「宇宙戦争ケームのプログラム」が目に止まりました。いわゆる、スタートレックものです。石田先生作の Tiny-BASICで書かれた100行程度のプログラムリストが掲載されています。これを人間コンパイラになって、 6809アセンブラに変換しました。もとのリストには幾つか不具合がありましたが、解決しました。 結果、約700行のプログラムができました。 ここから、アセンブラ・ソース、アセンブル・リスト、ロード・モジュールを含むZIPファイルをダウンロードできます。 mtrek.zip

Assist09で実行するには、Lコマンドでロード・モジュールをダウンロードし、Cコマンドで、C000から実行させます。 こんな感じです。

"CAPTAIN :"に続いて、コマンドを入力します。 コマンドは、1:ミサイル発射、2:セクター移動、3:新しいギャラクシーにワープ、です。ミサイルでクリンゴンをすべて やっつければ"WIN"、時間切れやエネルー切れで、"LOOSE"です。



このプログラムは、ポジションインディペントなプログラムです。Lコマンドにオフセットをつけてロードしても、 問題なく動作します。

ASSIST09で、Hello World!2023年10月29日 08:15

モトローラのMC6809を使った自作マイコン"MyOwn6809"は、Assist09というモトローラが発表した モニタープログラムを搭載しています。Assist09には、12のサービスルーチンがあります。

  1. INCHP 文字入力
  2. OUTCH 文字出力
  3. PDATA1 文字列送出
  4. PDATA 改行と文字列送出
  5. OUT2HS 1バイトの16進化
  6. OUT4HS 1ワードの16進化
  7. PCRLF 改行
  8. SPACE スペース送出
  9. MONITOR Assist09の起動
  10. VCTRSW ベクタ・スワップ
  11. BRKPT ユーザ・ブレイク・ポイント
  12. PAUSE プログラム・ブレークとチェック

これらのサービスを使うことで、プログラムの開発をスムーズに進めることができます。

いつもの Hello World!を作ってみました。

* HELLO.ASM -- SAY "HELLO WORLD!"
* ASSIST09 SERVICE ENTRY CODE
PDATA   EQU     3       PUT CR/LF AND STRING TO CONSOLE

* CONSTANT VALUES
EOT     EQU     $04     END OF TEXT
CR      EQU     $0D     CARIGE RETURN
LF      EQU     $0A     LINE FEED
RAMTOP  EQU     $C000
*
        ORG     RAMTOP
MAIN:
        LEAX    HELLO,PCR
        SWI
        FCB     PDATA
        RTS
*
HELLO:  FCC     'HELLO WORLD!'
        FCB     CR,LF,EOT
*
        END

このプログラムは、RAMエリアの先頭、C000からロードするように作ってあります。このようにして、実行します。

このプログラムには、プログラムをどのような位置にロードしても実行できるように、おまじないをかけています。 論より証拠、C000からロードして、更にC020からにロードして実行してみました。

C020から実行しても正常に動いています。 いわゆる「リロケータブル」なプログラムになっています。変数のアドレスを指定するのに、プログラムカウンタの値を基準にして 指定しているので、このようなことができます。プログラムカウンタ相対です。

このプログラム中、出力文字列のアドレスを指定する部分、

        LEAX    HELLO,PCR
で、"PCR"がプログラムカウンタ相対を指定しています。

6AV6-6AR5直結アンプ --測定編--2023年10月06日 14:09

入出力特性を測定してみました。アンプにはスピーカーの代わりに10Ωの抵抗を接続し、1KHzの信号を入力してダミーロード両端の 電圧を測定した結果は、このとおりです。約1.75Vあたりからグラフが寝てきます。このときの出力は、約0.3W程度です。

測定中に面白いことが起きました。入力を増やしていくと、ある点から音が聞こえだします。音のもとは、出力トランスでした。 ラジオ用の古いトランスですので、コアをまとめている枠に僅かな緩みがあり、それでコアが鳴いているようです。 トランスの交換を考えましたが、実験ですのでこのままにしました。

次にNFBをかけてみました。本来ならば、アンプ全体の特性を考えて、NFB量を計算する必要がありますが、 ここでは、エイ!ヤ!と、下記の図のようにしてみました。

これでNFB量は2.31です。dBで表すと、20log2.31=7.3[dB]です。これで、全体のゲインは、27/2.31=11.7[倍]になります。 NFB回路を追加して、同様に入出力特性を測定してみました。

グラフからゲインを見てみると、約11.3倍です。ほぼ計算通りです。また出力は、0.29[W]程度です。

これで、直結アンプの実験の完了としました。

6AV6-6AR5直結アンプ --制作編--2023年09月27日 09:50

制作しました。シャーシは手持ちのものを再利用したので、 無駄なあらが空いてますが、実験なんで、これで良しとしました。

内部は、こんな感じです。

問題の電圧配分は、このようになりました。グリットバイアスが、13Vと深めです。まあこんなものでしょう。

信号を入れてテストしました。左手の下は、300Hz/1KHzのツートーン・オシレーターで、その上が電源です。

スピーカーからは、それなりの音が出てきました。まあ、こんなものでしょう。ということで、制作完了としました。

6AV6-6AR5直結アンプ --設計編--2023年09月18日 16:29

電力増幅管6AR5のプレート供給電圧は、電源器の制限から240Vです。 前回はこの制約から、下記のように電圧の配分をしました。

まず、6AR5のカソードの電位は90Vになり、カソード抵抗には、プレート電流と第二グリッド電流が流れますから、5.4KΩになります。 6AV6のプレートは、6AR5のカソード電位より第一グリッドバイアス分低い電位になりますので、79.2Vになります。このとき6AV6のプレートには、 約0.1mA流れますので、6AV6のプレート抵抗を470kΩとすると、供給電圧は126.2Vになります。 プレート供給電圧を作るためのプリーダーに5mA流すとして求めた、回路定数は下記のようになりました。

制作にあたって、手持ちの部品とにらめっこしながら、回路定数を調整したのが、次の回路図です。

6AR5のカソード抵抗が小さくなってしまい、カソードの電圧がが低くなってしまいました。 それに合わせて、6AV6のプレート電圧も低くなっています。コンデンサで化粧を施した回路は、このようになりました。

では、早速制作します。

6AV6-6AR5直結アンプ --構想編--2023年08月29日 21:36

手持ちの真空管 電圧増幅管 6AV6 と電力増幅管 6AR5 で、直結アンプを作ってみます。直結アンプの製作実験です。 6AV6と6AR5は、ともにラジオによく使われた真空管です。

真空管アンプの電圧増幅管のプレートと電力増幅管のグリッドは、コンデンサを介して接続するのが普通です。

これに対して、直結アンプは、電圧増幅管のプレートと電力増幅管のグリッドを直接接続します。

電力増幅管のグリッドは、カソードからみてマイナスの電位になっていなければなりません。電圧増幅管のプレートはプラスの電位です。 ちょっと矛盾するようですが、

電圧増幅管のプレート電圧=電力増幅管のグリッド電圧<電力増幅管のカソード電圧

と電圧を配分することで、実現できます。

6AR5の動作例を調べてみます。誠文堂新光社から出ている「実用真空管ハンドブック」に掲載されている動作例を見てみますと、 プレート電圧 250Vで、約3Wの出力が得られます。この場合のグリッド電圧は、-18Vです。

6AV6の動作例をについては、「実用真空管ハンドブック」の動作例を見てみますと、プレート供給電圧が 100Vのとき57倍の増幅率があります。

実験用の電源の出力は、240Vしかありません。これを考慮して電圧配分を図示すると、このようになります。

次回は、これをもとにして設計します。

TRN-8にEEPROMを搭載する2023年08月11日 15:36

私のCP/M機 TRN-8のROM-BIOSは、UVEPROMの27C256互換品を使っています。実験などで ROM を 書き換えることもあります。コードを書いては、アセンブリし、UVEPROMに書き込んでテストするという、手順を 繰り返します。書き込む前に、紫外線でUVEPROMをイレーズする必要があります。これには、10分から15分かかります。 テストの繰り返しの中で、結構な待ち時間になります。というわけで、EEPROMを使用してみることを計画していました。

最近、27C256の互換品のEEPROM 28C256を入手できましたので、早速、27C256の内容をダンプして、28C256に 書き込み、置き換えてみました。結果、動きません。ROMライターを変えてもだめでした。当然、書き込みエラーは起きません。 こなったら、初心に戻り、データシートを比較してみました。アクセス速度は200nsecで問題なしです。ピン接続を確認すると、 おぉっと、1番ピンと27番ピンに違いがありました。違いは以下のごとくです。

PIN#27C25628C257
1VppA14
27A14/WE

このままでは、EEPROM 28C256を使ってテストをして、本番にはUV-EPROM 27C256を使ってという、 当初の目論見が実現できません。苦肉の策として、このような下駄を作りました。

本来のPROMソケットにこの下駄を差し、テスト中は下駄にEEPROMを刺します。テストが完了したら、下駄を取り外し UVEPROMを直接、PROMソケットに刺すわけです。こんな感じです。

これで、効率よくテストする環境が揃いました。

5球スーパーラジオの整備2023年05月31日 10:20

ヤフオク!をみていたら、昭和時代の真空管5球スーパーラジオが沢山出品されてました。 ラジオを作ってはバラしていた遠い昔、5球スーパーに挑戦し組み立てたけれど、きちんと調整できなくて 完成に至らなかったことを思い出しました。調整に必要なテストオシレーターを持っていなくて、 調整をうまくできなかったのです。現在は必要な機器を所有しています。1台入手して、昔を懐かしむことにしました。

ヤフオク!で比較的状態が良さそうな物を探して入手しました。松下電器のトランスレスの球スーパーで、中波と短波の 2バンドが聞けて、中央のダイアルゲージがあり、左右にスピーカーが付いてます。 運が良いことに、届いたラジオは汚れや痛みはあるものの、私の手で修復・整備ができそうなものでした。

状態は、ケース全体に汚れがあります。電源コードが傷んでます。全面中央のダイアルゲージは、細かい傷が付いており曇っています。

内部は、熱で変形しているところは無く、パーツにも損傷はみられません。オイルコンデンサーや電解コンデンサーは、 無条件に交換します。真空管はゲッター膜が十分あり元気なようです。

不具合がないことがわかったので、電源を入れてみました。パイロットランプが切れてます。 ボリュームのガリとスイッチの切り替え時に大きなクリック音があります。

まずは、キャビネットの手入れです。取り外せる部品を取り外して、水洗いしました。 全面中央のダイヤルゲージ窓をピカールで磨いたところ、透明感が戻りました。

内部は、まずオイルコンデンサーを ほぼ同容量のセラミックコンデンサーと交換、電解コンデンサーは立形の物に交換。 ついでに、ダイアル糸も変えました。ダイアル指針の位置を所定の位置にセット。

ここまでで、シャシーの内部は、このようになりました。

ケース背面のアンテナ線とアース線の端子は、特殊なプラグだったのでジョンソンターミナルに、フォノ入力は3.5Φのジャックに交換。 ジャックは、ステレオ入力用とモノラル入力用を用意しました。これらのパーツを取り付けるため、新たにアクリル板で パネルを作り直し。電源コードも交換。背面はこのように。

調整です。まずは、IFTを調整。結構ブロードでした。

トラッキング調整には、悩みました。この5球スーパーは中波と短波の2バンドです。局発コイルは、中波用のコイルと 短波用のコイルが同一ボビンに巻かれており、なおかつ、コアが入っています。

まずは、中波から調整。600kHzで局発コイルのコアを 1400kHzで局発側のトリマを調整。2,3度繰り返した後、 アンテナ側のトリマを1400kHzで調整し、中波の調整を完了。

短波帯は、4MHzと11MHzで、アンテナ側トリマと局発トリマを交互に調整し完了。

アンテナ端子に3mぐらいのビニール線をつけて受信状態を確認。

再組み立てをして、作業完了。


インテリアとしても使えるぐらいに修復できたでしょうか。