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に比べ以下の点が強化されました。
・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カードを使ってパソコンからプログラムをコピーすることができます。 ・ハードウェアもソフトウェアも公開されているので、全て自分で製作することができます。 |
紹介動画
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に書き込み |
電源 | 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.HEX | MachiKania type Z BASICシステム。SDカードに入れてブートローダから書き込んで起動 | |
MACHIKAZ.INI | MachiKania type Z BASICシステムの設定ファイル | |
その他ファイル | 「.BAS」ファイルはBASICサンプルプログラム。「.HEX」ファイルはブートローダで起動可能な実行ファイル(C言語で作成したサンプルゲーム) | |
Download (2019.3.31) | BASICで利用可能な各種クラスファイル集 | 展開してできるLIBディレクトリをSDカードのルートディレクトリにコピーして利用。各クラスの使用方法はそれぞれのディレクトリのhelp.txtファイルを参照 |
Download (2020.3.29) |
ソースファイルおよびライブラリファイル一式 | |
ps2keyborad.X.a | PS/2キーボード用ドライバ | |
lib_videoout_machikania.X.a | カラーテキスト&グラフィック出力ライブラリ (2020.1.26) | |
libsdfsio.a | SDファイルアクセス用ライブラリ | |
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と同じですので、最初に初代MachiKaniaのページの「使い方」を読んでください。
初めて電源オンする時やどれかのボタンを押しながら電源オンまたはリセットすると、MachiKaniaブートローダが起動します。
ボード上の4方向ボタンを使って「MACHIKAZ」を選択し、FIREボタンを押すと、MachiKania type Z BASICシステムのPICマイコンへの書き込みが開始されます。書き込み中は画面表示が停止されますが、数秒後に表示再開し、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文はサブルーチン内でのみ使用されるローカル変数を宣言します。これにより、変数名のダブりや不足を防ぐことができます。
ゲームに登場するキャラクターをビットマップで表示させるには、PUTBMP命令が便利です。画像パターンの指定方法はいくつかありますが、最も簡単な方法としてCDATA文でパターンを記述する方法があります。ここでは横14ドット、縦13ドットのビットマップ画像を表示します。
CDATA文はメモリ上に8ビットデータ列を展開します。行末に「,」を置くことで次行以降にもそのまま8ビットデータを記述することができます。データの読み出しにはCREAD関数を使用しますが、この例のようにPUTBMP文でラベルを使ってそのまま表示することもできます。
PUTBMP文に与えるデータ列はカラーパレット番号(0〜15)の羅列ですが、0(ゼロ)だけはパレット番号ではなく透明色となり、背景を上書きしません。黒を表示したい場合は、0番以外のパレットに黒を指定する必要があります。(デフォルトでは8番が黒です。)
使用マイコン | 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-1200のマニュアルを参照してください。
(参考)入門MachiKania
ARGS, ARGS#, ARGS$ | サブルーチン呼び出し時の引き数を読み出す |
CREAD | CDATA文の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# | 双曲線関数 |
FOPEN | ファイルオープン |
FCLOSE | ファイルクローズ |
FILE | アクティブファイルハンドル指定 |
FGETC | 1バイト読み込み関数 |
FGET | バッファに読み込み |
FINPUT$ | 文字列読み込み関数 |
FPUTC | 1バイト書き込み |
FPUT | バッファから書き込み |
FPRINT | テキスト書き込み |
FSEEK | ファイル位置移動。関数ではファイル位置を返す |
FEOF | ファイル位置が末端かを返す関数 |
FLEN | ファイル長を返す関数 |
FREMOVE | ファイル削除 |
BREAK | FOR〜NEXT、DO〜LOOP、WHILE〜WENDループから抜け出す |
CDATA | 8ビットデータ列を記述 |
CONTINUE | FOR〜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 | 各種システム値を設定 |
WIDTH | 30文字モードと40文字モードの設定(KM-1202で追加) |
USEGRAPHIC | グラフィックメモリを確保しグラフィック機能を利用開始 |
BOXFILL | 塗りつぶされた長方形を描画 |
CIRCLE | 円を描画 |
CIRCLEFILL | 塗りつぶされた円を描画 |
GCLS | グラフィック画面を消去 |
GCOLOR | 色指定を省略した場合のパレット番号を設定 |
GPALETTE | グラフィック用パレットの設定 |
GPRINT | グラフィック画面に文字列を描画 |
LINE | 線分を描画 |
POINT | 座標指定を省略した場合の座標を設定 |
PSET | 点を描画 |
PUTBMP | ビットマップを描画 |
USECLASS | クラスファイル利用命令 |
FIELD | クラスファイル中でフィールドを宣言 |
PRIVATE | クラスファイル中でプライベートなフィールドやスタティック変数を宣言 |
STATIC | クラスファイル中でスタティック変数を宣言 |
METHOD | クラスファイル中でメソッドを宣言 |
NEW | オブジェクトを作成しポインタを返す関数 |
DELETE | オブジェクトを破棄する |
CALL | メソッドを呼び出す |
POKE16 | メモリに16ビットデータを書き込む |
POKE32 | メモリの32ビットデータを書き込む |
PEEK16 | メモリから16ビットデータを読み出す関数 |
PEEK32 | メモリから32ビットデータを読み出す関数 |
SETDIR | SDカードのカレントディレクトリ変更 |
GETDIR | SDカードのカレントディレクトリ取得する関数 |
最初のMachiKaniaを公開してからちょうど半年で、2番目のバージョンをリリースすることができました。その間、多くの方々から応援や提案、また指摘などをいただきました。ありがとうございました。
今回の強化されたKM-BASICは、従来のものに比べかなりプログラム作りが容易になりましたので、ハードウェアの製作の後は、ぜひともBASICプログラミングにもチャレンジしてみてください。
なお、今回のバージョンはグラフィック機能以外、ほとんどがKatsumi氏によるKM-BASICの機能追加です。Katsumi氏にもあらためて感謝いたします。
何かご不明点やご意見などありましたら、お気軽にこちらの掲示板に書き込みをお願いします。
MachiKania type Zの初期公開以降に追加された機能について、解説します。
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フォント」を使用しています。
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キー押下時に表示されるように変更しました。
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の利用シーンが大きく広がるものと思います。
2017.8.2 Ver Zoea 1.06(KM-1204)で追加
これまで変数名はアルファベット1文字のみとなっていましたが、英数字で最大6文字までの変数名が使用できるようになりました。
USEVAR命令の後ろに使用する長い変数名を羅列することで、この行以降これらの変数名が使用可能となります。この長い変数名は、ローカル変数(VAR命令で宣言)や配列(DIM命令で宣言)、浮動小数点変数、文字列変数でも使用可能です。
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=インスタンス.メソッド名( )のように記述します。パブリックフィールドも同様にインスタンス.フィールド名でアクセスします。
クラスの使い方の詳細は、こちらのレファレンスを参照してください。また、ダウンロードコーナーでライブラリ(クラスファイル集)を公開しているので、参考にしてください。
2019.5.4 Ver 1.3(KM-1208)で追加
タイマー機能と割り込み機能を追加しました。
タイマーはμ秒単位で指定でき、10μ秒程度から実用的に使えます。
割り込み機能は、割り込みのトリガーとなるイベントと処理ルーチン名を宣言することで、イベント発生時に処理ルーチンを自動で呼び出すことができます。イベントは下表の種類の指定が可能です。
TIMER | タイマー値が1増えたとき |
DRAWCOUNT | 60分の1秒ごと |
KEYS | ボタンの押下状態が変化したとき |
INKEY | キーボード押下時 |
MUSIC | 音楽再生中、最後の音の再生時 |
WAVE | WAVEファイル再生終了時 |
CORETIMER | プロセッサのコアタイマーが指定の値となったとき |
右のサンプルプログラムでは、メインルーチンはIDLE命令のみの空ループですが、DRAWCOUNT、INKEY、MUSICが割り込みイベントとして指定されており、100分の1秒タイム表示しながら赤い丸が左右に動き、BGMが継続的に演奏され、キーボード押下で画面にキーコードが表示されます。
その他の詳細は、こちらのレファレンスを参照してください。
なお、割り込みを使用する際は以下の注意が必要です。
・処理は極力短くする。
・他の部分でVAR指定で使用しているローカル変数名と同じ名前のグローバル変数を、割り込み処理ルーチン内で使用しない。
KM-BASICのサンプルプログラムをここに追加していきます。ダウンロードしたBASICのソースプログラムをSDカードにコピーし、実行してください。BASICのバージョンは最新のものをご利用ください。
2016.9.3 追加
MachiKaniaではカラーパレットを使うと、テキスト画面で256色同時表示が可能です。HSV色空間をキャラクターで表示してみました。計算には座標から角度を求めるため、逆正接関数を使います。実際には(x,y)座標から単純に計算できるATAN2#(y,x)関数を追加して使用しました。
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にすることで描画するデータを変更できます。
2016.9.3 追加
実行すると10個の球が摩擦のない平面上で、ランダムな方向に等速直線運動を開始します。球同士が衝突すると移動方向と速度を計算して跳ね返ります。(手抜きアルゴリズムなので、たまに球同士がめり込むことがあります。)
2016.9.3 追加
水面上の波紋のようなものをSIN関数で描画します。その昔、パソコンで高精細グラフィックが使えるようになった頃、こういうサンプルがよく見受けられました。画面横方向解像度分の配列を用意して、簡単な陰線処理を行っています。
2018.1.1 追加 2018.1.3 更新
一人で遊べる有名なボードゲームです。
33個の穴が開いた盤上に、最初32個のボールが載せられています。ボールは縦または横に別のボールを1つ飛び越したところに穴が開いている場合だけ、動かすことができます。飛び越されたボールは盤上から取り除きます。順番にボールを飛び越して、最後にボールが1つだけ残るようにできれば成功です。
参考 Wikipediaのページ
まず、基板上の上下左右ボタンで赤い枠を移動し、動かしたいボールを選んだらFIREボタンで決定します。次に、緑色の枠を移動し、動かしたい場所でFIREボタンを押します。ボールが正しく動かせる場合はジャンプし、飛び越されたボールは消えます。
動かしたいボールの選択を間違えた場合、飛び越せない場所でFIREボタンを押すと選択が取り消されます。
STARTボタンを押すと、1つ手前の状態に戻ります。また、STARTボタンを2秒間押し続けるとゲームの最初の状態に戻ります。(2018.1.3)
プリント基板、およびブートローダ書き込み済みの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基板用部品表と製作上の注意点