　　　　　　　　　　　　　　　　　　　　　　　　　　2025.8.17
　Raspberry Pi Pico用BASIC実行環境オープンプラットフォーム
　　　　　　　　「MachiKania type P」
　　　　　　　　　　　　　　　　　　　　　by KenKen & Katsumi

MachiKania（マチカニア）はBASICコンパイラを搭載したマイコン用
オープンプラットフォームです。
MachiKania type PではRaspberry Pi Pico (Pico 2, Pico W)と小型
液晶モジュールを搭載し、ポータブルなBASIC実行環境を実現してい
ます。
汎用I/OやSPI、I2Cといった外部機器の制御もBASICから簡単に行う
ことが可能です。

このドキュメントでは、ClockworkPi PicoCalc（以降 PicoCalcと
記載）用のMachiKaniaについて述べます。

搭載しているBASICコンパイラはKM-BASICです。KM-BASICは32bit
整数型のBASICです。
また、単精度浮動小数点演算もサポートしています。
構造化プログラミング、オブジェクト指向対応も行っています。
BASICプログラムはPC等で作成し、MMCまたはSDカード経由で転送する
ことや、USBケーブルと専用ソフトを用いて転送することが可能です。
また、USBキーボードを接続し、直接プログラムを編集して実行する
ことも可能です。

同梱される実行形式ファイル（uf2ファイル）は非商用利用に限り
無償で自由に利用することが可能です。
また、利用した作品を一般に公開することも可能です。その場合、
MachiKaniaシリーズを利用していることについてもWebサイトや
説明書等、いずれかの場所に記載してください。
なお、ご利用によって生じた被害や損害については責任を負いかねます。


PicoCalc 対応版のMachiKaniaの使用については、以下の点に注意し
てください。

＜対応する Pi Pico ボード＞

Raspberry Pi Pico, Raspberry Pi Pico 2, Raspberry Pi Pico W, 
Raspberry Pi Pico 2 W の４つに対応しています。配布アーカイブの
中から、それぞれのボードに対応したphyllosoma_kb.uf2ファイルを
インストールしてください。WiFi対応版では、WiFi接続を通じて、
インターネットに接続することも可能です。

uf2ファイルのインストールは、次の手順で行います。
　１．PicoCalcの電源を切る
　２．PicoCalcを裏返し、Raspberry Pi Picoボードの「BOOTSEL」
　　　ボタンを押しながら、USB micro Bポートを通じて、PCと接続する
　３．RPI-RP2もしくはRP2350ドライブが現れるので、phyllosoma_kb.uf2
　　　ファイルをドライブにドラッグ＆ドロップする
　４．USB micro Bプラグを抜き、PicoCalcの電源を入れる

＜MACHIKAP.INI＞

MachiKaniaをPicoCalcで正常動作させる為に、同梱のMACHIKAP.INIを、
必ずMMC/SDカードのルートに配置してください。


＜キーボード＞

キーボードは、PicoCalcに内蔵のキーボードに対応しています。USB
キーボードを接続しても認識しないので、注意してください。

USBキーボードとPicoCalcキーボードでの動作の違いは、以下の通りで
す。

・「Shift + Right」「Shift + Left」が使えないので、代わりに
　「Alt + Right」「Alt + Left」を使う。
・「Page Up」「Page Down」ボタンが無いので、代わりに「Alt + Up」
　「Alt + Down」を使う。
・「Shift」キーなしで「Home」「End」を使いたい場合は、「Alt + Tab」
　「Alt + Del」を押す。


＜ボタン＞

MachiKaniaは、上下左右とFire/Startの、６つのボタンを使って操作
します。PicoCalcにはこれらのボタンが無いので、キーボードでエミュ
レートしています。デフォルトでは、上下左右キーと、Fireがスペース
キー、Startが改行キーに対応しています。これらの対応付けを変更す
る際は、MACHIKAP.INIを編集してください。「EMULATEBUTTONUP=」など
の設定がそれです。右は仮想キーコードを10進数で表記します。特定の
キーの仮想キーコードを知りたいときは、次のBASICプログラムを実行
して、キーを押してください。

　DO:PRINT INKEY():LOOP


＜I2Cの利用＞

キーボードの認識に、I2C機能を用いています（GP6, GP7; I2C1）。もし、
別の用途でI2Cを使いたい場合は、I2C1ではなく、I2C0を用いてください
（GP0/GP1など）。設定は、MACHIKAP.INIの「I2CSDA=」と「I2CSCL=」で
行います。この設定にI2C1を用いるポート(GP2/GP3など)を使うと、キー
ボードを認識しなくなるので、注意が必要です。


＜BASICプログラムの途中停止＞

BASICプログラムを実行途中で停止したい場合、Ctrl+Alt+Delキーを同時
に押してください。プログラムが途中停止します。ただし、PRINT命令な
どを一切使わないループの中などでは、停止しない場合もあります。


＜machikania-pc.zipファイルコンテンツ＞

[documents]ディレクトリ
　ドキュメント類を格納
　- help.txt
　- help-e.txt
　　KM-BASICのリファレンスマニュアル

　- class.txt
　- class-e.txt
　　KM-BASICでオブジェクト指向化プログラミングのリファレンスマニュアル

　- embed.txt
　- embed-e.txt
　　ファイル埋め込み実行ファイル作成方法について

　- pcconnect.txt
　- pcconnect-e.txt
　　PCからMachiKaniaにファイルを転送するための方法について

　- shematic.png
　　MachiKania type P回路図

　- wifi.txt
　- wifi-e.txt
　　Raspberry Pi Pico Wを使ってWiFi接続を行うときのリファレンスマニュアル 

[pico]ディレクトリ
　Raspberry Pi Pico で使うバイナリーを格納
　-phyllosoma_kb.uf2
　　MachiKania type P BASICシステム本体（キーボード接続対応版）
　　PCとRaspberry Pi PicoをUSB接続し書き込む
　　内蔵エディタとキーボードでBASICプログラムを直接編集、実行可能

[pico_w]ディレクトリ
　Raspberry Pi Pico W で使うバイナリーを格納
　-phyllosoma_kb.uf2
　　MachiKania type P BASICシステム本体（キーボード接続対応版）
　　PCとRaspberry Pi PicoをUSB接続し書き込む
　　内蔵エディタとキーボードでBASICプログラムを直接編集、実行可能
　　WiFi接続が可能

[pico2]ディレクトリ
　Raspberry Pi Pico 2 で使うバイナリーを格納
　-phyllosoma_kb.uf2
　　MachiKania type P BASICシステム本体（キーボード接続対応版）
　　PCとRaspberry Pi PicoをUSB接続し書き込む
　　内蔵エディタとキーボードでBASICプログラムを直接編集、実行可能

[pico2_w]ディレクトリ
　Raspberry Pi Pico 2 W で使うバイナリーを格納
　-phyllosoma_kb.uf2
　　MachiKania type P BASICシステム本体（キーボード接続対応版）
　　PCとRaspberry Pi PicoをUSB接続し書き込む
　　内蔵エディタとキーボードでBASICプログラムを直接編集、実行可能
　　WiFi接続が可能

readme.txt
　このファイル

readmeLib.txt
　LIB ディレクトリー内のライブラリー説明書

＜ここより下のファイルおよびディレクトリ全てをMMC/SDカードのルートディレクトリにコピーしてください＞

MACHIKAP.INI
　MachiKania type Pの初期設定ファイル

[LIB]ディレクトリ
　BASICプログラムから簡単に利用可能なクラスライブラリ
　MMC/SDカードのルートにLIBディレクトリごとコピーして利用

[samples]ディレクトリ
　BASICサンプルプログラム。これらのファイルをSDカードのルートディレクトリにコピーする
　（または任意のサブディレクトリを作成してコピー）

　3DWAVE.BAS
　　波紋の3Dグラフィック

　BLOCK.BAS
　　初代MachiKania向けに作成したブロック崩しゲーム

　COSMOS.BMP（PHOTO.BASで使用）

　FILEMAN.BAS
　　MachiKania type P/PU用ファイルマネージャ

　HDAEMON.BAS
　　HTTPDクラスを使って web サーバー構築を構築するサンプルプログラム
　　PCやスマートフォンから接続して、Pico W の LED をオン・オフできる

　INVADE.BAS
　　MachiKania type Z/M/P/PU向けに作成したインベーダーゲーム

　LCHIKA.BAS
　　LEDを点滅させるサンプルプログラム

　MANDELBR.BAS
　　グラフィックでマンデルブローを出力するプログラム

　MAZE3D.BAS
　　立体迷路脱出ゲーム

　MOZART.BAS
　　WAVファイル再生サンプルプログラム

　MOZART.WAV
　　MOZART.BASで使用

　MUSIC.BAS
　　MUSIC命令使用のサンプルプログラム

　NIHONGO.BAS
　　ライブラリーのCKNJ16クラスを利用して日本語を表示するプログラム

　PCG.BAS
　　PCGを利用したサンプルプログラム

　PEGSOL-G.BAS
　　ペグソリテアゲームプログラム

　PHOTO.BAS
　　BMPファイルを液晶表示するプログラム

　RAYTRACE.BAS
　　レイトレーシングプログラム

　SOUND.BAS
　　SOUND命令使用のサンプルプログラム

　STARTREK.BAS
　　スタートレックゲームプログラム

　TIME-INT.BAS
　　タイマー割り込みのサンプルプログラム

　WEATHER.BAS
　　WGETクラスとJSONクラスを使った、ネット上のwebページから情報を得るサンプルプログラム
　　今日の日付と天気予報を表示する
　
　WFRAME.BAS
　　ワイヤーフレームグラフィックプログラム


------------------------------------------------------------------------
MachiKania type P BASICシステム改版履歴

Phyllosoma 1.00/KM-1500（2022.8.27）
　・最初の公開バージョン

Phyllosoma 1.10/KM-1501（2022.10.1）
　・PC connect機能を追加
　・NOT#()関数を追加
　・クラス中で別のクラスを使うとコンパイルできない不具合を修正
　・クラスのスタティック関数呼び出しの不具合を修正
　・オブジェクトのフィールドに、文字列・配列を割り当てることを許可
　・一定時間後にWAVEファイルの再生が止まる不具合を修正
　・割り込み中でのWAIT・DELAYMS・DELAYUSステートメントの使用を許可
　・MUSICステートメントが一部の環境でエラーで停止する不具合を修正
　・ファイル選択画面の表示改善
　・WS2812B・STRDIM・STRD2・MAの４つのクラスを、ライブラリーに追加

Phyllosoma 1.20/KM-1502（2023.1.28）
　・USBキーボード及びエディターをサポート
　・INKEY()・READKEY()・INPUT$()の3つの関数と、INKEY割り込み機能を整備
　・クラスファイルコンパイル時に一部の環境で生じる不具合を修正
　・ALIGN4ステートメント・DATAADDRESS()関数・FUNCADDRESS()関数を追加
　・タイマー割り込みのタイミングが少しずれていたのを修正
　・SYSTEM()に、メモリーアロケーション関連の機能を追加
　・文字列で「\r」「\t」のエスケープシークエンスが使用可能に
　・OPTION CLASSCODEに対応
　・BASICプログラム実行中でのカードの抜き差しが可能に
　・ファイル選択画面でC言語で作成したHEXファイルのロードが可能に
　・CRDINI・CLDHEX・REGEXP・STRINGの４つのクラスを、ライブラリーに追加

Phyllosoma 1.30/KM-1503 (2023.9.30)
　・Raspberry Pi Pico Wに対応。
　・サンプルプログラムに、WEATHER.BAS(webページから天気予報を得る)と
　HDEAMON.BAS(web サーバー構築を構築)を追加。
　・クラスライブラリーに、HTTPD(HTTPサーバーを構築)、IR_RX(赤外線リモコン
　受信モジュールを使用)、IR_TX(赤外線LEDでリモコン信号を送信)、JSON(JSON文字列
　を解析)、WGET(指定のURLから情報を取得)を追加。
　・Raspberry Pi Pico W を用いた WiFi 接続に対応。次の命令・関数を追加： 
　　DNS$(), IFCONFIG$(), NTP, TCPACCEPT(), TCPCLIENT, TCPCLOSE, TCPRECEIVE, 
　　TCPSEND, TCPSERVER, TCPSTATUS, TLSCLIENT, WIFIERR(), WIFIERR$()
　・GCOLOR()関数の不具合を修正
　・一部USBキーボードでのキー入力不具合に対応
　・EOFの時、FGETC()関数が-1を返すようにした
　・embed用にXIAO RP2040, RP2040-Zero, and Tiny-2040に対応
　・SPIの対応ポートをINIファイルで指定出来るようにした
　・SERIALステートメントの第3引数を省略した時の不具合を修正
　・例外をトラップして画面表示するようにした
　・CORETIMERが電源投入後およそ2000秒後から不具合を起こす事を修正
　・ILI9488に対応
　・RTC(Real Time Clock)をサポート。次の命令・関数を追加： 
　　GETTIME$(), SETTIME. STRFTIME$()
　・ファイル保存時の日時設定をサポート
　・NTPサーバーによるRTCのセットをサポート
　・SYSTEM 201 呼び出しにより、ボード付属のLEDのオン・オフを出来るようにした
　・メモリーアロケーションの不具合を修正
　・FREMOVE/SETDIR等のファイル関連命令を使用時の、ガベージコレクション不具合を修正
　・WAVEプレーヤーの安定性を改善
　・クラスのスタティックメソッド呼び出し不具合を修正
　・FFINGD$(), FINFO(), FINFO$()の3つの関数を追加。ファイル一覧の作成が可能に
　・REM 文に「"」を含む際のコンパイル時の不具合を修正

Phyllosoma 1.31/KM-1504 (2023.10.28)
　・embed用のBASICプログラムで、ファイルの読み取りに対応。
　・embed用に組み込むことができるファイル数が、合計16個に増加。
　・浮動小数点の表示や文字列の扱いの際、間違った値になる不具合を修正。

Phyllosoma 1.40/KM-1505 (2024.2.17)
　・サンプルプログラムに、FILEMAN.BAS(ファイルマネージャー)を追加。
　・クラスライブラリーに、BUTTON(ボタン操作), GEN3O(源ノ角ゴシック表示), 
　　QRCODE(QRCODE表示), TSC2046(タッチパネル操作)を追加。
　・液晶を使わない場合に、SPI命令でspi1を使う事を可能にした。
　・PUTBMP命令で、横幅が長い画像を表示する際の不具合を修正。
　・ファイル一覧表示の際、ファイル更新日時の表示を可能にした。
　・ファイル一覧表示の際の、ファイル名・ファイル更新日時による表示順に対応。
　・ILI9488液晶で縦置の際の表示不具合を修正。
　・FRENAME, MKDIR命令及びFRENAME(), MKDIR()関数の追加。
　・補助コード(auxcode)を追加できる機能を実装。

Phyllosoma 1.41/KM-1506 (2024.10.06)
　・Raspberry Pi Pico 2に対応。
　・WEATHER.BASサンプルプログラムを更新

Phyllosoma 1.50/KM-1507 (2024.12.28)
　・サンプルプログラム(BLOCK.BAS, PHOTO.BAS)を修正。
　・クラスライブラリーのWS2812BとQRCODEを、Pico 2に対応するよう修正。
　・テキストエディターのファイル選択機能のバグ修正。
　・Pico/Pico2もしくは、Type P/PUごとに、別々のクラスファイルを扱えるように変更。
　・SYSTEM(4)が正しいCPUの実行速度を返すように修正。
　・SYSTEM(6)を追加し、BASICのオブジェクトRAM領域のサイズを得られるようにした。
　・ILI9488を使っている時、今まで指定できなかった幅をWIDTHステートメントで指定できるようにした。
　・WAITステートメントを実行している時に、キーボードのPAUSE/BREAKキーを押すことで実行停止できるようにした。

Phyllosoma 1.51/KM-1508 (2025.2.22)
　・SPI・I2C・UART用のピン配置を、MACHIKAP.INIで自由に設定できるように変更。
　・ピン配置をMACHIKAP.INIで設定できる事に伴い、XIAO embed版の配布を終了。
　・クラスライブラリーのREGEXPで、連続使用時にメモリーエラーが出る不具合を修正。

Phyllosoma 1.52/KM-1509 (2025.4.12)
　・「Break」キーだけでなく、「Ctrl + Alt + Del」キーでプログラムの実行を停止できるようにした。
　・SYSTEM(40), SYSTEM(41), SYSTEM(42), SYSTEM(43)により、キーボードの状態を取得できるようにした。
　・SYSTEM 50, SYSTEM 51により、CPUのクロック速度と電圧を変更できるようにした。
　・STARTボタンを押しながら起動することにより、起動時のMACHIKAP.BAS自動実行をスキップすることが可能に。
　・クラスライブラリーにCPUCLOCKを追加。使用可能なCPUクロック周波数を調べることが可能に。
　・Raspberry Pi Pico 2 Wに対応。
　・Raspberry Pi Pico 2 使用時のLCD液晶転送速度を改善。
　・サンプルプログラム(MAZE3D.BAS, STARTREK.BAS)を修正。
　・サンプルプログラム(POLYGON.BAS)を追加。

Phyllosoma 1.60/KM-1510 (2025.8.17)
　・Waveshare ResTouch LCD 3.5に対応
　・ClockworkPi PicoCalcに対応
　・LCD用のコードエディターで、予約語・文字列・コメントの色付けに対応
　・ボタン操作を、キーボードでもエミュレートできるようにした
　・IPSタイプのLCDに対応
　・LCD用のファイル選択画面およびエディタで画面の向きを1回転できるように変更
　・エディターからのHEXファイル実行に対応
　・ILI9488液晶使用時の転送速度を改善
　・サンプルプログラム、MANDELBR.BASを、テキストベースの物からグラフィックに変更
　・サンプルプログラム、MOZART.BASを追加
　・サンプルプログラム、FILEMAN.BASを修正。Y/Nの確認に小文字のy/nも受け付けるようにした
　・クラスライブラリーのWS2812B.BASを更新。Pico 2での動作を改善
　・TSC2046クラスをResTouchで使用できるように修正
　・SYSTEM関数/ステートメントで、LCD及びMMC用のSPI通信速度を、取得したり変更したりできるようにした
　・OUTステートメント実行時に、短時間予期しない出力変化が発生する不具合を解消
　・PLAYWAVEステートメントで対応できるWAVEファイルのサンプリング周波数を、15700-16000 Hzの任意のものに対応
　・SPI MISOで、指定したポートが使用できなかった不具合を解消
