ライン

I/O機器制御対応BASIC搭載テレビゲームシステム MachiKania type M

ライン

2018年8月3日
最終更新日 2018年11月11日 LCDシールドのサンプルプログラム修正

 MachiKania type Mは、カラーグラフィック機能搭載のMachiKania type Zの上位モデルに当たります。より高精細で色数アップしたカラーグラフィックに加え、豊富な汎用I/Oポートを備えることで、外部入出力機器の接続に対応しました。
 これにより、テレビゲームだけではなく、様々な機器の制御を行うことができるようになりました。例えば各種センサーや小型の液晶ディスプレイを接続し、読み取った値を常時液晶画面に表示する、または、モーターを搭載した機器を接続して、動きの制御を行うことも可能です。もちろん、制御プログラムはゲーム同様に高性能BASICを使って、簡単に記述することができます。
 何をつなぐかはあなた次第。様々な機器が接続できると夢が広がります。さあ、あなたもハードウェアプログラミングで夢を形にしませんか?

従来バージョンMachiKania type Z」はこちら

トップ画像


MachiKania type Mでできること

 MachiKania type Mでは以下のようなことができます。
 ・テレビにつないで電源を入れればすぐにゲームが始められます。
 ・キーボードをつなげば、高性能BASIC言語で本格的なオリジナルのゲームを作ることができます。
 ・SDカードにプログラムやデータを保存したり、パソコンとやり取りしたりできます。
 ・ハードウェアもソフトウェアも公開されているので、全て自分で製作することができます。
 ・最大384×216ドット、256色同時表示可能なカラーグラフィックが使えます。
 ・多数の入出力ポートを備え、BASICから外部接続機器の制御ができます。
 ・32ビット単精度の浮動小数点演算をBASICでサポートし、各種の数学関数が使えます。
 ・構造化プログラミングに対応しており、GOTO文を使わないプログラムが作れます。
 ・従来のMachiKania type Zの上位モデルに当たり、BASICの互換性があります。

レイトレーシング

I/O誌1986年7月号(吉森昌弘氏作)から移植

LEDマトリクス制御

市販のLEDディスプレイをBASICで制御


MachiKania type Mの作り方

 以下の3つの手順で製作します。
 1. ハードウェアの製作
 2. マイコンにブートローダプログラムの書き込み
 3. SDカードに必要ファイルをコピー


(1)ハードウェアの製作

 MachiKaniaシリーズは回路図、ソースプログラムとも公開されたオープンなシステムです。回路図からご自身で基板を作成することもできますが、プリント基板を用意していますので、ここではプリント基板からの製作のポイントを説明します。プリント基板の入手方法はこちらを参照してください。

使用部品一覧表はこちら

水晶発振子の秋月電子部品番号を訂正しました。


マイコンについて
 使用するマイコンは64ピンQFPのPIC32MX370F512Hです。表面実装でピン間隔が大変狭いため、チップ直接の基板へのハンダ付けは慣れていないと難しいですが、秋月電子から変換基板に実装済み製品が販売されています。本基板はどちらでも使えるようになっているので、どちらかをお選びください。
 なお、マイコンチップの取り付け向きには十分注意してください。基板の向きとチップ上の印刷の向きが異なりますので、1番ピンのマークを必ず確認してから取り付けてください。
 変換基板を使用する際、基板にピンソケットを使用することも考えられますが、液晶などのシールド基板を使用する場合は上にかぶさりますので、背の低いソケットを選び、シールドとぶつからないことを確認してください。

電源コネクタについて
 電源は+5V、1A程度のACアダプタなどをご用意ください。電源コネクタはセンタープラスのDCジャックおよびUSBマイクロBタイプのものが利用可能です。どちらか一方または両方のコネクタを取り付けてください。USBマイクロBのコネクタは基板裏面に取り付けます。SDカードスロット基板の裏面となりますので、SDカードスロットより先にハンダ付けが必要です。

ICSP用ピンヘッダについて
 PICkit3を差した時、隣りのピンソケットに少しぶつかります。書き込みは可能ですが、この端子はマイコンにブートローダプログラムを書き込む際に1度だけしか使用しませんので、私はハンダ付けせずに、後述の写真のように書き込み時にピンヘッダを斜めに押し付けて、書き込みが終わったら外しています。

三端子レギュレータについて
 表面実装品のNJM2845DL1-33となります。最初にピンセットなどでICを固定した状態で1つのピンをハンダ付けしてから、残りのピンをハンダ付けしてください。

回路図

回路図 (クリックで拡大)


プリント基板

プリント基板  基板入手方法

完成写真

マイコンチップ直付け(左)と変換基板による実装(右)
(クリックで拡大)

USBマイクロBコネクタ

USBマイクロBコネクタは裏面に取り付け


部品表掲載以外に必要なもの
電源5V、1A程度のACアダプタ。USBマイクロBのものも対応
PICkit3/PICkit4ブートローダの書き込みに必要。PIC32に書き込みができれば他のものでもOK
マイクロSDカード1GBもあれば十分
パソコンPICkit3等利用時、SDカードの初期コピー作成時に使用
SDカードリーダライタパソコン連携する際に必要
テレビビデオ入力端子のあるもの。パソコンのビデオキャプチャユニットなどでも利用可能
PS/2キーボードBASICプログラムを組む際必要
ビデオケーブル、音声ケーブルテレビに接続します


(2)ブートローダプログラムの書き込み

 MachiKaniaシリーズでは、SDカードに保存された実行用のHEXファイルをテレビ画面上で選択して、マイコンに書き込みを行います。このブートローダプログラムを最初に一度だけマイコンに書き込む必要があり、PICkit3などの書き込み器をICSP端子に接続して書き込みを行います。
 基板の製作が完了した後、MPLAB X IDEに付属のMPLAB IPEを使用して、下記ダウンロードコーナからダウンロードして「bootloader.hex」ファイルの書き込みを行います。その際、マイコンへの通電が必要ですので、基板に電源を接続しスイッチを入れるか、PICkitからの通電するよう設定を行ってください。

PICkit3接続の様子1

PICkit3接続の様子2

PICkit3接続の様子

(3)SDカードの準備

 MachiKania BASICシステムではSDカードまたはマイクロSDカードが必須です。FAT16およびFAT32フォーマットに対応しています。使い方にもよりますが、容量は1GBもあれば十分です。先ほどダウンロードしたファイルからbootloader.hex以外の拡張子「HEX」のファイルと拡張子「BAS」のファイル、および「MACHIKAM.INI」、デモ用のGIFファイルをパソコンに接続したSDカードリーダライタを使って、SDカードにコピーします。ファイルは全てルートディレクトリにコピーしてください。このSDカードはいつもMachiKaniaのSDカードスロットに挿入しておいてください。

SDカードにファイルコピー

SDカードにファイルコピー


ダウンロード

 ここまでに紹介したシステムに関するファイルをダウンロードできます。

Download 動作に必要なファイルとサンプルファイル一式(bootloader.hex以外はSDカードにコピーする)
bootloader.hexブートローダ本体。PICkit3等を用いてPICマイコンに書き込む
MACHIKAM.HEXMachiKania type M BASICシステム。SDカードに入れてブートローダから書き込みと実行
MACHIKAM.INIMachiKania type M BASICシステムの設定ファイル
その他ファイル「.BAS」ファイルはBASICサンプルプログラム。「.HEX」ファイルはブートローダで起動可能な実行ファイル(C言語で作成したサンプルゲームなど)
Download ソースファイルおよびライブラリファイル一式
ps2keyboard370f.X.aPS/2キーボード用ドライバ
lib_videoout_megalopa.X.aビデオ出力ライブラリ
sdfsio370fLib.X.aSDファイルアクセス用ライブラリ
app_p32MX370F512H.ldブートローダ対応プログラムを作成するためのリンカースクリプト
その他ファイルMachiKania BASICシステムソースファイル。LGPL(v2.1)のライセンスに基づきソース公開しています。


使い方

MachiKaniaブートローダ

 ビデオ出力端子をテレビのビデオ入力端子(黄)に、音声出力端子をテレビの音声入力端子に接続し、PS/2キーボードも接続すれば、いよいよ電源を接続してください。正しく作られていれば、右図のようなMachiKaniaブートローダの画面が表示されます。
 ブートローダはSDカード上のHEXファイル(マイコンの機械語プログラムをテキスト形式にしたファイル)をマイコンのフラッシュメモリに書き込むシステムです。画面上には拡張子「.HEX」を省略して表示しています。
 MachiKania type M上の4方向ボタンを使って「MACHIKAM」を選択し、FIREボタンを押すと、BASICシステムのPICマイコンへの書き込みが開始されます。書き込み中は画面表示が停止されますが、数秒後に表示再開し、MachiKania type MのBASICシステムが起動します。
 一度ブートローダを使って書き込みを行うと、次回電源オンやリセット時にはその書き込まれたプログラムが起動します。再度ブートローダ画面を表示するには、MachiKania本体の6個のボタンのどれでもよいので、押しながら電源オンまたはリセットします。

ブートローダ画面

ブートローダ画面

MachiKania type M BASICシステム起動画面

MachiKania type M BASICシステム起動画面

MachiKania type M BASICシステム

 MachiKania type Mに搭載のBASICシステムは、Katsumi氏作成の構造化プログラミングに対応したBASICコンパイラ KM-1300(KM-BASIC)です。
 まずは右図のプログラムを打ち込んでみてください。KM-BASICの構文ではアルファベットの大文字、小文字は区別されません。昔のBASICシステムではEnter (RETURN)キーを押すまで行入力完了となりませんでしたが、このエディタはWindowsのメモ帳や最近の普通のテキストエディタと同様の感覚で使用することができ、Enterキーはただの改行ためのキーです。
 打ち終わったら、いよいよ実行です。実行(RUN)はファンクションキーF4です。うまく実行結果画面のようになりましたか?もしエラーが出た場合、どれかキーを押してエディタ画面に戻り、エラー修正してから再度実行してください。
 このまま電源を切るとプログラムは消えるので、必要であればSDカードに保存します。保存はファンクションキーF2で行います。ファイル名は英数8文字以内+「.BAS」または「.TXT」としてください。大文字、小文字は区別されません。
 BASICプログラムエディタ上で使用できる特殊キーは右表の通りです。Shift+矢印キーで範囲選択しコピー/ペーストする機能もあります。ただしコピーできるのは1画面に収まる範囲内に限定です。
 カナ文字はScroll Lockキーまたはカタカナひらがなキー(スペースキーの2つ右)でカナモードに入り、キーボードの刻印の通り(ローマ字入力ではなく)直接入力します。もう一度Scroll Lockキーかカタカナひらがなキーを押すことで英数モードに戻ります。


終了方法

 MachiKania BASICシステムのエディタから起動したBASICプログラムは、以下のいずれかで終了できます。終了すると「OK」または強制終了の場合「Break in xxx」(xxxは行番号)と表示され、何かキーを押すことでエディタ画面に戻ります。

 1.プログラムが最後まで到達またはEND命令を実行
 2.キーボードのCtrl+Pause/Breakキーを押す

 また、電源を切る際はなるべくBASICの実行を終了させて、エディタ画面に戻ってからとしてください。MachiKania BASICシステムでは、プログラム実行前にSDカード上に「~TEMP.BAS」というファイル名でプログラムを一時保存します。実行中に電源を切ると異常終了したものと判断し、次回起動時にこのファイルを読み込みます。実際に異常終了した場合はここでF2キーを押して名前を付けてSDカードに保存することで、プログラムの消失を防ぐことができます。この一時ファイルは、プログラムの保存またはBASICプログラムの終了により自動的に消えます。

 なお後述の自己実行アプリケーションとしてBASICプログラムを実行した場合は、キーボードやボタンによる強制終了はできず、一時ファイルが作成されることもありませんので、実行中に電源を切っても問題ありません。

BASICプログラムサンプル

BASICプログラムサンプル


サンプルプログラム実行結果

サンプルプログラム実行結果


エディタ使用キー一覧
エディタ使用キー一覧




MachiKania type Mの詳細

 ここからはMachiKania type Mのより詳細な使い方や機能の説明をします。

MachiKania type Zからの主な強化点

 画面出力モードの強化
 テキスト画面、グラフィック画面とも解像度アップし、またテキスト画面とグラフィック画面の重ね合わせが可能となりました。これまでワイドテレビに映した場合横長のドットとなっていましたが、ワイドテレビで正方画素となるワイド画面モードが追加されました。
 従来のMachiKania type Z互換のテキスト、グラフィックモードにも対応しています。BASICプログラム起動時は従来との互換性を重視し、横30×縦27文字のテキストモードです。

追加された画面出力モード
標準テキストモード横36×縦27文字、256色同時表示
ワイドテキストモード横48×縦27文字、256色同時表示
モノクロテキストモード横80×縦27文字、モノクロ表示
標準グラフィックモードグラフィック横288×縦216ドット、テキスト横36×縦27文字、256色同時表示
ワイドグラフィックモードグラフィック横384×縦216ドット、テキスト横48×縦27文字、256色同時表示

 外部接続端子の追加
 MachiKania type Mでは、従来のMachiKaniaシリーズになかった汎用外部入出力端子を32ポート備えています。プリント基板では右図のように、5つのコネクタにV〜Zを割り振っています。Xを除く4つはArduino UNOを意識してピンを配置していますので、いくつかのシールドは使えるかもしれません。
 KM-BASICの命令、関数では以下のポート利用をサポートしています。

RB0〜RB15デジタル出力、デジタル入力、アナログ入力として汎用的に使用可能。1ビットごと、または8ビットおよび16ビット単位で使用可能
RE5〜RE7デジタル出力、デジタル入力、アナログ入力として汎用的に使用可能。1ビットごとに使用可能。ただし、デジタル出力時はオープンドレイン出力に限定
RD10、RD11PWM出力に対応。PWM出力は音声出力と排他利用となるので注意
RC13、RC14シリアル入出力に対応
今後予定SPI、I2C命令に対応予定


I/Oポート

プリント基板のI/Oポート配置図
I2C、SPIは今後対応予定

 ステレオ音声対応、WAVEファイル再生対応
  従来はモノラル音声出力でしたが、ステレオ音声出力に対応しました。
  また、SDカードに保存された8ビット、ステレオ(もしくはモノラル)、サンプリング周波数15.7KHzおよび16KHzのWAV形式音声ファイルの再生に対応しました。ただし、16KHzファイルも15.7KHzでの再生となるため、やや低音で再生速度が遅くなります。


主なスペック

使用マイコンMicrochip社PIC32MX370F512H
動作クロック95.45453MHz
使用可能RAM容量BASIC利用時は約100Kバイト。ただし、グラフィック機能使用時はビデオメモリとして28K〜81Kバイトを占有
搭載言語BASIC コンパイラー KM-1300
映像方式NTSCカラーコンポジット(SDTV)
記録メディアマイクロSDカードが使用可能。FAT16またはFAT32フォーマット。ファイル名は英数字と一部記号のみ、8文字+拡張子3文字まで(大文字、小文字の区別なし)
キーボードPS/2キーボードを接続可能(日本語およびUS配列に対応)
テキスト表示機能(横)30文字、36文字、40文字、48文字、80文字から選択。(縦)27文字
256色同時表示可能、カラーパレットでRGBそれぞれ8ビット指定
グラフィック機能256×224ドット(16色同時表示)、288×216ドット(256色同時表示)、384×216ドット(256色同時表示)
ユーザ定義文字(PCG)機能あり(256文字)
音楽再生機能ステレオ(ABC記譜法、WAV形式ファイル)

設定ファイルについて

 SDカードに「MACHIKAM.INI」というファイルを入れておくと、MachiKania BASICシステム起動時に読み込んで初期設定を行います。ファイルに下記の項目名の行を追加することで設定します。
 先頭に#を付けると無効な行となります。


MACHIKAM.INIファイル設定項目
項目名設定内容
106KEY日本語キーボードに設定
101KEYUSキーボードに設定
NUMLOCK起動時Num Lockキーオン
CAPSLOCK起動時Caps Lockキーオン
SCRLLOCK起動時Scroll Lockキーオン
WIDTH36起動時36文字モード
WIDTH48起動時48文字モード
WIDTH80起動時80文字モード

設定ファイルサンプル

設定ファイルサンプル

KM-BASICについて

 MachiKania type MのBASICシステムに搭載しているBASICコンパイラはKatsumi氏作成のBASIC Compiler KM-1300 (KM-BASIC)です。
 このBASICでは-2147483648〜+2147483647の数が扱える32ビット整数型のほか、32ビット浮動小数点数、文字列を扱うことができます。
 かつてBASICといえば、行頭に必ず行番号の入力が必要でしたが、KM-BASICでは必ずしも必要ありません。行番号を指定した場合、GOTO文などの飛び先を表すラベルと同様の扱いとなります。
 KM-1300の詳細な仕様については、こちらのリファレンスを参照してください。
 また、MachiKania type Zで採用の従来バージョンであるKM-1200と互換性があります。KM-1200の使い方を解説したドキュメントがこちら(入門MachiKania)にありますので、ぜひご一読ください。
 KM-1300で新たに追加や強化された主な命令、関数は右の表の通りです。I/O関連、ビデオ画面モード関連、WAVEファイル演奏関連などが追加されています。具体的な使い方については後述のサンプルプログラムを参照してください。

KM-1300で追加、強化された主な命令
PLAYWAVE15.7KHzでサンプリングされたWAV形式のファイルを再生
SERIALシリアルポートの設定
SERIALOUTシリアルポートに出力
PWMRD10またはRD11にPWM出力
OUTRB0〜RB15、RE5〜RE7の個別ビットに出力
OUT8LRB0〜RB7に8ビットデータ出力
OUT8HRB8〜RB15に8ビットデータ出力
OUT16RB0〜RB15に16ビットデータ出力
WIDTHテキスト画面文字数設定。30、36、40、48、80から選択。80はモノクロモード
USEGRAPHICグラフィック画面設定。288×216(256色)、384×216(256色)を追加


KM-1300で追加、強化された主な関数
PLAYWAVE再生中WAVファイルの位置や残り数を取得
ANALOGRB0〜RB15のアナログ値を取得
INRB0〜RB15、RE5〜RE7の個別ビットの入力値を取得
IN8LRB0〜RB7の8ビットデータ入力値を取得
IN8HRB8〜RB15の8ビットデータ入力値を取得
IN16RB0〜RB15の16ビットデータ入力値を取得
SERIALINシリアルポートから読み込み

キャラクターコード表

 MachiKania BASICシステムのキャラクターコード表は右画面のようになっています。NEC製の往年の名機「PC-8001」とほぼ同じです。フォントについても参考にして作りました。
 グラフィック文字($80〜$9F、$E0〜)はキーボードから入力する機能がありませんが、この表を参考にしてCHR$関数を使うことで利用可能です。
 また、PCG(ユーザ定義文字)機能を使えば、全てのキャラクターのフォントパターンを自由に変更することができます。1キャラクターのサイズは8×8ドットです。ゲームのオリジナルキャラクター作りにも応用できます。

キャラクターコード表

キャラクターコード表

BASICプログラム自己実行アプリケーションの作り方

 MachiKaniaは大きく分けると、SDカード上のアプリケーションファイル(HEXファイル形式)をマイコン上のプログラムフラッシュに書き込む「ブートローダ機能」と、BASICのソースプログラムを編集・実行する「BASICシステム機能」の2つの機能を提供しています。
 ブートローダ機能を使ってプログラムフラッシュに書き込みを行うと、次回から単純に電源オンやリセットした場合、その書き込まれたアプリケーションを起動します。実際にはBASICシステムも1つのアプリケーションとして動作しています。

 これまではBASICプログラムの実行方法として、BASICシステムでエディタを起動し、ソースプログラムを読み込んでRUN(実行)するという手順を説明しましたが、エディタを起動せずにBASICプログラムがあたかも1つのアプリケーションであるかのように起動する方法があります。
 BASICシステムのエディタでプログラムを作成し、完成したら、Shift+F2キーで「自己実行アプリケーション生成」を起動します。ここでまず、BASICソースプログラムに名前を付けてSDカードに保存します。この時、拡張子は必ず「BAS」としてください。
 BASICソースプログラムの保存が終わると、続いてBASIC自己実行用ファイルのコピーが始まります。少し時間が掛かるので途中で電源を切ったりせず、終了するまでお待ちください。
 コピー終了後、基板上のどれかのボタンを押しながらリセットすることで、ブートローダを起動します。この時、先ほど名前を付けて保存したプログラム名が表示されるので、選択してFIREボタンで書き込みを行い完了すると、KM-BASICのコンパイル画面が表示された後、BASICプログラムが実行されます。
 実際の仕組みとしては、MachiKania BASICシステムは起動した自分自身のファイル名をチェックし、「MACHIKAM.HEX」であればエディタを起動、それ以外であれば例えば「HOGEHOGE.HEX」だとすると、「HOGEHOGE.BAS」というBASICのソースファイルを読み込み自動的にコンパイルと実行を行うように作られています。先ほどの「自己実行アプリケーション生成」では、SDカード上の「MACHIKAM.HEX」のコピーをBASICソースの名前でコピーしていたことになります。
 この機能により、次回電源オンやリセットを行うとこのBASICプログラムが自動的に起動するようになるので、完成したゲームプログラムなどを何度もプレイする場合に便利となります。

実行方法イメージ図

実行方法イメージ図


自己実行アプリケーション生成

自己実行アプリケーション「BLOCK」の生成。画面上「MACHIKAN.HEX」とありますが、type Mの場合実際は「MACHIKAM.HEX」です


ブートローダからBASICプログラム起動

ブートローダからBASICプログラム「BLOCK」を起動






MachiKania type M使用サンプル

 MachiKania type Mを使ったサンプルを紹介します。

LEDディスプレイ制御

 こちらで購入した64×32ドットのLEDマトリクスディスプレイを、MachiKania type Mに接続し、BASICで制御しました。下の表にしたがってMachiKaniaとLEDディスプレイのコネクタを接続します。LEDディスプレイ用に12Vの電源が別途必要です。

ダウンロード LEDDEMO1.BAS

(参考)PIC32のDMA機能を使ったLEDディスプレイ表示実験

接続図

LEDディスプレイ接続




LCDシールド

 JA1WBYさんにいただいた2.4型液晶ディスプレイシールドを接続しました。調べてみるとよくあるパターンのピンアサインらしく、互換品でも動作するかもしれません。
 液晶コントローラはILI9325で、BASICプログラムで初期化や描画を行っています。
 表示している画像は、I/O誌1986年7月号に掲載(吉森昌弘氏)されたレイトレーシング(光線追跡法)という手法を用いた3Dグラフィックを、計算アルゴリズムはほぼそのままで再現したものです。

ダウンロード RAYTRLCD.BAS

 (2018.11.11)液晶の設定が間違っていたのを修正しました。誤ってILI9325用ではないものを使用していたため、表示が左右逆になっていました。

LCDシールド




WiFiチップ接続

 トランジスタ技術2016年9月号を参考に、WiFi機能搭載マイコンESP WROOM-02をシリアル接続しました。WiFiアクセスポイント経由で5秒おきに時刻サーバから日付と時刻を読み出して画面表示します。
 118行目のAT+CWJAPコマンド行の「ssid」「password」は実際のアクセスポイントのものに変更してください。

ダウンロード WROOM-02.BAS

 慌てて作ったので、うるう年の計算など正しく出来ていないかもしれません。ご容赦ください。

接続図

WiFi接続
画面表示






プリント基板の入手方法

 MachiKania type Mのプリント基板、および部品セット(ブートローダ書き込み済み)を購入することができます。


Assemblage
秋葉原にあるハンダ付けができるスペースです。プリント基板のみですが、1枚400円で販売中です。本当はIchigoJamの展示場所ですが、同じBASICマイコン仲間として、MachiKania type Mの実機も設置していただきました。

オレンジピコショップ
ORANGE picoはMachiKaniaと同じPIC32MXで動作するBASIC搭載マイコンボードです。Webショップを開設されており、MachiKania type Mの部品セットの販売を引き受けてくれました。マイコンにはブートローダプログラムを書き込み済みです。(2018.8)
ケンケンのホームページ掲示板「管理者へメール」から「TypeM基板購入希望」と記載の上、ご連絡ください。1枚400円で郵送します。




 何かご不明点やご意見などありましたら、お気軽にこちらの掲示板に書き込みをお願いします。



Copyright (C) KenKen All Rights Reserved.