问题标签 [floppy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
439 浏览

linux - 从软盘 FLOPPY 启动的 bochs:软盘映像上的 read() 返回 0

我最近在学习操作系统,但我无法让引导加载程序工作

bochsrc.软盘:

然后是两个asm文件,boot.asm和loader.asm

运行.sh:

执行 cp 命令时:

最后,bochs Booting from 0000:7c00 [FLOPPY] read() on floppy image 中的这个错误返回 0

有人可以向我解释什么是错的吗?

0 投票
1 回答
2161 浏览

hardware - 你读/写软盘的速度有多快,包括 3 1/4 和 5 1/2?

有谁知道/记得软盘的实际读/写速度?我想以此作为一个花絮来争论我们的 Sharepoint 服务器有多慢,但是所有提供有关磁盘信息的网站似乎都没有它们工作的实际速度。

0 投票
1 回答
411 浏览

operating-system - 操作系统开发。从文件创建可引导的 iso。

我正在研究 OS 开发,我使用了 brokenthorn 资源,但使用了一些不同的工具,即我使用 CentOS、NASM 和 Qemu 作为测试/开发环境。在使用辅助加载器创建可引导的 img 文件时,我遇到了一些问题。

我有两个文件: 1. bootloader.bin 这是第一阶段的加载器。2. stage2.bin 是二级加载器。

为了创建可引导的 img 文件,我执行以下操作:

  • dd if=/dev/zero of=floppy.iso bs=1024 count=1440 -- 创建空文件
  • mkfs.vfat -F 12 floppy.iso --在文件中创建文件系统
  • dd if=../bin/bootloader.bin of=floppy.iso bs=512 count=1 conv=notrunc --将第一个加载程序写入引导扇区
  • sudo mount -o loop floppy.iso /mnt/floppy/ -- 尝试使用先前创建的 FAT-12 文件系统挂载文件系统以编写辅助加载程序。

在最后一步中,我收到以下错误:

您能否帮助我了解我做错了什么以及我可以使用哪些其他方法来完成创建带有文件系统的可启动 img。谢谢!

0 投票
1 回答
204 浏览

x86 - 读取比 int 13h 磁道上更多的扇区

读取扇区的顺序是什么,int 13h从提供的(软盘)磁盘几何形状开始,即 2 个磁头、每个磁道 18 个扇区和每侧 80 个磁道。ah=02h19(C, H, S) = (0, 0, 1)

或者,更一般地说,当它到达磁道 0 的末端,磁头 0 时会发生什么?它是去磁道 1 还是磁头 1?在这种情况下它甚至可以正常工作吗?

编辑:等等..这实际上像小时、分钟、秒吗?如果我们到达轨道的尽头(S 大于 18),那么 H 会增加吗?

0 投票
0 回答
72 浏览

assembly - 簇和FAT之间的汇编语言msdos源代码等式

在 github 上翻阅旧的 MS dos 源代码,我发现了一些奇怪的注释,如下所示。

谁能解释这些?

0 投票
0 回答
46 浏览

assembly - 将原始二进制文件作为软盘加载到 virtualbox 与从 U 盘加载到真实机器上时的二进制输出之间的差异

我不确定这个问题是否有意义,但我一直在写基本的汇编函数以在编写 C 代码时使用(C 代码输出为 16 位汇编,输出为16 位原始二进制文件)。这都是我寻求更好地理解/编写 C 和汇编的追求的一部分,也是我寻求理解操作系统如何在概念级别上运行的所有追求。

为了确保我的功能正常工作,我一直在使用 bios 引导扇区签名以实模式加载原始二进制文件。

当我在 virtualbox 上将二进制文件作为 .flp 加载时,无论是通过 IDE 控制器还是软盘控制器,屏幕上的输出都完全符合预期。有两个单词,中间有空格。

但是,当我使用 U 盘在真实机器上加载相同的代码时,第一个单词中的两个字母丢失了。第二个字的写法完全符合预期。

有什么理由会出现这种差异吗?我在三台不同的真机(不是虚拟盒子)上加载了相同的代码,并且第一个单词中相同的两个字母丢失了。我尝试了不同的 U 盘;我还用两台不同的机器将原始图像加载到 USB 上以确保。

我使用 dd 实用程序编写了我在 virtualbox 上使用的 .flp 图像(同样,virtualbox 的输出没有问题)。我还使用 dd 实用程序将 .flp 映像写入 U 盘。我还将 .bin 直接写入 USB 记忆棒,这并没有什么不同。

我知道代码本身没有任何问题,因为它在 virtualbox 上完美输出。当引导到真机上时,它的第一个单词中奇怪地缺少这两个字母。同样,有两个单词应该输出到屏幕上。

缺少的两个字符不是可能无法普遍支持的奇怪字符;它们都是小写字母。

谢谢你的帮助!

最终编辑:此问题是由 BIOS 从程序中的字节 2-48 对二进制程序执行恶意操作引起的。从迈克尔在评论中的链接来看,这似乎与 BIOS 在启动时处理 USB 记忆棒的方式有关(这解释了为什么当我从虚拟盒中的软盘启动时它不是问题)。当我将程序向下移动 48 个字节时,问题就消失了。

所以我的代码看起来像(在 as86 汇编语法中):

正如我在评论中所说,我很想知道为什么 BIOS 会覆盖 USB 记忆棒的前 512 字节或从 0x7c00 开始的 512 字节内存中的任何内容。我不知道它是什么,是在将内容传输到内存之前覆盖U盘,还是覆盖内存。我可以通过加载程序一次然后在启动加载后对 USB 中的二进制文件执行 hexdump 来找出答案,但我还没有这样做。无论如何,这些位置的覆盖看起来很奇怪,因为仅根据 BIOS 约定使用前 512 个字节(最后带有签名),并且仅根据 BIOS 约定,CPU 在加载后指向 0x7c00进入记忆。所以我想我的意思是 BIOS 肯定知道这些位置会有指令和数据。那么,为什么 BIOS 不在 USB 记忆棒或内存中的其他位置执行它需要做的任何事情(取决于它是在记忆棒上覆盖还是在内存中覆盖)?

0 投票
0 回答
81 浏览

c - 从软盘图像中读取扇区 - 位移?

我正在尝试在 C 中读取和显示软盘的磁盘几何形状。我能够管理前几个条目(据我所知至少它们是正确的),例如:

  • 每个扇区的字节数
  • 每个集群的扇区
  • 引导记录的保留扇区
  • 海外关联公司数量

我的问题是我一直试图找出其余几何形状的位移,这是我被告知要正确读取值的方法。我不相信我的代码有问题,但这就是我正在做的事情(SECTORSIZE 是 const 512)::

注释掉的部分是我仍在研究它们的部分。我几乎只是复制了第一行并更改了字符串名称以匹配。FATS 数量之后的下一个是根目录的最大数量,这是我遇到麻烦的地方。我有每个几何位置的十六进制表示的列表,但位移是让我失望的原因。

但是我也注意到,当我显示文件名时,我正在显示一个额外的随机字符名称。以下是我查找文件名的方式:

据我了解,每 32 个文件名都会有一个新文件名,据我所知,它的工作原理是,除了将这些字符显示为找到的最后一个文件:

  • 文件名:É·╬╩ 

我想对一般位移进行更多说明,例如何时何地进行位移。我试图按照提供给我的示例进行操作,但也许我只是将某些事情复杂化了,而我没有看到。

PS:如果你好奇为什么我有这么多 unsigned int,那是因为我的 IDE 在使用位运算符时会报错

0 投票
2 回答
43 浏览

solaris - 在 Solaris 5.8 上创建适合软盘的多部分存档

我正在尝试使用 tar 将单个文件拆分为足够小的部分,以适合 Solaris 5.8 上的 1.44MB 软盘。

根据下面的参考资料,我应该能够通过使用 k 选项来指定段的大小和 f 选项来指定输出文件来实现这一点。

我尝试了各种格式的命令:

充其量,这会生成一个具有选项之一名称的文件,其大小与原始文件相同。

提供的 tar 实用程序不同于大多数现代 Linux 系统上可用的 GNU tar 实用程序。gtar不可用。我无法在此系统上安装新软件包。

或者,您知道 Solaris 5.8 基本安装中存在的任何其他实用程序吗?

参考:

0 投票
3 回答
73 浏览

c++ - strcmp 不起作用,我似乎不明白为什么 - 转换为 ASCII 代码使程序按预期工作

首先,请不要批评程序的编写方式,因为这是我们在我国学习的内容。

我知道它是 C 和 C++ 的混合体,而且我使用的东西已经过时,但事情就是这样。

所以我必须制作一个程序,将 n 个单词作为输入。然后我必须打印以最后一个作为前缀的单词。

例如

这是我的程序。它按预期工作:

但最初,它看起来像这样:

它会引发一些错误:

我似乎无法理解为什么会发生这种情况。你们中的任何人都可以帮助我理解吗?另外,我应该使用转换为 (unsigned int) 还是只使用 strcmp?

谢谢。

0 投票
0 回答
44 浏览

linux - bash 使用 mbr 创建软盘文件并挂载

我需要创建一个软盘文件来挂载和复制文件。我还需要更改mbr。当我这样做时:

我得到错误

省略最后一个 dd 有效,但那样,我无法控制 mbr。