1:K氏のheboOSをまねてみる hideyosi 09/22 17:32 OSASKのK(川合氏)が、OS作成に関するチュートリアルを公開している。ふむふむ。なになに? あいかわらずKは口がうまい! なんだか出来そうな気がしてくるじゃねーかよ! そんなわけで、思いつくまま体験をばしてみたり。 参考: http://community.osdev.info/index.php?FirstStep 91:Re: キーコード変換 hideyosi 10/18 23:21 ENTERキーの処理。 まず、ENTERキーの分岐をおきます。これは簡単。 ------------------------------ ;ENTER キー CMP AL,0x1C ;Zが押されている JE ENTERPRINT -------------------------------- で、このENTERPRINTってラベル以下にコードを書けば出来上がり・・・ ------------------------------------------------ ENTERPRINT: ;BIOSでカーソル位置を設定 MOV AH,0x02 MOV BH,0x0 MOV DL,0 MOV DH,Y座標 INT 0x10 JMP INTEND ----------------------------------------------- ・・・・あれれ? この場合、Y座標の値ってどうするんだ? 順当に考えると、「現在のY座標+1」ってことだよね? むむむ?? 「現在の座標」って、どうやって求めるんだろう? さっそくいろいろと調べてみた。 なになに? 0040:0050hがそうだって??? うむむむ??? どうもよくわからないや。こりゃ、実験しかないか!? 92:Re: キーコード変換 hideyosi 10/18 23:34 うーん・・・0040:0050hという表現。これまでのパターンだと、これは、セグメント:オフセットのパターンではないかなぁ? そうすると、この0040:0050hという場所の値を読み出すには ------------------------------------------- MOV AX,0x40 MOV ES,AX ; ESを0040にする。 MOV AX,WORD[ES:0x50] ーーーーーーーーーーーー--------------- こういうコードになるのかな??? 93:Re: キーコード変換 hideyosi 10/19 01:06 だあぁぁぁぁぁぁ!!!!! にゃんだよクソ!!! ちゃんとBIOSにあるぢゃん! ってことで、こういうコードを追加して、目的の動作をしました。 ------------------------------------------- ENTERPRINT: ;現在のカーソルの位置を取得(Y座標のみ) MOV BH,0x0 MOV AH,0x03 INT 0x10 ;BIOSでカーソル位置を設定 MOV AH,0x02 MOV BH,0x0 MOV DL,0 INC DH ;上で取得した行位置+1 INT 0x10 JMP INTEND ------------------------------------------------------- 94:Re: キーコード変換 hideyosi 10/19 03:32 上の状態だと、カーソルが最下行に行っちゃうと、固まったようになって画面が動かなくなっちゃう。 で、こんなコードに変更。 ---------------------------------------- ENTERPRINT: ;現在のカーソルの位置を取得(Y座標のみ) MOV BH,0x0 MOV AH,0x03 INT 0x10 INC DH ;上で取得した行位置+1 CMP DH,0x19 ;もし、最下行だったらロールアップ JE ENTERPRINTLUP ;そうじゃなかったら、普通にカーソル移動 JMP ENTERPRINTNML ENTERPRINTLUP: ;ロールアップ。まず、ロールアップをする MOV AL,0x01 MOV BH,0x0F MOV CH,0x01 MOV CL,0x0 MOV DH,0x18 MOV DL,0x4F MOV AH,0x06 INT 0x10 ;カーソルを最下行にセット MOV DH,0x18 JMP ENTERPRINTNML ENTERPRINTNML ;BIOSでカーソル位置を設定 MOV AH,0x02 MOV BH,0x0 MOV DL,0 INT 0x10 JMP INTEND -------------------------------------------------- おーー! まるでエディタの如く、最下行でロールアップするぞ!? 95:プロンプトの搭載 hideyosi 10/19 21:21 なんか、「見た目だけ」とはいえ、だんだんMS-DOSっぽくなってきて楽しいなぁ・・・。 そんなわけで、プロンプトを搭載してみよう。 これはそうむずかしくない。まず、テキスト画面を一旦クリアする。 で、プロンプトを表示する。 さらに、Enterキーが押されたら、とりあえず無条件でプロンプトを表示させると。 ------------------------------------------------- ENTERPRINTNML ;BIOSでカーソル位置を設定 MOV AH,0x02 MOV BH,0x0 MOV DL,0 INT 0x10 CALL PROMPTPRINT JMP INTEND PROMPTPRINT: ;BIOSコールで文字列を表示 MOV AH,0x13 MOV AL,0x01 MOV BH,0x0 MOV BL,0x0F MOV CX,0x07 ;本来はここで、DLとDHで座標を指定するが、これは変わらないので ;いらないと思う MOV BP,pmsg INT 0x10 RET ;プロンプトの文字列 pmsg DB "THEBBL>" ------------------------------------------------------- ・・・・ぶははははは!!! できたできたー! 96:リリース!(ごっこ) hideyosi 10/19 22:58 さーてと!! とりあえず、キリがいいので、この私のOS(は?)を、リリースして みよう。 hideyOS Ver 0.01ってことで。(笑 http://thebbl.hideyosi.com/age/hdOS001.lzh ・・・みなさんに笑って頂いてナンボですから・・・ (T∀T) あ、あと、これまでのソースは、こちらから直で見られます。 アドヴァイスなんかしてみようなんて方は、是非・・・(^^;) http://thebbl.hideyosi.com/age/test11.nas.txt 97:Re: リリース!(ごっこ) -- K 10/19 23:13 早速楽しんでいます。.COMは374バイトで、Win2000のDOS窓でも動いています。 ささやかな要望を。キーを離したときに入力されるというのは、ちょっと脱力系なので、できれば押したときに入力されてほしいです。 あと、BackSpaceの処理が追加されたら、もっとそれっぽいかも! さらに、最初に"hideyOS Ver 0.01"みたいなメッセージがあったらいいなあ。 それでは。 98:Re: リリース!(ごっこ) hideyosi 10/19 23:22 >早速楽しんでいます。 ぐはぁ!!! よりによって、Kタンが試している!? 魚影〜!!! ゴロゴロゴロ・・・・ <恥ずかしくてのたうちまわっている >できれば押したときに ・・・あ” そっかぁ。そいえば、押してときの動作って、やってみたことないなぁ。さっとくためしてみよう。 さて、ほいだば、Ver 0.02に向けてガンバロ! Ver0.02では、まず、キーボードの処理をなんとかする。Kタンにアドヴァイスしてもらった書き方の理解と勉強。当然、BSやShiftなんかの処理も搭載したいなぁ。 あと、とりあえず、なんらかのコマンドを搭載したい。たとえば、clsとか、rebootとか。 あと、現在は画面関係はみんなBIOSにたよっているけど、これをなんとかできないか実験してみよう。 99:Re: リリース!(ごっこ) feel 10/19 23:49 試しました しっかり動きますね 私も頑張りたいと思います 頑張って下さい 家のウイルス対策ソフト(NOD32)が過剰反応してビビりましたが 何ともなくてよかったよかった 明日から修学旅行だぁ〜 京都へ台風と戦いに行ってきます そしたらまた頑張ります 300:Re: リリース!(ごっこ) hideyosi 10/20 22:35 feelさんどもです〜 >家のウイルス対策ソフト(NOD32)が過剰反応してビビりましたが ぐはぁ!!! やっぱ、BIOSやらを呼んでいるからかな?? >明日から修学旅行だぁ〜 >京都へ台風と戦いに行ってきます え”〜・・・よりによって・・・・ なんつーか、今回もまたエラク巨大な台風。せっかくの京都。楽しめるといいんですがねぇ。(あー!私も京都イキテー!) さて、先日、ごっことは言え、いったんキリがいいということでリリースをして、かつ、バージョン番号も振ってみました。 そんなわけで、ここの番号もまたキリがいいっつーことで、このスレを一旦閉じます。(かなりながーくなってしまったので) Ver 0.02に向けて、新しいスレ。「OSを作れたらいいねぇPart2」を立てます。 |