2009-01-01から1年間の記事一覧
「読み」の整理学 (ちくま文庫) を再読。普段ベーター読みってあんまりしてないような。コンピュータ関連の本でも内容的に未知は未知だけれど、既知の延長上にある気がする。
本屋で 闇狩り師 黄石公の犬 (トクマ・ノベルズ) を見かけて即座に購入。闇狩り師は本当に久しぶり。一番最初に読んだのは20年以上前、中野の商店街の本屋で購入した新書だったか。あとがきを読んでると、今年は新装版も出るらしくて、買おうかどうか少し悩…
このところRubyとか計算機関連の本ばかりだっただったのと、通勤電車では軽い本がありがたいので、文庫本の 思考の整理学 (ちくま文庫) を再読。内容は決して軽くはないけれど。 巻末のちくま文庫の紹介のところ眺めていて、 『逃走論』浅田彰 『下町小僧』…
クラス名と定数(p144) Durationというクラスの定義式を評価したとき、Rubyは (1)Durationクラスを表すClassクラスのインスタンスを作成し、 (2)そのインスタンスへの参照を値として、Durationという定数式を初期化します Rubyではクラスもオブジェクトであり…
ローカル変数(p100) ローカル変数はメソッド定義の def ... end を境界としてスコープが分離されます。 Rubyを使いはじめのころよくエラーになりました。 ローカル変数は最初の代入式によって発生します。 定数(p102) Rubyの動的性質は定数への再代入を結局…
整数リテラル(p45) '_' で数値を区切れるのはとても便利。最近アセンブラで dword のリテラルが見づらくて、コメントで書いてたりするのだけれど、時々ソースにも書いてしまってアセンブルエラーになったりする。他の言語でも導入される嬉しいのだけれど。na…
たのしいRubyに続いて、初めてのRubyを復習。 この本は読むたび、何らかの気づきがあります。 メタプログラミング(p8) Rubyが動的な言語であるということ。例えば「クラス定義」の中でattr_accessor をイテレータから呼び出し、アクセッサを定義することがで…
この章は細かなところで誤りが多いです。。 p169 セグメント領域の大きさを0に指定してもいいし、0xFFFFFにしても指定できる。 Limitはオフセットとして取り得る最大値なので、大きさ=(Limit+1)という関係があるはず。以下同様の表現がたくさん。。 図6-1…
第21章〜第24章 までひとまず完了。 目下VMawre, Virtual PCで使用する1.44MB FDイメージを扱えるスクリプトを作成中。 ユーザインタフェースについては、ftpクラアントの動作に準じて cd ls get put の操作をメソッドとして実装する方向。クラス構成は、cla…
日本語の作法 に通じるところのある本。この著者、週間こどもニュースのお父さんだったけれど、独立してて、時折がっちりマンデーに出てきますね。「そうだったのか」シリーズもあるけれど、一冊も読んだことない。
日本語の作法 を読む。この著者は他に 思考の整理学 (ちくま文庫)、「読み」の整理学 (ちくま文庫) を読んだけれど、これは日経ビジネスアソシエの連載コラムだったとのことで、あっさり読了。座談会というのは菊池寛が考え出したというのを初めて知った。
第15章〜20章 仕事で使うちょっとしたプログラムを作るのは、Rubyで十分な予感。 「なんでRuby?」と言われるけれども ^^http://d.hatena.ne.jp/dogatana/20090530/1243643312 によろしくない点があったのを修正。
jmp+TSSによるタスク切り替え実装。 コーディングミスでたびたび例外が発生したので、int 0x0dなどが発生したときのため、int 0x00-0x13まではISRで要因を表示した後そこから抜けないように変更。#UDとか出るようになって、多少は原因特定が楽になったかも…
p137 Intel Core2以上のCPUが装着されているパソコンでは実行されません。CPU依存的なタスクスイッチング・コードなので、CPUが勝手に複数のコアにタスクを振り分けてしまうことに原因があります。 TSS経由のjumpとかがうまくいかないということだろうか。 …
ちょっとしたプログラムが必要なとき最近はRubyを使うことが多いわけですが、同じようなことしかしないので忘却が激しい。都度ヘルプを見てるわけですが、仕事なのでゆっくりというわけにも行かないので たのしいRuby 第2版 Rubyではじめる気軽なプログラミ…
日本を変えた10大ゲーム機 (ソフトバンク新書 87) 読了。セガタ三四郎とか湯川専務とかを思い出した。 所謂コンシューマゲーム機で思い出深いのは スーパーマリオワールド FF6 BioHazard FF7 RayStrom くらいだろうか。 ずっとPCソフトが中心で、WoWが最後。…
VMwareでIBMのキーボードを使って確認したもの。転記ミスとかあるかも知れない。 CSSをいじれば綺麗な表ができるのだろうか。。 ESC 01 TAB 0f Shift(左) 2a Insert e0 52 F1 3b q 10 z 2c Home e0 47 F2 3c w 11 x 2d PageUp e0 49 F3 3d e 12 c 2e Delete…
ひとまず完成 作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 では単にキー入力があっただけしか分からないのが面白くなかったので 入力した文字を画面に表示する Enterキーに対応して改行する 画面が一杯になったら、スクロール などと欲…
ソース4-2 cli mov al, 0xFF out 0xA1, al これだとスレーブだけ。もっとも cli を実行しているので割り込みが入らないのは同じ。 ソース4-2 isr_ignore: (中略) pushfd 割り込み発生時は、eflagsレジスタもスタックに詰まれ、iret時で復帰するので不要だ…
PIC初期化 PICを触るのは久しぶり。PC98/IBM-PCのMS-DOS用シリアルドライバを書いて以来。 PC-9800シリーズテクニカルデータブック (HARDWARE編) を持ち出して内容確認。 タイマ割り込み 10ms毎ということで早すぎるので、ソフトカウンタを仕込んで10回に1回…
ISRとIDTが作成できたので、ソフトウェア割り込みが実行されることを確認する。 実行結果 ipl.asmの修正 kernel.binが大きくなってきたので、ロードサイズを2から16へ増やす。変更部分は次の箇所。 mov ax, 0x0210 ; 16セクタ読み出し kernel.asmの修正 変更…
個々の割り込み番号毎に割り込みハンドラを定義するのにnasmのマクロを使用しようとしてはまる。 マクロ定義と繰り返し nasm では %macro 〜 %endmacro でマクロ定義が可能なので、次のようなマクロを記載する。 これは IRS_: というラベル定義と、eaxに番号…
次の内容で作成してみる。 フラットモデルとする IPLの動作は呼び出すプログラムを2セクタ分とする以外同じ 最初のセクタは(setup)、IPLから直接呼ばれ、GDTの設定とプロテクトモードへの移行を行うプログラムを入れる 次のセクタ(kernel)はプロテクトモード…
いよいよプロテクトモード突入。 ソース3-1 ssは設定されているけれど、spが設定されてない。 プロテクトモード以降後のjmpでオペランドプレフィックスとアドレスプレフィックスの両方が必要なのだろうか? プロテクトモード以降後、ssを設定しているが、や…
Chapter 02に倣ってIPLの次のセクタに配置されているプログラムをカーネルと見立ててロードしてみる。 ipl.asm スタックをIPLの直前へ明示的に設定 画面を青色で埋める プログラムを 1000:0000 へロードする FDが読めなかったときは int 0x18 を呼び出し、後…
この前は IPL 開始時点での cs:ip を確認したが、ss:sp はどうなんだろ?と思って作ったIPLがこれ。 実行例はVirtualPC2004のもの。これだとIPLより下位側のメモリにあるので、IPLがつぶされることはないですね。 IPLソース ; 開始時点の cs:ip, ss:sp 表示 …
ソース2-1 0x***, ***h のどちらかに統一するほうが綺麗だと思う。 ソース2-2 ss は設定してあるけれど、spは? ss, sp を設定するときは、割り込み禁止にするのが良いと思う。 p31
BM-PCのVRAMの属性について動作確認してみた。 画面の左側が背景色の変化、右側が文字色の変化となる。 ; ; VRAMの属性バイトの確認 ; [org 0x7c00] start: mov ax, 0xb800 ; VRAMセグメント mov es, ax xor di, di mov ax, 0x0741 ; 黒背景, 白文字, 'A' mo…
IBM-PCのVRAMの属性について動作確認してみた。 ; ; VRAMの属性バイトの確認 ; [org 0x7c00] start: mov ax, 0xb800 ; VRAMセグメント mov es, ax xor di, di mov ax, 0x0741 ; 黒背景, 白文字, 'A' mov dx, 0x0041 ; 黒背景, 黒文字, 'A' mov cx, 16 ; 16回…
IPLがロードされるメモリアドレス 周知のとおり、IBM-PCの場合BIOSの初期が完了後、BIOSの設定に従って検索された起動デバイスの先頭先頭セクタがメモリに読み込まれて実行開始するわけですが、物理アドレスで言うと0x7c00になります。 ただCPUはリアルモー…