8052AH-BASIC SBC
8052AH-BASIC
- 8052AH-BASIC
8052-AH BASICをなかなか見つけられないでいたが偶然見つけた。
マルツの特価半導体を眺めていたら特価現品限りで8052AHが出ていた。web上の画像はマーキングが消してあったので、P8052AH-BASICかどうかは判らなかったけど、まあ1つ買ってみるかと注文したらP8052AH-BASICだった。
バージョン1.1 (1991/11週か)
じゃあSBCを作ってBASIC-52で遊んでみるかと - 回路図
回路図はMCS BASIC-52に掲載されているRAMとEEPROMを使ったもの
マニュアルは74LS138(3to8 Demultiplexer)を使っているが、74HCT139(Dual 2to4 Demultiplexer)を使うようにした。74HCT139を使うとA000h-BFFFhにEEPROMのイメージが見えるが、IOアドレスはC000h、D000h、E000h、F000hがI/Oアドレスとして使えるようになる。74LS138を使うと使えるのはC000h、E000hだ。
MCS BASIC-52のマニュアルは方々で公開されていて検索すると簡単に見つかる。(IntelがPDSにしたらしい) - 部品配置
主要な部品は、8052-AH(40pin DIP)、RAM 62256(28pin DIP)、EEPROM HN58V65(28pin DIP)、74HCT573(20pin DIP)、74HCT08(14pin DIP)、74HCT138(16pin DIP)なのでサンハヤトのICB-293U に載りそうだ。
ユニバーサル基板エディタPasSを使ってICB-293Uに載せてみた
アドレスラッチの74HCT573と74HCT08は8052-AHの下に配置してスペースを稼ぐ。
以前は行き当たりばったりで配線していたのだが、PasS を知ってからは予め置いてみるようにしている。実際に配線し始めると変わることもよくあるのだが...
- 配線
表
裏
ポリウレタン線を使って裏面で配線している。
手配線を減らすためにサンハヤトのシール基板ICB-055 を使ってRAMとEEPROMを配線した。
この基板はちょっと高いのだがちょっと横着をした。
RAMとEEPROMはピン配列がほぼ同じなので、この基板を使って配線すると大幅に配線作業が減る。
このシール基板は半分が600mil×5 でもう半分が300mil×8だ。今回は600milの部分2個分を切って使った。
そして完成。
- 起動
ターミナルを繋いで、スペースを押すとシリアルのスピードが自動検出されてオープニングメッセージが表示される。
*MCS-51(tm) BASIC V1.1*
READY
>
- プログラム
何はともあれメモリダンププログラムを書いてみた。
久しぶりにBASICのプログラムを書くと違和感があるなあ。
100 REM
110 REM ###############################
120 REM dump memory
130 REM ###############################
140 STRING 11,5 : DIM ASCI(16)
150 REM INPUT "address: ",ADR
160 INPUT "length: ",L
170 REM == dump ==
180 FOR I=ADR TO (ADR+L-1)
190 IF (I.AND.0FH)=0 THEN GOSUB 4000
200 C=XBY(I)
210 HH=C : GOSUB 2000
215 PRINT " ",
220 ASCI(I.AND.0FH)=C
230 IF C<20H.OR.7EH<C THEN ASCI(I.AND.0FH)=ASC(.)
240 NEXT I
320 GOSUB 3000
325 PRINT
330 INPUT "next:1 end:0 ?",ANS
340 IF ANS<>1 THEN STOP
350 ADR=ADR+L
360 FOR II=0 TO 15
370 ASCI(II)=0
380 NEXT II
390 GOTO 180
900 STOP
990 REM ===================================
1000 REM print 16bit data / HHHH:print data
1010 HH=INT(HHHH/256) : GOSUB 2000
1020 HH=HHHH-HH*256 : GOSUB 2000
1030 PRINT ": ",
1040 RETURN
2000 REM print 8bit data / HH: print data
2010 BB=INT(HH/16)
2020 PRINT CHR(30H+(BB>9)/65535*7+BB),
2030 BB=HH-BB*16
2040 PRINT CHR(30H+(BB>9)/65535*7+BB),
2050 RETURN
2990 REM ===================================
3000 REM print ascii data
3020 FOR II=0 TO 15
3030 PRINT CHR(ASCI(II)),
3040 NEXT II
3050 PRINT
3060 RETURN
4000 REM
4010 HHHH=I : GOSUB 3000 : GOTO 1000
LISTコマンドで表示したこのインデントには、なじめないなあ。
お約束の8Queen問題
遅いなあ。インタプリタだから仕方ないけど。1 REM ################################
2 REM 8Queen
3 REM Nov. 2012 / Yoshi
4 REM ################################
10 REM init
20 TRUE=(0=0)
30 FALSE=(0=1)
40 N=0 : rem pattern
50 D=0 : rem debug level
60 FOR Y=1 TO 8
70 A(Y)=0 : REM init array
80 NEXT Y
100 REM
110 REM main routine
120 REM
130 S=1
140 FOR Y=1 TO 8
150 FOR X=S TO 8
160 YY=Y : XX=X : GOSUB 1000 : REM check
170 IF CHK=FALSE THEN GOTO 220 : REM end if
180 A(Y)=X
190 X=8
200 S=1
210 REM gosub 2000
220 REM end if
230 NEXT X
240 IF CHK=TRUE THEN GOTO 330 : REM end if
250 S=A(Y-1)+1
260 A(Y-1)=0
270 Y=Y-2
280 IF S<9 THEN GOTO 320 : REM end if
290 S=A(Y)+1
300 A(Y)=0
310 Y=Y-1
320 REM end if
330 REM end if
340 IF D>=1 THEN GOSUB 2000
350 NEXT Y
360 N=N+1
370 GOSUB 2000
390 REM
900 STOP
990 REM =====================================
1000 REM check : pos(x,y)
1010 IF D>=2 THEN PRINT "(",X,",",Y,")"
1020 CHK=TRUE
1030 IF Y=1 THEN GOTO 1100 : REM end if
1040 FOR YY=1 TO Y-1
1050 IF A(Y-YY)=X THEN CHK=FALSE
1060 IF A(Y-YY)=X+YY THEN CHK=FALSE
1070 IF A(Y-YY)=X-YY THEN CHK=FALSE
1080 IF CHK=FALSE THEN YY=Y
1090 NEXT YY
1100 REM endif
1110 RETURN
1120 REM
1990 REM ======================================
2000 REM print array
2010 PRINT "--",N,"--"
2020 IF D>=2 THEN PRINT "(",X,",",Y,")","S:",S
2030 FOR YY=1 TO 8
2040 FOR XX=1 TO 8
2050 IF A(YY)=XX THEN PRINT "|X", ELSE PRINT "| ",
2060 NEXT XX
2070 PRINT "|"
2080 NEXT YY
2090 RETURN
2100 REM
BASIC52ではNEXTをGO TOやRETURNで飛び越してはいけないらしい。ERROR: C-STACKの意味がわからずハマってしまった。
プログラムはPC上のviで書いてターミナル経由でアップロードしている。
1行入力して改行したときにBASIC52が1行分のプログラムを処理する時間が必要で、処理時間を考慮しないで次の行を送ると文字を落としてしまうので、ターミナル側で1行送信後ウエイトを入れる。TeraTermではシリアルポートの設定→送信遅延である。
長い行は処理時間が必要なので300msくらい必要である。
行番号1と行番号2の間はわざと空けてある。
NEWコマンド実行後最初の行の処理時間は更に長い。かといって、この時間に合わせてウエイトを入れるとアップロードが遅くてイライラするので、改行を2つ入れて処理時間を稼ぐとうまくいく。
- EEPROM書き込み
RAMで動作しているプログラムはPROG、FPROGコマンドでEEPROMに保存しEEPROM上で実行することができる。(トラブルはあったけど)
メモリダンププログラムをダウンロードしてROMに書いたところ。
ROMに書かれたプログラムを一覧するプログラムを作ろうかと考えていたら、既に作っている人がいて、ここにあった。
プログラム番号、先頭アドレス、サイズ、先頭のREMを表示してくれる。
- つれづれ
8052-AH BASIC SBCを作ろうと思ったきっかけは、本棚から「エレクトロニクスライフ 1990/8 」を引っ張り出してきたことだ。 それまでBASICでプログラムを書いていてBASICで構造化(流行っていたなあ)なんてことを一生懸命考えていたが、1990頃はCでプログラムを書いていたので、どうやってZ80 SBCのプログラムをCで書くかを考えていた。
そんなとき、「エレクトロニクスライフ」を読んだのだが、8052-AH BASICやEEPROMが結構高価だったので結局スルーしたと記憶している。
電源ONで自分が書いたBASICが走るのは便利かもしれない。市販のボードもいくつもあった。 8052AH BASICやEEPROMが高いと思ったくらいだから、とても手が出る価格ではなかった。
リアルタイム性を求めるならインタプリタでは厳しいのでアセンブラでプログラムを書く必要がある。 アセンブラでプログラム書くにしても1から書いてROM化するのは大変なので、BASIC-52ボードにEEPROMを積んで、アセンブラルーチンをEEPROMに置いてBASICからCALLする方が楽だ。
というわけで、結構ニーズはあったのかと思う。
« ピーターの法則 | トップページ | 8052BASIC(3) »
2月にSTCGALに関して質問をさせていただいたたーじーです。その後STCGALでBASICインタープリタが書き込めたので頂いたメールに気が付かず申し訳ありませんでした。私も
エレクトロニクスライフ誌を所有しているのでHN58V65を入手してプログラムを保存しようとしています。たまたまPROGコマンドで保存できた様なときもありましたが、手配線の基板の
悲しさか、不安定のため現在は不具合の状態です。
問題なのはEEPROMのデータ消去です。PGMコマンドを使用したPGM.B52の書き込みパルス、INT0(RDY)のタイミングは問題ないと思われますがデータ消去ができません。
HN68V65のデータ不足のためアドバイスを戴ければ幸いです。よろしくお願いいたします。
投稿: たーじー | 2021年6月22日 (火) 20時36分
たーじーさん コメントありがとうございます。
最初EEPROMに書き込めなかったのですが、原因はP0(AD0-7)をプルアップしていなかったことでした。
https://yoshi-s.cocolog-nifty.com/cpu/2012/10/8052basic4-fa-1.html
https://yoshi-s.cocolog-nifty.com/cpu/2012/11/8052basic6-4cea.html
HN68V65のデータシートは入手されましたか?
https://www.datasheetarchive.com/pdf/download.php?id=1187ea66033a3d3106b251fe0df5ab71885f6b&type=M&term=HN58V65
投稿: Yoshi | 2021年6月22日 (火) 23時59分
EEPROM消去できました。まさかと思いましたがデータバスの抵抗をテスターでチェックするとP0.7がプルアップされていませんでした。実は中国でポピュラーなSTC89C52を使用して
LEDなどI/Oを接続した基板にSRAM、EEPROMを追加したのですが、回路図にあって実装
されている抵抗器にパターンがありませんでした。10日以上悩みましたが、これまでプログラムをTeratermのファイル転送を使用して保管するしかありませんでしたが、やっとBASIC
が利用できそうです。後期高齢者のたーじーは惚け防止のため捨てずに持っていた30年
以上前のEL誌で楽しめそうです。今更アセンブラは使用する気にはなれません。
HN58V65Pで検索してYoshiさんのブログにヒットしたのはラッキーでした。
駄文長くなり申し訳ありませんでしたが、どうも有難うございました。
投稿: たーじー | 2021年6月23日 (水) 15時42分
たーじーさん
解決してよかったです。
私もEEPROMに書けなかったので1月以上悩みました。
当時は、高級言語が無かったのでBASICが動くのはありがたかったですね。
投稿: Yoshi | 2021年6月23日 (水) 21時35分