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 で検索してみると検索結果が多く出ます。それだけトライされている方が多いということかと思います。

TK-85 を Get しました

ヤフオクのワッチで TK-80 や TK-85 を見てていつも、いい値段だねぇとということでいつもスルーしているのですが先日1台落札しました。届いた後軽い清掃をして動作確認をしましたが

  • STEP/RUN 切り替えスイッチのレバー折れ
  • キーのチャタリングがひどい
  • 基板の反り → 放置

が最終的な残作業で残ってしまいました。スイッチは昭和なオーディオ機器にでも使われているようなスイッチなのですが、スイッチのピン間隔が 5mm だったかして今となってはどうしようもありません。レバーをエポキシで接着しました。

写真右側のレバーの根本にエポキシ接着剤が見えてしまっています。今のところこれで大丈夫そうです。オークション出品の写真でこのレバーが折れて無くなっている個体も良く見ますので仕方ないかと思います。

キーのチャタリングは、一度25キー外してみたのですがどうにもならんと判断。軽く掃除して戻しました。TK-85 のモニターROMのキースキャンは 9ms のチャタリング判定時間でやっていると付属の本に書いてありました。これを伸ばして多少はマシになるよう修正します。オリジナルの ROM を吸いだしてチャタリング除去時間の場所を確認します。

スクリーンショットはクリックすれば大きくなります。Visual Studio Code に Intel HEX Format プラグインを入れて編集しています。行末のチェックサムとか勝手に計算し直してくれるので便利です。修正箇所は 0697番地の 16 0E の 0E(14) が 9ms の設定値です。

ひとまず、この 0E を 5倍の 4D にしました。これを 2716 の EPROM に書き込んで TK-85 にセット。動かしてみたところ1回の打鍵でダブル・トリプルで文字が入るような状態はほぼ解消しました。まぁ25キーのスイッチも見つからないのでこれでマシになっただけでもよしとしましょうというところです。スイッチが経年でイカレテるので、完全なチャタリング除去は無理です。

オリジナルの ROM は無くすといけないので ROM2 ソケットに差しています。EPROM は手持ちに NEC D2716 があったのでこれに書き込みをしています。

RAMもプログラム領域などはモニタのメモリテストで good と出るのでひとまずOK。カセットインタフェースは今のところ試していませんが、PCのミキサーアプリで録音できるので暇なときにやってみようと思っています。

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 にて頒布します。

Orbitron 用 DDEクライアント作成

アマチュア衛星などの通過予想に Orbitron というソフトを使ってます。CALSAT32 などもありますが、最初に慣れてしまったのがこのソフトなのでこれを使ってます。

この Orbitron は DDE で他のソフトに衛星名・アップリンク周波数・ダウンリンク周波数・ダウンリンクモード・アップリンクモードを渡してくれます。このデータのうち周波数はシリアル経由で無線機に送ることで自動的に合わせられます。周波数は衛星が近づいてくると高く・遠ざかる時は低くなるドップラー効果のため変動します。FMモードなら無線機の周波数は固定でも問題ないですが、SSB・CW は周波数を合わせないとすぐ聞こえなくなってしまいます。

今回は、Windows のプログラム勉強がてら DDE とシリアル通信するプログラムを組んでみました。開発環境は Visual Studio 2020 で言語は C#。プラットフォームは .NET 6 フォームアプリケーションです。

.NET 6 は初めて Visual Studio も久しぶりだったのでググりながら作成しました。作成したイニシャルバージョンは下記 github リポジトリの Release のところに置いておきました。

https://github.com/ngc6589/DDE2S

使い方は、シリアルポートを選択して、通信速度・通信設定のラジオボタンを押します。その後 CONNECT を押すとシリアル送信が始まります。ウィンドウ中央やや下のテキストボックスに、無線機に送る CAT コマンドを書きます。その時下記の <> 文字は Orbitron から取得した文字列に置き換わります。

  • <SN> Orbitron で表示される衛星名
  • <UP> アップリンク周波数 9桁で単位は Hz
  • <DN> ダウンリンク周波数 9桁で単位は Hz
  • <AZ> 方位角
  • <EL> 仰角

無線機の VFO-A に周波数を送る場合 FA<DN>; と書けばOKです。無線機の CAT コマンドで周波数が11桁の場合 FA00<DN> と足りない 00 を付けてやればいいです。コマンドが間違いなどの時は無線機から応答が返りますが、それは Receive 側に表示されるので目安になります。 FA; という無線機の周波数読み取り結果を表示するのにも使えます。

TS-790S CAT コントロールケーブル作成

ヤフオクで入手した TS-790S にパソコンの Turbo Hamlog や、通信ソフトと連携できるようシリアルケールを接続します。

PC 接続して CAT コントロールするためには、ACC1(6ピン DIN コネクタ)にシリアルケーブルを接続しないといけません。詳細は省きますが、この端子は 5V TTL で出ていて TX,RX,RS,CS, GND の5本接続ですが信号は反転しているのでそのまま USBシリアルケーブルをつないでも通信できません。

FTDI の USB シリアルなら FT_Prog で信号反転の設定などはすぐできるので、今回は写真のケーブルを手配しました。あとは 6pin の DIN コネクタ。

pin番号ACC1 コネクタUSB シリアリケーブル
1GNDGND
2TXDRXD
3RXDTXD
4CTSRTS
5RTSCTS

配線は、クロス接続すればいいです。写真ではGND, TXD, RXD をつないで Teraterm で接続できるか見たところ。Teraterm のシリアル設定を 4800bps 8bit パリティなし stopbit 2bit で接続です。FA; を入力してトランシーバーからスクリーンショットのような FA数字; が出力されたら通信は問題ありません。

ただ、この通信するためには USB シリアルアダプタの設定変更をしないといけません。FTDI 社の web サイトの検索で FT_Prog といれたら検索結果が出てきます。そこから FT_Prog のページに行ってツールをダウンロード・インストールして設定です。

FT_Prog を起動して 「DEVICE」→「Scan and Parse」をクリック。FTDI の USBシリアルが検索されて、Device Tree に表示されます。Device Tree 内の変更対称となる USB シリアルの Hardware Specific の Invert RS232C Signals をクリック。Property の TXD, RXD, RTS#, CTS# にチェックを入れます。

「DEVICES」「Program」をクリックすると Program Devices のダイアログボックスが表示されます。Program ボタンを押して設定を書き込みます。後は USB シリアルケーブルを抜き差しすれば信号は反転状態で出るようになります。

TS-790 の場合は、GND, TX, RX の3本だけでいいです。RS,CS は 5V になっていたので放置でも問題なく通信できます。CS はプルアップされているのかな?

私は RS,CS も配線してコネクタカバーを付けて配線終了としました。

この状態で Turbo Hamlog の LOG-A LOG-B などのログ設定を増やして、通信設定をしてログ入力ダイアログで周波数表示とモードが設定されることと、周波数やモードを変えて、Hamlog の入力欄が自動更新されることを確認しました。

ひとまずここまで動けば仮想シリアルポートのスプリッターでHAMLOG と WSJT-X など複数アプリとも連携できると思います。

次は、オーディオインタフェースと PTT コントロールの接続が必要になってきますが、13ピン DIN コネクタが無いので後日実施予定です。

DE0(Cyclone III) + DEOCM

DEOCM (でおしむ) という MSX のスロットが付いたボードを家電のケンちゃんで買いました。DE0 と DE0-CV で使用可能のボードです。今回は古い DE0 に頑張ってもらうということで OneChipMSX на Altera DE0 – Development and Education Board のロシア語サイトのファームウエアを書き込んで使うことにしました。一応、DE0 というか Cyclone III は古いのでボードが余っている人向けの記事です。

今からやってみたい方は DE-CV(Cyclone V) + DEOCM-PLD-CV(仮称)計画 のファームウエアを使うといいでしょう。今回こちらの方法は記載していません。

ダウンロードするファイル

OneChipMSX на Altera DE0 の 2018年リリースのファイルをダウンロードします。

  • source は 1chipMSX の DE0 版ソースです。コンパイルしてみたい人はダウンロード
  • POF-file は DE0 のコンフィグレーションROM に書き込むコンパイル済みのファイルです。これは必要
  • SOF-file は DE0 の FPGA に直接ダウンロードするアイルです。今回は使いません。
  • BIOS MSXDOS2 SDHCカードに対応したMSX DOS2のROMファイル。MSXDOS2 の場合はこの .zip ファイル内の biossdhc.sys を使う。今回は使いません。
  • BIOS NEXTOR SDカードに書き込むためのNextorシステム搭載のROMファイル。この .zip ファイル内の biosnext.sys は必要

OneChipMSX на Altera DE0 の 2017年リリースファイルのリンク

  • NEXTOR メモリカードに書き込むシステムファイルのアーカイブ。アーカイブファイル これは必要
  • OCM_NEXT.ROM – は、ディスクに書き込む最初のファイルでなければなりません。カードはFAT16形式でフォーマットされている必要があります。4Gバイト以上のSDHCカードをIBMカードフォーマットFAT32でフォーマットし、Nextor Basicに内蔵されているFDISKユーティリティで4Gバイトのパーティションに分割することをお勧めします。BASICからfdiskを呼び出す。これは不要

、NEXTOR という言葉が出てきました。DE0 版 MSX の DOS は Konamiman’s MSX page の DOS がターゲットです。

また、Intel FPGA サイトから Quartus II 13.1 もダウンロードしてインストールする。

.pof ファイルの書き込み

DE0 を PC と USB ケーブルで接続します。DE0 のスライドスイッチを PROG 側にしておきます。Quartus II 13.1 を起動して 「Tools」「Programmer」を選択してプログラマを起動します。

Hardware Setup で USB Blaster を選択。Mode は Active Serial Programming を選択する。

Add File ボタンを押してダウンロードした .pof ファイルを選択して Open ボタンを押す。

チェックボックスにチェックが付いた状態で Start ボタンを押す。

書き込みエラーになる場合は、スライドスイッチが PROG 側であること、また電源を入れ直して再度 Start ボタンを押せば故障でもない限り書き込み始まると思います。書き込みが終了したら、電源を切ってスライドスイッチを RUN に戻してください。

MSXDOS の SD(microSD)カード作成

NEXTOR DOS を microSDカードに書き込みします。コマンドプロンプトを起動して、DISKPART コマンドを起動します。管理者モードの確認ダイアログが出たら OK で続行。そうすると、もう一枚コマンドプロントのウィンドウが表示され DISKPART> のプロンプトが表示されます。

まず、microSD カード内の不要パーティションを削除します。下記は Raspberry Pi で使用した microSD カードでしたので、boot のパーティションと ext4 のパーティション2つあるやつでした。下記実行例のようにパーティション削除を行います。

DISKPART> LIST DISK

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン           931 GB  2048 KB        *
  ディスク 1    オンライン           931 GB      0 B        *
  ディスク 2    オンライン          1863 GB      0 B
  ディスク 3    メディアなし             0 B      0 B
  ディスク 4    オンライン            14 GB  3072 KB

DISKPART> SELECT DISK 4

ディスク 4 が選択されました。

DISKPART> LIST PARTITION

  Partition ###  Type                Size     Offset
  -------------  ------------------  -------  -------
  Partition 1    プライマリ               41 MB  4096 KB
  Partition 2    プライマリ               14 GB    46 MB


DISKPART> SELECT PARTITION 2

パーティション 2 が選択されました。

DISKPART> DELETE PARTITION

DiskPart は選択されたパーティションを正常に削除しました。

DISKPART> SELECT PARTITION 1

パーティション 1 が選択されました。

DISKPART> DELETE PARTITION

DiskPart は選択されたパーティションを正常に削除しました。

DISKPART> LIST PARTITION

このディスクには表示するパーティションがありません。

DISKPART>

これで、microSD にパーティションが無い状態になりました。また、SELECT DISK をした後に CLEAN コマンド一発でパーティションをすべて削除できます。SELECT DISK を間違えると大変なことになるので、好きな方法で microSD カードの中身を削除してください。

DISKPART> help clean

     フォーカスされたディスクからすべてのパーティション フォーマットまたは
     ボリューム フォーマットを削除します。

構文:  CLEAN [ALL]

    ALL         ディスク上のすべてのバイトおよびセクターをゼロに設定するように指定します。
                これにより、そのディスクに格納されているすべてのデータが完全に削除されます。

    マスター ブート レコード (MBR) ディスクでは、MBR パーティション情報と
    隠しセクター情報だけが上書きされます。GUID パーティション テーブル
    (GPT) ディスクでは、プロテクティブ MBR を含む GPT パーティション情報が
    上書きされます。ALL パラメーターを使用しない場合、最初の 1 MB と最後の
    1 MB がゼロに設定されます。これにより、以前にディスクに適用された
    フォーマットは消去されます。ディスクの消去の後、ディスクの状態は
    未初期化になります。

例:

    CLEAN

パーティションを作成する。

DISKPART> CREATE PARTITION PRIMARY SIZE=2000

DiskPart は指定したパーティションの作成に成功しました。

DISKPART> ACTIVE

DiskPart は現在のパーティションをアクティブとしてマークしました。

DISKPART> FORMAT FS=FAT QUICK

  100% 完了しました

DiskPart は、ボリュームのフォーマットを完了しました。

DISKPART> SET ID=06

DiskPart は、パーティション ID を設定しました。

DISKPART> DETAIL PARTITION

パーティション 1
種類         : 06
隠し属性     : いいえ
アクティブ   : はい
オフセット (バイト): 1048576

  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
* Volume 8     I                FAT    リムーバブル      2000 MB  正常

DISKPART>

Ltr は ドライブレターなので、パソコンによって変化します。DISKPART のコマンドプロンプトウィンドウを閉じます。

microSD カードに、NEXTOR DOS のファイルをコピーします。ロシア語サイトからダウンロードした biosnext.zip と nextor.zip を解凍しておきます。そして、biosnext.zip ファイル内の biosnext.sys を最初に microSD にコピーします。nextor.zip は NEXTOR.SYS と *.COM ファイルをコピーします。これで microSD カードから起動できます。

MSXDOS 起動

microSDカードを取り外して、DE0の SDカードスロットに装着します。大きさ変換のアダプタを使用して差し込みます。また、VGA 液晶、PS/2 キーボードも接続します。10個並んだスライドスイッチは全部 OFF で電源を入れます。

Initial Program Loader のメッセージやロゴが表示された後、MSXDOS のプロンプトが表示されれば成功です。

NEXTOR.SYS verstion 2.01 と表示されて konamiman dos が起動しています。

https://github.com/Konamiman/Nextor/releases

の最新リリースにある NEXTOR.SYS.japanese をNEXTOR.SYS にリネームし、microSDカードに上書きしてところ version 2.12 と表示され起動しましたので、その他コマンド類もリポジトリの最新版を build して置き換えてもいいと思われます。

あとは、Louthrax’s MSX game room から、sofarun をダウンロードして microSD にいれておけば、 .dsk のディスクイメージもファイルを選んでボタンクリックするだけで起動してくれる便利なソフトなので導入しておきましょう。

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 ボードは一旦ここまでということにします。