体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

ポケコン PC-G850Vで電子回路工作(6/7)

念の為BASICでも構造化してみた。構造化はPC-G8系?G85系からなので、PC-E5系はPC-E650とPC-U6000だけかな。

前回のCプログラムを直す形にしたので、PEEK、POKE文によるPC-E5系のINP/OUTの代替命令は残していない。

【構造化BASICでのSPI通信によるA/D変換】
DIM A(33):I=0:X=-1

CLS
OUT &H60,1
OUT &H61,1

REPEAT
READ A(I):I=I+1
UNTIL A(I-1)=99

WHILE 1

C=10:D=0:I=0
WHILE A(I)<>99
OUT &H62,(A(I) AND &HFE)
IF (A(I) AND 1)<>0 THEN
A= INP &H62
IF C<>10 THEN
IF A=1 THEN D=D+(2^C)
IF C=0 THEN
W= INT (D/8)
IF X<>W THEN
LINE(X-(X<W),0)-(W-(X>W),15),X,BF
X=W
ENDIF
ENDIF
ENDIF
C=C-1
ENDIF
I=I+1
WEND
WEND
DATA 0,2,6,2,6,0,4,2,6,0,5,0,5,0,5,0,5,0,
5,0,5,0,5,0,5,0,5,0,5,0,5,8,12,99
INTは関数なのでマニュアルの先頭に載っている。ただし、Cのintとは負の値の扱いが異なるのでFIX(こちらはBASICの命令)が本来正しい。まあ負の値を取らないのでCに字面だけ合わせてあるが。(X<W)の論理値は、Cの場合の真の値(1)と異なり-1なので符号を逆にしてある。またLINE文はX=XOR、BF=長方形塗りつぶしで、XとBFの間のパターンは省略している。あとREPEAT-UNTILやWHILEなので制御変数Iの初期値や判定が微妙に違うので(太文字)注意。

やっぱり実行すると遅い。Cプログラムと同時にメモリに存在できるので切り替えて実行するとよくわかる。

でもBASICも構造化するとループの範囲や意図が分かり易いし、なによりポケコンの狭い画面でも、横はタブを1にして書くと、Cと違ってセミコロンがない分、何とか収まるし、中かっこでなくENDIFやWENDなので縦も対応が分かり易い。ポケコン上でデバッグしやすい。(Cは一度ノートに書いて入力し机上デバッグする方がいい-画面狭いので)

おしいな~。これでBASICコンパイラがついてれば構造化BASICならプログラムの入門には最適だな。
だれかPC-E5系のBASICコンパイラBASCOM(BASC102)の構造化BASICへの移植してくれないかな~

【独り言・・・】
ソフト屋さんなので、入れ子構造が見やすい(BASICやCで育った人)と感じるが、ハード屋さんは前の構造化しない方のプログラムの方が見やすいのだろうな~。BASICに限るが、一行一行見て理解する形だと、GOTOのラベルの方が、単なるブロックの}やENDIFより意味がすぐわかるから。全体を見渡すよりべたっとしたリストを好む気がする。もちろん慣れの問題もあると思うが。Cも入れ子構造があまりに深いとわかりづらいから程度問題か。
Cで書いていても、ソフト屋さんは、for、whileのなるべく単純な制御構造に当てはめようと問題自体の分割やアルゴリズムを簡素なものにできないか再検討をするが、ハード屋さんのソースはどこかそういうループに特殊な脱出条件を追加したまま複雑化している気がする。きっとそこまで手間をかけるかどうかなんだろう。
[PR]
by k1segawa | 2015-06-07 23:44 | ポケコン | Comments(0)