问题标签 [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 投票
2 回答
2885 浏览

linux - BIOS 是否将 512 字节的引导加载程序复制到 0x7c00

我正在编写内核;在写这么复杂的东西之前,我认为对内核、引导加载程序、寄存器、BIOS 等进行一些理论阅读不仅会有所帮助,而且很有必要。

这篇文章说(我引用):

然后它继续说:

因此,引导扇区加载程序将位于内存地址 0x7C00(如果我是对的)的软盘的 512 字节数据加载到 RAM 中;现在,我的问题是:

  • 由于机器正在启动,RAM必须是空的,所以它加载在 RAM 的 0x0000 处的引导加载程序?
  • (与此上下文无关)有没有办法获得 GRUB Legacy (v .9x) 引导加载程序的源代码解释?
  • 最后,我应该阅读任何文章/书籍以熟悉内核等?

我有 6 年的编程经验,但他们都使用内核使之成为可能的系统上的高级语言。

任何帮助表示赞赏。谢谢!:)

0 投票
3 回答
9063 浏览

assembly - 如何将 bin 文件(512 字节)写入软盘的第一个扇区(扇区 0)?

如何将 .bin 文件写入软盘/虚拟软盘/软盘映像的第一个扇区?

我正在尝试启动一个简单的 512 字节引导加载程序。到处都是“512 字节”的大小,所以我应该已经很好了。

附加信息:

引导加载程序只显示一个字符串,我正在学习简单的汇编。有些工作是在 Windows 中完成的,有些是在Ubuntu 14.04 (Trusty Tahr) 中完成的(如果这很重要的话)。

即使它有引导加载程序标志,它也不会启动。

0 投票
3 回答
212 浏览

assembly - 从汇编语言引导加载程序检查软盘是否可用

我有一个关于如何使用汇编语言检查软盘驱动器是否可用的问题。我检查了 RAM 内存是否足够,但我不知道如何检查软驱是否可用。我试过这个:CMP AH,0 JNE disk_error,但是当我在检查 RAM 之后放这个时,什么也没有发生。当我输入continueToLoad :CMP AX,0 JNE fatal_disk_error时,它工作正常,但加载栏后出现错误消息。Loader 我需要在加载栏之前显示该错误消息。 错误

0 投票
1 回答
430 浏览

linux - 如何将 bin 文件(512 字节)写入软盘 *.img 文件的第一个扇区(扇区 0)?

我知道使用dd if=a.bin of=a.img bs=512 count=1commond 可以在 ubuntu 15.10 中将 bin 文件写入 *.img 文件,我得到的文件大小等于 bin 文件,它很小,我无法将任何其他文件复制到这个 img 文件

如何将 bin 文件写入现有的 img 文件

多谢

0 投票
1 回答
927 浏览

assembly - BIOS int 13h 无法读取第一条轨道

我正在尝试使用 BIOS 中断 13h 从我的 FAT12 引导加载程序从软盘加载扇区号 [head = 0, cylinder(track) = 1, sector = 1]。

我使用子程序read_sectors读取扇区并将其加载到es:bx.

此代码适用于第一个磁道的任何扇区,但它仅从其他磁道的任何扇区读取 0,而这些扇区实际上已填充。以扇区 18 为例,cx0x0041,这是正确的。问题是,中断设置CF,说有错误。它还将 ah(返回码)设置为 1,将 al(读取的扇区)设置为 1。

这是完整的引导加载程序 .asm 文件

我在 qemu 上运行此代码,来自 Ubuntu,并使用

0 投票
1 回答
217 浏览

windows - 如何在 USB 软盘驱动器上使用 10 扇区磁道格式

我正在为旧的合成器/键盘乐器(1980 年代制造)编写软盘提取器/管理器。我的问题:这个软件应该支持 USB 软盘驱动器。它需要以 10 扇区磁道格式读取和写入图像。但 USB 软驱只支持 9 或 18 扇区磁道。我无法找到用我的软件控制它的方法(它似乎被硬编码到驱动器固件中)。

有没有人成功地做到过这一点?我会很感激任何提示

0 投票
1 回答
766 浏览

boot - 在 QEMU 中同时使用多重引导和软盘

我正在尝试开发一个操作系统。我已经完成了OSDev的准系统教程,但在多重引导方面仍然存在一些问题。

据我了解,当我按照教程创建多引导映像时,我有一个 ELF 格式的二进制文件。-kernel当我指定选项时,这个 ELF 可执行文件由 QEMU 加载到内存中。所以我在内存中有一个可执行程序,它有一个入口点。它旁边有一些函数和库。记忆中没有别的东西了。也没有可以读取或写入扇区的软盘或磁盘映像。这主要是因为我没有在这方面向 QEMU 指定任何内容。

但是,我想要实现的是在 QEMU 加载我的 ELF 可执行文件之后,我想要一个可以读取或写入扇区的磁盘或软盘架构。我还想从中加载一些用户程序,或者在其上设置文件系统。到目前为止,我的想法是这样的:

qemu-system-i386 -kernel myKernel.bin -fda myDisk.image

或者,也许,我应该获取我的myKernel.bin文件,用零填充它,直到它与 512 字节对齐,然后将其余的磁盘映像附加到它。

我的问题是如何使用 QEMU 实现此功能。在深入编写磁盘驱动程序之前,我需要知道这样的任务是否可行。如果不可能,我可以采取不同的方法,但这些是我现在的想法。我已经调查过了-initrd,这不是我想要的。我也不希望 QEMU 将任何文件加载到 RAM 中。相反,我想自己操作磁盘映像。关于如何做到这一点的任何建议?

0 投票
1 回答
181 浏览

io - 如何使用 BIOS 中断读取第二张软盘

我需要制作一个可以写入/读取软盘 B 的迷你操作系统(从软盘 A 启动)。

环境是vmware工作站。软盘是 A.img 和 B.img。

在 A.img 中,我设置了一个 MBR 程序和一个 func.bin。我需要在 func.bin 中归档上述函数。以下是其中的代码片段。

然后我得到了返回码:ah = 0x01。它的意思是“非法命令”,但我不知道是什么原因造成的。

我尝试改成mov dl, 0x01mov dl, 0x00A.img)或mov dl, 0x80(硬盘),都成功了。所以我想知道如何解决它。


更新我的问题:
B.img 已设置为“在 vm 运行时自动连接”。

A 大小:31.5KB B 大小:1.44MB

0 投票
1 回答
331 浏览

assembly - 引导加载程序/内核仅在虚拟机中引导

因此,在过去的几周里,我一直在研究用汇编 (x86/x86_64) 编写引导加载程序和内核,虽然我尝试了更复杂的解决方案,但在自己编写之前,我决定尝试一些名为Sinned的用户在此处发布的代码。我的引导加载程序代码是:

我的内核文件是:

我可以很好地组装所有东西,当连接到软盘控制器时,单个二进制文件会在 VirtualBox 内启动。虽然这让我有信心在自己的加载程序和内核上工作,但我希望在裸机上启动它感到满意。

我尝试使用 USB 驱动器引导映像无济于事,并且我确信我正在正确地映像 USB 记忆棒。我开始感觉到我在这里遗漏了一些非常明显的东西。我怀疑这与使用 13h 从“软盘”读取有关,我实际上是在尝试从 USB 读取原始二进制文件。是这样吗?如果是这样,我如何重写引导加载程序以从非特定磁盘而不是软盘读取?

0 投票
1 回答
355 浏览

linux - 创建包含引导加载程序和内核的可引导软盘时出错

我正在尝试为我的 boot.bin 和 kernel.bin 文件创建一个可引导的软盘驱动器。我的 boot.asm 代码是:

我计划使用的方法是使用 dd 创建一个软盘映像并将我的引导加载程序写入第一个扇区,然后挂载它并将我的内核复制到它。

我使用的命令

1- mkdosfs -C floppy.flp 1440, 此命令创建软盘映像

2- dd status=noxfer conv=notrunc if=boot.bin of=floppy.flp,该命令将bootloader烧到第一个扇区

这些命令非常有效,并且我的引导加载程序在第一个扇区成功创建了软盘映像

当我尝试使用以下命令安装软盘映像以将内核复制到其中时,问题就出现了

rm -rf tmp-loop

mkdir tmp-loop && mount -o loop -t vfat floppy.flp tmp-loop && cp kernel.bin tmp-loop/

每次我尝试挂载软盘映像时,我都会收到此错误

这个错误的解决方案是什么?我正在使用 Ubuntu 16.04。