liuhuan22 发表于 2016-11-3 23:36:46

grub4dos 046a 如何设置变量为软盘(fd0)的大小?

geometry (fd0)命令可以得到软盘的总扇区数和扇区大小,请问 如何存为变量?

liuhuan22 发表于 2016-11-3 23:39:58

有知道的大神吗?

chenall 发表于 2016-11-4 08:45:39

印像中cat命令可以获取某个分区或磁盘的总扇区数的,扇区大小都是512

不知 发表于 2016-11-4 11:41:46

本帖最后由 不知 于 2016-11-4 11:43 编辑

用了一种特别麻烦的方式,实现了字符串的提取。主要是cat --locate=String 命令不知怎么计算的(也有可能是我用的版本有问题),有时直接数的和命令运行结果不一样,有时又一样,重复多次才能得到正确的结果。

得到字符串后,用calc命令得到对应的数,如
得到size: calc %size%
得到count : calc %count%*%size%

应该有直接的方法,只是cat的问题没法直接复制。

getifo内容:

!BAT
set device=%1
if ""=="%device%" goto help

geometry %device%> (md)0x80000+1
cat --locate=drive --replace=@@@@@@@@@@ (md)0x80000+1
cat --locate=: --replace=@@@@@@@@ (md)0x80000+1
cat --locate=, --replace=@@@@@@@@@@@@@@@@@@@ (md)0x80000+1

cat --locate== (md)0x80000+1 | set skip=
dd if=(md)0x80000+1 of=(md)0x80000+1 bs=1 skip=%skip%



cat --locate== (md)0x80000+1 | set skip=
dd if=(md)0x80000+1 of=(md)0x80000+1 bs=1 skip=%skip%



cat --locate== (md)0x80000+1 | set skip=
dd if=(md)0x80000+1 of=(md)0x80000+1 bs=1 skip=%skip%



cat --locate== (md)0x80000+1 | set skip=
dd if=(md)0x80000+1 of=(md)0x80000+1 bs=1 skip=%skip%
dd if=(md)0x80000+1 of=(md)0x80000+1 bs=1 skip=1



cat --locate=/ (md)0x80000+1 | set skip=
dd if=(md)0x80000+1 of=(md)0x80001+1 bs=1 skip=%skip%
dd if=(md)0x80001+1 of=(md)0x80001+1 bs=1 skip=1


cat (md)0x80000+1
cat (md)0x80001+1

cat (md)0x80000+1 | set count=
cat (md)0x80001+1 | set size=

echo Sector Count=%count%
echo Sector Size=%size%
















goto eof


:help
echo getifo device
echo such as getifo (fd0)


:eof

liuhuan22 发表于 2016-11-4 12:19:55

chenall 发表于 2016-11-4 08:45
印像中cat命令可以获取某个分区或磁盘的总扇区数的,扇区大小都是512

cat--length=0(fd0)-1


这个命令不行的

liuhuan22 发表于 2016-11-4 12:19:55

chenall 发表于 2016-11-4 08:45
印像中cat命令可以获取某个分区或磁盘的总扇区数的,扇区大小都是512

cat--length=0(fd0)-1


这个命令不行的

不知 发表于 2016-11-4 13:35:45

liuhuan22 发表于 2016-11-4 12:19
cat--length=0(fd0)-1




我也是在查cat的帮助,有一个定位字符串的功能,但是有时和预期的(自己数)不一样

chenall 发表于 2016-11-4 13:47:22

印像中是有的,
可以试试以下命令看看区别,具体的好久我也忘了^_^
root (fd0)
cat --length=0 ()+1
cat --length=0 ()-1

另外如果(fd0)不大的话可以用rd设备
map (fd0) (rd)
这样就可以通过rd-base和rd-size得到想要的结果。
关于rdbase和rdsize自己看一下readme,有具体的介绍。

liuhuan22 发表于 2016-11-4 15:02:45

chenall 发表于 2016-11-4 13:47
印像中是有的,
可以试试以下命令看看区别,具体的好久我也忘了^_^
root (fd0)


谢谢,不过我不敢这么写代码,稳定性不好说

不知 发表于 2016-11-4 15:20:19

本帖最后由 不知 于 2016-11-4 15:25 编辑



确实,这只是试验而已,若有内存盘就不好说了。位置最好去查一下G4D说明,最主要是G4D没有好用的字符串处理命令。

不点 发表于 2016-11-4 18:03:23

说说我的看法,说错了莫怪。

软盘这玩意,那可是不敢随便乱碰的,你碰它,就可能死机。记不记得?我们的 find 命令还得添上 --ignore-floppies 才敢用。为什么呢?不敢碰软盘啊!在那些 buggy 的电脑上,你一碰软盘,就死机了。就是说,不敢以任何方式去访问软盘、查看软盘;一碰它,就遭殃!

以上说的是 ROM BIOS 提供的软盘是不敢乱碰的。如果是 grub4dos 创建的虚拟软盘,那是可以碰的,不会有问题。然而,你的虚拟软盘在你创建它的时候,就知道它的大小了,你那时候早早记住它的大小不就 OK 了吗?根本不需要什么复杂的命令啊。


liuhuan22 发表于 2016-11-5 10:44:38

不点 发表于 2016-11-4 18:03
说说我的看法,说错了莫怪。

软盘这玩意,那可是不敢随便乱碰的,你碰它,就可能死机。记不记得?我们的 ...

f6img 创建的软盘,不知道多大。。。。。。

不点 发表于 2016-11-5 13:34:10

liuhuan22 发表于 2016-11-5 10:44
f6img 创建的软盘,不知道多大。。。。。。

在 windows 上,鼠标指向这个 img 文件,点击右键,弹出菜单,再点击“属性”,即可看到它的大小了。

liuhuan22 发表于 2016-11-5 18:17:02

不点 发表于 2016-11-5 13:34
在 windows 上,鼠标指向这个 img 文件,点击右键,弹出菜单,再点击“属性”,即可看到它的大小了。

忘记进系统的方法了,谢谢大师提醒

liuhuan22 发表于 2016-11-6 15:23:53

C:\>r:\ddif=\\.\A:   of=z:\a.img
rawwrite dd for windows version 0.6beta3.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by terms of the GPL Version 2.

2880+0 records in
2880+0 records out

C:\>r:\dd.exeif=\\.\b:   of=z:\b.img
rawwrite dd for windows version 0.6beta3.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by terms of the GPL Version 2.

2880+0 records in
2880+0 records out

C:\>sc qc firadisk
QueryServiceConfig 成功

SERVICE_NAME: firadisk
      TYPE               : 1KERNEL_DRIVER
      START_TYPE         : 0   BOOT_START
      ERROR_CONTROL      : 1   NORMAL
      BINARY_PATH_NAME   : \SystemRoot\system32\DRIVERS\firadisk.sys
      LOAD_ORDER_GROUP   : Boot Bus Extender
      TAG                : 8
      DISPLAY_NAME       : FiraDisk Driver
      DEPENDENCIES       :
      SERVICE_START_NAME :

C:\>

liuhuan22 发表于 2016-11-8 16:56:57

map --mem /t.img (0)        
map --hook
       
read 0x8320
得到0x168000就是1440kb大小
页: [1]
查看完整版本: grub4dos 046a 如何设置变量为软盘(fd0)的大小?