The beast of halfpace

日々のメモ

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  168  : 記事  0  : コメント  657  : トラックバック  51

ニュース

Firefox ブラウザ無料ダウンロード

技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

2009年7月3日 #

大人の科学マガジン 4bitマイコン付買った の続き

裏の命令表見ながら1秒ごとに7Seg LEDで1->2->3...とカウントするプログラムを作ってみました

Adr

命令

コード

コメント

0 8 1 TIA 1 Aレジスタに1を入れる
2 1 AO Aレジスタの内容をLEDへ出力
3 3 CY AレジスタとYレジスタを入れ替え
4 8 A TIA 10 Aレジスタに10を入れる
6 EC CAL TIMR Aレジスタにで指定した時間ウェイト(0.1×10=1秒)
8 3 CY AレジスタとYレジスタを入れ替え
9 9 1 AIA 1 Aレジスタの内容を+1(インクリメント)
B 3 CY AレジスタとYレジスタを入れ替え
C 3 CY AレジスタとYレジスタを入れ替え
D F 02 JUMP 02 2番地へ戻る

B,C番地でAとYのスワップを2度行っているのはAレジスタの値を保持しつつ実行フラグを立てるためです。

JUMP命令は実行フラグが立っていないと分岐できないためこのようなことをしました。

もっといいやり方があるんでしょうが命令表見ながらパコパコ打っただけなんで^^;

アセンブラというか機械語の教材として結構いいんじゃないかな?と思いました。

posted @ 0:39 | Feedback (2)

2009年7月1日 #

まだ箱も開けてませんが、最後のページに命令コード早見表なるものが付いていて、それを見てたまげた。

命令コード

ニーモニック

働き

実行フラグ

詳細

0 KA K->Ar 0,1 押された数字キー(0~F)をAレジスタに代入する

ハード直結???こういうもんなの?これがこの世界では普通なの?キーなんてポートから読むもんじゃないの?

仕事柄今までそこそこの数のCPUをいじってきたつもりだったけどこれは驚いた。

# 命令コードを減らすためにこうなっているだけだと思うけど

そういえば4bitってロクにさわったこと無いな(曖昧な記憶では20年近く前に1度)。

ナウいヤングだからw

posted @ 0:01 | Feedback (11)

2009年6月30日 #

ここに書くような事でもないですが意見が聞いてみたくて…

 

先日飲み屋で変わり寿司の話になりました。僕の隣に座っていた人がドバイでフィリピン人の握るチョコレート寿司なるものを食べたそうです。物は握ったご飯にとろ~りチョコレートのかかったもので、味は当然不味かったそうですw

# 寿司として考えると、国・職人の国籍・ネタのどれを取っても美味くなる要素が無いと思えるんですが

実際にお会いしたことのある方は僕から聞いた事があるかもしれませんし、その方にも言ったのですが僕が今までで一番印象に残っているのがトマトの握りです。

名古屋に住んでいた頃にある店で「いいトマトが入った」という話が出たら、そこにいたお客さんがやおら5~6個掴んで「ちょっと握ってもらってくる」と言って店を出て行きました。

数十分後そのお客さんは大き目の寿司桶に沢山の「トマトの握り」を持って帰ってきて、その場にいた僕も食べさしてもらったのですが、これが予想に反して美味いのです。

トマトは固めのフルーツトマトのようなもので、それをスライスして握っただけなのですが、本当に美味しかったんですよ(中々信じてもらえないけどw)。
# 因みにサビ入りだったはずです。醤油を付けずに食べました。

「俺(私)こんな変わり寿司食べたことある!」

という人がいたら是非コメントください。

# トマトの握り美味しそうだと思う人もw

posted @ 1:09 | Feedback (5)

2009年6月24日 #

0x12345678
このデータをストアすると、各エンディアンで以下のようにメモリ上に保存されます。

Address Little Big
0000 78 12
0001 56 34
0002 34 56
0003 12 78

  x86のようなリトルエンディアン環境でビッグエンディアンで32bit値をストアしたい場合、僕がパっと思いつくのは以下の2つの方法です。

1. Byteサイズのポインタを使ってコピー
void store_be(DWORD data, void* pw)
{
    BYTE* pr = (BYTE*) &data;
    BYTE* pwb = (BYTE*) pw;
    pwb[0] = pr[3];
    pwb[1] = pr[2];
    pwb[2] = pr[1];
    pwb[3] = pr[0];
}

2. Big Endianへ変換して格納

#define CONVERT_ENDIAN(d) ((((d) << 24) & 0xff000000) | (((d) << 8) & 0x00ff0000) | (((d) >> 8) & 0x0000ff00) | (((d) >> 24) & 0x000000ff))
void store_be(DWORD data, void* pw)
{
    *((DWORD*) pw) = CONVERT_ENDIAN(data);
}

ここからが本題です。

問題は任意のビット長のデータを任意のビット位置から配置する場合です。
例えば0x123という有効ビット長が12bitのデータを各エンディアンで先頭バイトから詰まって
ゆくように格納する場合はどうなるでしょう?
メモリイメージで以下のように格納される場合です。

Address Little Big
0000 23 12
0001 *1 3*

※ ‘*’は未使用

このようにリトルエンディアンとビッグエンディアンでは単にバイトオーダーが違うだけでは
なくビット配置も異なります。
ビット走査(?)としては
・リトルエンディアンでは0->7(1byte目)8->15(2byte目)…
・ビッグエンディアンでは7->0(1byte目)15->8(2byte目)…
このことからわかるようにリトルエンディアンでは開始ビット位置+ビットサイズ-1で末尾ビット
位置を求めることができますが、ビッグエンディアンではそんなに単純にはできません。

このような場合、ビッグエンディアンのビット走査による位置の変化をリトルエンディアンと同じようにしてしまえば計算が楽になります。
つまり7->0->8->15のようなビット位置進行を0->7->8->15になるようにすれば良いのです。
これはビット位置を以下の変換式で変換してから計算することで可能です。
#define CONVERT_POS(n) (((n) | 7) - ((n) & 7))

上記の例でいえば7bit目(※ビッグエンディアンでは7bit目が最初のビットになる)から12bitの領域の末尾ですから、

CONVERT_POS(CONVERT_POS(7) + 12 ? 1);

これで末尾位置12を計算で求める事が出来ます。

このマクロと先のエンディアン変換マクロを併用することで任意位置から配置されるビッグエンディアンデータをマスクデータを含め比較的容易に作成することが出来ます。ただし、計算に用いている型のサイズを超えるデータを扱う場合や、境界を跨ぐ位置にデータが配置される場合は当然2回以上の計算が必要になりますが…

posted @ 0:59 | Feedback (3)

2009年6月20日 #

僕は普段Ultimate Earsのヘッドフォンを使っているのですが、扱いがM-AUDIOからLogicoolになったらそれまで普通に家電量販店で買えた交換用イヤーチップやケーブルなどが買えなくなってしまいました(´・ω・`)

# 何故?何でなの?ロジクールさん?

 

今日秋葉原を散策していたらUltimate EarsではなくHearing Componentsという会社が出しているものですが、3Studio/5Pro/10Pro用の交換イヤーチップを発見しました。

complyformtips

低反発ポリウレタン素材のチップです。

元々ウレタンチップを好んで使っていたこともあり、試しに購入してみたら

コレはイイィ~

10Proで試したのですが、低音が一層はっきり出るようになりました(ってか出すぎかも^^;)。低音だけではなくその他の音も聞き取りやすくなり、更に音の定位がより良くなりました。

5Proでも同様な傾向で、10Proと比べたら低音不足な5Proでしたがこのイヤーフォームを使うとかなりしっかり低音が出るようになります。5Proで低音不足を感じているのなら10Proへ買い換える前にコレを試してみるのも良いと思います。
# 買い換えても使えますし

3studioでは…上位2機種程低音が多くなった感じはしませんが(ってか最近3studio使ってなかったから記憶が曖昧w)、1つ1つの音がわかりやすくなるといった上位2機種と同様の効果がありました。

Ultimate Earsだけでなく他メーカーのカナル型ヘッドフォンで使用できるモデルも出ていますので気になった方は試してみては如何でしょうか?

ベースをはっきり聴き取ることが出来る。嬉しいぃ~

あ、低音厨じゃありませんので。あしからずw

posted @ 23:24 | Feedback (2)

Windows7 RC で遭遇したシャットダウンできない病について

Windows7のトラブルシューティングとちょっと嬉しい機能追加

インストールしたWindows7でシャットダウン処理が終了しなかった原因がわかりました。

オーディオカードのAudioPhile 2496だったようです。

このカードを抜いたらきちんとシャットダウンするようになりました。(当然?)Windows7用のドライバが出ていないのでとりあえずVista用のドライバを入れて音が鳴るから問題なしと思っていたんですが、終了処理で問題があるみたいですね。M-AUDIOはきっとWindows7用のドライバを出してくれると期待しているので、それまでの間はとりあえずもう一台のEmu 0404と交換して試してみようと思います(しかしこっちもVista用ドライバで動かさなければならない)。

それでもダメならDACを買おうかな?

アレ?64bitのオーディオドライバーがないーって似たような事を書いている人がいるッ!www

# CDPをSA-15S1からSA-15S2へ買い換えてDACとして使うという手も無くはないけど
# SA-15S2の音質が今一気に入らないから結局やめちゃったんだよなぁ…

posted @ 22:44 | Feedback (2)

2009年6月18日 #

随分経ったけど

自動巻きの時計が欲しい

の続き。

 

先日ヨドバシで「おを」と思えるスケルトンな腕時計を見つけたのでとりあえずエヴァに使徒を8匹ほど倒してもらって購入。

watch 
左は普段しているカシオの時計

腕が細いからデカイ時計がミスマッチなのが悩みですが欲しかったスケルトンな自動巻きが買えて満足。

# なんとなくパチモンなんじゃないか?という疑惑もあるのですが^^;

posted @ 1:43 | Feedback (2)

先日バーで

「安藤さんとK君(隣にいた男性)は草食系ですよね」

とバーテンさんに言われました。
恋愛に関しては消極的で自分から告白するでも無し間違ってはいないような気もします。

その時店の女の子から

「草食系ってどういうのを言うんですか?」

と聞かれたので

「自分から告白せずに常に受身な男の事かな?」

と答えたのですが、すると次にこのような質問をされました

「じゃあ、付き合っても自分から求めたりもしないんですか?」

どうなんだろ?隣のK君と顔を合わせ

「それは求めるんじゃない?付き合う意味無いじゃん」

「いや、そこも受身なんじゃないですか?」

と議論をし、結局

「多分自分から積極的には行かないんじゃないかな?」

と返答しました。

このとき疑問に思ったのが草食系男子の定義です。何となく聞きかじった情報から僕は大体以下のような感じなのかな?と思っているのですが、正しい定義はどのようなものなのでしょうか?

  1. 自分から告白しないが告白されて断るわけでもない
  2. 付き合っても求めないが求められて拒否するものでもない
  3. いざそういうことになってもゴルゴばりに常に下
  4. 女の子がとてもフレンドリーに接客するお店に行かない
  5. 特殊なスキンシップサービスのあるお店に行かない
  6. でも断れないので客引きに言われるまま行ったが韓国式と謳っておきながら中国人が出てきて逆上

 

しかし最近は何でもカテゴライズして名前を付けたがっているような気がします?この件だって「消極的な男性が増えてますね」ってだけの話だと思うんですよ。尤も、「草食系男子」のように名前付けをしていることで上記のように会話の発端ともなるのであながち悪くもないのかもしれません。

# それはともかくデザインパターンですが、名前が付けてあっても20数個も覚えられません(´・ω・‘)

posted @ 1:15 | Feedback (3)

2009年6月8日 #

※便宜上構造体(struct)もクラスと書いています
※使用したコンパイラはVC9/gcc4.3.2です

クラス内にconst変数があり、クラス内でのテンプレートクラス宣言の引数で同じ名前を使ったプログラムをVCとgccでコンパイル・実行した場合に挙動が変わります。

#include <iostream>
using namespace std;

struct test
{
    const static int value = 1;

    template<int value> struct inner1 {
        const static int inner_value = value;
        int get_value() { return value; }
    };
};

int main()
{
    test::inner1<2> t1;

    cout << t1.inner_value << endl;
    cout << t1.get_value() << endl;
}

VCでの実行結果は
2
2

gccの実行結果は
2
1

VCの場合inner1の中でのvalueは常にテンプレート引数のvalueが使用されていますが、gccの場合静的変数の初期値valueはテンプレート引数が使われているのにクラス内メソッドget_valueの戻り値のvalueで外側のクラスtestの静的変数が使われています。

どちらの挙動が正しいのかは知りませんが、僕はVCの方が正しいような気がしています。

posted @ 0:43 | Feedback (2)

2009年6月4日 #

ナウいヤングはWindows7 RCだよね、やっぱり。

Windows7のトラブルシューティングとちょっと嬉しい機能追加

の最後に書いたシャットダウン出来ない病ですが、スタートメニューからシャットダウンできなくなるとかじゃなく、シャットダウンシーケンスが終わらないというものです。

具体的には、シャットダウンの以下の画面

shutdown

のまま何時まで経っても電源が切れないのです。

※間違っていました。画面はフェードアウトして消えますが、電源LEDはずっとONでファンも回りっぱなしの状態になります。

面倒くさいので電源ボタン4秒押しで消していますし、Vistaは正常に起動・終了できるので、Vista使えばいいや、況やubuntu入れてあるからいいやと強がってはいますが…

同じ症状が出て原因を知っている方がいたら教えてくださいm(_ _)m

それから

Windows7ではアンチウィルスソフトは何がオススメでしょうか?

カスペルスキーのライセンスが余っているからそれを入れればいいかなぁ~なんて思ってるんですが。
つまりまだアンチウィルスソフトは何もいれていない状態で使っている

posted @ 1:12 | Feedback (6)