无忧启动论坛

标题: 小弄或编程高手,我付费500元,做 F11中文提示生成器,您愿意吗? [打印本页]

作者: ww111222    时间: 2007-3-29 19:48
标题: 小弄或编程高手,我付费500元,做 F11中文提示生成器,您愿意吗?
不知道 有没有这个兴趣?

[ 本帖最后由 ww111222 于 2007-4-25 04:01 PM 编辑 ]
作者: kafen    时间: 2007-3-29 19:58
标题: 回复 #1 ww111222 的帖子
等老九或老毛的PE开始收费后再收吧:lol :lol :lol
作者: novirus123    时间: 2007-3-29 20:23
有钱的出钱,有力的出力。
作者: jyssysz    时间: 2007-3-29 20:25
我为人人,人人为我
作者: xsjlai88    时间: 2007-3-29 21:25
向收费说“不”!,应该向老毛桃,老九,葛明阳等大师学习,学习他们无私奉献的精神,楼上说的好:我为人人,人人为我,但我不反对自愿方式的捐助,但我们都还不富有呀……
作者: zqlcchzql    时间: 2007-3-29 21:36
今天反汇编了IBM F11的代码,终于把F11的提示搞成彩色了。。。。。虽然比不上小弄的,但总比平时的黑夜白字强些,不知道大家需要否,还有一些小BUG,一两天应该能搞定。。

至于显示汉字,从理论上说只要调用BIOS中断10H的什么子功能就可以修改BIOS的字符集了,已经很久很久没有编程了,尽量努力吧。

BBS中还有ASM高手吗?现身说法啊。。。。。

正常情况下一个16点阵的汉字需要32字节来存放点阵数据,不知道F11写了多少个扇区??谁有norton的diskedit for dos???

[ 本帖最后由 zqlcchzql 于 2007-3-29 09:42 PM 编辑 ]

2.jpg (25.28 KB, 下载次数: 89)

2.jpg

作者: zqjiang    时间: 2007-3-29 21:57
原帖由 zqlcchzql 于 2007-3-29 09:36 PM 发表
今天反汇编了IBM F11的代码,终于把F11的提示搞成彩色了。。。。。虽然比不上小弄的,但总比平时的黑夜白字强些,不知道大家需要否,还有一些小BUG,一两天应该能搞定。。

至于显示汉字,从理论上说只要调用 ...

支持你  兄弟
作者: surry100    时间: 2007-3-29 23:19
goolge一下“diskedit for dos”
作者: newbie    时间: 2007-3-29 23:33
支持6楼的搞个生成器出来大家免费用啊,
作者: q8q8feng    时间: 2007-3-29 23:33
原帖由 zqlcchzql 于 2007-3-29 09:36 PM 发表
今天反汇编了IBM F11的代码,终于把F11的提示搞成彩色了。。。。。虽然比不上小弄的,但总比平时的黑夜白字强些,不知道大家需要否,还有一些小BUG,一两天应该能搞定。。

至于显示汉字,从理论上说只要调用 ...

:) 强烈支持 并关注兄弟!
作者: ww111222    时间: 2007-3-30 01:41
原帖由 zqlcchzql 于 2007-3-29 09:36 PM 发表
今天反汇编了IBM F11的代码,终于把F11的提示搞成彩色了。。。。。虽然比不上小弄的,但总比平时的黑夜白字强些,不知道大家需要否,还有一些小BUG,一两天应该能搞定。。

至于显示汉字,从理论上说只要调用 ...




    看来 又前进了一步
作者: ww111222    时间: 2007-3-30 01:45
原帖由 zqlcchzql 于 2007-3-29 09:36 PM 发表
今天反汇编了IBM F11的代码,终于把F11的提示搞成彩色了。。。。。虽然比不上小弄的,但总比平时的黑夜白字强些,不知道大家需要否,还有一些小BUG,一两天应该能搞定。。

至于显示汉字,从理论上说只要调用 ...



http://bbs.wwwfox.net/attachment.php?aid=14646


建议您 看看 小弄  的 这个东东,也许有用
作者: 123    时间: 2007-3-30 02:03
从不用一键恢复
作者: it2000    时间: 2007-3-30 02:10
用途不是很大,不会为此付费
作者: guoxl81    时间: 2007-3-30 09:04
授人以鱼 不如 授人以渔
作者: newbie    时间: 2007-3-30 09:38
授人以鱼,亦授人以渔
作者: 紫狐    时间: 2007-3-30 09:56
原帖由 zqlcchzql 于 2007-3-29 09:36 PM 发表
今天反汇编了IBM F11的代码,终于把F11的提示搞成彩色了。。。。。虽然比不上小弄的,但总比平时的黑夜白字强些,不知道大家需要否,还有一些小BUG,一两天应该能搞定。。

至于显示汉字,从理论上说只要调用 ...



希望研究出个成果来。附件是diskedit。 DISKEDIT.rar (304.86 KB, 下载次数: 377)
作者: HuAnGkUn    时间: 2007-3-30 10:09
有希望。技术有限,只能支持。
作者: zqlcchzql    时间: 2007-3-30 10:29
原帖由 紫狐 于 2007-3-30 09:56 AM 发表



希望研究出个成果来。附件是diskedit。18558


好好,非常感谢,主要是想用这个来看一看F11到底写了几个扇区,如果有写3以上的扇区内容就有足够的空间存放汉字字模了,如果只写一个扇区是不够的,只有512字节,即要存放启动代码又要存放字模数据是不可能的。
作者: 志大才疏    时间: 2007-3-30 14:37
支持
这个东西,做好了
对不懂计算机的来说,是个福音
作者: zjq20032006    时间: 2007-3-30 19:39
俺也付 100
作者: zjq20032006    时间: 2007-3-30 19:44
原帖由 tenkey 于 2007-3-30 01:49 PM 发表
不太有用,如果是作为客户的宣传,系统方面也用不着(可能也不会去注意)

电脑难做呀,到处是竞争,所以各方面都要做宣传呀!
作者: zjq20032006    时间: 2007-3-30 19:58
如果可能,如能在WIN下直接写MBR更好
作者: laozhao    时间: 2007-3-30 20:12
原帖由 zqlcchzql 于 2007-3-30 10:29 发表


好好,非常感谢,主要是想用这个来看一看F11到底写了几个扇区,如果有写3以上的扇区内容就有足够的空间存放汉字字模了,如果只写一个扇区是不够的,只有512字节,即要存放启动代码又要存放字模数据是不可能的。


不用管F11写了多少扇区,你自己可以增加啊,在硬盘的0道0头共有63个区可用,足够了。

稍微改写一下原F11代码,在它的前面插入代码来读取自己的扩充扇区,在自己的代码中做好所有的预处理,如设置VGA字模扩展数据,以及必要的寄存器值等等,然后跳转原F11代码入口即可。

简单起见,中文字符就直接在F11代码的内部字符串区修改,只是要注意不能直接用汉字内码,而是要用转换后的相应高位ASC码。
作者: laozhao    时间: 2007-3-30 20:16
或者干脆自己重新改写一个纯正的中文版F11程序,功能像F11这样的引导器还是非常简单的。
作者: xywlty    时间: 2007-3-30 22:41
向老毛桃,老九,葛明阳等无私奉献的大侠门致敬,学习他们的精神


你们就是我的偶像!!:hug: :hug: :hug:
作者: ww111222    时间: 2007-3-30 23:47
谢谢大家的关心,

  
   已经 有 N多人对这个 感兴趣了


  不知道  会编程的 大侠 能否出手呀
作者: lianjiang    时间: 2007-3-31 07:20
对个人用户,意义不大,不想花钱。呵呵。
作者: newbie    时间: 2007-3-31 07:55
原帖由 laozhao 于 2007-3-30 08:16 PM 发表
或者干脆自己重新改写一个纯正的中文版F11程序,功能像F11这样的引导器还是非常简单的。


有大牛路过,抓住他……有人出钱还不写?
作者: jyssysz    时间: 2007-3-31 19:15
可以参考一下IMAGEIT的启动界面。
能把IBM的F11加上IMAGEIT的图形启动界面就比较完美了。
作者: newbie    时间: 2007-3-31 19:50
人呢,怎么没下文了,跑了?
作者: 小木头    时间: 2007-3-31 20:09
好.强烈支持! 并关注中!
作者: wwwzhx    时间: 2007-4-1 14:34
IBM的F11占用了三个扇区,
对于英语非常贫乏的人,去读一些满屏幕的"abcd",确实是有点让人心烦;而有了朗道EC英汉词典,轻轻按动其热键,满屏的英文瞬间便成了我们亲切的"方块字",此时此刻,心中自然流动的是一种欣喜。而若你仔细观察,你还会发现,EC竟能在西文文本方式下显示汉字,而不影响屏幕的扩展ASCII码。

  满脑的疑问想必你想弄过水落石出,而且有时你也会在心中突发奇想:我要是能设计这样一个英汉字典,该多好哇!

  下面,笔者便向你介绍"西文文本方式下显示中文"这一技术,并且通过此技术,作一个屏幕英汉翻译字典。

一、西文文本方式下汉字显示

  VGA/EGA通常带有256K VRAM,共分四个平面,每平面64K。文本方式下,偶内存地址的数据被放置于平面0中,它用于存放ASCII或汉字,奇内存地址的数据放置于平面1中(存放显示字符的属性,前四位表示背景色,后四位表示前景色)。而VGA/EGA显示的字符集(字模数据库),均放置于平面2中。我们不仅可使用其固化的ROM字库,还可以使用用户自己定义的字库。

  对于VGA,平面2被分成8个8K的区域(用0-7表示其区号),可同时加装8种不同的字库;EGA则分为4个区(0-3表示其区号),可同时加装4种字库。实际上VGA/EGA文本模式下,字符的点阵信息均放置于平面2中。若我们将汉字的字模作为VGA/EGA一个字库,然后将其加装到平面2中,那么我们便可在西方文本方式下显示汉字。如,要显示汉字"我",可先将"我"字的点阵信息取代字符C1、C2的点阵信息(汉字一般为16*16点阵,而西文字符为8*16点阵,所以一个汉字需要占两个字符位置),然后将"我"的内码更改为c1、c2,再将其输入屏幕即可。

  此技术说起来非常简单,但在实际编程中有许多矛盾需要解决,标准ASCII,32-127之间的字符是可显示字符,若我们将汉字字模放置它们对应的字模处,则屏幕上发生混乱;而西文字符192-223是制表符,程序中经常用到,因此我们只能用128-191,224-255这些字符作为汉字字符的代替字,这样在屏幕上同时只能显示48个汉字。另一方面,我们在编程中还发现,若将以上的字符字模作为汉字字模区域,则汉字中总有一条空行,非常不美观,经验告诉我们,将192-223的字符作为汉字左边部分的代替字(右边随便,只要不与左同),汉字将正常显示,但此时英文制表符也会变成汉字。

  解决这问题,似乎只有一个办法:将当前模式设置为图形方式,然后再取出各自的点阵信息显示在屏幕上,即可圆满解决。若这样作的话,此处"在西文文本方式下显示汉字",也就不可谈了。

  在VGA显卡中,平面2中同时加装8种不同的字库,但同一时刻,最多可使用2种字库,一个被称为字符集A,另一个被称为字符集B,因此屏幕上可同时显示512个不同的字符,这主要是由通过设置字符影射选择寄存器进行。我们可通过如下BIOS调用进行设置。

  入口参数: BL=装入字符映射寄存器值

  b4,b1,b0 =字库A在位平面2 中的区号

  b5,b3,b2 =字库B在位平面2 中的区号*/

  EGA b4,b5没用

  AX=1103h

  如:BL的b4,b1,b0=1,1,1 则表示字库A将选择7号区的字库。

  此时,属性字节的B3位用于选择使用到的字符集(A或B,为1是使用字符集A)。若只激活一种字符集(A、B的值相同),属性字节的b3位可用作选择字符的高亮度。

  现在,若我们将西文字符字库放置于平面2的n区号,中文字符字库放置于平面2的m区号(m<>n),便可以圆满在西文文本方式下显示中西混合字串,而且互不干涉。

  这一技术处理过程如下:

  1、将VGA/EGA标准西文字符集读入平面2的n区;

  2、将用户含有中文字模信息的字符集读入平面2的m区(n<>m);

  3、设置选择的AB字符集(如A选择区号为n的,B选择区号为m的)。

  4、若为汉字,修改其内码,使之与其对应的字模保存处相同,如:字库偏移地址n*16(每个8*16点阵的字符字模占用16个字节),m*16处分别保存的是汉字X的左右点阵信息,则显示汉字X时,就将内码改为n,m,同时将其对应的属性b3位设置为1或0(视3步中AB选用的字库)。
作者: wwwzhx    时间: 2007-4-1 14:35
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;
;  演示文本方式下显示汉字的汇编源程序
;  
; 文件名:myname.asm
;
;  作者: 黄志斌 2001年12月4日于广西河池

;  说明: 本程序通过调用bios 10h替换系统字模来显示汉字
;  入口: ax=1100h  
;        bh=字模的高度(有效值:0~20h,默认值:10h)  
;       bl=被替换的字模集代号(有效值:0~7)
;        cx=要替换的字模数
;        dx=被替换的第一个字模所对应的字符的ascii
;        es:bp=新字模起始地址
;       int 10h
; 要恢复系统字符集,可作如下调用:
;        ax=1104h
;        bl=字模集代号(有效值:0~7)
;        int 10h

; 使用方法:
;    masm myname;;
;    link myname;;
;    exe2bin myname.exe myname.com
;
; 注意:本程序未按该字的机内码替换字模,因此不能运行在汉字操作系统下;       也就是说,要想让程序在中英文下都能正常显示汉字,那么就要汉字的内码进行替换      
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
codeseg segment public 'code'
;==============================
org 100h
assume es:codeseg,ss:codeseg
assume cs:codeseg,ds:codeseg,es:codeseg
;-----------------------------
main  proc near
       mov ax,1100h
       mov bh,10h
       mov bl,0
       mov cx,6
       mov dx,200
       lea bp,mode
       int 10h
       mov ah,09h
       lea dx,myname
       int 21h
       mov ah,7
       int 21h
       mov ax,1104h
       mov bl,0
       int 10h
       mov  ax,4c00h
       int  21h
;(or   int 20h)
main  endp
;---------------------
  mode db
100b,100b,111111b,100b,100b,11111111b,1b,11111b,10001b,11111b,10001b,11111b,10000b,100b,11000b,1100000b

       db
01000000b,01010000b,11111000b,01000000b,01000100b,11111110b,00010000b,11111000b,00010000b,11110000b,00010000b,11110000b,00000000b,01100000b,00011000b,00000100b

       db
1b,1b,1b,11111111b,1b,1b,1b,111111b,0b,10b,10001b,1010000b,1010000b,10010000b,1111b,0b

       db
00000000b,00000000b,00000100b,11111110b,00000000b,00000000b,00010000b,11111000b,0b,00000000b,10000000b,10000100b,00010010b,00010010b,11110000b,0b

       db
0b,100000b,10001b,0b,11111100b,1011b,1001000b,101000b,101001b,10001b,101001b,100101b,1000101b,10000001b,11b,0b

       db
10000b,00010000b,11110100b,10010b,00010000b,11111110b,00010000b,01010000b,01010000b,01110000b,01010000b,01001000b,01001000b,01101010b,10000110b,10b

  myname db 200,201,202,203,204,205,'$'
;======================
codeseg ends
    end main

  我用c语言写有一个程序可以直接从ucdos字库中读取指定的汉字的字模,并按汇编或c语
言数据格式存放到文件中,将它们放到相应的源程序中就可以了。
作者: wwwzhx    时间: 2007-4-1 14:35
自己编程实现多引导
作者:    来源:互联网    点击:43    日期:2006-5-13 16:00:12   


如果你是一个计算机用户相信你一定安装过操作系统,当你用久了一个操作系统,你可能会安装一个新的操作系统,但你往往希望保留现在的操作系统。比如当你有了一个windows98,你可以在上面再安装windows2K或是windowsXP,这是因为Windows的NTloader可以认识比自己更早的操作系统,所以能够给你保留先前的操作系统。但是如果你现在已经拥有了一个windows2K或是windowsXP你要在硬盘上再装个WINDOWS98甚至一些怀旧派人士想在上面安装一个DOS6.22,此时又该怎么办呢?你往往会用到第三方软件,比如V communications,.inc的System Commander系列,PowerQuest Corporration的BootMagic等等都是很好的选择。这些软件的将硬盘分区设置为两个或是两个以上的主分区,(也就是我们所说的双“C”盘,或是多“C”盘),把不同的操作系统安装到不同的主分区,通过激活不同的分区来实现多重引导,其优点是安全稳定,一旦一个操作系统瘫痪,一点不影响其他操作系统,个人认为值得推荐。
本文不是一篇多操作系统实现的经验介绍,因此有关BootMagic等第三方软件的使用我就不再浪费篇幅来介绍,我要给大家分析的是此类软件的实现原理。
要了解其实现原理,首先你必须对硬盘的总体结构有一定的了解,如果你对其结构不了解可参照表1。
表1:
名称备注
1主引导扇区(Master boot sector)占用一个扇区
2第一个主分区的引导扇区(Boot sector)占用一个扇区
3第一个主分区的FAT区占用空间由磁盘大小和FAT类型来定
4第一个分区的根目录区存放分区根目录
5第一个分区数据区用来存放各种数据
6…
7扩展分区表 占用一个扇区
8第一个扩展分区的引导扇区占用一个扇区
9第一个扩展分区的FAT区占用空间由磁盘大小和FAT类型来定
10第一个扩展分区的根目录区存放分区根目录
11第一个扩展分区的数据区用来存放各种数据
12…
注意:该表以空间顺序进行描述,一个硬盘允许最多四个主分区和多个扩展分区

我们还需要了解主引导扇区(Master boot sector)的结构,它是硬盘的第一个扇区, 由主引导程序(MasterBoot Record简称MBR),硬盘分区表(Disk Partition Table简称DPT )和结束标识三部分组成。其结构如表2。


表2:
在主引导扇区中的位置名称备注
1偏移 00H~1BDH主引导程序占446个字节,但实际可能并未用满
2偏移1BEH~1FDH硬盘主分区表占64个字节,每个分区项占16个字节,最多可有4个分区项:1BEH~1CDH 分区项11CEH~1DDH 分区项21DBH~1EDH 分区项31EFH~1FDH 分区项4
3偏移1FEH~1FFH结束标识占2个字节,用来判断分区表的有效性

主引导程序我在此就不分析了,需要注意的是在主引导程序中有一些出错信息,一些引导型病毒往往会覆盖这些信息来将自己嵌入到主引导程序中去,并将主引导程序开始的几个字节改为一条跳转指令,通过观察主引导程序的变化,往往可以让我们看出自己的电脑是否有引导型病毒,一旦发现异常,我们可以用FDISK/MBR命令来覆盖原有的MBR。结束标识的两个字节总是55H AAH,该标识只是用于判断这个扇区是否是有效的主引导扇区,如果主引导程序发现没有这个结束标识,将会认为操作系统丢失,并显示“Missing Operating System”。
我们最后要了解的是硬盘分区表,多重引导软件一般都是通过修改分区表中的特定字节达到多重引导的目的的,在硬盘的主引导区中,从偏移1BEH~1FDH的64个字节存放的是硬盘分区表,其中最多包含4个分区项,每个分区项由16个字节构成,我们来看看每个分区项的详细含义,假设我们的一个分区占用的16个字节被标为00H~0FH,其结构如表3:
表3:
偏移含义
00H引导标识字节,其值只能为00H或80H,为00H时表示该分区不可引导,为80H时表示该分区可用于引导 。
01H分区起始磁头号
02H其高2位为分区起始柱面号的高位,底6位为分区起始扇区号
03H分区起始柱面号的低位
04H分区系统标志,当该值为00H时,表示此分区为不可识别的系统;为04H时该分区为FAT16分区;为05H或0FH该分区为 扩展分区;为0B时该分区为FAT32分区 ;为83H时表示该分区为Linux分区, 为07时该分区为NTFS分区
05H分区结束磁头号
06H其高2位为分区结束柱面号的高位,底6位为分区结束扇区号
07H分区结束柱面号的低位
08H~0BH在线性寻址方式下的分区的扇区地址。
0CH~0FH以扇区为单位的该分区大小(总扇区数)
我们来看看BootMagic之类的软件是如何实现多系统引导的了,在表3中我们看到在偏移00H处的一个字节当其值为80H时代表该分区是一个引导区,当其值为00H时代表该分区不是引导区,其实多引导的实现原理就是通过改变该处的值来选择用来引导的分区。
假设你已经了解了以上原理,我们就完全可以做出自己的多重引导程序来了,我在此写出一个完整的实现程序,我将为大家分析这个程序应该怎么来写。假设你有一块硬盘,你在上面安装了一个windowsXP,可你现在想装个windows98,于是你用PartitionMagic将你的第一个扩展分区也就是你的D区设置为主分区,然后激活,重启动并用windows98安装光盘引导系统,并安装好windows98。就到这,你先不要急于安装BootMagic,让我们来试试动手做个自己的BootMagic怎么样。
很显然,要实现此功能,最少需要两个模块,模块一:被写入主引导扇区中,用来取代原MBR区,它必须能够在系统引导前获取执行权,实现主分区的引导选择后,将执行权交给被选择的操作系统,从而实现多系统引导;模块二:实现三个功能,首先将原主引导扇区备份一个到其他扇区(在我的例子中把它备份到0头0道 6扇),然后将模块一写入主引导扇区。另外模块二还实现多引导程序的卸载
模块二功能相对简单,其源程序如下:
;硬盘多引导安装程序(SYSGUIDE.EXE)模块二
DATA SEGMENT
D1 DB 'choose'
D2 DB 'Please choose the number (1)Install the SYSGUIDE',0dh,0ah,' DB ‘ (2) Delete the SYSGUIDE',0dh,'$'
D3 DB 'SYSGUIDE.DAT',00H
D4 DB 'Can not find file (SYSGUIDE.DAT)',0dh,0ah,'$'

D5 DB 0dh,0ah
DB 0dh,0ah
DB 0dh,0ah
DB ' ----------# MUCH SYSTEM GUIDE #------------',0dh,0ah
DB ' E-mail:tyhhyf@hotmail.com',0dh,0ah
DB ' OICQ:86633320',0dh,0ah,'$'
DATA ENDS


CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,OFFSET D5
MOV AH,09H
INT 21H
MOV AH,00H
INT 16H
MOV DX,OFFSET D2
MOV AH,09H
INT 21H
readkey:
MOV AH,00H
INT 16H
cmp al,'1'
je key1
cmp al,'2'
je key2
jmp readkey
key1:
MOV AX,0201H ;读0 0 1扇区
MOV CX,0001H
MOV DX,0080H
MOV BX,0F000H
INT 13H
MOVSI,offset D1
MOVDI,0F020H
MOVCX,0003H
REPZ CMPSW
JZEXIT ;字符串相同则跳转
mov ax,0301h ;将原MBS区备份一个到0 0 6 扇
mov cx,0006h
mov dx,0080h
int 13h
MOV AH,3DH
MOV DX,OFFSET D3
MOV AL,00H
INT 21H ;打开文件SYSGUIDE.DAT
JB OPERERROR
PUSH AX
MOV AH,3FH
MOV DX,0F000H
MOV CX,018DH
POP BX
INT 21H
MOV AX,0301H ;将SYSGUIDE.DAT写到0 0 1扇,替代原来的MBR
MOV CX,0001H
MOV DX,0080H
MOV BX,0F000H
INT 13H
JMP EXIT
key2:
MOV AX,0201H;读0 0 1扇区
MOV CX,0001H
MOV DX,0080H
MOV BX,0F000H
INT 13H
MOVSI,offset D1
MOVDI,0F020H
MOVCX,0003H
REPZ CMPSW
JNZEXIT ;字符串相同则跳转
MOV AX,0201H ;读0 0 6扇区
MOV CX,0006H
MOV DX,0080H
MOV BX,0F000H
INT 13H
MOV AX,0301H ;写0 0 1扇区
MOV CX,0001H
MOV DX,0080H
MOV BX,0F000H
INT 13H
JMP EXIT
OPERERROR:
MOV AH,09H
MOV DX,OFFSET D4
INT 21H
EXIT:
MOV AH,4Ch
INT 21h
CODE ENDS
END START
模块一被写入到硬盘的第一个扇区中,在系统引导之前获得执行权,从而实现多引导。因为这是个扇区程序,有别于一般的程序文件,其格式类似于COM文件,在此我是采用DEBUG程序,从EXE文件中提取的方法来实现的,源程序如下:
;多引导程序(SYSGUIDE.DAT),需要从以下源程序(模块一)产生的程序文件中提取
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE

;这一段是将整个硬盘锁从0000:7c00移至0000:0600,以免被后来读入的代码覆盖
START:
db 256 dup (00h)
PUSHDS
PUSHES
MOVCX,0100h
MOVDI,0600h
MOVAX,0000h
MOVDS,AX
MOVES,AX
MOVSI,7C00h
REPNZ MOVSW
mov ax,0686h
JMPax ;长跳转至移动后的代码,也就是从screen处开始执行
words db 'Please choose the partition for guide.'
db 10 dup (20h)
db '(1)partition 1;(2)partition 2;(3)partition 3;(4)partition 4;',00h
screen:
MOVAX,0600h
MOVBH,0F0h
MOVCX,0000h
MOVDX,184Fh
INT10h ;初始化屏幕(前景为黑色,背景为灰白,字符闪烁)
MOVDL,1Ah
MOVSI,0619h ;从0619H处显示字符(因为程序将被读入了0000:0600处,
;实际显示的也就是现在的words处开始的字符串)
DISPLAY:
MOV AH,02H
MOV DH,10H
MOV BH,00H
INT 10H
MOV AL,[SI]
CMP AL,00H
JE readMBS
MOV AH,09H
MOV CX,01H
MOV BH,00H
MOV BL,70H
INT 10H
INC DL
INC SI
JMP DISPLAY
readMBS:
MOVAX,0201h
MOVCX,0001h
MOVDX,0080h
MOVBX,1000h
INT13h ;将主引导区(即本SYSGUIDE.DAT)读出到0000:1000H处
MOV ax,0201h
MOV cx,0006h ;读0 0 6扇,(即原来的MBS)
MOV dx,0080h
MOV bX,07C00h
int 013h
readkey:
MOV AH,00H
INT 16H
CMP AL,'1' ;是1么?
JE number1
CMP AL,'2'
JE number2
CMP AL,'3'
JE number3
CMP AL,'4'
JE number4
jmp readkey
number1:
db 0a0h,0c2h,11h ;相当于mov al,[011c2h],因为用mov al,[011c2h]不能编译
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,080h
db 88h,26h,0beh,11h ;相当于mov [011beh],ah
mov ah,00h
db 88h,26h,0ceh,11h ;mov [11ceh],ah
db 88h,26h,0deh,11h ;mov [11deh],ah
db 88h,26h,0eeh,11h ;mov [11eeh],ah
jmp ok
number2:
db 0a0h,0d2h,11h ;mov al,[11d2h]
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,80h
db 88h,26h,0ceh,11h ;mov [11ceh],ah
mov ah,00h
db 88h,26h,0beh,11h ;mov [11beh],ah
db 88h,26h,0deh,11h ;mov [11deh],ah
db 88h,26h,0eeh,11h ;mov [11eeh],ah
jmp ok

error1:
jmp readkey

number3:
db 0a0h,0e2h,11h ;mov al,[11e2h]
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,80h
db 88h,26h,0deh,11h ;mov [11deh],ah
mov ah,00h
db 88h,26h,0beh,11h ;mov [11beh],ah
db 88h,26h,0ceh,11h ;mov [11ceh],ah
db 88h,26h,0eeh,11h ;mov [11eeh],ah
jmp ok
number4:
db 0a0h,0f2h,11h ;mov al,[11f2h]
cmp al,00h
je error1
cmp al,05h
je error1
cmp al,0fh
je error1
mov ah,80h
db 88h,26h,0eeh,11h ;mov [11eeh],ah
mov ah,00h
db 88h,26h,0ceh,11h ;mov [11ceh],ah
db 88h,26h,0deh,11h ;mov [11deh],ah
db 88h,26h,0beh,11h ;mov [11beh],ah
jmp ok
ok:
mov ax,0301h
mov cx,0001h
mov dx,0080h
mov bx,1000h
int 13h ; 将改变了引导标示的分区表,写回0 0 1扇
MOVCX,040h
MOVDI,7dbeh
MOVSI,11beh
REPNZ MOVSW
MOV ax,0301h
MOV cx,0006h ;将改变了引导标示的分区表,写回0 0 6扇
MOV dx,0080h
MOV bX,07C00h
int 013h
MOV bx,7c00h ;交执行权给0000:7C00处
JMP bx ;长跳转至原MBR代码处执行

CODE ENDS
END START
代码到此就讲完了,程序本身不复杂,只要你了解了实现原理,在实现时才会得心应手,好了,赶快把我们的源代码编译链接一下,把模块二得到的程序取名为SYSGUIDE.EXE,从模块一所得的程序中提取出我们要的程序取名叫SYSGUIDE.DAT,提取方法如下:
1、在DOS方式下,输入“DEBUG GUIDE.EXE”,其中GUIDE.EXE是我们用模块一得到的程序文件(在此强烈警告千万不要运行这个GUIDE.EXE程序),
2、在DEBUG提示符下输入:R CX(回车) 1BD(回车) N SYSGUIDE.DAT(回车) W(回车)Q(回车)。

在命令行中输入DEBUG,然后
-R CX(回车)
-1BD(回车)
-N SYSGUIDE.DAT(回车)
-W(回车)
-Q(回车)。

这样你就会发现在你当前的目录中就有了一个名为SYSGUIDE.DAT的文件,着就是我们将用来写入硬盘第一扇区的扇区程序文件了,赶快把它和SYSGUIDE.EXE文件拷贝到一个文件夹下吧。
好了,我们要的程序已经得到了,就让我们来用用看,在我们最后安装的WIN98中执行吧,当看到以下提示时,键入数字键“1”。
'Please choose the number (1)Install the SYSGUIDE
(2) Delete the SYSGUIDE
然后重新启动,怎么样,是不是看到了引导选择提示?不过界面是不太好看了^_^,但是没什么,毕竟这是我们自己写的多引导程序哦!好了,我们选择“1”试试,是不是进了我们先前安装的WINXP?然后重新启动,再选择“2”试试,是不是进了我们后来安装的WIN98了!
对了我们好象还有一个BOOTMAGIC的功能没有实现哦,就是程序自动识别操作系统的功能,我想这个功能就留到我们读者自己去扩充吧!我在这大致的说明一下原理,又回到我们的表3,看到其中偏移04的那个字节么?其实BOOTMAGIC就是利用了这个原理来实现智能化的识别操作系统的,那具体要怎么做呢?我不说,自己去想^_^。
又到了说886的时候了,再写下去编辑可不会用了哦!就这样吧,有兴趣来讨论,联系方法到我的源程序中找。程序可以到 http://lsky.net/download/soft.asp?id=35 下载。
作者: wwwzhx    时间: 2007-4-1 14:37
显示模式   
    一般情况下,可以认为显示模式就是显示系统的各个不同的工作状态。或者也可以认为是一组显示参数的整体化表示。
  PC的显示系统有些特别,它分为两种完全不同工作模式,字符模式和图形模式。字符模式也被称为"A/N(Alpha/Number Mode)"模式,即"字母/数字"模式。在这种工作模式下,程序所要处理的数据是字符的ASCII码。前面已经提到计算机中的文字是由很多点组成,不过在"A/N"模式下程序无需处理组成字符的每个点。这些点的处理是由显示卡自己完成。
  图形模式也被称为"APA(All Point Addressable Mode)"模式,即"所有点可寻址"模式。从这个名字就可以看出,在"APA"模式下,所有的点在显示缓存中都是占据存储空间的,因此程序所要处理的最小元素就是屏幕上的每个点。
  在这两种显示模式之中又细分为若干具有不同参数的显示模式,在这些具体的显示模式之间有一些差别如显示分辨率、同屏最多可显示的颜色数等等。比如说有一种APA模式提供了320×200的显示分辨率和同屏最多显示4种颜色的显示参数,而另一种APA模式提供了640×480的显示分辨率和同屏最多显示16种颜色的显示参数,一旦程序选择了其中一种模式,则显示系统就会自始至终按照这组显示参数工作,直至程序选择了新的显示模式。
  既然PC机的显示系统具有多种工作模式,那么如何方便的区分和选择这些不同的显示模式呢?可以想到为所有可使用的显示模式编上号即可解决问题,事实上在PC电脑中也确实是这样做的。下面这个表给出了标准VGA卡可以提供的的所有显示模式:   
  表6-1 标准VGA卡的显示模式表   
  模式号 字符/图形 显示分辨率 字符列x字符行 同屏颜色数   
  0 字符 360x400 40x25 16   
  1 字符 360x400 40x25 16   
  2 字符 720x400 80x25 16   
  3 字符 720x400 40x25 16   
  4 图形 320x200 40x25 4   
  5 图形 320x200 40x25 4   
  6 图形 640x200 80x25 黑白   
  0DH 图形 320x200 40x25 16   
  0EH 图形 640x200 80x25 16   
  0FH 图形 640x350 80x25 黑白   
  10H 图形 640x350 80x25 16   
  11H 图形 640x350 80x25 2   
  12H 图形 640x480 80x25 16   
  13H 图形 320x200 40x25 256   
    表中的每个编号都指定了一种显示模式,也就是说每个数字实际指定了一组显示参数。如表中的模式3,它反映出显示系统在此模式下将提供80列25行的A/N显示,且字符颜色可有16种等。这个模式就是开机启动后DOS使用的显示模式。
  每种显示卡所能提供的显示模式是有区别的,如MDA卡只能提供模式7(表中未收入),CGA卡可以提供模式1-6,而一些兼容的新型VGA卡可以提供比标准VGA更多的显示模式。至于程序应如何选择显示模式,这个问题将在稍后讨论。
作者: wwwzhx    时间: 2007-4-1 14:37
Video BIOS的应用   
    所谓Video BIOS,其核心就是前面曾经提到过的INT 10H中断服务程序。在上一章中我们曾使用过10H中断的0EH功能在屏幕上显示字符,这个功能的能力还是很强的,但有一点令人不太满意的地方,那就是这个功能不能使字符具有颜色。那么有什么方法可以使字符有颜色呢?在讨论这个问题前我们先要讨论一个术语--字符属性。
  直觉告诉我们显示在屏幕上的那些字符是具有"个性"的。最明显的,不同的字符可以有不同的颜色,有时候我们会在屏幕上看到一闪一闪的字符,如果使用一块老式的MDA卡,还能看到具有下划线的字符。
  这里所说的"个性"指得就是每个字符可以具有的各种不同显示形式,这些不同的形式就是一般所说的"字符属性"。对于一个具体的字符是如何表示它的属性呢?在PC机的显示系统中,属性是由一个字节的数据表示的(图6-3):①
  上一节提到过各种颜色都是由RGB三种基本颜色合成的,所以属性字节中的低3位指出了组成字符颜色的RGB值。如果这三位是001,那么表示字符的颜色是蓝色;若这三位是011,那么字符的颜色就是蓝+绿,即青色。   
  
图6-3 属性字节的位定义   "I"位是字符加亮位,这一位置1时则字符的颜色会变亮。如果认为"RGB"位控制了CRT电子枪的开关,那么"I"位相当于控制了加在电子枪上的信号电压,"I"位置1时信号电压加强了一倍,所以屏幕上的字符颜色会更亮。
  Bit4-Bit6位控制了背影颜色的RGB值,"F"位的定义和"I"位不同,它表示字符是否闪烁,若F位为1,则屏幕上的字   
  符将一闪一闪的。下面不妨来看两个实际属性字节:   
  (1)00100110        (2)11011010   
    第一个字节反映了字符的颜色是红+绿=棕色,不加亮;背影颜色是绿色,字符正常显示。第二个字节反映了字符的颜色是加亮的绿色;背影颜色是红+蓝=洋红,字符闪烁显示。这些只是理论上的分析,如果想验证这些分析带还要学习一个新的BIOS INT 10H功能调用--09H功能。   
   功能号:09H
用 途:在当前光标位置写有属性的字符
参 数:AL=将要显示字符的ASCII码
    BH=显示页号
作者: wwwzhx    时间: 2007-4-1 14:49
自己写一个引导程序的设想:

mbr被调入内存后,先检查分区表,查看有几个主分区,根据分区表里主分区的起始扇区地址,找到每个主分区的第一个扇区(如第一个主分区的起始扇区常是63扇区),看这个扇区里有没有特定的卷标,如果没有就把现在处于激活状态的主分区的起始扇区调入,执行之,启动正常系统。
如果找到这个卷标,就把汉字的点阵字库写入显卡ram,显示提示信息,延时,检测键盘,有特定键按下就把这个分区设为活动,原活动分区设为隐藏,没有键按下还是启动原先活动分区。
当然判断和检测要更严密写。
作者: secowu    时间: 2007-4-1 14:59
不支持收费
作者: laozhao    时间: 2007-4-1 15:00
哈哈,楼上的强,搜出这么多的资料。足够了,只要你弄懂了这几样,就可以自己写出文本模式下的中文版引导器了。

不过,如果真要自己重写的话,显示模式就不重要了,不一定要文本模式啊。图形模式的更好些,不用受那些条条框框的限制,还可以图文并茂,显示更精彩的内容。
作者: laozhao    时间: 2007-4-1 15:02
建议wwwzhx搜一下spfdisk,下载后使用一下,体会一下他这个引导器的工作流程。

然后再分析他的原代码,在他的基础上写出一个全新的完美的引导器来。:lol
作者: laozhao    时间: 2007-4-1 15:04
spfdisk的官方站:

http://spfdisk.sourceforge.net/
作者: wwwzhx    时间: 2007-4-1 16:49
同志们,我只玩过单片机的汇编,没弄过8086 pc 系列的,差异还是蛮大的,学习中,
不过我都不抱幻想,这个东西,低手做不了,高手不肯屈尊。
嘿嘿,做一个图形的,想法是很好的。
作者: newbie    时间: 2007-4-1 17:16
laozhao 看是高手呀,花几分钟写一个给大家用啊
作者: laozhao    时间: 2007-4-1 18:58
呵呵,现成的引导器大把,而且各有特色,功能也非常强大,重复开发没有任何意义。

除非为了学习,或者自己有了兴趣,不然,目前无意写这东东。:)

没见老弄都不搞了嘛,他都有现成的自己的代码都不搞了,何况别人另起炉灶再搞一套。:Q
作者: haiou327    时间: 2007-4-24 21:45
偶在小弄网盘下的F11,在一台机安装成功,在另一台机可以显示F11中文提示,但按下F11后显示器黑屏,晕.
作者: ww111222    时间: 2007-4-25 11:03
需要



作者: jyssysz    时间: 2007-4-25 12:06
小弄搞IBM的F11不如把清华同方的急救中心改一下,使它能直接启动HPA中的操作系统。
这样所有的问题都解决了。
作者: ww111222    时间: 2007-4-25 13:46
最关键是 中文提示,
作者: jyssysz    时间: 2007-4-25 14:07
楼主可以看这个帖子的说明:
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D3

这个应该是目前为止最为完美的方案了

只是小弄不知能不能出手制作一下。
作者: 紫狐    时间: 2007-4-25 14:57
原帖由 zjq20032006 于 2007-3-30 07:58 PM 发表
如果可能,如能在WIN下直接写MBR更好



记得ibm的那个本来就支持在XP下写mbr的。
作者: 天风    时间: 2007-4-25 15:38
ACER的WINSTMBR就是在WIN下写的,但隐藏分区标签为PQSERVICE
作者: ww111222    时间: 2007-4-25 16:00
这就是 知识的价值
作者: 研究僧人    时间: 2007-4-25 19:57
真是强人。很想学下这个技术。可惜不会汇编啊。
作者: ww111222    时间: 2007-4-26 18:49
没有人出手吗?
作者: ww111222    时间: 2007-4-26 23:19
原帖由 ++++++ 于 2007-4-26 08:27 PM 发表
出500?!
你脑子进水了
自己学一下不行吗?
非要让别人弄?



兄弟,不要这样说, 要是我会, 还不自己搞了


    您 做吗? 我给您 600块
作者: chnhhwz    时间: 2007-4-27 03:26
楼上的有钱啊
可惜偶不会
作者: ymzsc    时间: 2007-4-27 13:02
500元?应该有人做,做出来分享不要钱就是我们的福气。:victory:
作者: secowu    时间: 2007-4-27 13:02
处男近来挂单了.........
作者: sangmei    时间: 2007-4-27 13:19
我出钱,表个态度。还不够字数;P
作者: whzzr    时间: 2007-4-27 15:18
你有钱给我,我给你做....用imageit就可以搞定了.
作者: tianzone    时间: 2007-4-27 17:54
原帖由 xsjlai88 于 2007-3-29 09:25 PM 发表
向收费说“不”!,应该向老毛桃,老九,葛明阳等大师学习,学习他们无私奉献的精神,楼上说的好:我为人人,人人为我,但我不反对自愿方式的捐助,但我们都还不富有呀……

说得好,还是楼上的话:有钱出钱,有力出力
作者: wwwzhx    时间: 2007-5-10 14:09
原帖由 whzzr 于 2007-4-27 03:18 PM 发表
你有钱给我,我给你做....用imageit就可以搞定了.

这个玩艺还是很难伺候的
作者: wwwzhx    时间: 2007-5-10 14:09
原帖由 whzzr 于 2007-4-27 03:18 PM 发表
你有钱给我,我给你做....用imageit就可以搞定了.

这个玩艺还是很难伺候的
作者: tiancai4126    时间: 2007-5-10 15:22
我晕这帖子也能回复7页?
作者: xueyingnt    时间: 2007-5-10 19:39
原帖由 zqlcchzql 于 2007-3-29 09:36 PM 发表
今天反汇编了IBM F11的代码,终于把F11的提示搞成彩色了。。。。。虽然比不上小弄的,但总比平时的黑夜白字强些,不知道大家需要否,还有一些小BUG,一两天应该能搞定。。

至于显示汉字,从理论上说只要调用 ...


顶啊,搞定了就传上来让大伙也用用
作者: lslzh    时间: 2007-8-6 19:07
发扬分享精神
作者: cxmzlxb    时间: 2007-8-6 20:54
成功了发上来分享给大伙用用,要是能提供源码或方法,那就更好了!
作者: longmarchdai    时间: 2008-1-23 23:08
为这个F11中文提示,我搞了好久了。
作者: longmarchdai    时间: 2008-1-23 23:09
为这个F11中文提示,我搞了好久了。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3