« 【チラシのうら 26日目】INPUTを実装してみた | トップページ | M5Z-80 BASICの筐体が出来ました。 »

2026年7月21日 (火)

【チラシのうら 27日目】万年カレンダーを動かしてみた

基本的な機能は出来た…できたよね (;´∀`)
と言うことで、サンプルにコンソールだけで動かせて作りの簡単な
万年カレンダーを動かしてみました。

バグ大量発生…(@_@。

  • A+B(変数同士の足し算)が出来ない ※間違った答えを返す
  • USINGの最後の;が無視される ※常に改行される
  • 10÷3の演算結果が整数として処理され、答えが3になるる ※ 10.0÷3なら実数として計算され3.3333になる。
  • ELSEが無いIF文でTHEN区がマルチステートメントになっている場合に、条件がFALSEだとTHENの最後のステートメントが実行される。 ※ELSE区が存在する場合には正常に動作する。
  • 計算式の中で関数を複数回使用すると計算結果が正しくない ※中間評価変数の破壊が原因なので必ず起こる訳ではない。

最後のバグは訳が分からず、中間評価変数の管理方法を変更する…までやったのですが、トークナイザーの再起呼び出し時に中間評価変数の管理テーブルを初期化しているのが原因…でした。
分かってみれば単純なロジックミスですが、単純なミスほど発見しにくい。

コレもうね、遊びだから思い付きと勢いで作ってるけど、お仕事レベルの試験仕様書書いた方が良いのではないかと思い始めてる。
テスト…どんだけ時間掛かるか…(;^ω^) しかも絶賛増設中だし。


------------------------
M5Z-80 BASIC Ver.0.3a
------------------------
heap check = OK
Largest Internal = 110580(107.988KByte)
free = 218564(213.441KByte)
Largest PSRAM = 0(0)
Stack Free = 6156 bytes
READY.

10 INPUT "YEAR";Y
20 INPUT "MONTH";M
30 DIM D(12)
40 D(1)=31:D(2)=28:D(3)=31:D(4)=30
50 D(5)=31:D(6)=30:D(7)=31:D(8)=31
60 D(9)=30:D(10)=31:D(11)=30:D(12)=31
70 IF (Y MOD 4)=0 THEN D(2)=29
80 IF (Y MOD 100)=0 THEN D(2)=28
90 IF (Y MOD 400)=0 THEN D(2)=29
100 A=Y
110 B=M
120 IF B<3 THEN B=B+12:A=A-1
130 K=A MOD 100
140 J=INT(A/100)
150 H=(1+INT((13.0*(B+1))/5.0)+K+INT(K/4)+INT(J/4.0)+5.0*J) MOD 7
159 X6= X4 MOD 7
160 W=(H+6) MOD 7
165 PRINT
170 PRINT " ";Y;"/";M
180 PRINT " SUN MON TUE WED THU FRI SAT"
190 FOR I=1 TO W
200 PRINT " ";
210 NEXT I
220 FOR DAY=1 TO D(M)
230 PRINT USING "### ";DAY;
240 W=W+1
250 IF W=7 THEN PRINT:W=0
260 NEXT DAY
270 PRINT

READY.
run

YEAR?2026
MONTH?7

 2026/7
SUN MON TUE WED THU FRI SAT
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

READY.


ここまでの成果

  • INT() , FIX()関数が使えるようになった
  • いくつかのバグを修正
  • 万年カレンダーが実行できた。

|

« 【チラシのうら 26日目】INPUTを実装してみた | トップページ | M5Z-80 BASICの筐体が出来ました。 »

BASIC」カテゴリの記事

コメント

この記事へのコメントは終了しました。