MCS8051 BASIC-52 基板を買って組んでみました

電脳伝説さん https://vintagechips.wordpress.com/ の記事に、8752同等品でBASIC-52が動いた というのがありました。面白そうだったので、組んでみることに、基板はオレンジピコショップ https://store.shopping.yahoo.co.jp/orangepicoshop/ さんにて基板とCPUなどを購入しました。

今回組み立てた BASIC-52 基板は 8052 (Flashメモリ 8k) で動作します。↑の写真にあるようなCPU+メモリだけの最小構成のものです。今回購入した CPU は STC89C52RC(90C) というもので中華製互換チップです。これは、stc-isp-v6.xx.exe の書き込みソフトを使用して USB シリアルから Flash 書き込みをするタイプの CPU です。

http://www.stcmcudata.com/ というところが、製造メーカーの Web サイトです。このサイト右側に資料の pdf ファイルや STC-ISP ソフトウエアのダウンロードリンクがあります。書き込みソフトウエアについては、indows Defender が 「Trojan:Win32/Wacatac.B!ml」 を検出してすることがあるので、ダウンロードした .zip をウイルススキャンしてから unzip してください。 Wunzip したらドライバーなどのフォルダがありますが、何もインストールする必要はありません。stc-isp の exe ファイルをダブルクリックして起動するだけです。

書き込みソフトは電脳伝説さんの資料にあった、
http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.88G.zip
や、その後のリリース
http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.89G.zip
http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.89G-tiny.zip
は Windows Defender にひっかかりません。

なお、BASIC-52 については、1.3 というのが最新版です。ソースはググると出てきますが、A Tiny 80(C)32 BASIC Board https://www.dos4ever.com/8031board/8031board.html に、ソースファイルと HEX がおいてあります。ダウンロードした HEX ファイルを ST89C52RC や AT89S52 などに書き込めば BASIC-52 が起動します。もしアセンブラでアセンブルしてみたい時は、ASEM-51 http://plit.de/asem-51/final13.htm というから v1.3 をダウンロードしてください。asem5113 を展開したフォルダでコマンドプロンプトを起動し、アセンブルしたら hex ファイルを作成することができます。

HEXファイルの書き込み(STC89C52RC)

ST89C52RC の場合は、STC-ISP を使用して、USBシリアル経由でフラッシュメモリの書き込みを行います。

  • ボードの電源を切る
  • stc-isp を起動する
  • MCU TYPE : STC89C52RC/LE52RC を選択する
  • シリアルポートを選択する
  • ファイル→Open Code File からダウンロードした HEX ファイルを開く
  • H/W Option のチェックボックスを確認する。Enable 6T にチェックを付けると倍速モードになります。
  • Download/Program ボタンをクリックする
  • ボードの電源を入れる
  • フラッシュメモリへの書き込みが行われる

HEXファイルの書き込み(AT89S52)

AT89S52 に書き込む場合は USBASP アダプタのファームウエアを書き換えて avrdude コマンドでフラッシュメモリの書き込みを行います。(TL866 II Plus などのパラレルライターを持っていればそれでも可能)

USBASP という AVR マイコンの書き込みアダプタがあります。これはアマゾンとかで検索すれば2個セットなどがたくさん出ています。AVR マイコンの書き込み機を持っておられない方は、2個セットがおすすめです。USBASP 用 AT89 対応ファームウエアは https://www.avrfreaks.net/comment/2109556#comment-2109556 に usbasp_AT89.zip として掲載されています。これをダウンロードして展開。main.hex というファイルがあるので、これを USBASP に書き込みします。USBASP は ATmega8(A) なので手持ちの AVR 書き込み機や、2個セット USBASP のうち1個使って、 AT89 用 hex を書き込みを行います。

  • 2個ある USBASP のうち1個の JP2 ジャンパをショーして、ファーム更新できるようにする
  • もう1個の USBASP とケーブルで接続し、USBポートに接続。avrdude コマンドでファームウエア更新をする
avrdude -c usbasp -p m8 -U flash:w:main.hex:i
  • ファームウエアを書き終わった USBASP の JP2 ジャンパを外す。(AT89対応 USBASP完成)
  • AT89 対応 USBASP を BASIC-52 ボードと接続する

結線は、MOSI/MISO/SCK/RESET と電源ピンです。USBシリアルから電源供給している場合は、USBASP から電源供給しないよう注意してください。avrdude コマンドでの書き込み例は以下のようになります。

$ avrdude -C avrdude.AT89 -p s52 -c usbasp -P usb -Uflash:w:version_1p3_hex.HEX:i -v

avrdude.exe: Version 7.0-20220610 (cb11423)
             Copyright (c) Brian Dean, http://www.bdmicro.com/
             Copyright (c) Joerg Wunsch

             System wide configuration file is "avrdude.AT89"

             Using Port                    : usb
             Using Programmer              : usbasp
             AVR Part                      : AT89S52
             Chip Erase delay              : 500000 us
             RESET disposition             : dedicated
             RETRY pulse                   : RESET
             Serial program mode           : yes
             Parallel program mode         : yes
             Timeout                       : 200
             StabDelay                     : 100
             CmdexeDelay                   : 25
             SyncLoops                     : 32
             PollIndex                     : 4
             PollValue                     : 0x69
             Memory Detail                 :

                                               Block Poll               Page                       Polled
               Memory Type Alias    Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
               ----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
               flash                  33    12     0    0 no       8192  256     32   400   900 0x00 0x00
               signature               0     0     0    0 no          3    1      0     0     0 0x00 0x00
               atmelsig                0     0     0    0 no         32    1      0     0     0 0x00 0x00
               lock                    0     0     0    0 no          1    1      0     0     0 0x00 0x00

             Programmer Type : usbasp
             Description     : USBasp, http://www.fischl.de/usbasp/

avrdude.exe: auto set sck period (because given equals null)
avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude.exe: Device signature = 0x1e5206 (probably s52)
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: auto set sck period (because given equals null)
avrdude.exe: reading input file "version_1p3_hex.HEX"
avrdude.exe: writing flash (8192 bytes):

Writing | ################################################## | 100% 6.16s

avrdude.exe: 8192 bytes of flash written
avrdude.exe: verifying flash memory against version_1p3_hex.HEX:

Reading | ################################################## | 100% 1.60s

avrdude.exe: 8192 bytes of flash verified

avrdude.exe done.  Thank you.


BASIC-52 とは関係ないですが、C言語でプログラムをする場合は sdcc や、Keil μVision5 の C51 コンパイラが使用可能です。

BASIC-52 は EPROM/EEPROM 書き込み命令も持っていたりするのでおもしろいと思いますが、この機能は今回作成した基板では試せません。

興味を持たれたら BASIC-52 で検索してみると検索結果が多く出ます。それだけトライされている方が多いということかと思います。

TL866II PLUS 25V/21V アダプターを作った(2764/27128版)

一つ前の記事、 TL866II PLUS 25V/21V アダプターを作った で 2716/2732 対応のアダプタ基板を作成しました。今回はバリエーションで 28ピンソケットのプログラミング電圧=1Pin の対応で基板を修正しました。

回路図や部品表などは、https://github.com/ngc6589/TL866II-PLUS-25V-21V-Adapter-for-2764-27128 にて公開しています。

このアダプタは 2764や 27128 など VPP=1Pin が対象です。作ってみて試しに手持ちの 2764 27128 に書き込みをしてみました。特に問題なく書けました。

余った基板は https://www.em9system.com/?p=989 にて頒布します。

TL866II PLUS 25V/21V アダプターを作った(2716/2732版)

TL866II PLUS のプログラマーは EEPROM などの書き込みや、ATMEGA328P のヒューズリセットなどお手軽でよいのですが、EEPROM となると書き込み用電圧が 18V までとなっています。この前の機種では 21V まで出たのですが現在は通販から消え去ってしまってます。今更 2716 を書くことは APPLE II のメンテで必要になるくらいなのですが、一つ作っておこうということで作っちゃいました。

回路図や部品表などは、https://github.com/ngc6589/TL866II-PLUS-25V-21V-Adapter にて公開しています。

このアダプタは 2716 VPP=21Pin 2732 VPP=20Pin が対象です。作ってみて試しに手持ちの 2716 2732 に書き込みをしてみましたが、 2716 は特に問題なし。2732 は書き込めず悩みました。ググった結果 XGpro というこのプログラマのアプリケーションにバグがあってワークアラウンドとして 2732 の 18Pin(チップイネーブル)をGNDに落として書き込むというのが今の状況です。これをすれば私のところでも書き込みは出来ました。

今回は初版とあって基板にミスがありますが余った基板を https://www.em9system.com/?p=965 にて頒布します。

AY-3-8910(PSG) の Arduino シールド作成

Z80 をいじったついでで AY-3-8910 の PSG もいじってみようと思います。AY-3-8910 は40ピンの IC ですが、ほかにも YM2149F がコンパチで使えます。また 40ピンの足のうち I/O ポートなどを省略してピン数を減らした AY-3-8912,AY-3-8913 などもありますが、今回作った基板には合いませんので使用できません。

回路は、AY-3-8910 PSG のデーター・制御の線と、3.579545MHz のクロック。MIDI インタフェースと音声出力のジャックで構成されています。ターゲットの Arduino は 基板の大きさと I/O ポート取り出し位置の都合で MEGA2560 を使用しています。AY-3-8910 は 3声までしか出ませんので、ちょっと物足りない感じです。なので、J4 のジャンパ切り替えで4枚まで積んで 12声同時発生できるようにしました。

1つ目は、オシレーターなど部品を全部つけないといけませんが、2つ目以降は、 AY-3-8910 とジャンパがついていればOKです。

プログラムのソースなどは GitHub – ngc6589/arduinoMidiSynthPSG に置いています。

まだ、Github の資料更新中ですが、AY-3-8910 と基板、MIDIコネクタ、フォトカプラ以外は全部秋月でそろいます。頒布するかは未定です。

Free MIDI ファイルをダウンロードして、DOMINOに読み込ませて、リズムパートだけ再生しないようにするだけでこんだけ鳴ります。存外遊べそうなものが出来てうれしい限りです。

Dual-84 CPUボード

共立電子のネット通販にて売り切り終了 550円で投げられていた TMPZ84C015BFC-8 が実装されたボードです。クリスタルは 19.6608MHz システムクロックは 1/2 なので、9.8304MHz で動作するボードです。表面には CPU と ROM のソケットがあります。クロック周波数的には少しオーバークロックですかね。

裏面には SRAM CY62256NLL-70SNXC という SRAM が実装されていました。Z80のメモリアクセスのタイミング的には大丈夫かなと思います。

とりあえず BASIC が動けばいいやというところですが、ブレッドボードに貼り付けたかったので。ヘッダピンが下向きに出ているのを逆向きに付けなおしました。クロック周波数は RC2014 などで使われている 7.3738MHz(クリスタルは倍の 14.7456MHz) に交換しました。この周波数だと一応実装されているCPUの定格内なことと、シリアル通信でシステムクロックをSIOで 1/64 分周すれば CTC を使わずに 115.2kbps の速度が出せます。

CPUボードはブレッドボードに貼り付けボスを使って固定。シリアルインタフェースは秋月の FT232RL のモジュールを使用しました。これは6ピンソケットのシリアルインタフェースでもいけます。TXD/RXD と RTS/CTS をクロス接続しています。DTR/DCD 端子は使わないのですが、SIO の動作には必要なので自分自身で折り返し接続です。SIO のクロックはシステムクロックのピンから  7.3738MHz を供給します。9600bps などのボーレートで通信する場合は CTC の出力からクロックを供給します。(後で紹介するサンプルは 9600bpsの例をコーディングしています)

HALT 端子にLEDと電流制限抵抗を接続して HLAT したことが分かるように。

リセットボタンのタクトスイッチ、PIO A/B にTD62083 シンクドライバを接続し、その先にアノードコモンの8桁LED基板を接続しました。

電源スイッチは、FT232RL の USB ケーブル抜き差しが面倒だったので付けました。最近の Teraterm は USB が抜けてシリアルが切れても USB させば自動復旧するので、スイッチは必須ではないですかね。

開発環境は、VSCode に TASM_Assembler プラグインを入れただけです。このプラグインのディレクトリに TASM.EXE が入っています。面倒なので開発するフォルダに EXE と TAB ファイルをコピーして使っています。build.bat を作っておけば CTRL + SHIFT + B でビルドしてくれます。コマンドラインは

TASM -80 -fff -s D84CPU-CP-BASIC.asm D84CPU-CP-BASIC.hex

という感じで -80 はターゲットが Z80、-fff は空いた領域を 0xFF で埋める。-s はシンボルリストも作成する。後はソースファイル名とhexファイル名を build.bat に記述する感じです。

BASIC は http://searle.x10host.com/index.html Grant Searle さんが 移植したものです。レトロコンピューティングではスタンダードな BASIC です。

ただ、BASIC の入出力のシリアル通信はマシンごとに違うため各自用意する必要があります。オリジナルは 68B50 のシリアルチップなので流用できません。Z80 SIO用を書かねばなりません。AKI-80 用に公開されているものでいいのですが、ここは頑張って自分で用意しました。

クロックを CTC で分周し、SIOのボーレート 9600bps 版のソースは https://github.com/ngc6589/Z80Learning/blob/main/D84CPU-CP-BASIC.asm に置いてます。SIO は送受信ともステータスアフェクトベクタを使用した割り込み制御にし、Z80 の割り込みモードはモード2です。受信のハードフロー制御もいれてあるので、Teraterm からプログラムの貼り付けもTeratermのディレイ設定なしでいけてます。

今回は BASIC が動けばよかったのでこれ以上のことは予定なしですが、本来ならモニタROMを用意するのがいいかなと思います。手持ちにモニタROM付きボードなどもあるので、この CPU ボードは一旦ここまでということにします。

7119 PP アンプを ECC99 に変更

先日作成した 12AX7 + 7119(E192CC) のプッシュプルアンプですが、ネタついでにタマを 12AX7 → JJ ECC832、7199 → JJ ECC99 に交換しました。

ECC832 は ユニット1が 12AU7 ユニット2が 12AX7 の複合管です。ECC99(12BH7) は 7199 よりも最大定格がユニットあたり4.5Wから5Wになってますが、特性は似ていることとECC832,ECC99共に現行管なのでヨドバシとかでも買えます。

  • 7199(E192CC) と ECC99 のピンアサインは異なります。真空管ソケットの配線繋ぎ変えないといけません
  • ECC832 のピンアサインは 12AX7 と同じですが、ユニット1が 12AU7 なので、こちらも真空管ソケットの配線確認が必要です。

今回は差し替え運用が目的でしたので、回路の変更はありません。真空管ソケットの線をつなぎなおして動かしています。タマは変わりましたが基本変更ないので問題なく音出し完了しています。

7119 は購入難易度高いのでこっちがいいかな。

7119(E182CC) プッシュプルアンプ製作

購入日は忘れたのですが、名古屋のボントンさんに立ち寄ったところジャンク真空管コーナーに 7119 がありました。こういうのはとりあえず確保する対象でございます。これ使うならプッシュプルかということで製作いたしました。

アンプ部分の初段は 12AX7 の増幅と PK 分割。終段は 7119(E182CC) プッシュプルでトランスはアンディクスオーディオオリジナルトランス 6608P を使用した構成です。電源はゼネラルトランスPMC-100M を使用し、6CA4 整流管から10Hチョークを経てCRリップルフィルフィルタでつくりました。

回路図はクリックすると大きく表示されます。手持ちの余っている部品の都合で、コンデンサの容量が大きかったりします。

画像はクリックすると大きくなります。7119 のロードラインは、アウトプットトランスのインピーダンス 8k なので、4kと8k の線を引いてみて定格超えないかをざっくりチェック。B電源180V 位でトランスのドロップ引いてで175Vあたりとしてグリッドバイアス-5Vあたりがでてきました。このあたりで行きましょうという感じです。

シャーシは、共立電子・千石で売っている富士シャーシです。安くてたすかります。アルミがペラいのでシャーシとしては弱いですが、まぁそれでもこの手のアンプには十分です。対角線を持つようなことさえしなければ問題ありません。

電源スイッチやヒーターの配線をした後に、回路部分のボードを付けていきます。今回はタレットボードライクな基板を作成しそれに部品を付けて配線しました。

マックエイトの端子が余っているので、これを使うように1.6mmのスルーホールの穴をあけた基板を作って、必要なところに端子を差し込んで配線します。端子の高さがもう少し高ければよかったのですが、本家キーストーンの端子にはかないません(笑)

休日の間に動くかどうかだけは急ぎ確認したかったので、配線はやっつけです。

入出力特性です。私の手持ち音楽ソースはポータブル機器なので高感度仕様になっています。出力はおよそ1.5W手前が限界ですかね。でも十分な出力が確保できています。

周波数特性です。ゲインは 33dB です。50kHz 付近にこぶが出来てますが、発振にはなっていないので、12AX7 の直結部分に zobel フィルタを入れて高域を落とすなどの対処はしていません。

電源投入して、電圧チェック後軽く試聴。スッキリした感じの出音でした。真空管アンプなので鳴りっぷりは個性です。このアンプは鳴らしっぱなしで使用しても疲れない感じのいい感じにできました。完成してよかった。

6AS7G OTL ヘッドホンアンプの製作

大須のボントンさんの真空管ジャンク 6AS7G (購入価格1000円) を使ってヘッドホンアンプを作りました。初段の 6DJ8 もボントンさんのジャンク球です。

回路構成は、初段 6DJ8 で増幅して終段の 6AS7G に直結。カソードフォロワの抵抗に発生した信号をコンデンサカットでヘッドホンに出す形です。

シャーシは家にあったアルミシャーシを使ってしまおうということで、縦横どちらがいいか物を置てみて検討。結果冒頭の写真にあるような配置になりました。

作った後の、周波数特性と入出力特性です。33Ωの抵抗負荷でゲインは8~9dB となりました。左右1dB弱の差はありますが、普通に聞く分にはわかりません。中の配線を整理する際に片CHに調整用半固定を入れるかもという程度です。AKG Q701 のオープンエアなヘッドホンも十分鳴っていますので出力は問題ありません。

周波数特性は 3Hz ~300kHz あたりまで伸びてしまいました。不必要な周波数帯はカットするべきというのもありますが、今の所このままの予定です。

入出力特性は、6DJ8 のグリッドバイアス 1.1V になっていますので、そこらへんまではリニアに伸びていきます。33Ω負荷で 0.1W くらい出る感じです。8Ω負荷換算すると計算間違ってるかもですがおよそ1Wです。ヘッドホンには十分な出力です。

3C30 シングルアンプ完成

3C30 シングルアンプの作成1という記事で着手しましょうという旨を書いたのですが、それから丸2カ月経過してしまいました。現在の進捗ですが音出し完了しております。以下製作途中の写真などとともにコメントをいれておきたいと思います。

まず、前回の記事で LTSPice を用いた簡易的な直流回路の設計を行いました。あれから何回かやり直した結果、最終組み上げたアンプの回路図は以下の通りです。クリックすると大きく表示されます。

3C30 ロードラインは B電圧 360V 程度、14kΩ 負荷、グリッド電圧16Vあたりでプレート電流 40mA としました。前の記事とは微妙にずれましたがほぼ誤差の範囲なので最大出力 4W 程度という見積に変更はありません。また、6SN7 / 6V6 バイアス電圧見直しの結果6SN7/6V6のB電圧は変更しました。

回路自体はコンデンサカットで段間つないでいるため特筆するところはありません。B 電圧も手元にあった JJ GZ34S を使用した一般的な整流回路となっています。ただ、B電圧調整のため、チョークインプット状態で組み上げ、整流管につなぐキャパシタの容量を徐々に増やして希望の電圧を得るという手法で調整をおこなっています。コンデンサインプットよりかは残留リプルが出やすくなりますので、後ろのリップルフィルタの電解コンデンサは盛っています。

3C30 は直熱ハイミュー三極管ですので直流点火いたします。ヒーターが 5.6V / 2.5A と電流が大きいためブリッジ整流後のキャパシタを増やしても残留リプル除去は厳しい状況。先人のアイデアをお借りし秋月電子から販売されている 「TPS7A4700使用 超ローノイズ・プログラマブル可変電源キット」を用い、これに電流ブーストトランジスタを取り付けることで 5.6V の出力電圧設定とリップルフィルターとしました。電流ブーストのトランジスタは発熱するためシャーシに取り付けて放熱することが必要です。とはいっても、基板のディップスイッチで電圧設定ができるため非常に便利であります。

電源トランス、出力トランスなど部材がそろったので、レイアウト案を検討。何パターンかやってみて気に入った案を決めます。

レイアウトが決まったら、穴あけとスプレーを吹きます。

ヒーター回りを配線し、あとは回路部分を組んでいきます。

一通りの配線を行い、通電してみるところまで。テストを行い問題なさそうなのでシャーシを起こします。

ということで完成。

無帰還の特性です。シミュレーションでは 40dB 程度と踏んでいましたが 右 44dB 左 42dB となりました。このままでもいいですが負帰還かけた状態にします。

負帰還をかけて 34dB のゲインといたしました。

入出力特性は -20dBV(100mV) で 4W ですね。グラフ的には 5W 出ますが横這いになっているのでここら辺が限界ぽいです。もっと直流流せる出力トランスを買えばさらに出力アップは狙えますが財布も情熱も足りないのでここら辺でいいとします。当初決めた動作点で試算した 4W 程度の結果が出ていたので正解です。

まだ短い時間ですが使用してみた感想、音源による得手不得手はないアンプに仕上がったと思います。帰還効いてる加減もあり、パンチあるボーカルとか響く弦とかは言いませんが、十分良く鳴ってくれるいいアンプになりました。

B電源のドロップに使用している抵抗の発熱が大きいのかして、ちょっとニオイがします。これは経過観察して今後の対応を決めたいと思います。

3C30 シングルアンプ作成1

関西ハムシンポジウム2020にキットの他 SONY スカイセンサーのラジオを出展していました。当日は残念ながら売れなかったのですが、後日隣のブースに出展されていた方から連絡があり、やり取りの結果スカイセンサーのラジオとこの真空管が物々交換され我が家へやってきた次第。

やってきたタマはハイトロン3C30というやつで送信管です。ヒーター 5.6V/2.5A な直熱三極管でプラスバイアスで動作させます。

LTSpice のモデルを作成して、超えてはいけないプレート損失を赤線で、10k と 14k の負荷線を 350V/40mA の動作点でプロットしてみました。Ep-Ip のグリッド電圧は -5, 0, 5 のように 5V 間隔でプロットしていますので、プレート電圧 350V/ 40mA のときのグリッドは +15~+20V のあいだ(18Vあたり)になる感じです。

3C30 のドライブには 6V6GT のカソードフォロワでいきます。春日無線変圧器 4B-20MA を使用します。これの抵抗分は965Ωらしいので、20mA いっぱいですが 3C30 のグリッドバイアスがとれます。ここは現物あわせで調整する予定のところです。

前段は 6SN7 2段増幅です。ここは特に特筆するものはないですかね。今時点のざっくり回路は以下のようになります。

1段目の 6SN7 グリッドバイアス 3.5V / 3.3mA 。
2段目 6SN7 グリッドバイアス 6V/2.3mA
3段目 6V6GT 18.5mA でカソードチョーク17~18V。
3C30 のグリッドバイアスは 6V6 のカソード電圧でプレート電圧 350V あたりで動作

となれば、6V6 のカソードチョークがパンクしなければ調整個所少なく組めそうな雰囲気であります。回路図帰還抵抗100k は帰還しないときの確認でわざとおおきくしてあります。実際にはもっと小さいです。

動作点から±15V 振ったとして 740V-60V=680V 電流60mA-12mA=48mA ワット=680*0.048/8=4W が仮決めした動作点の最大出力の目安になります。十分かなと思います。

タマは揃っていますがトランス類がまだです。トランスが届けばバラックで組んでみたいと思います。