Blog @ Blog - Linux Life

移動

move firstmove previous|move to page 0move to page 1move to page 2move to page 3currentmove to page 5move to page 6move to page 7move to page 8move to page 9move to page 10move to page 11move to page 12move to page 13move to page 14move to page 15move to page 16move to page 17move to page 18move to page 19move to page 20move to page 21move to page 22move to page 23move to page 24move to page 25move to page 26move to page 27move to page 28move to page 29move to page 30move to page 31move to page 32move to page 33move to page 34move to page 35move to page 36move to page 37move nextmove last

30日でできる! OS自作入門 11日目:アプリケーションあれこれ

2008/05/02 ( n ) < HariboteOS >

初めにアプリケーションをC言語で作成するためにライブラリ(のようなもの)を作成する。作成したアプリケーションの先頭の数バイトを実行時に書き換えたりしてかなりあやしい。

それから不正なアプリから OS を守るためにかなり頑張る。
頑張って守ってみたが、意味不明。
例外にも少し対応。

で、アプリ用にいろんな API を追加してとうとうウィンドウに文字を表示できるようになりました。
Haribote OS - 11th day

オーストラリア行ってきます。

2008/05/02 ( n ) < お仕事 >

明日から1週間、仕事でトレーニングを受けにブリスベンのオフィスに行ってきます。
あれこれ不安だけど、なんとか頑張ってきます。

GW 気分のはずが、スケジュールがびっしり詰まっていて、遊ぶひまなし。。。
来月?くらいに代休とってどっか旅立ってこよう。

30日でできる! OS自作入門 10日目:アプリケーション&API

2008/04/28 ( n ) < HariboteOS >

まず初めに、コンソールの昨日として様々なコマンドを実装する。
mem, ls, cat 等。ものすごく地道。でも重要。
FAT が地味。
改行コードの処理って Mac は考慮しなくていいのか?と思ったので \r だけでも改行するように改良。

次に、NASK で作った簡単なアプリケーションを実行するために色々頑張る。
GDT, far-JMP あたりが相変わらず微妙。

さらに、アプリ側からOSの機能を使用できるように API を作成する。
この辺のアセンブラも。。。
ついでに far-CALL, RETF, PUSHAD, POPAD, IRETD なんかも。。。

しかし、アプリから API をコールして文字(列)を表示するところまでなんとかたどり着いた。
Haribote OS - 10th day
次回はいよいよ C言語でのアプリ作成。

Seventeen’s Memorial

2008/04/26 ( n ) < Private >

午前中、新橋珈琲店にてだらだら仕事をする。
午後イチで、USオフィスの人他合計4人でランチを食べたあと、 インフォーマルなミーティング。
外国人同士の英語の会話は正直全然聞き取れない。
1対1でゆっくり話してもらってやっと簡単なコミュニケーションがとれる感じ。
来週のブリスベンの出張は果たして大丈夫なのだろうか。。。

で、夕方前に終わったので、銀座ソニービルSeventeen’s Memorial 〜尾崎豊 写真展〜 を見に行く。
Seventeen’s Memorial

さて、久しぶりに??酒でも飲んで寝るかな。

30日でできる! OS自作入門 9日目:コンソールみたいなもの

2008/04/23 ( n ) < HariboteOS >

今日はコンソール。本では17日目。
新しいタスクとウィンドウを作成して、両方のウィンドウでキー入力を受け付けるようにした。
途中で、Shift と CapsLock, NumLock, ScrollLock に対応。
Ctrl と Alt は?と思いつつ次へ。

2つのウィンドウでカーソルの点滅速度が違うのがすごく気になっていたら、 フォーカスが無い方は点滅しないようにして解決するようだ。。。

コンソールを作ったり簡単なコマンド(明日)を作るのもいいけど、 早く独立したアプリケーションで動かしたいぞ。
Haribote OS - 9th day

30日でできる! OS自作入門 8日目:マルチタスク

2008/04/21 ( n ) < HariboteOS >

今日はマルチタスクを実装。
この辺からソースの説明が大雑把になってくる。
CDのソースがメインで、本自体がおまけと著者が言っているのでしょうがない。

マルチタスクの仕組み、タスクの自動切り替え、優先度の設定などを実装。
今日もかなり満足。
Haribote OS - 8th day

買い物

2008/04/20 ( n ) < Private >

GW に海外に行くのでデジカメを購入。
CASIO Exilim EX-Z200

その他、変圧器とかを購入。

飲み会

2008/04/19 ( n ) < Private >

神奈川の友達の家でベルギービールの会を開催。
日本のビールとは違って味が濃くてバリエーションがあって美味しかったぁ。

18時前から翌朝の5時すぎまで飲んでました。

30日でできる! OS自作入門 7日目:遊ぶ

2008/04/17 ( n ) < HariboteOS >

マルチタスクに進む前に、というか、進む気持ちが今日は起こらなかったので、 HariboteOS の C言語のソースを色々いじってみた。

typedef _Point
{
    int x;
    int y;
} Point;

と同じように Size, Rect 構造体を作って、
graphics.c や sheet.c の座標関係を扱っている部分を全て書き換えた。

C++ のクラスのようにメソッドを作れないとメリットが半減のような気がするが、 ソースの見た目は自分的にはとても良くなったようだ。

試しに、高速カウンタで計測してみると、、、、、2割くらい遅くなってるかも。
うーむ。よくない。でも、元に戻すのは何かくやしいのでどうするかは保留。

変更の途中で、背景、ウィンドウを描画しているところを書き換える際にKDE4ライクなイメージに書き換えた。
Haribote OS - 7th day

寄り道はこの位にして、明日こそはマルチタスクを実装しよう。

30日でできる! OS自作入門 6日目:チラチラ解消

2008/04/16 ( n ) < HariboteOS >

カウントアップアプリケーションを作成して表示をしてみると 画面がチラチラすることが判明したので、描画まわりの改善をとりあえず始めてみる。
途中で、本の map の使い方が気に入らなかったので自分方式に変更。

void sheet_refreshsub( struct SHTCTL* ctl, int vx0, int vy0, int vx1, int vy1, int h0 )
{
    int h, bx, by, vx, vy, bx0, by0, bx1, by1;
    unsigned char *buf, c, *vram = ctl->vram;
    struct SHEET* sht;
    if( vx0 < 0 ) vx0 = 0;
    if( vy0 < 0 ) vy0 = 0;
    if( vx1 > ctl->xsize ) vx1 = ctl->xsize;
    if( vy1 > ctl->ysize ) vy1 = ctl->ysize;
    
    // init map
    for( vy = vy0; vy <= vy1; vy++ )
    {
        for( vx = vx0; vx <= vx1; vx++ )
        {
            ctl->map[vy * ctl->xsize + vx ] = 0;
        }
    }
    for( h = ctl->top; h >= h0; h-- )
    {
        sht = ctl->sheets[h];
        buf = sht->buf;
        bx0 = vx0 - sht->vx0;
        by0 = vy0 - sht->vy0;
        bx1 = vx1 - sht->vx0;
        by1 = vy1 - sht->vy0;
        if( bx0 < 0 ) bx0 = 0;
        if( by0 < 0 ) by0 = 0;
        if( bx1 > sht->bxsize ) bx1 = sht->bxsize;
        if( by1 > sht->bysize ) by1 = sht->bysize;
        for( by = by0; by < by1; by++ )
        {
            vy = sht->vy0 + by;
            for( bx = bx0; bx < bx1; bx++ )
            {
                vx = sht->vx0 + bx;
                c = buf[by * sht->bxsize + bx];
                if( ctl->map[vy * ctl->xsize + vx] == 0 && c != sht->col_inv )
                {
                    vram[vy * ctl->xsize + vx] = c;
                    ctl->map[vy * ctl->xsize + vx] = 1;
                }
            }
        }
    }
}

一番上のレイヤーから描画していって、描画済みの部分にフラグをたてて、下位のレイヤーでは描画しないようにした。

次はタイマの作成。
IRQ0 の割り込み。仕様は見ていないけど、実装は難しくない。
割り込みハンドラの最適化も頑張って改善。アルゴリズム系はそんなに難しくない。

さらに高解像度に挑戦。
相変わらず BIOS 関係のアセンブラが登場すると理解ができない。
どのレジスタが何のためにあるのか、どういう風に使う(使える)のかが分かってないのが問題かなぁ。

で、適当にキー入力に対応して、マウスでウィンドウを動かせるようにしたところで、 14日目の分が終了。やっと半分。
Haribote OS - 6th day
ちょっと冷静に考えてみると、実質7日でこんなにOSらしく動いているのはすごい。

移動

move firstmove previous|move 0move 1move 2move 3currentmove 5move 6move 7move 8move 9move 10move 11move 12move 13move 14move 15move 16move 17move 18move 19move 20move 21move 22move 23move 24move 25move 26move 27move 28move 29move 30move 31move 32move 33move 34move 35move 36move 37|move nextmove last

スポンサードリンク

Copyright - ©2003- tasuku All Rights Reserved