1. 仕様およびシステム構成

1.1. はじめに

hajime 02
図 1. 実行環境

「豊四季タイニー BASIC for Arduino STM32」は、 Tetsuya Suzuki氏が開発・公開している「TOYOSHIKI Tiny BASIC for Arduino」をBlue Pillボード(STM32F103C8T6搭載)に移植・機能拡張を施した、Tiny BASICインタープリタ です。

昔風の「電源入れて即、BASIC動くパソコン」、
「安価で強力・自作・改造出来るパソコン」 を目指し、
安価な割に高性能のBluePillボード、開発環境にArduinoを採用しました。
(ただし、ボードがマイナー、Arduino STM32が分かりにくいですが.. ^^;)

hajime 04
図 2. NTSC画面表示のスクリーンエディタ

配布パッケージに添付のファームウェアをボードに書き込んでの利用、
Arduino IDEでスケッチをコンパイル&書き込みでの利用が可能です。

主な拡張機能
  • プログラム編集・開発機能の強化

    • フルスクリーンエディット機能
      (シリアル、NTSC、OLED、TFT画面)

    • プログラム保存機能(内部メモリ、SDカード)

  • 周辺機器のサポート

    • TV(NTSC)/OLED/TFTディスプレイ

    • PS/2キーボード(日本語キーボード、USキーボード)

    • MMC互換カード

    • 単音出力

    • RTCバックアップ電池

  • 入出力・制御機能

    • デジタル入出力、PWM出力、アナログ入力

    • I2Cバス通信

    • シリアル通信

    • ファイル入出力

hajime 03
図 3. NTSC・PS/2キーボード・SDカードを実装したボード
開発環境

Arduino 1.8.5以降 + Arduino STM32パッケージ

必要ハードウェア

Blue Pillボード(STM32F103C8T6搭載)

hajime 01
図 4. Blue PIllボード

本マニュアルでは、「豊四季タイニー BASIC for Arduino STM32」の仕様を中心に解説します。
別紙「コマンドリファレンス」では、BASICインタープリタで利用できる各コマンドについて解説いたします。

製作者について

製作者名:たま吉さん

注意:『「たま吉」さんの飼い主(下僕?)』の略です。
決して、自分に「さん」付けている訳ではありません。
単なる、猫の「たま吉」さん の飼い主です。


1.2. 関連情報

「豊四季タイニーBASIC(オリジナル版)」に関する情報
「豊四季タイニーBASIC for Arduino STM32」に関する情報
その他の情報公開サイト

1.3. 著作権・利用条件

「豊四季タイニーBASIC for Arduino STM32」の著作権は移植・機能拡張者の「たま吉さん」、オリジナル版開発者の「Tetsuya Suzuki氏」にあります。
本著作物の利用条件は、オリジナル版「豊四季タイニーBASIC」に従うものとします。

オリジナル版はGPL(General Public License)でライセンスされた著作物であり、「豊四季タイニーBASIC for Arduino STM32」もそれに従い、GPLライセンスされた著作物となります。

更に利用条件として以下を追加します。

  1. 不特定多数への再配布においてはバイナリーファイルのみの配布を禁止、必ずソースを添付すること

  2. 「豊四季タイニーBASIC for Arduino STM32」の明記、配布元のURLを明記する

  3. 営利目的のNAVER等のまとめサイト(まとめ者に利益分配のあるもの)へのいかなる引用の禁止

補足事項
オリジナル版において開発者Tetsuya Suzuki氏は次の利用条件を提示しています。

©2012 Tetsuya Suzuki GNU General Public License

豊四季タイニーBASICがもたらすいかなる結果にも責任を負いません。
著作権者の同意なしに経済的な利益を得てはいけません。
この条件のもとで、利用、複写、改編、再配布を認めます。


1.4. システム構成

「豊四季タイニー BASIC for Arduino STM32」では、次の構成での利用が可能です。

System configuration
図 5. システム構成

赤い網掛け部分は利用においての最小限の構成です。
USB-シリアル経由ターミナルコンソール上でのプログラム入力が可能です。

周辺機器は必須ではありません。
表示デバイスのNTSC、OLED、TFT液晶は同時利用は出来ません。

1.4.1. バリエーション

「豊四季タイニー BASIC for Arduino STM32」では、次の組み合わせの利用環境が構築出来ます。

combination
図 6. 組み合わせパターン

1.4.2. 個別構成

Application example
図 7. 具体的な利用構成

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ポート・シリアルポート接続のシリアルコンソール画面を使った最小限のプログラミング環境です。

BluePill ターミナル

特徴
  • 標準装備のUSBポートにてパソコンに接続し、ターミナルソフト(TeraTerm等)を使って、
    プログラム開発を行うことが出来ます。

  • ターミナル画面上では全角文字(シフトJIS)が利用出来ます。

  • シリアルコンソール画面は、USBシリアル接続の他、
    ボード上のシリアルポートに随時切り替えて使うことも可能です。
    起動時に選択することも出来ます(詳細は「起動時のコンソール画面の選択」を参照して下さい)。
    コンソール切り替え

  • コンソール画面は横文字数、縦文字数の変更が可能です。デフォルトは80桁・24行です。

  • スクリーン編集機能の利用が可能です(詳細は「編集操作キー」を参照して下さい)。

  • COLOR文による文字色指定、LOCATE文による表示位置指定等のスクリーン制御をサポートしています。

  • 必要に応じて、SDカードリーダー、圧電スピーカー、内蔵RTC用バックアップ電池を追加利用出来ます。

NTSC版

NTSC対応モニターとPS/2キーボードを使う環境です。
NTSC

特徴
  • NTSCビデオ出力画面をプログラム作成画面(コンソール画面)として利用します。

    • シリアルコンソール版と同等のスクリーン編集機能の利用が可能です。

    • 画面の文字サイズの変更が可能です。

    • コマンドによるグラフィック描画をサポートします。

    • SDカードからビットマップ画像をロードして表示すること出来ます。

  • 文字入力はPS/2キーボードを利用します。カタカナのローマ字入力をサポートします。

  • シリアルポートを補助入出力に利用出来ます。

    • NTSCビデオ画面に表示するテキスト文字列は、シリアルポート(デフォルトではUSBシリアルポート)にも出力されます。

    • シリアルポートからの入力は、PS/2キーボードと並行してキーボード入力として受付ます。

    • NTSCビデオ出力画面表示が行えない状況でも、シリアルポートからのコマンド入力を行うことが可能です。

    • シリアルポートを利用してパソコンからのBASICプログラムの取り込みや、パソコンへの転送も用意に行うことが出来ます。

  • シリアルターミナルコンソール版」の機能を包含します。
    CONSOLEコマンドにより、いつでもシリアルターミナルコンソールモードへ移行することが出来ます。NTSCビデオ画面の利用に戻ることが出来ます。
    コンソール切り替え

OLED版

OLEDモジュールを表示機として利用する環境です。PS/2キーボードを併用します。
OLED

特徴
  • OLED画面をプログラム作成画面(コンソール画面)として利用します。

    • シリアルコンソール版と同等のスクリーン編集機能の利用が可能です。

    • 画面表示の向きの変更、画面の文字サイズの変更が可能です。

    • コマンドによるグラフィック描画をサポートします。

    • SDカードからビットマップ画像をロードして表示すること出来ます。

  • 文字入力はPS/2キーボードを利用します。カタカナのローマ字入力をサポートします。

  • シリアルポートを補助入出力に利用出来ます。

    • OLED画面に表示するテキスト文字列は、シリアルポート(デフォルトではUSBシリアルポート)にも出力されます。

    • シリアルポートからの入力は、PS/2キーボードと並行してキーボード入力として受付ます。

    • OLED画面に表示が行えない状況でも、シリアルポートからのコマンド入力を行うことが可能です。

    • シリアルポートを利用してパソコンからのBASICプログラムの取り込みや、パソコンへの転送も用意に行うことが出来ます。

  • シリアルターミナルコンソール版」の機能を包含します。
    CONSOLEコマンドにより、いつでもシリアルターミナルコンソールモードへ移行することが出来ます。OLED画面の利用に戻ることが出来ます。
    コンソール切り替え

TFT版

TFTカラーグラフィック液晶とPS/2キーボードを使う環境です。
カラー表示をサポートします。
TFT

特徴
  • 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ドット(画面回転可能)









形式

整数型BASIC(符号付16ビット整数 -32768~32767)

プログラム領域

4096バイト

利用文字コード

1バイトJISコード
(半角記号・英数字、半角カタカナ) +
キャラクタ文字(IchigoJam互換)

利用可能変数

変数名:208個
A~Zの英字1文字 26個,
A0..A6 ~ Z0..Z6の英字1文字+数字1文字 182個
配列変数@:100個 @(0)~@(99)

ユーザー開放
作業用メモリ

SRAM 1024バイト

内部フラッシュメモリ

250ワード(2バイト×250)


1.6. ハードウエア仕様

項目 概要

動作クロック

72MHz

時計機能

内部RTC利用(電池によるバックアップ可能)
精度:±10分/月

映像出力

モノラル(2色白黒)NTSCビデオ出力
接続は RCA端子.(コンポジット映像信号)

キーボード I/F

PS/2 5V 対応(5Vトレラント ピン利用)
日本語キーボード、USキーボード対応

サウンド

圧電スピーカーによる単音モノラル再生
(3.3V 矩形波 1~32767Hz)

USB I/F

DFU利用ファームウェア書込み
USB-シリアル通信

シリアル通信

1チャンネル(3線 TX、RX、GND):通信速度 ~921,600、データ長 8ビット、
ストップビット1、パリティ None

I2Cインタフェース

1チャンネル(マスター利用のみ)
アドレス 7ビット、400kbps or 100kbps

GPIO

・デジタル入力 1ビット× 24ポート(最大)
・デジタル出力 1ビット× 24ポート(最大)
・PWM出力 7チャンネル(周波数可変、ディユティー比 1/4096刻み)

アナログ入力

9チャンネル(最大) 、分解能12ビット

MMC互換カード
(SDカード含む)

FAT16 / FAT32 32Gバイトまで対応
SPI接続

OLEDディスプレイ

対応モジュール SSD1306、SSD1309、SH1106コントローラ利用モジュール
画面サイズ 0.96インチ~2.24インチ 128×64ドットの解像度の製品
対応インタフェース:I2C、SPI

TFTディスプレイ

対応モジュール ILI9341コントローラ利用グラフィック液晶モジュール
画面解像度 320×240の製品
対応インタフェース:SPI


1.7. 結線図

Blue Pillボードを使用した結線図です。
ブレッドボードを使った結線、ユニバーサル基板を使った実装の参考にして下さい。

1.7.1. シリアル接続版

最小構成です。
単音出力が不要の場合、圧電スピーカーは省略可能です。

serialconsole

圧電スピーカーの端子は極性がありません。

オプション
  • RTC用バックアップ電池

  • Dカードモジュールも必要に応じて追加できます。

1.7.2. NTSC版

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 I2C
表 1. OLEDディスプレイの結線表
OLED端子 BluePill端子

SDA

PB7(SDA1)

SCL

PB6(SCL1)

GND

GND

VCC

3.3V

SPI接続タイプ
OLED SPI
表 2. OLEDディスプレイの結線表
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
表 3. 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 modile sample
SD
表 4. 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以下)ものであれば何でも良いです。

RTC RTC 2

1.7.7. 部品表

表 5. 部品表
部品 参考

P
S
/
2





Mini DIN 6pin メスコネクタ
(PS/2コネクタ)

USBコネクタ
(Aタイプ メス)

- 秋月電子 基板取付用USBコネクタ(Aタイプ メス)
秋月電子販売

秋月電子 USBコネクタDIP化キット(Aメス)
秋月電子販売

抵抗 10kΩ × 2

秋月電子 カーボン抵抗(炭素皮膜抵抗) 1/4W 10kΩ(100本入)
秋月電子販売

N
T
S
C



RCAジャック(黄)

抵抗 240Ω

秋月電子 カーボン抵抗(炭素皮膜抵抗) 1/4W 240Ω(100本入)
秋月電子販売

抵抗 560Ω

秋月電子 カーボン抵抗(炭素皮膜抵抗) 1/4W 560Ω(100本入)
秋月電子販売





圧電スピーカー(圧電サウンダ)

直径13mm程度のものがお手頃です。
推奨: 村田製作所 PKM13EPYH4000-A0 (販売:秋月電子)
秋月電子販売

O
L
E
D

OLEDディスプレイ
(128×64ドット、
0.96/1.3/1.54/2.25インチ、
I2C/SPIインタフェース、
コントローラ SSD1306/SSD1309/SH1106)

T
F
T

TFT(ILI9341)ディスプレイモジュール
(320×240ドット SPI接続、
2.2 ~ 3.2インチ)
タッチ機能不要

画面サイズが大きいほど高くなります。
SDカードスロットも利用出来ます。
aitendo 2.8インチ液晶モジュール(SPI) [M028C9341SD]
aitendo販売

Amazon経由、Aliexpress等海外通販サイト利用で安く入手可能です。
Aliexpressでの製品リスト
https://www.aliexpress.com/wholesale?SearchText=ILI9341

S
D







SDカードモジュール
(SD/micro SD/MMCカード用、
SPIインタフェース、
3.3V対応)

SD modile sample
SDカードスロットも利用出来ます。

aitendo マイクロSDモジュール [MSD-M6P]
aitendo販売
この製品はピンヘッドを押し込んで反対側に
ビンヘッドを出すと、ブレッドボード上で使いやすくなります。

このほか、Amazon、Aliexpress等海外通販サイト利用で安く入手可能です。

R
T
C








3.3Vボタン電池 CR2032

ダイソー ボタン電池 CR2032

3V ボタン電池 CR2032用ホルダー

秋月電子 ボタン電池基板取付用ホルダー CRC2032用(小型タイプ)
秋月電子販売

ショートキーバリアダイオード
1S3/1N5819/11EQS03L等 VFが0.5V以下が目安

秋月電子 整流用ショットキーダイオード(30V1A)1S3
秋月電子販売

電解コンデンサ 100μF

秋月電子 電解コンデンサー100μF25V85℃(ルビコンPK)
秋月電子販売


1.8. ピンレイアウト

Blue Pillボードのピンレイアウトです。

board pins
  • コマンドや関数にてピンを指定する場合、ピン名称またはピン番号による指定が可能です。

  • 利用する構成により、利用できるピンは異なります。

  • 5Vトレラント対応ピンでは、5V系の信号入出力に接続可能です。

  • VBAT端子は内蔵RTCの外部電源によるバックアップに利用可能です。

  • BOOT1端子もPB2としてデジタルINPUT/OUTPUTに利用可能です。


1.9. ピン割り付け一覧

表 6. ピン割り付け一覧
ピン 番号 用途 説明

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_SDA、TFT_SDI

汎用、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バイト)で領域が管理されています。
領域の利用は下記の通りです。

表 7. フラッシュメモリ領域の割り当て
アドレス ページ番号 ページ数 用途

0x08000000 - 0x08001FFF

0

8

Arduino STM32ブートローダー(DFU)

0x08002000 - 0x080‭197FF

8

94

Tiny BASICインタープリタ+フォントデータ

0x080‭19800 ‬- 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
or
7,048

テキスト表示・グラフィック表示用
・NTSC版 7,048 バイト
・OLED版、TFT版、シリアルコンソール版 5,760バイト

1.10.3. 仮想アドレス

「豊四季タイニー BASIC for Arduino STM32」では、仮想アドレス利用することでSRAMおよびフラッシュメモリ上のデータの参照・書き込みを行うことができます。仮想アドレスは次の構成となります。

表 8. 仮想アドレス空間の割り当て
仮想アドレス 定数名 領域サイズ(バイト) 用途

$0000

VRAM

可変・最大 5,760

キャラクタスクリーン表示用メモリ(CW×CH)
最大 128×45 = 5,760バイト

$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

グラフィック表示用メモリ
NTSC、OLED版でのみ利用可能。
ただし、ターミナルモード切り替え時(CONSOLE 1)領域サイズは0となります。
サイズはGW÷8×GHで計算できます。

$4F40

PRG2

4,096

フラッシュメモリプログラム保存領域
(バンク0~5の切り替え可能、デフォルト バンク0)


1.11. フォント

表示デバイス(NTSCビデオ出力、OLED画面、TFT画面)で
利用しているトフォントのキャラクター表を下記に示します。

フォントはサイズは6×8ドットです。
IchigoJamと互換性があります。

font
図 8. フォントデザイン

ライセンスに関する表記
cc 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の導入は、下記の手順を参考にして下さい。

ダウンロードした本パッケージのトップフォルダを 📁ttbasic_arduino_stm32\ とします。
(解凍直後の tbasic_arduino_stm32-master から変更して下さい)
トップフォルダを任意の場所に配置して下さい。

パッケージ構成

📁ttbasic_arduino_stm32\ ・・・ 本パッケージのトップフォルダ
 📁bin\ ・・・・・・・・・・・・コンパイル済みスケッチ(ファームウェア)
 📁docs\ ・・・・・・・・・・・ ドキュメント類(作成中)
 📁fontbin\ ・・・・・・・・・・ 日本語フォント類
 📁image\ ・・・・・・・・・・・ README用画像ファイル
 📁hardware\ ・・・・・・・・・ Arduino STM32パッケージ配置場所
 📁libraries\ ・・・・・・・・・スケッチ用ライブラリ
 📁ttbasic\ ・・・・・・・・・・ スケッチ本体
 📄README.md ・・・・・・・・・ 本ドキュメント
 📄TinyBASIC早見表.pdf ・・・・ チートシート
 📄manual.pdf ・・・・・・・・・ マニュアル(旧)
 📄platform.local.txt ・・・・・コンパイルオプション定義(OLEDコントローラ指定用)
 📄キーワード.html ・・・・・・ キーワード一覧(コマンド簡易説明書HTML版)
 📄キーワード..pdf ・・・・・・ キーワード一覧(コマンド簡易説明書PDF版)

Arduino IDEでスケッチをコンパイルする場合は、
Arduino IDEの環境設定の スケッチブックの保存場所に
📁ttbasic_arduino_stm32\ を 設定して下さい。
これにより、既存の環境・ライブラリとの干渉減らすことが出来ます。

ArduinoSTM32導入
Arduino STM32パッケージは、随時更新されているため動作確認した時点のスナップショットに不具合修正を行った、下記のパッケージをダウンロードして利用して下さい。

git clone https://github.com/Tamakichi/Arduino_STM32.git

ダウンロードしたArduino STM32パッケージのトップフォルダを
📁Arduino_STM32\ とします。
(解凍直後の Arduino_STM32-master から変更して下さい)

Arduino STM32パッケージのトップフォルダは、
📁hardware\の下に配置して下さい。

📁ttbasic_arduino_stm32\
  📁hardware\
   📁Arduino_STM32\

ドライバのインストール
Arduino STM32パッケージに添付のUSBドライバをインストールします。
下記の📁win\📄install_drivers.batをクリックしてドライバをインストールします。

 📁ttbasic_arduino_stm32\
  📁hardware\
   📁Arduino_STM32\
    📁drivers\
     📁win\
      📄install_drivers.bat

Javaのインストール
Arduino STM32のスケッチの書き込みにおいて、java(jre:実行環境)の実行環境が必要となります。
インストールしていない場合は、ダウンロードしてインストールして下さい。

無料Javaのダウンロード https://java.com/ja/download/

install01

無料のJavaのダウンロード をクリックしてダウンロードし、インストールして下さい。
無料Javaのダウンロード https://java.com/ja/download/

2.2. ファームウェアの書込

コンパイル済みスケッチ(ファームウェア) を用意しています。
ファームウェアを直接マイコンボードに書き込んで利用することが出来ます。

プロジェクトファイルのbinフォルダに2つのタイプのファームウェアを用意しています。

ブートローダー無しファームウェア(バイナリー形式)

ブートローダ経由(USB経由)で書き込むタイプのファームウェアです。
Arduino IDE経由で書き込むスケッチと同じものです。

表 9. ブートローダー無しファームウェア(バイナリー形式)

📁ttbasic_arduino_stm32\
 📁bin\
  📄black_medium_small_square:ttbasic_NTSC.bin (NTSCビデオ出力版)
  📄black_medium_small_square:ttbasic_OLED_SH1106_I2C.bin (OLED SH1106 I2C版)
  📄black_medium_small_square:ttbasic_OLED_SH1106_SPI.bin (OLED SH1106 SPI版)
  📄black_medium_small_square:ttbasic_OLED_SSD1306_I2C.bin (OLEDSSD1306/SSD1309 I2C版)
  📄black_medium_small_square:ttbasic_OLED_SSD1306_SPI.bin (OLED SSD1306/SSD1309 SPI版)
  📄black_medium_small_square:ttbasic_Serial.bin (シリアルコンソール版)
  📄black_medium_small_square:ttbasic_TFT.bin (TFT ILI9341版)

ブートローダー付きファームウェア(バイナリー形式)

ブートローダにスケッチを結合したファームウェアです。
ブートローダの書き込み方法と同じように書き込みます。

表 10. ブートローダー付きファームウェア(バイナリー形式)

📁ttbasic_arduino_stm32\
 📁bin\PlusBootloader\
  📄boot_ttbasic_NTSC.bin (NTSCビデオ出力版)
  📄boot_ttbasic_OLED_SH1106_I2C.bin (OLED SH1106 I2C版)
  📄boot_ttbasic_OLED_SH1106_SPI.bin (OLED SH1106 SPI版)
  📄boot_ttbasic_OLED_SSD1306_I2C.bin (OLED SSD1306/SSD1309 I2C版)
  📄boot_ttbasic_OLED_SSD1306_SPI.bin (OLED SSD1306/SSD1309 SPI版)
  📄boot_ttbasic_Serial.bin (ターミナルコンソール版)
  📄boot_ttbasic_TFT.bin (TFT ILI9341版)

ブートローダー無しファームウェアの書込み手順
利用するマイコンボードにArduino STM32用のブートローダーが書き込まれている必要があります。
BluePillボード への書き込みは下記の記事等を参考して行って下さい。

1. ファームウェア書込み手順

1-1. ttwrite.batを修正します
ttwrite.bat の修正をエディタ(メモ帳でもOK)で開き、
dev にマイコンボードのUSBポートが利用するシリアルポートを指定します。
COMは必ず半角大文字で記述して下さい。

ttwrite.bat
set dev=COM4
・・・

1-2. コマンドプロンプト上でコマンド実行
コマンドプロンプトを起動します。
カレントディレクトリを 📁ttbasic_arduino_stm32\📁bin\ に移動し、
次のコマンドを実行します。

ttwrite ファームウェアファイル

ファームウェアファイル は各自の利用目的に応じて選択して下さい。

ttwrite ttbasic_TFT.bin を書き込む場合の例
ttwrite ttwrite ttbasic_TFT.bin
install02

コマンド実行しても書き込みが開始されない場合、ボード上のリセットボタンを押すことで、ブートローダーが強制的に書込みモードに切り替わります。試してみて下さい。

別の方法として、エクスプローラー上で ttwrite.bat アイコン上にブートローダー無しファームウェアファイルのアイコンをドラック&ドロップすることで書き込むことが出来ます。

install03

ブートローダー付きファームウェアの書込み手順

ブートローダーと同じ方法で書き込むこと出来ます。
(プログラマ ST-LINK を利用して、STM32 ST-LINK Utility での書き込み)

ここでは添付の ttbtwrite.bat コマンドを使ったシリアル接続による方法を説明します。

1. 事前準備

install04

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に設定します。

install05

BOOT0 :1
BOOT1 :0

2. 書込み作業

2-1 コマンドプロンプトを起動します
カレントディレクトリを 📁bin\PlusBootloader\ に移動し、 

2-2. 次のコマンドを実行します

ttbtwrite ブートローダー付きファームウェアファイル

ブートローダー付きファームウェアファイル は同じフォルダ内にあります。
各自の用途に合わせて選択指定して下さい。

ttbtwrite boot_ttbasic_Serial.bin を実行した例:
ttbtwrite ttbtwrite boot_ttbasic_Serial.bin
install06

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

install07

書込みが完了したら、BOOT0 ジャンバを0に戻して下さい。

2.3. スケッチの書込

Arduino IDEにて、添付のプログラムソース(スケッチ)を使って、
ファームウェアの書き込みが可能です。

手順については、下記のドキュメントにまとめました。
こちらを参照下さい。


3. 利用環境設定

本節では、「豊四季タイニー BASIC for Arduino STM32」を使ってプログラムの開発を行うための環境及びその設定について、解説します。

3.1. 初期設定

「豊四季タイニー BASIC for Arduino STM32」のファームウェア(スケッチ)を初めての利用、またはバージョンの更新を行った場合、内部フラッシュメモリのプログラム保存及びCONFIGデータ保存用の領域の初期化が必要となります。

初期化は次の作業を行って下さい。

  1. プログラム保存領域の初期化 内部フラッシュメモリの初期化を行います。
    詳細については下記の項目を参照して下さい。
    ⇒ 「プログラム保存領域の初期化

  2. 仮想EEPROM領域の初期化 システム設定情報を保存する領域の初期化を行います。
    詳細については下記の項目を参照して下さい。
    ⇒ 「仮想EEPROM領域の初期化

初期化を行った場合、再設定が必要となります。

3.2. PS/2キーボード

PS/2キーボードは、日本語キーボードとUSキーボードに対応しています。
デフォルトでは日本語キーボード対応になっています。
利用するキーボードのタイプを一時的に切り替えるにはCONFIGコマンドを利用します。

書式

CONFIG 1,キーボード選択(0:日本語キーボード 1:USキーボード)

USキーボードに切り替える
CONFIG 1,1
日本語キーボードに切り替える
CONFIG 1,0

設定した状態を保存するののは、SAVECONFIGコマンドを実行します。

設定の保存
SAVECONFIG

これにより、次回以降の利用にも反映されます。

3.3. コンソール画面設定

コンソール画面は、画面解像度、画面文字サイズ、画面の向きなどの設定変更が可能です。
表示設定は利用しているデバイスコンソール画面(シリアル、NTSC、OLED、TFT)により異なります。

下記に表示設定を行う、コマンドを利用するこで、表示設定を行うことができます。

表 11. 表示設定
画面 コマンド 説明

NTSC

SCREEN n

画面解像度を設定します。
n:スクリーンモード(デフォルト 1)
1:画面解像度 224×216ドット、テキスト 37×27文字
2:画面解像度 224×108ドット、テキスト 37×13文字
3:画面解像度 112×108ドット、テキスト 18×13文字

TFT液晶

SCREEN n [, m]

画面フォントサイズ、画面向きを設定します。
n:スクリーンモード(デフォルト 1)
1:画面解像度 320×240、ノーマルフォント テキスト53×30文字
2:画面解像度 320×240、2倍角フォント テキスト26×15文字
3:画面解像度 320×240、3倍角フォント テキスト17×10文字
4:画面解像度 320×240、4倍角フォント テキスト13×7文字
5:画面解像度 320×240、5倍角フォント テキスト10×6文字
6:画面解像度 320×240、6倍角フォント テキスト 8×5文字

m:画面向き
0~4:時計回りに90°づつ回転(デフォルト 3)

COLOR n [, m]

テキスト文字色、背景色を設定します。
n:文字色 0~8 、$0000~$FFFF
m:背景色0~8 、$0000~$FFFF

COLORコマンドの色指定については、
コマンドリファレンス「COLOR 文字色の設定」を参照して下さい。

COLORコマンド実行後、CLSコマンドを実行するか、
[F1]キーを押すことで画面全体に色設定が反映されます。

OLED

SCREEN n [, m]

n:スクリーンモード
1:画面解像度 128×64、ノーマルフォント テキスト21×8文字
2:画面解像度 128×64、2倍角フォント テキスト10×4文字
3:画面解像度 128×64、3倍角フォント  テキスト7×2文字

m:画面向き
0~4:時計回りに90°づつ回転(デフォルト 0)

シリアルコンソール

WIDTH n , m

テキスト表示の縦・横文字数を設定します。
n:横文字数 16 ~ 128(デフォルト 80)
m:縦文字数 10 ~ 45(デフォルト 24)

USBシリアルポートまたは、GPIOシリアルポート接続を
コンソール画面として利用している場合に設定可能です。

SMODE n [, m]

2つのシリアルポートの機能を切り替えます。

  • SMODE 0
    USBシリアルポートをコンソール画面として利用し、
    GPIOシリアルポートはデータ通信用に利用します。

  • SMODE 1, "通信速度"
    GPIOシリアルポートをコンソール画面として利用し、
    USBシリアルポートはデータ通信用に利用します。
    第2引数には通信速度を指定します。
    例:SMODE 1,"115200"

  • SMODE 2
    シリアル通信禁止
    ターミナル対話利用のコンソールでの入出力、
    データ通信用の入出力は利用出来ません。
    出力を行った場合は破棄されます。

  • SMODE 3, 制御コード無加工指定
    シリアルターミナルからの制御コードの処理を指定します。
    0の場合、処理を行いません。1の場合は処理を行います。

共通

CONSOLE n

デバイスコンソール画面(NTSC、TFT、OLED)から、
シリアルコンソール画面への切り替えまたは、その逆を行います。

0:デバイスコンソール画面の利用に切り替えます
1:シリアルコンソール画面の利用に切り替えます

シリアルコンソール画面ではPS/2キーボードは利用出来ません。

3.4. シリアル通信

ここでは、Windows 10パソコン上でターミナルソフト TearTermを利用する場合の設定について解説します。

3.4.1. 通信条件

メニュー[設定] - [シリアルポート]から[シリアルポート設定]画面を開いて行います。

tterm config
表 12. 設定項目
項目 設定値

ポート

各自の環境に合わせて設定

ボー・レート

115200(任意)

データ長

8bit

パリティビット

無し

ストップビット

1bit

フロー制御

無し

USB接続の場合、ボー・レートの設定任意です。
GPIOシリアルポート利用の場合は、SMODEコマンドで設定して通信速度を設定して下さい。

通信速度設定例
SMODE 1,"115200"

GPIOシリアルポートで設定可能な通信速度は、
利用しているUSB-シリアル変換モジュールに依存します。

3.4.2. 文字コード設定

改行コード、文字コード、キーボードに関するの指定を行います。

「豊四季タイニー BASIC for Arduino STM32」では1バイトコードの半角カタカナ、シフトJIS全角文字の利用をサポートします。
半角カタカナ、シフトJIS全角文字を利用のためには、利用する文字列コードとしてシフトJISを指定します。

言語設定
メニュー [設定] - [全般設定] - [全般設定]画面 の設定
tterm lang
表 13. 設定項目
項目 設定値

言語

Japanese

言語UI

Japaneze.lng

メニュー [設定] - [端末の設定] - [端末の設定]画面 の設定
tterm setting
表 14. 設定項目
項目 設定値

漢字-受信

SJIS

漢字-受信

SJIS

改行コード 受信

AUTO

改行コード 送信

CR

ウィンドウサイズ

☑チェックを入れる

メニュー [設定] - [キーボード]画面 の設定
tterm keyboard

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

select console 1
図 9. BOOT1とSWCLK

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

select console 2
図 10. 例:シリアルポート接続シリアルコンソール選択の例
注意
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にて長いプログラムソースをペーストした際に取りこぼしが発生する場合は、
送信遅延のタイミングの調整を行って下さい。

tterm config

また、通常ペースト時には一部の制御用文字(BSキーの文字コードなど)が機能してしまい、正しく転送出来ない場合があります。
この場合は、シリアルポートのコンソール画面利用をしていない状態で、
SMODEコマンドを使って一時的に制御用文字コードの機能を無効化してから転送して下さい。

制御用文字コードの機能を無効化

SMODE 3,0

制御用文字コードの機能を有効化

SMODE 3,1
注意
シリアルポートをコンソール画面(スクリーン編集可能な画面として利用している場合)として利用している場合、SMODEコマンドによる制御用文字コードの機能を無効化は行うことが出来ません。

3.10. プログラム退避

内部フラッシュメモリに保存されている、プログラムをパソコンにバックアップする機能として、 EXPORTコマンドを用意しています。

パソコン上のターミナルソフトから接続した状態で、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
実行結果

prg struct01

上記プログラムの構造的は・・・・
  • プログラムは複数の行(行番号+命令文)で構成されます。
    先頭行は行番号 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行FORNEXT コマンドにより、処理を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 コマンドを実行することにより、通常は先頭行から行番号順に逐次実行されます。
この逐次実行は制御文を用いることで条件分岐、繰り返しを行うことが出来ます。

FOR文の例:繰り返し処理を行う
10 FOR A=0 TO 10 STEP 5
20 PRINT A
30 NEXT A

以下に制御命令の一覧を示します。

制御命令・書式 概要

END

プログラムの終了

FOR 変数 = 初期値 TO 最終値 [STEP 増分]
 <繰り返し実行文(複数行可能)>
NEXT 変数

処理の繰り返し

GOSUB 行番号
GOSUB "ラベル"

サブルーチンの呼び出し

GOTO 行番号
GOTO "ラベル"

指定行にジャンプ

IF 条件式 真の場合の実行文
IF 条件式 真の場合の実行文 ELSE 偽の場合の実行文

条件判定を行う

RETURN

サブルーチンからの復帰

各制御命令の詳細についれは、それぞれの命令文のコマンドリファレンスを参照してください。

4.4. コマンド・関数

4.4.1. コマンド

コマンドとは何らかの処理を行うプログラム要素です。
コマンドには一般コマンドとシステムコマンドの2種類があります。

一般コマンドはコマンドラインからの直接利用とプログラム内での利用が可能です。
システムコマンドは、プログラムの管理を行うコマンドです。プログラム中で利用した場合、不整合が生じるため、コマンドラインでのみ利用可能としています。

システムコマンドをプログラム中で利用した場合、エラー("Cannot use system command")となります。

例:プログラム内にシステムコマンドDELETEを記述
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$関数のような、変数に代入した文字列の操作を行う関数を用意しています。

例 LEN() 文字列の長さの取得
10 A="ABCDE"
20 L=LEN(A)
30 ?L
RUN
5
OK
例 STR$() 変数で参照している文字列の取得、部分切り出し
10 A="ABCDE"
20 PRINT STR$(A)
30 PRINT STR$(A,4,1)
RUN
ABCDE
D
OK
例 ASC() 指定位置の文字コードの取得 :
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

AとBの積

/

割り算

A/B

AをBで割る

%

剰余算

A%B

AをBで割った余り

4.8.2. ビット演算子

演算子 説明 記述例 説明

&

ビット毎のAND演算

A&B

AとBのビット毎のAND

|

ビット毎のOR演算

A|B

AとBのビット毎のOR

>>

ビット右シフト演算

A>>B

Aを右にBビットシフト

<<

ビット左シフト演算

A<<B

Aを左にBビットシフト

~

ビット毎の反転

~A

Aの各ビットを反転

^

ビット毎のXOR

A^B

AとBのXOR

比較演算、論理演算の論理反転は、0が偽、0以外が真となります。
0以外が真となりますので、1、-1はとも真となります。

4.8.3. 比較演算子

演算子 説明 記述例 説明

=

等しいかを判定

A=B

AとBが等しければ真,異なれば偽

!=
<>

異なるかを判定

A!=B
A<>B

AとBが異なれば真,等しければ偽

<

小さいかを判定

A<B

AがB未満であれば真、そうでなければ偽

<=

小さいまたは等しいかを判定

A<=B

AがB以下であれば真、そうでなければ偽

>

大きいかを判定

A>B

AがBより大きければ真、そうでなければ偽

>=

大きいまたは等しいかを判定

A>=B

AがB以上であれば真、そうでなければ偽

4.8.4. 論理演算子

演算子 説明 記述例 説明

AND

論理積

A AND B

A,Bが真なら真、でなければ偽

OR

論理和

A OR B

A,Bどちらかが真なら真、でなければ偽

!

否定

!A    

Aが真なら偽、偽なら真

4.8.5. 演算子の優先順序

演算子の優先度を下記に示します。優先度の数値が小さいほど優先度が高くなります。
計算結果が意図した結果にならない場合は、優先度の確認、括弧をつけて優先度を上げる等の対応を行って下さい。

表 15. 演算子の優先度
優先度 演算子

1

括弧で囲った式

2

!, ~

3

*, / , % , &, |, << , >> , ^

4

+ , - ,

5

=, <> , != , >, >= , < , <= , AND , OR

比較演算子と論理演算は優先度が同レベルです。比較演算子の演算を先に行う場合は、 括弧を使って優先度を上げて下さい。

例:
?1<5 and 2>3
0
?(1<5) and (2>3)
1

4.9. 式

式とは 11+1AA+1ABS(-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」では定義済の定数が利用出来ます。
定数はコマンドの引数や式の中で数値関数と同等に利用出来ます。

利用出来る定数の例
HIGHLOWONOFF ・・・ ビット値(0 or 1)
PA0PA ・・・ ピン番号
CWCHGWGH ・・・ 画面サイズ

詳細については、「コマンドリファレンスマニュアル」の「定数」を参照下さい。