selvaggioの日記

2006-10-03

[]弐十七日目

今度はコンソール閉じてからSHIFT+F2するとフリーズするようになりました。

もう挫折しようかな。


[]弐十六日目

ncstでウィンドウが出ない原因がわかりました。

void console_task(struct SHEET *sheet, int memtotal)

	(中略)

	if(sheet){
		cons.timer = timer_alloc();
		timer_init(cons.timer, &task->fifo, 1);
		timer_set(cons.timer, 50);
		file_readfat(fat, (uchar*)(ADR_DISKIMG + 0x000200)); // ココ!
		cons_putchar(&cons, '>', 1);
	}

fatデコードもifに含めたらアカンヨなぁ……。

文脈上関係ないコードをまとめるのはやめようと思った。

おし、後は覚えてないからしょうがない。SSもなし。

mzpmzp2006/10/03 22:41あともうちょっとじゃないか。がんばろうよ。

selvaggioselvaggio2006/10/03 23:46バグ取りがメンドイよ('ω`)
設計ミスじゃなくて単なるタイプミスなあたりが終わってる。
まぁ最後までやるけどー。

ObasiObasi2012/02/22 14:18Heck yeah bay-bee keep them comnig!

wxmdhpvkwxmdhpvk2012/02/23 19:37OASLBk <a href="http://dhryvoqeggfc.com/">dhryvoqeggfc</a>

mplvffdvimplvffdvi2012/02/29 20:26Fmf1LM <a href="http://ihuidlwzbfwx.com/">ihuidlwzbfwx</a>

2006-09-28

[]弐十六日目後半

ncstコマンドウィンドウが出ない。

何でや('д`)

ShaziaShazia2012/02/24 16:14Cool! That's a cvleer way of looking at it!

jcrsyluhfrjcrsyluhfr2012/02/25 19:05ZN2k0O <a href="http://cwjfxgtpiicv.com/">cwjfxgtpiicv</a>

gmgosnfxgmgosnfx2012/02/26 01:06xLft5j , [url=http://xcfgdjvgnexp.com/]xcfgdjvgnexp[/url], [link=http://okvgycctcwvn.com/]okvgycctcwvn[/link], http://qeloovmezzha.com/

yoikrsywyoikrsyw2012/03/01 03:25H43x9R <a href="http://gdqqlqbtwpss.com/">gdqqlqbtwpss</a>

2006-09-27

SS25

[]弐十六日目前半

順番的にはこっちがあとなんだけど、今までの順番との兼ね合いでこっちを上に書く。

ウィンドウ移動の高速化。まとめて転送

転送が遅いなら、まとめて転送しちゃえよって話。

基本といえば基本な最適化

mmxとかあれば一気に128ビットとか転送できるんだろうけどね。


ともあれ、4バイト境界にあわせて転送するようにする。

なぜ4バイト境界かと言えば、x86なんかはそのほうが早いから*1

いわゆるアライメントの問題。


まぁもうちょっと突き詰めれば、4バイト境界に収まる部分は一気に走査して、

はみ出る部分だけ特別扱いすればそんなに苦労はしないと思った。

けど面倒だからまたいつかやろう。


ウィンドウ移動の高速化。あとで転送

追従性が悪い点を改善する。

これは転送速度とは関係無しに、再描画回数を減らす改造やね。

マウスの移動が穏やかになったあたりで描画することで以下略


最初のコンソールは一つで。

また明日とかにやろうと思う。





[]弐十五日目

超久々。さぼっててごめんなさい。

BEEP

作ったけど音でないのかよ。寂しい。

色増やし(1) パレット増やし

(256-1)が(6-1)で割れることを利用してRGBをそれぞれ6階調に落としてる。

6*6*6=216色増えるわけだ。

かぶる色があるらしいけど。

色増やし(2) ディザリング

人間錯視を利用した中間色表現のディザリングをする。

ディザリングにはパターンに基づいたものと、ランダムなものがあるけどこれは前者


アルゴリズムは良くわからないけど、分かるのは、xとyのパリティを2ビット情報にして、

それをグレイコードにコンバートしている点。

レイコードの性質は隣り合ったビットパターンが1ビットしか変化しないことなので、

恐らくこの性質を使ってディザリングをしているんじゃないかと予想。

正解は知らない。


ウィンドウの初期位置

Windows適当ウィンドウを開いてゆくと左上から右下にだんだんとずれて表示される。

でもハリボテOSは画面に大してウィンドウが大きい傾向にあるので*2

ど真ん中に表示してやる。

コンソール増殖

コンソールの情報を保持していた部分を単純に配列化する。

グローバル変数と化していた部分も、タスク構造体に入れてやる。


このままではウィンドウを閉じると固まる*3

理由はセグメントの競合なので、競合している部分をかぶらないように変更。


最後にfifo関係の処理をきちんとアクティブタスクに振り分けてやる。

しかし相変わらず固まる。

理由はシンプルで、アプリ用セグメントのサイズ設定をミスって隣にはみ出してた。

そりゃ落ちるわ。

もっとOSらしく。

task_aのウィンドウを消去する。

単純に処理を消すわけではないのがやはり根の深いところ。

プログラミングにもエントロピー増大の法則は当てはまるようで。


問題になったのは初期化処理の順番。

コンソール用のfifoの初期化をtask_aでやるように変更。

変数名が紛らわしいのが多いのでタイポしてしばらく嵌ってた。

*1:他はしらん

*2ぶっちゃけ画面が狭い

*3:自分の場合はほっとくと固まった。後述

2006-09-07

SS24

[] 弐十四日目

昨日やったけど今日書く。

この日はウィンドウ操作の実装、といっても移動したりフォーカスを移したりするだけ。

フォーカス移動・表示

これは単にsheet_updown関数で持ち上げるだけ。

キー(F11)の場合は対象が分からないので一番下を一番上へ。(マウスカーソル除く)

マウスクリックの場合は、sheetを上から順に見ていって、透明色で無い部分を見つければ、

そのsheetを持つウィンドウフォーカスを移す。

ついでにウィンドウ移動

タイトルバーをクリックしてる間は移動モード

うーん、こういう状態遷移的なものをグローバル的な変数を用いずに実装することはできないもんかね。

無理か。

せめて綺麗に書ければいいのに。

ついでに×ボタンの処理

ウィンドウを閉じる処理。強制終了と一緒。

ついでに強制終了したらウィンドウが閉じるように変更。

そしたら最初の処理が要らなくなる、というなんか良くわからんが矛盾してる気がする一節。

フォーカス移動・入力

フォーカスの移動には入力を送信する対象の切り替えも含むので、その実装。


まずキーの場合。今までの数値の状態変数の変わりに、taskへのポインタを使う。

シンプル

のはずなのにコードが死ぬほどスパゲッティ(というより、枝分かれしすぎた……枝毛?)化している。

(トリートメントが必要な気がするけど、大改造になりそうで怖くて触れない!)


マウスの場合。キーで実装したことをマウスのところでも実行すればよい、と。

タイマAPI

ウィンドウ移動はすんだので、新しいAPIの実装。今度はタイマ

まぁタイマの機能は既にOSにあるので、そいつのインターフェイスを作ってやればいい。

今までの反復のようでアッサリ実装。

こいつを使ってカップめんタイマー(というかタダのタイムカウンター)を作る。


しかし、こいつを終了するとfifoに残っていたゴミがコンソールに流入してしまう。

よって終了時に、ウィンドウを閉じるのと似たような感じで、fifoファイナライズをする。

これでゴミも出なくなる。


余談。

インデントが深すぎるのが辟易する。

掃除しようかしらん。

WilliamWilliam2012/02/22 14:11This site is like a classroom, ecepxt I don't hate it. lol

unlitavpnunlitavpn2012/02/23 20:105vVBmT <a href="http://xkwfenjzzrdw.com/">xkwfenjzzrdw</a>

ahsohirrwmpahsohirrwmp2012/02/24 01:46M69r3w , [url=http://fulbojtufbbg.com/]fulbojtufbbg[/url], [link=http://fkiqxpbpdhvi.com/]fkiqxpbpdhvi[/link], http://ircaynwsnsfd.com/

2006-09-05

SS23

[] 弐十参日目

APIを次々に実装する。

増えたAPIは以下の通りな感じに。

  • api_closewin
  • api_initmalloc / api_malloc / api_free
  • api_point
  • api_linewin
  • api_refreshwin
  • api_getkey

それぞれのAPIにちゃんと仕様例みたいなコードを書くわけだが、

Makefileを書き換えるのが面倒なので、全部a.cを使いまわしている。

まぁSVNに履歴は残ってるからいつでもまき戻しできるしいいや。


あと、強制終了時はclosewinが実行されないままになるので、当然ウィンドウが消えない。

こいつを改善するために、struct sheet自体にtaskへのポインタを追加。

taskを消すときこいつをチェックすることに。

うーん、ダーティな感じだ。

windowsだとどうやってるんだろう。

TonyTony2012/06/07 17:14These pieces ralely set a standard in the industry.

fotizxetnksfotizxetnks2012/06/07 20:20hWL1IQ <a href="http://ybbjjwtsyvfk.com/">ybbjjwtsyvfk</a>

gcjfklnrpougcjfklnrpou2012/06/07 20:21avviWI <a href="http://ilpsmykfhfge.com/">ilpsmykfhfge</a>

ochgbzochgbz2012/06/11 03:51c54luN , [url=http://ifypnmatwfvx.com/]ifypnmatwfvx[/url], [link=http://pmydyxrdrtbm.com/]pmydyxrdrtbm[/link], http://qhvyuuhxhpjm.com/

uhnbsqxlquhnbsqxlq2012/06/12 04:416qGB8E <a href="http://epeaivgybxtw.com/">epeaivgybxtw</a>

sjhtswkxisjhtswkxi2012/06/13 09:593TIQXz , [url=http://zktmkngwgnhu.com/]zktmkngwgnhu[/url], [link=http://mectwatyqpyy.com/]mectwatyqpyy[/link], http://rdwzxnojiimt.com/