ライン

BASIC搭載カラーテレビゲームシステム MachiKania

ライン

2016年8月5日
最終更新日 2020年3月29日 一部命令実行時の割り込みエラー修正

 BASIC搭載カラーテレビゲームシステム「MachiKania」(マチカニア)の完成からちょうど半年が経ち、上位機である「MachiKania type Z」が完成しました。
 マイコンチップにメモリ容量が2倍のものを使うことで、BASICでカラーグラフィックや浮動小数点演算が扱えるようになりました。これでBASICを使って作成できるプログラムの応用範囲が大きく広がります。また、BASICの構文自体も見直し、構造化プログラミング対応により、これまでに比べ容易にプログラムを作成できるようになりました。
 ぜひ新たなMachiKaniaを体験してみてください。

PIC32MX版最上位モデル「MachiKania type M」はこちら
Raspberry Pi Pico搭載モデル「MachiKania type P」はこちら

関連情報
MachiKania type Zを作ろう プリント基板、部品キット購入者向け、MachiKania簡単スタートガイド
入門MachiKania より詳しいプログラム作成方法を解説

トップ画像


MachiKania type Zでできること

 初代MachiKaniaに比べ以下の点が強化されました。
  ・256×224ドット、16色同時表示可能なカラーグラフィックに対応したBASICシステムを搭載
  ・32ビット単精度の浮動小数点演算をBASICでサポートし、各種の数学関数を実装
  ・サブルーチン内のローカル変数や、複数行にまたがるIF〜THEN構造、WHILE〜LOOP構造のサポート、
   引数や戻り値付きサブルーチンなど、構造化プログラミングに欠かせない命令を多数追加
   これにより、GOTO文をほぼ使わないプログラム作成を実現
  ・多次元配列に対応
  ・大容量メモリ搭載により、より大規模なBASICプログラムを作成可能
  ・SDカードのサブディレクトリ作成とサブディレクトリへの保存、読み込みに対応 (Ver 1.02以降)
  ・横40文字表示モードの追加 (Ver 1.02以降)
  ・BASICプログラムからSDカード上のファイルにアクセス可能 (Ver 1.04以降)
  ・英数字で最大6文字までの変数名が使用可能(Ver 1.06以降)
  ・オブジェクト指向プログラミングにより、ライブラリ利用ができます。(Ver 1.2以降)
 搭載しているBASIC KM-1200は従来バージョンと互換性があり、従来プログラムはそのまま走らせることができます。

 また、初代MachiKaniaでできる以下の内容はそのまま引き継いでいます。

・テレビにつないで電源を入れればすぐにゲームが始められます。
・キーボードをつなげば、BASIC言語でオリジナルのゲームを作ることができます。
・カラー表示対応なので、カラフルなゲームが作れます。
・自分のオリジナルキャラクターを使ったゲームが作れます。
・BASICの実行は大変高速なので、本格的なゲームが作れます。
・作ったゲームはSDカードに保存することができます。
・SDカードを使ってパソコンからプログラムをコピーすることができます。
・ハードウェアもソフトウェアも公開されているので、全て自分で製作することができます。

利用シーン1

利用シーン2


紹介動画


MachiKania type Zの作り方

 MachiKania type Zの製作方法および基本的な操作方法は、初代MachiKaniaと全く同じです。そのため、詳細はこちらのページの「MachiKaniaの作り方」からまずはお読みください。
 (2016.9.19)部品セットが購入可能になりました。詳細
 大まかな製作手順は以下のようになります。
 1. ハードウェアの製作
 2. マイコンにブートローダプログラムの書き込み
 3. SDカードに必要ファイルをコピー

 既に初代MachiKaniaを製作している場合、手順1はマイコンチップの差し替えだけです(ICソケットを使っていればですが)。
 また、初代MachiKaniaをPIC32MX170F256Bで動かしている場合は、手順3だけでMachiKania type Zを導入することができます。

Raspberry PiでPICのフラッシュメモリに書き込む方法
 Raspberry Piがあれば、PICkit3等がなくてもPickleというフリーソフトを使ってPICに書き込むことができます。上記回路図でPICkit3からつながる3つのピンが、抵抗3本をはさんでRaspberry Piに変わるだけです。また、電源もRaspberry Piから取れます。以下に簡単な説明を記載しました。
 ラズパイでPIC32MXに書き込み

プリント基板での製作例

プリント基板での製作例 基板入手方法

回路図

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

三端子レギュレータTA48M033Fが入手困難となりました。TA48033Sなど代替品をご利用ください。(2018.5.1)

部品表
部品表



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


ダウンロード

 MachiKania type Zに関するファイルをダウンロードできます。

Download
(2020.3.29)
動作に必要なファイルとサンプルファイル一式(bootloader.hex以外はSDカードにコピーする)
bootloader.hexブートローダ本体。PICkit3等を用いてPICマイコンに書き込む
MACHIKAZ.HEXMachiKania type Z BASICシステム。SDカードに入れてブートローダから書き込んで起動
MACHIKAZ.INIMachiKania type Z BASICシステムの設定ファイル
その他ファイル「.BAS」ファイルはBASICサンプルプログラム。「.HEX」ファイルはブートローダで起動可能な実行ファイル(C言語で作成したサンプルゲーム)
Download
(2019.3.31)
BASICで利用可能な各種クラスファイル集展開してできるLIBディレクトリをSDカードのルートディレクトリにコピーして利用。各クラスの使用方法はそれぞれのディレクトリのhelp.txtファイルを参照
Download
(2020.3.29)
ソースファイルおよびライブラリファイル一式
ps2keyborad.X.aPS/2キーボード用ドライバ
lib_videoout_machikania.X.aカラーテキスト&グラフィック出力ライブラリ (2020.1.26)
libsdfsio.aSDファイルアクセス用ライブラリ
App_32MX170F256B.ldブートローダ対応プログラムを作成するためのリンカースクリプト
その他ファイルMachiKania type Z BASICシステムソースファイル。LGPL(v2.1)のライセンスに基づきソース公開しています。

 (2019.11.3) CLASSのPUBLIC FIELD参照時のバグを修正しました。
 (2020.1.26) 多重割り込み発生時のバグ、40文字モード時のフォントなどを修正しました。
 (2020.3.29) 一部命令実行時の割り込み発生によるエラーを修正しました。
  【システムバージョンアップの適用方法】
   1. 上記から展開したMACHIKAZ.HEXをSDカードのルートディレクトリに上書きコピー
   2. SDカードをMachiKaniaに挿し、本体上のいずれかのボタンを押しながら電源を入れる
   3. ブートローダが起動するので、MACHIKAZを選択してFIREボタンを押す


MachiKania type Zの使い方

 使い方についても初代MachiKaniaと同じですので、最初に初代MachiKaniaのページの「使い方」を読んでください。

MachiKania type Z BASICシステムのロード

 初めて電源オンする時やどれかのボタンを押しながら電源オンまたはリセットすると、MachiKaniaブートローダが起動します。
 ボード上の4方向ボタンを使って「MACHIKAZ」を選択し、FIREボタンを押すと、MachiKania type Z BASICシステムのPICマイコンへの書き込みが開始されます。書き込み中は画面表示が停止されますが、数秒後に表示再開し、MachiKania type Z BASICシステムが起動します。

ブートローダ画面

ブートローダ画面

MachiKania type Z BASICシステム

 MachiKania type Z BASICシステムはKatsumi氏のBASICコンパイラ KM-1200(KM-BASIC)を搭載しています。
 KM-1200は以前のバージョンに比べ、主に以下のような機能追加が行われました。
 ・カラーグラフィック機能
 ・浮動小数点演算機能
 ・ローカル変数や多次元配列対応
 ・条件付きループ構文や複数行にまたがる
  IF〜ENDIF構文の追加
 ・SDカード上のファイルへのアクセス(KM-1203以降)
 ・英数6文字までの変数名に対応(KM1204以降)
 ・クラスファイルによるライブラリ化(KM1207以降)
 さっそく右のプログラムを打ち込んで、F4キーで実行してみてください。一瞬でサインカーブが表示されたと思います。このプログラム終了をするには、ENTERキーを押してください。グラフィック画面はテキスト画面とは排他表示となっており、プログラム終了すると自動的にテキスト画面に戻ります。そのため、グラフィックの表示結果を確認するために、INPUT$関数で入力待ちにしています。
 DO WHILEは後ろのLOOP文と合わせて条件付き繰り返しを実現します。WHILE条件指定はLOOP文の後ろにすることもでき、その場合は最後に条件判断を行います。
 ※解説のためにDO〜LOOPを使いましたが、通常はFOR〜NEXTを使うところです。
 浮動小数点を表す数式には全て「#」が付きます。そのため、変数名もY#のように記述する必要があります。また、整数型と浮動小数点型の自動変換は行われません。INT関数やFLOAT#関数で明示的に変換する必要があります。
 GOSUBはサブルーチンを呼び出す命令ですが、括弧を付けることで戻り値のある関数のように使うことができます。また、引き数も複数個を指定可能です。サブルーチン側では、ARGS関数で引き数の番号を指定して読み出します。
 LINE文は線分を描画する命令で、始点と終点の2つの座標および色を指定しますが、ここでは最初の座標は省略しています。省略した場合、前回の終点が始点となります。最初は始点の指定がないため、X=0の場合はPOINT文で指定しています。ここで、IF文のTHENの後ろが改行されていることに注目してください。この改行を入れることにより、複数行にまたがるIF構文形式となり、最後にENDIF文を入れることで終了します。
 サブルーチン内のVAR文はサブルーチン内でのみ使用されるローカル変数を宣言します。これにより、変数名のダブりや不足を防ぐことができます。

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

MachiKania type Z BASICシステム起動画面
Ver Zoeaがtype Zを表します


BASICプログラムサンプル

BASICプログラムサンプル


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

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

ビットマップの表示

 ゲームに登場するキャラクターをビットマップで表示させるには、PUTBMP命令が便利です。画像パターンの指定方法はいくつかありますが、最も簡単な方法としてCDATA文でパターンを記述する方法があります。ここでは横14ドット、縦13ドットのビットマップ画像を表示します。
 CDATA文はメモリ上に8ビットデータ列を展開します。行末に「,」を置くことで次行以降にもそのまま8ビットデータを記述することができます。データの読み出しにはCREAD関数を使用しますが、この例のようにPUTBMP文でラベルを使ってそのまま表示することもできます。
 PUTBMP文に与えるデータ列はカラーパレット番号(0〜15)の羅列ですが、0(ゼロ)だけはパレット番号ではなく透明色となり、背景を上書きしません。黒を表示したい場合は、0番以外のパレットに黒を指定する必要があります。(デフォルトでは8番が黒です。)

サンプルビットマップ

デフォルトカラーパレット

デフォルトカラーパレットとサンプルビットマップ

PUTBMPサンプル

PUTBMPサンプル


PUTBMPサンプル実行結果

PUTBMPサンプル実行結果


MachiKania type Zの主なスペック

使用マイコンMicrochip社PIC32MX170F256B(PIC32MX270F256Bも使用可)
動作クロック57.27272MHz (MachiKania type Z BASICシステム利用時)
使用可能RAM容量BASIC利用時は約52Kバイト。ただし、グラフィック機能使用時はビデオメモリとして28Kバイトを占有
搭載言語BASIC コンパイラー KM-1200
エディタ機能40,000文字まで入力可能
映像方式NTSCカラーコンポジット(SDTV)
記録メディアSDカードまたはマイクロSDカードが使用可能。FAT16またはFAT32フォーマット。ファイル名は英数字と一部記号のみ、8文字+拡張子3文字まで(大文字、小文字の区別なし)
キーボードPS/2キーボードを接続可能(日本語およびUS配列に対応)
テキスト表示機能横30文字×縦27文字、または横40文字×縦27文字(Ver1.02以降)、
256色同時表示可能、カラーパレットでRGBそれぞれ8ビット指定
グラフィック機能横256ドット×縦224ドット、16色同時表示可能、カラーパレットでRGBそれぞれ8ビット指定
ユーザ定義文字(PCG)機能あり(256文字)
音楽再生機能あり(ABC記譜法)

KM-BASICリファレンス

 追加された主な命令と関数を表にまとめました。
 詳細はKM-1200のマニュアルを参照してください。
 (参考)入門MachiKania

KM-1200で追加された主な関数
ARGS, ARGS#, ARGS$サブルーチン呼び出し時の引き数を読み出す
CREADCDATA文の8ビットデータを読み出す
GCOLORグラフィック画面指定座標のパレット番号を読み出す
GOSUB, GOSUB#, GOSUB$戻り値付きサブルーチン呼び出し、戻り値の型の種類により使い分ける
SYSTEM, SYSTEM$各種SYSTEM変数を返す
INT実数値を整数値に変換
CEIL#, FLOOR#与えられた実数値以上/以下の整数を実数値で返す
FABS#実数の絶対値を返す
FLOAT#整数値を浮動小数点型実数値に変換
VAL#10進数文字列を浮動小数点型実数値に変換
FMOD#剰余を実数値で返す
MODF#実数の小数部を返す
SQRT#平方根を返す
POW#指数関数
EXP#自然対数の底eの指数関数
LOG#, LOG10#自然対数および常用対数を返す
SIN#, COS#, TAN#三角関数
ASIN#, ACOS#, ATAN#, ATAN2#逆三角関数
(ATAN2#はKM-1201で追加)
SINH#, COSH#, TANH#双曲線関数

SDカードアクセス関連命令・関数(KM-1203で追加)
FOPENファイルオープン
FCLOSEファイルクローズ
FILEアクティブファイルハンドル指定
FGETC1バイト読み込み関数
FGETバッファに読み込み
FINPUT$文字列読み込み関数
FPUTC1バイト書き込み
FPUTバッファから書き込み
FPRINTテキスト書き込み
FSEEKファイル位置移動。関数ではファイル位置を返す
FEOFファイル位置が末端かを返す関数
FLENファイル長を返す関数
FREMOVEファイル削除

KM-1200で追加された主な命令
BREAKFOR〜NEXT、DO〜LOOP、WHILE〜WENDループから抜け出す
CDATA8ビットデータ列を記述
CONTINUEFOR〜NEXT、DO〜LOOP、WHILE〜WENDループ内の以降の命令をスキップし、次の条件判断を行う(KM-1201で追加)
DIM配列を割り当てる、浮動小数点型や多次元配列に対応
DO
<命令ブロック>
LOOP
条件指定して命令ブロックを繰り返し実行する。DOまたはLOOPの後ろにWHILE<条件式>またはUNTIL<条件式>を記述
WHILE<条件式>
<命令ブロック>
WEND
条件式を満たす間、命令ブロックを繰り返し実行する
GOSUBサブルーチン呼び出し。引き数を指定可能
IF〜THEN
<命令ブロック>
ELSEIF〜THEN
<命令ブロック>
ENDIF
条件式を満たす場合は命令ブロックを実行。THENの後ろは改行が必要
VARサブルーチン内で使うローカル変数を指定
USEVAR英数字最大6文字までの変数名を指定(KM-1204で追加)
SYSTEM各種システム値を設定
WIDTH30文字モードと40文字モードの設定(KM-1202で追加)

グラフィック関連命令
USEGRAPHICグラフィックメモリを確保しグラフィック機能を利用開始
BOXFILL塗りつぶされた長方形を描画
CIRCLE円を描画
CIRCLEFILL塗りつぶされた円を描画
GCLSグラフィック画面を消去
GCOLOR色指定を省略した場合のパレット番号を設定
GPALETTEグラフィック用パレットの設定
GPRINTグラフィック画面に文字列を描画
LINE線分を描画
POINT座標指定を省略した場合の座標を設定
PSET点を描画
PUTBMPビットマップを描画

KM-1207で追加された命令、関数
USECLASSクラスファイル利用命令
FIELDクラスファイル中でフィールドを宣言
PRIVATEクラスファイル中でプライベートなフィールドやスタティック変数を宣言
STATICクラスファイル中でスタティック変数を宣言
METHODクラスファイル中でメソッドを宣言
NEWオブジェクトを作成しポインタを返す関数
DELETEオブジェクトを破棄する
CALLメソッドを呼び出す
POKE16メモリに16ビットデータを書き込む
POKE32メモリの32ビットデータを書き込む
PEEK16メモリから16ビットデータを読み出す関数
PEEK32メモリから32ビットデータを読み出す関数
SETDIRSDカードのカレントディレクトリ変更
GETDIRSDカードのカレントディレクトリ取得する関数


最後に

 最初のMachiKaniaを公開してからちょうど半年で、2番目のバージョンをリリースすることができました。その間、多くの方々から応援や提案、また指摘などをいただきました。ありがとうございました。
 今回の強化されたKM-BASICは、従来のものに比べかなりプログラム作りが容易になりましたので、ハードウェアの製作の後は、ぜひともBASICプログラミングにもチャレンジしてみてください。
 なお、今回のバージョンはグラフィック機能以外、ほとんどがKatsumi氏によるKM-BASICの機能追加です。Katsumi氏にもあらためて感謝いたします。

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





  ■追加コンテンツ  初期公開時以降に公開された内容を追記していきます



新たに追加された機能

 MachiKania type Zの初期公開以降に追加された機能について、解説します。

40文字モード

2016.10.23 Ver Zoea 1.02で追加
 従来1行に表示可能な文字数は30文字でしたが、横幅の細いフォントを使用することで、40文字表示可能なモードを追加しました。
 テキストエディタ利用時では、[SHIFT]+[F3]キーを押すことで30文字モードと40文字モードを切り替えることができます。文字がやや見にくくなりますが、プログラムを組む際には1行に表示できる文字数が多いほうが、組みやすいと思います。
 BASIC実行時には30文字モードで自動的に初期化されますが、新たに追加されたWIDTH命令を使うことで40文字モードに変更することができます。具体的にはBASICプログラム上で「WIDTH 40」と記述します。逆に30文字モードに戻す場合は「WIDTH 30」です。
 ※40文字モードの英数カナ等のフォントは美咲フォントの作者による「k6x8フォント」を使用しています。

40文字モード

40文字モードでの表示例

30文字モード
30文字モードでの表示例



SDカードのディレクトリ対応

2016.10.23 Ver Zoea 1.02で追加
 従来、SDカードのルートディレクトリのみ対応していたBASICプログラムの保存、読み込みをサブディレクトリにも対応させました。また、保存するファイル名を一覧から選択することも可能になりました。
 右図の中で黄色く[ ]で囲まれたものがディレクトリです。昔のDOSの時代をご存知の方はすぐに分かると思いますが、[.]は今表示しているディレクトリ、[..]は一つ上の親ディレクトリを表します。[..]を選択してENTERキーを押すと親ディレクトリに移動して、また一覧表示を行います。[.]は選んでも意味がありません。緑の<New Dir>でサブディレクトリの作成、<New FILE>で新たな名前を付けてファイル保存ができます。
ファイル読み込み時に<New FILE>を選んで存在するファイル名を入力することで、ファイル名を指定した読み込みが可能になりました。(Ver 1.03)

ディレクトリ対応

サブディレクトリへの保存画面



テキストエディタのアンドゥ機能、行番号表示

2016.11.13 Ver Zoea 1.03で追加
 パソコン等のテキストエディタでは当たり前の、「アンドゥ(元に戻す)」機能をエディタに追加しました。CTRL+Zキーで1つ前の状態に戻します。メモリ容量の制約上、単純な1文字入力や1文字消去の場合で512回まで元に戻せます。範囲選択での一括消去や、コピー&ペーストのアンドゥにも対応しており、元に戻せる回数は一括操作する文字数によって異なってきます。
 これまでエディタ画面最下行には、入力可能な残り文字数を表示していましたが、現在カーソルがある行番号表示に変更しました。行番号は、画面上の行とは関係なく、テキストの一番最初が1行目で、改行入力ごとに1増える番号のことです。従来あった残り文字数はSHIFTキー押下時に表示されるように変更しました。

行番号表示対応

カーソル行番号表示に対応



BASICからSDカード上のファイルへのアクセス機能

2017.1.1 Ver Zoea 1.04(KM-1203)で追加
 BASICプログラムから、SDカード上のファイルの読み書きを行う命令や関数を追加しました。FOPEN命令でファイル名とアクセス方法(読み込みや書き込み等)を指定してファイル使用が開始されます。アクセスできる場所は、ソースプログラムがあるディレクトリのみとなります。
 ファイルは同時に2つまでオープンでき、FOPEN命令でファイルハンドル番号1または2を指定します(省略時は1)。ファイルオープン後のアクティブなファイルハンドルはFILE命令を使用して切り替えます。
 使用サンプルとして、WindowsのBMP形式画像ファイルをグラフィック表示するプログラムを作成しました。256×192ドット、4ビットカラー(16色)の形式専用ですが、画像変換ソフトを使ってうまく変換すれば、写真も意外ときれいに表示され、これまでに比べMachiKaniaの利用シーンが大きく広がるものと思います。

SDカードアクセス使用例

SDカードアクセス使用例。
サンプルプログラムBITMAP16.BASでBMP画像を表示




長い変数名への対応

2017.8.2 Ver Zoea 1.06(KM-1204)で追加
 これまで変数名はアルファベット1文字のみとなっていましたが、英数字で最大6文字までの変数名が使用できるようになりました。
 USEVAR命令の後ろに使用する長い変数名を羅列することで、この行以降これらの変数名が使用可能となります。この長い変数名は、ローカル変数(VAR命令で宣言)や配列(DIM命令で宣言)、浮動小数点変数、文字列変数でも使用可能です。

USEVAR使用例1

USEVAR使用例1

USEVAR使用例2
USEVAR使用例2。ローカル変数でも使用可能。
実行すると1.5、XYZ、100の順に表示される。




オブジェクト指向化プログラミング

2019.3.31 Ver Zoea 1.2(KM-1207)で追加
 簡易的なオブジェクト指向化プログラミングができるようになりました。これまで実行するプログラムは1つのファイルのみで構成されていましたが、まとまった機能をそれぞれBASICで書かれたクラスファイルとして用意することで、実行時にメインプログラムから読み込んで実行することができます。
 クラスファイルのファイル名は「クラス名.BAS」で保存します。例えばクラス名が「CLASS1」の場合ファイル名は「CLASS1.BAS」となります。クラス名は2文字以上6文字以下の文字列です。
 また、クラスファイルはメインプログラムと同じディレクトリ(カレントディレクトリ)または、SDカードの「\LIB\クラス名\」ディレクトリに保存します。
   例 \LIB\CLASS1\CLASS1.BAS
 実行時(実際にはコンパイル時)にクラス使用命令(USECLASS命令)があると、まずカレントディレクトリを探し、なければ\LIBを探しにいきます。これにより、よく使われる便利な機能を共通のライブラリとして提供することが可能となりました。

 クラスでは、パブリックなメソッドとフィールド、プライベートなフィールド、スタティックメソッド、スタティック変数などを定義することができます。メインプログラムからは、USECLASS命令でクラス使用を宣言し、NEW(クラス名)関数でインスタンスを生成します。
 メソッドの呼び出しはCALL インスタンス.メソッド名( )または、戻り値がある場合A=インスタンス.メソッド名( )のように記述します。パブリックフィールドも同様にインスタンス.フィールド名でアクセスします。
 クラスの使い方の詳細は、こちらのレファレンスを参照してください。また、ダウンロードコーナーでライブラリ(クラスファイル集)を公開しているので、参考にしてください。

CLASS1.BAS

クラスファイル。ファイル名はCLASS1.BAS。実行ファイルと同じディレクトリに保存する。

TEST1.BAS

実行するメインプログラム。ファイル名は任意。実行すると赤い丸が左右に動き、上下カーソルキーで上下に移動する。



タイマー機能と割り込み

2019.5.4 Ver 1.3(KM-1208)で追加
 タイマー機能と割り込み機能を追加しました。
 タイマーはμ秒単位で指定でき、10μ秒程度から実用的に使えます。
 割り込み機能は、割り込みのトリガーとなるイベントと処理ルーチン名を宣言することで、イベント発生時に処理ルーチンを自動で呼び出すことができます。イベントは下表の種類の指定が可能です。

TIMERタイマー値が1増えたとき
DRAWCOUNT60分の1秒ごと
KEYSボタンの押下状態が変化したとき
INKEYキーボード押下時
MUSIC音楽再生中、最後の音の再生時
WAVEWAVEファイル再生終了時
CORETIMERプロセッサのコアタイマーが指定の値となったとき
 ※MachiKania type Zではボタンとキーボードは排他利用となるため、KEYSとINKEYを同時に使用することはできません。KEYS割り込み有効時にキーボードを押すと誤動作する場合があります。

 右のサンプルプログラムでは、メインルーチンはIDLE命令のみの空ループですが、DRAWCOUNT、INKEY、MUSICが割り込みイベントとして指定されており、100分の1秒タイム表示しながら赤い丸が左右に動き、BGMが継続的に演奏され、キーボード押下で画面にキーコードが表示されます。
 その他の詳細は、こちらのレファレンスを参照してください。
 なお、割り込みを使用する際は以下の注意が必要です。
 ・処理は極力短くする。
 ・他の部分でVAR指定で使用しているローカル変数名と同じ名前のグローバル変数を、割り込み処理ルーチン内で使用しない。

INTRPT-Z.BAS
ダウンロード

割り込みプログラム例

割り込みとタイマー使用サンプル実行画面。割り込みで音楽を鳴らしながら、赤い丸が左右に動く



BASICサンプルプログラム集

 KM-BASICのサンプルプログラムをここに追加していきます。ダウンロードしたBASICのソースプログラムをSDカードにコピーし、実行してください。BASICのバージョンは最新のものをご利用ください。

HSVカラースペースデモ

2016.9.3 追加
 MachiKaniaではカラーパレットを使うと、テキスト画面で256色同時表示が可能です。HSV色空間をキャラクターで表示してみました。計算には座標から角度を求めるため、逆正接関数を使います。実際には(x,y)座標から単純に計算できるATAN2#(y,x)関数を追加して使用しました。

ダウンロード HSV.BAS

HSVカラースペースデモ

レイトレーシング

2016.9.3 追加
 I/O誌1986年7月号に掲載(吉森昌弘氏)されたレイトレーシング(光線追跡法)という手法を用いた3Dグラフィックを、計算アルゴリズムはほぼそのままで再現しました。当時のPC-9801シリーズでは描画に1時間以上要した記憶があります。高校生だった私はそのリアルさに感動し、計算部分を全てアセンブラーによる簡易浮動小数点演算にして10倍以上(?)の高速化したりしました。
 MachiKania type Zは解像度が違いますが、上の画像の場合4分程度で描画できます。また、プログラム3行目のREM SYSTEM 200,0のREMを削除すると、ビデオ出力を停止し計算に専念するため、1分ちょっとで描画完了します。当時のプログラムは8色表示で作られていましたが、MachiKania type Zのグラフィックでは16色同時表示できるので、少し改良しています。
 プログラム4行目の変数Eを2や4にすると解像度が粗くなり描画が速くなります。また、RESTORE文のパラメータDAT1をDAT2やDAT3にすることで描画するデータを変更できます。

ダウンロード RAYTRACE.BAS

レイトレーシング画面

レイトレーシング画面2

球の衝突シミュレーション

2016.9.3 追加
 実行すると10個の球が摩擦のない平面上で、ランダムな方向に等速直線運動を開始します。球同士が衝突すると移動方向と速度を計算して跳ね返ります。(手抜きアルゴリズムなので、たまに球同士がめり込むことがあります。)

ダウンロード COLISION.BAS

球の衝突シミュレーションデモ

波紋グラフィック

2016.9.3 追加
 水面上の波紋のようなものをSIN関数で描画します。その昔、パソコンで高精細グラフィックが使えるようになった頃、こういうサンプルがよく見受けられました。画面横方向解像度分の配列を用意して、簡単な陰線処理を行っています。

ダウンロード 3DWAVE.BAS

波紋グラフィック

ペグソリテア

2018.1.1 追加  2018.1.3 更新
 一人で遊べる有名なボードゲームです。
 33個の穴が開いた盤上に、最初32個のボールが載せられています。ボールは縦または横に別のボールを1つ飛び越したところに穴が開いている場合だけ、動かすことができます。飛び越されたボールは盤上から取り除きます。順番にボールを飛び越して、最後にボールが1つだけ残るようにできれば成功です。
   参考 Wikipediaのページ
 まず、基板上の上下左右ボタンで赤い枠を移動し、動かしたいボールを選んだらFIREボタンで決定します。次に、緑色の枠を移動し、動かしたい場所でFIREボタンを押します。ボールが正しく動かせる場合はジャンプし、飛び越されたボールは消えます。
 動かしたいボールの選択を間違えた場合、飛び越せない場所でFIREボタンを押すと選択が取り消されます。
 STARTボタンを押すと、1つ手前の状態に戻ります。また、STARTボタンを2秒間押し続けるとゲームの最初の状態に戻ります。(2018.1.3)

ダウンロード PEGSOL-G.BAS (2018.1.3更新)

ペグソリテア1

ペグソリテア2




プリント基板、ブートローダ書き込み済みマイコン、部品セットの入手方法

 プリント基板、およびブートローダ書き込み済みのPICマイコンを購入することができます。


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

2019年10月にラジオデパート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基板用部品表と製作上の注意点

プリント基板

頒布中のプリント基板 (最新はR1.4です)

プリント基板完成イメージ

プリント基板による完成イメージ

R1.4

R1.4の三端子レギュレータ付近拡大。
表面実装品となりました。C1/C2の容量も変更となりました。


Copyright (C) KenKen All Rights Reserved.