ブログの練習

ブログを書く練習です。
最近はレトロな計算機(電卓、マイコン、パソコンなど)
に関することを書き始めました。

SBC8080 with TK-80サブボードにSN713を付ける

2022-09-05 15:14:58 | マイコン
PayPayの戦略にはまってしまい、月に1回Yahooショッピングで買い物をしなくてはいけないので、オレンジピコショップで買った基板や部品がかなりたまっています。今回は積んであった基板の1つ、TK-80サブボードを組み立てることにしました。
SBC8080の方はちょっと前に既に組み立てていて、CPU&部品チェッカーとして使うのが主な目的なのでソケットが全部ZIFになってます。
TK-80サブボードの商品説明によると「SBC8080またはSBC8085をTK-80互換機にするための専用基板です。」ということで、どの程度の互換性があるかは特に気にしないで買ったのですが、開発した方のブログ(JR2XZY ブログ)によると、TK-80の本物のモニタがそのまま走るというちゃんとした互換機でした。
組み立てるだけなので特に大変なところもなく完成しました。

モニタは「復活!TK-80」の付録のPDFファイルをコピペしてエディタで編集して作ったbinファイルを使いました。(本物のTK-80もあるのでROMを吸い出せばいいのですが、こっちの方が簡単だったので。)
結構誤植があったのでちょっと手間取ったのですが、とりあえず動きました。
しかし、ZK-80のとき(ZK-80(TK-80互換機)のLED改装)もそうでしたが、このLEDでは画竜点睛を欠きます。
というわけで、SN713をつなげることにしました。今回もカソードコモンのLEDが使われているので、アノードコモンへの変換が必要になります。
ZK-80Pのときは表示用のドライバにMAX7219が使われていたので、トランジスタアレイを外付けで2つ付けて対処したのですが、今回はもう少し簡単に(部品交換だけで)出来そうです。用意する部品はこの2つ。

(1) コモン側をドライブしているトランジスタアレイ(TBD62083(シンク型))をTBD62783(ソース型)に交換
(2) セグメントをドライブしている74ATC573を74ATC563(573の出力反転)に交換
これだけで出来ました。
TBD62083(シンク)<->TBD62783(ソース)、74573(正論理)<->74563(負論理)という対となる部品が存在したおかげで部品交換だけで出来ました。(実は最初、トランジスタアレイに電源をつなげるのを忘れて動きませんでした。シンク型は電源不要なんですね。)
とりあえずOSLAMのアノードコモンの4桁LEDで動作確認できました。

SN713のセグメントの配線は面倒なので、以前作って余っているボードを流用。

完成しました。

キーボードも本物っぽい部品に交換したいなあ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Fairchild F8 Family (F3850)

2022-08-11 14:18:16 | マイコン
Fairchild F8ファミリーのCPUとメモリインターフェースを入手しました。上がF3850PC(CPU, メーカーのロゴが無いけどFairchaild製だよね?)、下がMostek MK3853P(SMI, Static Memory Interface)です。最近読んだ「I/O別冊8 マイコン活用アイデア集」の最後に紹介記事があったCPUですが、それを読むまでその存在を知りませんでした。
そんなマイナーなCPUにも関わらず、電脳伝説さん(SBCF8が完成)が基板の作成やBASICの移植をしてくれていたので、基板とデータパックを使ってTiny BASIC for the F8を動かしてみました。

ハンダ付けするだけで何のトラブルも無くあっさり起動。プラモデル感覚です。
メモリとUARTは別基板になっていて、全体像はこんな感じ。

最近入手したレトロLED、東芝TLR101を使ってみました。


ASCIIART.BASを整数型BASIC用に書き替えて走らせてみました。
値をF倍して変数に格納して、演算時に整数部分と小数部分に分けて計算しています。
50行目の416はほんとは416.6なので四捨五入して417にしたいのですが、それだと微妙にオーバーフローしてしまうことがあるというギリギリのところなので416にしています。
100行目のa*a-b*b(a+b)*(a-b)の方がかけ算が1回で済んだり、オーバーフローしにくかったりするので良いかと思ったのですが、大差なかったので元のソースに近い式にしています。
130~140行目の発散判定は、計算量削減のために整数部だけで計算しています。
リストはこちら。

10 F=50
11 REM F is '1.0'
20 FOR Y=-12 TO 12
30 FOR X=-39 TO 39
40 C=X*229/100
41 REM 0.0458*F
50 D=Y*416/100
51 REM 0.0833*F
60 A=C
70 B=D
80 I=0
90 Q=B/F; S=B-Q*F
100 T=(A*A-B*B)/F+C
110 B=2*(A*Q+A*S/F)+D
120 A=T
130 P=A/F; Q=B/F
140 IF (P*P+Q*Q)>4 THEN 180
150 I=I+1;IF I<=15 THEN 90
160 PRINT " ",
170 GOTO 200
180 IF I>9 I=I+7
190 PRINT CHR(48+I),
200 NEXT X
210 PRINT
220 NEXT Y

結果は35分29秒。先日のZilog Z8671 BASIC/Debugとほぼ同じでした。

これを走らせている過程で、Tiny BASICのバグらしきものを2つ発見しました。1つ目はこれ。128で割るとエラー(HOW)になります。-128でも同様でした。最初は除数の範囲が-127~127というタイニーな仕様なのかと思ったのですが、そうではなかったようで、128のときだけエラーになります。

もう1つ見つけたバグがこれ。行番号が1桁のときの挙動がおかしいようで、1桁の行が書けなかったり消されちゃったりします。

データパックにソースもあることだし、中を見てみようかな。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Zilog Z8671 BASIC/Debug

2022-06-07 14:17:28 | マイコン
Zilog Z8671 (Z8 MCU with BASIC/Debug Interpreter)です。BASICインタプリタのROMが内蔵されたZ8ファミリーのマイコンです。運良く入手することが出来たので動作確認してみました。ググると情報がいくつか見つかり、主に下記サイトを参考にさせていただきました。
Z8671を動かす | Electrelic by Electrelicさん
Z8 – 電脳伝説 by 電脳伝説さん
Z8 – レトロな雰囲気 by tomi9さん
まずはHardware Application Note (Zilog "z8671 seven chip computer hardware application note", Sept. 1981)に忠実に作ろうと思ったんだけど、Z6132なる32Kbitの疑似SRAMを使っていたので早々にあきらめ、おなじみのHM6116に変更。
最初はブレッドボードかユニバーサル基板に組もうかと考えていたところなのですが、
電脳伝説さん(&tomi9さん)のSBCZ8の基板が440円という安さで売られているのでそれを購入して流用することにしました。
SBCZ8はRAMがx800H~xFFFHに配置されているようだったのですが、そこにはボーレート設定用のROMを置きたいので入れ替える必要がありそう。
/CEを入れ替えようと思ったんだけど、基板のパターンを見たら/WEを入れ替える方が簡単だったので、ROMとRAMの物理的な位置と/WEを入れ替えて解決。ところがパターンカットするときに/CEの線も切ってしまったので、結局/CEを入れ替えるのと労力はあまり変わらず。まあいいか。
最初、何でA8~11をプルダウンしているんだろうと思っていたのですが、Handbook (Zilog Z8 Family Design Handbook)に記載あり。起動時にI/Oポートをアドレスバスとして使用する設定をする前にメモリにアクセスしに行くため。なるほど言われてみればそうですね。Z8681は起動時に外部ROMにはアクセスしないのでプルダウンは不要。チップ横の抵抗を省略出来ました。
せっかく内蔵BASICなのに、ボーレートの設定だけのために外付けROMを付けるのはなんだかなあ、と思っていたところ、上記のElectrelicさんのブログにD0~2をプルアップ&プルダウンして値を入れればいいという話を発見。ROMを省略できました。
RXDの6.8Kは何なんだろうと思っていたら、tomi9さんのブログに「USBシリアルを接続すると、PowerONリセットがRXDからの電流の回り込みでVCCに電圧が加わりリセットできないのでRXDに抵抗が追加してあります。」という記述を発見。なるほど納得。



とりあえず完成したので起動。してみたが動かず・・・おかしいなあ。
オシロで/AS, /DS, /CE, TXDの信号を見てみるとそれなりの信号は出ている。が、良くみるとTXDの動きが遅すぎる。XTAL1, XTAL2をみたら周波数が数KHz。これはおかしい。水晶がちゃんと発振していないようだ。水晶にソケットとか付けたのがまずかったのかなあと思ったものの、せっかくソケットなので水晶を入れ替えてみる。手持ちの4MHzだとちゃんと発振。10MHzは発振せず。ああ、やっぱりそういう微妙なところか。
SBCZ8のコンデンサは15pだったんだけど、Applicatio Noteは22pFだったので、その差も気になる。

データシートを確認しようと思い、Handbookを確認したところ、C<=15pFって書いてあるじゃん!Application Noteは何で22pFなのよ。

15pFと22pFでそんなに変わるかなあ、と思いながらコンデンサを交換。結果、あっさり発振成功。(このあたりは写真や記録を撮っていなかったので画像無し)

お約束のマンデルブロ集合でベンチマークでも走らすか、と思って以前MCS8051のベンチマークに使ったASCIIART.BASを見てみたら浮動小数点演算していることに気付く。
マンデルブロ集合の計算なんだからそりゃそうだよね。しかしZ8671のBASICは16bitの整数型なのだ。整数型BASIC用のベンチマークは無いのかな?と思ってはせりんさんのサイト(ASCIIART(マンデルブロ集合)ベンチマーク)を見ても、みんな浮動小数点演算が前提だった。
仕方ないので固定小数点版をやっつけで作ってみました。
最初小数部8bitでやってたらいろいろ溢れて試行錯誤の結果小数部6bitで動きました。
16bitの符号付き整数を小数部6bitの固定小数点に変換しながら計算。
最初小数部8bitでやったら計算途中で溢れてNG。7bitだと一応動くけど、溢れる可能性があるので6bitにしました。
この実装も結構インチキなのですが、計算に使われる変数値が±5.0以下みたいなのでとりあえず動いているという感じです。
発散判定は整数部だけでやってます。(真面目にやっても時間がかかるわりにそれほど差が無いので。)
CHR関数的なものが無いので、10~15はIF文で"A"~"F"をPRINT。FOR文も無いのでIFとGOTOで代用。
プログラムはこんな感じ。
(【2023/1/5 追記
下記コードはオーバーフローしてる箇所があるっぽいので、整数型BASIC用のプログラムとしては別の記事(Fairchild F8 Family (F3850))に書いたやつの方がいいかもしれないです。)

10 F=64: M=F-1: REM for Fixed Floating Point (F=1.0, M is a bit mask for fraction part)
20 Y=-12
30 X=-39
40 C=X*3: REM 0.0458*F
50 D=Y*16/3: REM 0.08333*F
60 A=C
70 B=D
80 I=0
100 Q=B/F
130 IF B>=0 THEN S=AND(B,M): GOTO 150
140 S=-AND(-B,M)
150 T=(A+B)*(A-B)/F+C
160 B=2*(A*Q+A*S/F)+D
170 A=T
180 P=A/F: Q=B/F
190 IF (P*P+Q*Q)>4 THEN GOTO 220
200 I=I+1:IF I<=15 THEN GOTO 100
210 PRINT " ";: GOTO 300
220 IF I<10 THEN PRINT I;: GOTO 300
230 IF I=10 THEN PRINT "A";: GOTO 300
240 IF I=11 THEN PRINT "B";: GOTO 300
250 IF I=12 THEN PRINT "C";: GOTO 300
260 IF I=13 THEN PRINT "D";: GOTO 300
270 IF I=14 THEN PRINT "E";: GOTO 300
280 IF I=15 THEN PRINT "F";
300 X=X+1:IF X<=39 THEN GOTO 40
310 PRINT
320 Y=Y+1:IF Y<=12 THEN GOTO 30

結果です。クロックは7.3728MHz、実行時間は1897秒(31分37秒)。かなり遅いです。でもレトロマイコンは遅いほど味わい深いのでこれでいいのだ。


動作時も消費電力は5V×50mAと小さめ。円高で値上げされそうなので駆け込みで買ったFLIRで測定。52度ぐらいとそれほど高温ではない。

さて次は何をやろうかな?
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAX7219の偽物(fake maxim 7219)

2020-07-04 17:21:35 | マイコン
今回のLED表示盤にはMAX7219というLEDドライバを使っているわけですが、どうやらこのICは偽物が多数出回っているらしいです。
DigiKeyやMouserなどの信頼できそうなルートで購入すると1個$8以上、秋月でさえ800円するのに、eBayやAmazonだと5個で400円とかで売られてたりします。この差はなんだろうと思い、いろいろ調べているうちに、"fake max 7219"でググったらいろいろなページがヒットしました。わりと有名な話だったようです。
今回、秋月の800円のICと、某国内通販の250円のIC2個を入手していたのですが、250円の物は見事に不良品の偽物でした。偽物でも動作するという話もあったので、甘く考えていたのですがダメでした。とほほ。
一番上が秋月の800円、下の2つが某国内通販で入手した250円のものです。

秋月の800円のICはちゃんと動作しました。

一方、250円のICは、こんなだったり、

こんなだったりして使い物になりませんでした。

相場より安い部品は使っちゃダメなことを学びました。
今回は秋月のも買っておいて良かったです。安いやつだけだったら基板の方を疑って、不毛なデバッグにはまっていたかもしれません。

【2020/7/16追記】
不良品のICは全部で5個あったのですが、全部無事返金対応してもらえました。
コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ZK-80P用LED表示盤完成

2020-07-04 17:07:51 | マイコン
修正版の基板が届きました。

10枚注文で12枚入っているのでラッキー!っと思ったら、

傷ありが1枚。不良品混在を見越して余分に入っているのでしょうね。
早速部品をはんだ付けして電源投入。今度はちゃんと表示されました。

本物のTK-80と比べるとこんな感じ。

ちなみに上の写真は以前の記事ZK-80(TK-80互換機)のLED改装 - ブログの練習に書いたMAX7219の輝度を上げるためのファーム改修後のものです。
オリジナルのファームだと下の写真のような感じなので、ファーム改修は必須のようです。


【2020/7/12追記】
余った基板をヤフオクに出品しています。枚数に限りがありますのでお早めにどうぞ。
https://auctions.yahoo.co.jp/seller/bxc06442

【2022/3/14追記】
基板1枚とキット3つが売れた後しばらく売れなかったので出品を止めていましたが、いいねボタンを押して頂いたので、残っている2セットを再出品することにします。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする