无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: 不点
打印 上一主题 下一主题

准备基于 fbinst 进行再开发,请各位提供帮助

    [复制链接]
61#
发表于 2013-12-31 12:59:39 | 只看该作者
本帖最后由 cchessbd 于 2013-12-31 13:21 编辑
jack95 发表于 2013-12-30 18:22
fbinst 核心代码读取文件件列表本身并不区分ansi或者utf-8,它是根据beyte对比,只有grldr或者查看文件列 ...


很有道理,可能不是fbinst的bug,而是grldr或memdisk的bug。
ud用fbinst强制格式化时选择备份好的fba(备份时fba为ansi菜单),fb菜单由grldr 还有memdisk来引导启动文件。
不过grldr(2013.07.24/2013.11.30都试了)和syslinux(4.03)的出错好像不是一样。

我需要重新确认下,会上传在ud文件列表格式为utf-8时出错的照片。
(手机拍到memdisk出错的了,但是grldr现在又不出错了,我很清楚记得以前出错提示文件大小为 204?Mb。
而且现在不能传到电脑上)
回复

使用道具 举报

62#
 楼主| 发表于 2013-12-31 14:43:06 | 只看该作者
cchessbd 兄,字符编码的事,与这里的讨论没有太大关系。我觉得没必要在这里讨论。您可以开个新的帖子来专门讨论。

我主要是担心,离题太远的话,将来不利于其他人(包括我自己)查看这里的有关 U 盘启动成功率的技术探讨话题。

我个人目前的打算,不再建立一个类似于 ud 的文件系统,因此,也就不存在编码问题了。

我主要只做一件事,那就是设法提高启动的成功率。只要能达到这个目的,我认为就满意了。

也就是说,我没打算建立一个文件系统。用户把文件放在 8M 以内,是以扇区的形式放进来的,只不过插入了一些 “物理扇区号” 的记录罢了。用户是怎么放进来,就怎么读出。不用建立一个特别的文件系统。至少我目前不考虑这个问题。既然没有文件系统,也就不存在文件名的字符编码问题了。

回复

使用道具 举报

63#
 楼主| 发表于 2013-12-31 15:37:12 | 只看该作者
又做了一个试验:用 FBinstTool 把 U 盘格式化成 FAT16,然后手动修改第一扇区的分区表,把可见分区的起始扇区 00 40 00 00 改成 3F 00 00 00,当然了,分区长度也做适当调整。然后也相应地调整扇区 63,让它的 BPB 是正确的。经过验证,这样改动后仍然可以成功启动,启动后 U 盘是 (hd0)。

接下来又做了一个测试:把第一扇区添加上 BPB。我原来以为这样启动就要死机,但实际试验时,却成功启动了。在一台联想电脑上,启动后 U 盘是 (fd0);在一台 DELL 机器上,启动后 U 盘是 (hd0)。

看到没有?微软的 XP 对 U 盘进行格式化,也是在第一扇区生成了 BPB。然而在联想的电脑上启动失败死机(DELL 机器没有测试此项功能)。而第一扇区含有分区表的类似结构(即,也含有 BPB),却可以在联想电脑上成功启动为 (fd0)。这暗示,即使是在 MBR 上的 BPB 表起作用的情况下,其上的分区表也仍然是有用的,比如说,主板有可能(事先)对分区表和 BPB 表都进行检查,这检查的过程,一旦遇到异常情况(例如,非法分区表),就会直接死机。

回复

使用道具 举报

64#
发表于 2013-12-31 20:59:42 | 只看该作者
测试反馈:
电脑thinkpad x61,用bootice写8M.mbr到U盘,bios认u盘为hdd,测试成功,屏幕显示:0080 3f60 3f60 aa55 aced
回复

使用道具 举报

65#
 楼主| 发表于 2013-12-31 22:22:28 | 只看该作者
本帖最后由 不点 于 2013-12-31 23:00 编辑

谢谢 jianliulin 的测试。你的成功,表明了代码本身不含错误。而我的测试失败,则表明没能从 BIOS 那里成功获得控制权。

只要有一例失败,那就是失败。必须与失败的逻辑进行周旋。最后我们的目标就是获得一个相对比较高的成功率。

根据目前的测试情况,我有另外一些想法,通报一下。

我打算 “全权” 管理这个 U 盘。什么意思呢?就是说,这个 U 盘就不要有别的用途了,它只用来启动。由于启动的复杂性,可能需要很变态地设计扇区数据结构,这样的话,就很难保证这个 U 盘的结构仍然能够当作普通 U 盘来存贮数据了。诚然,与启动相关的代码可能仅仅需要开头的若干 M 的空间。但是,由于 BPB 表以及分区表的结构可能需要进行 “变态” 的设计,所以,这就不一定能够当成普通的存储型 U 盘来使用了。用户很可能得采用 “直接扇区读写” 的方法来使用 U 盘上的剩余空间了。这是最坏的打算。如果情况不是特别糟糕,那还是可以保持普通的文件系统访问的。

另外,还有一个 “开源授权协议” 的选用问题。我初步打算采用 Public Domain (公共域)的形式。代码都是全新设计的,我不从别人那里拷贝代码。因此,我可以把代码的授权协议确定为 “公共域”。那些支持开发的协同工作者们,也得明白,代码是要放到 “公共域” 去了。万一有人不同意这样的授权协议,比如说,有人认为这样做吃亏了,那么,他就可以(根据自己的自由意愿)选择不支持本次开发。事先声明这一点,目的是保证支持者不会受到损失,因为这是早早提前声明的,而不是到了很晚才告知的。项目当中有可能内嵌 grldr 等别的软件,那些软件是各自独立的,不受 Public Domain 的控制或约束。

回复

使用道具 举报

66#
发表于 2014-1-1 15:25:35 | 只看该作者
看到大师的声明,赶快补习了一下知识:
    公有领域(英语:Public domain)是人类的一部分作品与一部分知识的总汇,可以包括文章、艺术品、音乐、科学理论、发明等等。对于领域内的知识财产,任何个人或团体都不具所有权益。这些知识发明属于公有文化遗产,任何人可以不受限制地使用和加工它们。
回复

使用道具 举报

67#
 楼主| 发表于 2014-1-1 15:35:38 | 只看该作者
本帖最后由 不点 于 2014-1-1 19:00 编辑

哎呀,真把我害惨了!原来我的测试是成功的!它只是没有显示出信息!

为什么没显示出来呢?那是因为处于图形模式!!直接文本写屏的方法,不适合于图形模式。教训!

要么更改成电传打字视频 BIOS 调用方式,要么先执行切换到 80x25 彩色文本模式。




于是改进了一下,花费了几个字节,增添了切换到 80x25 文本模式的代码。这就不会再黑屏了。

同样地,最后显示出 ACED 就表示 “成功”。

解释一下其他数字的含义:

第一个数字是 DX 寄存器的值,如果是 0000 就表示 U 盘是 “软盘”,如果是 0080 就表示 U 盘是 “硬盘”。

第二个数字表示接管控制的这个引导扇区的物理序列号。序列号如果是 3F60,则表示它就是最开头的扇区。如果是其他值,则表示不是最开头的扇区。每个扇区的物理序列号是按照降序安排的:最开头的扇区,序列号最大(3F60),后续的扇区,物理序列号逐步递降。扇区的物理序列号位于该扇区的偏移 0x0E 处,占用 2 个字节。

第三个数字表示逻辑 MBR 的物理序列号。它通常应该等于刚才所说的这个 “接管控制的引导扇区的物理序列号”。如果不相等,则表示主板有异常。

如果显示的数字中有 AA55 的字样,则表示主板支持 LBA。当主板支持 LBA 时,不进行 CHS 几何参数探测。

如果主板不支持 LBA,则接下来会显示探测到的 S 值,即,每道扇区数;然后显示探测到的 H 值,即,磁头数。

如果发生 BIOS 读盘失败,则会显示 CEDE,表示 “放弃”,然后进入死循环,等待用户按 Ctrl+Alt+Del。

如果一切顺利,最后会显示 ACED,表示 “很棒”,然后进入死循环,等待用户按 Ctrl+Alt+Del。

8M_2.rar

47.44 KB, 下载次数: 29, 下载积分: 无忧币 -2

改进了一下,仍然只是用来测试的

回复

使用道具 举报

68#
 楼主| 发表于 2014-1-1 21:05:23 | 只看该作者
把改进后的代码贴出来,供查看。

  1. .text

  2.         .code16

  3. start:
  4.         jmp        1f

  5.         . = start + 0x02

  6.         .byte        0x90

  7.         . = start + 0x03

  8.         .ascii        "MSWIN4.1"

  9.         . = start + 0x0B

  10.         .word        0x200

  11.         . = start + 0x0D

  12.         /* Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64 and 128.
  13.          * But a cluster size larger than 32K should not occur.
  14.          */

  15.         .byte        0x08        // sectors per cluster, should be changed by installer

  16.         . = start + 0x0E

  17.         .word        0x0020        // reserved sectors, should be changed by installer

  18.         . = start + 0x10

  19.         .byte        0x02        // number of FATs(nearly always 2)

  20.         . = start + 0x11

  21.         .word        0        // FAT12/16 root dir entries. Must be 0 for FAT32

  22.         . = start + 0x13

  23.         .word        0        // FAT12/16 total sectors. Must be 0 for FAT32

  24.         . = start + 0x15

  25.         .byte        0xF8        // media descriptor

  26.         . = start + 0x16

  27.         .word        0        // FAT12/16 sectors per FAT. Must be 0 for FAT32

  28.         . = start + 0x18

  29.         .word        0x3f        // sectors per track

  30.         . = start + 0x1A

  31.         .word        0xff        // number of heads

  32.         . = start + 0x1C

  33.         .long        0x3F        // hidden sectors, installer will change it

  34.         . = start + 0x20

  35.         .long        0x00FC0000        // total sectors, installer will change it

  36.         . = start + 0x24

  37.         /* 4-byte FAT32 sectors per FAT, installer will change it */

  38.         /* The byte at offset 0x026 in this entry should never become
  39.          * 0x28 or 0x29 in order to avoid any misinterpretation with the
  40.          * EBPB format under non-FAT32 aware operating systems.
  41.          */

  42.         .byte        0x00, 0x3F, 0x00, 0x00
  43.         //.byte        0x80, 0x00, 0x29, 0x00
  44.         //.long        0

  45.         . = start + 0x28

  46.         .word        0        // current active FAT, installer will change it

  47.         . = start + 0x2A

  48.         .word        0        // FAT32 revision number, installer will change it

  49.         . = start + 0x2C

  50.         .long        2        // root dir starting cluster, installer will change it

  51.         . = start + 0x30

  52.         .word        1        // file system information sector number
  53.                         // installer will change it

  54.         . = start + 0x32

  55.         .word        6        // boot record backup sector number
  56.                         // installer will change it

  57.         . = start + 0x34

  58.         .long        0        // reserved
  59.         .long        0        // reserved
  60.         .long        0        // reserved

  61.         . = start + 0x40

  62.         .byte        0x80        // drive number

  63.         . = start + 0x41

  64.         /* Windows NT use it for CHKDSK flags:
  65.          * Bits 7-2 always cleared;
  66.          * Bit 1: disk I/O errors encountered, possible bad sectors,
  67.                   run surface scan on next boot;
  68.          * Bit 0: volume is "dirty" and was not properly unmounted before
  69.                   shutdown, run CHKDSK on next boot.
  70.          */

  71.         .byte        0        // reserved, should be set to 0 by formating tools.

  72.         . = start + 0x42

  73.         /* Signature (must be 28h or 29h to be recognised by NT). */

  74.         .byte        0x29                // extended boot signature for FAT32

  75.         . = start + 0x43

  76.         /* Originally it was 4-byte volume serial number. */

  77.         /* hi word at offset 0x45 is used for serial number of sector 190 */

  78.         .word        0xAF63                // hour, minutes, seconds

  79.         .word        (0x21 + 126 + (255*63) - 190)        // installer will change it

  80.         . = start + 0x47

  81.         .ascii        "NO NAME    "        // volume label, 11 bytes

  82.         . = start + 0x52

  83.         .ascii        "FAT32   "        // filesystem ID, 8 bytes

  84.         . = start + 0x5A

  85.         .word        0        // reserved
  86.         .word        0        // reserved
  87.         .word        0        // reserved

  88.         . = start + 0x60

  89. 1:
  90.         xorw        %di, %di
  91.         movw        $0x7C00, %bp        /* constant BP=0x7C00 */

  92.         movw        %di, %ss        /* constant SS=0 */
  93.         movw        %bp, %sp

  94.         /* save DL first */
  95.         movb        %dl, 0x40(%bp)        /* assume BIOS pass correct drive number. */

  96.         /* Got control! */

  97.         movw        $0x0003, %ax        /* Must switch to 80x25 color text mode! */
  98.         pushaw
  99.         int        $0x10
  100.         popaw

  101.         movw        %di, %ds        /* constant DS=0 */

  102.         /* print DX */
  103.         xchgw        %ax, %dx        /* store DX into AX */
  104.         call        print_hex        # BX changed

  105.         /* print serial number of this sector */
  106.         movw        0x0E(%bp), %ax
  107.         call        print_hex        # BX changed

  108.         /* sleep 3 seconds */

  109.         sti                        /* enable interrupt for int8 timer */
  110.         movw        $55, %cx        /* 55 / 18.2 = 3 seconds */
  111. 2:
  112.         movw        0x46c, %ax        /* get new ticks */
  113.         cmpw        %ax, %bx        /* changed? */
  114.         je        2b                /* no, continue to wait */
  115.         /* ticks changed by int8 */
  116.         xchgw        %ax, %bx        /* update ticks */
  117.         loop        2b

  118.         /* CX=0 */

  119.         pushw        $0x0201        //---        /* BP-2 point to int13/AX: read 1 sector */

  120.         /* read C/H/S=0/0/1 to 0000:7E00 */
  121.         /* Generally, it is safe enough. */
  122.         xorw        %ax, %ax
  123.         movw        %ax, %es
  124.         movw        $0x7E00, %bx
  125.         pushw        %es        //---
  126.         pushw        %bx        //---        /* BP-6 point to 0x00007E00 on stack */
  127.         incw        %cx                /* read 1 sector */
  128.         call        readDisk        /* CX=1, DX=0 */

  129.         pushw        %cx                /* 1, no POP in LBA branch. See below. */
  130.         incw        %cx                /* CX=2 */
  131.         movw        %cx, 0x18(%bp)        /* interim sectors per track */
  132.         movw        %cx, 0x1a(%bp)        /* interim number of heads */
  133.         pushw        %cx                /* 2, no POP in LBA branch. See below. */

  134.         movw        0x0E(%bx), %si        # mbr0

  135.         /* print serial number of mbr0 */
  136.         movw        %si, %ax
  137.         call        print_hex        # BX changed

  138.         /* check LBA support */
  139.         /* This can also be considered safe. */
  140.         movb        $0x41, %ah
  141.         movw        $0x55AA, %bx
  142.         call        int13
  143.         jc        1f                /* no ebios */
  144.         cmpw        $0xAA55, %bx
  145.         jnz        1f                /* no ebios */
  146.         //testb        $1, %cl
  147.         //jz        1f
  148.         .byte        0xD0, 0xD9        # RCR CL,1; D0 C9  ROR CL,1 also OK
  149.         jnc        1f                /* no ebios */

  150.         movb        $0x42, -1(%bp)        /* LBA supported */

  151.         /* print "AA55" */
  152.         xchgw        %ax, %bx        /* store BX into AX */
  153.         call        print_hex        # BX changed

  154.         /* Keep the pushed 1 and 2 on stack without POPs. There is no harm. */
  155.         jmp        geometry_OK        /* ready to load GRLDR */       

  156. 1:

  157.         /* CHS mode. Must determine geometry. */

  158.         /* read C/H/S=0/1/1 to 0000:7E00 */
  159.         //movw        $2, %ax                /* AX=2, interim sectors per track */
  160.         popw        %ax                /* AX=2, interim sectors per track */
  161.         lesw        -6(%bp), %bx        /* ES:BX=0000:7E00 */
  162.         popw        %cx                /* CX=1, read 1 sector */
  163.         call        readDisk        # AX=3, CX=1, DX=0

  164.         movw        %si, %ax        # mbr0
  165.         subw        0x0E(%bx), %ax        /* real sectors per track */
  166.         jbe        boot_error        /* installation problem? */
  167.         cmpw        $63, %ax
  168.         ja        boot_error        /* installation problem? */

  169.         movw        %ax, 0x18(%bp)        /* update sectors per track! */

  170.         /* print real sectors per track */
  171.         call        print_hex        # BX changed

  172.         /* read C/H/S=1/0/1 to 0000:7E00 */
  173.         shlw        $1, %ax                /* AX=interim sectors per cylinder */
  174.         lesw        -6(%bp), %bx        /* ES:BX=0000:7E00 */
  175.         //movw        $1, %cx                /* read 1 sector */
  176.         call        readDisk        # AX=5, CX=1, DX=0

  177.         movw        %si, %ax        # mbr0
  178.         subw        0x0E(%bx), %ax        /* real sectors per cylinder */
  179.         jbe        boot_error        /* installation problem? */

  180.         /* DX=0 */
  181.         divw        0x18(%bp)        /* rem=DX, should be 0 */
  182.                                 /* quo=AX, number of heads */

  183.         /* if DX != 0, stop! */
  184.         testw        %dx, %dx
  185.         jnz        boot_error        /* installation problem? */

  186.         movw        %ax, 0x1A(%bp)        /* update number of heads! */

  187.         /* print real number of heads */
  188.         call        print_hex        # BX changed

  189.         testb        %ah, %ah
  190.         jnz        boot_error        /* installation problem? */

  191. geometry_OK:

  192.         /* read GRLDR to 0000:7E00 */
  193.         /* calculate grldr starting sector number */
  194.         /* grldr serial number = (0x21 + 126 + 255*63 - 190) */
  195.         xchgw        %ax, %si        # AX=mbr0
  196. #if 0
  197.         movw        $(0x21 + 126 + (255*63) - 190), %si
  198. #else
  199.         movw        0x45(%bp), %si
  200. #endif
  201.         subw        %si, %ax
  202.         jbe        boot_error        /* installation problem? */
  203.         lesw        -6(%bp), %bx        /* ES:BX=0000:7E00 */
  204.         movw        $1152, %cx        /* read 576K grldr */
  205.         call        readDisk        /* CX=1152, DX=0 */

  206.         cmpw        %si, 0x0E(%bx)
  207.         jne        boot_error        /* installation problem? */
  208. #if 0
  209.         /* We can do it later in the second stage. */
  210.         movb        0x40(%bp), %dl
  211.         movb        $0xFF, %dh
  212.         pushw        %dx
  213. #endif

  214. #if 1
  215.         movw        $0xACED, %ax        /* OK! passed. */
  216.         jmp        boot_error        /* Test succeeded. Halt. */
  217. #else
  218.         /* jump to stage 2 */
  219.         //ljmp        $0, $0x7E00
  220.         pushw        %ds                /* DS=0 */
  221.         pushw        %bx                /* BX=0x7E00 */
  222.         lret
  223. #endif

  224. int13_retry:
  225.         movw        $3, %di                /* try 3 times on failure */
  226. 2:
  227.         pushaw
  228.         call        int13
  229.         popaw
  230.         jc        1f
  231.         ret
  232. 1:
  233.         pushaw
  234.         cbw                        /* AH=0, reset disk */
  235.         call        int13
  236.         popaw
  237.         decw        %di
  238.         jnz        2b

  239. disk_error:
  240.         //movw        $0xDEAD, %ax
  241.         movw        $0xCEDE, %ax        # disk read error, give up
  242. boot_error:
  243.         call        print_hex        # BX changed
  244. 2:
  245.         jmp        2b

  246. /* Read sectors from disk, using LBA or CHS
  247. * input:        AX    = 16-bit LBA sector number
  248. *                CX    = number of sectors to read
  249. *                AX + CX <= 0x8000
  250. *                ES:BX = destination buffer
  251. *                SS    = DS
  252. *                BP-0x02 -> function call number for AX
  253. *                BP+0x18 -> sectors per track
  254. *                BP+0x1A -> number of heads
  255. *                BP+0x40 -> drive number
  256. *
  257. * output:        No return on error
  258. *                BX not changed
  259. *                CX not changed
  260. *                ES    = ES + 0x20 * CX
  261. *                AX    = AX + CX
  262. *                DX    = 0
  263. *                ZF    = 0
  264. *                CF    = 0
  265. */

  266. readDisk:
  267.         cwd                        /* DX=0 */
  268. 2:
  269.         pushaw
  270.         pushw        %dx                /* 0 */
  271.         pushw        %dx                /* 0 */
  272.         pushw        %dx                /* 0 */
  273.         pushw        %ax                /* lo 16bit of sector number */
  274.         pushw        %es                /* buffer segment */
  275.         pushw        %bx                /* buffer offset */
  276.         pushw        $1                /* 1 sector to read */
  277.         pushw        $16                /* size of this parameter block */

  278.         cmpb        $0x42, -1(%bp)        /* LBA supported */
  279.         je        1f                /* LBA mode */

  280.         /* CHS mode */
  281.         divw        0x18(%bp)        /* rem=DX */
  282.                                 /* quo=AX */
  283.                                 /* DH=0 */
  284.         incw        %dx                /* DL=sector number */
  285.         xchgw        %dx, %cx        /* CH=0, CL=sector number */

  286.         cwd                        /* DX=0 */
  287.         divw        0x1A(%bp)        /* rem=DX */
  288.                                 /* quo=AX, cylinder number */
  289.                                 /* DH=0, DL=head number */

  290.         xchgb        %dl, %dh        /* DL=0, DH=head number */
  291.         xchgb        %al, %ch        /* AL=0, CH=lo 8bit cylinder */
  292. #if 1
  293.         shrw        $2, %ax                /* hi 2bit cylinder ... */
  294.         orb        %al, %cl        /* ... should be in CL */
  295.         testb        %ah, %ah
  296. #else
  297.         /* equivalently, this should also work. */
  298.         rolw        $6, %ax                /* hi 2bit cylinder in AH */
  299.         orb        %ah, %cl        /* put into CL */
  300.         testb        %al, %al
  301. #endif
  302.         jnz        boot_error        /* Cylinder overflow! Stop misreading! */
  303. 1:
  304.         movw        -2(%bp), %ax        /* (E)BIOS read 1 sector */
  305.         movw        %sp, %si        /* DS:SI points to disk address packet */
  306.         //movb        0x40(%bp), %dl        /* drive number */
  307.         pushw        %es
  308.         call        int13_retry
  309.         popw        %bx
  310.         //jc        disk_error
  311.         leaw        0x20(%bx), %bx
  312.         movw        %bx, %es
  313.         popaw                        /* remove parameter block from stack */
  314.         popaw
  315.         incw         %ax                /* next sector, here ZF=0 */
  316.         loop        2b
  317.         ret

  318. //        . = . - (. - readDisk)/68


  319. int13:
  320.         pushw        %ds
  321.         pushw        %es
  322. //        pushw        %bx        /* int13/ah=41h use BX, so do not save. */
  323. //        pushw        %dx        /* drive number already saved in memory. */
  324.         pushw        %si
  325.         pushw        %di
  326.         pushw        %bp
  327.         stc
  328.         movb        0x40(%bp), %dl        /* drive number */
  329.         int        $0x13
  330.         sti
  331.         popw        %bp
  332.         popw        %di
  333.         popw        %si
  334. //        popw        %dx
  335. //        popw        %bx
  336.         popw        %es
  337.         popw        %ds
  338.         ret

  339. print_hex:
  340.         # input                AX = value to print
  341.         #                DI = video text offset
  342.         #
  343.         # output        ES = 0xB800
  344.         #                DF = 0
  345.         #                DI = changed
  346.         #                BX = changed
  347.         pushw        $0xB800
  348.         popw        %es                # text mode video memory

  349.         cld
  350.         pushw        %ax
  351.         pushw        %cx
  352.         pushw        %bx
  353.         movw        $4, %cx
  354.         xchgw        %ax, %bx
  355. 2:
  356.         rolw        $4, %bx
  357. #if 0
  358.         movw        %bx, %ax
  359.         andb        $0x0F, %al
  360.         cmpb        $10, %al
  361.         jb        1f
  362.         addb        $7, %al
  363. 1:
  364.         addb        $0x30, %al
  365.         movb        $0x9F, %ah        # back/fore ground=bright blue/white
  366. #else
  367.         /* this can save 2 bytes of code. */
  368.         movzbw        %bl, %ax        # AH=0
  369.         sahf                        # AF=0
  370.         aaa                        # AAA operation:
  371.                                 // { IF (((AL & 0x0F) > 9) || AF == 1)
  372.                                 //        { AL += 6; AH++ ; AF = CF = 1; }
  373.                                 //   ELSE
  374.                                 //        { AF = CF = 0; }
  375.                                 //   AL &= 0x0F; }
  376.         add        %ah, %al
  377.         .byte        0xD5, 0x10        # AAD imm8 operation:
  378.                                 // { AL += (AH * imm8); AH = 0; }
  379.         addw        $0x1F30, %ax        # back/fore ground=blue/bright white
  380. #endif
  381.         stosw
  382.         loop        2b
  383.         movb        $0x20, %al        # keep colors in AH untouched
  384.         stosw
  385.         popw        %bx
  386.         popw        %cx
  387.         popw        %ax
  388.         ret

  389.         . = start + 0x1B8

  390.         . = start + 0x1BE

  391.         .byte        0x80, 1, 1, 0, 0x0C, 0xFE, 0xFF, 0xFF
  392.         .byte        0x3F, 0, 0, 0, 0x00, 0x00, 0xFC, 0x00

  393.         . = start + 0x1FE

  394.         .word        0xAA55
复制代码

回复

使用道具 举报

69#
发表于 2014-1-2 19:54:56 | 只看该作者
测试标准,用最杂牌的硬件,在不同配置环境下测试。
测试反馈:
主板:ASUS M2N-e  GIGABYTE M52L-S3P   
U盘:SSK 8G(DM8261主控)
挂载硬盘/无硬盘测试
U盘作了量产清零处理,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,测试成功,屏幕显示:0080 3F60 3F60 AA55 ACED
回复

使用道具 举报

70#
发表于 2014-1-2 21:15:27 | 只看该作者
       
电脑型号        海尔 T68 Series 笔记本电脑
操作系统        Windows 7 旗舰版 32位 SP1 ( DirectX 11 )
       
处理器        英特尔 Pentium(奔腾) 双核 T2370 @ 1.73GHz 笔记本处理器
主板        海尔 T68 (英特尔 PM965/GM965/GL960/GS965 - ICH8M 笔记本芯片组)
内存        2 GB ( 威刚 DDR2 667MHz )
主硬盘        富士通 MHY2120BH ( 120 GB / 5400 转/分 )
显卡        Nvidia GeForce 8400M G ( 128 MB / 华硕 )
显示器        奇美 CMO1425 ( 14 英寸 )
光驱        东芝-三星 CDW/DVD TS-L462D 康宝
声卡        瑞昱 ALC660 @ 英特尔 82801H(ICH8) 高保真音频
网卡        瑞昱 RTL8168C(P)/8111C(P) PCI-E Gigabit Ethernet NIC / 华硕
测试反馈:
U盘:SSK 8G(DM8261主控)
挂载硬盘/无硬盘测试
U盘作了量产清零处理,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,测试成功,屏幕显示:0080 3F60 3F60 AA55 ACED
回复

使用道具 举报

71#
发表于 2014-1-3 10:15:01 | 只看该作者
本帖最后由 月光海洋 于 2014-1-3 10:22 编辑

                             电脑型号
                           NEC LL550/T 笔记本电脑
       
                  操作系统
                        Microsoft Windows 7 旗舰版 32-bit SP1
                处理器
                        Intel Mobile Core 2 Duo P8600 @ 2.40GHz       
                        Penryn 45nm 工艺
                内存
                        2.00 GB 双通道 DDR3 @ 533 兆赫 (7-7-7-20)
                主板
                        NEC AK3M2 (Socket P uFCPGA)       
                图形系统
                        通用即插即用监视器 (1280x800@60Hz)
                        Mobile Intel 4 Series Express Chipset Family
                        Mobile Intel 4 Series Express Chipset Family
                硬盘
                        298 GB ATA FUJITSU MHZ2320B SCSI Disk Device (SATA)       
                        Ricoh Memory Stick Disk Device (IDE)
                光驱
                        HL-DT-ST DVDRAM_GSA-T50N SCSI CdRom Device
                音频
                        Realtek High Definition Audio
测试反馈:
U盘:台电乐威 8G(DM8261主控)
用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,测试结果,屏幕显示:0080 3F60 3F60 AA55 053E


是不是我操作有误!菜鸟参与测试请指点。。。。
回复

使用道具 举报

72#
发表于 2014-1-3 10:19:19 | 只看该作者
本帖最后由 天使的魔翼 于 2014-1-3 10:22 编辑

今天空闲时间连续测试了几台联想电脑,发现都能正常读取U盘信息,并屏显信息。是不是联想支持好一些?
测试反馈:
U盘:SSK 8G(DM8261主控)
挂载硬盘/无硬盘测试
U盘作了量产清零处理,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,测试成功,屏幕显示:0080 3F60 3F60 AA55 ACED




电脑型号        联想 启天M7150 台式电脑
操作系统        Windows 7 旗舰版 32位 SP1 ( DirectX 11 )       
处理器        英特尔 Pentium(奔腾) 双核 E6500 @ 2.93GHz
主板        联想主板 (英特尔 4 Series 芯片组 - ICH7)
内存        1 GB ( 尔必达 DDR3 1067MHz )
       
电脑型号        联想 Product 台式电脑
操作系统        Windows 7 旗舰版 32位 SP1 ( DirectX 11 )
处理器        英特尔 Pentium(奔腾) G630 @ 2.70GHz 双核
主板        联想主板 (英特尔 H61 芯片组)
内存        4 GB ( 记忆科技 DDR3 1333MHz )

电脑型号        联想  台式电脑
操作系统        Windows XP 专业版 32位 SP3 ( DirectX 9.0c )       
处理器        英特尔 Pentium(奔腾) 双核 E2200 @ 2.20GHz
主板        联想主板 (英特尔 P35/G33/G31/P31 Express - ICH7 DH)
内存        2 GB ( 圣创雷克 DDR2 667MHz )

电脑型号        联想 ThinkCentre 7339AL2 台式电脑
操作系统        Windows XP 专业版 32位 SP3 ( DirectX 9.0c )       
处理器        AMD Athlon(速龙) 64 X2 双核 4400+
主板        联想 1.0 (ATI RS690)
内存        1 GB ( 记忆科技 DDR2 800MHz )
回复

使用道具 举报

73#
发表于 2014-1-3 10:21:35 | 只看该作者
以上都是原装系统,硬件未改动过。对另一台品牌电脑进行测试:
U盘:SSK 8G(DM8261主控)
挂载硬盘/无硬盘测试
U盘作了量产清零处理,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,测试成功,屏幕显示:0080 3F60 3F60 AA55 ACED

测试环境:

电脑型号        方正 Founder PC 台式电脑
操作系统        Windows XP 专业版 32位 SP2 ( DirectX 9.0c )       
处理器        AMD Athlon(速龙) II X4 645 四核
主板        富士康 M61PMP-K (Nvidia nForce 430(MCP61))
内存        2 GB ( 金士顿 DDR3 1333MHz )
回复

使用道具 举报

74#
发表于 2014-1-3 10:28:53 | 只看该作者
月光海洋 发表于 2014-1-3 10:15
电脑型号
                           NEC LL550/T 笔记本电脑
       

你的测试前面好像是正确显示了,只是最后的“053E”有问题,这个原因要不点大师来解答,我只不过是协助测试,提供测试环境。
建议你换个U盘试试,我使用DM8261主控的U盘是个废盘,玩坏了也没有什么,我在准备测试之前量产重置过的。

解释一下其他数字的含义:
第一个数字是 DX 寄存器的值,如果是 0000 就表示 U 盘是 “软盘”,如果是 0080 就表示 U 盘是 “硬盘”。
第二个数字表示接管控制的这个引导扇区的物理序列号。序列号如果是 3F60,则表示它就是最开头的扇区。如果是其他值,则表示不是最开头的扇区。每个扇区的物理序列号是按照降序安排的:最开头的扇区,序列号最大(3F60),后续的扇区,物理序列号逐步递降。扇区的物理序列号位于该扇区的偏移 0x0E 处,占用 2 个字节。

第三个数字表示逻辑 MBR 的物理序列号。它通常应该等于刚才所说的这个 “接管控制的引导扇区的物理序列号”。如果不相等,则表示主板有异常。
如果显示的数字中有 AA55 的字样,则表示主板支持 LBA。当主板支持 LBA 时,不进行 CHS 几何参数探测。
如果主板不支持 LBA,则接下来会显示探测到的 S 值,即,每道扇区数;然后显示探测到的 H 值,即,磁头数。

如果发生 BIOS 读盘失败,则会显示 CEDE,表示 “放弃”,然后进入死循环,等待用户按 Ctrl+Alt+Del。

如果一切顺利,最后会显示 ACED,表示 “很棒”,然后进入死循环,等待用户按 Ctrl+Alt+Del。

点评

我没量产过,兄台有量产工具跟教程吗?我看你那个主控和我的一样,这个盘我也是拿来测试的,坏了就不管他。。。  详情 回复 发表于 2014-1-3 10:42
回复

使用道具 举报

75#
发表于 2014-1-3 10:33:46 | 只看该作者
今天工作不忙,抽空把华硕大部分主板测试了一遍,5个人同时手动,一小时搞定,真很累啊。
U盘:SSK 8G(DM8261主控)
挂载硬盘/无硬盘测试
U盘作了量产清零处理,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,测试成功,屏幕显示:0080 3F60 3F60 AA55 ACED

测试环境:
华硕  Z87系列B75系列B85系列Z77系列H61系列A85X系列970系列760G系列FM2A55系列X79系列FM2+A88X系列990X系列H77系列H81系列990FX系列H87系列FM2+A55系列
回复

使用道具 举报

76#
发表于 2014-1-3 10:42:51 | 只看该作者
天使的魔翼 发表于 2014-1-3 10:28
你的测试前面好像是正确显示了,只是最后的“053E”有问题,这个原因要不点大师来解答,我只不过是协助测 ...

我没量产过,兄台有量产工具跟教程吗?我看你那个主控和我的一样,这个盘我也是拿来测试的,坏了就不管他。。。
回复

使用道具 举报

77#
发表于 2014-1-3 11:27:10 | 只看该作者
虚拟机测试显示 0080 3f60 3f60 aa55 aced ,算不算成功?
回复

使用道具 举报

78#
发表于 2014-1-3 12:29:14 | 只看该作者
本帖最后由 mygamexxx 于 2014-1-3 12:30 编辑

128M的SD卡用两个不同的读卡器,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,
联想台式机
测试成功,屏幕显示:0080 3F60 3F60 AA55 ACED

明基笔记本(需要一次读一个扇区的明基笔记本)
测试成功,屏幕显示:0000 3F60 3F60 AA55 ACED
不过字符出现过程比联想台式机稍慢
回复

使用道具 举报

79#
发表于 2014-1-3 12:32:47 | 只看该作者
很久没来论坛了,听J大他们说,不点您再进一步开发fbinst,我估计是底层的东西,我也许帮不上什么忙。
上次我和J大还有群里的几个网友发现fbinst一个重大的bug,在Chenall修改的版本里面,可能没有修正这个BUG,
虽然这个不是底层的内容,但我想还是有必要修正一下,下面是修正后的部分代码:

  1. int
  2. check_space (uchar4 *start, uchar4 size, uchar4 *count,
  3.              uchar4 begin, uchar4 end, int is_ext)
  4. {
  5.     /* 下面一段代码比较难看懂,拆分一下:
  6.         1、begin >= fb_pri_size,就是begin在扩展区的时候,其实只有一种情况:
  7.            不管is_ext = 0 还是 1,都只能在扩展区判断空间大小,这个时候,如果
  8.             (end - begin >= *count) 也就是说,碎片的空间(或者尾部空间)大于
  9.             等于文件大小,就满足存放条件。
  10.         2、如果(end <= fb_pri_size),也就是说,最后一个文件在主分区,这个时候如果
  11.            is_ext = 0 并且 (end - begin >= *count),也就是说主分区内有大于等于
  12.            该文件大小的空间,就分配给他。如果没有返回失败信息 0 ,以便循环继续执行。
  13.         3、如果在碎片中找不到适合的空间,那么这个时候begin等于最后一个文件的下一个位置,
  14.            end等于ud区的总大小,这个时候分两种情况:
  15.            1)begin在主分区,再如果指定导入主分区,主分区 - begin 的空间可以容纳文件,满足条件,
  16.               *start = begin;  如果指定导入扩展区后主分区导入失败,这个时候整个扩展区是空的,
  17.               且大小可以容纳文件,就从扩展区开始的地方写入该文件,*start = fb_pri_size;
  18.            2)begin在扩展区,begin >= fb_pri_size,如果扩展区剩余的空间满足要求,就分配空间,
  19.               (end - begin >= *count),*start = begin;       
  20.    
  21.         BUG分析:如果 begin >= fb_pri_size ,就是说begin已经在扩展区了,而这个时候
  22.                 count = (size + 509) / 510 ,count的值一般情况下是大于真实值的,应该改为
  23.                 *count = (size + 511) >> 9;        再进行 (end - begin) 和 *count 的对比.
  24.                 否则造成,刚删除的文件,再导入,不会占用原来的位置,而是占用更大的位置或者
  25.                 排到最后。
  26.                
  27.        plantsoot @ 2012-1-31   
  28.     */
  29.    
  30.         if (begin >= fb_pri_size) // 修复bug语句,2012-2-1
  31.         {
  32.                 *count = (size + 511) >> 9;
  33.         }                                                  // 修复bug结束
  34.     if ((begin >= fb_pri_size) || (end <= fb_pri_size))        // 如果开始扇区在扩展区,或者end在主分区
  35.     {
  36.                 // 如果 开始扇区位于扩展区或者未指定导入扩展区,并且空闲区域大于等于文件大小
  37.         if (((begin >= fb_pri_size) || (! is_ext)) && (end - begin >= *count))
  38.         {
  39.             *start = begin;        // 那么可以存放文件,返回该空闲空间的起始扇区
  40.             return 1;
  41.         }
  42.     }
  43.     else //((begin < fb_pri_size) and (end > fb_pri_size))
  44.     {        /* 如果未指定导入到扩展区,并且begin在主分区内,当前文件的起始扇区在扩展区
  45.                  * 这个时候不能按  end - begin >= *count 来算,为什么呢?因为文件存放不可以跨区,
  46.                  * 要么主分区,要么扩展区。如果主分区剩余的空间大于等于文件大小,begin位置赋值给start */
  47.         if ((! is_ext) && (fb_pri_size - begin >= *count))
  48.         {
  49.             *start = begin;
  50.             return 1;
  51.         }
  52.                
  53.                 //如果指定了扩展区,begin在主分区内,当前文件的起始扇区在扩展区
  54.         *count = (size + 511) >> 9;                        // 扩展区扇区有效大小是512字节
  55.         if (end - fb_pri_size >= *count)        // 扩展区第一个文件和主分区之间如果有足够大的空间       
  56.         {
  57.             *start = fb_pri_size;
  58.             return 1;
  59.         }
  60.     }

  61.     return 0;
  62. }
复制代码


注释写的不是很严谨,见谅。
回复

使用道具 举报

80#
发表于 2014-1-3 12:42:16 | 只看该作者
cchessbd 发表于 2013-12-29 09:00
关于ud的文件列表,我希望默认采用ANSI格式,而不是UTF-8。
因为用jianliulian的fbinstool回写fba到u盘时 ...

更换下你的fbinst版本,可以用fbinst修正版,也可以用不才的 fbinst plus。
回复

使用道具 举报

81#
发表于 2014-1-3 12:44:40 | 只看该作者
本帖最后由 月光海洋 于 2014-1-3 13:24 编辑

268M的SD卡用川宇的读卡器,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,
杂牌组装台式机
测试不成功,屏幕显示:CEDE 3F60 3F60

268M的SD卡用川宇的读卡器,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,
NEC笔记本
测试结果,屏幕显示:0000 3F60 3F60  AA55 053E



回复

使用道具 举报

82#
 楼主| 发表于 2014-1-3 16:09:56 | 只看该作者
本帖最后由 不点 于 2014-1-15 20:09 编辑

鸟枪换炮,又一个测试版来了。这次是 24M 的,带有 FAT32 分区,用户自己可以在 Windows 资源管理器里面向 U 盘添加 menu.lst 文件。测试期间,最好不要添加别的文件,即不要增加复杂度。【注意:千万不要对这个 U 盘进行格式化操作!格式化的动作,会抹掉我们的测试代码!】

克隆到 U 盘时,要保证 “原封不动”。不要更改任何字节。克隆软件如果提示你保留 U 盘原来的分区表或 BPB,都不要让它保留,而应该直接用我们的映像文件去覆盖。60M 的 U 盘是可以测试的,我已经测试过了。U 盘越大越好。小容量的 U 盘,就没有必要去支持了。所以,请至少使用 60M 容量的 U 盘来测试。

注意,这个版本已经写好了第二阶段的扇区,并且也嵌入了一个第三阶段的 grldr 文件。如果正常,您可以启动到 grub4dos 环境。内置菜单添加了必要的 geometry --lba1sector 命令,用来强制单扇区访问,防止启动时死机。

用户在自己的外部 menu.lst 中可以添加 geometry --lba127sector 命令,来加快 U 盘访问速度。


测试的详细说明:

第一阶段成功之后,不再打印 ACED 标志,而是直接进入第二阶段的程序。

在第二阶段中,您看到 Repeatedly press P to pause... 的信息时,赶快按 P 键,并且连续按(也可以按住不放手),这样可以让程序暂停,以便您能看清屏幕显示的内容。一旦停止按 P 键,grldr 很快就会启动。grldr 就属于 “第三阶段” 了。


请从头至尾看完所有的帖子,了解安装使用的方法、安装时存在的危险,以及屏幕显示信息的解释,等等。小米的路由器是拆开的,需要用户自己组装。我们这个启动工具,目前连名字都没有,也是发烧中的发烧。您能找到这里,是缘分;如果找不到这里,也就不用冒着很大风险来测试这个启动工具了。鼓励但不鼓动;自愿而不强迫。我觉得不适合把测试文件的下载放在 “一楼”,因为 “一楼” 放不下所有这些说明信息,也不能反映发展变化的过程。只有这样,原汁原味,才给人以真实的参与感,而不是经过美化了的 “海市蜃楼” 一样的感觉。一切都在您的掌控之中,您也是脚踏实地的,您是一步一步弄清楚的,这样您就不至于有 “虚无缥缈” 的感觉。希望大家都玩得痛——并快乐着。


附件 24M.img 已于 2014 年 1 月 5 日更新,请重新下载测试。
附件 24M.img 已于 2014 年 1 月 14 日更名为 mbr_24M.img,并修正了内嵌 GRLDR 的一个 bug,请重新下载测试。
2014 年 1 月 15 日更新:再次修复 GRLDR,请测试。


mbr_24M.7z

150 KB, 下载次数: 100, 下载积分: 无忧币 -2

全功能的测试版,轻松愉快地做测试

回复

使用道具 举报

83#
发表于 2014-1-3 17:21:30 | 只看该作者
本帖最后由 月光海洋 于 2014-1-3 19:16 编辑

                  电脑型号
                           NEC LL550/T 笔记本电脑
       
                  操作系统
                        Microsoft Windows 7 旗舰版 32-bit SP1
                处理器
                        Intel Mobile Core 2 Duo P8600 @ 2.40GHz       
                        Penryn 45nm 工艺
                内存
                        2.00 GB 双通道 DDR3 @ 533 兆赫 (7-7-7-20)
                主板
                        NEC AK3M2 (Socket P uFCPGA)       
                图形系统
                        通用即插即用监视器 (1280x800@60Hz)
                        Mobile Intel 4 Series Express Chipset Family
                        Mobile Intel 4 Series Express Chipset Family
                硬盘
                        298 GB ATA FUJITSU MHZ2320B SCSI Disk Device (SATA)       
                        Ricoh Memory Stick Disk Device (IDE)
                光驱
                        HL-DT-ST DVDRAM_GSA-T50N SCSI CdRom Device
                音频
                        Realtek High Definition Audio
测试反馈:
U盘:台电乐威 8G(DM8261主控)
用BOOTICE-扇区编辑-从文件恢复扇区,写入24M.img到U盘,测试成功,屏幕显示:0080 3F60 3F60 AA55 然后顺利进入GRLDR
268M的SD卡用川宇的读卡器
用BOOTICE-扇区编辑-从文件恢复扇区,写入24M.img到SD卡,测试成功,屏幕显示:0000 3F60 3F60 AA55 然后顺利进入GRLDR
回复

使用道具 举报

84#
发表于 2014-1-3 17:24:57 | 只看该作者
本帖最后由 月光海洋 于 2014-1-3 19:15 编辑

                  电脑型号
                           台式组装电脑
                操作系统
                        Microsoft Windows XP Professional 32-bit SP3
                处理器
                        Intel Celeron 430 @ 1.80GHz       
                        Conroe-L 65nm 工艺
                内存
                        2.00 GB 单通道 DDR3 @ 402 兆赫 (6-6-6-15)
                主板
                        BIOSTAR Group G41D3+ (CPU 1)       
                图形系统
                        MAYA V-151 (1024x768@75Hz)
                        Intel G41 Express Chipset
                硬盘
                        298 GB Western Digital WDC WD3200AAKX-001CA0 (SATA)       
                光驱
                        SONY DVD-ROM DDU1681S
                音频
                        Intel High Definition Audio HDMI Service
测试反馈:
U盘:台电乐威 8G(DM8261主控)
用BOOTICE-扇区编辑-从文件恢复扇区,写入24M.img到U盘,测试成功,屏幕显示:0080 3F60 3F60 AA55 然后顺利进入GRLDR
268M的SD卡用川宇的读卡器
用BOOTICE-扇区编辑-从文件恢复扇区,写入24M.img到SD卡,测试不成功,屏幕显示:0000 3F21 3F21  然后就卡在这里,按Ctrl+Alt+Del不能重启,只能热启
回复

使用道具 举报

85#
 楼主| 发表于 2014-1-3 19:16:03 | 只看该作者
回复 月光海洋:

写入8M_2.img到U盘,测试结果,屏幕显示:0080 3F60 3F60 AA55 053E


这个测试基本是成功的,出了一点小问题。最后读位于 190 处的 1152 个扇区,读出来后,发现其扇区序列号不正确。说明你的安装过程出问题了,你没有把全部的扇区都写入 U 盘,造成扇区序列号错误。


回复

使用道具 举报

86#
发表于 2014-1-3 19:18:32 | 只看该作者
不点 发表于 2014-1-3 19:16
回复 月光海洋:

是的,我是从63扇区开始写入的,所以出现那样的错误,
回复

使用道具 举报

87#
发表于 2014-1-3 19:21:17 | 只看该作者
本帖最后由 月光海洋 于 2014-1-3 19:22 编辑

                电脑型号
                        台式组装电脑
                操作系统
                        Microsoft Windows XP Professional 32-bit SP3
                处理器
                        Intel Pentium @ 2.80GHz       
                        Ivy Bridge 22nm 工艺
                内存
                        4.00 GB 单通道 DDR3 @ 665 兆赫 (10-10-10-24)
                主板
                        ECS H61H2-MV (SOCKET 0)       
                图形系统
                        MD195W (1366x768@60Hz)
                        Intel HD Graphics
                硬盘
                        466 GB Western Digital WDC WD5000AAKX-08ERMA0 (SATA)       
                光驱
                        没有检测到光盘驱动器
                音频
                        Realtek High Definition Audio
测试反馈:
U盘:台电乐威 8G(DM8261主控)
用BOOTICE-扇区编辑-从文件恢复扇区,写入24M.img到U盘,测试成功,屏幕显示:0080 3F60 3F60 AA55 然后顺利进入GRLDR
268M的SD卡用川宇的读卡器
用BOOTICE-扇区编辑-从文件恢复扇区,写入24M.img到SD卡,测试成功,屏幕显示:0000 3F21 3F21AA55 然后顺利进入GRLDR
回复

使用道具 举报

88#
发表于 2014-1-3 19:37:30 | 只看该作者
                操作系统
                        Microsoft Windows XP Professional 32-bit SP3
                处理器
                        AMD Sempron X2 180       
                        Regor 45nm 工艺
                内存
                        1.00 GB 单通道 DDR3 @ 535 兆赫 (7-7-7-20)
                主板
                        To be filled by O.E.M. To be filled by O.E.M. (CPU 1)       
                图形系统
                        LCD919 (1280x800@60Hz)
                        128 MBGeForce 6150SE nForce 430 (nVidia)
                硬盘
                        75 GB Maxtor 6 V080E0 SCSI Disk Device (ATA)       
                光驱
                        没有检测到光盘驱动器
                音频
                        VIA High Definition Audio
测试反馈:
U盘:台电乐威 8G(DM8261主控)
用BOOTICE-扇区编辑-从文件恢复扇区,写入24M.img到U盘,测试成功,屏幕显示:0080 3F60 3F60 AA55 然后顺利进入GRLDR
268M的SD卡用川宇的读卡器
用BOOTICE-扇区编辑-从文件恢复扇区,写入24M.img到SD卡,测试不成功,屏幕显示:0000 3F21 3F21  然后就卡在这里,按Ctrl+Alt+Del不能重启,只能热启
回复

使用道具 举报

89#
 楼主| 发表于 2014-1-3 19:51:52 | 只看该作者
谢谢 百草霜 提供的 fbinst 代码补丁。我相信其他 fbinst 开发者看了之后,也会注意修正代码的。

由于目前我已经决定全新开发,所以,我不用太过于关注 fbinst 的代码了。我只需要侧重于了解 fbinst 在实际应用中的表现,作为一个对比资料即可。
回复

使用道具 举报

90#
 楼主| 发表于 2014-1-3 20:13:52 | 只看该作者
268M的SD卡用川宇的读卡器,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,
杂牌组装台式机
测试不成功,屏幕显示:CEDE 3F60 3F60

268M的SD卡用川宇的读卡器,用BOOTICE-扇区编辑-从文件恢复扇区,写入8M_2.img到U盘,
NEC笔记本
测试结果,屏幕显示:0000 3F60 3F60  AA55 053E


你的诸多此类失败测试,可能都属于写错位置了。你没能写到物理扇区最开头,而是从中间某个地方(例如从偏移 63 处)开始写。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-26 07:32

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表