ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

binary

ゼロからのOS自作入門(その5)RustでCの構造体を受け取る

ゼロからのOS自作入門(その4)osbook_day03c の続き。 natsutan.hatenablog.com 4日目はUEFIアプリからグラフィックスの情報をカーネルに渡します。今、UEFIアプリがC、カーネルをRustで書いているので、CとRustの間で構造体のやりとりが必要です。 std::os…

基礎から学ぶ組込Rust

基礎から学ぶ組込Rustの本を読みました。久しぶりに組込プログラマに戻れた気がしてとても楽しめました。 www.c-r.com どんな本 Wio TerminalをRustで制御していく本です。 組込がある程度分かっていて、組込Rustに興味がある人 Rustはある程度分かっていて…

ゼロからのOS自作入門(その3) Rustで書いたカーネルをブートさせる

ゼロからのOS自作入門(その2) メモリマップの取得 の続きです。 natsutan.hatenablog.com Cで書かれたフレームバッファを塗りつぶすカーネルを作っていたら、UEFIアプリは無理でもOSだけならRustで書けるんじゃと思ってやってみました。Rustで書かれたカー…

kerasの学習データをCで読み込む

kerasのネットワーク情報と学習データを保存する方法はこちら http://d.hatena.ne.jp/natsutan/20170212この続きで保存した学習データをCで読み込んでみます。 hd5形式をネットワーク名に対応させてnumpy形式で書き出す。 ファイル構成を調べても、どのデー…

たのしいバイナリの歩き方

たのしいバイナリの歩き方を読んだので感想を簡単に。 内容 第一章と第二章は、ゆるふわバイナリ入門です。ツールを使って、逆アセ、メモリダンプを行いながら、アセンブラの雰囲気をつかんでいきます。第三章のバッファオーバーフローから一気に難易度が上…

Cプログラム高速化研究班

Cプログラム高速化研究班 コードを高速化する20の実験と達人の技 読みました。 Cの最適化について実体験を元に、プロファイルの結果等を交えながら、いろんな角度からの最適化について書かれた本です。実践的か、と言われるとすぐに実践に役に立ちそうな話は…

DOS窓を開かないコンソールアプリケーションを作る

日曜日にGaucheのnoconsole版の作り方を教わったのでまとめてみました。 https://twitter.com/#!/anohana/status/204144556902584320 https://twitter.com/#!/SaitoAtsushi/status/204143669828268033 Gaucheのnoconsole版 Windows版のGaucheには、通常のgos…

tclkitを使って単一exeファイルを作る。

Tcl/Tkには、単一exeを作るためのtclkitというツールが存在します。tclkitを使ってpath.tclからpath.exeを作ってみます。 ファイルの入手 最低限必要なファイルをequi4.comから入手します。 http://equi4.com/pub/sk/から、sdx.batとsdx.kitをダウンロードし…

ヘネパタのキャンペーンサイト

調べ物をしていたら、書籍 Computer Architecture のキャンペーンサイトを発見しました。、 Welcome to the Companion Site for Computer Architecture: A Quantitative Approach 5eここから、Computer Architecture のAppendixがpdfでダウンロードできます…

Tcl/Tkで使われているカプセル化手法

Tcl/Tkのソースコードを眺めていたら、面白そうなコードを見かけたので紹介します。 tclとtkの関係 例えば以下のコードをhello.tcl等に保存して、wish hello.tclを実行すると、いわいるtcl/tkのアプリケーションが立ち上がります。 button .b -text {push} -…

JPEGファイルを目grepする。

元ネタはこちら。 http://www.slideshare.net/murachue/grep-8057239 バイナリを見て文字コードを識別する話がおもしろかったです。私も持ちネタを一つ公開します。他にもあるはずですので、みんなでネタを持ち寄りましょう。タイトルの通りJPEGファイルの見…

組み込みプロセッサ技術

組み込み用のプロセッサについて素晴らしい本を見つけたので紹介します。 http://www.amazon.co.jp/dp/4789845494 内容 組み込みで使用されるプロセッサについて、基本的な概念から最新の技術まで、幅広くかつ深く説明してある本です。基本を押さえながらも…

Cygwinで動くsparc64クロス環境

cygwinで64bit SPARCのクロス環境を作りました。バイナリ一式はこちらです。 sparc64-elf_2009_2_26.zip ファイルを展開して、/usr/local/sparc64/binに実行ファイルが来るようにコピーし、/usr/local/sparc64/binにパスを通せばOKです。 クロス環境構築時の…

OpenSPARC用ROMファイルを逆アセする方法

Twitterでヘッダーファイルのないテキスト領域の逆アセ方法が分からないとつぶやいたところ、バイナリアンな人達からアドバイスをもらいました。ありがとうございます。http://twitter.com/yusk_/status/1240773710 http://shinh.skr.jp/m/?date=20090223 ob…

加算器を作ろう 最後の高速化

最初に決めた条件をはずせるなら、さらに高速になる可能性があります。 FPGAを変える まずオプションよりも何よりも一番効くのが「最速のデバイスにする」事です。アルゴリズムによる最適化を図る前に、最速のPCを買ってくるやり方です。現在入手可能な最速…

加算器を作ろう 手でチューニングしてみた。

「lpm_add_subを使っていれば問題無い」が結論なのですが、悔しいのでさらにチューニングしてみました。Fmaxを上げる事だけを考えているので実用的ではありません。手間暇かければ速くなるという例です。 回路の方針 32bitずつで加算を行い、各クロックでキ…

加算器を作ろう carry select adderによる加算

http://d.hatena.ne.jp/natsutan/20081121の続きです。前回はlpm_add_subを使用しましたが、手動で高速化を図ってみましょう。今回はcarry select adderと呼ばれる手法を用いました。carry select adderとは上位の加算をキャリー有り、キャリー無しの両方で…

加算器を作ろう lpm_add_subによる加算

次に最も実践的であるMegacore wizardを使う方法を紹介します。通常はこの方法だけ知っていれば十分です。 lpm_add_subの設定 Quatus2のTools→Maga Wizard Plug-In Managerを起動します。Arithmeticからlpm_add_subを選択しましょう。bit幅の設定と、Create …

加算器を作ろう マルチサイクルによる加算

CLKの周波数を維持したままタイミング制約を満たさない加算を実行するには、マルチサイクル制約を使うという手法があります。要するに加算自体を数クロックかけて行うので、タイミング制約は緩くしてねという事です。クロックによる同期設計を半ば放棄してい…

加算器を作ろう 最初の一歩

加算器のFPGA実装について調べた所、奥が深くとても面白い事がわかりました。特にFPGA実装に限ると、キャリー専用配線や、LUT構造により通常の加算器とは少し違った性能になることがあります。加算器をいかに速くできるかについて、いろいろと挑戦してみまし…

グレイコード

符号付き2進数のバリエーションのコメントで面白い話が聞けましたので検証してみました。元ネタは、第二の魚の骨発見です。どうしてこういう事が起きるのか、またグレイコードならどう違うのかをシミュレーションしてみました。Verilogによる実装も後ろで説…

符号付き2進数のバリエーション

ディジタル数値演算回路の実用設計に綺麗にまとまっていたので、表をそのまま使わさせていただきます。いろんな表記の中から好きな物を選べるのがVerilogの楽しいところでもあります。 10進 ストレートバイナリ 符号+絶対値 1の補数 2の補数 オフセットバイ…

Exercise 2.52 Instruction Set Styles

このCソースに対して等価なアセンブラを書き、4つのアーキテクチャを比較しなさい。 a = b + c; b = a + c; d = a - b; Accumulator Accumulatorの場合は8命令で実行できます。 load AddressB add AddressC # b + c store AddressA add AddressC # a + c sto…

Instruction Set Styles

a = b +c; を、Accumulator、Memory-memory、Stack、Load-storeの命令セットスタイルでどうなるか考えて考えようという問題。a,b,cはメモリ上の変数です。Load-storeの命令スタイルは、教科書にでてくるMIPSのスタイルです。 Accumulator Accumulatorの場合…

PowerPC

In More DepthにPowerPCの特徴が書いてあったのでまとめました。PowerPCはMIPSに近いアーキテクチャを持っています。一番の違い(The primary difference)は、2つの追加のアドレッシングモードと、いくつかの命令です。 Indexed Addressing と Update Address…

Exercise 2.22 MIPS Coding and ASCII Strings その2

2.22 [20] Write a procedure, bcount, in MIPS assembly language. The bcount procedure takes a single argument, which is a pointer to a string in register $a0, and it returns a count of the total number of b characters in the string in regis…

Exercise 2.21 MIPS Coding and ASCII Strings

[30] Write a program in MIPS assembly language to convert an ASCII decimal string to an integer. Your program should expect register $a0 to hold the address of a null-terminated string containing some combination of the digits 0 through 9.…

Exercise 2.20

null-terminate された文字列"A byte is 8 bits"のバイト数を求めなさい。 16文字+nullなので、合計17バイトになります。コンパイラを使って確認してみましょう char s[] = "A byte is 8 bits"; をsde-gccでコンパイルすると、こうなります。 .file 1 "c.c"…

Exercise 2.19

IrisとJulieの名前を、ASCIIとUnicode(Basic Laten character set)で表現しなさい。 テキストエディタで書いて、各文字コードで保存、バイナリエディタで覗いてみたら簡単にわかります。 ASCII Iris 49 72 69 73 Julie 4A 75 6C 69 65 UTF-8 Iris 49 72 69 7…

Exercise 2.16-2.18 Fibonacci number

フィボナッチ数を、再帰バージョンと末尾再帰バージョンにしたときの比較です。SICPの1.2.2 Tree Recursionと全く同じ問題ですね。 http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-11.html#%_sec_1.2.2 再帰バージョン iint fib(int n){ if (n == 0)…