问题标签 [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 回答
748 浏览

x86 - IRQ 6 软盘控制器中断未触发

出于某种原因,IRQ 6 从未在我的 Qemu、Bochs、VMWare 或 VirtualBox 仿真器中运行。我需要某种类型的虚拟软盘驱动器或其他东西吗?这是我的 IRq6 处理程序:

它从不说“IRQ 6 HIT”,不仅如此,在我调用内核的 irq6 的安装函数中:

如您所见,我调用了一个重置​​软盘驱动器控制器的函数。让我们看看那个函数:

您可以在上面看到,我通过检查是否为 1 来等待 IRQ 完成_FloppyDiskIRQ,这是我在它命中时设置的。我也注意到了这个常见的错误。代码永远不会通过该while()循环,因为 IRQ6 永远不会触发。是否有一个原因?如何修复它以便 IRQ 6 可以触发?我想我必须在我的模拟器中添加一些东西(比如我为我的 ATA 控制器添加了一个虚拟硬盘)。

我还通过打印 IRQ 进行了测试,截至目前只有 0、1、12 次(第 6 次)...

完整源代码:https ://github.com/amanuel2/OS_MIRROR

0 投票
1 回答
219 浏览

c - C 程序无法获得软盘驱动器的句柄

我有一个配置了软盘驱动器 (A:) 的 Windows 7 VM。我正在尝试将软盘驱动器的引导扇区读入结构。但是,每次我运行这个程序时,它都找不到软驱。我可以确认它是可访问的。

代码:

输出/错误:

输出截图

系统返回的错误码是2:系统找不到指定的文件。

由于无法打开软盘驱动器,因此结构变量会保存垃圾值。

有人可以帮忙吗?

0 投票
0 回答
706 浏览

vbscript - 使用 autorun.inf 在软盘上运行 .vbs 文件

所以我有一个 1.44MB 的软盘,其中有一个名为 .vbs 的文件autorun.vbs。我autorun.inf在它的根目录上也有一个文件。autorun.inf看起来像这样:

什么都没发生。我尝试将软盘放入我的新 Vista 计算机,但没有任何反应(脚本打开一个MsgBox. 我应该添加autorun.inf什么?

是的,我知道 MS 在 7 中摆脱了 AutoPlay 并为 Vista 进行了更新,但我没有连接到 Internet,我使用的是 Vista SP2。

0 投票
1 回答
577 浏览

assembly - 软盘读取 (AH=0x2, int 0x13) 未完成

在我的引导加载程序的第二阶段,我试图将虚拟软盘上的一些扇区加载到bochs的内存中,但是在调用int 0x13时,例程就不会返回。

我相信我第二阶段的相关代码是:

所有代码都可以在我的Github 存储库中找到。要构建,只需使用BOCHSmake all,然后使用命令运行bochs


我做的第一件事是验证我确实得到了所有参数。r在 bochs 的壳产量中:

ah = 0x2(例程 ID)、al = 0x1(扇区数)、(ch = 0x0柱面编号的低字节)、cl = 0x5(扇区编号和柱面编号的高两位)、dh = 0x0(磁头编号)、dl = 0x0(驱动器编号)。

sreg打印es

并且,正如我所期望的那样bx = 0x0,该扇区被加载到。0x0:0x0


我尝试了几件事:

  1. 加载到物理地址0x600

    我认为在执行 BIOS 中断例程期间覆盖 IVT 或 BDA 可能不是一个好主意,所以我尝试将扇区加载到0x600( es = 0x60, bx = 0x0) (我知道 BDA 的大小只有 256 字节)。结果相同。

  2. 加载磁盘上的第一个扇区

    也许阅读第五个部门以某种方式越界或其他什么?用于读取我的第二阶段的代码int 0x13按预期工作。在int 0x13我的第二阶段是相似的,所以我希望它能够工作。作为测试,我将第二阶段更改为读取扇区 1,但仍然无法正常工作。

  3. 将上半部分归零eax

    我想也许 BIOS 例程中确实存在一个错误,并且以某种方式eax使用而不是ax。我尝试将 ... 的高 16 位部分归零,eax但无济于事。

正如我之前所说,我已经将一些扇区从磁盘加载到内存中。之前的 GPR 的内容int 0x13如下(r在 bochs shell 中获得):

sregyield es:0x8f60,它是 EBDA 之前的动态计算地址。

比较两者,我没有看到可能影响中断例程功能的显着差异,因此问题不在于通过寄存器传递的参数。

有人对该怎么做有其他建议吗?

0 投票
1 回答
909 浏览

assembly - 如何使用 16 位汇编在 DOS 中格式化软盘?

我在旧书中学习 DOS 的 x86 汇编编程,在关于中断的讨论中,我看到了 13h 那个。书上说我可以用它来格式化驱动器。但不幸的是,我的书中没有提供更多关于如何做到这一点的信息。

我变得很好奇,并试图自己使用它,但它不起作用。如何使用 16 位 x86 程序集格式化驱动器 A: 中的软盘?做起来简单吗?我正在使用 TASM 编译和链接,并在 MS-DOS 中运行。

也许除了使用之外还有其他方法int 13h吗?

0 投票
2 回答
265 浏览

c - 禁止“将软盘插入驱动器 X:”

我正在尝试检查驱动器 A 中是否存在任何磁盘:(在我的程序安装后,我需要确保计算机不会从安装软盘启动)。我尝试过使用 _access 方法(未定义的引用...)、FILE* 并在软盘内创建目录并在检查后将其删除。不幸的是,DOS 显示关于将磁盘放入驱动器的丑陋文本(破坏我的 TUI 并使用户认为驱动器中的软盘很重要)。那么如何抑制此消息,或安全地检查驱动器中是否存在磁盘?

0 投票
1 回答
673 浏览

windows - 如何在 Windows 10 pro 64 位上将二进制文件刻录到通过软盘 USB 插入的软盘的扇区 0

大家好,我正在Assembly 16 bit NASM windows 10 64 bit(具体来说)编写一个操作系统并将其编译为2个二进制.bin文件:
kernel.bin
boot.bin
你可能猜到boot.bin加载kernel.bin和做一个文件系统,没关系。但问题是我需要在真机上测试它来测试硬件的反应,而不仅仅是虚拟机!所以我得到了软盘(3.5" 1.44MB),这已经绰绰有余了,但是我尝试将引导加载程序(boot.bin)写入带有软盘USB驱动器的软盘的扇区0(驱动器和软盘正在以它们应该的方式工作! ) 我使用以下步骤将操作系统放在 cmd 中的软盘上:

它启动......但不正确:它说:

请删除所有媒体...按任意键重新启动...`

它重新启动到 Windows 10

问题

我怎样才能解决这个问题?我现在在 dosbox 中使用 dosbox 和 debug.exe(来自 windows 7 x32 的 debug.exe),例如:我复制内核并刻录加载程序,但它实际上可以工作!并加载我的操作系统!

0 投票
0 回答
65 浏览

assembly - 汇编中软盘上各种文件的内存访问


当我尝试从程序集访问软盘时,我无法解决软盘上的内存映射问题。
顺便说一句,我的操作系统项目有一些基本的东西。

现在一切正常。

现在,在第三个文件中,我正在尝试打印另一个变量,但它正在打印随机字符。

我录制到软盘映像并在 Linux 的 qemu-system-i386 模拟器中引导的每个文件。

0 投票
1 回答
184 浏览

c# - 如何检测插入的软盘然后复制文件?

我有一船载有图像的旧软盘。我想复制它们,但它们的文件名经常重复。我有一个批处理文件,可以复制和重命名文件,但每次插入光盘时都必须运行它。我试图制作一个 C# 应用程序来检测驱动器状态何时更改,然后根据当前日期/时间自动复制和重命名文件。

提前致谢。

0 投票
0 回答
157 浏览

java - Disable Caching When Reading from Floppy

TLDR: 如果您在 MacOS 上轮询软盘,请使用 rdisk 并清理该文件上的所有句柄!

晚上好!

我想用一些旧的软盘作为身份证,所以我需要知道何时将一张软盘插入我的 USB 读卡器。由 Sony 制造的阅读器在 Linux 和 MacOS 下显示为磁盘驱动器,这让我认为(如果我错了,请纠正我)当我插入软盘时我不会从它那里得到信号。所以我转向投票。我在下面编写了 Java,它使用 FileReader 轮询原始磁盘,直到它可以读取某些内容然后返回。我做同样的事情inverse = true来检测卡何时弹出。第一步工作并在插入磁盘时返回。尝试检测磁盘的删除时出现了我的问题。某些东西正在缓存数据,因为当我弹出软盘时,System.out.println(f.read());会不断打印存储在软盘上的第一个字符的字符代码。但是,当我调用head -c 100 /dev/disk2,它会正确检测读取错误。什么可能存储读取的字节,我如何强制 Java 直接从磁盘刷新数据?

这是我的完整程序的输出。

驱动连接。没有软盘

驱动连接。软盘插入。读取先打印的数据。

驱动连接。软盘已移除

编辑:2018 年 8 月 20 日

我回答了我自己的问题。我的方法中有两个错误。首先是我从 中读取/dev/disk2,它实现了缓存,而不是/dev/rdisk2没有。第二个问题是我在设备上留下了打开的文件句柄,使其处于无效状态。使用 try/catch/finally 我现在确保我FileReader的 for/dev/rdisk2总是关闭,尽管预期 IOExceptions。这是修改后的代码。