あーさん日記

https://akkera102.sakura.ne.jp/gbadev/ の中の人

Arduboy 実験32

次のお題はTiny Basicにします。本当は音関係をやりたかったのですが、
このところ本ばかり読んでいてつまらないので一旦お休みです。


豊四季タイニーBASIC確定版 | 電脳伝説 Vintagechips
タイニーBASICをCで書く : 鈴木 哲哉 : 本 : Amazon


ソースコードは整頓されててコメントも入っています。
前は資料集めで四苦八苦していたのに・・・。10年前に読みたかったです。


シリアル通信で編集できるようにして、フィボナッチとかラインテストできるといいなあ。
サンプルはGBA版のを流用予定です。

PocketC.H.I.P.(+PICO-8)

www.famitsu.com

Subtotal 	$ 49.00
Shipping 	$ 11.00

USD $ 60.00(6,643円 VISAカードにて購入)

Shipping June(6月) 2016.

買うしかないじゃないですか。やだもー
プロモーションの動画よりもこちらの開発現場風景の方がぐっときました。

arduboy 勝手にFAQ

KickStarter、pre-orderとはどういう意味?
KSとは、クラウドファンディングのホームページを指します。
Arduboyの作者Kevin Batesさんが出資者を募り、
7,221 backers(パトロンの数)、$433,038ものお金が集まりました。


作者はアメリカのポートランドから中国の深センに飛んで、
seeedstudioという会社とタッグを組みます。


この会社はArduinoの部品を作ったりしている有名な会社です。
mbed, raspberry pi, Arduinoあたりを触っているなら
名前を知っている方は多いと思います。


pre-orderはArduboyのホームページで注文したことをいいます。


■Arduboy の種類は?
・Arduboy 1.0
Tetris® MicroCard
・Arduboy dev kit


今ところ3種類です。dev kitは1.0の前に安価で販売して、開発者に使い勝手を
見てもらうために用意したものです。言わばベータ版。
1.0はフィードバッグをたくさんもらい、よりいい製品に仕上がっていると思います。


dev kitは役目を終えたのでもう販売されることはないかも。
ただ、作者はArduboy 1.1を開発する前に、新しいdev kitを作ると言っています。


テトリスタイプは画面を縦にして、部品は同じっぽいですけど
開発用には使えないかもしれないです。
情報全く出てこず。発送された話は今のところありません。


■ぷち炎上してない?
してます(ぉ。ぶっちゃけ何もかも初めてのことなので相当苦労されていると思います。
自分に置き換えて考えてみると、海外で8000個以上のArduboyを製造して、
配達ノウハウもないのに世界に送り届けるってどんだけ難易度高いのか・・・。
想像するだけで震え上がります。気長に待つのがいいと思いますよ。
KS自体、そういうところみたいですし・・・。


個人的にはグレて非行に走る一歩手前ですが。
まだですかい(>_<


■他のゲームはどうやって遊ぶの?
【Kickstarter】Arduboyレビュー、インストール手順、面白いゲーム紹介など - t-miyajima blog
容量的に1ゲーム分しか入りません。
将来はソースコードコンパイルして実行させる方法をやめて、ロムを書き込むだけにするようです。


コンパイルエラーになるのだけど?
開発者によって、ライブラリのバージョン(masterかstable)が違います。
差し替えてください。基本的にはmaster stableを使っている方が多いようです。


追記:今はArduino IDEからダウンロードできます。


■どんなゲームがあるの?
https://twitter.com/ArduboyGames/
https://www.youtube.com/channel/UC5PtrkZ9BaCrLIW8WXe2_XA
また、コミニティのゲーム項目を見てください。


■どうやって勉強するのがいいの?
ライブラリのソースコードを一通り見るのがいいと思います。


■開発言語、環境は?
C++Arduino IDE, codebenderなどがあるようです。


■VBLANKないけど?
僕も詳しく調べていないです。60fpsをキープして、
cpu使用率が100%越えなければいいかーというノリです。
画面が小さい分、スプライトを出しすぎると視認しにくくなりますし、
ecomdで背景+マスクビット込みスプライト表示で60fps出ているそうです。


■ライブラリ読んだけど、ほとんどハード的にやることなくない?
シンプルな1chip!と呼ぶべきところ・・・?
GB, GBAやっている方からみるとビックリすると思います。


■音については?
音圧ブザーが入っています。同時発音数2。
youtubeでどんなもんか実感して頂ければと思います。
合成処理を行えば6音 4音ぐらいいけるそうです。
team a.r.gさんはdemosceneSquawkライブラリ
使っていました。

推薦図書

久しぶりに脳から何かがあふれ出そうなほどの良本を見つけたのでご紹介します。
フーリエ変換の解説書。ゴールデンウィーク中にちまちま読もうと思います。
www.amazon.co.jp
内容としては「MZ-80 SERIES BASIC解説」「ぼくらの鉱石ラジオ」のノリに近くて、
ユーモア溢れる挿絵と解説で読者を虜にしてしまいます。
純粋な学びの欲求に引き込んでくれて、今も昔もこういう語り方をしてくれる方は
ほとんどいないなあと思うしだいです。


・MZ-80 SERIES BASIC解説
http://t-kun.sakura.ne.jp/fo/room03/mz04.htm
http://internet.watch.impress.co.jp/docs/news/20140423_645726.html


・ぼくらの鉱石ラジオ
http://memo.wnishida.com/?date=20080216#p01
http://memo.wnishida.com/?date=20080218#p01


フーリエの本はもともと1988年に出版されたもので、第44刷 10万部に達しているとも
書かれています。学校、企業等で教科書としても使用され、
この分野でいう不動の書籍のようです。


当分はこの本を読みつつ、arduboyを待とうと思います。
読み終わったら次は以下の本が読みたいなあ。
サウンドプログラミング入門――音響合成の基本とC言語による実装 (Software Design plus) : 青木 直史 : 本 : Amazon.co.jp

Arduboy 実験31

書くことがないので適当に書いてみようと思います。
devkitのスピーカーはPWMに対応しておらず、配線としても
不味いつなぎ方をしているようです。

However, looking at the following board layout picture,
I can see that pins A2 and A3 (physical pins 38 and 39) are actually directly shorted together!

Everyone with a dev kit, unit make sure you don't set A2 and A3 as digital outputs at the same time!
You risk damaging the chip by shorting two outputs together.

Dev Kit Hardware - Guides - Community
調べてみると38、39ピンは以下のようになっています。

38 Analog In 2
39 Analog In 3

Arduino - PinMapping32u4
ただ自分を含めてサンプル(Tunes.ino)を鳴らした開発者は多いと思いますが、
壊れたという報告はないので極端に怖がる必要はないのかもしれません。
最新のライブラリでは片方のピンだけdefineして、
もう片方は使わないように処置していました。


ちなみにArduby 1.0はPWMピンで、問題ない場所を使用しています。

31 Digital Pin 5 (PWM)
32 Digital Pin 13 (PWM)

もう1点。開発中にバグでしょこれ、ということに遭遇したのは2点だけでした。
前に話しましたけど、SRAM領域を2000以上使った状態で焼いて、2回目以降はうまく焼けなくなる問題。
もう1つはグローバル変数の配列の値が、構造体に入らなかった問題。

// 注:PROGMEMしていません。
const s8 AstRadiusTable[3] = {
	8,
	4,
	2,
};

typedef struct {
	s8 cnt;
	ST_AST_DATA d[AST_MAX_CNT];

	s8 wave;
} ST_AST;

ST_AST Ast;

void AstSetUnit(u8 num, s8 x, s8 y, u8 type, u8 step)
{
	ST_AST_DATA* p = &Ast.d[num];

	// 中略
	p->r = AstRadiusTable[step];
}

p->rに正しい値が入りませんでした。
構造体の宣言順番を変えて、たとえばs8 waveを先頭に持ってくるとうまく動きます。
8bit cpuでアライメント問題なんて嘘だー、と大声を出したくなるのですけど、
マジだからしょうがないです。


検索しても同じケースがないのでこれは自分のコードがおかしいかも。
むしろそっちの方が大きいっぽいので眉唾程度に見て頂ければ幸いです。


ちなみに対処として、PROGMEMと__LPMで根本的に片づけました。