⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1127.html

📁 著名的linux英雄站点的文档打包
💻 HTML
📖 第 1 页 / 共 5 页
字号:
#define PARAM_LFB_COLORS        0x26<br>
#define PARAM_VESAPM_SEG        0x2e<br>
#define PARAM_VESAPM_OFF        0x30<br>
#define PARAM_LFB_PAGES         0x32<br>
*/<br>
video()<br>
{<br>
FS = DS;<br>
DS = ES = CS;<br>
GS = 0;<br>
basic_detect();<br>
<br>
#ifdef CONFIG_VIDEO_SELECT<br>
if (FS:[0x1FA]!=ASK_VGA) {<br>
               // ASK_VGA=0xFFFD, defined in asm-i386/boot.h<br>
               mode_set();<br>
               if (failed) {<br>
                       prtstr("You passed an undefined mode number.");<br>
               }<br>
       }<br>
       else {<br>
               mode_menu();<br>
       }<br>
<br>
#ifdef CONFIG_VIDEO_RETAIN<br>
       restore_screen();<br>
#endif<br>
<br>
#endif<br>
<br>
       mode_params();<br>
}<br>
<br>
////////////////////////////////////////////////////////////////////<br>
       SIG1 = 0xAA55<br>
       SIG2 = 0x5A5A<br>
{<br>
setup_sig1:     .word   SIG1<br>
setup_sig2:     .word   SIG2<br>
modelist:<br>
<br>
       .text<br>
endtext:<br>
<br>
       .data<br>
enddata:<br>
<br>
       .bss<br>
endbss:<br>
}<br>
<br>
////////////////////////////////////////////////////////////////////<br>
// end of file<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
WSS(http://www.whitecell.org)<br>
一个非营利性民间技术组织<br>
致力于各种系统安全技术的研究<br>
坚持传统的hacker精神<br>
追求技术的精纯<br>
<br>
编辑  发贴时间2002/08/25 06:23pm 此 IP 为代理服务器IP: 已设置保密<br>
该用户目前不在线  e4gle <br>
 帅哥 此人为版主<br>
头衔: 论坛版主 午马 天秤座<br>
<br>
 <br>
<br>
级别: 精灵<br>
魅力: 2286<br>
经验: 1824<br>
金钱: 5165 幽妮石<br>
来自: WSS <br>
总发贴数: 232 篇<br>
注册日期: 2002/08/14<br>
消息 查看 搜索 好友 邮件 主页 复制 引用 回复贴子回复 <br>
 <br>
[这个贴子最后由e4gle在 2002/08/25 06:30pm 编辑]<br>
<br>
////////////////////////////////////////////////////////////////////<br>
// bootsect.txt<br>
////////////////////////////////////////////////////////////////////<br>
// Copyright(C) 2001, Feiyun Wang<br>
// analysis on linux/arch/i386/boot/bootsect.S (linux 2.2.17)<br>
////////////////////////////////////////////////////////////////////<br>
<br>
////////////////////////////////////////////////////////////////////<br>
#if 0<br>
int 3;// for debugger<br>
#endif<br>
<br>
_main()<br>
BOOTSEG = 0x07C0<br>
INITSEG = 0x9000<br>
{<br>
       move BOOTSEG:0 to INITSEG:0 (512 bytes);<br>
       goto INITSEG:go;        // CS:IP = INITSEG:go<br>
}<br>
<br>
////////////////////////////////////////////////////////////////////<br>
// prepare disk parameter table<br>
go()<br>
INITSEG = 0x9000<br>
{<br>
set SS:SP to INITSEG:3FF4;// 0x4000-0x0C<br>
copy disk parameter table (pointer in 0:0078)<br>
to INITSEG:3FF4 (12 bytes);<br>
patch sector count to 36 (offset 4 in parameter table, 1 byte);<br>
set disk parameter table pointer (0:0078) to INITSEG:3FF4;<br>
}<br>
<br>
////////////////////////////////////////////////////////////////////<br>
// load the setup-sectors directly after the bootblock<br>
load_setup()<br>
setup_sects = SETUPSECS = 4<br>
INITSEG = 0x9000<br>
{<br>
for(;;) {<br>
               int13h/AH=0(DL=0);      // reset FDC<br>
try {<br>
                       // http://www.ctyme.com/intr/rb-0607.htm<br>
int13h/AH=02h(AL=setup_sects,<br>
                               ES:BX=INITSEG:0200,<br>
CX=2, DX=0);<br>
break;<br>
}<br>
catch (disk error) {<br>
print_nl();<br>
print_hex(SP);<br>
}<br>
}<br>
}<br>
<br>
////////////////////////////////////////////////////////////////////<br>
// get disk drive parameters, specifically sectors#/track<br>
ok_load_setup()<br>
global variables: disksizes, sectors<br>
{<br>
#if 0<br>
       // get disk drive parameters<br>
       // http://www.ctyme.com/intr/rb-0621.htm<br>
int13h/AH=08h(DL=0);<br>
CH = 0;<br>
       // seems not completed yet<br>
#else<br>
       // probe sectors with disksize[] = {36, 18, 15, 9}<br>
SI = &disksizes;<br>
for (;;) {<br>
               sectors = DS:[SI++];<br>
if (SI&gt;=disksizes+4) break;<br>
try {<br>
int13h/AH=02h(AL=1,<br>
ES:BX=INITSEG:((setup_sects+1)&lt;&lt;9),<br>
CX=sectors, DX=0);<br>
break;<br>
}<br>
               catch {<br>
               }<br>
}<br>
#endif<br>
}<br>
<br>
////////////////////////////////////////////////////////////////////<br>
// print out "Loading"<br>
// load the system image<br>
// set root_dev<br>
// jump to the setup-routine loaded directly after the bootblock<br>
got_sectors()<br>
INITSEG = 0x9000<br>
SYSSEG = 0x1000<br>
SETUPSEG = 0x9020<br>
       global variable: root_dev<br>
{<br>
// int10h/AH=03h http://www.ctyme.com/intr/rb-0088.htm<br>
// int10h/AH=13h http://www.ctyme.com/intr/rb-0210.htm<br>
print out "Loading";<br>
<br>
read_it(ES=SYSSEG);<br>
kill_motor();<br>
print_nl();<br>
<br>
if (!root_dev) {<br>
switch (sectors) {<br>
case 15: root_dev = 0x0208;// /dev/ps0 - 1.2Mb<br>
break;<br>
case 18: root_dev = 0x021C;// /dev/PS0 - 1.44Mb<br>
break;<br>
case 36: root_dev = 0x0220;// /dev/fd0H2880 - 2.88Mb<br>
break;<br>
default: root_dev = 0x0200;// /dev/fd0 - autodetect<br>
break;<br>
}<br>
}<br>
<br>
goto SETUPSEG:0;<br>
       // see linux/arch/i386/boot/setup.S<br>
}<br>
<br>
word sread = 0;        // sectors read of current track<br>
word head = 0;        // current head<br>
word track = 0;        // current track<br>
////////////////////////////////////////////////////////////////////<br>
// load the system image<br>
read_it(ES)<br>
       setup_sects = SETUPSECS = 4<br>
       SYSSEG = 0x1000<br>
       syssize = SYSSIZE = 0x7F00<br>
{<br>
       sread = setup_sects + 1;        // plus 1 bootsect<br>
if (ES & 0x0fff) halt;        // not 64KB aligned<br>
       BX = 0;<br>
<br>
       for (;;) {<br>
rp_read:<br>
#ifdef __BIG_KERNEL__<br>
               .word   0x1eff, 0x220;<br>
// call far * bootsect_kludge, see setup.S<br>
#else<br>
               AX = ES - SYSSEG;<br>
#endif<br>
               if (AX&gt;syssize) return;<br>
<br>
ok1_read:<br>
               // get proper AL (sectors to read),<br>
               //      not to across tracks or make BX overflow<br>
               AX = sectors - sread;<br>
               CX = BX + (AX &lt;&lt; 9);<br>
               // TODO: I think CX!=0 can be omitted<br>
               if (CX overflow && CX!=0) {<br>
                       AX = (-BX) &gt;&gt; 9;<br>
               }<br>
ok2_read:<br>
               read_track(AL, ES:BX);<br>
               CX = AX;<br>
               AX += sread;<br>
               if (AX==sectors) {<br>
                       if (head==1) track++;<br>
                       head = 1 - head;<br>
                       AX = 0;<br>
               }<br>
ok3_read:<br>
               sread = AX;<br>
               BX += CX &lt;&lt; 9;<br>
               if (BX overflow) {<br>
                       ES += 0x1000;<br>
                       BX = 0;<br>
               }<br>
       }<br>
}<br>
<br>
////////////////////////////////////////////////////////////////////<br>
// read disk with (sread, track, head)<br>
read_track(AL, ES:BX)<br>
{<br>
       for (;;) {<br>
               printf(".");<br>
<br>
               // set CX, DX according to (sread, track, head)<br>
               DX = track;<br>
               CX = sread + 1;<br>
               CH = DL;<br>
<br>
               DX = head;<br>
               DH = DL;<br>
               DX &= 0x0100;<br>
<br>
               try {<br>
                       int13h/AH=02h(AL, ES:BX, CX, DX);<br>
                       return;<br>
               }<br>
               catch (disk error) {<br>
bad_rt:<br>
                       print_all();<br>
                       int13h/AH=0h(DL=0);     // reset FDC<br>
               }<br>
       }<br>
}<br>
<br>
////////////////////////////////////////////////////////////////////<br>
// some small functions<br>
print_all() { /* ... print out error, AX, BX, CX, DX */ }<br>
print_nl() { /* ... print CR LF */ }<br>
print_hex() { /* ... print the word pointed by SS:BP in hex */ }<br>
kill_motor() { outportb(0x3F2, 0); /* turn off floppy drive motor */}<br>
<br>
////////////////////////////////////////////////////////////////////<br>
// global variables for bootsect.S<br>
{<br>
sectors:<br>
.word 0<br>
disksizes:<br>
.byte 36, 18, 15, 9<br>
msg1:<br>
.byte 13, 10<br>
.ascii "Loading"<br>
<br>
/*<br>
http://lxr.linux.no/source/Documentation/i386/boot.txt<br>
Offset/Size  Proto   Name            Meaning<br>
01F1/1  ALL     setup_sects     The size of the setup in sectors<br>
01F2/2  ALL     root_flags      If set, the root is mounted readonly<br>
01F4/2  ALL     syssize         DO NOT USE - for bootsect.S use only<br>
01F6/2  ALL     swap_dev        DO NOT USE - obsolete<br>
01F8/2  ALL     ram_size        DO NOT USE - for bootsect.S use only<br>
01FA/2  ALL     vid_mode        Video mode control<br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -