mzpの日記 RSSフィード

2006-10-08(日)

[][]圧縮回り 圧縮回り - mzpの日記 を含むブックマーク はてなブックマーク - 圧縮回り - mzpの日記

まだ、解決の糸口が見えない。

どうも、展開ルーチンの周辺が、変なメモリを読み書きしているのが原因っぽい。

[]30日目 高度なアプリケーション 30日目 高度なアプリケーション - mzpの日記 を含むブックマーク はてなブックマーク - 30日目 高度なアプリケーション - mzpの日記

さて、最後の日。がんばるぞっと。

コマンドライン計算機

これをフルスクラッチで書こうと思ったら、結構大変だよなぁ。と思いつつ、コピーしてmake

API名とヘッダファイル名がちょっと違ってるだけだったのでらくちん。

テキストビューア

難しそうだな、おい。

API名と引数を変更。でも、例外を吐いておちる。

結局、ライブラリ内のapi_fsize()にバグがいた。無駄スタックpopしてた。

MMLプレイ

qemuじゃあできない関係でパス

画像ビューア

ほー、こんなことまでできるのか。

こいつはbmp.nasmとjpeg.cをリンクする関係で独自のmakeを持っている。だから、makefileの修正も必要になる。

特に、俺のOSは圧縮アプリの実行にまだちゃんと対応できていないので、圧縮しないように書き換えておく。

IPLの改良

んー、たぶんサイズ的な問題で、こいつは使えないだろうなぁ。

なので保留。いつかまた、やってやる。

まとめ

今日コードを書かずに、makeできるようにごにょごにょしていただけ。

要するに、OSを作るんじゃなくて、OSを使ってたわけだ。

卒業式 卒業式 - mzpの日記 を含むブックマーク はてなブックマーク - 卒業式 - mzpの日記

さて、一応これでOS作りも終わりです。

まだ、圧縮機構回りにバグが潜んでいそうだし、実機でも動くかどうか怪しいところだけど、いったんここで一区切り。

思えば、遠くまできたもんだ。

本の感想

正直なところ、俺はこの本に載ってるコードは好きじゃない。

メモリに直接書き込んでいるから型チェックが行われないし、いたるところで相互依存しているから単体でテストできないし、ヘッダファイルなんか一つしかない。

でも、それ以外の部分は好き。

OSを作ったおかげで、アプリケーションメモリ上に展開する手順が、実感としてわかるようになった。

あと、毎日なんらかの成果がでるようにするという方針も結構好きだった。

うん、この本は買ってよかったし、2ヶ月以上かけてOSを作った価値もあった。

記念撮影

f:id:mzp:20061008114232p:image

感謝言葉

この本が無ければOSを作り始めることがなかっただろうし、このグループがなかったら途中で挫折してたでしょう。

なので、作者の川合さんと、グループid:bluespearさん、id:moiraさん、id:selvaggioid:goskago尊敬感謝言葉を。ありがとうございます。

それでは、さようなら。

selvaggioselvaggio2006/10/09 18:44いつの間にか終わっとるー。俺も頑張って追いつかんと……。

2006-10-07(土)

mzp20061007

[]圧縮と簡単なアプリケーション 圧縮と簡単なアプリケーション - mzpの日記 を含むブックマーク はてなブックマーク - 圧縮と簡単なアプリケーション - mzpの日記

さて、残すところあと二日。

バグ修正

まずは、全角文字に関するバグの修正。前回、ここで勝手につまづいてた。

さくっと修正。

ファイル圧縮

さてと、こいつはちょっと骨だぞ。

まずは、tek.cの修正。本とはメモリ確保関数の名前を換えてあるので、そのあたりを調節。あと、bootpack.hからtek.hを分離した。

で、あとはフォントのロードを書き換えて、フォントを圧縮してっと。よし、できた。本に載っているサイズと、3KBほど違うけどまあいいや。

次は、アプリケーションの圧縮。

どうも、圧縮したやつだと例外が発生したり、変な動作をしたりする。

この問題は、かなり奥が深そうなので後回し。

おっ、これでOS部分は終了だっ。

標準関数

いわゆるprintfとかのC標準関数

今後使うこともないらしいし、パス

非矩形ウインドウ

フリーズ

bball

動作せず。

まとめ

うーん、さくっと終わるはずだったのに、バグだらけだ。

いっこいっこつぶしていこう。

[]ncst ncst - mzpの日記 を含むブックマーク はてなブックマーク - ncst - mzpの日記

いつのまにかできなくなっていたncstのバグを修正。

こんな感じになっていた。

void console_task(Shee* sheet){
 // 中略
 if(!console.sheet){
   cmd_exit();
 }

 // コマンドの実行
 // ....

 if(!console.sheet){
  cmd_exit();
 }
 // 中略
}

そりゃ、実行されんわな。

[]notrec(とbball) notrec(とbball) - mzpの日記 を含むブックマーク はてなブックマーク - notrec(とbball) - mzpの日記

正確には、api_openwinのバグ

int hrb_api(/* ... */){
  switch(edx){
  case API_OPENWIN:
    // ...
    return;
  case API_CLOSEWIN:
    // ...
    break;
  }
  return 0;
}

要するに、intを返すべき関数で、何もreturnしてなかったのが原因。

たぶん、スタックがずれたんだろうなぁ。

お、これでbballも動いたぞ。

[]インベーダ インベーダ - mzpの日記 を含むブックマーク はてなブックマーク - インベーダ - mzpの日記

これはバグというほどのものではない。

単純に、API使い方がちょっと違っただけ。

BrettBrett2007/05/06 16:08http://096a56e3bc6935ebf487485dbbd8537b-t.gf7tiuy9.info <a href="http://096a56e3bc6935ebf487485dbbd8537b-h.gf7tiuy9.info">096a56e3bc6935ebf487485dbbd8537b</a> [url]http://096a56e3bc6935ebf487485dbbd8537b-b1.gf7tiuy9.info[/url] [url=http://096a56e3bc6935ebf487485dbbd8537b-b2.gf7tiuy9.info]096a56e3bc6935ebf487485dbbd8537b[/url] [u]http://096a56e3bc6935ebf487485dbbd8537b-b3.gf7tiuy9.info[/u] b8c211221d19f4c8bbabc2332ed541f5

AliciaAlicia2012/02/24 14:18Wow, your post makes mine look febele. More power to you!

vsdzbytjsolvsdzbytjsol2012/02/25 19:29z3PzEn <a href="http://jfbwfqsnxifo.com/">jfbwfqsnxifo</a>

kkoqtrkkoqtr2012/02/26 01:4582yGCO , [url=http://qalipxtorkrc.com/]qalipxtorkrc[/url], [link=http://ijhiowdwytou.com/]ijhiowdwytou[/link], http://ghbgvnvuudsz.com/

ebladsphfgoebladsphfgo2012/03/01 03:32CyqwlX <a href="http://ablyfiixqcvi.com/">ablyfiixqcvi</a>

cdjsbtcdjsbt2012/03/13 22:15rgGrYk , [url=http://znyqwkzphnwb.com/]znyqwkzphnwb[/url], [link=http://orlmmjmlcree.com/]orlmmjmlcree[/link], http://mcafwignavai.com/

2006-10-01(日)

mzp20061001

[]28日目 ファイル日本語表示(1) 28日目 ファイルと日本語表示(1) - mzpの日記 を含むブックマーク はてなブックマーク - 28日目 ファイルと日本語表示(1) - mzpの日記

夏休みが終わってもまだ日曜日っと。

お、日本語表示だ。へー、日本語は無視だとおもってた。

alloca(1)

エラトステネスのふるいだ。

1000のほうもstackを2kにしないと動かないですよっと。

ふーん、ある程度以上のスタックの確保には_allocaが使われるのね。

alloca(2)

で、スタック上にメモリを確保する_alloca作成。(シンボル名は__allocaになる)

はー、これは奥が深い。

  • スタックを確保したあと、RETしたい
  • ESPが変わっているので、RETできないのでJMPする必要がある
  • RETとJMPの差を埋めるために、ADDが必要になる

ファイルAPI

もともとtype(cat)用に作っていたファイル回りをAPI化する。

とくに難しいことはないね。

コマンドラインAPI

今度はコマンドライン引数も取得できるようにする。

これで、普通のコンソールアプリが作れるようになった。

疲れたので、いったんここで休憩。

[]28日目 ファイル日本語表示(2) 28日目 ファイルと日本語表示(2) - mzpの日記 を含むブックマーク はてなブックマーク - 28日目 ファイルと日本語表示(2) - mzpの日記

よし、後半戦だ。

日本語表示(1)

まずは、フォントの組み込みと半角カナの表示。

わざわざOSASKから持ってきて展開・編集するのは面倒なので、CD-ROMから完成品を持ってくる。

注意点としては、半角カナは0x7Fよりも大きいのでunsigned charで受けないとうまく表示できないこと。

日本語表示(2)

ふう、だいぶ苦労したけどなんとかクリア

スクロールの発生しない(==refreshの発生しない)状況での日本語表示はまだ先らしい。

日本語表示(3)

勢いにのって、EUC-JPサポート

いやもう、くたくたですけどね。

まとめ

あー、疲れた。

こう日本語表示で頭を悩ますときだけは、日本語存在を憎むね。

ああ、もし世界中の文字の幅がすべて同じで、かつ同じバイト数で表せれたら、どんなに幸せなことか。

RyanRyan2007/07/02 03:40http://01d03c43028eb3216980a6b90767d74a-t.sxmdzz.org <a href="http://01d03c43028eb3216980a6b90767d74a-h.sxmdzz.org">01d03c43028eb3216980a6b90767d74a</a> [url]http://01d03c43028eb3216980a6b90767d74a-b1.sxmdzz.org[/url] [url=http://01d03c43028eb3216980a6b90767d74a-b2.sxmdzz.org]01d03c43028eb3216980a6b90767d74a[/url] [u]http://01d03c43028eb3216980a6b90767d74a-b3.sxmdzz.org[/u] 3818aed3ad3e1a14ec8c01dee57ce7f0

SebastianSebastian2012/02/22 13:45Thanks for the great info dog I owe you bggiity.

RoseRose2012/02/24 10:24Ya learn somheting new everyday. It's true I guess!

mgtggmlmlmgtggmlml2012/02/25 18:39myGwCq <a href="http://npuxypmgcmci.com/">npuxypmgcmci</a>

qoojnsqoojns2012/02/26 01:48pMCS4J , [url=http://hvsoufxefujd.com/]hvsoufxefujd[/url], [link=http://kudktwjinykp.com/]kudktwjinykp[/link], http://zneozvckbbxb.com/

cbvghsuvcbvghsuv2012/03/01 03:42kt34cU <a href="http://jexzzuoryvpm.com/">jexzzuoryvpm</a>

ocbhdtvbocbhdtvb2012/03/13 23:12WpM2Rq , [url=http://nyogxawcboue.com/]nyogxawcboue[/url], [link=http://sozyexyqfank.com/]sozyexyqfank[/link], http://pthvbeuowzco.com/

2006-09-30(土)

mzp20060930

[]27日目 LDTとライブラリ 27日目 LDTとライブラリ - mzpの日記 を含むブックマーク はてなブックマーク - 27日目 LDTとライブラリ - mzpの日記

夏休み最後の日。でも、まだこの日記は終わらない。

まずはバグを直そう

ncstで実行すると、親となったコンソールは寝ている。なので、eipをasm_end_app()にしても終了処理が行われない。

なので、タスクを起こすようにする。

アプリ実行中でもコンソールを閉じたい

このOSでは、「アプリ実行中」と「キー入力待機中」が同じ意味を持ってる。

なので、[X]が押されたたら、メッセージをコンソールタスクに送って、api_getkey()内でコンソールを閉じるようにする。

で、見た目を早くするために[X]ボタンが押されたときにsheet_updown()で非表示にしてる。

アプリケーションを守ろう(1)

アプリケーションへの攻撃デモ。

でも、アプリがおかしくならない。

いろいろいじくってみたけど、どうしてもわからない。

いいや、無視して進もう。

アプリケーションを守ろう(2)

LDTを使ってアプリケーション専用のセグメントを作るようにする。

うん、これでcrack7.hrbの起動は失敗するようになったのでよしとしよう。

アプリケーションのサイズ改善

使わない関数を毎回リンクするのはもったいないので、ファイル一つにつき一つの関数にする。うん、Linuxとかと同じ手法やね。

これは、最近読んだGNU開発ツールに書いてあった。タイミングばっちり。

あと、ファイルごとに区切るのが面倒だったので、スクリプトを書きました。もし、よかったら使ってやってください。

http://mzp.sakura.ne.jp/script/split.py

$ python split.py < a_nask.asm

個人的な趣味で、*.nasじゃなくて*.asmになってます。気に入らないなら、適当に書き換えちゃってください。

ライブラリ

これもLinuxの静的ライブラリと同じ。

まあ、ツールの使い方だな。

make環境の整理

ライブラリOSアプリケーションごとにディレクトリに分ける。

まとめ

うん、なんかだんだんとまとめに入っていってる感じがする。

ライブラリmakeの整理とかは、OS開発というよりもアプリケーション開発の準備だしね。

2006-09-29(金)

mzp20060929

[]26日目 ウインドウ移動の高速化 26日目 ウインドウ移動の高速化 - mzpの日記 を含むブックマーク はてなブックマーク - 26日目 ウインドウ移動の高速化 - mzpの日記

前回の続きから。

ウインドウの移動を速く(3)

前回できなかったやつにリトライ

うん、単なる凡ミスでした。単にxとyを間違えたり、構造体の要素と構造体そのものを取り違えてたりしただけ。

あまりに時間をかけすぎたせいで、速くなっているのかよくわからない。

ウインドウの移動を速く(4)

最後は見た目を改善して、高速化したように見せかける。

このあたりで、colorを使うと高速化してるかどうかが分かりやすいことに気がついた。

最初のコンソールを一つに

コンソールをn個にするための布石。コンソールを作る処理を関数にする。

うん、なにごともなく終了。

コンソールをもっとたくさん

で、コンソールをn個にする。

これも、たいして悩まず終了。

コンソールを閉じる(1)

変更点は多いけど、それほど難しくない。と、思いきやなぜかqemuが落ちる。

make clean;makeしたらなおったので、たぶん構造体をいじったのに、全部に反映されてなかったのが原因だろう。

コンソールを閉じる(2)

さっきやったことをマウスでもできるようにする。

無難に終了。

startコマンド

へえ、Windowsにこんなコマンドがあったんだ。

これも特につまらずに、実装できた。

ncstコマンド

さて今日最後の作業だ。

んー、sheet_updownをせずに非表示で済ませるのは適当すぎるんだろうなぁ。

ほうほう、実行専用のタスクを作って、そいつにやらせるのか。

要するに、UNIXなShellの&だな。

まとめ

途中で詰まってしまって、二日間もかかってしまた。(やってない日を除く)

んー、そろそろ終わりそうではあるけど、夏休み中は無理だな。

RianRian2012/02/24 16:23Ho ho, who woldua thunk it, right?

ggevhgakyggevhgaky2012/02/25 18:48XaBtn4 <a href="http://wvvipxiqvazi.com/">wvvipxiqvazi</a>

kfswrqtavkfswrqtav2012/02/26 01:12CVGktk , [url=http://kecpblicyifl.com/]kecpblicyifl[/url], [link=http://jgszviipfsgd.com/]jgszviipfsgd[/link], http://kcyqcgsfjgxm.com/

rnvsgmpmrnvsgmpm2012/03/01 03:52RdnF8s <a href="http://tgdfouyodyct.com/">tgdfouyodyct</a>

hiufrlhiufrl2012/03/13 22:28PwbkNH , [url=http://lagkcavbxwah.com/]lagkcavbxwah[/url], [link=http://tqawshaqlnfy.com/]tqawshaqlnfy[/link], http://pkgkndfyzvcl.com/