2020/07/16(木)8051用BASIC-52について調べてみた

中古の8051Hだが6時間イレーズしても書き込みには失敗する。これの有効活用方法だがBASIC-52を修正して8051で動作するバージョンを発見した。素晴らしい。8051と8052ではメモリ容量以外に内蔵しているI/Oの数が異なるので一部の機能は削られている。まぁ、古いそれも壊れかけのチップに拘る必要性はないのだけれど、自分の断捨離力が足りないのだろうか。

BASIC-52 Version 1.2a

バージョン 1.2a は、8031/8051 プロセッサ上で MCS BASIC-52 を動作させることができるという点で非常に興味深いものです。8031/8051 プロセッサは 8032/8052 ペアの小さいバージョンで、8031/8051 は 128 バイトの内部 RAM メモリと 3 つの 16 ビットタイマーの代わりに 2 つの 16 ビットタイマーを持っています。では、標準的な80(C)32プロセッサの価格は2ユーロ以下なのに、なぜわざわざ8031/8051の特別バージョンを作るのでしょうか? まあ、それはいつもそうだったわけではありません。私が勉強していた頃の記憶では、余った8031プロセッサを手に入れるのは、8032プロセッサよりもずっと簡単だったのです。いずれにしても、Dan Karmann氏がバージョン1.2aを作成した動機が何であったのかは分かりませんが、彼は素晴らしい仕事をしてくれました。

バージョン1.2aのプログラムドキュメントの中で、Dan KarmannはMCS BASIC-52を8051上で動作させるために行ったすべての修正と改良の詳細なリストを提供しています。最も注目すべき点は、タイマー2に関連する全てのステートメントが無効化され、一方でタイマー1はボーレートジェネレータとして、またPWMステートメントのタイミングデバイスとして機能するように時間共有されています。8031/8051 では内部 RAM が小さくなっているため、内部スタックはデフォルトで 51 バイトに設定されていますが、8052 では 179 バイトに設定されています。このため、一部のプログラムでは「ERROR: I-STACK」が発生することがあります。これは通常、括弧「()」の入れ子になったレベルが多すぎることが原因であり、通常は式をいくつかの複雑でない式に分割することで動作するようにすることができます。さらに、バージョン 1.1 の「既知のバグ」のいくつかが修正されました (付録 B)。

www.DeepL.com/Translator(無料版)で翻訳しました。

2020/07/15(水)中古の8751Hの書き込みが上手く行かない

イレーズ時間を長めに取っても上手く書き込めない幾つかの8751Hだが、外部ROMモードで試して見た結果、イレーズ直後は動作するが、書き込みに失敗すると外部ROMモードでも動作しない。そして再度イレーズすると外部モードでは動作する。8751HにはLockビットがあるので、書き込み失敗はそれが原因かな。それとも長めにイレーズせよというのはLockビットが中途半端にイレーズされないのが原因か。これから6時間イレーズに挑戦してみよう。

Intel Data Sheet(272318-002) の和訳(DeepL翻訳)

一度プログラムされたセキュリティ・ビットは、プログラム・メモリを完全に消去することでのみクリアできます。プログラムされている間は、内部のプログラムメモリを読み出すことはできず、デバイスをさらにプログラムしたり、外部のプログラムメモリから実行したりすることはできません。EPROMを消去してセキュリティビットをクリアすると、デバイスの全機能が回復します。その後、再プログラムすることができます。

2020/05/07(木)Single Chip TinyBasic for 8051 (Tiny BASIC51)

2KBのSRAM内蔵8051マイコン-STC15F2K08S2でTiny BASIC51-その後

Tiny Basic For 8051を修正して内蔵RAM(2KB)を利用出来るようになりました。

HEXファイルだけここに公開します。

TinyBasic51はこちらにドキュメントがあります

*1 シリアル速度は9600bps固定です。

*2 起動後にスペースバーを叩くと起動します。

STC15F2K08S2 Single Chip TinyBasic

Tiny BASIC51 STC15F2K08S2

2020/05/06(水)BASIC52でマンデルブロ集合ベンチマーク

[8051]MCS BASIC-52

BASIC-52が動く環境が出来上がったのでASCIIART(マンデルブロ集合)ベンチマークを走らせて見ました。11.059MHzのSTC89C52にBASIC-52(V1.1)を書き込んで実行すると6分38秒要しました。BASIC-52ではFOR-NEXTループ内からループの外へGOTOするとエラーとなる為プログラムの一部を修正。またダブルスピードモードでは3分20秒で終了。

マンデルブロ実行結果とプログラム

20200506_0.png

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

65 I=0

70 DO

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 200

120 I=I+1 : WHILE I < 16

130 PRINT " ",

140 GOTO 210

200 IF I>9 THEN I=I+7

205 PRINT CHR(48+I),

210 NEXT X

220 PRINT

230 NEXT Y

追記:

Basic52のマンデルブロ描画プログラムをANSIカラーバージョンで作成した方のサイトを発見

2020/04/12(日)2KBのSRAM内蔵8051マイコン-STC15F2K08S2でTinyBasic

STC15F2K08S2というマイコンをaitendoさんで見つけてBasic51(Tiny Basic)を走らせてみたがどうも内蔵RAMへの書き込みが上手く行かない。簡単なメモリーテストプログラムを走らせて結果を確認した所、どうやら00FFより上のアドレスにアクセスするにはMOVX DPTR系の16bitアドレス指定命令でのみ可能なようだ。古い8051ではSRAMは外付けなので、上位バイトはI/Oポートで設定しても可能だったが、このチップはダメみたい。ソースコードに手を入れようかな。

20200412_0.jpg

ソースコード修正して1Chip Tiny Basic51が出来上がりました