« 2026年5月 | トップページ | 2026年7月 »

2026年6月30日 (火)

【チラシのうら 13日目】配列を扱えるようにしてみた

配列変数を扱えるようにしてみました。
制限を掛けないとメモリー管理が大変なので3次元配列までとしました。
最初の設計って大事ですよね (;´Д`)
勢いと思い付きで作り始めたので配列変数の事など全く考慮してなかったですから、変数管理と数式評価がほぼ作り直しになりました。
なのでバージョンが0.1->0.2になりました。
思い付きで作っているので仕様もてきと~です。

DIM A(10,10)で宣言した配列の添え字は、普通のBASICだと 1~10ですが、M5Z-80 BASICでは0~10でゼロベース+1になっています。
エラーチェックがいい加減(エラーチェックをしてない)ので宣言した以上の次元・添え字は使えませんが、以下なら使えます。
A(1)は A(1,0)として処理されます (*´з`)イヤ、ベンリ ダヨネ?

FOR分の終了値と刻み値の扱いもPC-G850Vに倣うなら最初にFORを評価した時に固定ですが、なんとなくC言語・Javaを意識して逐次評価にしたので
FOR I=1 to I+3 とかやると永久ループになります。
※どこかでFLOATの範囲を超えてオーバーフローしてカーネルパニックになるとは思う。


------------------------
M5Z-80 BASIC Ver.0.2
------------------------
Largest Internal = 0(0KByte)
Largest PSRAM = 0(0)
READY.

10 dim a(10)
READY.

20 a(1) = 5
READY.

30 for a(2) = 1 to a(1) + 5 step 1+2
READY.

40 print a(2)
READY.

50 next
READY.

list
10 DIM A(10)
20 A(1) = 5
30 FOR A(2) = 1 TO A(1) + 5 STEP 1+2
40 PRINT A(2)
50 NEXT
READY.

run
1
4
7
10
READY.


ここまでの成果

  • 配列変数が使えるようになった

| | コメント (0)

2026年6月29日 (月)

VSCodeでローカルLLMを使ってみた。

コンパイルエラーの理由説明やバグの原因調査、リファレンスの表示とかに便利なのでVSCodeでGitHUB Copilotを使っているのですが、無料トークンを使い切ってしまいました。

Image2_20260627221901

Chat-GPUに質問する使い方だとイマイチ不便なのでCopilot ChatからローカルLLMを使えるようにしてみました。

VSCodeのプラグインを使えばローカルLLMを使用できるので、以前LMStudioを使ってみたのですが「これじゃない…」感がしてイマイチでした。
GitHUB Copilot Chatウインドウで使いたいんです。
以前 VSCode + LMStudioで試した時には…どうにも (。-`ω-) でしたが、今回は切羽詰まっているので(w
改めて調べてみると OllamaならGitHUB Copilot Chatウインドウから使えるようなので試してみました。
OllamaはGUIが付いて使いやすい…っぽくなってまりましたが、基本CUIのLLMです。

OllamaのインストールはOllamaのサイトからOllamaSetup.exeをダウンロードして実行するだけの簡単操作です。

Image3_20260627222101

モデルのインストールは最初から設定されているGemma4とQuen3.5以外はCUI操作でインストールする必要があります。
Ollamaのサイトでモデルを選んでインストール指示をコマンドをコピペでコマンドプロンプトに張り付けるだけなので簡単にできます。

Image6_20260627222301

Ollamaが動いている状態でVSCodeを開いてGitHUB Copilot Chatウインドウの[Auto]になっている所をクリックしてOllamaモデルを追加すればGitHUB Copilot ChatウインドウからOllamaが使えるようになります。

Image11
-----
※コマンドプロンプトから
> ollama launch vscode
を事項すれば、VSCodeへのモデル登録もやってくれるみたいです。
-----
残念ながらローカルLLMからではソリューションにアクセスできないようで、その点は不便です。
ディフォルトでアクティブドキュメントにはアクセスできますしアクセス対象の追加もできますが、フォルダごとまとめて指定…が出来ないみたいでチョット面倒です。
LLMがバックグラウンドで動くので、それなりのCPU/GPU(NPU)パワーがないと回答が遅いです (;^ω^)

勘違いのちょっとした間違いとか見つけるのが難しいバグを見つけるのが楽になります。
Image16

※VisualStudio2022 / VisualStudio2026も同じやり方でCopilot ChatウインドウからローカルLLMが使えるようになります。

| | コメント (0)

2026年6月28日 (日)

【チラシのうら 12日目】FORコマンドを修正してみた

行をまたいで実行できるようにFOR文を修正してみました。
ループ実行が出来るようになるとプログラムっぽくなりますね。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
Largest Internal = 110580(107.988KByte)
Largest PSRAM = 0(0)
READY.

---- utf8 でエンコードされたメッセージを送信しました: "10 PRINT \"-----\"" ----
10 PRINT "-----"
READY.

---- utf8 でエンコードされたメッセージを送信しました: "20 PRINT \"FOR\" : FOR i=1 TO 3 : PRINT \"I=\";" ----
20 PRINT "FOR" : FOR i=1 TO 3 : PRINT "I=";
READY.

---- utf8 でエンコードされたメッセージを送信しました: "30 PRINT I" ----
30 PRINT I
READY.

---- utf8 でエンコードされたメッセージを送信しました: "40 NEXT : PRINT \"END LOOP\"" ----
40 NEXT : PRINT "END LOOP"
READY.

---- utf8 でエンコードされたメッセージを送信しました: "50 PRINT \"-----\"" ----
50 PRINT "-----"
READY.

---- utf8 でエンコードされたメッセージを送信しました: "LIST" ----
LIST
10 PRINT "-----"
20 PRINT "FOR" : FOR i=1 TO 3 : PRINT "I=";
30 PRINT I
40 NEXT : PRINT "END LOOP"
50 PRINT "-----"
READY.

---- utf8 でエンコードされたメッセージを送信しました: "RUN" ----
RUN
-----
FOR
I=1
I=2
I=3
END LOOP
-----
READY.


ここまでの成果

  • 行をまたいでFOR文が実行が出来るようになった

| | コメント (0)

2026年6月27日 (土)

【チラシのうら 11日目】RUNコマンドを実装してみた

行番号付きのステートメントが保持できるようになったので順次実行できるようにしてみた。
FOR~NEXTは複数行にまたがる動作に対応していないので代入・演算・表示にしか対応していませんが人事実行だけでも動くと嬉しくなります。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
Largest Internal = 110580(107.988KByte)
Largest PSRAM = 0(0)
READY.

---- utf8 でエンコードされたメッセージを送信しました: "10 A=10" ----
10 A=10
READY.

---- utf8 でエンコードされたメッセージを送信しました: "20 PRINT A" ----
20 PRINT A
READY.

---- utf8 でエンコードされたメッセージを送信しました: "30 A = A + 5" ----
30 A = A + 5
READY.

---- utf8 でエンコードされたメッセージを送信しました: "40 PRINT \"A=\";A" ----
40 PRINT "A=";A
READY.

---- utf8 でエンコードされたメッセージを送信しました: "LIST" ----
LIST
10 A=10
20 PRINT A
30 A = A + 5
40 PRINT "A=";A
READY.

---- utf8 でエンコードされたメッセージを送信しました: "run" ----
run
10
A=15
READY.


ここまでの成果

  • プログラムの順次実行が出来るようになった

| | コメント (0)

2026年6月26日 (金)

CardKB2用のキーボードボディを作ってみた

なにげなくスイッチサイエンス商品一覧をみてみたら
CardKBが売り切れでCardKB2が新バージョンとして販売されていました。

Image_20260624064701

キー配置が変わっている … (;´Д`)
※キーストロークも変わっていてキーが分厚く(?)なってます。

BLE HIDに対応と言うことでPCに繋いで利用できる…素敵なミニキーボード (^^♪
と思って一個買ってみました。
はい、英字配列ですね、Windowsだと日本語キーボードとの併用は出来ないんですね。
※何かちょっと面倒そうななウニョウニョ設定をすれば併用できるみたいですが、そこまでして使おうとも思わなかった。

カードむき出しなのもアレなので、ミニ・キーボードっぽい外見にするケースをCardKB2用に修正してみました。
Inage1

CADで設計、カードの外形寸法は変わっていないので割とサックっとできました。
積層跡を消すペーパー掛けとかサフ塗とか艶出しとか面倒なので塗装は簡単に済ませて…何かつや消しな…マットな仕上がりになりました。
手触りが若干ザラザラしてますが、まぁ良いっか。
M5Z-80 BASICが実現したら筐体を作り直す事になりますしね。
キートップだけは作るのがチョー面倒なので使い回す予定です。
完成するのか M5Z-80 BASIC … (;^ω^)
Image2_20260624065101
※キースイッチが分厚くなっている関係で、CardKB用より1.3mm厚くなってます。

| | コメント (0)

2026年6月25日 (木)

【チラシのうら 10日目】行番号を付けてみた

プログラムが組めるように行番号付きのステートメントを保存できるようにしてみました。
保存リストの確認のために LIST を合わせて実装
取り合えずの確認用なので LISTでの表示範囲の指定は省略
ついでに NEW も追加しました。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
Largest Internal = 110580(107.988KByte)
Largest PSRAM = 0(0)
READY.

---- utf8 でエンコードされたメッセージを送信しました: "10 A=10" ----
10 A=10
READY.

---- utf8 でエンコードされたメッセージを送信しました: "20 PRITN A" ----
20 PRITN A
READY.

---- utf8 でエンコードされたメッセージを送信しました: "30 A=A+10" ----
30 A=A+10
READY.

---- utf8 でエンコードされたメッセージを送信しました: "40 PRINT 123" ----
40 PRINT 123
READY.

---- utf8 でエンコードされたメッセージを送信しました: "LIST" ----
LIST
10 A=10
20 PRITN A
30 A=A+10
40 PRINT 123
READY.

---- utf8 でエンコードされたメッセージを送信しました: "20 PRINT \"HELLO WPRLD A=\";A" ----
20 PRINT "HELLO WPRLD A=";A
READY.

---- utf8 でエンコードされたメッセージを送信しました: "LIST" ----
LIST
10 A=10
20 PRINT "HELLO WPRLD A=";A
30 A=A+10
40 PRINT 123
READY.

---- utf8 でエンコードされたメッセージを送信しました: "NEW" ----
NEW
READY.

---- utf8 でエンコードされたメッセージを送信しました: "LIST" ----
LIST
READY.


ここまでの成果

  • 行番号を付けたプログラムリストを保持できるようになった
  • NEWコマンドを追加してみた。

 

| | コメント (0)

2026年6月24日 (水)

【チラシのうら 9日目】FOR文に機能漏れがあったので追加してみた

FOR~NEXTで終了判定をNEXT側で行う場合はNEXTの次の命令に実行が移ればよいのですが
FOR文を評価した段階でループ条件を満たしていなかった場合の処理が抜けてました。
FOR I=10 TO 5 見たいな一度もループしないケースですね。
この場合、FORに対応するNEXTを探して、NEXTの次の命令に実行を移さなければなりません。
NEXTを探す処理を入れ忘れていたので追加してみました。

メモリー管理を見直したらFOR文自体が動かなくなり…(;^ω^)
デバックモードを見直したらDEBUGモードがOFFに出来なくなり…(;^ω^)
本題以外の所で無駄に時間がかかってしまった。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
Largest Internal = 110580(107.988KByte)
Largest PSRAM = 0(0)
READY.

 

---- utf8 でエンコードされたメッセージを送信しました: "print \"ABC\" : for i=10 to 3 : print i : NEXT : print \"DEF\"" ----
print "ABC" : for i=10 to 3 : print i : NEXT : print "DEF"
ABC
DEF
READY.

 

---- utf8 でエンコードされたメッセージを送信しました: "print \"ABC\" : for i=1 to 3 : print i : NEXT : print \"DEF\"" ----
print "ABC" : for i=1 to 3 : print i : NEXT : print "DEF"
ABC
1
2
3
DEF
READY.


ここまでの成果

  • 一度もループしないFOR文処理を実装した

| | コメント (0)

2026年6月23日 (火)

「スーパーの裏でヤニ吸うふたり」の為にABEMAプレミアムに入るか悩む

「スーパーの裏でヤニ吸うふたり」良いですね。
私は禁煙派なのでタバコ吸ってる人の気持ちも分かりますが、嫌煙派には受け入れがたいかも (;^ω^)
※禁煙派なので、マナーのなってない喫煙者に対する反感は嫌煙派より強いかも。

ABEMAの先行放映で嵌りました。
一気見する為にABEMAプレミアムに入るか悩みます。

良いですよね田山(山田)さん。
スタイルが何と言うかアニメ・マンガ的な良いスタイルではないけど現実的で妙に艶めかしくてエロい。
声優さんも、田山さんと山田さんの声を出せるの凄いです。

原作コミックはAmazonで全巻購入しました。
9784757580947

一気に全巻揃えたのは久しぶり…でもなか… (*´з`)

このアニメは海外では流行らない…というか輸出は無理なんじゃないかと思う。
・喫煙シーン - 海外では大体NG
・若い女性が夜にスーパーの裏の薄暗い喫煙所に一人でいる - 治安が終わってる国ではありえないシチュエーション
で、日本以外ではありえないストーリですね。
※日本でもありえないストーリーな気がします。

| | コメント (0)

【チラシのうら 8日目】FOR~NEXT文を実装してみる

行番号を入れてソースコードを保存する仕組みを作ってないのでマルチステートメントで
FOR I=1 to 2:PRINT I:NEXT
とかの場合を対象にします。
基本的には同じことなはずなので…
NEXTの動きと制限はどうするの?は悩ましいのでポケコンのBASICの制限を参考にします。
が…
1) FOR~NEXTループ内に外から飛び込むことはできません。
2) FOR~NEXTループから外に飛び出さした場合、そのループは終了したことになりません。
3) FOR~NEXTループ内ではCLEAR,ERACE,DIM命令は使用できません。

FOR命令を実行スタックに積んでいる間はFOR~NEXTループ内って判断で良さそうか?
2)の制限はBREAK文がないと辛くないか? M5Z-80 BASICにはBREAK文を導入しよう。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

---- utf8 でエンコードされたメッセージを送信しました: "PRINT \"123\" : FOR I=1+2 to 4+10 step 1+2 : print i : next i : print \"456\"" ----
PRINT "123" : FOR I=1+2 to 4+10 step 1+2 : print i : next i : print "456"
123
3
6
9
12
456
READY.


付けようと思ったBREAK文がまだですが…後回しかな。

ここまでの成果

  • FOR文を実装してみた。

| | コメント (0)

2026年6月22日 (月)

【チラシのうら 7日目】LET文を実装してみる

実際には省略するので意味はないのですが、一応、実装してみました。
行番号を入れる前振りですね。
思い付きで初めて勢いで書いているので既にコードがグチャグチャです (;^ω^)
焼け石に水感はありますが、ちょっと整理もかねて手を入れてみました。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

---- utf8 でエンコードされたメッセージを送信しました: "LET A = 1+2*3/(4+5)" ----
LET A = 1+2*3/(4+5)
READY.

---- utf8 でエンコードされたメッセージを送信しました: "print A" ----
print A
1.66667
READY.

---- utf8 でエンコードされたメッセージを送信しました: "B=2+3*4/(5-6)" ----
B=2+3*4/(5-6)
READY.

---- utf8 でエンコードされたメッセージを送信しました: "print B" ----
print B
-10
READY.


このペースで行って、どうだろう?「100日目に完成するBASICインタプリタ」とかになるのかな?

ここまでの成果

  • LET文を実装
  • コマンド実行モジュールのコードをチョット整理

| | コメント (0)

2026年6月21日 (日)

【チラシのうら 6日目】マルチステートメントを使えるようにしてみる

BASICと言えば:で区切って1行にみっちりステートメントをぶっ込むのがお作法ですから実行単位を:で区切れるようにします。
実のところ4日目の段階でマルチステートメントが使えるようになっていたのですが…
FOR I=1 TO 3:PRINT I:NEXT
と言う例文を思いついてしまいまして… (;゚Д゚)

コレを実現するにはステートメント毎に分解してスタックに積むとかしておかないと無理じゃね?
と思い至りました。
序に仮の行番号が必用じゃね?と思い、ポケコンのマニュアルを参照してみると、行番号0は使用不可になっています。
あ~、コレ、行番号0を仮行番号(ダイレクト実行時の行番号)に使っているに違いない…と判断しまして…
取り合えずトークン分割時にステートメント毎に分割してリストに入れるように修正してみました。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

---- utf8 でエンコードされたメッセージを送信しました: "A=1:B=2:C=A+B*3/(4+5):PRINT \"C=\";C" ----
A=1:B=2:C=A+B*3/(4+5):PRINT "C=";C
C=1.66667
READY.


見た目は地味と言うか、目に見える違いがないのでアレですが、進んではいます。


ここまでの成果

  • マルチステートメントが使えるようになった

| | コメント (0)

2026年6月20日 (土)

【チラシのうら 5日目】比較・論理演算を使えるようにしてみる

計算だけでは条件判定(IF文とか)が作れないので比較・論理演算もきるように拡張してみました。
<、<=、>、>=、<>、= の比較演算子と
AND、OR、XOR、NOT の論理演算子です。

逆ポーランド記法の評価対象にコレラを含め、評価順序を設定します。
評価結果はINT型で TRUE = 1、FALSE = 0  です。
一般的(?) なBASICの判定と異なる気がしますが、Javaのtrue/falseの定義値を参考にしました。

AND、OR、XOR、NOT は整数型のビット演算としても機能するようにしました。
5 AND 1 = 1
2 OR 4 = 6
になる感じです。
バグの元…な気がしなくなくもないですが…
そこはまぁ、気を付けてもらうって事で… (;^ω^)


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

---- utf8 でエンコードされたメッセージを送信しました: "PRINT 5<>3" ----
PRINT 5<>3
1
READY.

---- utf8 でエンコードされたメッセージを送信しました: "PRINT 5<>3 AND 7<3" ----
PRINT 5<>3 AND 7<3
0
READY.

---- utf8 でエンコードされたメッセージを送信しました: "PRINT 7 AND 3" ----
PRINT 7 AND 3
3
READY.

---- utf8 でエンコードされたメッセージを送信しました: "PRINT 3 OR 6" ----
PRINT 3 OR 6
7
READY.

---- utf8 でエンコードされたメッセージを送信しました: "PRINT 7 XOR 3" ----
PRINT 7 XOR 3
4
READY.



IF文などでのTRUE/FALSE判定は TRUE≠0 FALSE=0 になります。
論理判定とビット演算を同じ演算子で処理する都合なので仕方ないかと

ここまでの成果

  • 比較演算子が使えるようになった
  • 論理演算、ビット演算ができるようになった

| | コメント (0)

2026年6月19日 (金)

【チラシのうら 4日目】PRINT文で計算結果を表示してみる

いちいち変数に代入しないと計算結果が確認できないのは面倒なので、PRINT文を修正して直接計算結果を表示できるようにします。
PRINT 1+2 とかですね。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

---- utf8 でエンコードされたメッセージを送信しました: "print 1+2*3/(4+5)" ----
PRINT 1+2*3/(4+5)
1.66667
READY.

---- utf8 でエンコードされたメッセージを送信しました: "print \"A=\";1+2*3/(4+5)" ----
PRINT "A=";1+2*3/(4+5)
A=1.66667
READY.

---- utf8 でエンコードされたメッセージを送信しました: "B=123" ----
B=123
READY.

---- utf8 でエンコードされたメッセージを送信しました: "print \"B=\";B" ----
PRINT "B=";B
B=123
READY.

---- utf8 でエンコードされたメッセージを送信しました: "print \"123\",\"ABC\"" ----
print "123","ABC"
123 ABC
READY.


ここまでの成果

  • PRINT文で計算が出来るようになった
  • PRINT文で複数のトークンを連結処理できるようになった

| | コメント (0)

2026年6月18日 (木)

【チラシのうら 3日目】計算してみる

計算できるようにします。
数式計算機のコードを参考に、変数と型変換を組み込みました。
トークンを逆ポーランド記法用のスタックに積む際に変数値を同時にスタックに積んでいるので参照代入式(CやJavaにあるa++とか--bとか)が出てくると詰みます。
BASICに参照代入式はないので問題ない筈です。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

---- utf8 でエンコードされたメッセージを送信しました: "A=1/2*3/(4+5)" ----
A=1/2*3/(4+5)
READY.

---- utf8 でエンコードされたメッセージを送信しました: "PRINT A" ----
PRINT A
0.166667
READY.

---- utf8 でエンコードされたメッセージを送信しました: "B=123" ----
B=123
READY.

---- utf8 でエンコードされたメッセージを送信しました: "C=A+B" ----
C=A+B
READY.

---- utf8 でエンコードされたメッセージを送信しました: "PRINT C" ----
PRINT C
123.167
READY.


エラーチェックとかガバガバなので
A=1--3 は [A] [=] [1] [-] [-3]で評価できますが
A=1---3 の時はどうなるの?

--- TokenVec dump ---
[2] TK_NUMBER '1' INT = 1
[3] TK_MINUS '-' INT = 0
[4] TK_UNARYMINUS '-' INT = 0
[5] TK_UNARYMINUS '-' INT = 0
[6] TK_NUMBER '3' INT = 3

で A = 1 - (-(-3)) ⇒ A = 1 - 3 になりました。

良いのかコレ?
と思わなくもないのですが、ポケコンで実行しても同じ結果になるので ヨシ‼

Image1_20260618065901

ここまでの成果

  • 計算が出来るようになった

| | コメント (0)

2026年6月17日 (水)

【チラシのうら 2日目】まずは…変数?

TinyBASICだと変数はA~Zまでの26しかないのですが、これは物凄い制限なので、変数名は23文字(C言語だと末尾にnullが付くので使用でき長さが領域より1文字短い)で256個まで使用可能としましょう。

変数の種類は
% : 整数(int)
! : 単精度実数(float)
# : 倍精度実数(double)
$ : 文字列
省略時は 単精度整数(float)とする。

文字列領域に4KByteを割り当て、足りなくなったらガベージコレクションを行う予定です。

まず、入力した行をトークンに分解する必要があります。
トークン分割と変数管理を作って単純な代入文が実行できるようにします。
代入文の実行結果を確認出来ないと意味がないので、MEMDUMP命令とPRINT命令も作成します。
PRINT命令はPRINTの後に続く定数または変数を表示する機能しかない簡易版です。

参考書は

スクリプトエンジン プログラミング
いまどきのプログラム言語の作り方
WEB+DB PRESS Vol.125
Interface 2022年 7月号

Image_20260617142001

妄想に成りつつあっただけああって発行年が古いです。

入出力はシリアルモニターを使用して行います。



------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

---- utf8 でエンコードされたメッセージを送信しました: "A=123" ----
A=123
-- Dump Tokens
tokenCount=4
00 : TK_IDENT [A]
01 : TK_EQUAL [=]
02 : TK_NUMBER [123]
03 : TK_EOL []

--- Search valueType=FLOAT, varName=A, len(varName)=1, searchVarName=A
--- alloc ValueData
valueDataCount=0 , valueType=1 , varName=A
READY.

---- utf8 でエンコードされたメッセージを送信しました: "memdump" ----
memdump
CmdExec: cmdId=4

--- VALUE DUMP : valueDataCount=1
varName=A valueType=FLOAT value=123.00
READY.

---- utf8 でエンコードされたメッセージを送信しました: "print A" ----
print A
-- Dump Tokens
tokenCount=3
00 : TK_IDENT [PRINT]
01 : TK_IDENT [A]
02 : TK_EOL []

CmdExec: cmdId=2
--- Search valueType=FLOAT, varName=A, len(varName)=1, searchVarName=A
valueType=1 , varName=A
123
READY.


デバック表示で色々出てますが、デバック表示なしだと、コレが出来るようになっただけの段階です。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

A=123
READY.

print A
123
READY.


ここまでの成果

  • トークン分割が出来た
  • 変数が扱えるようになった
  • 変数への代入が出来るようになった

※現在のPRINT文はデバック用なのでノーカウント

| | コメント (0)

【チラシのうら 1日目】思い付きでBASICインタプリタを作り始めました。

【チラシのうら 1日目】完成するか分からないので、チラシの裏に書きなぐった日記です。
レトロPCって何か不思議な魅力がありますよね?
Image_20260617111001


見ると欲しくなるのですが「何処に置くの?」「何に使うの?」と現実に立ち返ってしまって購入にいたりません。
では、エミュレータ…と言うのも違うんですよね。
エミュも結局「何に使うの?」と言う話で、使い道がないんですよね。
結局のところノスタルジックなBASICインタプリタで「あの頃」の雰囲気を味わいだけなのではないかと。

MZ-80 miniとか魅力的ですが、外側は飾りでCRTは写らないしキーボードも使ええないのでは何だかなぁ…ですよね。

折角だから小さいCRT画面と小さいキーボードでチマチマ動く何か懐かしい雰囲気のマイコンが欲しいゾ

と言う訳で、M5StackとCardKBでレトロPCっぽい雰囲気のパソコンが作れないかと・・・以前から構想はあったのですが、いい加減に妄想になってしまいそうなので勢いで作り始めてみました。
Image1_20260617111001

自作のBASICと言うと TinyBASICが真っ先に思い浮かびますが、変数が26個しか使えないのは厳しいのでN80-BASIC程度の機能を備えたBASICを目指してみます。

| | コメント (0)

2026年6月 2日 (火)

M5Stack ENVⅢ Unit AND ENVⅢ Hat を使ってみた。

電子工作(はんだ付け)なしでガジェット制作を楽しんでみる企画(?) Part2 … 2で合ってたと思う。
で、M5Stack 用の温湿度・気圧計 ENVⅢ Unit と M5StickC用の ENVⅢ Hatを使って温湿度と気圧を表示してみました。
目標としては FeatherWing と TWELITEで実現している天気予報表示の小型版を作ろう…でした。

Image3_20260602073101
コレは 320x480 TFTで割と表示できる情報量が多いので、コレを縮小して 今日の天気と温湿度・気圧表示くらいかな~と。
M5Stackで天気予報表示のスケッチをベースにENVⅢからのデータ読み込みをくっつけて
Image2_20260602073401
こんな感じですね。
温湿度もグラフ表示してみました。
M5Stack CORE2では問題なかったのですが、FLASHメモリー不足でM5Stack BASICにはどう頑張っても入りませんでした。
なので天気予報表示はカットして温湿度。気圧表示のみ。
Image1_20260602073501
M5StickCでは更にTFTのドット数が少ないので時刻表示もカットしています。
Image_20260602073701

このENVⅢ、温湿度センサーは普通(?)なのですが気圧センサーが曲者で気圧の取得に苦労しました。
AIに聞いたら「仕様書通りに記述しても正しい値は得られません」って、なにソレ!?仕様書の意味がないじゃないか!?
気圧補正値をレジスタから読み出して使うのですが、読み出した補正値が整数でも浮動小数点でもない、固定小数点って…
しかも浮動小数点に変換して仕様書通りに計算するとオーバーフロー起こすとか…どうしろと? (;´Д`)
と言った感じで紆余曲折ありましたが、何とか使えるように…と言うか、もっと楽に使う方法あったのですが、無駄に苦労して作成しました。

 

| | コメント (0)

« 2026年5月 | トップページ | 2026年7月 »