1. 仕様およびシステム構成
1.1. はじめに

「豊四季タイニー BASIC for Arduino STM32」は、 Tetsuya Suzuki氏が開発・公開している「TOYOSHIKI Tiny BASIC for Arduino」をBlue Pillボード(STM32F103C8T6搭載)に移植・機能拡張を施した、Tiny BASICインタープリタ です。
昔風の「電源入れて即、BASIC動くパソコン」、
「安価で強力・自作・改造出来るパソコン」 を目指し、
安価な割に高性能のBluePillボード、開発環境にArduinoを採用しました。
(ただし、ボードがマイナー、Arduino STM32が分かりにくいですが.. ^^;)

配布パッケージに添付のファームウェアをボードに書き込んでの利用、
Arduino IDEでスケッチをコンパイル&書き込みでの利用が可能です。
- 主な拡張機能
-
-
プログラム編集・開発機能の強化
-
フルスクリーンエディット機能
(シリアル、NTSC、OLED、TFT画面) -
プログラム保存機能(内部メモリ、SDカード)
-
-
周辺機器のサポート
-
TV(NTSC)/OLED/TFTディスプレイ
-
PS/2キーボード(日本語キーボード、USキーボード)
-
MMC互換カード
-
単音出力
-
RTCバックアップ電池
-
-
入出力・制御機能
-
デジタル入出力、PWM出力、アナログ入力
-
I2Cバス通信
-
シリアル通信
-
ファイル入出力
-
-

- 開発環境
-
Arduino 1.8.5以降 + Arduino STM32パッケージ
- 必要ハードウェア
-
Blue Pillボード(STM32F103C8T6搭載)

本マニュアルでは、「豊四季タイニー BASIC for Arduino STM32」の仕様を中心に解説します。
別紙「コマンドリファレンス」では、BASICインタープリタで利用できる各コマンドについて解説いたします。
- 製作者について
-
製作者名:たま吉さん
注意:『「たま吉」さんの飼い主(下僕?)』の略です。
決して、自分に「さん」付けている訳ではありません。
単なる、猫の「たま吉」さん の飼い主です。
1.2. 関連情報
- 「豊四季タイニーBASIC(オリジナル版)」に関する情報
-
-
開発者公開ホームページ
電脳伝説Vintagechips 豊四季タイニーBASIC確定版
https://vintagechips.wordpress.com/2015/12/06/豊四季タイニーbasic確定版/ -
開発者公開リソース
TOYOSHIKI Tiny BASIC for Arduino
https://github.com/vintagechips/ttbasic_arduino/ -
開発者が執筆した関連書籍
「タイニーBASICをCで書く」
http://www.socym.co.jp/book/1020
-
- 「豊四季タイニーBASIC for Arduino STM32」に関する情報
-
-
公開サイト 豊四季タイニーBASIC for Arduino STM32
https://github.com/Tamakichi/ttbasic_arduino_stm32 -
Arduino STM32に関する情報
・Arduino STM32 公式HP(モージュール配布サイト)
rogerclarkmelbourne/Arduino_STM32
https://github.com/rogerclarkmelbourne/Arduino_STM32 -
Arduino STM32 公式フォーラム
http://www.stm32duino.com/ -
STM32duino wiki
http://wiki.stm32duino.com -
Blue Billボードに関する情報
http://wiki.stm32duino.com/index.php?title=STM32F103_boards
-
- その他の情報公開サイト
-
-
DEKOのあやしいお部屋 - STM32F103C8T6
http://ht-deko.com/arduino/stm32f103c8t6.html
-
1.3. 著作権・利用条件
「豊四季タイニーBASIC for Arduino STM32」の著作権は移植・機能拡張者の「たま吉さん」、オリジナル版開発者の「Tetsuya Suzuki氏」にあります。
本著作物の利用条件は、オリジナル版「豊四季タイニーBASIC」に従うものとします。
オリジナル版はGPL(General Public License)でライセンスされた著作物であり、「豊四季タイニーBASIC for Arduino STM32」もそれに従い、GPLライセンスされた著作物となります。
更に利用条件として以下を追加します。
-
不特定多数への再配布においてはバイナリーファイルのみの配布を禁止、必ずソースを添付すること
-
「豊四季タイニーBASIC for Arduino STM32」の明記、配布元のURLを明記する
-
営利目的のNAVER等のまとめサイト(まとめ者に利益分配のあるもの)へのいかなる引用の禁止
補足事項
オリジナル版において開発者Tetsuya Suzuki氏は次の利用条件を提示しています。
-
TOYOSHIKI Tiny BASIC for Arduino の記載内容
https://github.com/vintagechips/ttbasic_arduino
©2012 Tetsuya Suzuki GNU General Public License
-
豊四季タイニーbasicリファレンスを公開」の記載内容
https://vintagechips.wordpress.com/2012/06/14/
豊四季タイニーBASICがもたらすいかなる結果にも責任を負いません。
著作権者の同意なしに経済的な利益を得てはいけません。
この条件のもとで、利用、複写、改編、再配布を認めます。
1.4. システム構成
「豊四季タイニー BASIC for Arduino STM32」では、次の構成での利用が可能です。

赤い網掛け部分は利用においての最小限の構成です。
USB-シリアル経由ターミナルコンソール上でのプログラム入力が可能です。
周辺機器は必須ではありません。
表示デバイスのNTSC、OLED、TFT液晶は同時利用は出来ません。
1.4.1. バリエーション
「豊四季タイニー BASIC for Arduino STM32」では、次の組み合わせの利用環境が構築出来ます。

1.4.2. 個別構成

4種類の基本構成
(1)シリアルターミナルコンソール
(2)NTSC(TVモニター) + PS/2キーボード
(3)OLEDディスプレイ + PS/2キーボード
(4)TFTディスプレイ + PS/2キーボード
「豊四季タイニー BASIC for Arduino STM32」ではこの4タイプの構成で利用するために、次のコンパイル済ファームウェアを用意しています。
-
シリアルターミナルコンソール版 ファームウェア
-
NTSC(ビデオ出力)版 ファームウェア
-
OLED SH1106 SPI接続版 ファームウェア
-
OLED SH1106 I2C接続版 ファームウェア
-
OLED SSD1306/SSD1309 SPI接続版 ファームウェア
-
OLED SSD1306/SSD1309 I2C接続版 ファームウェア
-
TFT I ILI9341 SPI接続版 ファームウェア
1.4.3. 個別詳細
シリアル接続版
USBポート・シリアルポート接続のシリアルコンソール画面を使った最小限のプログラミング環境です。
-
- 特徴
-
-
標準装備のUSBポートにてパソコンに接続し、ターミナルソフト(TeraTerm等)を使って、
プログラム開発を行うことが出来ます。 -
ターミナル画面上では全角文字(シフトJIS)が利用出来ます。
-
シリアルコンソール画面は、USBシリアル接続の他、
ボード上のシリアルポートに随時切り替えて使うことも可能です。
起動時に選択することも出来ます(詳細は「起動時のコンソール画面の選択」を参照して下さい)。
-
コンソール画面は横文字数、縦文字数の変更が可能です。デフォルトは80桁・24行です。
-
スクリーン編集機能の利用が可能です(詳細は「編集操作キー」を参照して下さい)。
-
COLOR文による文字色指定、LOCATE文による表示位置指定等のスクリーン制御をサポートしています。
-
必要に応じて、SDカードリーダー、圧電スピーカー、内蔵RTC用バックアップ電池を追加利用出来ます。
-
NTSC版
NTSC対応モニターとPS/2キーボードを使う環境です。
- 特徴
-
-
NTSCビデオ出力画面をプログラム作成画面(コンソール画面)として利用します。
-
シリアルコンソール版と同等のスクリーン編集機能の利用が可能です。
-
画面の文字サイズの変更が可能です。
-
コマンドによるグラフィック描画をサポートします。
-
SDカードからビットマップ画像をロードして表示すること出来ます。
-
-
文字入力はPS/2キーボードを利用します。カタカナのローマ字入力をサポートします。
-
シリアルポートを補助入出力に利用出来ます。
-
NTSCビデオ画面に表示するテキスト文字列は、シリアルポート(デフォルトではUSBシリアルポート)にも出力されます。
-
シリアルポートからの入力は、PS/2キーボードと並行してキーボード入力として受付ます。
-
NTSCビデオ出力画面表示が行えない状況でも、シリアルポートからのコマンド入力を行うことが可能です。
-
シリアルポートを利用してパソコンからのBASICプログラムの取り込みや、パソコンへの転送も用意に行うことが出来ます。
-
-
「シリアルターミナルコンソール版」の機能を包含します。
CONSOLEコマンドにより、いつでもシリアルターミナルコンソールモードへ移行することが出来ます。NTSCビデオ画面の利用に戻ることが出来ます。
-
OLED版
OLEDモジュールを表示機として利用する環境です。PS/2キーボードを併用します。
- 特徴
-
-
OLED画面をプログラム作成画面(コンソール画面)として利用します。
-
シリアルコンソール版と同等のスクリーン編集機能の利用が可能です。
-
画面表示の向きの変更、画面の文字サイズの変更が可能です。
-
コマンドによるグラフィック描画をサポートします。
-
SDカードからビットマップ画像をロードして表示すること出来ます。
-
-
文字入力はPS/2キーボードを利用します。カタカナのローマ字入力をサポートします。
-
シリアルポートを補助入出力に利用出来ます。
-
OLED画面に表示するテキスト文字列は、シリアルポート(デフォルトではUSBシリアルポート)にも出力されます。
-
シリアルポートからの入力は、PS/2キーボードと並行してキーボード入力として受付ます。
-
OLED画面に表示が行えない状況でも、シリアルポートからのコマンド入力を行うことが可能です。
-
シリアルポートを利用してパソコンからのBASICプログラムの取り込みや、パソコンへの転送も用意に行うことが出来ます。
-
-
「シリアルターミナルコンソール版」の機能を包含します。
CONSOLEコマンドにより、いつでもシリアルターミナルコンソールモードへ移行することが出来ます。OLED画面の利用に戻ることが出来ます。
-
TFT版
TFTカラーグラフィック液晶とPS/2キーボードを使う環境です。
カラー表示をサポートします。
- 特徴
-
-
TFT画面をプログラム作成画面(コンソール画面)として利用します。
-
シリアルコンソール版と同等のスクリーン編集機能の利用が可能です。
-
画面表示の向きの変更、画面の文字サイズの変更が可能です。
-
コマンドによるグラフィック描画をサポートします。
-
SDカードからビットマップ画像をロードして表示すること出来ます。
-
-
文字入力はPS/2キーボードを利用します。カタカナのローマ字入力をサポートします。
-
シリアルポートを補助入出力に利用出来ます。
-
TFT画面に表示するテキスト文字列は、シリアルポート(デフォルトではUSBシリアルポート)にも出力されます。
-
シリアルポートからの入力は、PS/2キーボードと並行してキーボード入力として受付ます。
-
TFT画面に表示が行えない状況でも、シリアルポートからのコマンド入力を行うことが可能です。
-
シリアルポートを利用してパソコンからのBASICプログラムの取り込みや、パソコンへの転送も用意に行うことが出来ます。
-
-
「シリアルターミナルコンソール版」の機能を包含します。
CONSOLEコマンドにより、いつでもシリアルターミナルコンソールモードへ移行することが出来ます。TFT画面の利用に戻ることが出来ます。
-
1.5. ソフトウェア仕様
項目 | 概要 | |
---|---|---|
プログラミング環境 |
CUI(キャラクユーザーインタフェース) |
|
画 |
NTSCキャラクタ表示画面 |
37×27文字、28×13文字、28×13文字、24×13文字 |
NTSCグラフィック表示画面 |
224×216ドット、224×108ドット、112×108ドット |
|
ターミナルスクリーン画面 |
16×10文字 ~ 127文字×45文字の範囲で任意指定、全角対応(SJIS) |
|
OLEDキャラクタ表示画面 |
21×8文字、10×4文字、7×2文字(画面回転可能) |
|
OLEDグラフィック表示画面 |
128×64ドット(画面回転可能) |
|
TFTキャラクタ表示画面 |
53×30、26×15、17×10、13×7、10×6、8×5文字(画面回転可能) |
|
TFTグラフィック表示画面 |
320x240ドット(画面回転可能) |
|
B |
形式 |
整数型BASIC(符号付16ビット整数 -32768~32767) |
プログラム領域 |
4096バイト |
|
利用文字コード |
1バイトJISコード |
|
利用可能変数 |
変数名:208個 |
|
ユーザー開放 |
SRAM 1024バイト |
|
内部フラッシュメモリ |
250ワード(2バイト×250) |
1.6. ハードウエア仕様
項目 | 概要 |
---|---|
動作クロック |
72MHz |
時計機能 |
内部RTC利用(電池によるバックアップ可能) |
映像出力 |
モノラル(2色白黒)NTSCビデオ出力 |
キーボード I/F |
PS/2 5V 対応(5Vトレラント ピン利用) |
サウンド |
圧電スピーカーによる単音モノラル再生 |
USB I/F |
DFU利用ファームウェア書込み |
シリアル通信 |
1チャンネル(3線 TX、RX、GND):通信速度 ~921,600、データ長 8ビット、 |
I2Cインタフェース |
1チャンネル(マスター利用のみ) |
GPIO |
・デジタル入力 1ビット× 24ポート(最大) |
アナログ入力 |
9チャンネル(最大) 、分解能12ビット |
MMC互換カード |
FAT16 / FAT32 32Gバイトまで対応 |
OLEDディスプレイ |
対応モジュール SSD1306、SSD1309、SH1106コントローラ利用モジュール |
TFTディスプレイ |
対応モジュール ILI9341コントローラ利用グラフィック液晶モジュール |
1.7. 結線図
Blue Pillボードを使用した結線図です。
ブレッドボードを使った結線、ユニバーサル基板を使った実装の参考にして下さい。
1.7.1. シリアル接続版
最小構成です。
単音出力が不要の場合、圧電スピーカーは省略可能です。

圧電スピーカーの端子は極性がありません。
- オプション
-
-
RTC用バックアップ電池
-
Dカードモジュールも必要に応じて追加できます。
-
1.7.2. NTSC版

PS/2キーボード用コネクタは、PS/2コネクタまたはUSBコネクタのどちらかを好みで選択して下さい。
1.7.3. OLED版
OLEDディスプレイは128×64ドット、搭載コントローラSSD1306、SSD1309、SH1106、インタフェースはI2C、SPIに対応の製品に対応しています。
SPI接続は、I2C接続よりも表示が高速です。
また、SPI接続において、コントローラSH1106は、SSD1306、SSD1309よりも高速です(早いクロック数で転送)。
I2C接続タイプ

OLED端子 | BluePill端子 |
---|---|
SDA |
PB7(SDA1) |
SCL |
PB6(SCL1) |
GND |
GND |
VCC |
3.3V |
SPI接続タイプ

OLED端子 | BluePill端子 |
---|---|
CS |
PB11 |
DS |
PB12 |
RES |
R(NRST) |
SDA |
PB15(MOSI2) |
SCK |
PB13(SCK2) |
VCC |
3.3V |
GND |
GND |
1.7.4. TFT版

TFT端子 | BluePill端子 |
---|---|
VCC |
3.3V |
GND |
GND |
CS |
PB11 |
RESET |
R(NRST) |
D/C |
PB12 |
SDI(MOSI) |
PB15(MOSI2) |
SCK |
PB13(SCK2) |
LED |
3.3V |
SDO(MISO) |
PB14(MISO2) |
1.7.5. SDカード対応
市販のプルアップ抵抗及び、ダンピング抵抗が組み込まれたモジュールの利用を推奨します。
TFT版では、TFTディスプレイのSDカードスロットも利用可能です。


SDカードモジュール端子 | BluePill端子 |
---|---|
GND |
GND |
MISO |
PA6(MISO1) |
CLK |
PA5(CLK1) |
MOSI |
PA7(MOSI1) |
SS |
PA4(NSS1) |
3.3V |
3.3V |
5V/3.3V変換レギュレータが乗っている製品の場合、5Vと3.3Vの端子がありますが、
5V端子に5Vを供給しないと動作しない場合があります。
その場合は5V端子にBluePillボードの5V端子を接続して下さい。
1.7.6. RTC用電池
RTC用バックアップ電池を利用することで、電源を切った状態でもRTCの時刻を保持することが出来ます。
以下の接続例を示します。利用するダイオードは、VF値が低い(0.5以下)ものであれば何でも良いです。
1.7.7. 部品表
部品 | 参考 | |
---|---|---|
P |
Mini DIN 6pin メスコネクタ |
|
USBコネクタ |
||
抵抗 10kΩ × 2 |
||
N |
RCAジャック(黄) |
|
抵抗 240Ω |
||
抵抗 560Ω |
||
単 |
圧電スピーカー(圧電サウンダ) |
直径13mm程度のものがお手頃です。 |
O |
OLEDディスプレイ |
aitendo
OLEDモジュール(0.96/白色/I2C) [M096P4W] Aliexpress Aliexpressでのその他製品リスト |
T |
TFT(ILI9341)ディスプレイモジュール |
画面サイズが大きいほど高くなります。 Amazon経由、Aliexpress等海外通販サイト利用で安く入手可能です。 |
S |
SDカードモジュール |
このほか、Amazon、Aliexpress等海外通販サイト利用で安く入手可能です。 |
R |
3.3Vボタン電池 CR2032 |
ダイソー ボタン電池 CR2032 |
3V ボタン電池 CR2032用ホルダー |
||
ショートキーバリアダイオード |
||
電解コンデンサ 100μF |
1.8. ピンレイアウト
Blue Pillボードのピンレイアウトです。

-
コマンドや関数にてピンを指定する場合、ピン名称またはピン番号による指定が可能です。
-
利用する構成により、利用できるピンは異なります。
-
5Vトレラント対応ピンでは、5V系の信号入出力に接続可能です。
-
VBAT端子は内蔵RTCの外部電源によるバックアップに利用可能です。
-
BOOT1端子もPB2としてデジタルINPUT/OUTPUTに利用可能です。
1.9. ピン割り付け一覧
ピン | 番号 | 用途 | 説明 |
---|---|---|---|
PA0 |
0 |
アナログ入力、デジタルIN/OUT |
汎用 |
PA1 |
1 |
アナログ入力、デジタルIN/OUT |
NTSC 同期信号 汎用、NTSC版では占有(利用禁止) |
PA2 |
2 |
アナログ入力、デジタルIN/OUT |
汎用 |
PA3 |
3 |
アナログ入力、デジタルIN/OUT |
汎用 |
PA4 |
4 |
アナログ入力、デジタルIN/OUT、SPI(NSS) |
汎用、SDカード |
PA5 |
5 |
アナログ入力、デジタルIN/OUT、SPI(SCK) |
汎用、SDカード |
PA6 |
6 |
アナログ入力、デジタルIN/OUT、PWM、SPI(MISO) |
汎用、SDカード |
PA7 |
7 |
アナログ入力、デジタルIN/OUT、PWM、SPI(MOSI) |
汎用、SDカード |
PA8 |
8 |
デジタルIN/OUT、PWM |
汎用 |
PA9 |
9 |
デジタルIN/OUT、PWM、シリアル通信 |
汎用、シリアル通信(送信) |
PA10 |
10 |
デジタルIN/OUT、PWM、シリアル通信 |
汎用、シリアル通信(受信) |
PA11 |
11 |
USB D- 占有 |
他の利用禁止 |
PA12 |
12 |
USB D+ 占有 |
他の利用禁止 |
PA13 |
13 |
S-LINK、デジタルIN/OUT S-LINK、 |
汎用 |
PA14 |
14 |
S-LINK、デジタルIN/OUT S-LINK、 |
汎用 |
PA15 |
15 |
デジタルIN/OUT |
汎用 |
PB0 |
16 |
アナログ入力、デジタルIN/OUT、PWM |
汎用 |
PB1 |
17 |
アナログ入力、デジタルIN/OUT、PWM |
汎用 |
PB2 |
18 |
BOOT1、デジタルIN/OUT ※プルアップ抵抗あり |
汎用、BOOT1モード指定 |
PB3 |
19 |
デジタルIN/OUT |
汎用 |
PB4 |
20 |
デジタルIN/OUT 、PS/2 キーボードI/F CLK |
汎用、PS/2キーボード利用時占有(利用禁止) |
PB5 |
21 |
デジタルIN/OUT 、PS/2 キーボードI/F DATA |
汎用、PS/2キーボード利用時占有(利用禁止) |
PB6 |
22 |
I2C SCL1 |
占有、他の利用禁止 |
PB7 |
23 |
I2C SDA1 |
占有、他の利用禁止 |
PB8 |
24 |
デジタルIN/OUT |
汎用 |
PB9 |
25 |
SOUND(PWM出力) |
占有、他の利用禁止 |
PB10 |
26 |
デジタルIN/OUT |
汎用 |
PB11 |
27 |
デジタルIN/OUT、OLED_CS、TFT_CS |
汎用、OLED(SPI)、TFT利用時占有(利用禁止) |
PB12 |
28 |
デジタルIN/OUT、OLED_SC、TFT_DC |
汎用、OLED(SPI)、TFT利用時占有(利用禁止) |
PB13 |
29 |
デジタルIN/OUT、OLED_SCK、TFT_SCK |
汎用、OLED(SPI)、TFT利用時占有(利用禁止) |
PB14 |
30 |
デジタルIN/OUT、TFT_SDO |
汎用、TFT利用時占有(利用禁止) |
PB15 |
31 |
デジタルIN/OUT、 |
汎用、NTSC、OLED(SPI)、TFT利用時占有(利用禁止) |
PC13 |
32 |
LED、デジタルIN/OUT ※プルアップ抵抗あり |
汎用 |
PC14 |
33 |
RTCへのクロック供給 |
占有、他の利用禁止 |
PC15 |
34 |
RTCへのクロック供給 |
占有、他の利用禁止 |
-
各ピン 20mA(ソース、シンク利用)まで電流を流すことが可能、推奨8mA
-
全ピン合計では150mAまで利用可能
1.10. メモリーマップ
「豊四季タイニー BASIC for Arduino STM32」ではSTM32F103CT6のサポート外のフラッシュメモリ領域64バイトを含む合計128kバイトの領域を利用しています。SRAMは20kバイトの領域を利用しています。
1.10.1. FLASHメモリ
128kバイトの領域はページ単位(1024バイト)で領域が管理されています。
領域の利用は下記の通りです。
アドレス | ページ番号 | ページ数 | 用途 |
---|---|---|---|
0x08000000 - 0x08001FFF |
0 |
8 |
Arduino STM32ブートローダー(DFU) |
0x08002000 - 0x080197FF |
8 |
94 |
Tiny BASICインタープリタ+フォントデータ |
0x08019800 - 0x0801F7FF |
102 |
24 |
プログラム保存用(4kバイト×6) |
0x0801F800 - 0x0801FFFF |
126 |
2 |
仮想EEPROM(config用、ユーザー利用用) |
1.10.2. SRAM
次の領域をグローバル変数領域として利用しています。
アドレスはコンパイラに依存します。
変数名 | 領域サイズ(バイト) | 用途 |
---|---|---|
lbuf |
128 |
コマンドライン入力バッファ |
tbuf |
128 |
テキスト表示用バッファ |
ibuf |
128 |
中間コード変換バッファ |
listbuf |
4,096 |
プログラム領域(4kバイト) |
var |
210×2 |
変数領域(A-Z,A0:A6-Z0:Z6の26+26×7×2=416) |
arr |
100×2 |
配列変数領域(@(0)~@(99) |
gstk |
20×4 |
GOSUBスタック stack size(2/nest) :10ネストまでOK |
lstk |
50×4 |
FORスタック stack size(5/nest) :10ネストまでOK |
mem |
1024 |
自由利用データ領域 |
workarea |
5,760 |
テキスト表示・グラフィック表示用 |
1.10.3. 仮想アドレス
「豊四季タイニー BASIC for Arduino STM32」では、仮想アドレス利用することでSRAMおよびフラッシュメモリ上のデータの参照・書き込みを行うことができます。仮想アドレスは次の構成となります。
仮想アドレス | 定数名 | 領域サイズ(バイト) | 用途 |
---|---|---|---|
$0000 |
VRAM |
可変・最大 5,760 |
キャラクタスクリーン表示用メモリ(CW×CH) |
$1900 |
VAR |
420 |
変数領域(A~Z, A0:A6~Z0:Z6)+ 4バイト |
$1AA0 |
ARRAY |
200 |
配列変数領域(@(0)~@(99) ) |
$1BA0 |
PRG |
4,096 |
プログラム領域 |
$2BA0 |
MEM |
1,024 |
ユーザーワーク領域 |
$2FA0 |
FNT |
2,048 |
フォント256文字(フラッシュメモリ) |
$37A0 |
GRAM |
可変・最大 6,048 |
グラフィック表示用メモリ |
$4F40 |
PRG2 |
4,096 |
フラッシュメモリプログラム保存領域 |
1.11. フォント
表示デバイス(NTSCビデオ出力、OLED画面、TFT画面)で
利用しているトフォントのキャラクター表を下記に示します。
フォントはサイズは6×8ドットです。
IchigoJamと互換性があります。

ライセンスに関する表記
CC BY IchigoJam
フォントデータはIchigoJam 1.2.1 の8×8ドットフォントを参考にして、
6×8ドットフォントを新に作成しています。
フォントデザインは下記のプログラムにて作成しています。
10 'font map 20 N=16 30 GOSUB "@hr" 40 FOR C=0 TO 255 STEP N 50 GOSUB "@line(C,N)" 60 GOSUB "@hr" 70 NEXT C 80 END 90 "@line(C,N)" 100 FOR L0=0 TO 7 110 ?" |"; 120 FOR I0=C TO C+N-1 130 D0=PEEK(FNT+8*I0+L0) 140 FOR J0=0 TO 5 150 IF D0&($80>>J0) ?"#"; ELSE ?" "; 160 NEXT J0 170 ?"|"; 180 NEXT I0 190 ? 200 NEXT L0 210 RETURN 220 "@hr" 225 ?" "; 230 FOR I0=0 TO 111 240 ?"-"; 250 NEXT I0 260 ? 270 RETURN
1.12. 編集操作キー
「豊四季タイニー BASIC for Arduino STM32」では、デバイス画面(NTSCビデオ出力画面、OLED画面、TFT画面)、
シリアルコンソール画面でのフルスクリーン編集をサポートしています。
PS/2キーボード及び、パソコン上のターミナルソフト上では、次の編集キーを利用することが出来ます。
編集キー | 機能 |
---|---|
[ESC] |
プログラム中断、シリアルコンソールでは要2回押し |
[F1] |
画面の全消去 |
[F2] |
カーソル位置の行消去 |
[F3] |
カーソルの次行に空行挿入 |
[F5] |
画面の再表示 |
[F7] |
行の分割:カーソル以降のテキストを次行に分割する |
[F8] |
行の結合:カーソル行に次行のテキストを結合する |
[BackSpace] |
カーソル前の文字の削除 |
[Insert] |
上書きモード、挿入モードも切り替え |
[Home] |
カーソルを行の先頭に移動 |
[END] |
カーソルを行の末尾に移動 |
[PageUP] |
カーソルを画面右上に移動、画面のスクローダウン |
[PageDown] |
カーソルを表示している最終行に移動、スクロールアップ |
[Delete] |
カーソル位置の文字の削除 |
[←] |
カーソルを左に移動 |
[→] |
カーソルを右に移動 |
[↑] |
カーソルを上に移動 |
[↓] |
カーソルを下に移動 |
[Enter] |
行入力の確定、改行 |
[NumLock] |
テンキーのロック、ロック解除 |
[カタカナ/ひらがな/ローマ字] |
カタカナ入力のON、OFF |
[Ctrl] + C |
プログラム中断 |
[Ctrl] + D |
カーソル位置の行削除 |
[Ctrl] + K |
カタカナ入力のON、OFF |
[Ctrll + L |
画面の全消去 |
[Ctrl] + N |
カーソルの次行に空白挿入 |
[Ctrl] + R |
画面の再表示 |
[Ctrl] + X |
カーソル位置の文字の削除 |
2. インストール
本節では、「豊四季タイニー BASIC for Arduino STM32」配布パッケージのインストールについて解説します。
Windows 10環境の利用を前提に解説します。
2.1. パッケージの配置
下記のリンクからダウンロードして解凍するか、
gitコマンドにてクローンの作成を行って下さい。
コマンドプロンプト上でgitコマンドでダウンロード(複製の作成)
git clone https://github.com/Tamakichi/ttbasic_arduino_stm32.git
Windows 10へのgitの導入は、下記の手順を参考にして下さい。
-
git for Windowsのインストール手順
https://tamakichi.github.io/ttbasic_arduino_stm32/install_git.html
ダウンロードした本パッケージのトップフォルダを 📁ttbasic_arduino_stm32\ とします。
(解凍直後の tbasic_arduino_stm32-master から変更して下さい)
トップフォルダを任意の場所に配置して下さい。
パッケージ構成
|
Arduino IDEでスケッチをコンパイルする場合は、
Arduino IDEの環境設定の スケッチブックの保存場所に
📁ttbasic_arduino_stm32\ を 設定して下さい。
これにより、既存の環境・ライブラリとの干渉減らすことが出来ます。
ArduinoSTM32導入
Arduino STM32パッケージは、随時更新されているため動作確認した時点のスナップショットに不具合修正を行った、下記のパッケージをダウンロードして利用して下さい。
-
ダウンロードリンク
https://github.com/Tamakichi/Arduino_STM32/archive/master.zip -
gitを使ったダウンロード(複製のダウンロード)
git clone https://github.com/Tamakichi/Arduino_STM32.git
ダウンロードしたArduino STM32パッケージのトップフォルダを
📁Arduino_STM32\ とします。
(解凍直後の Arduino_STM32-master から変更して下さい)
Arduino STM32パッケージのトップフォルダは、
📁hardware\の下に配置して下さい。
|
ドライバのインストール
Arduino STM32パッケージに添付のUSBドライバをインストールします。
下記の📁win\📄install_drivers.batをクリックしてドライバをインストールします。
|
Javaのインストール
Arduino STM32のスケッチの書き込みにおいて、java(jre:実行環境)の実行環境が必要となります。
インストールしていない場合は、ダウンロードしてインストールして下さい。
無料Javaのダウンロード https://java.com/ja/download/

無料のJavaのダウンロード をクリックしてダウンロードし、インストールして下さい。
無料Javaのダウンロード https://java.com/ja/download/
2.2. ファームウェアの書込
コンパイル済みスケッチ(ファームウェア) を用意しています。
ファームウェアを直接マイコンボードに書き込んで利用することが出来ます。
プロジェクトファイルのbinフォルダに2つのタイプのファームウェアを用意しています。
- ブートローダー無しファームウェア(バイナリー形式)
-
ブートローダ経由(USB経由)で書き込むタイプのファームウェアです。
Arduino IDE経由で書き込むスケッチと同じものです。
|
- ブートローダー付きファームウェア(バイナリー形式)
-
ブートローダにスケッチを結合したファームウェアです。
ブートローダの書き込み方法と同じように書き込みます。
|
ブートローダー無しファームウェアの書込み手順
利用するマイコンボードにArduino STM32用のブートローダーが書き込まれている必要があります。
BluePillボード への書き込みは下記の記事等を参考して行って下さい。
-
DEKOのアヤシいお部屋-「STM32F103C8T6」
http://ht-deko.com/arduino/stm32f103c8t6.html
1. ファームウェア書込み手順
1-1. ttwrite.batを修正します
ttwrite.bat の修正をエディタ(メモ帳でもOK)で開き、
dev にマイコンボードのUSBポートが利用するシリアルポートを指定します。
COMは必ず半角大文字で記述して下さい。
set dev=COM4 ・・・
1-2. コマンドプロンプト上でコマンド実行
コマンドプロンプトを起動します。
カレントディレクトリを 📁ttbasic_arduino_stm32\📁bin\
に移動し、
次のコマンドを実行します。
ttwrite ファームウェアファイル
-
ファームウェアファイル は各自の利用目的に応じて選択して下さい。
ttwrite ttbasic_TFT.bin
を書き込む場合の例ttwrite ttwrite ttbasic_TFT.bin

コマンド実行しても書き込みが開始されない場合、ボード上のリセットボタンを押すことで、ブートローダーが強制的に書込みモードに切り替わります。試してみて下さい。
別の方法として、エクスプローラー上で ttwrite.bat アイコン上にブートローダー無しファームウェアファイルのアイコンをドラック&ドロップすることで書き込むことが出来ます。

ブートローダー付きファームウェアの書込み手順
ブートローダーと同じ方法で書き込むこと出来ます。
(プログラマ ST-LINK を利用して、STM32 ST-LINK Utility での書き込み)
ここでは添付の ttbtwrite.bat コマンドを使ったシリアル接続による方法を説明します。
1. 事前準備

1-1. USB-シリアル変換モジュールの用意
USB-シリアル変換モジュール を用意して下さい。
パソコンに接続してシリアルポートを確認します。
ここでは、COM5 とします。
1-2. ttbtwrite.batの修正
書込み用バッチファイル ttbtwrite.bat を各自の環境に合わせて修正します。
📁bin\PlusBootloader\ttbtwrite.bat
をエディタ(メモ用でもOK)で開きます。
set dev=COM5 stm32flash.exe -b 115200 -f -v -w %1 %dev%
devのシリアルポートの指定を各自の環境に合わせて変更して下さい。
1-3.BluePillボードをパソコンに接続
BluePillボード のUSBポートを電源供給を兼ねてパソコンに接続します。
1-4 USB-シリアル変換モジュールの接続
USB-シリアル変換モジュール と Blue Pillボード を結線します。
USB-シリアル変換モジュール | Blue Pillボード |
---|---|
GND |
GND |
TXD |
A10 |
RXD |
A9 |
1-4 ジャンパースイッチの設定
ジャンパースイッチの設定ボード上の BOOT0 ジャンパを1に設定します。

BOOT0 :1
BOOT1 :0
2. 書込み作業
2-1 コマンドプロンプトを起動します
カレントディレクトリを 📁bin\PlusBootloader\
に移動し、
2-2. 次のコマンドを実行します
ttbtwrite ブートローダー付きファームウェアファイル
ブートローダー付きファームウェアファイル は同じフォルダ内にあります。
各自の用途に合わせて選択指定して下さい。
ttbtwrite boot_ttbasic_Serial.bin
を実行した例:ttbtwrite ttbtwrite boot_ttbasic_Serial.bin

書込みはエクスプローラー上でブートローダー付きファームウェアファイルのアイコンを ttbtwrite.bat
のアイコンにドラック&ドロップする操作でも行うことが出来ます。

書込みが完了したら、BOOT0 ジャンバを0に戻して下さい。
2.3. スケッチの書込
Arduino IDEにて、添付のプログラムソース(スケッチ)を使って、
ファームウェアの書き込みが可能です。
手順については、下記のドキュメントにまとめました。
こちらを参照下さい。
-
豊四季Tiny BASIC for Arduino STM32 コンパイル環境の構築
https://tamakichi.github.io/ttbasic_arduino_stm32/install.html
3. 利用環境設定
本節では、「豊四季タイニー BASIC for Arduino STM32」を使ってプログラムの開発を行うための環境及びその設定について、解説します。
3.1. 初期設定
「豊四季タイニー BASIC for Arduino STM32」のファームウェア(スケッチ)を初めての利用、またはバージョンの更新を行った場合、内部フラッシュメモリのプログラム保存及びCONFIGデータ保存用の領域の初期化が必要となります。
初期化は次の作業を行って下さい。
-
プログラム保存領域の初期化 内部フラッシュメモリの初期化を行います。
詳細については下記の項目を参照して下さい。
⇒ 「プログラム保存領域の初期化」 -
仮想EEPROM領域の初期化 システム設定情報を保存する領域の初期化を行います。
詳細については下記の項目を参照して下さい。
⇒ 「仮想EEPROM領域の初期化」
初期化を行った場合、再設定が必要となります。
3.2. PS/2キーボード
PS/2キーボードは、日本語キーボードとUSキーボードに対応しています。
デフォルトでは日本語キーボード対応になっています。
利用するキーボードのタイプを一時的に切り替えるにはCONFIGコマンドを利用します。
- 書式
-
CONFIG 1,キーボード選択(0:日本語キーボード 1:USキーボード)
CONFIG 1,1
CONFIG 1,0
設定した状態を保存するののは、SAVECONFIGコマンドを実行します。
SAVECONFIG
これにより、次回以降の利用にも反映されます。
3.3. コンソール画面設定
コンソール画面は、画面解像度、画面文字サイズ、画面の向きなどの設定変更が可能です。
表示設定は利用しているデバイスコンソール画面(シリアル、NTSC、OLED、TFT)により異なります。
下記に表示設定を行う、コマンドを利用するこで、表示設定を行うことができます。
画面 | コマンド | 説明 |
---|---|---|
NTSC |
SCREEN n |
画面解像度を設定します。 |
TFT液晶 |
SCREEN n [, m] |
画面フォントサイズ、画面向きを設定します。 |
COLOR n [, m] |
テキスト文字色、背景色を設定します。 |
|
OLED |
SCREEN n [, m] |
n:スクリーンモード |
シリアルコンソール |
WIDTH n , m |
テキスト表示の縦・横文字数を設定します。 |
SMODE n [, m] |
2つのシリアルポートの機能を切り替えます。
|
|
共通 |
CONSOLE n |
デバイスコンソール画面(NTSC、TFT、OLED)から、 |
3.4. シリアル通信
ここでは、Windows 10パソコン上でターミナルソフト TearTermを利用する場合の設定について解説します。
3.4.1. 通信条件
メニュー[設定] - [シリアルポート]から[シリアルポート設定]画面を開いて行います。

項目 | 設定値 |
---|---|
ポート |
各自の環境に合わせて設定 |
ボー・レート |
115200(任意) |
データ長 |
8bit |
パリティビット |
無し |
ストップビット |
1bit |
フロー制御 |
無し |
USB接続の場合、ボー・レートの設定任意です。
GPIOシリアルポート利用の場合は、SMODEコマンドで設定して通信速度を設定して下さい。
SMODE 1,"115200"
GPIOシリアルポートで設定可能な通信速度は、
利用しているUSB-シリアル変換モジュールに依存します。
3.4.2. 文字コード設定
改行コード、文字コード、キーボードに関するの指定を行います。
「豊四季タイニー BASIC for Arduino STM32」では1バイトコードの半角カタカナ、シフトJIS全角文字の利用をサポートします。
半角カタカナ、シフトJIS全角文字を利用のためには、利用する文字列コードとしてシフトJISを指定します。
言語設定
メニュー [設定] - [全般設定] - [全般設定]画面 の設定

項目 | 設定値 |
---|---|
言語 |
Japanese |
言語UI |
Japaneze.lng |
メニュー [設定] - [端末の設定] - [端末の設定]画面 の設定

項目 | 設定値 |
---|---|
漢字-受信 |
SJIS |
漢字-受信 |
SJIS |
改行コード 受信 |
AUTO |
改行コード 送信 |
CR |
ウィンドウサイズ |
☑チェックを入れる |
メニュー [設定] - [キーボード]画面 の設定

DELを送信するキー のBackspaceキー、Deleteキーのチェックを外します。
3.5. NTSCビデオ出力
NTSCビデオモニターの映像がスクロールする等、
正常に表示出来ない場合は、次の調整を試してみてください。
改善される場合があります。
3.5.1. 垂直同期信号補正
- 書式
-
CONFIG 0, 垂直同期補正(-2~2 デフォルト値:0)
CONFIG 0, 垂直同期補正(-2~2 デフォルト値:0),横表示開始位置調整, 縦表示開始位置調整
CONFIG 0,2
画面の下部の表示が乱れる場合は、-2~0の数値での調整を試して下さい。
表示する映像が画面に収まらず、表示内容が欠けてしまう場合は、
第2引数 横表示開始位置調整(-15~15)、
第3引数 縦表示開始位置調整(-15~15)を
指定して画像表示開始位置の調整を試みて下さい。
CONFIG 0,0,8,8
設定した状態を保存するののは、SAVECONFIGコマンドを実行します。
SAVECONFIG
これにより、次回以降の利用にも反映されます。
3.6. 起動時コンソール画面
デバイスコンソール(NTSC、OLED、TFT)を利用する環境では、
起動直後は、デバイス画面がコンソール画面となります。
起動時に次の設定にて利用するコンソール画面を選択することが出来ます。
コンソール画面 | BOOT1 | SWCLK | 補足 |
---|---|---|---|
NTSC /OLED / TFT |
0 |
- |
|
USBポート接続シリアルコンソール |
1 |
OPEN or LOW |
|
GPIOシリアルポート接続シリアルコンソール |
1 |
HIGH |
通信速度 115,200bps |
BOOT1とSWCLK

BOOT1を1、SWCLKをHIGH(3.3Vに接続)にして、起動時のコンソール画面を
GPIOGPIOシリアルポート接続シリアルコンソールに指定する例

注意
|
SWCLKを3.3Vに結線した場合、2点間に80μA(実測)の電流が流れます(0.265mW)。消費電力を押さえたい場合は、間に大き目の抵抗(100KΩ~1MΩ)を間に入れて下さい。1MΩの抵抗を入れた場合、3μA(0.001mW)まで抑えられます。 |
3.7. 内部RTCの時刻設定
内部RTCの時刻設定は次のコマンドで行います。
- 書式
-
SETDATE 年,月,日,時,分,秒
SETDATE 2019,8,10,12,30,0
設定した時刻はDATEコマンドで確認できます。
DATE 2017/08/10 [Thr] 12;32:45 OK
RTCの設定時刻は、SDカード利用した場合のファイル作成・更新時刻としても利用されます。
3.8. プログラム保存・読込
作成したプログラムは内部フラシュメモリに保存可能です。
フラッシュメモリへの保存
SAVE プログラム番号(0~5)
フラッシュメモリからの読み込み
LOAD プログラム番号(0~5)
フラッシュメモリに保存しているプログラム一覧の表示
FILES [先頭プログラム番号, 終了プログラム番号]
FILES files 0:CLS 1:'oscilloscope 2:'ジコクヒョウジ 3:(none) 4:(none) 5:(none) OK
FILESコマンドはプログラムの先頭行を表示します。
プログラム番号の格納領域にプログラムが保存されていない場合は、(none)が表示されます。
フラッシュメモリ上のプログラムはESASEコマンドにてにて削除することが出来ます。
LRUNコマンドを用いると、指定したプログラムをロードして実行することが出来ます。
LRUN 1
マイコンボードの起動時に予め指定したプログラムを起動することも可能です。
詳細は、プログラムの自動起動設定を参照して下さい。
また、SDカードモジュールを接続している場合、MMC互換カード(SDカード含む)へのプログラムの保存、読み込みが可能となります。
MMC互換カード(SDカード含む)への保存
SAVE "ファイル名"
MMC互換カード(SDカード含む)からの読み込み
LOAD "ファイル名"
MMC互換カード(SDカード含む)に保存しているプログラムのリスト表示
FILES ""
ファイルの保存先には、ディレクトリ名の指定も可能です。
詳細については、各コマンドのリファレンスを参照して下さい。
3.9. プログラム転送
パソコンからマイコンボードにプログラムを転送する方法としては、
ターミナルソフトの画面にプログラムソースコピー&ペーストする方法が簡単でおすすめです。
TeraTermにて長いプログラムソースをペーストした際に取りこぼしが発生する場合は、
送信遅延のタイミングの調整を行って下さい。

また、通常ペースト時には一部の制御用文字(BSキーの文字コードなど)が機能してしまい、正しく転送出来ない場合があります。
この場合は、シリアルポートのコンソール画面利用をしていない状態で、
SMODEコマンドを使って一時的に制御用文字コードの機能を無効化してから転送して下さい。
制御用文字コードの機能を無効化
SMODE 3,0
制御用文字コードの機能を有効化
SMODE 3,1
注意
|
シリアルポートをコンソール画面(スクリーン編集可能な画面として利用している場合)として利用している場合、SMODEコマンドによる制御用文字コードの機能を無効化は行うことが出来ません。 |
3.10. プログラム退避
内部フラッシュメモリに保存されている、プログラムをパソコンにバックアップする機能として、 EXPORTコマンドを用意しています。
パソコン上のターミナルソフトから接続した状態で、EXPORTコマンドを実行します。
ターミナルソフト上に保存されているプロフラムが全て出力されますので、その内容をコピー&ペーストにてメモ帳等に張り付けて保存します。
export NEW 10 CLS 20 GETTIME H,M,S 30 @(0)=H/10:@(1)=H%10 40 @(2)=10 50 @(3)=M/10:@(4)=M%10 60 @(5)=10 70 @(6)=S/10:@(7)=S%10 80 FOR I=0 TO 7 90 BITMAP I*24+10,20,FNT,@(I)+ASC("0"),6,8,4 100 NEXT I 110 GOTO 20 SAVE 0 NEW 10 'oscilloscope 20 CLS 30 GPIO PB1,ANALOG 40 "LOOP" 50 R=ANA(PB1) 60 Q=R/20 70 LOCATE 0,0:?R;" " 80 PSET GW-1,GH-Q-4,1 90 WAIT 50 100 GSCROLL 8,208,3 110 GOTO "LOOP" SAVE 1 NEW 1 'ジコクヒョウジ 5000 CLS 5010 GETTIME H,M,S 5020 @(0)=H/10:@(1)=H%10 5030 @(2)=10 5040 @(3)=M/10:@(4)=M%10 5050 @(5)=10 5060 @(6)=S/10:@(7)=S%10 5070 FOR I=0 TO 7 5080 BITMAP I*24+10,20,FNT,@(I)+ASC("0"),6,8,4 5090 NEXT I 5100 GOTO 20 SAVE 2 OK
保存したプログラムをマイコンボードに読み込むには「パソコンからのプログラム読込と保存」の内容を参考にして、保存していたテキストの「NEW~SAVE n」の単位でコピー&ペーストしてプログラム番号単位で保存していきます。
作業については、コマンドリファレンス「EXPORT 内部フラッシュメモリの内容のエクスポート」の内容も参照して下さい。
3.11. プログラム自動起動
マイコンボードの起動時にフラッシュメモリー上の指定したプログラム番号のプログラムを起動することが出来ます。
この設定はCONFIGコマンド、SAVECONFIGコマンドにて行います。
プログラム番号0を自動起動する場合は、次のコマンドを実行します。
CONFIG 2,0 OK SAVECONFIG OK
CONFIGコマンドの第2引数にプログラム番号(0~7)を指定します。
自動起動を解除する場合は、次のコマンドを実行します。
CONFIG 2,-1 OK SAVECONFIG OK
自動起動するプログラムには、SDカード上のプログラムを指定することは出来ませんが、 フラッシュメモリーから起動されるプログラムからRLUNコマンドを使って間接的に起動することが出来ます。
10 LRUN "STAT.BAS"
3.12. 仮想EEPROM
仮想EEPROM領域には、システム設定情報とユーザー用仮想EEPROM用に利用します。
この領域を初期化はEEPFORMATコマンドを実行して下さい。
具体的には、次のコマンドを実行して下さい。
EEPFORMAT OK
3.13. プログラム保存領域
内部フラッシュメモリの初期化は、ERASEコマンドを利用します。
具体的には、次のコマンドを実行して下さい。
ERASE 0,7 OK
3.14. MMC互換カード
MMC互換カード(SDカード)の初期を行い場合は、FAT16たまはFAT32形式で行って下さい。
通常、購入したSDカードはFAT16またはFAT32にてフォーマットされており、そのまま利用することが出来ます。
なお、MMC互換カード(SDカード)は電気的に弱い面もありますので、万が一の故障を想定し、重要なデータを保存する用途との併用は避け、なるべく専用のカードを用意して下さい。
4. プログラム構成要素
本章では、「豊四季タイニー BASIC for Arduino STM32」が サポートするプログラム言語について解説します。
4.1. プログラム構造と形式
次のプログラムリストは、画面に時刻を表示するプログラムです。
実行するとNTSCビデオ画面に時刻を更新表示します。
10 CLS:SETDATE 2017,8,1,8,57,0 20 GETTIME H,M,S 30 @(0)=H/10:@(1)=H%10 40 @(2)=10 50 @(3)=M/10:@(4)=M%10 60 @(5)=10 70 @(6)=S/10:@(7)=S%10 80 FOR I=0 TO 7 90 BITMAP I*24+10,20,FNT,@(I)+ASC("0"),6,8,4 100 NEXT I 110 GOTO 20
- 上記プログラムの構造的は・・・・
-
-
プログラムは複数の行(行番号+命令文)で構成されます。
先頭行は行番号 10 + 命令文CLS: SETDATE 2017,8,1,8,57,0
で構成されています。
10 CLS: SETDATE 2017,8,1,8,57,0
処理としては、画面の表示内容を全消去し、時刻を設定します。 -
命令文は1つまたは複数のコマンドや式で構成されます。
30行 は、2つの代入式を記述 配列変数@(0)、@(1)に値を代入しています。
30 @(0)=H/10:@(1)=H%10
-
コマンドはコマンド名と引数で構成されます。
20行 は、コマンド名GETTIME
に引数として変数H
,M
,S
を指定し、
現在の時、分、秒を変数に代入しています。
20 GETTIME H, M, S
-
引数は式、変数、定数にて構成されます。
90行 では、BITMAP
コマンドの引数に式を記述し、
その計算結果を引数として渡します。
90 BITMAP I*24+10,20,FNT,@(I)+ASC("0"),6,8,4
-
プログラムは通常、行番号順にシーケンシャルに実行されます。
10行~70行 は、行番号順に実行 し、
配列変数@(0)
から@(6)
に時刻情報を設定しています。 -
制御命令により、分岐や繰り返しを行うことが出来ます。
80行~100行 はFOR
~NEXT
コマンドにより、処理を8回繰り返しています。
20行~110行 はGOTO
コマンドにより無限に処理を繰り返します。
-
このようにプログラムは様々な要素で構成れます。
次節からは、これらの各構成要素について解説します。
4.2. 行と命令文
4.2.1. 行
行とは利用者がコンピュータに対して指示を行う単位です。行は命令文にて構成されます。
「prduct」では、行の単位で利用者からの指示を処理します。
スクリーンエディタ、およびコンソール画面の文字入力で、
PRINT "Hello" Enter
[Enter] キー
Hello
OK
のように[Enter] キーの入力により、
行の単位で指示を受け取り、そのコマンドを行います。
また、行の先頭に行番号を付けた場合、
10 PRINT "Hello" Enter
「指定した行番号で行(命令文)をプログラムに登録せよ」
との指示であると判断し、
命令文は実行せずに、行(命令文)をプログラムとしてメモリーに登録します。
10
[Enter]キー
のように行番号だけを指定した場合は、
「指定した行番号を空にせよ」 = 「行(命令文)を削除せよ」
との指示であると判断し、
該当する行をプログラムから削除します。
4.2.2. 命令文
命令文とはコマンド、式、関数、コメント、ラベルを組み合わせて記述した命令です。
コマンド
コマンドはコロン:を使って1行に複数記述することができます。
10 I=I+1:LOCATE 0,I:COLOR 7,0:PRINT "Hello":GOTO 50:'サンプル
コメント文
文において、REM
、および省略形のシングルクオーテーション ’
を使った以降の文はコメントとなります。
10 'Smple program 20 REM Sample program 30 PRINT "Hello":’print hello
ラベル
行の先頭のダブルクオテーションで囲った文字列はラベルとして動作します。
ラベル自体は実行時に何も行いません。GOTO 文、GOSSUB 文のジャンプ先の指定で利用します。
ラベルの後ろにはコマンドを続けて記述することができます。
10 "LOOP":PRINT "Hello" 20 GOTO "LOOP"
4.3. 制御文
制御文は制御命令を使ったプログラムの記述文です。複数のキーワード、式の組み合わせで構成されます。
プログラムは RUN コマンドを実行することにより、通常は先頭行から行番号順に逐次実行されます。
この逐次実行は制御文を用いることで条件分岐、繰り返しを行うことが出来ます。
10 FOR A=0 TO 10 STEP 5 20 PRINT A 30 NEXT A
以下に制御命令の一覧を示します。
制御命令・書式 | 概要 |
---|---|
プログラムの終了 |
|
処理の繰り返し |
|
サブルーチンの呼び出し |
|
指定行にジャンプ |
|
条件判定を行う |
|
サブルーチンからの復帰 |
各制御命令の詳細についれは、それぞれの命令文のコマンドリファレンスを参照してください。
4.4. コマンド・関数
4.4.1. コマンド
コマンドとは何らかの処理を行うプログラム要素です。
コマンドには一般コマンドとシステムコマンドの2種類があります。
一般コマンドはコマンドラインからの直接利用とプログラム内での利用が可能です。
システムコマンドは、プログラムの管理を行うコマンドです。プログラム中で利用した場合、不整合が生じるため、コマンドラインでのみ利用可能としています。
システムコマンドをプログラム中で利用した場合、エラー("Cannot use system command")となります。
10 ? "SAMPLE" 20 DELETE 10 30 END RUN Cannot use system command in 20 20 DELETE 10 OK
4.5. 数値
「豊四季タイニー BASIC for Arduino STM32」で使える数値は整数型のみとなります。
整数型は16ビット幅、有効範囲は-32768~32767となります。
式、数値定数、数値関数、変数、配列変数はすべてこれに従います。
数値の表記は次の形式が可能です。
-
10進数表記(-32768~32767) :-1、-32767, 100
-
2新数表記(1桁から16桁) :`1, `1111111111111111
-
16進数表記(1桁~4桁) :$1345, $abcd, $Abcd
注意
|
数値を中間コードに変換(文字列数値を2バイト型数値に変換)する際、オバーフローが発生した場合はOverflowエラーとなります。?32768 Overflow 評価・演算においてオーバーフローが発生した場合はエラーとはなりません。 ?32767+1 -32768 2つの例は、同じような記述ですが、結果に差異が発生することをご理解下さい。 |
4.5.1. 関数
関数とは何らかの値を返す命令文です。関数には数値関数と文字列関数の2種類があります。
数値関数は数値を返す関数です。文字列関数は文字列を返す関数です。
数値関数はコマンドの引数や式のなどの数値として利用します。
文字列関数はPRINT,SPRINT,GPRINTの引数、ファイル名の引数にて利用できます。
10 A=ASC("A")*8+FNT 20 FOR I=0 TO 7 30 PRINT BIN$(PEEK(A+I),8) 40 NEXT I 50 END run 01110000 10001000 10001000 10001000 11111000 10001000 10001000 00000000 OK
上記のプログラムは文字"A"のフォントパターンを2進数で表示します。
10行にて数値関数ASC()を利用しています。30行で文字列関数BIN$()を利用しています。
関数単独での利用は出来ません。コマンドや関数の引数、式中でのみ利用可能です。
ASC("A") Syntax error OK
4.6. 変数・配列変数
変数とは数値を格納する保存領域です。数値と同様に式に利用できます。
変数には、通常の 変数 の他に 配列変数 があります。
変数に格納する数値は16ビット幅、有効範囲は-32768~32767となります。
変数は数値型のみ利用可能ですが、文字列の格納アドレスを代入することにより、
文字列の参照を行うことが出来出来ます。
4.6.1. 変数の表記
通常の変数
変数名は英字A~Zの1文字、
英字+数字(0~6)の2文字
の利用が可能です。
10 A0=200 20 A1=300 30 A=A0+A1 40 S="Hello"
配列変数
@(添え字)
の形式
添え字は数値で 0 ~ 99 の範囲で利用可能
(@(0)
~ @(99))
添え字の数値には式、変数等の利用が可能
10 A=5 20 @(0)=30/5, 30 @(A+1)=5
代入式において、指定した添え字を起点として連続代入が可能
10 @(10)=100,200,300,400,500
4.7. 文字・文字列
「prduct」では半角英数字の文字列を扱うことが出来ます。
文字列の表記は次の通りです。
書式: "文字列"
ダブルクォーテーションで囲みます。
文字列は0~255文字まで指定可能です。
?PRINT "Hello" Hello OK
4.7.1. 変数への代入
「prduct」では、
文字列の格納アドレスへの参照の形式で、変数への文字列代入をサポートしています。
10 A="ABCDE" 20 PRINT A 30 PRINT STR$(A) run 7079 ABCDE OK
上記の例では、変数Aに文字列 `ABCDE`の格納アドレスを代入しています。
変数Aの値をそのまま表示すると、格納アドレスが表示されます。
変数Aが参照している文字列を表示するには、STR$() 関数を利用する必要があります。
C言語のポインタに似ていますが、文字列情報は、長さ+文字列 の形式で管理しています。
したがって、下記のような利用は出来ません。行った場合、意図しない動作となります。
10 A="ABCDE" 20 A=A+1 30 PRINT STR$(A) run ララモリリ OK ,9ラリ
また、コマンドラインでの変数への文字列代入は行えません。
コマンドライン毎に領域をクリアするため、直前の文字列の参照を正しく行うことが出来ません。
A="ABCDE" OK ?STR$(A)
STR$関数のような、変数に代入した文字列の操作を行う関数を用意しています。
10 A="ABCDE" 20 L=LEN(A) 30 ?L RUN 5 OK
10 A="ABCDE" 20 PRINT STR$(A) 30 PRINT STR$(A,4,1) RUN ABCDE D OK
10 A="ABCDE" 20 C=ASC(A,4,1) RUN 68 OK
詳細については、コマンドリファレンスを参照して下さい。
4.8. 演算子
数値演算で利用できる演算子を示します。
記述例のA,Bには数値、変数、配列変数、関数、カッコで囲んだ式が利用できます。
4.8.1. 算術演算子
演算子 | 説明 | 記述例 | 説明 |
---|---|---|---|
|
足し算 |
|
AとBを足す |
|
引き算 |
|
AからBを引く |
|
掛け算 |
|
AとBの積 |
|
割り算 |
|
AをBで割る |
|
剰余算 |
|
AをBで割った余り |
4.8.2. ビット演算子
演算子 | 説明 | 記述例 | 説明 |
---|---|---|---|
|
ビット毎のAND演算 |
|
AとBのビット毎のAND |
|
ビット毎のOR演算 |
|
AとBのビット毎のOR |
|
ビット右シフト演算 |
|
Aを右にBビットシフト |
|
ビット左シフト演算 |
|
Aを左にBビットシフト |
|
ビット毎の反転 |
|
Aの各ビットを反転 |
|
ビット毎のXOR |
|
AとBのXOR |
比較演算、論理演算の論理反転は、0が偽、0以外が真となります。
0以外が真となりますので、1、-1はとも真となります。
4.8.3. 比較演算子
演算子 | 説明 | 記述例 | 説明 |
---|---|---|---|
|
等しいかを判定 |
|
AとBが等しければ真,異なれば偽 |
|
異なるかを判定 |
|
AとBが異なれば真,等しければ偽 |
|
小さいかを判定 |
|
AがB未満であれば真、そうでなければ偽 |
|
小さいまたは等しいかを判定 |
|
AがB以下であれば真、そうでなければ偽 |
|
大きいかを判定 |
|
AがBより大きければ真、そうでなければ偽 |
|
大きいまたは等しいかを判定 |
|
AがB以上であれば真、そうでなければ偽 |
4.8.4. 論理演算子
演算子 | 説明 | 記述例 | 説明 |
---|---|---|---|
|
論理積 |
|
A,Bが真なら真、でなければ偽 |
|
論理和 |
|
A,Bどちらかが真なら真、でなければ偽 |
|
否定 |
|
Aが真なら偽、偽なら真 |
4.8.5. 演算子の優先順序
演算子の優先度を下記に示します。優先度の数値が小さいほど優先度が高くなります。
計算結果が意図した結果にならない場合は、優先度の確認、括弧をつけて優先度を上げる等の対応を行って下さい。
優先度 | 演算子 |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
比較演算子と論理演算は優先度が同レベルです。比較演算子の演算を先に行う場合は、 括弧を使って優先度を上げて下さい。
?1<5 and 2>3 0 ?(1<5) and (2>3) 1
4.9. 式
式とは 1
、1+1
、A
、A+1
、ABS(-1)
` などの演算・値の評価を伴う記述をいいます。
式はプログラム実行にて計算・評価が行われ、1つの整数値の値として振る舞います。
変数への値の代入、コマンド、条件判定(IF文)、関数に引数に式が用いられた場合は、評価後の値がコマンドおよび関数に渡されます。
4.9.1. 式の利用
変数への値の代入(代入命令 LETは省略可能)
LET A=(1+10)*10/2 A=5*5+3*2 @(I+J) = I*J
コマンド・関数の引数
LOCATE X+I*2, J:PRINT "*" OUT PC13, I>J A=EEPREAD(I+J+1)/2
4.10. 定数
「豊四季タイニー BASIC for Arduino STM32」では定義済の定数が利用出来ます。
定数はコマンドの引数や式の中で数値関数と同等に利用出来ます。
利用出来る定数の例
HIGH
、LOW
、ON
、OFF
・・・ ビット値(0
or 1
)
PA0
、PA
・・・ ピン番号
CW
、CH
、GW
、GH
・・・ 画面サイズ
詳細については、「コマンドリファレンスマニュアル」の「定数」を参照下さい。