K氏のheboOSをまねてみる

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」を立てます。

1-

BluesBB ©Sting_Band