<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>組み込み</title><link>http://blogs.wankuma.com/andochin/category/756.aspx</link><description>組み込み系の与太話</description><managingEditor>あんどちん</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>あんどちん</dc:creator><title>Ubuntu 9.04 on Zaurus</title><link>http://blogs.wankuma.com/andochin/archive/2009/08/08/179961.aspx</link><pubDate>Sat, 08 Aug 2009 20:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2009/08/08/179961.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/179961.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2009/08/08/179961.aspx#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/179961.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/179961.aspx</trackback:ping><description>&lt;p&gt;カーネルが正式サポートしていること、UbuntuのARMサポートが出来ていることからやっていたんですが、未だ収束せず。でもとりあえず動くようになった。&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://andochin.wankuma.com/images/Ubuntu9.04onZaurus_101AC/zau_login.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="zau_login" border="0" alt="zau_login" src="http://andochin.wankuma.com/images/Ubuntu9.04onZaurus_101AC/zau_login_thumb.jpg" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="center"&gt;&lt;strong&gt;&lt;font color="#800000"&gt;ログイン画面が出るようになった。Ubuntuっぽいw&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://andochin.wankuma.com/images/Ubuntu9.04onZaurus_101AC/zau_system.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="zau_system" border="0" alt="zau_system" src="http://andochin.wankuma.com/images/Ubuntu9.04onZaurus_101AC/zau_system_thumb.jpg" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="center"&gt;&lt;strong&gt;&lt;font color="#0080c0"&gt;ネットワークカードを繋いでUSBキーボードも繋いだところ&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://andochin.wankuma.com/images/Ubuntu9.04onZaurus_101AC/zau_ff_syl.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="zau_ff_syl" border="0" alt="zau_ff_syl" src="http://andochin.wankuma.com/images/Ubuntu9.04onZaurus_101AC/zau_ff_syl_thumb.jpg" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="center"&gt;&lt;strong&gt;&lt;font color="#ff8000"&gt;firefox 3.0.8とSylpheed 2.6.0を動かしたところ&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;firefox3はあくまでも&lt;strong&gt;&lt;font color="#ff0000"&gt;動くよってレベル&lt;/font&gt;&lt;/strong&gt;ですね。実測したわけじゃないけど起動に数分かかるような感じ。&lt;br&gt;起動後はどうにか使えるレベルです。とりあえずzaurusで今時のソフトが動くという事に意義があると思うわけです。&lt;/p&gt; &lt;p&gt;SDHC対応(Transcendの16Gを認識したのを確認。但しスペカなら対応しているかも)も何気に嬉しいし。&lt;/p&gt; &lt;p&gt;Linuxには疎いし、カーネルセッティングが良く分かっていないので&lt;/p&gt; &lt;ol&gt; &lt;li&gt;電源Off後1970年1月1日に戻ってしまう&lt;/li&gt; &lt;li&gt;X環境でキーボードセッティングが出来ていない&lt;/li&gt; &lt;li&gt;タッチスクリーン動作がタッチパッドみたいになっている。任意の場所へカーソルの移動が難しい&lt;/li&gt; &lt;li&gt;起動時にUSBデバイスを認識したらその後他のデバイスが認識できない&lt;/li&gt; &lt;li&gt;e-mobile D01NXのドライバが無い(ネットの情報を漁ってソースを入手したけどビルドできない)&lt;/li&gt; &lt;li&gt;やっぱり遅いという現実からは目をそむけられないw&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;等、まだまだ問題はありますが、(ドライバ以外は)今後セッティングでどうにかなりそうな感じ。&lt;/p&gt; &lt;p&gt;# ちなみに今試しているカーネルは2.6.30.4。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;それから今回色々試すのに助かったのはkexecでマルチブートを可能にしたこと。このおかげで、正常に起動できる事を確認したDebian lenny環境を保存しておくことで、色々な環境を試す事が出来るようになりました。&lt;/p&gt; &lt;p&gt;セッティングを間違えて作ったカーネルがkernel panicおこしてもDebianを立ち上げて正常に動作するカーネルを上書きすればいいので。&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://andochin.wankuma.com/images/Ubuntu9.04onZaurus_101AC/kexec.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="kexec" border="0" alt="kexec" src="http://andochin.wankuma.com/images/Ubuntu9.04onZaurus_101AC/kexec_thumb.jpg" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p align="center"&gt;&lt;strong&gt;&lt;font color="#00caca"&gt;kexecの起動選択画面&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p align="left"&gt;#Androidも試してみたんだけど、上手く動かせなかった。うぅん、まだまだ遊べる&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/179961.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あんどちん</dc:creator><title>よーやく起動するようになった。</title><link>http://blogs.wankuma.com/andochin/archive/2009/07/23/178929.aspx</link><pubDate>Thu, 23 Jul 2009 01:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2009/07/23/178929.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/178929.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2009/07/23/178929.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/178929.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/178929.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://blogs.wankuma.com/andochin/archive/2009/04/04/170751.aspx"&gt;タスマニアンデビル&lt;/a&gt;&lt;/p&gt; &lt;p&gt;の続き。&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://andochin.wankuma.com/images/2e6219050690_1A69/kernel26302.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="kernel26302" border="0" alt="kernel26302" src="http://andochin.wankuma.com/images/2e6219050690_1A69/kernel26302_thumb.png" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;先日出たLinuxの2.6.30をZaurus用に作成。やはり最大の変更点はTuzがTuxになったことだろうか？&lt;/p&gt; &lt;p&gt;色々試行錯誤してネット上で色々ファイルを上げてくれている人のおかげでようやくQemu上のZaurusエミュレーションでカーネルが起動するようになった。&lt;/p&gt; &lt;p&gt;まだまだ先は長いなぁ…&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;左上のペンギンの近影がこちら。&lt;/p&gt; &lt;p align="center"&gt;&lt;a href="http://andochin.wankuma.com/images/2e6219050690_1A69/tuxanddog.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="tuxanddog" border="0" alt="tuxanddog" src="http://andochin.wankuma.com/images/2e6219050690_1A69/tuxanddog_thumb.jpg" width="244" height="164"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/178929.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あんどちん</dc:creator><title>プログラム組んでみた　～大人の科学マイコン２～</title><link>http://blogs.wankuma.com/andochin/archive/2009/07/03/176995.aspx</link><pubDate>Fri, 03 Jul 2009 00:39:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2009/07/03/176995.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/176995.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2009/07/03/176995.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/176995.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/176995.aspx</trackback:ping><description>&lt;P&gt;&lt;A id=viewpost.ascx_TitleUrl href="/andochin/archive/2009/07/01/176830.aspx"&gt;&lt;FONT color=#3f3d3d&gt;大人の科学マガジン 4bitマイコン付買った&lt;/FONT&gt;&lt;/A&gt; の続き&lt;/P&gt;
&lt;P&gt;裏の命令表見ながら１秒ごとに7Seg LEDで1-&amp;gt;2-&amp;gt;3...とカウントするプログラムを作ってみました&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;
&lt;P align=center&gt;Adr&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;
&lt;P align=center&gt;命令&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;
&lt;P align=center&gt;コード&lt;/P&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;
&lt;P align=center&gt;コメント&lt;/P&gt;&lt;/TD&gt;
&lt;P&gt;&lt;/P&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;0&lt;/TD&gt;
&lt;TD vAlign=top&gt;8 1&lt;/TD&gt;
&lt;TD vAlign=top&gt;TIA 1&lt;/TD&gt;
&lt;TD vAlign=top&gt;Aレジスタに1を入れる&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;2&lt;/TD&gt;
&lt;TD vAlign=top&gt;1&lt;/TD&gt;
&lt;TD vAlign=top&gt;AO&lt;/TD&gt;
&lt;TD vAlign=top&gt;Aレジスタの内容をLEDへ出力&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;3&lt;/TD&gt;
&lt;TD vAlign=top&gt;3&lt;/TD&gt;
&lt;TD vAlign=top&gt;CY&lt;/TD&gt;
&lt;TD vAlign=top&gt;AレジスタとYレジスタを入れ替え&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;4&lt;/TD&gt;
&lt;TD vAlign=top&gt;8 A&lt;/TD&gt;
&lt;TD vAlign=top&gt;TIA 10&lt;/TD&gt;
&lt;TD vAlign=top&gt;Aレジスタに10を入れる&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;6&lt;/TD&gt;
&lt;TD vAlign=top&gt;EC&lt;/TD&gt;
&lt;TD vAlign=top&gt;CAL TIMR&lt;/TD&gt;
&lt;TD vAlign=top&gt;Aレジスタにで指定した時間ウェイト(0.1&amp;#215;10=1秒)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;8&lt;/TD&gt;
&lt;TD vAlign=top&gt;3&lt;/TD&gt;
&lt;TD vAlign=top&gt;CY&lt;/TD&gt;
&lt;TD vAlign=top&gt;AレジスタとYレジスタを入れ替え&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;9&lt;/TD&gt;
&lt;TD vAlign=top&gt;9 1&lt;/TD&gt;
&lt;TD vAlign=top&gt;AIA 1&lt;/TD&gt;
&lt;TD vAlign=top&gt;Aレジスタの内容を+1（インクリメント）&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;B&lt;/TD&gt;
&lt;TD vAlign=top&gt;3&lt;/TD&gt;
&lt;TD vAlign=top&gt;CY&lt;/TD&gt;
&lt;TD vAlign=top&gt;AレジスタとYレジスタを入れ替え&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;C&lt;/TD&gt;
&lt;TD vAlign=top&gt;3&lt;/TD&gt;
&lt;TD vAlign=top&gt;CY&lt;/TD&gt;
&lt;TD vAlign=top&gt;AレジスタとYレジスタを入れ替え&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;D&lt;/TD&gt;
&lt;TD vAlign=top&gt;F 02&lt;/TD&gt;
&lt;TD vAlign=top&gt;JUMP 02&lt;/TD&gt;
&lt;TD vAlign=top&gt;2番地へ戻る&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;B,C番地でAとYのスワップを2度行っているのはAレジスタの値を保持しつつ実行フラグを立てるためです。&lt;/P&gt;
&lt;P&gt;JUMP命令は実行フラグが立っていないと分岐できないためこのようなことをしました。&lt;/P&gt;
&lt;P&gt;もっといいやり方があるんでしょうが命令表見ながらパコパコ打っただけなんで^^;&lt;/P&gt;
&lt;P&gt;アセンブラというか機械語の教材として結構いいんじゃないかな？と思いました。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/176995.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あんどちん</dc:creator><title>大人の科学マガジン 4bitマイコン付買った</title><link>http://blogs.wankuma.com/andochin/archive/2009/07/01/176830.aspx</link><pubDate>Wed, 01 Jul 2009 00:01:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2009/07/01/176830.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/176830.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2009/07/01/176830.aspx#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/176830.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/176830.aspx</trackback:ping><description>&lt;p&gt;まだ箱も開けてませんが、最後のページに命令コード早見表なるものが付いていて、それを見てたまげた。&lt;/p&gt; &lt;table border="1" cellspacing="0" cellpadding="2" width="664"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="80"&gt; &lt;p align="center"&gt;命令コード&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="94"&gt; &lt;p align="center"&gt;ニーモニック&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="66"&gt; &lt;p align="center"&gt;働き&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="80"&gt; &lt;p align="center"&gt;実行フラグ&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="342"&gt; &lt;p align="center"&gt;詳細&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="80"&gt;0&lt;/td&gt; &lt;td valign="top" width="94"&gt;KA&lt;/td&gt; &lt;td valign="top" width="66"&gt;K-&amp;gt;Ar&lt;/td&gt; &lt;td valign="top" width="80"&gt;0,1&lt;/td&gt; &lt;td valign="top" width="342"&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;押された数字キー(0～F)をAレジスタに代入する&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;ハード直結???こういうもんなの？これがこの世界では普通なの？キーなんてポートから読むもんじゃないの？&lt;/p&gt; &lt;p&gt;仕事柄今までそこそこの数のCPUをいじってきたつもりだったけどこれは驚いた。&lt;/p&gt; &lt;p&gt;# 命令コードを減らすためにこうなっているだけだと思うけど&lt;/p&gt; &lt;p&gt;そういえば4bitってロクにさわったこと無いな（曖昧な記憶では20年近く前に1度）。&lt;/p&gt; &lt;p&gt;&lt;font color="#c0c0c0"&gt;ナウいヤングだからw&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/176830.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あんどちん</dc:creator><title>Arduino来た</title><link>http://blogs.wankuma.com/andochin/archive/2009/05/20/173258.aspx</link><pubDate>Wed, 20 May 2009 00:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2009/05/20/173258.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/173258.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2009/05/20/173258.aspx#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/173258.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/173258.aspx</trackback:ping><description>&lt;p&gt;先週の月曜日にセミナー聞きに行ってモニター募集に応募したArduinoが来た。&lt;/p&gt; &lt;p&gt;&lt;a href="http://andochin.wankuma.com/images/Arduino_BB9/arduino.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="arduino" border="0" alt="arduino" src="http://andochin.wankuma.com/images/Arduino_BB9/arduino_thumb.jpg" width="244" height="164"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="2"&gt;※先日某氏から「あんどちんの写真はいつもバックが畳」と言われたので今回はびあね先生のプログラミング教本です。&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="2"&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;僕のPCではArduinoを接続したらドライバも要求されずにCOM6として認識されました。多分以前USB RS232Cケーブルを使用したときに入れたCDCドライバがあったからでしょう。&lt;/p&gt; &lt;p&gt;開発環境ですが、僕は開発マシンにはVista64を使用しており最初は起動しなかったのですがjavaディレクトリの名前を変更することで起動できるようになりました。&lt;/p&gt; &lt;p&gt;開発環境が起動したらexamplesのLED点滅プログラムを読み込んでコンパイル。&lt;/p&gt; &lt;p&gt;Tools→Board→Arduino Duemilanove w/ ATmega328&lt;/p&gt; &lt;p&gt;を選択し&lt;/p&gt; &lt;p&gt;Tools→Serial Port→COM6&lt;/p&gt; &lt;p&gt;で通信ポートを設定。&lt;/p&gt; &lt;p&gt;Upload to I/O Boardで書き込めたことを確認。&lt;/p&gt; &lt;p&gt;さて、何をしようか？&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.chip1stop.com/knowledge/Arduino/"&gt;&lt;img alt="Arduinoモニタープログラム参加中" src="http://www.chip1stop.com/img/link_Arduino.gif" width="468" height="60"&gt;&lt;/a&gt;&lt;br&gt;&lt;a title="電子部品・半導体の通販サイト - チップワンストップ" href="http://www.chip1stop.com/"&gt;電子部品・半導体の通販サイト - チップワンストップ&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/173258.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あんどちん</dc:creator><title>タスマニアンデビル</title><link>http://blogs.wankuma.com/andochin/archive/2009/04/04/170751.aspx</link><pubDate>Sat, 04 Apr 2009 00:38:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2009/04/04/170751.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/170751.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2009/04/04/170751.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/170751.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/170751.aspx</trackback:ping><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Linux Kernel 2.6.29最大の変更点はTuxがTuzになったことだとか。&lt;/p&gt; &lt;p&gt;Linuxのお勉強も兼ねてZaurus用のカーネルのビルドを試みているんだけどうまくいかない。&lt;/p&gt; &lt;p&gt;QEMU上で動作させているんだけど、hda1のアクセスにいった後に停止してしまう。&lt;/p&gt; &lt;p&gt;&lt;a href="http://andochin.wankuma.com/images/e2bc5a59e3d8_8DE/zau2_6_29.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="zau2_6_29" src="http://andochin.wankuma.com/images/e2bc5a59e3d8_8DE/zau2_6_29_thumb.png" width="178" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;HDDのパーティション1を認識しているところから最初にセクタ0を読み込む事までは出来ている模様。&lt;br&gt;HDDのイメージファイルのパーティションテーブル1の内容を2に書き換えるとhda2を認識するところからも間違いない。&lt;/p&gt; &lt;p&gt;そこでideドライバにprintk入れてみたけどHDDへのアクセスは1回しかしていないようだ。&lt;/p&gt; &lt;p&gt;うぅん。難しい。まぁTuz見られたからここで諦めてもいいんだけど。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ところで「タスマニアンデビル」なのか「タスマニアデビル」なのかどっちが正しいんだろう？&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/170751.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あんどちん</dc:creator><title>わんくま名古屋#3アンケート結果</title><link>http://blogs.wankuma.com/andochin/archive/2008/08/01/151460.aspx</link><pubDate>Fri, 01 Aug 2008 21:36:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2008/08/01/151460.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/151460.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2008/08/01/151460.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/151460.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/151460.aspx</trackback:ping><description>&lt;p&gt;&lt;em&gt;Q1.セッションの内容は期待通りでしたか&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 166.7&lt;br&gt;Q2.セッションの内容は理解できましたか&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 88.9&lt;br&gt;Q3.このセッションを知り合いなどに伝えたいと思いますか&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 122.2&lt;br&gt;組み込みはなじみがないので理解しづらかった。&lt;br&gt;C++のサイズでテンプレが来るかと思いましたが、ウマイなーと思いました。&lt;br&gt;堪能しました。&lt;br&gt;組み込みへのC++活用の説得材料にしたいと思います。&lt;br&gt;全体的には雰囲気として面白いと思います。&lt;br&gt;C++使いには、非常に興味ひかれる内容で楽しめました。&lt;br&gt;早口が聞き取りにくかったです、&lt;br&gt;興味深い組み込みの話でためになりました。&lt;br&gt;ぜんぜん知らない世界の説明を聞くのは楽しいので、またお願いします。&lt;br&gt;とりあえずCASTLE？勉強してみます。&lt;br&gt;画面の文字が小さすぎて、類推することもできませんでした。&lt;br&gt;途中からついていけなくなっちゃいました。ちょっと早口だったので、もう少しゆっくり話して頂けると、全くの素人でもついて行けたかも。きっと１時間でおさまらないくらいのボリュームの内容を話していただけたんだと思いました。ビデオみて勉強します。なんか組み込みってカッコいいかも！！&lt;br&gt;スルーされていたことが色々わからなかった所もありましたが、面白かったです。後半の満面の笑顔が忘れられませんｗ&lt;br&gt;バッサリやりすぎ&lt;br&gt;ZoomItとか拡大鏡の利用を検討しましょう。&lt;br&gt;biacさんのコマにつづいて予想外。&lt;br&gt;ぶった切り感も良かった。&lt;br&gt;サイズ一緒すごい&lt;br&gt;オブジェクト指向とり入れたソースコードでもコンパイル後のサイズがほとんど変わらない件について驚きました。組み込みは未経験ですが覚えておきたいと思います。&lt;/em&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;色々反省させられる内容になってしまいましたが、スピーカーをやったのはよい経験になりました。&lt;/p&gt; &lt;p&gt;思いの外C++ネタが好評のようで、そっちにフォーカス絞って話をした方がよかったのかもしれませんね。そうすれば仮想関数を使った場合の話なんかも織り込めたし。&lt;/p&gt; &lt;p&gt;C/C++で同じサイズになった理由は&lt;a href="http://blogs.wankuma.com/andochin/archive/2008/07/29/150727.aspx"&gt;ここ&lt;/a&gt;に書いた通りです。今回は簡単な例で出しましたが、応用すればかなり使えるんじゃないかな？と思います。&lt;/p&gt; &lt;p&gt;因みにセッション後Nさんより「emacs使ってる変態」と言われ、T(C)さんからは「こんなキーボード(EeePC)でプログラムを書くなんてオカシイ」と突っ込まれましたw&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/151460.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>あんどちん</dc:creator><title>初スピーカーを終えて　～わんくま名古屋勉強会 #3補足～</title><link>http://blogs.wankuma.com/andochin/archive/2008/07/29/150727.aspx</link><pubDate>Tue, 29 Jul 2008 00:54:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2008/07/29/150727.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/150727.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2008/07/29/150727.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/150727.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/150727.aspx</trackback:ping><description>&lt;p&gt;10分で終わるだろうと思っていたセッション内容も予想を反して1時間も喋ってしまい後片付けを急がせる結果になってしまい申し訳なかったです。&lt;/p&gt; &lt;p&gt;中々思う通りにはいきませんね。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;メインセッションで出したプログラムは&lt;a href="http://blogs.wankuma.com/andochin/archive/2008/01/07/116335.aspx"&gt;ここ&lt;/a&gt;と&lt;a href="http://blogs.wankuma.com/andochin/archive/2008/01/09/116510.aspx"&gt;ここ&lt;/a&gt;の内容をもっと簡略化したものです。&lt;/p&gt; &lt;p&gt;ただ、僕個人の意見としては&lt;/p&gt; &lt;p&gt;「CPUがどうやって動くの？&lt;/p&gt; &lt;p&gt;とか&lt;/p&gt; &lt;p&gt;「CPUはこんな命令があるんだ」&lt;/p&gt; &lt;p&gt;ということを知っていれば良くて、必要性が無ければアセンブラを覚える必要は無いと思ってます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;そして、数名の方からご質問いただいた気持ち的なメインセッション。CとC++で同じサイズのコードが出た部分についての解説です。&lt;/p&gt; &lt;p&gt;以降使用しているコンパイラはgcc3.4.4でコンパイルオプションは-O2 -mh -mint32です。&lt;/p&gt; &lt;p&gt;前述とは裏腹にアセンブラのコードを出していますが、行数が多いってことは出力コードがデカくて遅い程度の認識で良いです。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;最初にCのプログラムです。&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="706" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="262"&gt; &lt;p align="center"&gt;C (元のプログラム)&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="442"&gt; &lt;p align="center"&gt;アセンブラ&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="260"&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;typedef unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp; byte;&lt;br&gt;typedef unsigned short&amp;nbsp;&amp;nbsp;&amp;nbsp; word;&lt;br&gt;typedef unsigned long&amp;nbsp;&amp;nbsp;&amp;nbsp; dword; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;#define PADDR 0xffffd1&lt;br&gt;#define PADR&amp;nbsp; 0xffffd3&lt;br&gt;#define PBDDR 0xffffd4&lt;br&gt;#define PBDR&amp;nbsp; 0xffffd6 &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;int main(void)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte data;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte* paddr = (byte*) PADDR;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte* padr = (byte*) PADR;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte* pbddr = (byte*) PBDDR;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte* pbdr = (byte*) PBDR; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *padr = 0x00;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *paddr = 0x00; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pbdr = 0x00;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pbddr = 0x0f; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pbdr = *padr;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br&gt;} &lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="442"&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .file&amp;nbsp;&amp;nbsp;&amp;nbsp; "main.c"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .h8300h&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .section .text&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .align 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .global _main&lt;br&gt;_main:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er6,@-er7&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er7,er6&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sub.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,r2l &lt;font color="#ff0000"&gt;&lt;strong&gt;// 0を作ってる&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777171:8 &lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;// *padr = 0x00;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777169:8 &lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;// *paddr=0x00;&lt;br&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777174:8 &lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;// *pbdr = 0x00;&lt;br&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; #15,r2l&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777172:8 &lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;// *pbddr = 0x0f;&lt;br&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;br&gt;.L2: &lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;// while(1) {&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; @16777171:8,r2l&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777174:8 &lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;// 上の行と合わせて*pbdr = *padr;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp;&amp;nbsp; .L2 &lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;// } &lt;br&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .end&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ident&amp;nbsp;&amp;nbsp;&amp;nbsp; "GCC: (GNU) 3.4.4"&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;これが元のCのプログラムです。元のソースが短いこともありいいコード出してくれてますね。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;素直にクラス化してみます。DDRは最初に設定したらその後の書き換えはする必要がないので、コンストラクタのパラメータにして、データレジスタへの書き込みは*オペレータをオーバーロードしてクラスオブジェクトがポートであるように扱えるようにしてみます。&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="616" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="396"&gt; &lt;p align="center"&gt;C++&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="218"&gt; &lt;p align="center"&gt;アセンブラ&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="396"&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;// 型定義とマクロ割愛&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;class pio {&lt;br&gt;private:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte* ddr;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte* dr;&lt;br&gt;public:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pio(dword ddr_val, dword dr_val, byte dir, byte init = 0) :&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ddr(reinterpret_cast&amp;lt;volatile byte*&amp;gt;(ddr_val)),&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dr(reinterpret_cast&amp;lt;volatile byte*&amp;gt;(dr_val)) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *dr = init;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *ddr = dir;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte&amp;amp; operator *() { return *dr; }&lt;br&gt;}; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;int main(void)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pio pa(PADDR, PADR, 0x00);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pio pb(PBDDR, PBDR, 0x0f); &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pb = *pa;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br&gt;} &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="218"&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .file&amp;nbsp;&amp;nbsp;&amp;nbsp; "main.cpp"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .h8300h&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .section .text&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .align 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .global _main&lt;br&gt;_main:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er6,@-er7&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er7,er6&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; add.l&amp;nbsp;&amp;nbsp;&amp;nbsp; #-16,er7&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er6,er0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; subs&amp;nbsp;&amp;nbsp;&amp;nbsp; #4,er0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; subs&amp;nbsp;&amp;nbsp;&amp;nbsp; #4,er0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sub.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r3l,r3l&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; #16777169,er2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er2,@er0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adds&amp;nbsp;&amp;nbsp;&amp;nbsp; #2,er2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er2,@(-4,er6)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r3l,@16777171:8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; @er0,er2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r3l,@er2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; subs&amp;nbsp;&amp;nbsp;&amp;nbsp; #4,er0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; subs&amp;nbsp;&amp;nbsp;&amp;nbsp; #4,er0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; #16777172,er2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er2,@er0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adds&amp;nbsp;&amp;nbsp;&amp;nbsp; #2,er2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er2,@(-12,er6)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r3l,@16777174:8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; @er0,er3&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; #15,r2l&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@er3&lt;br&gt;.L4:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; @(-4,er6),er2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; @er2,r3l&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; @(-12,er6),er2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r3l,@er2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp;&amp;nbsp; .L4&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .end&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ident&amp;nbsp;&amp;nbsp;&amp;nbsp; "GCC: (GNU) 3.4.4"&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;コンストラクタ・オペレータの部分がインライン展開されているところはいいのですが、DR/DDRのアドレスをクラスメンバで持っており、それらのオブジェクトの初期化コード、及びDRのアクセスをする際にクラスメンバであるアドレスを一旦er2に入れてからアクセスしていることで長いコードになっています。&lt;/p&gt; &lt;p&gt;但し、このコードの場合最適化によってはCと同等のコードを出す可能性はあります。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;テンプレートを使ってCと同等なコードを出すように細工してみました。&lt;/p&gt; &lt;p&gt;&lt;font color="#c0c0c0" size="1"&gt;&lt;strong&gt;(中さんから「何回書き直しました？」と聞かれたとき「鋭い！」と思った)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="859" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="511"&gt; &lt;p align="center"&gt;C++&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="346"&gt; &lt;p align="center"&gt;アセンブラ&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="511"&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;// 型定義とマクロ割愛&lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;struct input {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; enum { VAL = 0 };&lt;br&gt;}; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;struct output {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; enum { VAL = 1 };&lt;br&gt;}; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;template&amp;lt;dword DDR, dword DR,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; typename d0 = input, typename d1 = input,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; typename d2 = input, typename d3 = input,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; typename d4 = input, typename d5 = input,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; typename d6 = input, typename d7 = input&amp;gt;&lt;br&gt;class pio {&lt;br&gt;private:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; enum { DIR = d7::VAL &amp;lt;&amp;lt; 7 | d6::VAL &amp;lt;&amp;lt; 6 | d5::VAL &amp;lt;&amp;lt; 5 | d4::VAL &amp;lt;&amp;lt; 4 |&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d3::VAL &amp;lt;&amp;lt; 3 | d2::VAL &amp;lt;&amp;lt; 2 | d1::VAL &amp;lt;&amp;lt; 1 | d0::VAL };&lt;br&gt;public:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pio(byte init = 0) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *reinterpret_cast&amp;lt;volatile byte*&amp;gt;(DR)&amp;nbsp; = init;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *reinterpret_cast&amp;lt;volatile byte*&amp;gt;(DDR) = static_cast&amp;lt;byte&amp;gt;(DIR);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte&amp;amp; operator *() { return *reinterpret_cast&amp;lt;volatile byte*&amp;gt;(DR); }&lt;br&gt;}; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;int main(void)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pio&amp;lt;PADDR, PADR&amp;gt; pa;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pio&amp;lt;PBDDR, PBDR, output, output, output, output&amp;gt; pb; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pb = *pa;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }; &lt;/font&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br&gt;} &lt;/font&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="346"&gt; &lt;p&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .file&amp;nbsp;&amp;nbsp;&amp;nbsp; "main.cpp"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .h8300h&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .section .text&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .align 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .global _main&lt;br&gt;_main:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er6,@-er7&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; er7,er6&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sub.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,r2l&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777171:8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777169:8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777174:8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; #15,r2l&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777172:8&lt;br&gt;.L4:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; @16777171:8,r2l&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777174:8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp;&amp;nbsp; .L4&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .end&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ident&amp;nbsp;&amp;nbsp;&amp;nbsp; "GCC: (GNU) 3.4.4"&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;C++のコードは長くなってしまいましたが、利点はDDR初期設定値をinput/outputという型で指定できるので初期値がわかりやすくなること。&lt;/p&gt; &lt;p&gt;書いていて気付いたんですが、出力ビットのビット位置を指定するようにした方が良かったですね。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;普段C++でtemplateを使っている方なら既に気付かれることと思いますが、見ての通りマクロに毛が生えた程度のコードです。&lt;/p&gt; &lt;p&gt;例えば&lt;/p&gt; &lt;p&gt;*pb=*pa;&lt;/p&gt; &lt;p&gt;の部分は&lt;/p&gt; &lt;p&gt;*reinterpret_cast&amp;lt;volatile byte*&amp;gt;(PBDR) = *reinterpret_cast&amp;lt;volatile byte*&amp;gt;(PADR);&lt;/p&gt; &lt;p&gt;と同じです。&lt;/p&gt; &lt;p&gt;つまり、&lt;/p&gt; &lt;p&gt;*((volatile byte*) PBDR) = *((volatile byte*) PADR);&lt;/p&gt; &lt;p&gt;と同じですね。&lt;/p&gt; &lt;p&gt;さて、元となっているCのソースでは変数宣言&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte* padr = (byte*) PADR;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile byte* pbdr = (byte*) PBDR;  &lt;p&gt;をしているにも関わらず &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pbdr = *padr;&lt;br&gt;部分がレジスタやローカルフレームによる変数領域を使用せず&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; @16777171:8,r2l&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp;&amp;nbsp; r2l,@16777174:8&lt;br&gt;&lt;/p&gt; &lt;p&gt;と最適化されて出力されています。これはCで書けば&lt;/p&gt; &lt;p&gt;*((byte*) PBDR) = *((byte*) PADR);&lt;/p&gt; &lt;p&gt;になるわけですね。これは先ほどテンプレートを展開したコードと同等です。&lt;/p&gt; &lt;p&gt;C++のtemplate版の方は上記のとおり、変数を使用せずアドレスを指す整数値をポインタへキャストしてアクセスしていますから。&lt;/p&gt; &lt;p&gt;このような理由でCとC++のコードのコンパイル結果が同じものになっています。&lt;/p&gt; &lt;p&gt;もし、Cのソースの方のコンパイル結果が&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font face="Tahoma" size="2"&gt;mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; #16777171,er2&lt;br&gt;&lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp;&amp;nbsp; #16777174,er3&lt;br&gt;.L2:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;mov.b&amp;nbsp;&amp;nbsp; @er2,@er3&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra&amp;nbsp;&amp;nbsp; .L2&lt;/p&gt;&lt;/font&gt; &lt;p&gt;となっていたら同等な結果は得られなかったかもしれません。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;# templateにはtemplateなりの問題もありますが、少々姑息と思いながらも今までC++は遅くなる、大きくなるからダメと言われてずーっとC++を使えなかったから、そのはけ口として出してしまいました^^;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font size="1"&gt;そして、どうしても言えなかったことですが、-O2付けないとtemplate版でもC++の方がデカくなりますw&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;そして、パワポ資料は&lt;a href="http://andochin.wankuma.com/benkyokai/wankuma_nagoya3.ppt"&gt;ここ&lt;/a&gt;&lt;/p&gt;
&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/150727.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>スーパーあんどちん</dc:creator><title>それもバグとしてカウントするの？</title><link>http://blogs.wankuma.com/andochin/archive/2008/02/28/125290.aspx</link><pubDate>Thu, 28 Feb 2008 00:50:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2008/02/28/125290.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/125290.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2008/02/28/125290.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/125290.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/125290.aspx</trackback:ping><description>&lt;p&gt;僕らの業界って開発中はプロトタイプのハードを使うことが結構あるんですが、派生製品が複数ある場合、ある製品ではこの機能を追加とかある製品ではこの機能を削除とかあるわけですね。プロトタイプは大体最大公約数的なものな訳です。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;今日、以前の職場の人と話をしている中で、基板上のとあるチップの制御処理を組み込んだ時の話題が出た。&lt;/p&gt; &lt;p&gt;僕:「あの時の対応早かったでしょ？」&lt;/p&gt; &lt;p&gt;彼:「でもあそこにはバグがありました」&lt;/p&gt; &lt;p&gt;僕:（うわぁ又仕様の見落としでもしたのか…）「どんな？」&lt;/p&gt; &lt;p&gt;彼:「あのチップはある製品では実装されていないので、そのボードでは動かないです」&lt;/p&gt; &lt;p&gt;僕:「それもバグって言うの？」&lt;/p&gt; &lt;p&gt;（言っちゃえばそうなんだけどさぁ）&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;因みに僕はその製品のこと全く知りませんし、そのチップが無いボードが出ることは、僕がその作業をしている時には想定外でした。&lt;/p&gt; &lt;p&gt;幸い、その制御処理を外す事自体は大した手間ではないし、既に後任者が対応した事なので、笑って話をしていましたが…&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/125290.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>スーパーあんどちん</dc:creator><title>昨日のスタートアップ</title><link>http://blogs.wankuma.com/andochin/archive/2008/01/09/116510.aspx</link><pubDate>Wed, 09 Jan 2008 00:17:00 GMT</pubDate><guid>http://blogs.wankuma.com/andochin/archive/2008/01/09/116510.aspx</guid><wfw:comment>http://blogs.wankuma.com/andochin/comments/116510.aspx</wfw:comment><comments>http://blogs.wankuma.com/andochin/archive/2008/01/09/116510.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.wankuma.com/andochin/comments/commentRss/116510.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/andochin/services/trackbacks/116510.aspx</trackback:ping><description>&lt;P&gt;昨日は喜びのあまりメインと実行結果写真だけでしたが、今日はメインに行くまでを。&lt;/P&gt;
&lt;P&gt;スタートアップとローダスクリプトは&lt;A href="http://akita-nct.jp/~yamamoto/comp/H8/C_linux/C_linux.php#start_up_routine"&gt;ここ&lt;/A&gt;を参考にさせていただきました。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;アセンブラのスタートアップ&lt;/P&gt;
&lt;TABLE cellSpacing=0 cellPadding=2 width=400 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=400&gt;
&lt;P&gt;; H8/3052 Startup for GCC 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .h8300h 
&lt;P&gt;; ベクタ設定。割込は未使用なのでリセットのみ（手抜）&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .section .vector&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data.l _start 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .section .text&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .global _start&lt;BR&gt;_start:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp; #__stack,sp 
&lt;P&gt;; 初期値付データをROMからRAMへコピー&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp; #___init_data_top,er0&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp; #___data_top,er1&lt;BR&gt;1:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp; @er0,r2l&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp; r2l,@er1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adds&amp;nbsp;&amp;nbsp;&amp;nbsp; #1,er0&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adds&amp;nbsp;&amp;nbsp;&amp;nbsp; #1,er1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp.l&amp;nbsp;&amp;nbsp; #___data_end,er1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; blo 1b 
&lt;P&gt;; 初期値なしデータ・BSSセクションを0でクリア。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp; #0,er0&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.l&amp;nbsp;&amp;nbsp; #___bss_top,er1&lt;BR&gt;1:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mov.b&amp;nbsp;&amp;nbsp; r0l,@er1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; adds&amp;nbsp;&amp;nbsp;&amp;nbsp; #1,er1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp.l&amp;nbsp;&amp;nbsp; #___bss_end,er1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; blo 1b 
&lt;P&gt;; Cのmainへ&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; jsr @_main 
&lt;P&gt;1: 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bra 1b&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .section .stack&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .global __stack&lt;BR&gt;__stack:&lt;BR&gt;&amp;nbsp; &lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ローダスクリプト&lt;/P&gt;
&lt;TABLE cellSpacing=0 cellPadding=2 width=400 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=400&gt;
&lt;P&gt;OUTPUT_FORMAT("coff-h8300")&lt;BR&gt;OUTPUT_ARCH(h8300h)&lt;BR&gt;ENTRY("_start") 
&lt;P&gt;MEMORY {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; vector(r):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o = 0x00000000, l = 0x00000100&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rom(rx):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o = 0x00000100, l = 0x0007ff00&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ram(rwx):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o = 0x00ffdf10, l = 0x00002000&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exram(rwx):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; o = 0x00220000, l = 0x00020000&lt;BR&gt;} 
&lt;P&gt;SECTIONS {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .vector : {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.vector)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;gt; vector&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .text : {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.text)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.rodata)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___init_data_top = .;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;gt; rom 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .data&amp;nbsp; : AT(___init_data_top) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___data_top = .;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.data)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___data_end = .;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;gt; ram 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .bss&amp;nbsp; ALIGN(0x10) : {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___bss_top = .;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.bss)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(COMMON)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___bss_end = .;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;gt; ram&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .stack 0x00ffff10 : {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(.stack)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;簡単に説明すると、電源ONでCPUはベクタテーブルの先頭(0番地)からPCの値を読み込んで&lt;/P&gt;
&lt;P&gt;そこから実行を開始します。このスタートアップだと_startのところです。&lt;/P&gt;
&lt;P&gt;_startでは、スタックの設定をした後静的変数の初期化を行いCのmainを呼び出します。&lt;/P&gt;
&lt;P&gt;mainから返ってくることは想定していませんが、返ってきちゃったら永久ループです。&lt;/P&gt;
&lt;P&gt;尚、スタートアップ・ローダスクリプトともに極力短く書くようにしました。正直なところスタート&lt;/P&gt;
&lt;P&gt;アップの静的変数初期化はいらないだろうと思ったんですが、mainに来るまでにはこんなこと&lt;/P&gt;
&lt;P&gt;が行われてますよってのがわかるのもいいかなと。&lt;/P&gt;
&lt;P&gt;でも、このスタートアップではライブラリの初期化を行っていないのでCの標準ライブラリは&lt;/P&gt;
&lt;P&gt;使えません（初期化が必要ないものは利用可能と思われますが）。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/andochin/aggbug/116510.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>