« 【チラシのうら 25日目】RENUMを実装してみた | トップページ | 【チラシのうら 26日目】INPUTを実装してみた »

2026年7月19日 (日)

【チラシのうら 26日目】PRINT USINGを実装してみた

ヒープ領域破壊の原因が分からず手間取りました。
WindowsやLinuxでは起きないですが、組み込み系では割とある問題らしいです。
グローバル領域に宣言したクラスのコンストラクタとヒープ領域の初期化のどっちが先に実行されるか問題… (;・∀・)
「組み込み系ではコンストラクタ内でメモリー領域を確保してはならない」と言う事でした…
なるほど、WireとかSerialにbegin()メソッドがあるのは そう言う理由だったのですね。

MSX-BASICの文法を参考にしていますが、エラーチェックが甘いのでちょっと不思議な動きになりました。
数値を直接記述した場合、フォーマット指定が文字列でもエラーになりません。
PRINT文解析中に出現した単体の数値は中間変数に評価せず(評価する必要がない)内供表現は文字列のままなのでフォーマット指定が文字列でもエラーにならない…と。
まぁ、コッチの方が動作が柔軟なのでヨシ…と言うことにしておこう。


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

PRINT USING"& & & & ### !";"MSX";"BASIC",2.5,"ABC"
MSX BASIC 2 A
READY.

PRINT USING"& & & & ###. !";"MSX";"BASIC",2.5,"ABC"
MSX BASIC 3 A
READY.

PRINT USING"& & ";"MSX";"BASIC",2.5,123
MSX BASIC 2.5 123
READY.


###. と小数点を付けると実数扱いで小数部ゼロなので表示時に四捨五入
###は整数表示指示なので小数点以下切り捨てにしています。

ここまでの成果

  • 書式付き表示(PRINT USING)が使えるようになった

取り合えず、万年カレンダーが作れるだけの機能の実装を優先しようと思う。

|

« 【チラシのうら 25日目】RENUMを実装してみた | トップページ | 【チラシのうら 26日目】INPUTを実装してみた »

BASIC」カテゴリの記事

コメント

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