* CYLS自動調節型IPLを作ろう!
-(by [[K]], 2006.09.30)
-発展課題のページ(全部読む前にここを読むのは混乱するのでおすすめじゃないです)
*** はじめに
-ディスクイメージにあれこれファイルを詰め込んでいくと、CYLSが足りなくなって、うまく動かなくなることがあります。しかしだからといっていつも最大値の33を指定していると、今度は起動が遅くなって(特に実機では遅い)、イライラします(本来必要のない部分を読むせいで余計に待たされているということが特にくやしい)。
-ということで、起動時に読み込んだFATを解析することでCYLSを自動計算して、いつも必要な分だけ読み込むIPLを作りました。
*** 改造点
-ipl09.nas (この改造後は ipl09.nas という名前はもうふさわしくはないけれどね)
(中略)
; ディスクを読む
MOV AX,0x0820
MOV ES,AX
MOV CH,0 ; シリンダ0
MOV DH,0 ; ヘッド0
MOV CL,2 ; セクタ2
MOV BX,18*2-1 ; 読み込みたい合計セクタ数 (2006.12.23 バグ修正)
CALL readfast ; 高速読み込み
MOV BX,4312+0x8200+2
fatloop:
ADD BX,-2
CMP WORD [BX],0
JZ fatloop
MOV AX,BX
ADD AX,-0x8200-5+54+53
MOV BL,54
DIV BL ; AL = AX / BL
CMP AL,0
JNZ fatskip1
MOV AL,1
fatskip1:
CMP AL,33
JBE fatskip2
MOV AL,33
fatskip2:
MOV [0x0ff0],AL ; IPLがどこまで読んだのかをメモ
ADD AL,-1
JZ fatskip3
MOV AH,0
IMUL BX,AX,18*2
MOV AX,0x0c80
MOV ES,AX
MOV CH,1 ; シリンダ1
MOV DH,0 ; ヘッド0
MOV CL,1 ; セクタ1
CALL readfast ; 高速読み込み
fatskip3:
; 読み終わったのでharibote.sysを実行だ!
JMP 0xc200
(中略)
*** 簡単な解説
- MOV BX,4312+0x8200+2
--4312というのは、FAT上での最後のクラスタの位置です。そしてFATデータは0x8200からあるのでそれを足して、さらに次にすぐ-2を加えるので+2した状態を代入しています。
-fatloop
--FATを後ろからたどり、0じゃない部分を探します。最終使用クラスタはどこかな?
- ADD AX,-0x8200-5+54+53
--最終使用クラスタを求めるために、まずFAT内での何バイト目かが知りたいので0x8200を引きます。さらに5を引くのは、最初に読み込んだ0シリンダ内に2〜4クラスタが既に含まれていて、その分は追加で読み込む量の計算には入れたくないからです。
--54という数字についてです。1シリンダ中に36クラスタあって、これを1.5倍すると54になります。つまり54は、FAT内での1シリンダのバイト数です。で、その54を足すのは、あとで [0x0ff0] に書き込むときに1加えるのが面倒だったのでここで足しているだけです。53を加えているのは、切り上げ計算をしたかったからです。
--[0x0ff0]に1を加える必要があった理由は、[0x0ff0]の値は最初に読んだ1シリンダ分も含まれるからです。
- DIV BL
--割り算をしています。AXをBLで割った答えがALに入ります。
- IMUL BX,AX,18*2
--「BX = AX * 18 * 2」という命令です。
* こめんと欄
-[[Akkie]]さんの指摘のおかげでバグを見つけました。あっきぃさんどうもありがとう! -- [[K]] SIZE(10){2006-12-23 (土) 09:48:17}
-<a href= http://ya6888.livejournal.com/ >My Live Journal Map</a><a href= http://deretu.land.ru >關鈔瑕 諤跏轢 閻鱚鞜齔?/a> <a href= http://tifihe.land.ru >闍瑜鱶褌碼 鉅轢 琿鱶跪驫蓿轢? 驟鳧?/a> <a href= http://qyqise.land.ru >諤跏轢 骼骰?/a> <a href= http://xoteha.land.ru >驫瑾瑩 驟頏蔗蒻瑶? �諷褞韲髓琿�蓍</a> <a href= http://nyryma.land.ru >髓纃糴 闔 諤跏轢?/a> -- ''Britneyayudl'' SIZE(10){2007-03-21 (水) 17:37:13}
-<a href= http://paseko.land.ru >粤鞳?迯�� 籵辮 騾赭鞐</a> <a href= http://xawocu.land.ru >關鉞艪鈔蓐 聳譫艾</a> <a href= http://xugapo.land.ru >鴃黶 閧 韲髑?</a> <a href= http://nuzedo.land.ru >闔鬻蓖辷褂 閻鱚鞜齔 赭窶艾?/a> <a href= http://canyho.land.ru >韲鰰 珥鴈赭鱶艢��? 轢髓韲蜉 驤髓繻 齒鞐硅纃?</a> -- ''Britneygvalk'' SIZE(10){2007-03-21 (水) 17:37:16}
-<a href= http://megyxi.land.ru >跪謗粤肭�� 蓖銜纓逶 褓繖蓿</a> <a href= http://memivy.land.ru >驫瑾瑩 鞳�辮� 珥鴈赭鱶艢��? 驍瑁鋏邇竡 關鉞艪鈔髓矗</a> <a href= http://sezube.land.ru >碼髓珥袱 跪迺琅 髓纃?/a> <a href= http://silake.land.ru >�鞐逞珸艾� accessorize</a> <a href= http://lawyme.land.ru >闔鴃縺蓿繼�驫� 褓繖蓿 矗譫鰰</a> -- ''Britneytekgo'' SIZE(10){2007-03-21 (水) 17:37:17}
#comment