ザビタン開発日記
2009 | 01
2008 | 01 | 02 | 06 | 12
2007 | 10 | 11 | 12
10月 17 (水曜日) 2007
22:15
タスクを作成
 
いろいろと悩んだ末、マルチタスクの章でやってた、
いくつもウィンドゥを並べてそこで実験するというのでやってみる
ことにしますた・・・・

//テストウィンドゥ
//=============================
//メモリの定義??
struct MEMMAN *testmemman = (struct MEMMAN *) MEMMAN_ADDR;
//まず下敷きをもらってくる
struct SHEET *testsht = sheet_alloc(shtctl);
//このシートに書きもけるよう、バッファを確保する。
//大きいのでmemman_allocを使う
unsigned char *testbuf=(unsigned char *) memman_alloc_4k(testmemman,400*200);
//このバッファをtestwin下敷きで使用できるように当て込む
sheet_setbuf(testsht,testbuf,400,200,-1);
//バッファにウィンドゥを作成する
make_window8(testbuf,400,200,"testwin",0);
//新しいタスクを作るため、taskmanからタスクをもらってくる
struct TASK *testtask = task_alloc();
//このタスクで使うfifoバッファを確保する
int *testfifo = (int *) memman_alloc_4k(testmemman,128*4);
//タスクから使えるように当て込む
testtask->cons_stack = memman_alloc_4k(testmemman,64*1024);
testtask->tss.esp = testtask->cons_stack + 64 * 1024 - 12;
testtask->tss.eip = (int) &test_task;
testtask->tss.es = 1 * 8;
testtask->tss.cs = 2 * 8;
testtask->tss.ss = 1 * 8;
testtask->tss.ds = 1 * 8;
testtask->tss.fs = 1 * 8;
testtask->tss.gs = 1 * 8;
*((int *) (testtask->tss.esp + 4)) = (int) testsht;
*((int *) (testtask->tss.esp + 8)) = memtotal;
task_run(testtask, 2, 2); /* level=2, priority=2 */
fifo32_init(&testtask->fifo, 128, testfifo, testtask);

とりあえずこんなことして、とにもかくにもタスクを起動させてウィンドゥを持たせてみた。
・・・なんとか成功のようだな・・・

さて、このタスクにタイマーを置かなくちゃ。ええと・・・どうやるんだっけかな??

あー!そっかそっか! 同じパターンだね。そんなわけで、こんなのと追加。



・・・なんか大間違いっぽいな・・・
タスクをもう一回復習しとこう。
 
30日を過ぎたBlogにはコメントできません。
17:09
時計搭載に挑戦
 
さーて。あんまし見た目だけやっててもアレなんで(まだやりたいのや山々でつが・・・(汗 )

ダミーで置いてある時計。これを本当に動かすことってできないもんかなぁと・・・

ここいら辺に参考文献が!??

さっそくカンニング参考にしながらイジってみよう・・・

おぉ! ちゃんと現在時刻をゲットできたぞ!??(^^

・・・さてここで考察。

CMOSによって、とりあえず現在の時刻を得ることができた。あとは
タイマーを使って1秒ごとに割り込みをかけ、数値を
足して行けばいい・・・・。そんなんでいいのかな???

えーっと。タイマーはどうしよう? それ用に作るかな?それとも??

いろいろ考えてみたけど、マルチタスクの時、別の窓開いてカウントとかやってたよね。
ああいうのをやって実験してみよう!!

えーっと。今はウィンドゥを出すにはどうしてるんだっけ。

  1. ウィンドゥを出すAPIを呼び出す

・・・あ”これだけだったっけ・・・

・・・その後、かなりガチョーーンなことに気が付いた。
bootpac.cからはAPI使えないのね・・・
 
30日を過ぎたBlogにはコメントできません。
16:54
THE-BBL OS リリース!
 
そんなわけで、リリースの第一弾つーかね。
Ver.0.00ということでどうかひとつ・・・・(汗

(以前にも一回おんなじような感じでリリースしたんですが、あれは忘れてください・・・)

Makefileをちょこっと直して、ウチの子の画像を挟み込みました


リビジョン10相当っすね。
 
30日を過ぎたBlogにはコメントできません。
14:18
コンソールの各パラメータを定数化
 
console.c内の各関数。ここでは初期値(文字数30x8)が決め打ちされている。
これらをとりあえず全て定数化してみる。

#define CONS_CHAR_X 80;
#define CONS_CHAR_Y 24;

こんなのをconsole.cの先頭に追加。
各関数内の数値を変更してみる。


おっと??
なんかいけたっぽいぞ??
euc.txtに文字を沢山書き込んでテスト・・・

おぉ! いいじゃんいいじゃん!!!


リビジョン9

 
30日を過ぎたBlogにはコメントできません。
09:39
コンソールの位置と大きさ
 
ニセタスクバーを上にもっていっちゃったせいで、最初に表示される
コンソールとかぶってしまうようになりました。
また、当分は800x600でやっていきますが、それだとちょっとこの
コンソールでは狭すぎですよね?80x24くらいにしたいなぁ・・・

そんなわけでさっそく改造!
まずはコンソールの表示位置ね。
えーっと。これはどこでやってたっけかな・・・。

あったあった。bootpac.c内で key_win = open_console(shtctl, memtotal); として呼んでいる。これが最初のコンソール。

そのすぐ下のあたり。ここで、マウスや初期コンソールなどのシートの位置を
sheet_slideなどで調整しているね。

sheet_slide(key_win, 32, 4);

これを書き換えれば最初の位置が変更できる。

sheet_slide(key_win, 32, 32);

とりあえずこんなもんでいいかな。

次にコンソールの大きさ。これはどこでやってるのかな。
???あれれれ?
open_console関数内で決めうちしてるのかな?これ??

sheet_setbuf(sht, buf, 256, 165, -1); /* 透明色なし */

とりあえずこの辺の数字をいろいろといじってみる・・・

ふむ・・・・単にここいらへんの数字を変えただけではいろいろとズレが
生じちゃうよね?ここは一発、open_console関数の復習と逆説で考えてみよう。

まず、オイラの目的は80x24のコンソールがほしいわけ。
そうなると単にウィンドゥの大きさだけじゃない。その大きさの
テキストボックスが収まる窓が必要。これを逆に計算してみると・・・

標準状態:30x8文字で240x128(文字が8x16だからね)
欲しい状態:80x24文字だから640x384。

さらにウィンドゥの部品が覆うので高さが+37、幅が+16となるから
ウィンドゥの大きさは656x421とこうなるわけね。
open_console内の各数字をこれに合わせてみる・・・


             :
unsigned char *buf = (unsigned char *) memman_alloc_4k(memman, 656 * 421);
sheet_setbuf(sht, buf, 656, 421, -1); /* 透明色なし */
make_window8(buf, 656, 421, "console", 0);
make_textbox8(sht, 8, 28, 640, 384, COL8_000000);
sht->task = open_constask(sht, memtotal);
             :


・・・・おぉぉ! ひろーーいコンソールが!できたーーー!

ダメじゃん!!!!!!!


これ、わかります? 
ウィンドゥは広くなってるけど、コンソール部分は前と同じ大きさ
のままなんですよ〜?(T T)
これじゃまるで、旅館の大広間で3人だけ朝食喰ってる状態じゃないですか!!

えーーーっと、この辺の制御はどこだったかな・・・

むむむーーーーー!!!!

これはconsole.c内。でも、幅や高さをみな決め打ちで行ってますねぇ・・・

こりゃ大幅な改造・・・いや! むしろ引数、いやさ、せめて定数かなんかに改造しておかないと大変だぞおぉぉ!!!(汗

リビジョン8
 
30日を過ぎたBlogにはコメントできません。

Referer  (9)
00:11
パターン関数。怪我の功名!??
 
画面の四隅。oldMacではどこも角をまるくしている。
BBLも上の上下はそうしてる。例のパターン関数でね。
・・・でも、問題発生。下のほうだと、こうなっちゃう・・・

これはわかるよね?。背景パターンの上に白を新たに塗ってしまった上体なんだよなぁ。
今パターン関数は二色対応だけど、透明色か三色対応しなくてはならんかなぁ・・・

と思っていたら!!

現在のパターン関数は * しか判断していない。
ってことは、 . も判断させて、それ以外の文字(たとえばスペースとか)を放置するようにしたら・・・

おぉぉ! 透明色(と言えば聞こえはいいが、ようはなんもしない部分)ができた!
これで下の四隅もOKだぞ!??




●リージョン7
 
30日を過ぎたBlogにはコメントできません。
(1) 

PopnupBlog V3 Denali created by Bluemoon inc.