2017/04/22
R8C/M12Aでファミコン音源の実装
VIDEO ルネサスのマイコン「R8C/M12A」でファミコン音源の実装を試みました。
「ファミコンなんて昔の8bitコンピュータだから余裕っしょ」
と考えていたら甘かった。。
ファミコンすごいわ。
最初はDDS(Direct Digital Synthesizer)を作り出したけれどフィルターがうまくいかなくてファミコンってどんなフィルター持ってるんだろうと調べたらフィルター持ってないことが分かりどーやってあんなに色んな音色を作り出しているのか気になって作ることになりました。
y[i] = y[i-1] + m * (x[i] - y[i-1]) この簡単なローパス・フィルタをうまく動かせないー
アナログシンセを作るにあたって自分が一番めんどいなーと思うのはオシレータのチューニング。なのでJUNO-106にならいオシレータはデジタルでDCOにすればいいかとR8C/M12Aでやってみたら意外に簡単にできたのでじゃあ1チップシンセにしてしまえーとやりだしたら三角関数が使えないわ小数使えないわで壁にぶち当たってます。
カットオフとレゾナンスは必須っす。
話は戻りファミコン音源。サンプル周波数32kHzでパルス派2個、三角波1個、ノイズ1個の計4個波形を生成しようと試みたけれど、クロックが20MHzの場合割り込み間隔が625クロックしかなくて生成が間に合わず(多分…)、16kHzに変更。でもそうするとPWMの幅を決める値がアバウトになりすぎてかなーり音痴になってしまう。じつは32kHzでも気にすれば気になるくらいのずれがあった。16kHzにして処理が間に合っても音痴では使いものにならない。
とゆーわけで考えた仕様がこれ。
MIDIノート69、鍵盤番号A4、周波数440Hzの場合、割り込み回数は32.363636…となって、0.363636…の部分が音痴の原因となる。
ので1周期は32回、2周期は64回、3周期は108回 + 1.090909…回となるので3周期したら割り込み1回スルーして0.090909…を誤差とするようにした。これで大分音痴は改善された。
今回は単体でスーパーマリオを演奏するようにしたけれどやっぱりMIDI機能つけたいなー。まぁこれはまた今度。
以下ソースです ↓ /********************************************************** 「16kHzサンプリングのリニアPCM音声データ」のPWMによる出力 16kHzのPWM周波数をもちいる カットオフ=8kHzのアナログローパスフィルタ(91Ω、0.1uF)が必要 時間割り込みによって16KHzにてPWM信号を出力 タイマRC TRCIOB を用いる クロックは20,000kHzに設定する コンペアマッチAでカウンタクリア TCNT=0; TRCIOB立ち上がり TCNT=GRB: TRCIOB立ち下がり TCNT=GRA: TCNT=0 20000000/16000=1250 → 20MHzクロック1250サンプルで16,000Hzサンプル音 1250クロック中最初の200サンプルのHを置く これは割り込み処理のための時間稼ぎ 8ビットの音声データは0から255の値を持つので、 音声データ 0 200のH区間+1050のL区間 音声データ255 455のH区間+795のL区間 となる 割り込み周波数は16kHzになる 参考URLは以下の通り!感謝します! R8C/M12A全般 http://j-mcr.net/tech/r8cm12a/main00.html R8C/M12Aのメモリサイズを増やす http://www.geocities.jp/toida_sadahiro/R8C_M1x/R8C_M1x.html PWMを使用した音声信号の出力 http://tokyo-ct.net/usr/kosaka/for_students/H8/pwmsound/pwmsound.html ノイズ生成 http://nekosan0.bake-neko.net/connection2_noise_gen.html **********************************************************/ /* R8C/M12Aマイコンのピンを、下記のように結線します。 18(P1_2) CRフィルタ→スピーカ 20(P1_0) LED */ /*======================================*/ /* インクルード */ /*======================================*/ #include "sfr_r8m12a.h" /* R8C/M12A SFRの定義ファイル */ /*======================================*/ /* シンボル定義 */ /*======================================*/ #define Padd 100 #define PWMPERIOD 1250 /*======================================*/ /* プロトタイプ宣言 */ /*======================================*/ void init( void ); void timer( unsigned short int timer_set ); int random_num(); /*======================================*/ /* 変数宣言 */ /*======================================*/ unsigned short int asa,val,val2,cnt2,cnt3,cnt4,cnt5,cnt6,cnt7,cnt8,cnt9; unsigned short int m1_2,m1_3,m2_2,m2_3,m3_2,m3_3; unsigned char m1_1,m1_4,m2_1,m2_4,m3_1,m3_4,m1,m2,m3; char noise_vol,noise_3,noise_pitch; const unsigned short int freq[88][3]={ {1,291,581}, {6,275,549}, {3,259,518}, {4,245,489}, {1,231,461}, {1,218,435}, {2,206,411}, {3,194,388}, {2,183,366}, {1,173,345}, {2,163,326}, {5,154,308}, {1,145,290}, {2,137,274}, {6,130,259}, {2,122,244}, {1,115,230}, {1,109,217}, {1,103,205}, {6,97,194}, {4,92,183}, {1,86,172}, {4,82,163}, {10,77,154}, {2,73,145}, {3,69,137}, {2,65,129}, {3,61,122}, {2,58,115}, {1,54,108}, {1,51,102}, {13,49,97}, {2,46,91}, {2,43,86}, {2,41,81}, {19,39,77}, {1,36,72}, {2,34,68}, {1,32,64}, {6,31,61}, {1,29,57}, {2,27,54}, {2,26,51}, {2,24,48}, {1,23,45}, {4,22,43}, {1,20,40}, {2,19,38}, {3,18,36}, {3,17,34}, {3,16,32}, {2,15,30}, {1,14,28}, {4,14,27}, {1,13,25}, {4,12,24}, {1,11,22}, {2,11,21}, {2,10,20}, {4,10,19}, {5,9,18}, {6,9,17}, {5,8,16}, {3,8,15}, {2,7,14}, {2,7,13}, {1,6,12}, {7,6,12}, {2,6,11}, {1,5,10}, {5,5,10}, {2,5,9}, {11,5,9}, {2,4,8}, {10,4,8}, {2,4,7}, {5,4,7}, {1,3,6}, {2,3,6}, {15,3,6}, {1,3,5}, {2,3,5}, {10,3,5}, {1,2,4}, {2,2,4}, {3,2,4}, {20,2,4}, {1,2,3} }; /************************************************************************/ /* メインプログラム */ /************************************************************************/ void main( void ) { asm("FCLR I"); /* 全体の割り込み禁止 */ init(); /* 初期化 */ asm("FSET I"); /* 全体の割り込み許可 */ while(1) { p1_0=~p1_0; noise_vol = 32; while (asa < 200){noise_pitch+=1;asa++;timer(4);} asa=0; noise_vol = 0; timer(100); /* コイン */ p1_0=~p1_0; m1 = 62; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]-1; m1_4 = 32; timer(40); m1 = 69; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]-1; m1_4 = 32; timer(100); m1_4 = 16; timer(100); m1_4 = 8; timer(100); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(60); /**********/ /* 1拍目 */ /**********/ p1_0=~p1_0; m1 = 55; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 45; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 29; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 55; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 45; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 29; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); noise_pitch = 3; noise_vol=32; noise_3=32; timer(10);noise_vol=0; timer(90); m1 = 55; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 45; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 29; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 2拍目 */ /**********/ p1_0=~p1_0; timer(100); m1 = 51; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 45; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 29; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 3; noise_vol=32; noise_3=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 55; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 45; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 29; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(100); /**********/ /* 3拍目 */ /**********/ p1_0=~p1_0; m1 = 58; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 50; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 46; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(200); noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); /**********/ /* 4拍目 */ /**********/ p1_0=~p1_0; m1 = 46; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 34; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; //m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(50); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(90); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(90); /**********/ /* 5拍目 */ /**********/ p1_0=~p1_0; m1 = 51; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 43; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 5; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(100); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(90); m1 = 46; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 39; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 31; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(20); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(40); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 6拍目 */ /**********/ p1_0=~p1_0; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(50); timer(100); m1 = 43; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 34; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 27; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(65); /**********/ /* 7拍目 */ /**********/ p1_0=~p1_0; noise_pitch = 5; noise_vol=32; timer(30);noise_vol=0; timer(70); m1 = 48; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 39; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 32; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(90); m1 = 50; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 41; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(20); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(40); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 8拍目 */ /**********/ p1_0=~p1_0; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(50); m1 = 49; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 40; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 33; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 48; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 39; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 32; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(65); /**********/ /* 9拍目 */ /**********/ p1_0=~p1_0; m1 = 46; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 39; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 31; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 5; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(53); m1 = 55; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 46; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 39; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(67); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(3); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(53); m1 = 58; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 50; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 43; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(58); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(12); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(53); /**********/ /* 10拍目 */ /**********/ p1_0=~p1_0; m1 = 60; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 51; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 44; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(100); m1 = 56; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 48; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 41; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 58; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 50; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 42; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(45); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 11拍目 */ /**********/ p1_0=~p1_0; noise_pitch = 5; noise_vol=32; timer(30);noise_vol=0; timer(70); m1 = 55; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 48; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 39; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(90); m1 = 51; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 43; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 36; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(45); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 12拍目 */ /**********/ p1_0=~p1_0; m1 = 53; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 44; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 38; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 50; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 41; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(125); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(65); /************************************/ /* 13~20拍目は繰り返しなのでカット */ /************************************/ /**********/ /* 21拍目 */ /**********/ p1_0=~p1_0; m3 = 27; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 5; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(100); m1 = 58; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 55; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 57; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 54; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(45); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 22拍目 */ /**********/ p1_0=~p1_0; m1 = 56; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 53; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 54; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 50; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m3 = 39; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 55; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 51; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(45); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 23拍目 */ /**********/ p1_0=~p1_0; m3 = 32; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 5; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 47; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 43; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 48; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 44; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 51; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 46; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 39; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(45); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 24拍目 */ /**********/ p1_0=~p1_0; m3 = 39; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 48; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 39; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 51; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 43; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 32; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 53; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 44; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(45); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 25拍目 */ /**********/ p1_0=~p1_0; m3 = 27; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 5; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(100); m1 = 58; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 55; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 57; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 54; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 31; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(45); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 26拍目 */ /**********/ p1_0=~p1_0; m1 = 56; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 53; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 54; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 50; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 55; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 51; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 39; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(45); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 27拍目 */ /**********/ p1_0=~p1_0; noise_pitch = 5; noise_vol=32; timer(30);noise_vol=0; timer(70); m1 = 63; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 58; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 56; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(90); m1 = 63; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 58; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 56; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(45); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 28拍目 */ /**********/ p1_0=~p1_0; m1 = 63; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 58; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 56; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 1; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(100); m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(25); noise_pitch = 3; noise_vol=32; timer(10);noise_vol=0; timer(65); /**********/ /* 29拍目 */ /**********/ p1_0=~p1_0; m3 = 27; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; noise_pitch = 5; noise_vol=32; timer(50);noise_vol=0; timer(30); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); //timer(300); /* 敵に当たった! */ /**********/ /* 1拍目 */ /**********/ p1_0=~p1_0; m1 = 51; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]-1; m1_4 = 32; timer(20); m1 = 52; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]-1; m1_4 = 32; timer(20); m1 = 53; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]-1; m1_4 = 32; timer(60); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(300); /**********/ /* 2拍目 */ /**********/ p1_0=~p1_0; m1 = 50; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 46; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 56; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 53; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(100); m1 = 56; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 53; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 3拍目 */ /**********/ p1_0=~p1_0; m1 = 56; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 53; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(63); m1 = 55; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 51; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 36; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(63); m1 = 53; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 50; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 38; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(70); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(63); /**********/ /* 4拍目 */ /**********/ p1_0=~p1_0; m1 = 51; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m2 = 46; m2_1 = freq[m2][0]; m2_2 = freq[m2][1]/2; m2_3 = freq[m2][2]; m2_4 = 32; m3 = 39; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 43; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m3 = 34; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); m1 = 43; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); /**********/ /* 5拍目 */ /**********/ p1_0=~p1_0; m1 = 39; m1_1 = freq[m1][0]; m1_2 = freq[m1][1]; m1_3 = freq[m1][2]; m1_4 = 32; m3 = 27; m3_1 = freq[m3][0]; m3_2 = freq[m3][1]; m3_3 = freq[m3][2]-1; m3_4 = 32; timer(80); m1_4 = 0; m2_4 = 0; m3_4 = 0; noise_vol = 0; timer(20); timer(300); } } /************************************************************************/ /* R8C/M12A スペシャルファンクションレジスタ(SFR)の初期化 */ /************************************************************************/ void init( void ) { unsigned char i; /* クロックを高速オンチップオシレータ(20MHz)に変更 */ prc0 = 1; /* プロテクト解除 */ hocoe = 1; /* 高速オンチップオシレータ発信開始 */ for(i=0; i<50; i++ ); /* 安定するまで少し待つ(約10ms) */ hscksel = 1; /* 高速オンチップオシレータのクロックに切換え*/ scksel = 1; /* システム基準クロック 低速→高速切換え*/ phissel0 = 0; /* 000: 1分周 */ phissel1 = 0; /* 010: 4分周 */ phissel2 = 0; /* 101:32分周 */ prc0 = 0; /* プロテクト保護 */ /* ポートの入出力設定 */ pd1 = 0x7f; /* ポート1入出力設定 0111:1111 */ pd3 = 0xff; /* ポート3入出力設定 */ pd4 = 0xdf; /* ポート4入出力設定 1101:1111 */ pda = 0xff; /* ポートA入出力設定 */ /* 端子のプルアップ設定 */ pu1_7 = 1; /* ポート1のプルアップ設定 */ pu4_5 = 1; /* ポート4のプルアップ設定 */ // P4_5端子を使う場合 p45sel1 = 0; /* P4_5をINT0端子にする */ p45sel0 = 1; int0en = 1; /* INT0入力許可ビット:許可 */ int0f1 = 1; /* INT0入力フィルタ選択ビット */ int0f0 = 1; /* 11=f32でサンプリング */ int0sb = 0; /* INT0入力エッジ選択ビット */ int0sa = 0; /* 00=立ち下がりエッジで割込発生 */ ilvle5 = 1; /* 割り込み優先レベル設定ビット */ ilvle4 = 0; /* INT0はe1とe0に設定 10=レベル2*/ // P1_7端子を使う場合 p17sel1 = 0; /* P1_7をINT1端子にする */ p17sel0 = 1; int1en = 1; /* INT1入力許可ビット:許可 */ int1f1 = 1; /* INT1入力フィルタ選択ビット */ int1f0 = 1; /* 11=f32でサンプリング */ int1sb = 0; /* INT1入力エッジ選択ビット */ int1sa = 0; /* 00=立ち下がりエッジで割込発生 */ ilvlc5 = 1; /* 割り込み優先レベル設定ビット */ ilvlc4 = 0; /* INT1はc1とc0に設定 10=レベル2*/ /* タイマRCによるPWM出力 */ msttrc = 0; /* タイマRCを有効にする */ p12sel1 = 0; /* TRCIOB端子の選択 */ p12sel0 = 1; /* P1_2をTRCIOB端子にする */ pwm2_trcmr = 1; /* PWMモード */ pwmb_trcmr = 1; /* TRCIOB出力 PWM出力する */ cclr_trccr1 = 1; /* コンペア一致AでTRCCNTカウンタクリア */ cks0_trccr1 = 0; /* 000:f1(1分周)カウントソース */ cks1_trccr1 = 0; cks2_trccr1 = 0; asm("nop"); asm("nop"); polb_trccr2 = 0; /* TRDIOB outputレベル:Lアクティブ */ trccnt = 0x0000; /* TRCCNT カウントクリア */ trcgra = PWMPERIOD-1; /* PWM周期の設定 */ trcgrb = Padd; /* TRCIOB端子のON幅の設定 */ eb_trcoer = 0; /* TRCIOBの出力 出力許可 */ imiea_trcier = 1; imieb_trcier = 1; ilvl3 = 0x10; /* 0001:0000 割り込み許可(レベル1)*/ cts_trcmr = 1; /* TRCCNT カウント開始 */ } /************************************************************************/ /* タイマ本体 */ /* 引数 タイマ値 1=1ms */ /************************************************************************/ void timer( unsigned short int timer_set ) { int i; do { //for( i=0; i<871; i++ ); for( i=0; i<700; i++ ); } while( timer_set-- ); cnt4 = cnt5 = cnt6 = cnt7 =cnt8 = cnt9 = 0; } /************************************************************************/ /* Timer RC 割り込み処理 */ /************************************************************************/ #pragma interrupt _timer_rc(vect=7) void _timer_rc(void) { /*TCNT=GRAとなったときの割り込み要求を許可*/ if ( imfa_trcsr == 1 ) { /* IMFA flag on? */ imfa_trcsr = 0; /* IMFA flag clear */ /*ここで TRCIOB にPWM値+Paddを与える*/ /* Noise */ cnt2++; if (cnt2 > noise_pitch) { cnt2 = 0; val2 =val = (random_num()&0x01)*noise_vol; }else{val = val2;} /* Music1 短形波 */ cnt5++; if(cnt4 == m1_1){cnt5--;cnt4=0;} else{ if(cnt5 <= m1_2){val += m1_4;} else if(cnt5 == m1_3){cnt5 = 0;cnt4++;} } /* Music2 短形波 */ cnt9++; if(cnt8 == m2_1){cnt9--;cnt8=0;} else{ if(cnt9 <= m2_2){val += m2_4;} else if(cnt9 == m2_3){cnt9 = 0;cnt8++;} } /* Music3 三角波 */ cnt7++; if(cnt6 == m3_1){cnt7--;cnt6=0;} else{ if(cnt7 <= m3_2){val += m3_4 * cnt7 / m3_2;} else if(cnt7 <= m3_3){val -= m3_4 * cnt7 / m3_2;} else if(cnt7 == m3_3 +1){cnt7 = 0;cnt6++;} } trcgrb = val + Padd; } if ( imfb_trcsr == 1 ) { /* IMFB flag on? */ imfb_trcsr = 0; /* IMFB flag clear */ } } /************************************************************************/ /* making random num */ /************************************************************************/ int random_num() { static int seed = 12345; //random seed unsigned int random_value; // random_value = (seed>>1) + (bitRead(seed, 16) xor bitRead(seed, 13) xor 1)*0x8000; random_value = (seed>>1) + (0x01&(seed>>13) ^ 0x01&(seed>>4) ^ 1)*0x8000; seed = random_value; return seed; } /************************************************************************/ /* end of file */ /************************************************************************/
コメント
こんにちは
さっぱり解りません&%$இ#@
信頼度の低い請売り情報ですが
ファミコンかスーパーファミコンを当時
ロシアが持ち帰って戦闘機に積もうとしたそうです
ゲーム機のCPU?同時期のPCと比べ物にならない性能だと聞いてました。
2017/04/23 14:59 by mechagaku URL 編集
Re: こんにちは
いやいや、mechagakuさんこそFXという難しいことやってるじゃないですか!
お金の運用には興味あって証券会社に口座を持ってはいるんですが、、やってないです。
ファミコンのCPUはApple社製のもので、他社がこのCPUを特定するのに1年かかったとか。
そんな周りにあまりない部品を使い、開発環境を整え、プラットフォームを作成するのは凄く先見の目が必要だったと思います。
2017/04/27 00:23 by アイノウエオ URL 編集