動かすとどんどんバグが出るので、サンプルプログラムを動かしていきます。
今回は文字列をモールス信号に変換するコンバータです。
リストを見た時点でMID$,ASC,LENの文字列操作関数の実装が必要ですの実装してみました。
で、今回の例題実行時に見つかったバグですが
- 評価式の中に関数が使用されていた場合に関数値の評価が出来ない。
- 配列添え字を評価した後に中間評価変数が解放されず割り当て領域を使いつくしてしまう。
の2点でした。
モールス信号に変換された結果が正しいのか判断できないのですが (;^ω^)
『シリウスの心臓』のモールス信号と合わせてみて…合ってるんじゃね。
------------------------
M5Z-80 BASIC Ver.0.3a
------------------------
heap check = OK
Largest Internal = 110580(107.988KByte)
free = 199012(194.348KByte)
Largest PSRAM = 0(0)
Stack Free = 6156 bytes
READY.
10 REM ******************************
20 REM * MORSE CODE CONVERTER
30 REM ******************************
40 DIM M$(36)
50 RESTORE
60 FOR I=1 TO 36
70 READ M$(I)
80 NEXT
90 INPUT "TEXT";A$
100 FOR I=1 TO LEN(A$)
110 C$=MID$(A$,I,1)
120 IF C$=" " THEN PRINT " / ";:GOTO 200
130 N=ASC(C$)
140 IF N>=97 AND N<=122 THEN N=N-32
150 IF N>=65 AND N<=90 THEN PRINT M$(N-64);" "; : GOTO 200
190 IF N>=48 AND N<=57 THEN PRINT M$(N-21);" ";
200 NEXT
210 PRINT
220 END
1000 DATA .-,-...,-.-.,-..,.
1010 DATA ..-.,--.,....,..,.---
1020 DATA -.-,.-..,--,-.,---
1030 DATA .--.,--.-,.-.,...,-
1040 DATA ..-,...-,.--,-..-,-.--
1050 DATA --..
1060 DATA -----,.----,..---,...--
1070 DATA ....-,.....,-....,--...
1080 DATA ---..,----.
run
TEXT?ABCDEFG
.- -... -.-. -.. . ..-. --.
READY.
run
TEXT?I LOVE YOU
.. .-.. --- ...- . -.-- --- ..-
READY.
run
TEXT?M5Stack BASIC
-- ..... ... - .- -.-. -.- -... .- ... .. -.-.
READY.
ここまでの成果
- MID$、LEN、ASCが使えるようになった
- 評価式に関数を使えないバグ修正
- 中間評価変数の作業領域が解放されないバグ修正