8752同等品でBASIC-52が動いた

インテルがMCS-51ファミリーのために作ったBASIC-52は組み込み用のCPUでここまでやるかってくらい高機能。ぜひ動かしてみたいと思い、先達の製作例を調べたら、ああそうか、高機能なんだから回路も複雑になるわけだ。でもさ、美味しいところだけ安直にいただきたいよね。てことで、機能の一部を捨てるかわりに回路をぐっと簡略化したのが下に示すMCS8051。うまいこと動いちゃったので、ここに情報をまとめておく。

MCS8051ではBASIC-52をCPUの内蔵ROMに持たせて外部ROMをなくした。その結果、外部ROMはもちろんのことアドレスデコーダやプルアップ抵抗など多くの部品がごっそり不要となった。詳細は下のMCS8051技術資料をご覧いただきたい。引き換えに捨てた機能は、外部ROMからデータを読み込むXFER命令とか、外部EPROMに書き込むPROG命令とか、まあだいたいそのあたりかな。こういうの、いらないでしょ(個人の感想です)。

MCS8051技術資料-PDFを別窓で開く
MCS8051データパック-ZIPをダウンロードする

CPUはEPROMを内蔵した8752ということになるが、今や入手困難だから同等品で代替する。最速はSTC89C52RC/40MHz、時間軸の正確さでは8752/11.0592MHz、なんだけどCPUと水晶振動子をソケットにしておいていろいろ差し替えられたらいいよね。問題は水晶のところのコンデンサ。規定にしたがうと10pF~47pFまで幅がある。ただ実際は何でもokみたい。試作機は33pFで全部の組み合わせが安定動作した。保証はしないけどさ。

BASIC-52は変数名が最大8文字(識別は先頭2文字)、浮動小数点計算ができる、などマイクロソフトBASICに近い。ASCIIART.BASがそのまま動くんじゃないかと思って試したら、機能的にはFOR~NEXTをGOTOで抜けるところがエラーになってしまった。ここと細部の書式を調整して修正終わり。実行したら57秒で完走してびっくりだよ。はせりんさんがまとめているASCIIART(マンデルブロ集合)ベンチマークでトップクラスの速度だもん。

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

とはいえBASIC-52の特徴は速度より各種レジスタの設定や割り込みなどでCPUの働きを細かく制御できること。ポート1を使ったLチカのプログラムを下に示す。この記述で1秒おきにタイマー割り込みが掛かってLEDの点灯/消灯が切り替わる。ただし、その1秒は水晶振動子が11.0592MHzの場合。実例は40MHzだからかなり早い。この点はシステム変数XTALに水晶振動子の周波数を代入することで調整できるようになっている。

10 CLOCK 1
20 PORT1=255
30 TIME=0
40 ONTIME 1,100
50 GOTO 50
100 REM TIMER INTERRUPT
110 PORT1=PORT1.XOR.255
120 ONTIME TIME+1,100
130 RETI

CPUが8752同等品なのにどうして名前がMCS8051かというと取っ掛かりのところで勘違いをして今さら変更できなくなったから。あと1か所シルクの間違いも指摘されているが、やはり内緒にしてそのまま行こうと思う。実用性に影響のないところでひとつふたつミスってるほうがかわいいでしょ。じゃあ恒例のお祭り騒ぎするね。このプリント基板はオレンジピコショップに頒布してもらいます。よろしくお願いします。

カテゴリー: 8051 パーマリンク

8752同等品でBASIC-52が動いた への1件のフィードバック

  1. ピンバック: MCS8051 BASIC-52 基板を買って組んでみました | 趣味関係のメモ帳

コメントを残す