1995年頃に古本屋で見かけた、雑誌「エレクトロニクスライフ」の 1990年ごろの 特集記事で知ってずっと気になっていたもの、本誌買って帰った覚えがあるけど見つからないので物の話から先に
1970年代末ごろIntelには自動化制御向けのコンピューターとして「 8051」を代表とした「MCS-51」というプロセッサーファミリーがあり、8051では、プロセッサーとプログラム用の数KBのROMと若干量のRAMといくつかの周辺回路が一つにまとめてありました。2023年1月現在でも、高速化されたりRAMや様々な周辺回路が追加された、バイナリーコード互換品が今でも量産されて活躍しているようです。1980年代頭には、マイクロプロセッサー上で動くBASICインタープリターが登場して、簡易オペレーティングシステム的な役割も持っていたようですが、8051をもとにROMやRAMの容量を増やした8052のROMに、専用の実数型BASICインタープリター「MCS-BASIC-52」が書き込まれた「8052AH-BASIC」というICが売り出され、国内雑誌でもいくつか特集が組まれたことがあったようです。 いまどきの32ビットマイクロコントローラー向けでMicroPythonやCircuitPythonといった組み込みPythonにつながっているREPLの先祖みたいなものでしょうか。後年BASICのバージョン1.1がパブリックドメインソフトウェアーとして公開され、主に欧米の有志の手により近年まで改良されて行って最新はV1.3系まで進化しています。8052の方もプログラムROMをフラッシュメモリーに改めたものやさらにオリジナルのブートローダーでプログラムの書き換えができるものがいくつかあるようです。
8052AH-BASICは一度扱ってみたかったものですが、初めて知った1995年ごろならまだともかく2022年5月下旬時点で現物はまず入手できないようだったので、代替品として まず中国製のMCS-51互換マイコンのSTC STC89C52RC-POQFP44-*-J9Cで、後日 沁恒 CH559 で動かしてみることにしました。
STCの方はUSBインターフェース付きのデモボードから線を引き出して、BASICプログラムや変数類の格納に必要な外付けRAMに256k×8bit 高速SRAM(IDT71256)を、BASICプログラムやデータの保存用に使うために64k×8bit EEPROM(AT28C64B)を接続して、BASICプログラムを保存できるような構成になっています。RAMはたまたま高速型のが手に入っただけなのでタイミングが問題なければ普通のでいいと思います。 はんだ付けだと寝ながら配線できないので、基板裏面にピンヘッダーをたてて、ワイヤーラッピングで配線してみました。
メモリーはプログラム用( PMEM )が内蔵ROMと外付けの両方合わせて最大64KB、データ用が内蔵RAM(IRAM)256Bに加えて別管理の外付け(XRAM)が最大64KB、追加の周辺デバイスとのやり取りは、汎用入出力を切り替えて必要な信号を作るよりも、外付けメモリーを使うときの回路を作って、外付けメモリーとして管理されているところからどこかを間借りして使う感じでしょう。ここで使ったSTC-…-J9Cはプログラムメモリー選択信号PSEN#が元のMCS-51のようには動かないようで、XRAMの内容をPMEMの物のように見せてプログラムとデータを混載させる方法はできませんでした。また、XRAMに配置したEEPROMへの書き込みはV1.1では外付けメモリーへの読み書き関数XBYでできることは確認しましたが、EEPROM内部バッファーを利用した複数バイトの一括書き込をさせるには、命令の実行処理の都合上自分で書き込み制御線を操作できるようなハードウェアーの追加が要りそうです。また、PROG命令によるBASICプログラムリストのEEPROMへの一括書き込みは、EEPROM側の「書き込み中」の呈示方法がBASIC側の想定と合わないのでV1.1では書き込み不可能、V1.3では問題なく書き込みができました。
CH559のほうはUSBインターフェースがついているので、BASICを改造すれば単体で使えそうですが、BASIC側の改造はせず、UART0の信号をCH340を使ったUSB-UARTブリッジモジュール(秋月電子通商: K-14745 )を介してパソコンと通信するようにしてあります。
CH559には 内蔵XRAM(内蔵 eXternal RAM )として6KB用意してあり 、BASIC-52の動作要件を十分満たしているため、特にメモリー関係の外付けはしなくても動きました。 内蔵 eXternal RAM とはちょっとおかしな表現ですが、もともと8051には若干量のRAMが備え付けられていて、それで済むなら単体で使えるもので、 MCS-51をもとにしたワンチップマイコンのなかには、若干の回路とともに外付けすることになっていた分のRAMまで一緒に載せてあったりするのでこう書くことにしておきました。
CH559へのBASICの書き込みは本体側のUSB接続からおこなうことになります。Arduinoツールチェーンを使わないなら純正の書き込みツールが使えるようですが、Arduinoで使うにはちょっと特別のデバイスドライバー差し替える必要があり、うちの環境ではドライバー差し替え後は純正のプログラマーが使えなくなってしまったので、Arduinoで使用されているCH55Xduinoの書き込みツールを別に見つけてかきこむことになりました。筆者はよほど必要がない限りArduinoを使わないのでちょっと面倒くさい手順になってしまいました。
いざ動かしてみると、通信速度をいったん希望の4倍にして「スペース」キーを押して通信速度を認識させ、通信速度を戻すとうまくいくようでした。 Teratermからの場合いったん通信速度115200bpsに設定してスペ―スキーを押してスタートさせてみて、そのまま通信速度を9600bpsに変えたらうまく動いたようです。
よくベンチマークにされているマンデルブロー集合のプログラムは、普通のだと7分程度かかるのが1分程度でかけました
(参考)
1) Ronald Dekker: A Tiny 80(C)32 BASIC Board
8032(8052の内蔵ROM省略品)での回路例
BASIC-52 のアセンブリソース及びバイナリーhttps://www.dos4ever.com/8031board/8031board.html
2) vintagechips:8752同等品でBASIC-52が動いた
BASIC-52が走る、MCS-51と外付けSRAMのみの最低構成のボードの製作過程です。
https://vintagechips.wordpress.com/2021/08/07/basic-52_is_running/
3) 鈴木哲哉: MCS8051技術資料
上記2)の資料です。基板は、不定期的にスイッチサイエンスやオレンジピコショップ販売されることがあるようです。
http://www.amy.hi-ho.ne.jp/officetetsu/storage/mcs8051_techdata.pdf
4) tomi9jp: レトロな雰囲気
Intel PPI(8255)付きで入出力24点を持つBASIC-52ボードの作例があります。
https://sbc738827564.wordpress.com/category/basic52/
5) 秋田純一:「CH55Xでどうでしょう」および「CH559PICO」、(個人出版、個人作成ハードウェアー) 書籍はアップデートされて商業誌になったようです。 https://www.rutles.net/products/detail.php?product_id=897
6) DeqingSun: CH55xDuino
CH55xをArduinoツールチェーンで使うための諸情報があります。
https://github.com/DeqingSun/ch55xduino
7) はせりん: Retro PC Gallery 番外編:ASCIIART(マンデルブロ集合)ベンチマーク
様々なコンピューターでのマンデルブロー集合表示プログラムの実行時間をまとめられています。
http://haserin09.la.coocan.jp/asciiart.html
http://haserin09.la.coocan.jp/asciiart.html#PROGRAMS