MCS-52 Basic 基板作成

ヤフオクを見ていましたら、BASIC-52 の基板を見つけたので購入。基板に書かれたアドレスから https://www.billy.gr/mcs-basic-52/ で公開されているガーバーファイルのようです。以前作成した BASIC-52 基板は EEPROM 領域がないため、プログラムの保存が出来なかったのですが、こちらの基板は EEPROM のソケットが付いています。

この基板を作成された方は EEPROM の代わりに DALLAS DS1230AB-70 という バッテリーバックアップ付き 32KB SRAM (NVRAM) を載せておられました。不揮発性メモリなので機能は果たしますが、Mouser 価格 4000円程度とお高い状況。また、EEPROM は HC138 のアドレスデコードで 8KB バウンダリになっているので、8KB 分しかつかいません。NVRAM はもったいないので AT28C64B など8KBx8bit の汎用EEPROMを使用することにしました。

WEBサイトを見ると基板のエラー情報が書かれています。

DC ジャックの GND 未配線は、DCジャックの端子を抵抗の切れ端で接続して、電源が入るようになりました。また、リセット回路からの信号は CPU のリセット端子まで来ていましたが、74HC32 のリセット信号が配線されるべき端子には来ていなかったためジャンパー飛ばして結線。私の所ではこの2か所手当することで動作しました。

*MCS-BASIC-52 V1.31*
READY

>erase       

READY
>
>10     REM Basic ROM directory
>20    ADR=8010H : PN=1
>30     IF XBY(ADR)<>55H THEN  END
>40    ADR=ADR+1 : BA=ADR
>50     IF XBY(ADR)=1 THEN  GOTO 80
>60    ADR=ADR+XBY(ADR): GOTO 50
>80     GOSUB 100: PRINT : PN=PN+1 : ADR=ADR+1:   GOTO 30
>100    PRINT "PRG",PN,"from ", :  PH1. BA, :  PRINT " to ", :  PH1. ADR,
>110    PRINT " (",ADR-BA,"bytes)",
>120   NB=XBY(BA)-2: IF NB<4 THEN RETURN
>130 IF XBY(BA+3)<>96H THEN  RETURN
>140    FOR XX=BA+4 TO BA+NB:PRINT CHR(XBY(XX)),: NEXT : RETURN
>prog
 1

READY

erase 命令で EEPROM 領域を初期化します。3分くらいかかるので気長に待ちます。その後プログラムを入れて、prog 命令を実行すると EEPROM にプログラムが保存されます。↑のプログラムは、EEPEOM にどんなプログラムが格納されているか表示するプログラムで、http://www.nomad.ee/micros/8052bas.shtml で公開されているものです。

>rrom

PRG 1 from  8011H to  8134H ( 291 bytes) Basic ROM directory

READY
>

rrom 命令を実行すると、EEPROM の1番目のプログラムを実行します。先ほど書き込んだ EEPROM に何が入っているかを表示するプログラムです。

>ram

READY
>new

>1 REM ASCII ART
>10 FOR Y=-12 TO 12
>20 FOR X=-39 TO 39
>30 CA=X*0.0458
>40 CB=Y*0.08333
>50 A=CA
>60 B=CB
>70 I=0
>80 T=A*A-B*B+CA
>90 B=2*A*B+CB
>100 A=T
>110 IF (A*A+B*B)>4 THEN GOTO 150
>120 I=I+1:IF I<=15 THEN GOTO 80
>130 PRINT " ",
>140 GOTO 170
>150 IF I>9 THEN I=I+7
>160 PRINT CHR(48+I),
>170 NEXT X
>180 PRINT
>190 NEXT Y
>
>prog
 2

READY
>rrom

PRG 1 from  8011H to  8134H ( 291 bytes) Basic ROM directory
PRG 2 from  8136H to  8417H ( 232 bytes) ASCII ART

READY
>rrom2

新しいプログラムを追加します。prog を実行すると EEPROM の2番目に格納されます。rrom2 と引数2で2番目を実行できます。

マニュアルを見ると、電源投入時に自動起動するプログラムの設定などもあるようです。また GPIO ピンもCPUについているので簡単に使えますし、このマイコンボードの右端にはメモリマップドI/Oの端子も出ています。プログラムのセーブが出来るマイコンボードは当時としては優れた機能だったかと思います。普通はROM差し替えですしね。まぁBASIC言語なので実行速度はお察しというところで。

E1DA Cosmos ADC 購入

やっとのことで、Cosmos ADC を購入しました。私は、E1DA Aliexpress Store https://ja.aliexpress.com/store/5142044 から購入しました。Aliexpress Standard shipping で2週間程度だったかと思います。

この Cosmos ADC の本体に何も信号を入れない状態のノイズが全体的に低く、アマチュアにはもったいないくらいの性能です。このグラフを出しているソフトは REW というソフトウエアです。

この Cosmos ADC に、USBオーディオインターフェースとプローブの端子を付けて、1kHz の信号を見てみました。

REW の信号ジェネレーターから 1kHz -3dB の信号を出して、アナライザ画面の表示を見たところです。THD+N 106.2dB と測定できます。

自作アンプの周波数特性や、入出力特性は Analog Discovery と FRA Plus で十分なのですが、歪率とノイズフロアは Analog Discovery ではどうにもなりませんでした。今回入手した Cosmos ADC なら、作ったアンプの歪率が高いとか、電源ノイズが出まくっているとかなどの確認が、私のようなアマチュアでも簡単に出来るようになりました。

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です。ヘッドホンには十分な出力です。