advance/ipl
の編集
http://hrb.osask.jp/wiki/?advance/ipl
[
リロード
|
差分
|
単語検索
|
一覧
] [
編集
|
バックアップ
|
添付
]
-- 雛形とするページ --
A
Akkie
Athlon64X2
Clover
DAsoran
Falcon
FormatRule
FrontPage
Genesis
Help
I
InterWikiName
InterWikiSandBox
InterWikiテクニカル
Jormungand
K
Kebo
Kor_Lee_Hee_Rak
Leaf
Linux
Linux/wako_memo
MOIZ99
MW
MenuBar
OSC
PG_MANA
ReadersOS
RecentDeleted
SKYDASH
SandBox
Sero
Sigle
Source
Triangle_Ld.
Zxcvbnm
advance
advance/CPU
advance/FDC
advance/FPU
advance/NotHariMain
advance/QEMUVGA
advance/RTC
advance/blike
advance/cpu_reset
advance/driver
advance/driver/01
advance/driver/02
advance/families
advance/filesystem
advance/fwrite
advance/hddboot
advance/he86
advance/hints
advance/ipl
advance/kernel
advance/keycode
advance/osselect
advance/smaller1
advance/startup
advnace/smaller2
anzy
aotatsu
banbi-
bluedwarf
bo
bugs
challengers
cybozulabsyouth11
deskmanta
esb02b
faq
faq/advance
faq/asm
faq/c00-03
faq/c04-07
faq/c08-15
faq/c16-23
faq/c24-31
faq/make
faq/others
faq/qemu
guide
guide03
guide05
guide07
hikarupsp
imp_log/0000
imp_log/0001
imp_log/0002
imp_log/0003
impressions
index
k
killer_elf
kota
lea
lea/10_memory
lea/4_color
lea/idea
lea/terms
links
logs
logs/osa_hrb/comments0000
logs/osa_hrb/rumors0000
masa
members
message
mistakes
moge32
moppoi5168
notice
osdevjp
populars
prog_index
projects
q_and_a
q_and_a_2
qa_log/0000
qa_log/0001
qa_log/0002
qa_log/0003
qa_log/0004
qa_log/0005
qa_log/0006
qa_log/0007
qa_log/0008
qa_log/0009
quark
rankings
rule
sakamoto
sasaki
spc09
spcc_30min_os
tatsu
tools
tools/bim2hrb
tools/bin2obj
tools/cc1
tools/edimg
tools/gas2nask
tools/makefont
tools/nask
tools/obj2bim
tools/sjisconv
uchan
uho
updates
violations
wako
white
win64-bit
x
ytakano
ヘルプ
リックス
質問します
整形ルール
本は買ったぞ!持ってるぞ!
練習用ページ
* 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} #comment
タイムスタンプを変更しない
* 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} #comment
テキスト整形のルールを表示する