如何在空虚拟机(virtualbox,vmware)实例中运行汇编代码?
我想尝试编写一个简单的bootloader.我的目标是为业余爱好操作系统工作.
我正在开发一个32位,保护模式的业余爱好操作系统.目前,我希望增加简单的声音支持.为此,我希望使用声音冲击波16并使用直接模式写入DAC(我想不惜一切代价避免使用DMA).但是,当我向DAC输出一个简单的方波(使用命令0x10)时,我的计算机扬声器没有声音输出.我正在寻找这个问题的解决方案.
我试图使用以下算法来产生声音:
1. Reset DSP
2. Enable the speakers
3. Write 0x10 to 0x22C (direct mode DAC write command)
4. Write 0x00 to 0x22C (To set the speaker to low)
5. Write 0x10 to 0x22C
6. Write 0xFF to 0x22C (To set the speaker to high)
7. Jump back to step 4 and repeat.
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
#define DSP_RESET 0x226
#define DSP_READ 0x22A
#define DSP_WRITE 0x22C
#define DSP_READ_STATUS 0x22E
#define DSP_INT_ACK 0x22F
#define REG_ADDR 0x224
#define REG_DATA 0x225
#define DIRECT_DAC 0x10
#define …Run Code Online (Sandbox Code Playgroud) x86 CPU有真实和虚幻的模式,与保护模式相反.BIOS提供访问硬件的基本驱动程序.操作系统可以使用这些驱动程序吗?
当然MS-DOS就是那种操作系统,但它也有内存限制问题.
维基百科说,操作系统也必须处于实模式才能使用BIOS驱动程序,因为BIOS是一个实模式程序.还有系统维护模式,但它是否连接到BIOS驱动程序?
基本思想是使用BIOS驱动程序来拥有极小的操作系统.这当然是业余爱好(拥有自己的小型操作系统只是一个令人兴奋的前景).
任何人都可以解释是否可能并且可以访问整个内存?
实模式似乎与CPU不同,也许最新处理器为此模式提供了更多功能.
大多数操作系统都是以保护模式编写的,因为实模式不能执行多任务处理和单独的权限.但对我来说没有多任务和没有特权是可以的,我说的是业余爱好操作系统.重要的是重用BIOS驱动程序,因为编写驱动程序是操作系统开发中最困难的部分.
如果整个操作系统是基于解释器的,则可以"模拟"多任务处理.
总结一下,请分析编写x86 Real Mode OS的可能性,包括磁盘,图形,内存,CPU资源和整体.
我认为这是一个简单的问题,但我找不到答案.我主要是阅读这些规格:
http://www.nongnu.org/ext2-doc/ext2.html
似乎没有提到目录条目的名称是否应该以空值终止.我认为这是未定义的.有一个name_len字段,因此您可以轻松打印该名称.
ext2目录名是否保证以null结尾?
我问,因为在我的业余爱好操作系统上测试我的ext2驱动程序时,我注意到当我打印一些目录名时,最后会出现一些垃圾字符.如果我只是打印name_len字符,一切都很好,虽然它是好的,如果它是空终止的.
谢谢!
所以我有一个最小的操作系统没有做太多.有一个引导加载程序,它以32位保护模式加载基本的C内核.如何在C库中移植以便我可以使用类似的东西printf?我正在寻找使用GNU C库.在任何地方都有教程吗?