このページは開発終了した初代MachiKaniaのページです。 Raspberry Pi Pico搭載ビデオ出力モデル「MachiKania type PU」はこちら(2024.12.28〜) Raspberry Pi Pico搭載液晶モデル「MachiKania type P」はこちら(2022.8.27〜) PIC32MX上位モデル「MachiKania type M」はこちら(2018.8.3〜) 2代目モデル「MachiKania type Z」はこちら(2016.8.5〜) |
2016年2月6日
最終更新日 2018年7月8日 プリント基板R1.4の部品表と実装拡大写真掲載
自分で電子工作をして、オリジナルのテレビゲームを作ることが出来たら、どんなにか楽しいでしょう。友人に、自分の子供達に、自慢してみたくありませんか?MachiKaniaは、そんなゲーム作成の環境を提供します。部品は秋葉原で安価に手に入るものばかり。BASIC言語による手軽なプログラミングと、高速実行を実現するコンパイラ、家庭のテレビにつないで、簡単にカラフルなゲーム作りが楽しめます。作ったプログラムはSDカードに保存されるので、パソコンへのバックアップもできます。また、パソコン上で作ったBASICプログラムを転送することも簡単です。
さあ、それでは早速MachiKaniaを作るところから始めましょう!
MachiKaniaで以下のようなことができます。
・テレビにつないで電源を入れればすぐにゲームが始められます。
・キーボードをつなげば、BASIC言語でオリジナルのゲームを作ることができます。
・カラー表示対応なので、カラフルなゲームが作れます。
・自分のオリジナルキャラクターを使ったゲームが作れます。
・BASICの実行は大変高速なので、本格的なゲームが作れます。
・作ったゲームはSDカードに保存することができます。
・SDカードを使ってパソコンからプログラムをコピーすることができます。
・ハードウェアもソフトウェアも公開されているので、全て自分で製作することができます。
以下の3つの手順でMachiKaniaを製作します。
1. ハードウェアの製作
2. マイコンにブートローダプログラムの書き込み
3. SDカードに必要ファイルをコピー
右図が全体回路図になります。ワンチップのシンプルな構成なので、あまり難しいところはないと思います。ブレッドボード上にお試しで作ることもできます。
(2016.4.3)プリント基板の頒布を始めました。詳細
(2016.9.19)部品セットも購入可能になりました。詳細
<ボタン類>
PICマイコンPIC32MX250F128Bを中心に各種インターフェイスがあります。操作用ボタンは十字に4つの方向ボタン、横にSTARTボタン、FIREボタンを配置します。本体基板とは別の基板に作ってケーブル接続するのもありでしょう。
マイコンのI/Oポート数の関係で、左ボタンおよび右ボタンはキーボード用の信号と同じポートを共有しています(RB8、RB9)。ボタンとキーボードで信号が衝突しないよう、キーボードの信号ラインにトランジスタを挿入し、RA1ポートで排他制御する構造になっています。
このRB8、RB9ポートはPS/2インターフェイスに接続するため、マイコンの内部設定でオープンドレイン接続になっており、+5Vにプルアップしています。
<コネクタ類>
MachiKaniaでは、SDカードまたはマイクロSDカードが必須です。マイクロSDカードスロットはハンダ付けが大変なので、こちらのマイクロSDカードスロットDIP化キットを利用するのがお勧めです。ほかにもPS/2コネクタや映像、音声用RCAジャック、ACアダプタ用DCジャックも同様のDIP化キットがあるので、ブレッドボードやユニバーサル基板で製作する場合には大変便利です。
<クロック>
マイコンのクロック生成用の発振子には必ず3.579545MHzの水晶発振子を用いてください。セラミック発振子ではカラーが出ないことがあります。
<電源>
マイコンおよびSDカードは+3.3V、PS/2インターフェイスは+5Vの仕様のため、電源は+5Vと+3.3Vが必要です。5VのACアダプタを用意し、回路図にあるように三端子レギュレータで3.3Vを作るのが簡単でよいと思います。
電源 | 5VのACアダプタ利用がお勧め。3.3Vはレギュレータで降圧する |
PICkit3 | ブートローダの書き込みに必要。PIC32に書き込みができれば他のものでもOK ブートローダ書き込み済みマイコンを購入すれば不要(入手方法) |
SDカード | 1GBもあれば十分。マイクロSDカードでも可 |
パソコン | PICkit3利用時、SDカードの初期コピー作成時に使用 |
SDカードリーダライタ | パソコン連携する際に必要 |
テレビ | ビデオ入力端子のあるもの。パソコンのビデオキャプチャユニットなどでも利用可能 |
PS/2キーボード | BASICプログラムを組む際必要 |
ビデオケーブル、音声ケーブル | テレビに接続します |
(2016.4.29)ブートローダ書き込み済みマイコン入手方法 詳細
回路が完成したら、マイコンに対してSDカードブートローダプログラムの書き込みを行います。SDカードブートローダは、SDカードからMachiKania BASICシステムなどを読み込み、実行するための基本的なプログラムで、パソコンのBIOSのような位置づけになるものです。プログラムは下のダウンロードコーナーから他のプログラムと合わせてダウンロードしてください。
ブートローダプログラムのPIC32MXマイコンへの書き込みにはパソコンと、マイクロチップ社のPICkit3などのライタが必要となります。また、古いPICkit2でもpic32progというツールを利用することでPIC32MXに書き込むことができます。
ライタによる書き込みは、ブートローダ自体の修正をしない限り一度きりなので、MachiKania本体とは別のブレッドボード上などで行うと、MachiKania本体には書き込み用端子が不要となります。PICkit3で書き込みを行うだけであれば、右の回路図および写真のように非常にシンプルな構成で実現できます。
PIC32MX250F128BとPICkit3が接続できたら、MPLAB X IDEに付属のMPLAB IPEを使用して、「bootloader.hex」ファイルの書き込みを行います。MPLAB IPEの代わりに、前述のpic32progを使って書き込むことも可能です。MPLAB IPEを使う場合の主な手順を図に示しました。電源は別途+3.3Vのものを用意するか、MPLAB IPEの設定でPICkit3から供給するかを選択できます。※
ブートローダプログラムは小さいので、あっけないほど一瞬で書き込みは終了します。書き込みとベリファイに成功した表示があれば完了です。「Disconnect」をクリックして切断して、PICkit3を取り外してください。MachiKania本体とは別基板で書き込みを行った場合は、電源を切断してから、PICマイコンを取り外し、MachiKania本体に挿してください。
※MPLAB IPEでPICkit3から電源を供給する方法 右図の手順Bの代わりに、以下の設定をします。 [Settings]-[Advanced Mode]とし、パスワード「microchip」でログオン。左ボタンの「Power」メニューで[VDD]を3.3V選択し、[ICSP Options]の[Power Target Circuit from Tool]にチェックを入れる。あとは左ボタンで[Operate]に戻る。 |
Raspberry PiでPICのフラッシュメモリに書き込む方法 Raspberry Piがあれば、PICkit3等がなくてもPickleというフリーソフトを使ってPICに書き込むことができます。上記回路図でPICkit3からつながる3つのピンが、抵抗3本をはさんでRaspberry Piに変わるだけです。また、電源もRaspberry Piから取れます。以下に簡単な説明を記載しました。 ラズパイでPIC32MXに書き込み |
MachiKania BASICシステムではSDカードまたはマイクロSDカードが必須です。FAT16およびFAT32フォーマットに対応しています。容量は1GBもあれば十分です。先ほどダウンロードしたファイルからbootloader.hex以外の拡張子「HEX」のファイルと拡張子「BAS」のファイル、および「MACHIKAN.INI」をパソコンに接続したSDカードリーダライタを使って、SDカードにコピーします。本システムはディレクトリ構造には対応していませんので、ファイルは全てルートディレクトリにコピーしてください。このSDカードはいつもMachiKaniaのSDカードスロットに挿入しておいてください。
ここまでに紹介したシステムに関するファイルをダウンロードできます。
PIC32MX170F256B/PIC32MX270F256Bをお持ちの方は、グラフィック機能追加など機能アップしたMachiKania type Zをご利用ください。「MachiKania type Z」用ファイルはこちらから
Download | 動作に必要なファイルとサンプルファイル一式(bootloader.hex以外はSDカードにコピーする) | |
bootloader.hex | ブートローダ本体。PICkit3等を用いてPICマイコンに書き込む | |
MACHIKAN.HEX | MachiKania BASICシステム。SDカードに入れてブートローダから書き込みと実行 | |
MACHIKAN.INI | MachiKania BASICシステムの設定ファイル | |
その他ファイル | 「.BAS」ファイルはBASICサンプルプログラム。「.HEX」ファイルはブートローダで起動可能な実行ファイル(C言語で作成したサンプルゲーム) | |
Download | ソースファイルおよびライブラリファイル一式 | |
ps2keyborad.X.a | PS/2キーボード用ドライバ | |
lib_colortext32.a | カラーテキストビデオ出力ライブラリ | |
libsdfsio.a | SDファイルアクセス用ライブラリ | |
App_32MX250F128B.ld | ブートローダ対応プログラムを作成するためのリンカースクリプト | |
その他ファイル | MachiKania BASICシステムソースファイル。LGPL(v2.1)のライセンスに基づきソース公開しています。 |
(2016.3.27) BASICサンプルプログラム「BLOCK.BAS」(ブロック崩し)のバグを修正しました。
(2016.4.14) MachiKania BASICシステムでSDカードに保存できない場合があるバグを修正しました。
(2016.4.24) ブートローダプログラムをフラッシュメモリ容量を自動判別するように変更しました。
(2016.5.03) 一部キーボードが正常認識できない問題などを修正しました。
(2016.5.19) RESTOREが正常に行なわれない場合があるバグを修正しました。
(2016.7.27) キーボートの読み取り漏れ問題、乱数アルゴリズムなどの修正を行いました。
(2016.11.13) エディタでまれに画面が乱れる場合があるバグを修正しました。
(2017.5.6) キー入力時の画面のチラつきを解消しました。
上記のほか、C言語で作成したサンプルゲームもあります。下記ページからダウンロードできます。
SDカードブートローダの製作 (アプリ・ゲーム集)
ビデオ出力端子をテレビのビデオ入力端子(黄)に、音声出力端子をテレビの音声入力端子(白/赤のどちらか)に接続し、PS/2キーボードも接続すれば、いよいよ電源を接続してください。正しく作られていれば、右図のようなMachiKaniaブートローダの画面が表示されます。
ブートローダはSDカード上のHEXファイル(マイコンの機械語プログラムをテキスト形式にしたファイル)をマイコンのフラッシュメモリに書き込むシステムです。
MachiKania上の4方向ボタンを使って「MACHIKAN」を選択し、FIREボタンを押すと、MachiKaniaのBASICシステムのPICマイコンへの書き込みが開始されます。書き込み中は画面表示が停止されますが、数秒後に表示再開し、MachiKania BASICシステムが起動します。
一度ブートローダを使って書き込みを行うと、次回電源オンやリセット時にはその書き込まれたプログラムが起動します。再度ブートローダ画面を表示するには、MachiKania本体の6個のボタンのどれでもよいので、押しながら電源オンまたはリセットします。
MachiKania BASICシステムはKatsumi氏のBASICコンパイラ KM-1120(KM-BASIC)を搭載しています。
KM-BASICは32bit整数型のBASICで、処理が非常に高速です。
まずは右図のプログラムを打ち込んでみてください。KM-BASICの構文ではアルファベットの大文字、小文字は区別されません。昔のBASICシステムではEnter (RETURN)キーを押すまで行入力完了となりませんでしたが、このエディタはWindowsのメモ帳や最近の普通のテキストエディタと同様の感覚で使用することができ、Enterキーはただの改行ためのキーです。
キー入力時には画面が多少ちらつきます。これは画面表示処理とキーボード信号処理を全て1つのマイコンで行っているためで、不具合ではありません。
(2017.5.6)ドライバの工夫によりちらつき解消しました。
また、エディタ画面での入力文字は本来白いはずですが、ややピンクや緑がかった色に表示されることがあります。これも専用のビデオコントローラチップを使わずマイコンでビデオ信号生成しているためで、あまり気にせずむしろこの色合いを楽しんでください
打ち終わったら、いよいよ実行です。実行(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キーを押す(キーボード有効時のみ)
3.操作用ボタンの上、下、START、FIREの4つを同時に押す(ボタン有効時のみ)
また、電源を切る際はなるべくBASICの実行を終了させて、エディタ画面に戻ってからとしてください。MachiKania BASICシステムでは、プログラム実行前にSDカード上に「~TEMP.BAS」というファイル名でプログラムを一時保存します。実行中に電源を切ると異常終了したものと判断し、次回起動時にこのファイルを読み込みます。実際に異常終了した場合はここでF2キーを押して名前を付けてSDカードに保存することで、プログラムの消失を防ぐことができます。この一時ファイルは、プログラムの保存またはBASICプログラムの終了により自動的に消えます。
なお後述の自己実行アプリケーションとしてBASICプログラムを実行した場合は、キーボードやボタンによる強制終了はできず、一時ファイルが作成されることもありませんので、実行中に電源を切っても問題ありません。
ここからはMachiKaniaのより詳細な使い方や機能の説明をします。
使用マイコン | Microchip社PIC32MX250F128B(PIC32MX150F128Bも使用可) |
動作クロック | 57.27272MHz (MachiKania BASICシステム利用時) |
使用可能RAM容量 | BASIC利用時は約25Kバイト |
搭載言語 | BASIC コンパイラー KM-1120 |
エディタ機能 | 20,000文字まで入力可能 |
映像方式 | NTSCカラーコンポジット(SDTV) |
記録メディア | SDカードまたはマイクロSDカードが使用可能。FAT16またはFAT32フォーマット。ファイル名は英数字と一部記号のみ、8文字+拡張子3文字まで(大文字、小文字の区別なし) |
キーボード | PS/2キーボードを接続可能(日本語およびUS配列に対応) |
表示文字数 | 30文字(横)×27文字(縦) |
表示色数 | 256色同時表示可能、カラーパレットでRGBそれぞれ8ビット指定 |
ユーザ定義文字(PCG)機能 | あり(256文字) |
音楽再生機能 | あり(ABC記譜法) |
SDカードに「MACHIKAN.INI」というファイルを入れておくと、MachiKania BASICシステム起動時に読み込んで初期設定を行います。ファイルに下記の項目名の行を追加することで設定します。
先頭に#を付けると無効な行となります。
項目名 | 設定内容 |
106KEY | 日本語キーボードに設定 |
101KEY | USキーボードに設定 |
NUMLOCK | 起動時Num Lockキーオン |
CAPSLOCK | 起動時Caps Lockキーオン |
SCRLLOCK | 起動時Scroll Lockキーオン |
MachiKania BASICシステムに搭載しているBASICコンパイラはKatsumi氏作成のBASIC Compiler KM-1120 (KM-BASIC)です。
KM-BASICは-2147483648〜+2147483647の数が扱える32ビット整数型のBASICです。変数はA〜Zの26個のほか、配列変数が使えます。また文字列変数も取り扱うことができます。
かつてBASICといえば、行頭に必ず行番号の入力が必要でしたが、KM-BASICでは必ずしも必要ありません。行番号を指定した場合、GOTO文などの飛び先を表すラベルと同様の扱いとなります。
KM-1120で使用可能な主な命令、関数、演算子は表にある通りです。詳細な仕様については、こちらのリファレンスを参照してください。
ABS | 絶対値を返す |
ASC | アスキーコードを返す |
KEYS | ボタンの押下状態を返す |
LEN | 文字列の長さを返す |
READ | DATA文のデータを順に読み出す |
RND | 擬似乱数を返す |
SGN | 符号を返す |
TVRAM | ビデオメモリの内容を読み出す |
VAL | 文字列から数値に変換 |
CHR$ | アスキーコードから文字に変換 |
DEC$ | 10進数の文字列を返す |
HEX$ | 16進数の文字列を返す |
INKEY | 押されているキーのキーコードを返す |
INPUT$ | キーボードから文字列入力する |
CLS | 画面消去 |
COLOR | テキストの色指定 |
CURSOR | カーソル位置指定 |
DATA | データ列を指定 |
DIM | 配列の宣言 |
END | プログラムの停止 |
FOR TO 〜 NEXT | 繰り返し実行 |
GOSUB | サブルーチンを呼び出す |
GOTO | ジャンプ |
IF THEN | 条件付き実行 |
LABEL | ジャンプ先の登録 |
MUSIC | 音楽を再生 |
PALETTE | カラーパレットを設定 |
PCG | ユーザ定義フォントの設定 |
表示 | |
RESTORE | DATA読み出し開始位置指定 |
RETURN | サブルーチンから戻る |
SCROLL | 画面をスクロールする |
SOUND | 効果音を鳴らす |
USEPCG | ユーザ定義フォント使用宣言 |
WAIT | 60分の1秒単位のウェイト |
-(単項演算子) | 符号反転 |
*, /, % | 乗除算、剰余 |
+, - | 加減算(+は文字列連結にも使用) |
<, <=, >, >= | 整数の大小比較 |
=, != | 整数が等しいか等しくないか |
XOR | XORビット演算 |
AND | ANDビット演算 |
OR | ORビット演算 |
MachiKania BASICシステムのキャラクターコード表は右画面のようになっています。NEC製の往年の名機「PC-8001」とほぼ同じです。フォントについても参考にして作りました。
グラフィック文字($80〜$9F、$E0〜)はキーボードから入力する機能がありませんが、この表を参考にしてCHR$関数を使うことで利用可能です。
また、PCG(ユーザ定義文字)機能を使えば、全てのキャラクターのフォントパターンを自由に変更することができます。1キャラクターのサイズは8×8ドットです。ゲームのオリジナルキャラクター作りにも応用できます。
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システムは起動した自分自身のファイル名をチェックし、「MACHIKAN.HEX」であればエディタを起動、それ以外であれば例えば「HOGEHOGE.HEX」だとすると、「HOGEHOGE.BAS」というBASICのソースファイルを読み込み自動的にコンパイルと実行を行うように作られています。先ほどの「自己実行アプリケーション生成」では、SDカード上の「MACHIKAN.HEX」のコピーをBASICソースの名前でコピーしていたことになります。
この機能により、次回電源オンやリセットを行うとこのBASICプログラムが自動的に起動するようになるので、完成したゲームプログラムなどを何度もプレイする場合に便利となります。
MachiKania向けにより高度なプログラムを作成する方法として、C言語によるプログラムがあります。MachiKaniaの専用ライブラリおよびリンカースクリプトを用意しており、マイクロチップ社のMPLAB X IDE、XC32コンパイラを使用して作成することができます。(詳細は別途)
右画面はC言語で作成したサンプルゲームです。
これまでに実験製作してきたPIC32MXマイコンによるカラーテキストビデオ出力、SDカードブートローダ、PS/2キーボード読み込みなどの機能と、BASICコンパイラを組み合わせることで、1つのゲームシステムが完成しました。
本システムはMZ-80Kエミュレータ「KM-Z80」の作者でもあるKatsumi氏とのコラボレーションによるものです。MachiKania (マチカニア)というネーミングは、ともに関西出身の二人に偶然にもゆかりのある地名から名づけました。
まずはMachiKaniaを作って、BASICで遊んでみてください。過去にBASICをいじったことのあるかたは、とても気軽にプログラムを書けることでしょう。そして、実行速度の速さに驚かれることと思います。ぜひとも、BASICプログラム作りに挑戦してみてください。
MachiKaniaは今後も進歩していきます。
何かご不明点やご意見などありましたら、お気軽にこちらの掲示板に書き込みをお願いします。
新バージョン「MachiKania type Z」はこちらから
2016.3.6 追加
シューティングゲーム「ΡΟΠΗ」(ロペー)をMachiKania用に移植しました。通常より多くのボタンが必要なため、以前は専用のハードを作りましたが、MachiKaniaではキーボードが使えるため、オリジナルのPC-8001と同じキー操作で遊べるようになりました。
BASICで書かれたプログラムではありませんので、以下のリンクからダウンロードした「rope.hex」をSDカードに保存し、MachiKaniaのブートローダで「ROPE」選択して起動してください。遊び方などの詳細はこちらを参照願います。
HEXファイルのダウンロード |
プリント基板、およびブートローダ書き込み済みのPICマイコンを購入することができます。
![]() Assemblage | 秋葉原にあるハンダ付けができるスペースです。プリント基板の販売をお願いしました。本当はIchigoJamの展示場所ですが、同じBASICマイコン仲間として、MachiKaniaの展示機を設置していただきました。 また、PIC32MXのフラッシュ書き込み器も使用させてもらえます。(2016.5.1現在) |
![]() オレンジピコショップ | ORANGE picoはMachiKaniaと同じPIC32MXで動作するBASIC搭載マイコンボードです。Webショップを開設されており、MachiKaniaのプリント基板も取り扱っていただきました。 また、MachiKaniaのブートローダプログラムを書き込み済みのPIC32MX170F256Bの販売をお願いしたところ、快く引き受けていただきました。これを購入すればPICkit3等の書き込み器がなくてもMachiKaniaを製作することができます。(PIC32MX170F256BでもMachiKaniaは問題なく動作します。) プリント基板と必要な部品一式のセット品も発売されました。(2016.9) |
ケンケンのホームページ掲示板 | プリント基板は私の掲示板からも直接お申し込みいただけます。 |
R1.3基板用部品表と製作上の注意点および回路図 (2018.5.1)三端子レギュレータ入手困難となったため部品表更新
(2018.7.8) R1.4基板用部品表と製作上の注意点